Fix orphaned pipelines after repo delete (#6971)

This commit is contained in:
qwerty287
2026-08-17 22:25:52 +02:00
committed by GitHub
parent c77de503c5
commit 1992b586d8
2 changed files with 49 additions and 4 deletions
+3 -4
View File
@@ -103,7 +103,6 @@ func (s storage) DeleteRepo(repo *model.Repo) error {
}
func (s storage) deleteRepo(sess *xorm.Session, repo *model.Repo) error {
const batchSize = perPage
if _, err := sess.Where("repo_id = ?", repo.ID).Delete(new(model.Config)); err != nil {
return err
}
@@ -121,9 +120,9 @@ func (s storage) deleteRepo(sess *xorm.Session, repo *model.Repo) error {
}
// delete related pipelines
for startPipelines := 0; ; startPipelines += batchSize {
pipelineIDs := make([]int64, 0, batchSize)
if err := sess.Limit(batchSize, startPipelines).Table("pipelines").Cols("id").Where("repo_id = ?", repo.ID).Find(&pipelineIDs); err != nil {
for {
pipelineIDs := make([]int64, 0, perPage)
if err := sess.Limit(perPage).Table("pipelines").Cols("id").Where("repo_id = ?", repo.ID).Find(&pipelineIDs); err != nil {
return err
}
if len(pipelineIDs) == 0 {
+46
View File
@@ -349,6 +349,52 @@ func TestRepoCrud(t *testing.T) {
assert.EqualValues(t, 1, pipelineCount)
}
func TestRepoDelete(t *testing.T) {
store, closer := newTestStore(t,
new(model.Repo),
new(model.User),
new(model.Perm),
new(model.Pipeline),
new(model.PipelineConfig),
new(model.LogEntry),
new(model.Step),
new(model.Secret),
new(model.Registry),
new(model.Config),
new(model.Redirection),
new(model.Workflow))
defer closer()
repo := model.Repo{
ForgeID: 1,
ForgeRemoteID: "bradrydzewskitest",
UserID: 1,
FullName: "bradrydzewski/test",
Owner: "bradrydzewski",
Name: "test",
}
assert.NoError(t, store.CreateRepo(&repo))
// create 60 new pipelines to test more than one page is deleted
for range 60 {
pipeline := model.Pipeline{
RepoID: repo.ID,
}
step := model.Step{
Name: "a step",
}
assert.NoError(t, store.CreatePipeline(&pipeline, &step))
}
assert.NoError(t, store.DeleteRepo(&repo))
stepCount, err := store.engine.Count(new(model.Step))
assert.NoError(t, err)
assert.EqualValues(t, 0, stepCount)
pipelineCount, err := store.engine.Count(new(model.Pipeline))
assert.NoError(t, err)
assert.EqualValues(t, 0, pipelineCount)
}
func TestRepoRedirection(t *testing.T) {
store, closer := newTestStore(t,
new(model.Repo),