Skip to content

Commit 9a8b9b5

Browse files
authored
Merge pull request #7 from strongloop/nginx-preseed
Support static seed publishing
2 parents f628f13 + c5a5a44 commit 9a8b9b5

File tree

4 files changed

+73
-7
lines changed

4 files changed

+73
-7
lines changed

Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
FROM openresty/openresty:alpine
22
MAINTAINER Ryan Graham <[email protected]>
33

4-
RUN apk --no-cache add dnsmasq
4+
RUN apk --no-cache add dnsmasq jq perl curl
55

6-
ADD entrypoint.sh nginx.conf ephemeral-npm.lua ephemeral-utils.lua /
6+
ADD entrypoint.sh nginx.conf ephemeral-npm.lua ephemeral-utils.lua preseed.sh /
77

88
# Not port 80 because ephemeral-npm standardized on couchdb's port already
99
EXPOSE 4873

entrypoint.sh

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,21 @@
1010
# [ ] NPM_USER
1111
# [ ] NPM_PASSWORD
1212

13+
source preseed.sh
14+
1315
export npm_config_registry=${npm_config_registry:-https://registry.npmjs.org}
1416
export MAXAGE=${MAXAGE:-5m}
1517

1618
# necessary because nginx requires a resolver when upstreams are dynamic
1719
dnsmasq --listen-address=127.0.0.1 --user=root
1820

1921
# in case /tmp/npm hasn't been created as a tmpfs already
20-
mkdir -p /tmp/npm/{store,temp,cache}
22+
mkdir -p /tmp/npm/store
23+
mkdir -p /tmp/npm/temp
24+
mkdir -p /tmp/npm/cache
25+
26+
maybePreseed
27+
2128
# nginx runs as uid nobody and it needs write access
2229
chown -R nobody /tmp/npm
2330

nginx.conf

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ http {
3131
local ephemeralNPM = require "ephemeral-npm"
3232
ephemeralNPM.init()
3333
}
34+
3435
server {
3536
listen 4873;
3637
set $npm_config_registry '';
@@ -58,10 +59,19 @@ http {
5859
# we need to be able to make sub-requests using ngx.location.capture()
5960
location /-@- {
6061
internal;
61-
rewrite /-@-/(.+) /$1 break;
62-
resolver 127.0.0.1 ipv6=off;
63-
proxy_pass $npm_config_registry;
64-
proxy_buffers 32 1m;
62+
rewrite /-@-/(.+) /$1 break;
63+
root /tmp/npm/store;
64+
set $ephemeralCacheStatus "HIT";
65+
try_files /$1/package.json @fetch-meta;
66+
}
67+
location @fetch-meta {
68+
internal;
69+
set $ephemeralCacheStatus "MISS";
70+
resolver 127.0.0.1 ipv6=off;
71+
proxy_pass $npm_config_registry;
72+
proxy_buffers 512 512k;
73+
proxy_temp_path /tmp/npm/temp;
74+
proxy_buffering on;
6575
# need to disable encoding in order to be able to process it locally
6676
proxy_set_header Accept-Encoding "";
6777
}

preseed.sh

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
#!/bin/sh
2+
3+
function preSeed() {
4+
mkdir /tmp/seed
5+
tgz=$1
6+
tar -xzf $1 -C /tmp/seed
7+
shasum=$(shasum $tgz | cut -d' ' -f1)
8+
seedJson=/tmp/seed/package/package.json
9+
upstreamJson=/tmp/seed/upstream.json
10+
pkgName=$(cat $seedJson | jq -r .name)
11+
pkgVersion=$(cat $seedJson | jq -r .version)
12+
mkdir -p /tmp/npm/store/$pkgName
13+
14+
cat <<-EOF
15+
Preseeding with:
16+
name: "$pkgName"
17+
version: "$pkgVersion"
18+
shasum: "$shasum"
19+
tag: "latest"
20+
EOF
21+
22+
cat > /tmp/seed/seed.jq <<-EOJQ
23+
.versions["$pkgVersion"] |= \$seedJson[0]
24+
| .versions["$pkgVersion"].dist.shasum = \$shasum
25+
| .versions["$pkgVersion"].dist.tarball = "$npm_config_registry/$pkgName/-/$pkgName-$pkgVersion.tgz"
26+
| .["dist-tags"].latest = "$pkgVersion"
27+
EOJQ
28+
29+
curl -sL $npm_config_registry/$pkgName > $upstreamJson
30+
jq --from-file /tmp/seed/seed.jq \
31+
--slurpfile seedJson $seedJson \
32+
--arg shasum $shasum \
33+
--arg pkgName $pkgName \
34+
--arg pkgVersion $pkgVersion \
35+
$upstreamJson \
36+
> /tmp/npm/store/$pkgName/package.json
37+
cp $tgz /tmp/npm/store/$pkgName/$pkgName-$pkgVersion.tgz
38+
}
39+
40+
function maybePreseed() {
41+
echo "checking if given a tarball..."
42+
cat - > /tmp/maybe.tgz
43+
echo "done reading input."
44+
if tar -tzf /tmp/maybe.tgz > /dev/null; then
45+
preSeed /tmp/maybe.tgz
46+
else
47+
echo 'no pre-seed package.'
48+
fi
49+
}

0 commit comments

Comments
 (0)