1
1
#! /bin/bash
2
2
set -e
3
3
4
+ . functions.sh
5
+
4
6
cd " $( cd " ${0%/* } " && pwd -P) " ;
5
7
6
8
versions=( " $@ " )
@@ -9,22 +11,39 @@ if [ ${#versions[@]} -eq 0 ]; then
9
11
fi
10
12
versions=( " ${versions[@]%/ } " )
11
13
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)
15
19
16
20
yarnVersion=" $( curl -sSL --compressed https://yarnpkg.com/latest-version) "
17
21
18
22
function 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
+
19
34
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) "
20
35
(
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 "
28
47
rm " $dockerfile .bak"
29
48
fi
30
49
)
@@ -34,21 +53,16 @@ for version in "${versions[@]}"; do
34
53
# Skip "docs" and other non-docker directories
35
54
[ -f " $version /Dockerfile" ] || continue
36
55
37
- template=" Dockerfile.template"
38
- dockerfile=" $version /Dockerfile"
39
-
40
- update_node_version
56
+ update_node_version " Dockerfile.template" " $version /Dockerfile"
41
57
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)
43
61
44
62
for variant in $variants ; do
45
63
# Skip non-docker directories
46
64
[ -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 "
52
66
53
67
done
54
68
done
0 commit comments