mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-10-25 11:33:11 +00:00
[ACTIONS] forgejo actions --registration-token-admin
(cherry picked from commit481d813539) address oliverpool comments (cherry picked from commitd8f313f9e2) s/Printf/Print/ (cherry picked from commit6621b04458) do not run initDB within integration tests (cherry picked from commit5a0428ede3) (cherry picked from commite8287b753d) (cherry picked from commitfc2b49e571) (cherry picked from commita291b39b23) (cherry picked from commitb8d4953405)
This commit is contained in:
parent
d4d6046f98
commit
e14de756ab
3 changed files with 119 additions and 0 deletions
68
cmd/actions.go
Normal file
68
cmd/actions.go
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"log"
|
||||
|
||||
actions_model "code.gitea.io/gitea/models/actions"
|
||||
"code.gitea.io/gitea/modules/setting"
|
||||
"code.gitea.io/gitea/modules/util"
|
||||
|
||||
"github.com/urfave/cli"
|
||||
)
|
||||
|
||||
// CmdActions represents the available actions sub-command.
|
||||
var CmdActions = cli.Command{
|
||||
Name: "actions",
|
||||
Usage: "Actions",
|
||||
Description: "Actions",
|
||||
Action: runActions,
|
||||
Flags: []cli.Flag{
|
||||
cli.BoolFlag{
|
||||
Name: "registration-token-admin",
|
||||
Usage: "Show the runner registration admin token",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
func maybeInitDB(stdCtx context.Context) error {
|
||||
if setting.Database.Type == "" {
|
||||
if err := initDB(stdCtx); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func runActions(ctx *cli.Context) error {
|
||||
stdCtx := context.Background()
|
||||
|
||||
if err := maybeInitDB(stdCtx); err != nil {
|
||||
log.Fatalf("maybeInitDB %v", err)
|
||||
}
|
||||
|
||||
if ctx.Bool("registration-token-admin") {
|
||||
// ownid=0,repo_id=0,means this token is used for global
|
||||
return runActionsRegistrationToken(stdCtx, 0, 0)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func runActionsRegistrationToken(stdCtx context.Context, ownerID, repoID int64) error {
|
||||
var token *actions_model.ActionRunnerToken
|
||||
token, err := actions_model.GetUnactivatedRunnerToken(stdCtx, ownerID, repoID)
|
||||
if errors.Is(err, util.ErrNotExist) {
|
||||
token, err = actions_model.NewRunnerToken(stdCtx, ownerID, repoID)
|
||||
if err != nil {
|
||||
log.Fatalf("CreateRunnerToken %v", err)
|
||||
}
|
||||
} else if err != nil {
|
||||
log.Fatalf("GetUnactivatedRunnerToken %v", err)
|
||||
}
|
||||
fmt.Print(token.Token)
|
||||
return nil
|
||||
}
|
||||
1
main.go
1
main.go
|
|
@ -58,6 +58,7 @@ func main() {
|
|||
arguments - which can alternatively be run by running the subcommand web.`
|
||||
app.Version = Version + formatBuiltWith()
|
||||
app.Commands = []cli.Command{
|
||||
cmd.CmdActions,
|
||||
cmd.CmdWeb,
|
||||
cmd.CmdServ,
|
||||
cmd.CmdHook,
|
||||
|
|
|
|||
50
tests/integration/cmd_actions_test.go
Normal file
50
tests/integration/cmd_actions_test.go
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package integration
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"flag"
|
||||
"io"
|
||||
"net/url"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"code.gitea.io/gitea/cmd"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/urfave/cli"
|
||||
)
|
||||
|
||||
func Test_CmdActions(t *testing.T) {
|
||||
onGiteaRun(t, func(*testing.T, *url.URL) {
|
||||
tests := []struct {
|
||||
name string
|
||||
args []string
|
||||
wantErr bool
|
||||
expectedOutput func(string)
|
||||
}{
|
||||
{"test_registration-token-admin", []string{"actions", "--registration-token-admin"}, false, func(output string) { assert.EqualValues(t, 40, len(output), output) }},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
realStdout := os.Stdout
|
||||
r, w, _ := os.Pipe()
|
||||
os.Stdout = w
|
||||
|
||||
set := flag.NewFlagSet("actions", 0)
|
||||
_ = set.Parse(tt.args)
|
||||
context := cli.NewContext(&cli.App{Writer: os.Stdout}, set, nil)
|
||||
err := cmd.CmdActions.Run(context)
|
||||
if (err != nil) != tt.wantErr {
|
||||
t.Errorf("CmdActions.Run() error = %v, wantErr %v", err, tt.wantErr)
|
||||
}
|
||||
w.Close()
|
||||
var buf bytes.Buffer
|
||||
io.Copy(&buf, r)
|
||||
tt.expectedOutput(buf.String())
|
||||
os.Stdout = realStdout
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue