@ -22,7 +22,7 @@ type ActionRunnerToken struct {
Owner * user_model . User ` xorm:"-" `
Owner * user_model . User ` xorm:"-" `
RepoID int64 ` xorm:"index" ` // repo level runner, if orgid also is zero, then it's a global
RepoID int64 ` xorm:"index" ` // repo level runner, if orgid also is zero, then it's a global
Repo * repo_model . Repository ` xorm:"-" `
Repo * repo_model . Repository ` xorm:"-" `
IsActive bool
IsActive bool // true means it can be used
Created timeutil . TimeStamp ` xorm:"created" `
Created timeutil . TimeStamp ` xorm:"created" `
Updated timeutil . TimeStamp ` xorm:"updated" `
Updated timeutil . TimeStamp ` xorm:"updated" `
@ -57,7 +57,7 @@ func UpdateRunnerToken(ctx context.Context, r *ActionRunnerToken, cols ...string
return err
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 ) {
func NewRunnerToken ( ctx context . Context , ownerID , repoID int64 ) ( * ActionRunnerToken , error ) {
token , err := util . CryptoRandomString ( 40 )
token , err := util . CryptoRandomString ( 40 )
if err != nil {
if err != nil {
@ -66,17 +66,27 @@ func NewRunnerToken(ctx context.Context, ownerID, repoID int64) (*ActionRunnerTo
runnerToken := & ActionRunnerToken {
runnerToken := & ActionRunnerToken {
OwnerID : ownerID ,
OwnerID : ownerID ,
RepoID : repoID ,
RepoID : repoID ,
IsActive : fals e,
IsActive : tru e,
Token : token ,
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
// Get LastestRunnerToken returns the latest runner token
func GetUnactivatedRunnerToken ( ctx context . Context , ownerID , repoID int64 ) ( * ActionRunnerToken , error ) {
func Get Lastest RunnerToken( ctx context . Context , ownerID , repoID int64 ) ( * ActionRunnerToken , error ) {
var runnerToken ActionRunnerToken
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 {
if err != nil {
return nil , err
return nil , err
} else if ! has {
} else if ! has {