mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-11-25 14:35:40 +00:00
[CLI] implement forgejo-cli actions register (squash) no private
Do not go through the private API, directly modify the database
This commit is contained in:
parent
962c944eb2
commit
1ba7c0d39d
|
@ -14,6 +14,7 @@ import (
|
||||||
actions_model "code.gitea.io/gitea/models/actions"
|
actions_model "code.gitea.io/gitea/models/actions"
|
||||||
"code.gitea.io/gitea/modules/private"
|
"code.gitea.io/gitea/modules/private"
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
|
private_routers "code.gitea.io/gitea/routers/private"
|
||||||
|
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
)
|
)
|
||||||
|
@ -129,10 +130,14 @@ func validateSecret(secret string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func RunRegister(ctx context.Context, cliCtx *cli.Context) error {
|
func RunRegister(ctx context.Context, cliCtx *cli.Context) error {
|
||||||
if !ContextGetNoInstallSignals(ctx) {
|
if !ContextGetNoInit(ctx) {
|
||||||
var cancel context.CancelFunc
|
var cancel context.CancelFunc
|
||||||
ctx, cancel = installSignals(ctx)
|
ctx, cancel = installSignals(ctx)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
|
if err := initDB(ctx); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
setting.MustInstalled()
|
setting.MustInstalled()
|
||||||
|
|
||||||
|
@ -165,12 +170,17 @@ func RunRegister(ctx context.Context, cliCtx *cli.Context) error {
|
||||||
// the internal naming. It is still confusing to the developer but
|
// the internal naming. It is still confusing to the developer but
|
||||||
// not to the user.
|
// not to the user.
|
||||||
//
|
//
|
||||||
respText, extra := private.ActionsRunnerRegister(ctx, secret, scope, strings.Split(labels, ","), name, version)
|
owner, repo, err := private_routers.ParseScope(ctx, scope)
|
||||||
if extra.HasError() {
|
if err != nil {
|
||||||
return handleCliResponseExtra(ctx, extra)
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err := fmt.Fprintf(ContextGetStdout(ctx), "%s", respText); err != nil {
|
runner, err := actions_model.RegisterRunner(ctx, owner, repo, secret, strings.Split(labels, ","), name, version)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error while registering runner: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := fmt.Fprintf(ContextGetStdout(ctx), "%s", runner.UUID); err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
package private
|
package private
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
gocontext "context"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
@ -64,7 +65,11 @@ func GenerateActionsRunnerToken(ctx *context.PrivateContext) {
|
||||||
ctx.PlainText(http.StatusOK, token.Token)
|
ctx.PlainText(http.StatusOK, token.Token)
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseScope(ctx *context.PrivateContext, scope string) (ownerID, repoID int64, err error) {
|
func ParseScope(ctx gocontext.Context, scope string) (ownerID, repoID int64, err error) {
|
||||||
|
return parseScope(ctx, scope)
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseScope(ctx gocontext.Context, scope string) (ownerID, repoID int64, err error) {
|
||||||
ownerID = 0
|
ownerID = 0
|
||||||
repoID = 0
|
repoID = 0
|
||||||
if scope == "" {
|
if scope == "" {
|
||||||
|
|
|
@ -1,48 +0,0 @@
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
package private
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"net/http"
|
|
||||||
|
|
||||||
actions_model "code.gitea.io/gitea/models/actions"
|
|
||||||
"code.gitea.io/gitea/modules/context"
|
|
||||||
"code.gitea.io/gitea/modules/json"
|
|
||||||
"code.gitea.io/gitea/modules/log"
|
|
||||||
"code.gitea.io/gitea/modules/private"
|
|
||||||
)
|
|
||||||
|
|
||||||
func ActionsRunnerRegister(ctx *context.PrivateContext) {
|
|
||||||
var registerRequest private.ActionsRunnerRegisterRequest
|
|
||||||
rd := ctx.Req.Body
|
|
||||||
defer rd.Close()
|
|
||||||
|
|
||||||
if err := json.NewDecoder(rd).Decode(®isterRequest); err != nil {
|
|
||||||
log.Error("%v", err)
|
|
||||||
ctx.JSON(http.StatusInternalServerError, private.Response{
|
|
||||||
Err: err.Error(),
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
owner, repo, err := parseScope(ctx, registerRequest.Scope)
|
|
||||||
if err != nil {
|
|
||||||
log.Error("%v", err)
|
|
||||||
ctx.JSON(http.StatusInternalServerError, private.Response{
|
|
||||||
Err: err.Error(),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
runner, err := actions_model.RegisterRunner(ctx, owner, repo, registerRequest.Token, registerRequest.Labels, registerRequest.Name, registerRequest.Version)
|
|
||||||
if err != nil {
|
|
||||||
err := fmt.Sprintf("error while registering runner: %v", err)
|
|
||||||
log.Error("%v", err)
|
|
||||||
ctx.JSON(http.StatusInternalServerError, private.Response{
|
|
||||||
Err: err,
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx.PlainText(http.StatusOK, runner.UUID)
|
|
||||||
}
|
|
|
@ -56,7 +56,6 @@ func Routes() *web.Route {
|
||||||
// Since internal API will be sent only from Gitea sub commands and it's under control (checked by InternalToken), we can trust the headers.
|
// Since internal API will be sent only from Gitea sub commands and it's under control (checked by InternalToken), we can trust the headers.
|
||||||
r.Use(chi_middleware.RealIP)
|
r.Use(chi_middleware.RealIP)
|
||||||
|
|
||||||
r.Post("/actions/register", ActionsRunnerRegister)
|
|
||||||
r.Post("/ssh/authorized_keys", AuthorizedPublicKeyByContent)
|
r.Post("/ssh/authorized_keys", AuthorizedPublicKeyByContent)
|
||||||
r.Post("/ssh/{id}/update/{repoid}", UpdatePublicKeyInRepo)
|
r.Post("/ssh/{id}/update/{repoid}", UpdatePublicKeyInRepo)
|
||||||
r.Post("/ssh/log", bind(private.SSHLogOption{}), SSHLog)
|
r.Post("/ssh/log", bind(private.SSHLogOption{}), SSHLog)
|
||||||
|
|
Loading…
Reference in a new issue