forgejo-runner

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

 1// Copyright 2023 The Gitea Authors. All rights reserved.
 2// SPDX-License-Identifier: MIT
 3
 4package cmd
 5
 6import (
 7	"context"
 8	"fmt"
 9	"os"
10	"os/signal"
11
12	"gitea.com/gitea/act_runner/internal/pkg/config"
13
14	"github.com/nektos/act/pkg/artifactcache"
15	log "github.com/sirupsen/logrus"
16	"github.com/spf13/cobra"
17)
18
19type cacheServerArgs struct {
20	Dir  string
21	Host string
22	Port uint16
23}
24
25func runCacheServer(ctx context.Context, configFile *string, cacheArgs *cacheServerArgs) func(cmd *cobra.Command, args []string) error {
26	return func(cmd *cobra.Command, args []string) error {
27		cfg, err := config.LoadDefault(*configFile)
28		if err != nil {
29			return fmt.Errorf("invalid configuration: %w", err)
30		}
31
32		initLogging(cfg)
33
34		var (
35			dir  = cfg.Cache.Dir
36			host = cfg.Cache.Host
37			port = cfg.Cache.Port
38		)
39
40		// cacheArgs has higher priority
41		if cacheArgs.Dir != "" {
42			dir = cacheArgs.Dir
43		}
44		if cacheArgs.Host != "" {
45			host = cacheArgs.Host
46		}
47		if cacheArgs.Port != 0 {
48			port = cacheArgs.Port
49		}
50
51		cacheHandler, err := artifactcache.StartHandler(
52			dir,
53			host,
54			port,
55			log.StandardLogger().WithField("module", "cache_request"),
56		)
57		if err != nil {
58			return err
59		}
60
61		log.Infof("cache server is listening on %v", cacheHandler.ExternalURL())
62
63		c := make(chan os.Signal, 1)
64		signal.Notify(c, os.Interrupt)
65		<-c
66
67		return nil
68	}
69}