2023-02-28 18:44:46 +08:00
// Copyright 2022 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
2022-04-27 17:45:53 +08:00
package cmd
import (
"context"
2023-04-02 22:41:48 +08:00
"fmt"
2022-04-27 17:45:53 +08:00
"os"
2022-07-21 09:36:17 +08:00
2022-04-27 17:45:53 +08:00
"github.com/spf13/cobra"
2023-04-02 22:41:48 +08:00
2023-04-04 21:32:04 +08:00
"gitea.com/gitea/act_runner/internal/pkg/config"
"gitea.com/gitea/act_runner/internal/pkg/ver"
2022-04-27 17:45:53 +08:00
)
func Execute ( ctx context . Context ) {
2022-08-23 20:34:47 +08:00
// ./act_runner
2022-04-27 17:45:53 +08:00
rootCmd := & cobra . Command {
2023-03-13 18:57:35 +08:00
Use : "act_runner [event name to run]\nIf no event name passed, will default to \"on: push\"" ,
2022-11-19 09:10:52 +08:00
Short : "Run GitHub actions locally by specifying the event name (e.g. `push`) or an action name directly." ,
Args : cobra . MaximumNArgs ( 1 ) ,
2023-04-04 21:32:04 +08:00
Version : ver . Version ( ) ,
2022-04-27 17:45:53 +08:00
SilenceUsage : true ,
}
2023-04-02 22:41:48 +08:00
configFile := ""
rootCmd . PersistentFlags ( ) . StringVarP ( & configFile , "config" , "c" , "" , "Config file path" )
2022-08-23 20:34:47 +08:00
2022-11-15 20:46:29 +08:00
// ./act_runner register
var regArgs registerArgs
registerCmd := & cobra . Command {
Use : "register" ,
Short : "Register a runner to the server" ,
Args : cobra . MaximumNArgs ( 0 ) ,
2023-04-02 22:41:48 +08:00
RunE : runRegister ( ctx , & regArgs , & configFile ) , // must use a pointer to regArgs
2022-11-15 20:46:29 +08:00
}
2022-11-17 19:43:26 +08:00
registerCmd . Flags ( ) . BoolVar ( & regArgs . NoInteractive , "no-interactive" , false , "Disable interactive mode" )
registerCmd . Flags ( ) . StringVar ( & regArgs . InstanceAddr , "instance" , "" , "Gitea instance address" )
registerCmd . Flags ( ) . StringVar ( & regArgs . Token , "token" , "" , "Runner token" )
registerCmd . Flags ( ) . StringVar ( & regArgs . RunnerName , "name" , "" , "Runner name" )
registerCmd . Flags ( ) . StringVar ( & regArgs . Labels , "labels" , "" , "Runner tags, comma separated" )
2025-03-13 21:57:44 +00:00
registerCmd . Flags ( ) . BoolVar ( & regArgs . Ephemeral , "ephemeral" , false , "Configure the runner to be ephemeral and only ever be able to pick a single job (stricter than --once)" )
2022-11-15 20:46:29 +08:00
rootCmd . AddCommand ( registerCmd )
2022-08-23 20:34:47 +08:00
// ./act_runner daemon
2024-11-06 17:16:08 +00:00
var daemArgs daemonArgs
2022-08-23 20:34:47 +08:00
daemonCmd := & cobra . Command {
2022-11-15 20:46:29 +08:00
Use : "daemon" ,
Short : "Run as a runner daemon" ,
2024-11-06 17:16:08 +00:00
Args : cobra . MaximumNArgs ( 0 ) ,
RunE : runDaemon ( ctx , & daemArgs , & configFile ) ,
2022-08-23 20:34:47 +08:00
}
2024-11-06 17:16:08 +00:00
daemonCmd . Flags ( ) . BoolVar ( & daemArgs . Once , "once" , false , "Run one job then exit" )
2022-10-15 20:03:33 +08:00
rootCmd . AddCommand ( daemonCmd )
2022-04-27 17:45:53 +08:00
2023-03-08 10:55:31 +08:00
// ./act_runner exec
rootCmd . AddCommand ( loadExecCmd ( ctx ) )
2023-04-02 22:41:48 +08:00
// ./act_runner config
rootCmd . AddCommand ( & cobra . Command {
Use : "generate-config" ,
Short : "Generate an example config file" ,
Args : cobra . MaximumNArgs ( 0 ) ,
Run : func ( _ * cobra . Command , _ [ ] string ) {
fmt . Printf ( "%s" , config . Example )
} ,
} )
2023-07-07 08:28:54 +00:00
// ./act_runner cache-server
var cacheArgs cacheServerArgs
cacheCmd := & cobra . Command {
Use : "cache-server" ,
Short : "Start a cache server for the cache action" ,
Args : cobra . MaximumNArgs ( 0 ) ,
RunE : runCacheServer ( ctx , & configFile , & cacheArgs ) ,
}
cacheCmd . Flags ( ) . StringVarP ( & cacheArgs . Dir , "dir" , "d" , "" , "Cache directory" )
cacheCmd . Flags ( ) . StringVarP ( & cacheArgs . Host , "host" , "s" , "" , "Host of the cache server" )
cacheCmd . Flags ( ) . Uint16VarP ( & cacheArgs . Port , "port" , "p" , 0 , "Port of the cache server" )
rootCmd . AddCommand ( cacheCmd )
2022-11-15 20:46:29 +08:00
// hide completion command
rootCmd . CompletionOptions . HiddenDefaultCmd = true
2022-04-27 17:45:53 +08:00
if err := rootCmd . Execute ( ) ; err != nil {
os . Exit ( 1 )
}
}