| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- // Copyright 2022 The Gitea Authors. All rights reserved.
- // SPDX-License-Identifier: MIT
-
- package actions
-
- import (
- "context"
- "errors"
- "fmt"
- "os"
- "strings"
-
- actions_model "code.gitea.io/gitea/models/actions"
- "code.gitea.io/gitea/modules/graceful"
- "code.gitea.io/gitea/modules/log"
- "code.gitea.io/gitea/modules/queue"
- "code.gitea.io/gitea/modules/setting"
- "code.gitea.io/gitea/modules/util"
- notify_service "code.gitea.io/gitea/services/notify"
- )
-
- func initGlobalRunnerToken(ctx context.Context) error {
- // use the same env name as the runner, for consistency
- token := os.Getenv("GITEA_RUNNER_REGISTRATION_TOKEN")
- tokenFile := os.Getenv("GITEA_RUNNER_REGISTRATION_TOKEN_FILE")
- if token != "" && tokenFile != "" {
- return errors.New("both GITEA_RUNNER_REGISTRATION_TOKEN and GITEA_RUNNER_REGISTRATION_TOKEN_FILE are set, only one can be used")
- }
- if tokenFile != "" {
- file, err := os.ReadFile(tokenFile)
- if err != nil {
- return fmt.Errorf("unable to read GITEA_RUNNER_REGISTRATION_TOKEN_FILE: %w", err)
- }
- token = strings.TrimSpace(string(file))
- }
- if token == "" {
- return nil
- }
-
- if len(token) < 32 {
- return errors.New("GITEA_RUNNER_REGISTRATION_TOKEN must be at least 32 random characters")
- }
-
- existing, err := actions_model.GetRunnerToken(ctx, token)
- if err != nil && !errors.Is(err, util.ErrNotExist) {
- return fmt.Errorf("unable to check existing token: %w", err)
- }
- if existing != nil {
- if !existing.IsActive {
- log.Warn("The token defined by GITEA_RUNNER_REGISTRATION_TOKEN is already invalidated, please use the latest one from web UI")
- }
- return nil
- }
- _, err = actions_model.NewRunnerTokenWithValue(ctx, 0, 0, token)
- return err
- }
-
- func Init(ctx context.Context) error {
- if !setting.Actions.Enabled {
- return nil
- }
-
- jobEmitterQueue = queue.CreateUniqueQueue(graceful.GetManager().ShutdownContext(), "actions_ready_job", jobEmitterQueueHandler)
- if jobEmitterQueue == nil {
- return errors.New("unable to create actions_ready_job queue")
- }
- go graceful.GetManager().RunWithCancel(jobEmitterQueue)
-
- notify_service.RegisterNotifier(NewNotifier())
- return initGlobalRunnerToken(ctx)
- }
|