@@ -23,36 +23,36 @@ r() {
23
23
" $@ "
24
24
}
25
25
26
- choosedirin () {
26
+ choose_cachedir () {
27
27
local dir
28
28
dir=" $1 "
29
29
shift
30
- if (( ! $# )) ; then fatal " missing arguments" ; fi
30
+ if (( $# )) ; then fatal " too many arguments" ; fi
31
31
#
32
- local i ret=0
32
+ info " Picking cache directory inside $dir "
33
+ declare -g CACHEDIR
34
+ local i
33
35
for (( i = 0 ; ; i++ )) ; do
34
36
r mkdir -vp " $dir /$i "
35
- {
36
- if flock -n 249; then
37
- info " Using $dir /$i directory"
38
- info " + $* $dir /$i "
39
- r " $@ " " $dir /$i " || ret=$?
40
- return " $ret "
41
- fi
42
- } 249> " $dir /$i /lockfile"
37
+ exec 249> " $dir /$i /lockfile"
38
+ if flock --verbose -n 249; then
39
+ info " Using $dir /$i as cache directory"
40
+ # When was the directory last used? See timestamp of lockfile.
41
+ touch " $dir /$i /lockfile"
42
+ CACHEDIR=" $dir /$i "
43
+ break
44
+ fi
45
+ exec 249>& -
43
46
done
44
47
}
45
48
46
- dir_is_empty () {
47
- [[ -n " $( ls -A " $1 " ) " ]]
48
- }
49
-
50
- configure_dockerd () {
49
+ dockerd_use_dir () {
51
50
local dir
52
51
dir=" $1 "
53
52
shift
54
53
if (( $# )) ; then fatal " too many args" ; fi
55
54
#
55
+ info " Configuring docker daemon to use $dir /docker directory"
56
56
dir=$( readlink -f " $dir /docker" )
57
57
local dockersock
58
58
dockersock=/var/run/docker.sock
@@ -68,55 +68,42 @@ configure_dockerd() {
68
68
fi
69
69
}
70
70
71
- configure_runner () {
71
+ github_runner_use_dir () {
72
72
local dir
73
73
dir=" $1 "
74
74
shift
75
75
if (( $# )) ; then fatal " too many args" ; fi
76
76
#
77
77
local tmp
78
- tmp=$( readlink -f " $dir /configure" )
79
- r mkdir -vp " $tmp "
80
- r export RUNNER_WORKDIR=" $tmp "
81
- info " RUNNER_WORKDIR=$RUNNER_WORKDIR "
82
- #
78
+ info " Moving Github runner cache to $dir /hostedtoolscache"
83
79
tmp=$( readlink -f " $dir /hostedtoolcache" )
84
80
if [[ -e /opt/hostedtoolcache/ ]]; then
85
81
r rmdir -v /opt/hostedtoolcache/
86
82
fi
87
83
r mkdir -vp " $tmp "
88
84
r ln -nvfs " $tmp " /opt/hostedtoolcache
89
85
r export AGENT_TOOLSDIRECTORY=" $tmp "
90
- info " AGENT_TOOLSDIRECTORY=$tmp | /opt/hostedtoolcache -> $tmp "
91
- }
92
-
93
- configure () {
94
- local dir
95
- dir=" $1 "
96
- shift
97
- if (( $# )) ; then fatal " too many args" ; fi
98
86
#
99
- configure_dockerd " $dir "
100
- configure_runner " $dir "
87
+ info " Moving Github runner workdir to $dir /configure"
88
+ tmp=$( readlink -f " $dir /configure" )
89
+ r mkdir -vp " $tmp "
90
+ r export RUNNER_WORKDIR=" $tmp "
101
91
}
102
92
103
- save_stdout_in_fd3_and_redirect_stdout_stderr () {
104
- exec 3>&1 1>&2
105
- }
93
+ # ##############################################################################
94
+ # main
106
95
107
- restore_stdout_from_fd3 () {
108
- exec 1>&3 3>& -
109
- }
110
-
111
- save_stdout_in_fd3_and_redirect_stdout_stderr
112
- if (( $# )) ; then fatal " too many args" ; fi
113
- if [[ ! -e /.dockerenv ]]; then fatal " Not in docker" ; fi
114
- if mountpoint /_work; then
115
- choosedirin /_work configure
116
- else
117
- info " /_work is not a mountpoint"
118
- fi
119
- info ' start github runner'
120
- restore_stdout_from_fd3
96
+ {
97
+ if (( $# )) ; then fatal " too many args" ; fi
98
+ if [[ ! -e /.dockerenv ]]; then fatal " Not in docker" ; fi
99
+ if mountpoint /_work; then
100
+ choose_cachedir /_work
101
+ dockerd_use_dir " $CACHEDIR "
102
+ github_runner_use_dir " $CACHEDIR "
103
+ else
104
+ info " /_work is not a mountpoint"
105
+ fi
106
+ info ' start github runner'
107
+ } 2>&1
121
108
# synchronize with https://github.com/myoung34/docker-github-actions-runner/blob/master/Dockerfile#L25
122
- r exec /entrypoint.sh ./bin/Runner.Listener run --startuptype service
109
+ r exec /entrypoint.sh ./bin/Runner.Listener run --startuptype service " $@ "
0 commit comments