11#! /bin/bash
22set -e
33
4+ . functions.sh
5+
46cd " $( cd " ${0%/* } " && pwd -P) " ;
57
68versions=( " $@ " )
@@ -9,22 +11,39 @@ if [ ${#versions[@]} -eq 0 ]; then
911fi
1012versions=( " ${versions[@]%/ } " )
1113
12-
13- template=
14- dockerfile=
14+ # Global variables
15+ # Get architecure and use this as target architecture for docker image
16+ # See details in function.sh
17+ # TODO: Should be able to specify target architecture manually
18+ arch=$( get_arch)
1519
1620yarnVersion=" $( curl -sSL --compressed https://yarnpkg.com/latest-version) "
1721
1822function update_node_version {
23+
24+ local template=$1
25+ shift
26+ local dockerfile=$1
27+ shift
28+ local variant=
29+ if [[ $# -eq 1 ]]; then
30+ variant=$1
31+ shift
32+ fi
33+
1934 fullVersion=" $( curl -sSL --compressed ' https://nodejs.org/dist' | grep ' <a href="v' " $version ." | sed -E ' s!.*<a href="v([^"/]+)/?".*!\1!' | cut -f 3 -d . | sort -n | tail -1) "
2035 (
21- cp $template $dockerfile
22- sed -E -i.bak ' s/^(ENV NODE_VERSION |FROM node:).*/\1' " $version .$fullVersion " ' /' " $dockerfile "
23- rm " $dockerfile .bak"
24- sed -E -i.bak ' s/^(ENV YARN_VERSION ).*/\1' " $yarnVersion " ' /' " $dockerfile "
25- rm " $dockerfile .bak"
26- if [[ " ${version/ .*/ } " -ge 8 ]]; then
27- sed -E -i.bak ' s/FROM alpine:3.4/FROM alpine:3.6/' " $dockerfile "
36+ cp " $template " " $dockerfile "
37+ local fromprefix=
38+ if [[ " $arch " != " x64" && " $variant " != " onbuild" ]]; then
39+ fromprefix=" $arch \/"
40+ fi
41+
42+ sed -E -i.bak ' s/^FROM (.*)/FROM ' " $fromprefix " ' \1/' " $dockerfile " && rm " $dockerfile " .bak
43+ sed -E -i.bak ' s/^(ENV NODE_VERSION |FROM .*node:).*/\1' " $version .$fullVersion " ' /' " $dockerfile " && rm " $dockerfile " .bak
44+ sed -E -i.bak ' s/^(ENV YARN_VERSION ).*/\1' " $yarnVersion " ' /' " $dockerfile " && rm " $dockerfile " .bak
45+ if [[ " ${version/ .*/ } " -ge 8 || " $arch " = " ppc64le" ]]; then
46+ sed -E -i.bak ' s/FROM (.*)alpine:3.4/FROM \1alpine:3.6/' " $dockerfile "
2847 rm " $dockerfile .bak"
2948 fi
3049 )
@@ -34,21 +53,16 @@ for version in "${versions[@]}"; do
3453 # Skip "docs" and other non-docker directories
3554 [ -f " $version /Dockerfile" ] || continue
3655
37- template=" Dockerfile.template"
38- dockerfile=" $version /Dockerfile"
39-
40- update_node_version
56+ update_node_version " Dockerfile.template" " $version /Dockerfile"
4157
42- variants=$( echo " $version " /* / | xargs -n1 basename)
58+ # Get supported variants according the target architecture
59+ # See details in function.sh
60+ variants=$( get_variants)
4361
4462 for variant in $variants ; do
4563 # Skip non-docker directories
4664 [ -f " $version /$variant /Dockerfile" ] || continue
47-
48- template=" Dockerfile-$variant .template"
49- dockerfile=" $version /$variant /Dockerfile"
50-
51- update_node_version
65+ update_node_version " Dockerfile-$variant .template" " $version /$variant /Dockerfile" " $variant "
5266
5367 done
5468done
0 commit comments