Skip to content

Commit fc40d96

Browse files
authored
Merge pull request #249 from whywaita/feat/configurable-runner-base-directory
feat(config): add RUNNER_BASE_DIRECTORY environment variable
2 parents 287e4c6 + f401fce commit fc40d96

File tree

3 files changed

+32
-4
lines changed

3 files changed

+32
-4
lines changed

pkg/config/config.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ type Conf struct {
1717
ShoesPluginPath string
1818
ShoesPluginOutputPath string
1919
RunnerUser string
20+
RunnerBaseDirectory string
2021

2122
Debug bool
2223
Strict bool // check to registered runner before delete job
@@ -61,6 +62,7 @@ const (
6162
EnvShoesPluginPath = "PLUGIN"
6263
EnvShoesPluginOutputPath = "PLUGIN_OUTPUT"
6364
EnvRunnerUser = "RUNNER_USER"
65+
EnvRunnerBaseDirectory = "RUNNER_BASE_DIRECTORY"
6466
EnvDebug = "DEBUG"
6567
EnvStrict = "STRICT"
6668
EnvModeWebhookType = "MODE_WEBHOOK_TYPE"

pkg/config/init.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,12 @@ func LoadWithDefault() Conf {
5050
}
5151
c.RunnerUser = runnerUser
5252

53+
c.RunnerBaseDirectory = "/tmp"
54+
if os.Getenv(EnvRunnerBaseDirectory) != "" {
55+
c.RunnerBaseDirectory = os.Getenv(EnvRunnerBaseDirectory)
56+
log.Printf("use runner base directory is %s\n", c.RunnerBaseDirectory)
57+
}
58+
5359
c.Debug = false
5460
if os.Getenv(EnvDebug) == "true" {
5561
c.Debug = true

pkg/starter/scripts.go

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ func getPatchedFiles() (string, error) {
2222
return runnerService, nil
2323
}
2424

25+
type templateCompressedScriptValue struct {
26+
CompressedScript string
27+
RunnerBaseDirectory string
28+
}
29+
2530
func (s *Starter) getSetupScript(ctx context.Context, targetScope, runnerName string) (string, error) {
2631
rawScript, err := s.getSetupRawScript(ctx, targetScope, runnerName)
2732
if err != nil {
@@ -41,7 +46,20 @@ func (s *Starter) getSetupScript(ctx context.Context, targetScope, runnerName st
4146
}
4247
encoded := base64.StdEncoding.EncodeToString(compressedScript.Bytes())
4348

44-
return fmt.Sprintf(templateCompressedScript, encoded), nil
49+
v := templateCompressedScriptValue{
50+
CompressedScript: encoded,
51+
RunnerBaseDirectory: config.Config.RunnerBaseDirectory,
52+
}
53+
54+
t, err := template.New("templateCompressedScript").Parse(templateCompressedScript)
55+
if err != nil {
56+
return "", fmt.Errorf("failed to create template: %w", err)
57+
}
58+
var buff bytes.Buffer
59+
if err := t.Execute(&buff, v); err != nil {
60+
return "", fmt.Errorf("failed to execute compressed script: %w", err)
61+
}
62+
return buff.String(), nil
4563
}
4664

4765
func (s *Starter) getSetupRawScript(ctx context.Context, targetScope, runnerName string) (string, error) {
@@ -89,6 +107,7 @@ func (s *Starter) getSetupRawScript(ctx context.Context, targetScope, runnerName
89107
RunnerServiceJS: runnerServiceJs,
90108
RunnerArg: runnerTemporaryMode.StringFlag(),
91109
AdditionalLabels: labelsToOneLine(labels),
110+
RunnerBaseDirectory: config.Config.RunnerBaseDirectory,
92111
}
93112

94113
t, err := template.New("templateCreateLatestRunnerOnce").Parse(templateCreateLatestRunnerOnce)
@@ -115,8 +134,8 @@ const templateCompressedScript = `#!/bin/bash
115134
set -e
116135
117136
# main script compressed base64 and gzip
118-
export COMPRESSED_SCRIPT=%s
119-
export MAIN_SCRIPT_PATH=/tmp/main.sh
137+
export COMPRESSED_SCRIPT={{.CompressedScript}}
138+
export MAIN_SCRIPT_PATH={{.RunnerBaseDirectory}}/main.sh
120139
121140
echo ${COMPRESSED_SCRIPT} | base64 -d | gzip -d > ${MAIN_SCRIPT_PATH}
122141
@@ -133,6 +152,7 @@ type templateCreateLatestRunnerOnceValue struct {
133152
RunnerServiceJS string
134153
RunnerArg string
135154
AdditionalLabels string
155+
RunnerBaseDirectory string
136156
}
137157

138158
// templateCreateLatestRunnerOnce is script template of setup runner.
@@ -148,7 +168,7 @@ runner_name={{.RunnerName}}
148168
RUNNER_TOKEN={{.RunnerRegistrationToken}}
149169
RUNNER_USER={{.RunnerUser}}
150170
RUNNER_VERSION={{.RunnerVersion}}
151-
RUNNER_BASE_DIRECTORY=/tmp # /tmp is path of all user writable.
171+
RUNNER_BASE_DIRECTORY={{.RunnerBaseDirectory}}
152172
153173
sudo_prefix=""
154174
if [ $(id -u) -eq 0 ]; then # if root

0 commit comments

Comments
 (0)