aboutsummaryrefslogtreecommitdiffstats
path: root/models/actions/runner_token.go
diff options
context:
space:
mode:
Diffstat (limited to 'models/actions/runner_token.go')
-rw-r--r--models/actions/runner_token.go26
1 files changed, 18 insertions, 8 deletions
diff --git a/models/actions/runner_token.go b/models/actions/runner_token.go
index fabd6c644c..cf4e90f3f1 100644
--- a/models/actions/runner_token.go
+++ b/models/actions/runner_token.go
@@ -22,7 +22,7 @@ type ActionRunnerToken struct {
Owner *user_model.User `xorm:"-"`
RepoID int64 `xorm:"index"` // repo level runner, if orgid also is zero, then it's a global
Repo *repo_model.Repository `xorm:"-"`
- IsActive bool
+ IsActive bool // true means it can be used
Created timeutil.TimeStamp `xorm:"created"`
Updated timeutil.TimeStamp `xorm:"updated"`
@@ -57,7 +57,7 @@ func UpdateRunnerToken(ctx context.Context, r *ActionRunnerToken, cols ...string
return err
}
-// NewRunnerToken creates a new runner token
+// NewRunnerToken creates a new active runner token and invalidate all old tokens
func NewRunnerToken(ctx context.Context, ownerID, repoID int64) (*ActionRunnerToken, error) {
token, err := util.CryptoRandomString(40)
if err != nil {
@@ -66,17 +66,27 @@ func NewRunnerToken(ctx context.Context, ownerID, repoID int64) (*ActionRunnerTo
runnerToken := &ActionRunnerToken{
OwnerID: ownerID,
RepoID: repoID,
- IsActive: false,
+ IsActive: true,
Token: token,
}
- _, err = db.GetEngine(ctx).Insert(runnerToken)
- return runnerToken, err
+
+ return runnerToken, db.WithTx(ctx, func(ctx context.Context) error {
+ if _, err := db.GetEngine(ctx).Where("owner_id =? AND repo_id = ?", ownerID, repoID).Cols("is_active").Update(&ActionRunnerToken{
+ IsActive: false,
+ }); err != nil {
+ return err
+ }
+
+ _, err = db.GetEngine(ctx).Insert(runnerToken)
+ return err
+ })
}
-// GetUnactivatedRunnerToken returns a unactivated runner token
-func GetUnactivatedRunnerToken(ctx context.Context, ownerID, repoID int64) (*ActionRunnerToken, error) {
+// GetLastestRunnerToken returns the latest runner token
+func GetLastestRunnerToken(ctx context.Context, ownerID, repoID int64) (*ActionRunnerToken, error) {
var runnerToken ActionRunnerToken
- has, err := db.GetEngine(ctx).Where("owner_id=? AND repo_id=? AND is_active=?", ownerID, repoID, false).OrderBy("id DESC").Get(&runnerToken)
+ has, err := db.GetEngine(ctx).Where("owner_id=? AND repo_id=?", ownerID, repoID).
+ OrderBy("id DESC").Get(&runnerToken)
if err != nil {
return nil, err
} else if !has {