forgejo-runner

git clone git://git.lin.moe/forgejo-runner.git

 1// Copyright 2022 The Gitea Authors. All rights reserved.
 2// SPDX-License-Identifier: MIT
 3
 4package cmd
 5
 6import (
 7	"context"
 8	"fmt"
 9	"os"
10
11	"github.com/spf13/cobra"
12
13	"gitea.com/gitea/act_runner/internal/pkg/config"
14	"gitea.com/gitea/act_runner/internal/pkg/ver"
15)
16
17func Execute(ctx context.Context) {
18	// ./act_runner
19	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")
28
29	// ./act_runner register
30	var regArgs registerArgs
31	registerCmd := &cobra.Command{
32		Use:   "register",
33		Short: "Register a runner to the server",
34		Args:  cobra.MaximumNArgs(0),
35		RunE:  runRegister(ctx, &regArgs, &configFile), // must use a pointer to regArgs
36	}
37	registerCmd.Flags().BoolVar(&regArgs.NoInteractive, "no-interactive", false, "Disable interactive mode")
38	registerCmd.Flags().StringVar(&regArgs.InstanceAddr, "instance", "", "Forgejo instance address")
39	registerCmd.Flags().StringVar(&regArgs.Token, "token", "", "Runner token")
40	registerCmd.Flags().StringVar(&regArgs.RunnerName, "name", "", "Runner name")
41	registerCmd.Flags().StringVar(&regArgs.Labels, "labels", "", "Runner tags, comma separated")
42	rootCmd.AddCommand(registerCmd)
43
44	rootCmd.AddCommand(createRunnerFileCmd(ctx, &configFile))
45
46	// ./act_runner daemon
47	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)
54
55	// ./act_runner exec
56	rootCmd.AddCommand(loadExecCmd(ctx))
57
58	// ./act_runner config
59	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	})
67
68	// ./act_runner cache-server
69	var cacheArgs cacheServerArgs
70	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)
80
81	// hide completion command
82	rootCmd.CompletionOptions.HiddenDefaultCmd = true
83
84	if err := rootCmd.Execute(); err != nil {
85		os.Exit(1)
86	}
87}