mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-10-24 11:02:42 +00:00
(cherry picked from commit2555e315f7) (cherry picked from commit51b9c9092e) [CLI] implement forgejo-cli (squash) support initDB (cherry picked from commit5c31ae602a) (cherry picked from commitbbf76489a7) Conflicts: because ofd0dbe52e76upgrade to https://pkg.go.dev/github.com/urfave/cli/v2 (cherry picked from commitb6c1bcc008) [CLI] implement forgejo-cli actions (cherry picked from commit08be2b226e) (cherry picked from commitb6cfa88c6e) (cherry picked from commit59704200de) [CLI] implement forgejo-cli actions generate-secret (cherry picked from commit6f7905c8ec) (cherry picked from commite085d6d273) [CLI] implement forgejo-cli actions generate-secret (squash) NoInit (cherry picked from commit962c944eb2) [CLI] implement forgejo-cli actions register (cherry picked from commit2f95143000) (cherry picked from commit42f2f8731e) [CLI] implement forgejo-cli actions register (squash) no private Do not go through the private API, directly modify the database (cherry picked from commit1ba7c0d39d) [CLI] implement forgejo-cli actions (cherry picked from commit6f7905c8ec) (cherry picked from commite085d6d273) [CLI] implement forgejo-cli actions generate-secret (squash) NoInit (cherry picked from commit962c944eb2) (cherry picked from commit4c121ef022) Conflicts: cmd/forgejo/actions.go tests/integration/cmd_forgejo_actions_test.go (cherry picked from commit36997a48e3) [CLI] implement forgejo-cli actions (squash) restore --version Refs: https://codeberg.org/forgejo/forgejo/issues/1134 (cherry picked from commit9739eb52d8) [CI] implement forgejo-cli (squash) the actions subcommand needs config (cherry picked from commit def638475122a26082ab3835842c84cd03839154) Conflicts: cmd/main.go https://codeberg.org/forgejo/forgejo/pulls/1209 (cherry picked from commita1758a3910) (cherry picked from commit935fa650c7) (cherry picked from commitcd21026bc9) (cherry picked from commit1700b8973a) (cherry picked from commit1def42a379) (cherry picked from commit839d97521d) (cherry picked from commitfd8c13be6b) (cherry picked from commit588e5d552f) (cherry picked from commit151a726620) (cherry picked from commita93f3689a8)
209 lines
6 KiB
Go
209 lines
6 KiB
Go
// SPDX-License-Identifier: MIT
|
|
|
|
package integration
|
|
|
|
import (
|
|
gocontext "context"
|
|
"net/url"
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
|
|
actions_model "code.gitea.io/gitea/models/actions"
|
|
repo_model "code.gitea.io/gitea/models/repo"
|
|
"code.gitea.io/gitea/models/unittest"
|
|
user_model "code.gitea.io/gitea/models/user"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func Test_CmdForgejo_Actions(t *testing.T) {
|
|
onGiteaRun(t, func(*testing.T, *url.URL) {
|
|
token, err := cmdForgejoCaptureOutput(t, []string{"forgejo", "forgejo-cli", "actions", "generate-runner-token"})
|
|
assert.NoError(t, err)
|
|
assert.EqualValues(t, 40, len(token))
|
|
|
|
secret, err := cmdForgejoCaptureOutput(t, []string{"forgejo", "forgejo-cli", "actions", "generate-secret"})
|
|
assert.NoError(t, err)
|
|
assert.EqualValues(t, 40, len(secret))
|
|
|
|
_, err = cmdForgejoCaptureOutput(t, []string{"forgejo", "forgejo-cli", "actions", "register"})
|
|
assert.ErrorContains(t, err, "at least one of the --secret")
|
|
|
|
for _, testCase := range []struct {
|
|
testName string
|
|
scope string
|
|
secret string
|
|
errorMessage string
|
|
}{
|
|
{
|
|
testName: "bad user",
|
|
scope: "baduser",
|
|
secret: "0123456789012345678901234567890123456789",
|
|
errorMessage: "user does not exist",
|
|
},
|
|
{
|
|
testName: "bad repo",
|
|
scope: "org25/badrepo",
|
|
secret: "0123456789012345678901234567890123456789",
|
|
errorMessage: "repository does not exist",
|
|
},
|
|
{
|
|
testName: "secret length != 40",
|
|
scope: "org25",
|
|
secret: "0123456789",
|
|
errorMessage: "40 characters long",
|
|
},
|
|
{
|
|
testName: "secret is not a hexadecimal string",
|
|
scope: "org25",
|
|
secret: "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ",
|
|
errorMessage: "must be an hexadecimal string",
|
|
},
|
|
} {
|
|
t.Run(testCase.testName, func(t *testing.T) {
|
|
cmd := []string{"forgejo", "forgejo-cli", "actions", "register", "--secret", testCase.secret, "--scope", testCase.scope}
|
|
output, err := cmdForgejoCaptureOutput(t, cmd)
|
|
assert.ErrorContains(t, err, testCase.errorMessage)
|
|
assert.EqualValues(t, "", output)
|
|
})
|
|
}
|
|
|
|
secret = "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
|
|
expecteduuid := "44444444-4444-4444-4444-444444444444"
|
|
|
|
for _, testCase := range []struct {
|
|
testName string
|
|
secretOption func() string
|
|
stdin []string
|
|
}{
|
|
{
|
|
testName: "secret from argument",
|
|
secretOption: func() string {
|
|
return "--secret=" + secret
|
|
},
|
|
},
|
|
{
|
|
testName: "secret from stdin",
|
|
secretOption: func() string {
|
|
return "--secret-stdin"
|
|
},
|
|
stdin: []string{secret},
|
|
},
|
|
{
|
|
testName: "secret from file",
|
|
secretOption: func() string {
|
|
secretFile := t.TempDir() + "/secret"
|
|
assert.NoError(t, os.WriteFile(secretFile, []byte(secret), 0o644))
|
|
return "--secret-file=" + secretFile
|
|
},
|
|
},
|
|
} {
|
|
t.Run(testCase.testName, func(t *testing.T) {
|
|
cmd := []string{"forgejo", "forgejo-cli", "actions", "register", testCase.secretOption(), "--scope=org26"}
|
|
uuid, err := cmdForgejoCaptureOutput(t, cmd, testCase.stdin...)
|
|
assert.NoError(t, err)
|
|
assert.EqualValues(t, expecteduuid, uuid)
|
|
})
|
|
}
|
|
|
|
secret = "0123456789012345678901234567890123456789"
|
|
expecteduuid = "30313233-3435-3637-3839-303132333435"
|
|
|
|
for _, testCase := range []struct {
|
|
testName string
|
|
scope string
|
|
secret string
|
|
name string
|
|
labels string
|
|
version string
|
|
uuid string
|
|
}{
|
|
{
|
|
testName: "org",
|
|
scope: "org25",
|
|
secret: "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
|
|
uuid: "41414141-4141-4141-4141-414141414141",
|
|
},
|
|
{
|
|
testName: "user and repo",
|
|
scope: "user2/repo2",
|
|
secret: "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB",
|
|
uuid: "42424242-4242-4242-4242-424242424242",
|
|
},
|
|
{
|
|
testName: "labels",
|
|
scope: "org25",
|
|
name: "runnerName",
|
|
labels: "label1,label2,label3",
|
|
version: "v1.2.3",
|
|
secret: "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC",
|
|
uuid: "43434343-4343-4343-4343-434343434343",
|
|
},
|
|
{
|
|
testName: "insert a runner",
|
|
scope: "user10/repo6",
|
|
name: "runnerName",
|
|
labels: "label1,label2,label3",
|
|
version: "v1.2.3",
|
|
secret: secret,
|
|
uuid: expecteduuid,
|
|
},
|
|
{
|
|
testName: "update an existing runner",
|
|
scope: "user5/repo4",
|
|
name: "runnerNameChanged",
|
|
labels: "label1,label2,label3,more,label",
|
|
version: "v1.2.3-suffix",
|
|
secret: secret,
|
|
uuid: expecteduuid,
|
|
},
|
|
} {
|
|
t.Run(testCase.testName, func(t *testing.T) {
|
|
cmd := []string{
|
|
"forgejo", "forgejo-cli", "actions", "register",
|
|
"--secret", testCase.secret, "--scope", testCase.scope,
|
|
}
|
|
if testCase.name != "" {
|
|
cmd = append(cmd, "--name", testCase.name)
|
|
}
|
|
if testCase.labels != "" {
|
|
cmd = append(cmd, "--labels", testCase.labels)
|
|
}
|
|
if testCase.version != "" {
|
|
cmd = append(cmd, "--version", testCase.version)
|
|
}
|
|
//
|
|
// Run twice to verify it is idempotent
|
|
//
|
|
for i := 0; i < 2; i++ {
|
|
uuid, err := cmdForgejoCaptureOutput(t, cmd)
|
|
assert.NoError(t, err)
|
|
if assert.EqualValues(t, testCase.uuid, uuid) {
|
|
ownerName, repoName, found := strings.Cut(testCase.scope, "/")
|
|
action, err := actions_model.GetRunnerByUUID(gocontext.Background(), uuid)
|
|
assert.NoError(t, err)
|
|
|
|
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: action.OwnerID})
|
|
assert.Equal(t, ownerName, user.Name, action.OwnerID)
|
|
|
|
if found {
|
|
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: action.RepoID})
|
|
assert.Equal(t, repoName, repo.Name, action.RepoID)
|
|
}
|
|
if testCase.name != "" {
|
|
assert.EqualValues(t, testCase.name, action.Name)
|
|
}
|
|
if testCase.labels != "" {
|
|
labels := strings.Split(testCase.labels, ",")
|
|
assert.EqualValues(t, labels, action.AgentLabels)
|
|
}
|
|
if testCase.version != "" {
|
|
assert.EqualValues(t, testCase.version, action.Version)
|
|
}
|
|
}
|
|
}
|
|
})
|
|
}
|
|
})
|
|
}
|