diff --git a/.github/workflows/next_deploy.yml b/.github/workflows/next_deploy.yml index 4201c872b..fd6ccfb19 100644 --- a/.github/workflows/next_deploy.yml +++ b/.github/workflows/next_deploy.yml @@ -3,7 +3,7 @@ on: push: branches: - develop # change to main if needed - - fix/use-correct-installation-id-for-queue-item + - fix/refresh-jobtoken-before-run jobs: deploy: name: Deploy app diff --git a/next/dbmodels/storage.go b/next/dbmodels/storage.go index 073a6319a..ae81b274c 100644 --- a/next/dbmodels/storage.go +++ b/next/dbmodels/storage.go @@ -1,6 +1,7 @@ package dbmodels import ( + "encoding/json" "errors" "fmt" "github.com/dchest/uniuri" @@ -1184,6 +1185,31 @@ func (db *Database) CreateDiggerJobToken(organisationId string) (*model.DiggerJo return jobToken, nil } +func (db *Database) RefreshDiggerJobTokenExpiry(job *model.DiggerJob) error { + // refresh the job token + var jobSpec scheduler.JobJson + err := json.Unmarshal(job.JobSpec, &jobSpec) + if err != nil { + log.Printf("could not unmarshal job string: %v", err) + return fmt.Errorf("could not marshal json string: %v", err) + } + + jobToken := &model.DiggerJobToken{} + err = db.GormDB.First(jobToken, "value = ?", jobSpec.BackendJobToken).Error + if err != nil { + log.Printf("could not find job token: %v", err) + return fmt.Errorf("could not find job token: %v", err) + } + + jobToken.Expiry = time.Now().Add(time.Hour * 2) + err = db.GormDB.Save(jobToken).Error + if err != nil { + log.Printf("could not update job token: %v", err) + return fmt.Errorf("could not update job token: %v", err) + } + return nil +} + func (db *Database) GetJobToken(tenantId any) (*model.DiggerJobToken, error) { token := &model.DiggerJobToken{} result := db.GormDB.Take(token, "value = ?", tenantId) diff --git a/next/services/runs.go b/next/services/runs.go index d17a08814..4ebc1005d 100644 --- a/next/services/runs.go +++ b/next/services/runs.go @@ -68,6 +68,12 @@ func RunQueuesStateMachine(queueItem *model.DiggerRunQueueItem, service ci.PullR return fmt.Errorf("could not get vcs token: %v", err) } + err = dbmodels.DB.RefreshDiggerJobTokenExpiry(planJob) + if err != nil { + log.Printf("could not refresh job token expiry: %v", err) + return fmt.Errorf("could not refresh job token from expiry: %v", err) + } + ciBackend.TriggerWorkflow(*spec, *runName, *vcsToken) // change status to RunPendingPlan @@ -151,6 +157,12 @@ func RunQueuesStateMachine(queueItem *model.DiggerRunQueueItem, service ci.PullR return fmt.Errorf("could not get spec: %v", err) } + err = dbmodels.DB.RefreshDiggerJobTokenExpiry(job) + if err != nil { + log.Printf("could not refresh job token expiry: %v", err) + return fmt.Errorf("could not refresh job token from expiry: %v", err) + } + ciBackend.TriggerWorkflow(*spec, *runName, *vcsToken) dr.Status = string(dbmodels.RunApplying) diff --git a/next/services/scheduler.go b/next/services/scheduler.go index dbff9c362..40f399e78 100644 --- a/next/services/scheduler.go +++ b/next/services/scheduler.go @@ -77,6 +77,12 @@ func TriggerJob(gh utils.GithubClientProvider, ciBackend ci_backends.CiBackend, return fmt.Errorf("could not get variable spec from job: %v", err) } + err = dbmodels.DB.RefreshDiggerJobTokenExpiry(job) + if err != nil { + log.Printf("could not refresh job token expiry: %v", err) + return fmt.Errorf("could not refresh job token from expiry: %v", err) + } + spec, err := GetSpecFromJob(*job) if err != nil { log.Printf("could not get spec: %v", err)