Jaypore CI

> Jaypore CI: Minimal, Offline, Local CI system.
Log | Files | Refs | README | LICENSE

main.go (2020B)


      1 package main
      2 
      3 import (
      4 	"fmt"
      5 	"os"
      6 
      7 	"github.com/theSage21/jaypore_ci/internal/jci"
      8 )
      9 
     10 // version is set at build time via -ldflags "-X main.version=<version>".
     11 // It falls back to "dev" when built without the flag (e.g. go run).
     12 var version = "dev"
     13 
     14 func main() {
     15 	if len(os.Args) < 2 {
     16 		printUsage()
     17 		os.Exit(1)
     18 	}
     19 
     20 	cmd := os.Args[1]
     21 	args := os.Args[2:]
     22 
     23 	var err error
     24 	switch cmd {
     25 	case "run":
     26 		err = jci.Run(args)
     27 	case "web":
     28 		err = jci.Web(args)
     29 	case "push":
     30 		err = jci.Push(args)
     31 	case "pull":
     32 		err = jci.Pull(args)
     33 	case "prune":
     34 		err = jci.Prune(args)
     35 	case "cron":
     36 		err = jci.Cron(args)
     37 	case "server":
     38 		err = jci.Server(args)
     39 	case "runner":
     40 		err = jci.Runner(args)
     41 	case "version", "--version", "-v":
     42 		fmt.Println("git-jci version " + version)
     43 		return
     44 	case "help", "-h", "--help":
     45 		printUsage()
     46 		return
     47 	default:
     48 		fmt.Fprintf(os.Stderr, "unknown command: %s\n", cmd)
     49 		printUsage()
     50 		os.Exit(1)
     51 	}
     52 
     53 	if err != nil {
     54 		fmt.Fprintf(os.Stderr, "error: %v\n", err)
     55 		os.Exit(1)
     56 	}
     57 }
     58 
     59 func printUsage() {
     60 	fmt.Printf(`git-jci %s - Local-first CI system stored in git
     61 
     62 Usage: git jci <command> [options]
     63 
     64 Commands:
     65   run [--multi]  Run CI for the current commit and store results
     66   web            Start a web server to view CI results
     67   push           Push CI results to remote
     68   pull           Pull CI results from remote
     69   prune          Remove old CI results
     70   cron ls        List cron jobs for this repository
     71   cron sync      Sync .jci/crontab with system cron
     72   server         Run the coordination server (webhook + runner poll)
     73   runner         Run the job runner (polls server, dispatches Docker containers)
     74   version        Print the version and exit
     75 
     76 CI results are stored in refs/jci-runs/<commit>/<runid>.
     77 
     78 Distributed CI env vars (server):
     79   GITEA_HOST, GITEA_USER, GITEA_TOKEN, GITEA_WEBHOOK_SECRET,
     80   JCI_RUNNER_SECRET, JCI_MAX_JOBS, JCI_JOB_TIMEOUT, JCI_LISTEN, JCI_DB
     81 
     82 Distributed CI env vars (runner):
     83   JCI_SERVER, JCI_RUNNER_SECRET, JCI_RUNNER_DB, JCI_BINARY`, version)
     84 }