Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
...
  • Loading branch information
ChristopherHX committed May 14, 2025
commit d2af3ea701b3249601cf7fdf551df1845ff0b809
1 change: 1 addition & 0 deletions models/actions/task.go
Original file line number Diff line number Diff line change
Expand Up @@ -337,6 +337,7 @@ func UpdateTask(ctx context.Context, task *ActionTask, cols ...string) error {
}
_, err := sess.Update(task)

// Automatically delete the ephemeral runner if the task is done
if err == nil && task.Status.IsDone() && util.SliceContainsString(cols, "status") {
return DeleteEphemeralRunner(ctx, task.RunnerID)
}
Expand Down
4 changes: 2 additions & 2 deletions services/actions/cleanup.go
Original file line number Diff line number Diff line change
Expand Up @@ -155,8 +155,8 @@ func CleanupEphemeralRunners(ctx context.Context) error {
return nil
}

// CleanupEphemeralRunnersByPickedTaskRepoID removes all ephemeral runners that have active/finished tasks on the given repository
func CleanupEphemeralRunnersByPickedTaskRepoID(ctx context.Context, repoID int64) error {
// CleanupEphemeralRunnersByPickedTaskOfRepo removes all ephemeral runners that have active/finished tasks on the given repository
func CleanupEphemeralRunnersByPickedTaskOfRepo(ctx context.Context, repoID int64) error {
subQuery := builder.Select("`action_runner`.id").
From(builder.Select("*").From("`action_runner`"), "`action_runner`"). // mysql needs this redundant subquery
Join("INNER", "`action_task`", "`action_task`.`runner_id` = `action_runner`.`id`").
Expand Down
4 changes: 2 additions & 2 deletions services/repository/delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -134,11 +134,11 @@ func DeleteRepositoryDirectly(ctx context.Context, doer *user_model.User, repoID
return err
}

// CleanupEphemeralRunnersByPickedTaskRepoID does delete ephemeral global/org/user that have started any task of this repo
// CleanupEphemeralRunnersByPickedTaskOfRepo deletes ephemeral global/org/user that have started any task of this repo
// The cannot pick a second task hardening for ephemeral runners expect that task objects remain available until runner deletion
// This method will delete affected ephemeral global/org/user runners
// &actions_model.ActionRunner{RepoID: repoID} does only handle ephemeral repository runners
if err := actions_service.CleanupEphemeralRunnersByPickedTaskRepoID(ctx, repoID); err != nil {
if err := actions_service.CleanupEphemeralRunnersByPickedTaskOfRepo(ctx, repoID); err != nil {
return fmt.Errorf("cleanupEphemeralRunners: %w", err)
}

Expand Down
21 changes: 0 additions & 21 deletions tests/integration/actions_runner_ephemeral_deletion_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import (
"code.gitea.io/gitea/models/unittest"
user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/util"
repo_service "code.gitea.io/gitea/services/repository"
user_service "code.gitea.io/gitea/services/user"
"code.gitea.io/gitea/tests"

Expand All @@ -19,7 +18,6 @@ import (

func TestActionsRunnerEphemeralDeletion(t *testing.T) {
t.Run("ByTaskCompletion", testEphemeralActionsRunnerDeletionByTaskCompletion)
t.Run("ByRepository", testEphemeralActionsRunnerDeletionByRepository)
t.Run("ByUser", testEphemeralActionsRunnerDeletionByUser)
}

Expand All @@ -41,25 +39,6 @@ func testEphemeralActionsRunnerDeletionByTaskCompletion(t *testing.T) {
assert.ErrorIs(t, err, util.ErrNotExist)
}

// Test that the ephemeral runner is deleted when a repository is deleted
func testEphemeralActionsRunnerDeletionByRepository(t *testing.T) {
defer tests.PrepareTestEnv(t)()

_, err := actions_model.GetRunnerByID(t.Context(), 34350)
assert.NoError(t, err)

task := unittest.AssertExistsAndLoadBean(t, &actions_model.ActionTask{ID: 52})
assert.Equal(t, actions_model.StatusRunning, task.Status)

user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})

err = repo_service.DeleteRepositoryDirectly(t.Context(), user, task.RepoID, true)
assert.NoError(t, err)

_, err = actions_model.GetRunnerByID(t.Context(), 34350)
assert.ErrorIs(t, err, util.ErrNotExist)
}

// Test that the ephemeral runner is deleted when a user is deleted
func testEphemeralActionsRunnerDeletionByUser(t *testing.T) {
defer tests.PrepareTestEnv(t)()
Expand Down
Loading