1// Copyright 2022 The Gitea Authors. All rights reserved.2// SPDX-License-Identifier: MIT34package cmd56import (7 "context"8 "fmt"9 "os"1011 "github.com/spf13/cobra"1213 "gitea.com/gitea/act_runner/internal/pkg/config"14 "gitea.com/gitea/act_runner/internal/pkg/ver"15)1617func Execute(ctx context.Context) {18 // ./act_runner19 rootCmd := &cobra.Command{20 Use: "forgejo-runner [event name to run]\nIf no event name passed, will default to \"on: push\"",21 Short: "Run Forgejo Actions locally by specifying the event name (e.g. `push`) or an action name directly.",22 Args: cobra.MaximumNArgs(1),23 Version: ver.Version(),24 SilenceUsage: true,25 }26 configFile := ""27 rootCmd.PersistentFlags().StringVarP(&configFile, "config", "c", "", "Config file path")2829 // ./act_runner register30 var regArgs registerArgs31 registerCmd := &cobra.Command{32 Use: "register",33 Short: "Register a runner to the server",34 Args: cobra.MaximumNArgs(0),35 RunE: runRegister(ctx, ®Args, &configFile), // must use a pointer to regArgs36 }37 registerCmd.Flags().BoolVar(®Args.NoInteractive, "no-interactive", false, "Disable interactive mode")38 registerCmd.Flags().StringVar(®Args.InstanceAddr, "instance", "", "Forgejo instance address")39 registerCmd.Flags().StringVar(®Args.Token, "token", "", "Runner token")40 registerCmd.Flags().StringVar(®Args.RunnerName, "name", "", "Runner name")41 registerCmd.Flags().StringVar(®Args.Labels, "labels", "", "Runner tags, comma separated")42 rootCmd.AddCommand(registerCmd)4344 rootCmd.AddCommand(createRunnerFileCmd(ctx, &configFile))4546 // ./act_runner daemon47 daemonCmd := &cobra.Command{48 Use: "daemon",49 Short: "Run as a runner daemon",50 Args: cobra.MaximumNArgs(1),51 RunE: runDaemon(ctx, &configFile),52 }53 rootCmd.AddCommand(daemonCmd)5455 // ./act_runner exec56 rootCmd.AddCommand(loadExecCmd(ctx))5758 // ./act_runner config59 rootCmd.AddCommand(&cobra.Command{60 Use: "generate-config",61 Short: "Generate an example config file",62 Args: cobra.MaximumNArgs(0),63 Run: func(_ *cobra.Command, _ []string) {64 fmt.Printf("%s", config.Example)65 },66 })6768 // ./act_runner cache-server69 var cacheArgs cacheServerArgs70 cacheCmd := &cobra.Command{71 Use: "cache-server",72 Short: "Start a cache server for the cache action",73 Args: cobra.MaximumNArgs(0),74 RunE: runCacheServer(ctx, &configFile, &cacheArgs),75 }76 cacheCmd.Flags().StringVarP(&cacheArgs.Dir, "dir", "d", "", "Cache directory")77 cacheCmd.Flags().StringVarP(&cacheArgs.Host, "host", "s", "", "Host of the cache server")78 cacheCmd.Flags().Uint16VarP(&cacheArgs.Port, "port", "p", 0, "Port of the cache server")79 rootCmd.AddCommand(cacheCmd)8081 // hide completion command82 rootCmd.CompletionOptions.HiddenDefaultCmd = true8384 if err := rootCmd.Execute(); err != nil {85 os.Exit(1)86 }87}