[CLI] implement forgejo-cli actions generate-runner-token

(cherry picked from commit 08be2b226e)
(cherry picked from commit 9a0f6315da)
This commit is contained in:
Earl Warren 2023-07-09 14:52:41 +02:00
parent 78e7eee59a
commit 2f264eeeec
No known key found for this signature in database
GPG key ID: 0579CB2928A78A00
3 changed files with 88 additions and 4 deletions

60
cmd/forgejo/actions.go Normal file
View file

@ -0,0 +1,60 @@
// Copyright The Forgejo Authors.
// SPDX-License-Identifier: MIT
package forgejo
import (
"context"
"fmt"
"code.gitea.io/gitea/modules/private"
"code.gitea.io/gitea/modules/setting"
"github.com/urfave/cli"
)
func CmdActions(ctx context.Context) cli.Command {
return cli.Command{
Name: "actions",
Usage: "Commands for managing Forgejo Actions",
Subcommands: []cli.Command{
SubcmdActionsGenRunnerToken(ctx),
},
}
}
func SubcmdActionsGenRunnerToken(ctx context.Context) cli.Command {
return cli.Command{
Name: "generate-runner-token",
Usage: "Generate a new token for a runner to use to register with the server",
Action: func(cliCtx *cli.Context) error { return RunGenerateActionsRunnerToken(ctx, cliCtx) },
Flags: []cli.Flag{
cli.StringFlag{
Name: "scope, s",
Value: "",
Usage: "{owner}[/{repo}] - leave empty for a global runner",
},
},
}
}
func RunGenerateActionsRunnerToken(ctx context.Context, cliCtx *cli.Context) error {
if !ContextGetNoInstallSignals(ctx) {
var cancel context.CancelFunc
ctx, cancel = installSignals(ctx)
defer cancel()
}
setting.MustInstalled()
scope := cliCtx.String("scope")
respText, extra := private.GenerateActionsRunnerToken(ctx, scope)
if extra.HasError() {
return handleCliResponseExtra(extra)
}
if _, err := fmt.Fprintf(ContextGetStdout(ctx), "%s", respText); err != nil {
panic(err)
}
return nil
}

View file

@ -31,7 +31,9 @@ func CmdForgejo(ctx context.Context) cli.Command {
Name: "forgejo-cli",
Usage: "Forgejo CLI",
Flags: []cli.Flag{},
Subcommands: []cli.Command{},
Subcommands: []cli.Command{
CmdActions(ctx),
},
}
}

View file

@ -0,0 +1,22 @@
// SPDX-License-Identifier: MIT
package integration
import (
"net/url"
"testing"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/test"
"github.com/stretchr/testify/assert"
)
func Test_CmdForgejo_Actions(t *testing.T) {
onGiteaRun(t, func(*testing.T, *url.URL) {
defer test.MockVariable(&setting.Actions.Enabled, true)()
output := cmdForgejoCaptureOutput(t, []string{"forgejo-cli", "actions", "generate-runner-token"})
assert.EqualValues(t, 40, len(output))
})
}