File tree Expand file tree Collapse file tree 4 files changed +73
-7
lines changed Expand file tree Collapse file tree 4 files changed +73
-7
lines changed Original file line number Diff line number Diff line change 1
1
FROM openresty/openresty:alpine
2
2
MAINTAINER Ryan Graham <
[email protected] >
3
3
4
- RUN apk --no-cache add dnsmasq
4
+ RUN apk --no-cache add dnsmasq jq perl curl
5
5
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 /
7
7
8
8
# Not port 80 because ephemeral-npm standardized on couchdb's port already
9
9
EXPOSE 4873
Original file line number Diff line number Diff line change 10
10
# [ ] NPM_USER
11
11
# [ ] NPM_PASSWORD
12
12
13
+ source preseed.sh
14
+
13
15
export npm_config_registry=${npm_config_registry:- https:// registry.npmjs.org}
14
16
export MAXAGE=${MAXAGE:- 5m}
15
17
16
18
# necessary because nginx requires a resolver when upstreams are dynamic
17
19
dnsmasq --listen-address=127.0.0.1 --user=root
18
20
19
21
# 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
+
21
28
# nginx runs as uid nobody and it needs write access
22
29
chown -R nobody /tmp/npm
23
30
Original file line number Diff line number Diff line change 31
31
local ephemeralNPM = require "ephemeral-npm"
32
32
ephemeralNPM.init()
33
33
}
34
+
34
35
server {
35
36
listen 4873 ;
36
37
set $npm_config_registry '' ;
@@ -58,10 +59,19 @@ http {
58
59
# we need to be able to make sub-requests using ngx.location.capture()
59
60
location /-@- {
60
61
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 ;
65
75
# need to disable encoding in order to be able to process it locally
66
76
proxy_set_header Accept-Encoding "" ;
67
77
}
Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments