11#! /bin/bash
22set -ue
33
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+
444. functions.sh
545
646cd " $( cd " ${0%/* } " && pwd -P) "
1757# TODO: Should be able to specify target architecture manually
1858arch=$( get_arch)
1959
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
2164
2265function in_versions_to_update() {
2366 local version=$1
@@ -50,20 +93,25 @@ function update_node_version() {
5093
5194 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) "
5295 (
53- cp " ${template} " " ${dockerfile} "
96+ cp " ${template} " " ${dockerfile} -tmp "
5497 local fromprefix=" "
5598 if [ " ${arch} " != " amd64" ] && [ " ${variant} " != " onbuild" ]; then
5699 fromprefix=" ${arch} \\ /"
57100 fi
58101
59102 nodeVersion=" ${version} .${fullVersion:- 0} "
60103
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"
64112
65113 # 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 "
67115
68116 # shellcheck disable=SC1004
69117 new_line=' \\\
@@ -75,18 +123,22 @@ function update_node_version() {
75123 pattern=' "\$\{' $( echo " ${key_type} " | tr ' [:lower:]' ' [:upper:]' ) ' _KEYS\[@\]\}"'
76124 sed -Ei -e " s/([ \\ t]*)(${pattern} )/\\ 1${line}${new_line} \\ 1\\ 2/" " ${dockerfile} "
77125 done < " keys/${key_type} .keys"
78- sed -Ei -e " /${pattern} /d" " ${dockerfile} "
126+ sed -Ei -e " /${pattern} /d" " ${dockerfile} -tmp "
79127 done
80128
81129 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"
84135 fi
85136
86137 # 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"
89140 fi
141+ mv -f " ${dockerfile} -tmp" " ${dockerfile} "
90142 )
91143}
92144
0 commit comments