From bffa551ac928ef9aa9c8b124b829dc96603b7b56 Mon Sep 17 00:00:00 2001 From: Earl Warren Date: Thu, 9 Mar 2023 10:56:38 +0100 Subject: [PATCH] [ACTIONS] forgejo actions --registration-token-admin (cherry picked from commit 481d813539762af6670b2cb4d3e893ab27dfe544) address oliverpool comments (cherry picked from commit d8f313f9e21ceea7b113fc04938fa4ffea577d9e) s/Printf/Print/ (cherry picked from commit 6621b04458b9fbaf8b6664efd86886b2ebbec01d) do not run initDB within integration tests (cherry picked from commit 5a0428ede3e8f242860d121ab3ee8712a1fe2f14) (cherry picked from commit d3ebc9449c27f1c87d74b46eeb9b5cd9a0a8ec57) (cherry picked from commit 411bc5ac69edb9605cf1c3f590dde37a06bd9a89) (cherry picked from commit 9de9a916a6276d6ae87a4a31f9a36fd48c7d6a4d) --- cmd/actions.go | 68 +++++++++++++++++++++++++++ main.go | 1 + tests/integration/cmd_actions_test.go | 50 ++++++++++++++++++++ 3 files changed, 119 insertions(+) create mode 100644 cmd/actions.go create mode 100644 tests/integration/cmd_actions_test.go diff --git a/cmd/actions.go b/cmd/actions.go new file mode 100644 index 0000000000..7a3bb7f226 --- /dev/null +++ b/cmd/actions.go @@ -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 +} diff --git a/main.go b/main.go index eeedf54c27..f004d58bea 100644 --- a/main.go +++ b/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, diff --git a/tests/integration/cmd_actions_test.go b/tests/integration/cmd_actions_test.go new file mode 100644 index 0000000000..6b74d31628 --- /dev/null +++ b/tests/integration/cmd_actions_test.go @@ -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 + }) + } + }) +}