Do not run crons for disabled repos (#5884)

This commit is contained in:
qwerty287
2025-12-20 11:45:30 +01:00
committed by GitHub
parent cdefb2842c
commit 87b73060f3
2 changed files with 13 additions and 7 deletions

View File

@@ -50,7 +50,7 @@ func (s storage) CronDelete(repo *model.Repo, id int64) error {
// CronListNextExecute returns limited number of jobs with NextExec being less or equal to the provided unix timestamp.
func (s storage) CronListNextExecute(nextExec, limit int64) ([]*model.Cron, error) {
crons := make([]*model.Cron, 0, limit)
return crons, s.engine.Where(builder.Lte{"next_exec": nextExec}).Limit(int(limit)).Find(&crons)
return crons, s.engine.Join("INNER", "repos", "repos.id = crons.repo_id").Where(builder.Lte{"next_exec": nextExec}).And(builder.Eq{"repos.active": true}).Limit(int(limit)).Find(&crons)
}
// CronGetLock try to get a lock by updating NextExec.

View File

@@ -43,20 +43,26 @@ func TestCronCreate(t *testing.T) {
}
func TestCronListNextExecute(t *testing.T) {
store, closer := newTestStore(t, new(model.Cron))
store, closer := newTestStore(t, new(model.Cron), new(model.Repo))
defer closer()
repo1 := &model.Repo{Name: "aaaa", Owner: "a", FullName: "a/aaaa", ForgeRemoteID: "1", IsActive: true}
repo2 := &model.Repo{Name: "bbbb", Owner: "a", FullName: "a/bbbb", ForgeRemoteID: "2", IsActive: false}
assert.NoError(t, store.CreateRepo(repo1))
assert.NoError(t, store.CreateRepo(repo2))
jobs, err := store.CronListNextExecute(0, 10)
assert.NoError(t, err)
assert.Len(t, jobs, 0)
now := time.Now().Unix()
assert.NoError(t, store.CronCreate(&model.Cron{Schedule: "@every 1h", Name: "some", RepoID: 1, NextExec: now}))
assert.NoError(t, store.CronCreate(&model.Cron{Schedule: "@every 1h", Name: "aaaa", RepoID: 1, NextExec: now}))
assert.NoError(t, store.CronCreate(&model.Cron{Schedule: "@every 1h", Name: "bbbb", RepoID: 1, NextExec: now}))
assert.NoError(t, store.CronCreate(&model.Cron{Schedule: "@every 1h", Name: "none", RepoID: 1, NextExec: now + 1000}))
assert.NoError(t, store.CronCreate(&model.Cron{Schedule: "@every 1h", Name: "test", RepoID: 1, NextExec: now + 2000}))
assert.NoError(t, store.CronCreate(&model.Cron{Schedule: "@every 1h", Name: "some", RepoID: repo1.ID, NextExec: now}))
assert.NoError(t, store.CronCreate(&model.Cron{Schedule: "@every 1h", Name: "aaaa", RepoID: repo1.ID, NextExec: now}))
assert.NoError(t, store.CronCreate(&model.Cron{Schedule: "@every 1h", Name: "bbbb", RepoID: repo1.ID, NextExec: now}))
assert.NoError(t, store.CronCreate(&model.Cron{Schedule: "@every 1h", Name: "none", RepoID: repo1.ID, NextExec: now + 1000}))
assert.NoError(t, store.CronCreate(&model.Cron{Schedule: "@every 1h", Name: "test", RepoID: repo1.ID, NextExec: now + 2000}))
assert.NoError(t, store.CronCreate(&model.Cron{Schedule: "@every 1h", Name: "disabled-repo", RepoID: repo2.ID, NextExec: now}))
jobs, err = store.CronListNextExecute(now, 10)
assert.NoError(t, err)