GitRoot
craft your forge, build your project, grow your community freely
1// SPDX-FileCopyrightText: 2025 Romain Maneschi <romain@gitroot.dev>
2//
3// SPDX-License-Identifier: EUPL-1.2
4
5package exec
6
7import (
8 "os"
9 "path/filepath"
10
11 "github.com/samber/oops"
12 executorLib "gitroot.dev/executor/lib"
13 pluginLib "gitroot.dev/libs/golang/plugin/model"
14 "gitroot.dev/server/logger"
15)
16
17type BareMetal struct {
18 logger *logger.Logger
19}
20
21func NewBareMetal(log *logger.Logger) *BareMetal {
22 return &BareMetal{
23 logger: log.NewSubLogger("bareMetal"),
24 }
25}
26
27func (e *BareMetal) name() string {
28 return "bareMetal"
29}
30
31func (e *BareMetal) prepareTempDir(dir string) error {
32 err := os.MkdirAll(filepath.Join(dir, JOB_CONTEXT_DIR), os.ModePerm)
33 if err != nil {
34 return oops.Wrapf(err, "can't MkdirAll for JOB_CONTEXT_DIR dir")
35 }
36 return nil
37}
38
39func (e *BareMetal) exec(dir string, exe pluginLib.Exec, projectPluginCacheDir string) (*pluginLib.ExecStatus, error) {
40 for _, cache := range exe.Cache {
41 cacheSource := filepath.Join(projectPluginCacheDir, CACHE_DIR, cache.Key)
42 err := os.MkdirAll(cacheSource, os.ModePerm)
43 if err != nil {
44 return nil, err
45 }
46 if cache.ReadOnly {
47 err = copyDir(cacheSource, filepath.Join(dir, APP_DIR, cache.Path))
48 } else {
49 target := filepath.Join(dir, APP_DIR, cache.Path)
50 dir, _ := filepath.Split(target)
51 err = os.MkdirAll(dir, os.ModePerm)
52 if err != nil {
53 return nil, err
54 }
55 err = os.Symlink(cacheSource, target)
56 }
57 if err != nil {
58 return nil, err
59 }
60 }
61 return executorLib.Start(filepath.Join(dir, APP_DIR), exe, true)
62}