Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refresh job token before triggering job #1685

Merged
merged 1 commit into from
Aug 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/next_deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
26 changes: 26 additions & 0 deletions next/dbmodels/storage.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package dbmodels

import (
"encoding/json"
"errors"
"fmt"
"github.com/dchest/uniuri"
Expand Down Expand Up @@ -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)
Expand Down
12 changes: 12 additions & 0 deletions next/services/runs.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand Down
6 changes: 6 additions & 0 deletions next/services/scheduler.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
Loading