2022-04-27 12:45:53 +03:00
package cmd
import (
"context"
"os"
2022-09-03 10:57:53 +03:00
"strconv"
2022-07-21 04:36:17 +03:00
2022-10-02 07:33:17 +03:00
"gitea.com/gitea/act_runner/config"
2022-08-23 15:34:47 +03:00
"gitea.com/gitea/act_runner/engine"
"gitea.com/gitea/act_runner/runtime"
2022-10-02 07:33:17 +03:00
2022-07-21 04:36:17 +03:00
"github.com/mattn/go-isatty"
2022-08-13 08:12:38 +03:00
log "github.com/sirupsen/logrus"
2022-04-27 12:45:53 +03:00
"github.com/spf13/cobra"
)
const version = "0.1"
2022-08-13 08:12:38 +03:00
// initLogging setup the global logrus logger.
2022-10-02 07:33:17 +03:00
func initLogging ( cfg config . Config ) {
2022-07-21 04:36:17 +03:00
isTerm := isatty . IsTerminal ( os . Stdout . Fd ( ) )
2022-08-13 08:12:38 +03:00
log . SetFormatter ( & log . TextFormatter {
DisableColors : ! isTerm ,
FullTimestamp : true ,
} )
2022-07-21 04:36:17 +03:00
2022-08-13 08:12:38 +03:00
if cfg . Debug {
log . SetLevel ( log . DebugLevel )
2022-07-21 04:36:17 +03:00
}
2022-08-13 08:12:38 +03:00
if cfg . Trace {
log . SetLevel ( log . TraceLevel )
2022-07-21 04:36:17 +03:00
}
}
2022-04-27 12:45:53 +03:00
func Execute ( ctx context . Context ) {
2022-09-03 15:57:32 +03:00
task := runtime . NewTask ( 0 , nil )
2022-08-23 15:34:47 +03:00
// ./act_runner
2022-04-27 12:45:53 +03:00
rootCmd := & cobra . Command {
Use : "act [event name to run]\nIf no event name passed, will default to \"on: push\"" ,
Short : "Run GitHub actions locally by specifying the event name (e.g. `push`) or an action name directly." ,
Args : cobra . MaximumNArgs ( 1 ) ,
2022-08-23 15:34:47 +03:00
RunE : runRoot ( ctx , task ) ,
2022-04-27 12:45:53 +03:00
Version : version ,
SilenceUsage : true ,
}
2022-08-23 15:34:47 +03:00
rootCmd . Flags ( ) . BoolP ( "run" , "r" , false , "run workflows" )
rootCmd . Flags ( ) . StringP ( "job" , "j" , "" , "run job" )
rootCmd . PersistentFlags ( ) . StringVarP ( & task . Input . ForgeInstance , "forge-instance" , "" , "github.com" , "Forge instance to use." )
rootCmd . PersistentFlags ( ) . StringVarP ( & task . Input . EnvFile , "env-file" , "" , ".env" , "Read in a file of environment variables." )
// ./act_runner daemon
daemonCmd := & cobra . Command {
2022-05-02 12:02:51 +03:00
Aliases : [ ] string { "daemon" } ,
Use : "daemon [event name to run]\nIf no event name passed, will default to \"on: push\"" ,
Short : "Run GitHub actions locally by specifying the event name (e.g. `push`) or an action name directly." ,
Args : cobra . MaximumNArgs ( 1 ) ,
2022-08-23 15:34:47 +03:00
RunE : runDaemon ( ctx , task ) ,
}
rootCmd . AddCommand ( daemonCmd )
2022-04-27 12:45:53 +03:00
if err := rootCmd . Execute ( ) ; err != nil {
os . Exit ( 1 )
}
}
2022-08-23 15:34:47 +03:00
func runRoot ( ctx context . Context , task * runtime . Task ) func ( cmd * cobra . Command , args [ ] string ) error {
2022-05-02 12:02:51 +03:00
return func ( cmd * cobra . Command , args [ ] string ) error {
jobID , err := cmd . Flags ( ) . GetString ( "job" )
2022-04-27 12:45:53 +03:00
if err != nil {
2022-05-02 12:02:51 +03:00
return err
2022-04-27 12:45:53 +03:00
}
2022-08-23 15:34:47 +03:00
// try to connect to docker daemon
// if failed, exit with error
if err := engine . Start ( ctx ) ; err != nil {
log . WithError ( err ) . Fatalln ( "failed to connect docker daemon engine" )
}
2022-09-03 10:57:53 +03:00
task . BuildID , _ = strconv . ParseInt ( jobID , 10 , 64 )
2022-10-02 07:33:17 +03:00
_ = task . Run ( ctx , nil )
2022-09-03 10:57:53 +03:00
return nil
2022-04-27 12:45:53 +03:00
}
}