mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2026-02-13 21:00:00 +00:00
Do not run crons for disabled repos (#5884)
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user