mirror of https://github.com/go-gitea/gitea.git
Browse Source
* repository deletion, delete ephemeral runners with active tasks as well skips regular cleanup * user deletion, delete ephemeral runners with active tasks as well skips regular cleanup * delete ephemeral runners once status changes to done * You no longer see used ephemeral runners after the task is done * if you see one the cron job takes care of itpull/34508/head
8 changed files with 172 additions and 12 deletions
@ -0,0 +1,79 @@
@@ -0,0 +1,79 @@
|
||||
// Copyright 2025 The Gitea Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package integration |
||||
|
||||
import ( |
||||
"testing" |
||||
|
||||
actions_model "code.gitea.io/gitea/models/actions" |
||||
"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" |
||||
|
||||
"github.com/stretchr/testify/assert" |
||||
) |
||||
|
||||
func TestEphemeralActionsRunnerDeletion(t *testing.T) { |
||||
t.Run("ByTaskCompletion", testEphemeralActionsRunnerDeletionByTaskCompletion) |
||||
t.Run("ByRepository", testEphemeralActionsRunnerDeletionByRepository) |
||||
t.Run("ByUser", testEphemeralActionsRunnerDeletionByUser) |
||||
} |
||||
|
||||
// Test that the ephemeral runner is deleted when the task is finished
|
||||
func testEphemeralActionsRunnerDeletionByTaskCompletion(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) |
||||
|
||||
task.Status = actions_model.StatusSuccess |
||||
err = actions_model.UpdateTask(t.Context(), task, "status") |
||||
assert.NoError(t, err) |
||||
|
||||
_, err = actions_model.GetRunnerByID(t.Context(), 34350) |
||||
assert.ErrorIs(t, err, util.ErrNotExist) |
||||
} |
||||
|
||||
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)() |
||||
|
||||
_, 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 = user_service.DeleteUser(t.Context(), user, true) |
||||
assert.NoError(t, err) |
||||
|
||||
_, err = actions_model.GetRunnerByID(t.Context(), 34350) |
||||
assert.ErrorIs(t, err, util.ErrNotExist) |
||||
} |
||||
Loading…
Reference in new issue