-
-
Notifications
You must be signed in to change notification settings - Fork 5.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Support configuration variables on Gitea Actions (#24724)
Co-Author: @silverwind @wxiaoguang Replace: #24404 See: - [defining configuration variables for multiple workflows](https://docs.github.com/en/actions/learn-github-actions/variables#defining-configuration-variables-for-multiple-workflows) - [vars context](https://docs.github.com/en/actions/learn-github-actions/contexts#vars-context) Related to: - [x] protocol: https://gitea.com/gitea/actions-proto-def/pulls/7 - [x] act_runner: https://gitea.com/gitea/act_runner/pulls/157 - [x] act: https://gitea.com/gitea/act/pulls/43 #### Screenshoot Create Variable: ![image](https://user-images.githubusercontent.com/33891828/236758288-032b7f64-44e7-48ea-b07d-de8b8b0e3729.png) ![image](https://user-images.githubusercontent.com/33891828/236758174-5203f64c-1d0e-4737-a5b0-62061dee86f8.png) Workflow: ```yaml test_vars: runs-on: ubuntu-latest steps: - name: Print Custom Variables run: echo "${{ vars.test_key }}" - name: Try to print a non-exist var run: echo "${{ vars.NON_EXIST_VAR }}" ``` Actions Log: ![image](https://user-images.githubusercontent.com/33891828/236759075-af0c5950-368d-4758-a8ac-47a96e43b6e2.png) --- This PR just implement the org / user (depends on the owner of the current repository) and repo level variables, The Environment level variables have not been implemented. Because [Environment](https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment#about-environments) is a module separate from `Actions`. Maybe it would be better to create a new PR to do it. --------- Co-authored-by: silverwind <me@silverwind.io> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com> Co-authored-by: Giteabot <teabot@gitea.io>
- Loading branch information
1 parent
8220e50
commit 35a653d
Showing
22 changed files
with
680 additions
and
135 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
// Copyright 2023 The Gitea Authors. All rights reserved. | ||
// SPDX-License-Identifier: MIT | ||
|
||
package actions | ||
|
||
import ( | ||
"context" | ||
"errors" | ||
"fmt" | ||
"strings" | ||
|
||
"code.gitea.io/gitea/models/db" | ||
"code.gitea.io/gitea/modules/timeutil" | ||
"code.gitea.io/gitea/modules/util" | ||
|
||
"xorm.io/builder" | ||
) | ||
|
||
type ActionVariable struct { | ||
ID int64 `xorm:"pk autoincr"` | ||
OwnerID int64 `xorm:"UNIQUE(owner_repo_name)"` | ||
RepoID int64 `xorm:"INDEX UNIQUE(owner_repo_name)"` | ||
Name string `xorm:"UNIQUE(owner_repo_name) NOT NULL"` | ||
Data string `xorm:"LONGTEXT NOT NULL"` | ||
CreatedUnix timeutil.TimeStamp `xorm:"created NOT NULL"` | ||
UpdatedUnix timeutil.TimeStamp `xorm:"updated"` | ||
} | ||
|
||
func init() { | ||
db.RegisterModel(new(ActionVariable)) | ||
} | ||
|
||
func (v *ActionVariable) Validate() error { | ||
if v.OwnerID == 0 && v.RepoID == 0 { | ||
return errors.New("the variable is not bound to any scope") | ||
} | ||
return nil | ||
} | ||
|
||
func InsertVariable(ctx context.Context, ownerID, repoID int64, name, data string) (*ActionVariable, error) { | ||
variable := &ActionVariable{ | ||
OwnerID: ownerID, | ||
RepoID: repoID, | ||
Name: strings.ToUpper(name), | ||
Data: data, | ||
} | ||
if err := variable.Validate(); err != nil { | ||
return variable, err | ||
} | ||
return variable, db.Insert(ctx, variable) | ||
} | ||
|
||
type FindVariablesOpts struct { | ||
db.ListOptions | ||
OwnerID int64 | ||
RepoID int64 | ||
} | ||
|
||
func (opts *FindVariablesOpts) toConds() builder.Cond { | ||
cond := builder.NewCond() | ||
if opts.OwnerID > 0 { | ||
cond = cond.And(builder.Eq{"owner_id": opts.OwnerID}) | ||
} | ||
if opts.RepoID > 0 { | ||
cond = cond.And(builder.Eq{"repo_id": opts.RepoID}) | ||
} | ||
return cond | ||
} | ||
|
||
func FindVariables(ctx context.Context, opts FindVariablesOpts) ([]*ActionVariable, error) { | ||
var variables []*ActionVariable | ||
sess := db.GetEngine(ctx) | ||
if opts.PageSize != 0 { | ||
sess = db.SetSessionPagination(sess, &opts.ListOptions) | ||
} | ||
return variables, sess.Where(opts.toConds()).Find(&variables) | ||
} | ||
|
||
func GetVariableByID(ctx context.Context, variableID int64) (*ActionVariable, error) { | ||
var variable ActionVariable | ||
has, err := db.GetEngine(ctx).Where("id=?", variableID).Get(&variable) | ||
if err != nil { | ||
return nil, err | ||
} else if !has { | ||
return nil, fmt.Errorf("variable with id %d: %w", variableID, util.ErrNotExist) | ||
} | ||
return &variable, nil | ||
} | ||
|
||
func UpdateVariable(ctx context.Context, variable *ActionVariable) (bool, error) { | ||
count, err := db.GetEngine(ctx).ID(variable.ID).Cols("name", "data"). | ||
Update(&ActionVariable{ | ||
Name: variable.Name, | ||
Data: variable.Data, | ||
}) | ||
return count != 0, err | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
// Copyright 2023 The Gitea Authors. All rights reserved. | ||
// SPDX-License-Identifier: MIT | ||
|
||
package v1_21 //nolint | ||
|
||
import ( | ||
"code.gitea.io/gitea/modules/timeutil" | ||
|
||
"xorm.io/xorm" | ||
) | ||
|
||
func CreateVariableTable(x *xorm.Engine) error { | ||
type ActionVariable struct { | ||
ID int64 `xorm:"pk autoincr"` | ||
OwnerID int64 `xorm:"UNIQUE(owner_repo_name)"` | ||
RepoID int64 `xorm:"INDEX UNIQUE(owner_repo_name)"` | ||
Name string `xorm:"UNIQUE(owner_repo_name) NOT NULL"` | ||
Data string `xorm:"LONGTEXT NOT NULL"` | ||
CreatedUnix timeutil.TimeStamp `xorm:"created NOT NULL"` | ||
UpdatedUnix timeutil.TimeStamp `xorm:"updated"` | ||
} | ||
|
||
return x.Sync(new(ActionVariable)) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.