Skip to content

Commit 8feaf82

Browse files
authored
Merge pull request #596 from kfarnung/node-cc
Add Dockerfile for node-chakracore
2 parents a3c5295 + 3f8fab4 commit 8feaf82

13 files changed

+282
-49
lines changed

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ env:
2929
- NODE_VERSION: '6'
3030
- NODE_VERSION: '8'
3131
- NODE_VERSION: '9'
32+
- NODE_VERSION: 'chakracore/8'
3233

3334
matrix:
3435
include:

6/Dockerfile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ RUN set -ex \
5151
gpg --keyserver hkp://keyserver.pgp.com:80 --recv-keys "$key" || \
5252
gpg --keyserver hkp://ipv4.pool.sks-keyservers.net --recv-keys "$key" || \
5353
gpg --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" ; \
54-
5554
done \
5655
&& curl -fSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz" \
5756
&& curl -fSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz.asc" \

8/slim/Dockerfile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ RUN set -ex \
1717
; do \
1818
gpg --keyserver hkp://pgp.mit.edu:80 --recv-keys "$key" || \
1919
gpg --keyserver hkp://keyserver.pgp.com:80 --recv-keys "$key" || \
20-
gpg --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-keys "$key" ; \
20+
gpg --keyserver hkp://ipv4.pool.sks-keyservers.net --recv-keys "$key" || \
21+
gpg --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" ; \
2122
done
2223

2324
ENV NODE_VERSION 8.9.4

Dockerfile-stretch.template

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,6 @@ RUN set -ex \
5151
gpg --keyserver hkp://keyserver.pgp.com:80 --recv-keys "$key" || \
5252
gpg --keyserver hkp://ipv4.pool.sks-keyservers.net --recv-keys "$key" || \
5353
gpg --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" ; \
54-
55-
5654
done \
5755
&& curl -fSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz" \
5856
&& curl -fSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz.asc" \

chakracore/8/Dockerfile

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
FROM buildpack-deps:jessie
2+
3+
RUN groupadd --gid 1000 node \
4+
&& useradd --uid 1000 --gid node --shell /bin/bash --create-home node
5+
6+
ENV NODE_VERSION 8.9.4
7+
8+
RUN ARCH= && dpkgArch="$(dpkg --print-architecture)" \
9+
&& case "${dpkgArch##*-}" in \
10+
amd64) ARCH='x64';; \
11+
*) echo "unsupported architecture"; exit 1 ;; \
12+
esac \
13+
&& curl -SLO "https://nodejs.org/download/chakracore-release/v$NODE_VERSION/node-v$NODE_VERSION-linux-$ARCH.tar.xz" \
14+
&& curl -SLO --compressed "https://nodejs.org/download/chakracore-release/v$NODE_VERSION/SHASUMS256.txt" \
15+
&& grep " node-v$NODE_VERSION-linux-$ARCH.tar.xz\$" SHASUMS256.txt | sha256sum -c - \
16+
&& tar -xJf "node-v$NODE_VERSION-linux-$ARCH.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \
17+
&& rm "node-v$NODE_VERSION-linux-$ARCH.tar.xz" SHASUMS256.txt \
18+
&& ln -s /usr/local/bin/node /usr/local/bin/nodejs
19+
20+
ENV YARN_VERSION 1.3.2
21+
22+
RUN set -ex \
23+
&& for key in \
24+
6A010C5166006599AA17F08146C2130DFD2497F5 \
25+
; do \
26+
gpg --keyserver hkp://pgp.mit.edu:80 --recv-keys "$key" || \
27+
gpg --keyserver hkp://keyserver.pgp.com:80 --recv-keys "$key" || \
28+
gpg --keyserver hkp://ipv4.pool.sks-keyservers.net --recv-keys "$key" || \
29+
gpg --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" ; \
30+
done \
31+
&& curl -fSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz" \
32+
&& curl -fSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz.asc" \
33+
&& gpg --batch --verify yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz \
34+
&& mkdir -p /opt/yarn \
35+
&& tar -xzf yarn-v$YARN_VERSION.tar.gz -C /opt/yarn --strip-components=1 \
36+
&& ln -s /opt/yarn/bin/yarn /usr/local/bin/yarn \
37+
&& ln -s /opt/yarn/bin/yarn /usr/local/bin/yarnpkg \
38+
&& rm yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz
39+
40+
CMD [ "node" ]

chakracore/Dockerfile.template

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
FROM buildpack-deps:jessie
2+
3+
RUN groupadd --gid 1000 node \
4+
&& useradd --uid 1000 --gid node --shell /bin/bash --create-home node
5+
6+
ENV NODE_VERSION 0.0.0
7+
8+
RUN ARCH= && dpkgArch="$(dpkg --print-architecture)" \
9+
&& case "${dpkgArch##*-}" in \
10+
amd64) ARCH='x64';; \
11+
*) echo "unsupported architecture"; exit 1 ;; \
12+
esac \
13+
&& curl -SLO "https://nodejs.org/download/chakracore-release/v$NODE_VERSION/node-v$NODE_VERSION-linux-$ARCH.tar.xz" \
14+
&& curl -SLO --compressed "https://nodejs.org/download/chakracore-release/v$NODE_VERSION/SHASUMS256.txt" \
15+
&& grep " node-v$NODE_VERSION-linux-$ARCH.tar.xz\$" SHASUMS256.txt | sha256sum -c - \
16+
&& tar -xJf "node-v$NODE_VERSION-linux-$ARCH.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \
17+
&& rm "node-v$NODE_VERSION-linux-$ARCH.tar.xz" SHASUMS256.txt \
18+
&& ln -s /usr/local/bin/node /usr/local/bin/nodejs
19+
20+
ENV YARN_VERSION 0.0.0
21+
22+
RUN set -ex \
23+
&& for key in \
24+
6A010C5166006599AA17F08146C2130DFD2497F5 \
25+
; do \
26+
gpg --keyserver hkp://pgp.mit.edu:80 --recv-keys "$key" || \
27+
gpg --keyserver hkp://keyserver.pgp.com:80 --recv-keys "$key" || \
28+
gpg --keyserver hkp://ipv4.pool.sks-keyservers.net --recv-keys "$key" || \
29+
gpg --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" ; \
30+
done \
31+
&& curl -fSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz" \
32+
&& curl -fSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz.asc" \
33+
&& gpg --batch --verify yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz \
34+
&& mkdir -p /opt/yarn \
35+
&& tar -xzf yarn-v$YARN_VERSION.tar.gz -C /opt/yarn --strip-components=1 \
36+
&& ln -s /opt/yarn/bin/yarn /usr/local/bin/yarn \
37+
&& ln -s /opt/yarn/bin/yarn /usr/local/bin/yarnpkg \
38+
&& rm yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz
39+
40+
CMD [ "node" ]

chakracore/architectures

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
bashbrew-arch variants
2+
amd64 default

chakracore/config

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
baseuri https://nodejs.org/download/chakracore-release

config

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
baseuri https://nodejs.org/dist

functions.sh

Lines changed: 150 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,17 @@
22

33
# Utlity functions
44

5+
info() {
6+
printf "%s\\n" "$@"
7+
}
8+
9+
fatal() {
10+
printf "**********\\n"
11+
printf "Fatal Error: %s\\n" "$@"
12+
printf "**********\\n"
13+
exit 1
14+
}
15+
516
# Get system architecture
617
#
718
# This is used to get the target architecture for docker image.
@@ -40,10 +51,14 @@ function get_arch() {
4051
# <architecutre 1> <supported variant 1 >,<supported variant 2>...
4152
# <architecutre 2> <supported variant 1 >,<supported variant 2>...
4253
function get_variants() {
54+
local dir
55+
dir=${1:-.}
56+
shift
57+
4358
local arch
4459
arch=$(get_arch)
4560
local variants
46-
variants=$(grep "^$arch" architectures | sed -E 's/'"$arch"'\s*//' | sed -E 's/,/ /g')
61+
variants=$(grep "^$arch" "$dir/architectures" | sed -E 's/'"$arch"'[[:space:]]*//' | sed -E 's/,/ /g')
4762
echo "$variants"
4863
}
4964

@@ -58,15 +73,146 @@ function get_supported_arches () {
5873
local version
5974
local variant
6075
local arches
76+
local lines
77+
local line
6178
version="$1"; shift
6279
variant="$1"; shift
6380

6481
# Get default supported arches
65-
arches=$( grep "$variant" architectures 2>/dev/null | cut -d' ' -f1 )
82+
lines=$( grep "$variant" "$(dirname "$version")"/architectures 2>/dev/null | cut -d' ' -f1 )
6683

6784
# Get version specific supported architectures if there is specialized information
6885
if [ -a "$version"/architectures ]; then
69-
arches=$( grep "$variant" "$version"/architectures 2>/dev/null | cut -d' ' -f1 )
86+
lines=$( grep "$variant" "$version"/architectures 2>/dev/null | cut -d' ' -f1 )
87+
fi
88+
89+
while IFS='' read -r line; do
90+
arches+=( "$line" )
91+
done <<< "$lines"
92+
93+
echo "${arches[@]}"
94+
}
95+
96+
# Get configuration values from the config file
97+
#
98+
# The configuration entries are simple key/value pairs which are whitespace separated.
99+
function get_config () {
100+
local dir
101+
dir=${1:-.}
102+
shift
103+
104+
local name
105+
name=$1
106+
shift
107+
108+
local value
109+
value=$(grep "^$name" "$dir/config" | sed -E 's/'"$name"'[[:space:]]*//')
110+
echo "$value"
111+
}
112+
113+
# Get available versions for a given path
114+
#
115+
# If full or partial versions are provided then they are processed and
116+
# validated. e.g. "4 chakracore" returns "4 chakracore/8" since it processed the
117+
# chakracore entry and found it to be a fork rather than a complete version.
118+
#
119+
# The result is a list of valid versions.
120+
function get_versions () {
121+
local prefix
122+
prefix=${1:-.}
123+
shift
124+
125+
local versions
126+
local dirs=( "$@" )
127+
if [ ${#dirs[@]} -eq 0 ]; then
128+
IFS=' ' read -ra dirs <<< "$(echo "${prefix%/}/"*/)"
70129
fi
71-
echo "$arches"
130+
131+
for dir in "${dirs[@]}"; do
132+
if [ -a "$dir/config" ]; then
133+
local subdirs
134+
IFS=' ' read -ra subdirs <<< "$(get_versions "${dir#./}")"
135+
for subdir in "${subdirs[@]}"; do
136+
versions+=( "$subdir" )
137+
done
138+
elif [ -a "$dir/Dockerfile" ]; then
139+
versions+=( "${dir#./}" )
140+
fi
141+
done
142+
143+
if [ ${#versions[@]} -gt 0 ]; then
144+
echo "${versions[@]%/}"
145+
fi
146+
}
147+
148+
function get_fork_name () {
149+
local version
150+
version=$1
151+
shift
152+
153+
IFS='/' read -ra versionparts <<< "$version"
154+
if [ ${#versionparts[@]} -gt 1 ]; then
155+
echo "${versionparts[0]}"
156+
fi
157+
}
158+
159+
function get_full_version () {
160+
local version
161+
version=$1
162+
shift
163+
164+
grep -m1 'ENV NODE_VERSION ' "$version/Dockerfile" | cut -d' ' -f3
165+
}
166+
167+
function get_major_minor_version () {
168+
local version
169+
version=$1
170+
shift
171+
172+
local fullversion
173+
fullversion=$(get_full_version "$version")
174+
175+
echo "$(echo "$fullversion" | cut -d'.' -f1).$(echo "$fullversion" | cut -d'.' -f2)"
176+
}
177+
178+
function get_tag () {
179+
local version
180+
version=$1
181+
shift
182+
183+
local versiontype
184+
versiontype=${1:-full}
185+
shift
186+
187+
local tagversion
188+
if [ "$versiontype" = full ]; then
189+
tagversion=$(get_full_version "$version")
190+
elif [ "$versiontype" = majorminor ]; then
191+
tagversion=$(get_major_minor_version "$version")
192+
fi
193+
194+
local tagparts
195+
IFS=' ' read -ra tagparts <<< "$(get_fork_name "$version") $tagversion"
196+
IFS='-'; echo "${tagparts[*]}"; unset IFS
197+
}
198+
199+
function sort_versions () {
200+
local versions=( "$@" )
201+
local sorted
202+
local lines
203+
local line
204+
205+
IFS=$'\n'
206+
lines="${versions[*]}"
207+
unset IFS
208+
209+
while IFS='' read -r line; do
210+
sorted+=( "$line" )
211+
done <<< "$(echo "$lines" | grep "^[0-9]" | sort -r)"
212+
213+
while IFS='' read -r line; do
214+
sorted+=( "$line" )
215+
done <<< "$(echo "$lines" | grep -v "^[0-9]" | sort -r)"
216+
217+
echo "${sorted[@]}"
72218
}

0 commit comments

Comments
 (0)