1
1
#! /bin/bash
2
2
set -ue
3
3
4
+ function usage() {
5
+ cat << EOF
6
+
7
+ Update the node docker images.
8
+
9
+ Usage:
10
+ $0 [-s] [MAJOR_VERSION] [VARIANT]
11
+
12
+ Examples:
13
+ - update.sh # Update all images
14
+ - update.sh -s # Update all images, skip updating Alpine and Yarn
15
+ - update.sh 8 # Update version 8 and variants (default, slim, alpine etc.)
16
+ - update.sh -s 8 # Update version 8 and variants, skip updating Alpine and Yarn
17
+ - update.sh 8 slim # Update all variants for version 8
18
+ - update.sh -s 8 slim # Update all variants for version 8, skip updating Alpine and Yarn
19
+
20
+ OPTIONS:
21
+ -s Security update; skip updating the yarn and alpine versions.
22
+ -h Show this message
23
+
24
+ EOF
25
+ }
26
+
27
+ SKIP=false
28
+ while getopts " sh" opt; do
29
+ case " ${opt} " in
30
+ s)
31
+ SKIP=true
32
+ ;;
33
+ h)
34
+ usage
35
+ exit
36
+ ;;
37
+ \? )
38
+ usage
39
+ exit
40
+ ;;
41
+ esac
42
+ done
43
+
4
44
. functions.sh
5
45
6
46
cd " $( cd " ${0%/* } " && pwd -P) "
17
57
# TODO: Should be able to specify target architecture manually
18
58
arch=$( get_arch)
19
59
20
- yarnVersion=" $( curl -sSL --compressed https://yarnpkg.com/latest-version) "
60
+ if [ " ${SKIP} " != true ]; then
61
+ alpine_version=$( get_config " ./" " alpine_version" )
62
+ yarnVersion=" $( curl -sSL --compressed https://yarnpkg.com/latest-version) "
63
+ fi
21
64
22
65
function in_versions_to_update() {
23
66
local version=$1
@@ -50,20 +93,25 @@ function update_node_version() {
50
93
51
94
fullVersion=" $( curl -sSL --compressed " ${baseuri} " | grep ' <a href="v' " ${version} ." | sed -E ' s!.*<a href="v([^"/]+)/?".*!\1!' | cut -d' .' -f2,3 | sort -n | tail -1) "
52
95
(
53
- cp " ${template} " " ${dockerfile} "
96
+ cp " ${template} " " ${dockerfile} -tmp "
54
97
local fromprefix=" "
55
98
if [ " ${arch} " != " amd64" ] && [ " ${variant} " != " onbuild" ]; then
56
99
fromprefix=" ${arch} \\ /"
57
100
fi
58
101
59
102
nodeVersion=" ${version} .${fullVersion:- 0} "
60
103
61
- sed -Ei -e ' s/^FROM (.*)/FROM ' " $fromprefix " ' \1/' " ${dockerfile} "
62
- sed -Ei -e ' s/^(ENV NODE_VERSION ).*/\1' " ${nodeVersion} " ' /' " ${dockerfile} "
63
- sed -Ei -e ' s/^(ENV YARN_VERSION ).*/\1' " ${yarnVersion} " ' /' " ${dockerfile} "
104
+ sed -Ei -e ' s/^FROM (.*)/FROM ' " $fromprefix " ' \1/' " ${dockerfile} -tmp"
105
+ sed -Ei -e ' s/^(ENV NODE_VERSION ).*/\1' " ${nodeVersion} " ' /' " ${dockerfile} -tmp"
106
+
107
+ if [ " ${SKIP} " = true ]; then
108
+ # Get the currently used Yarn version
109
+ yarnVersion=" $( grep " ENV YARN_VERSION" " ${dockerfile} " | cut -d' ' -f3) "
110
+ fi
111
+ sed -Ei -e ' s/^(ENV YARN_VERSION ).*/\1' " ${yarnVersion} " ' /' " ${dockerfile} -tmp"
64
112
65
113
# Only for onbuild variant
66
- sed -Ei -e ' s/^(FROM .*node:)[^-]*(-.*)/\1' " ${nodeVersion} " ' \2/' " ${dockerfile} "
114
+ sed -Ei -e ' s/^(FROM .*node:)[^-]*(-.*)/\1' " ${nodeVersion} " ' \2/' " ${dockerfile} -tmp "
67
115
68
116
# shellcheck disable=SC1004
69
117
new_line=' \\\
@@ -75,18 +123,22 @@ function update_node_version() {
75
123
pattern=' "\$\{' $( echo " ${key_type} " | tr ' [:lower:]' ' [:upper:]' ) ' _KEYS\[@\]\}"'
76
124
sed -Ei -e " s/([ \\ t]*)(${pattern} )/\\ 1${line}${new_line} \\ 1\\ 2/" " ${dockerfile} "
77
125
done < " keys/${key_type} .keys"
78
- sed -Ei -e " /${pattern} /d" " ${dockerfile} "
126
+ sed -Ei -e " /${pattern} /d" " ${dockerfile} -tmp "
79
127
done
80
128
81
129
if [ " ${variant} " = " alpine" ]; then
82
- alpine_version=$( get_config " ./" " alpine_version" )
83
- sed -Ei -e " s/(alpine:)0.0/\\ 1${alpine_version} /" " ${dockerfile} "
130
+ if [ " ${SKIP} " = true ]; then
131
+ # Get the currently used Alpine version
132
+ alpine_version=$( grep " FROM" " ${dockerfile} " | cut -d' :' -f2)
133
+ fi
134
+ sed -Ei -e " s/(alpine:)0.0/\\ 1${alpine_version} /" " ${dockerfile} -tmp"
84
135
fi
85
136
86
137
# Required for POSIX sed
87
- if [ -f " ${dockerfile} -e" ]; then
88
- rm " ${dockerfile} -e"
138
+ if [ -f " ${dockerfile} -tmp- e" ]; then
139
+ rm " ${dockerfile} -tmp- e"
89
140
fi
141
+ mv -f " ${dockerfile} -tmp" " ${dockerfile} "
90
142
)
91
143
}
92
144
0 commit comments