2023-09-06 10:41:06 +03:00
// Copyright 2023 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package actions
import (
"context"
"code.gitea.io/gitea/models/actions"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/storage"
)
// Cleanup removes expired actions logs, data and artifacts
2024-07-30 05:27:28 +03:00
func Cleanup ( taskCtx context . Context ) error {
2023-09-06 10:41:06 +03:00
// TODO: clean up expired actions logs
// clean up expired artifacts
return CleanupArtifacts ( taskCtx )
}
2024-02-18 13:33:50 +03:00
// CleanupArtifacts removes expired add need-deleted artifacts and set records expired status
2023-09-06 10:41:06 +03:00
func CleanupArtifacts ( taskCtx context . Context ) error {
2024-02-18 13:33:50 +03:00
if err := cleanExpiredArtifacts ( taskCtx ) ; err != nil {
return err
}
return cleanNeedDeleteArtifacts ( taskCtx )
}
func cleanExpiredArtifacts ( taskCtx context . Context ) error {
2023-09-06 10:41:06 +03:00
artifacts , err := actions . ListNeedExpiredArtifacts ( taskCtx )
if err != nil {
return err
}
log . Info ( "Found %d expired artifacts" , len ( artifacts ) )
for _ , artifact := range artifacts {
if err := actions . SetArtifactExpired ( taskCtx , artifact . ID ) ; err != nil {
log . Error ( "Cannot set artifact %d expired: %v" , artifact . ID , err )
continue
}
2024-02-18 17:25:14 +03:00
if err := storage . ActionsArtifacts . Delete ( artifact . StoragePath ) ; err != nil {
log . Error ( "Cannot delete artifact %d: %v" , artifact . ID , err )
continue
}
2023-09-06 10:41:06 +03:00
log . Info ( "Artifact %d set expired" , artifact . ID )
}
return nil
}
2024-02-18 13:33:50 +03:00
// deleteArtifactBatchSize is the batch size of deleting artifacts
const deleteArtifactBatchSize = 100
func cleanNeedDeleteArtifacts ( taskCtx context . Context ) error {
for {
artifacts , err := actions . ListPendingDeleteArtifacts ( taskCtx , deleteArtifactBatchSize )
if err != nil {
return err
}
log . Info ( "Found %d artifacts pending deletion" , len ( artifacts ) )
for _ , artifact := range artifacts {
if err := actions . SetArtifactDeleted ( taskCtx , artifact . ID ) ; err != nil {
log . Error ( "Cannot set artifact %d deleted: %v" , artifact . ID , err )
continue
}
2024-02-18 17:25:14 +03:00
if err := storage . ActionsArtifacts . Delete ( artifact . StoragePath ) ; err != nil {
log . Error ( "Cannot delete artifact %d: %v" , artifact . ID , err )
continue
}
2024-02-18 13:33:50 +03:00
log . Info ( "Artifact %d set deleted" , artifact . ID )
}
if len ( artifacts ) < deleteArtifactBatchSize {
log . Debug ( "No more artifacts pending deletion" )
break
}
}
return nil
}