Skip to content

Commit 01e7f3c

Browse files
committed
Add comparison table and non-root user. Fixes #1, fixes #2 and fixes #3.
1 parent 8514687 commit 01e7f3c

36 files changed

+504
-201
lines changed

.travis.yml

+4-4
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ jobs:
2121
- curl -fsSL https://install.goreleaser.com/github.com/goreleaser/goreleaser.sh | BINDIR=$GOPATH/bin sh
2222
script: skip
2323
deploy:
24-
provider: script
25-
script: goreleaser
26-
on:
27-
tags: true
24+
- provider: script
25+
script: goreleaser
26+
on:
27+
tags: true

README.md

+62-13
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,31 @@
22

33
![Jet mascot](https://static.lade.io/jet-mascot.png)
44

5-
[![Build Status](https://img.shields.io/travis/com/lade-io/jet.svg)](https://travis-ci.com/lade-io/jet)
5+
[![Build Status](https://travis-ci.com/lade-io/jet.svg?branch=master)](https://travis-ci.com/lade-io/jet)
66
[![GoDoc](https://img.shields.io/badge/godoc-reference-5272B4.svg)](https://godoc.org/github.com/lade-io/jet/pack)
7-
[![Release](https://img.shields.io/github/release/lade-io/jet.svg)](https://github.com/lade-io/jet/releases/latest)
7+
[![Release](https://img.shields.io/github/v/release/lade-io/jet.svg)](https://github.com/lade-io/jet/releases/latest)
88

99
Jet is a tool to convert source code into Docker images. Jet inspects your source code to
1010
create a Dockerfile with caching layers and any required system dependencies.
1111

12+
## Language Support
13+
14+
Jet will detect your app from the following languages and package managers:
15+
16+
* [Go](https://golang.org) - [dep](https://github.com/golang/dep), [glide](https://glide.sh), [godep](https://github.com/tools/godep), [go modules](https://github.com/golang/go/wiki/Modules), [govendor](https://github.com/kardianos/govendor)
17+
* [Node.js](https://nodejs.org) - [npm](https://www.npmjs.com), [yarn](https://yarnpkg.com)
18+
* [PHP](https://www.php.net) - [composer](https://getcomposer.org)
19+
* [Python](https://www.python.org) - [conda](https://docs.conda.io), [pip](https://pip.pypa.io), [pipenv](https://pipenv.pypa.io)
20+
* [Ruby](https://www.ruby-lang.org) - [bundler](https://bundler.io)
21+
22+
## Comparison Table
23+
24+
| Feature | Jet | [Cloud Native Buildpacks](https://buildpacks.io) | [Repo2docker](https://github.com/jupyter/repo2docker) | [Source-to-Image](https://github.com/openshift/source-to-image) |
25+
| --- | --- | --- | --- | --- |
26+
| Supported Languages | Go, Node.js, PHP, Python, Ruby | Java, Node.js | Python | Node.js, Perl, PHP, Python, Ruby |
27+
| Best Practices Dockerfile | :white_check_mark: | :x: | :white_check_mark: | :x: |
28+
| Hourly Runtime Updates | :white_check_mark: | :x: | :x: | :x: |
29+
1230
## Installation
1331

1432
Jet is supported on MacOS, Linux and Windows as a standalone binary.
@@ -41,30 +59,56 @@ go get github.com/lade-io/jet
4159

4260
## Examples
4361

44-
Build Node app:
62+
Build Node.js app:
4563

4664
```sh
47-
$ jet build testdata/node/node10/ -n node-app
65+
$ jet build testdata/node/node12/ -n node-app
4866
$ docker run -p 5000:5000 node-app
4967
```
5068

51-
Debug Django app with Gunicorn:
69+
Debug Node.js app:
70+
71+
```console
72+
$ jet debug testdata/node/node12/
73+
FROM node:12
74+
75+
USER node
76+
RUN mkdir -p /home/node/app/
77+
WORKDIR /home/node/app/
78+
79+
COPY --chown=node:node package.json package-lock.json ./
80+
RUN npm ci
81+
82+
COPY --chown=node:node . ./
83+
84+
CMD ["node", "server.js"]
85+
```
86+
87+
Debug Python and Django app:
5288

5389
```console
5490
$ jet debug testdata/python/django/
5591
FROM python:3.5
5692

57-
WORKDIR /app/
93+
ENV PATH=/home/web/.local/bin:$PATH
94+
ENV PIP_USER=true
95+
96+
RUN groupadd --gid 1000 web \
97+
&& useradd --uid 1000 --gid web --shell /bin/bash --create-home web
5898

59-
COPY requirements.txt /app/
99+
USER web
100+
RUN mkdir -p /home/web/app/
101+
WORKDIR /home/web/app/
102+
103+
COPY --chown=web:web requirements.txt ./
60104
RUN pip install -r requirements.txt
61105

62-
COPY . /app/
106+
COPY --chown=web:web . ./
63107

64108
CMD ["gunicorn", "django_web_app.wsgi:application"]
65109
```
66110

67-
Debug Rails app with Yarn:
111+
Debug Ruby on Rails app:
68112

69113
```console
70114
$ jet debug testdata/ruby/rails5/
@@ -80,15 +124,20 @@ RUN set -ex \
80124
yarn \
81125
&& rm -rf /var/lib/apt/lists/*
82126

83-
WORKDIR /app/
127+
RUN groupadd --gid 1000 web \
128+
&& useradd --uid 1000 --gid web --shell /bin/bash --create-home web
129+
130+
USER web
131+
RUN mkdir -p /home/web/app/
132+
WORKDIR /home/web/app/
84133

85-
COPY Gemfile Gemfile.lock /app/
134+
COPY --chown=web:web Gemfile Gemfile.lock ./
86135
RUN bundle install
87136

88-
COPY package.json yarn.lock /app/
137+
COPY --chown=web:web package.json yarn.lock ./
89138
RUN yarn install
90139

91-
COPY . /app/
140+
COPY --chown=web:web . ./
92141

93142
CMD ["sh", "-c", "puma -p ${PORT-3000}"]
94143
```

go.mod

+6-9
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ require (
88
github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 // indirect
99
github.com/bmatcuk/doublestar v1.1.1
1010
github.com/cenkalti/backoff v2.1.1+incompatible // indirect
11+
github.com/cloudingcity/gomod v1.0.1
1112
github.com/containerd/continuity v0.0.0-20181203112020-004b46473808 // indirect
1213
github.com/docker/cli v0.0.0-20171020201719-3352c0e137e8 // indirect
1314
github.com/docker/distribution v0.0.0-20170623202848-a97d7c0c155b
14-
github.com/docker/docker v0.0.0-20180221164450-0ede01237c9a
15+
github.com/docker/docker v0.0.0-20180221164450-0ede01237c9a // indirect
1516
github.com/docker/docker-credential-helpers v0.5.3-0.20170816090621-3c90bd29a46b // indirect
1617
github.com/docker/go-connections v0.4.0 // indirect
1718
github.com/docker/go-units v0.3.3 // indirect
@@ -25,32 +26,28 @@ require (
2526
github.com/gorilla/mux v1.7.0 // indirect
2627
github.com/gotestyourself/gotestyourself v2.2.0+incompatible // indirect
2728
github.com/gregjones/httpcache v0.0.0-20190212212710-3befbb6ad0cc
28-
github.com/hashicorp/go-version v1.1.0
29+
github.com/hashicorp/go-version v1.2.0
2930
github.com/inconshreveable/mousetrap v1.0.0 // indirect
3031
github.com/lib/pq v1.3.0 // indirect
31-
github.com/mattn/go-shellwords v1.0.10 // indirect
3232
github.com/opencontainers/go-digest v1.0.0-rc1 // indirect
3333
github.com/opencontainers/image-spec v1.0.1 // indirect
3434
github.com/opencontainers/runc v1.0.0-rc6 // indirect
35-
github.com/opencontainers/runtime-spec v0.1.2-0.20180911193056-5684b8af48c1 // indirect
3635
github.com/opencontainers/selinux v1.0.0 // indirect
3736
github.com/ory/dockertest v3.3.4+incompatible
3837
github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
3938
github.com/spf13/cobra v0.0.3
4039
github.com/spf13/pflag v1.0.3 // indirect
41-
github.com/stretchr/testify v1.3.0
42-
github.com/vbatts/tar-split v0.11.1 // indirect
40+
github.com/stretchr/testify v1.4.0
4341
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect
4442
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
4543
github.com/xeipuuv/gojsonschema v0.0.0-20160323030313-93e72a773fad // indirect
46-
gitlab.com/zamicol/goversion v0.0.0-20181217235400-afd02c576a84
47-
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd // indirect
44+
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be
4845
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c // indirect
4946
gopkg.in/yaml.v2 v2.2.2
5047
gotest.tools v2.2.0+incompatible // indirect
5148
)
5249

5350
replace (
5451
github.com/Nvveen/Gotty => github.com/ijc/Gotty v0.0.0-20170406111628-a8b993ba6abd
55-
github.com/hashicorp/go-version => github.com/beornf/go-version v1.1.1-0.20190313144023-c556813e6f43
52+
github.com/hashicorp/go-version => github.com/beornf/go-version v1.1.1-0.20200317142312-136b0131ea06
5653
)

go.sum

+22-14
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@ github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7O
22
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
33
github.com/Microsoft/go-winio v0.4.14 h1:+hMXMk01us9KgxGb7ftKQt2Xpf5hH/yky+TDA+qxleU=
44
github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA=
5-
github.com/beornf/go-version v1.1.1-0.20190313144023-c556813e6f43 h1:P5EN4YpeCxakX2kDhfgETn410fTl4XBP3zTcXmEdgdY=
6-
github.com/beornf/go-version v1.1.1-0.20190313144023-c556813e6f43/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
5+
github.com/beornf/go-version v1.1.1-0.20200317142312-136b0131ea06 h1:cfKucAEg3G/tffpQn0rMy+N5JqXa7kJIEczaOCDh+A8=
6+
github.com/beornf/go-version v1.1.1-0.20200317142312-136b0131ea06/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
77
github.com/bmatcuk/doublestar v1.1.1 h1:YroD6BJCZBYx06yYFEWvUuKVWQn3vLLQAVmDmvTSaiQ=
88
github.com/bmatcuk/doublestar v1.1.1/go.mod h1:UD6OnuiIn0yFxxA2le/rnRU1G4RaI4UvFv1sNto9p6w=
99
github.com/cenkalti/backoff v2.1.1+incompatible h1:tKJnvO2kl0zmb/jA5UKAt4VoEVw1qxKWjE/Bpp46npY=
1010
github.com/cenkalti/backoff v2.1.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
11+
github.com/cloudingcity/gomod v1.0.1 h1:GEWwrCg0XcbTpmOq2e6//dCti7+VxYBBhIrIr2uRQAk=
12+
github.com/cloudingcity/gomod v1.0.1/go.mod h1:2tWBNcGsTAob8GODWKvDPNWuPbsA6By9f72nxXJsFb8=
1113
github.com/containerd/continuity v0.0.0-20181203112020-004b46473808 h1:4BX8f882bXEDKfWIf0wa8HRvpnBoPszJJXL+TVbBw4M=
1214
github.com/containerd/continuity v0.0.0-20181203112020-004b46473808/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
1315
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -60,16 +62,12 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGi
6062
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
6163
github.com/lib/pq v1.3.0 h1:/qkRGz8zljWiDcFvgpwUpwIAPu3r07TDvs3Rws+o/pU=
6264
github.com/lib/pq v1.3.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
63-
github.com/mattn/go-shellwords v1.0.10 h1:Y7Xqm8piKOO3v10Thp7Z36h4FYFjt5xB//6XvOrs2Gw=
64-
github.com/mattn/go-shellwords v1.0.10/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y=
6565
github.com/opencontainers/go-digest v1.0.0-rc1 h1:WzifXhOVOEOuFYOJAW6aQqW0TooG2iki3E3Ii+WN7gQ=
6666
github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
6767
github.com/opencontainers/image-spec v1.0.1 h1:JMemWkRwHx4Zj+fVxWoMCFm/8sYGGrUVojFA6h/TRcI=
6868
github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
6969
github.com/opencontainers/runc v1.0.0-rc6 h1:7AoN22rYxxkmsJS48wFaziH/n0OvrZVqL/TglgHKbKQ=
7070
github.com/opencontainers/runc v1.0.0-rc6/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
71-
github.com/opencontainers/runtime-spec v0.1.2-0.20180911193056-5684b8af48c1 h1:eF33wSYogYRjYVNwKb8/0F+DEk8SAGKFdbbfpGudplE=
72-
github.com/opencontainers/runtime-spec v0.1.2-0.20180911193056-5684b8af48c1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
7371
github.com/opencontainers/selinux v1.0.0 h1:AYFJmdZd1xjz5UIb8YpDHthdwAzlM5FVY6PzoNMgAMk=
7472
github.com/opencontainers/selinux v1.0.0/go.mod h1:+BLncwf63G4dgOzykXAxcmnFlUaOlkDdmw/CqsW6pjs=
7573
github.com/ory/dockertest v3.3.4+incompatible h1:VrpM6Gqg7CrPm3bL4Wm1skO+zFWLbh7/Xb5kGEbJRh8=
@@ -89,30 +87,40 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn
8987
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
9088
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
9189
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
92-
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
93-
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
94-
github.com/vbatts/tar-split v0.11.1 h1:0Odu65rhcZ3JZaPHxl7tCI3V/C/Q9Zf82UFravl02dE=
95-
github.com/vbatts/tar-split v0.11.1/go.mod h1:LEuURwDEiWjRjwu46yU3KVGuUdVv/dcnpcEPSzR8z6g=
90+
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
91+
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
9692
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c=
9793
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
9894
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0=
9995
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
10096
github.com/xeipuuv/gojsonschema v0.0.0-20160323030313-93e72a773fad h1:LIwN+8bLzKvIuCiV5yT1nICcW/8yNfU5jVV1SHhcPco=
10197
github.com/xeipuuv/gojsonschema v0.0.0-20160323030313-93e72a773fad/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs=
102-
gitlab.com/zamicol/goversion v0.0.0-20181217235400-afd02c576a84 h1:nM8N/kb1in+TQaxS9vQLqxsag8y9dLBk/OrXWj7uoHY=
103-
gitlab.com/zamicol/goversion v0.0.0-20181217235400-afd02c576a84/go.mod h1:lVinn8urR6Ty9kId8kY4JhdvEx8LF6PlZzYewXunFns=
98+
golang.org/x/crypto v0.0.0-20180820150726-614d502a4dac h1:7d7lG9fHOLdL6jZPtnV4LpI41SbohIJ1Atq7U991dMg=
10499
golang.org/x/crypto v0.0.0-20180820150726-614d502a4dac/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
100+
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
101+
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
102+
golang.org/x/mod v0.2.0 h1:KU7oHjnv3XNWfa5COkzUifxZmxp1TyI7ImMXqFxLwvQ=
103+
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
105104
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
106-
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd h1:HuTn7WObtcDo9uEEU7rEqL0jYthdXAmZ6PP+meazmaU=
107-
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
105+
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
106+
golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI=
107+
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
108+
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be h1:vEDujvNQGv4jgYKudGeI/+DAX4Jffq6hpD55MmoEvKs=
108109
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
110+
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
109111
golang.org/x/sys v0.0.0-20180824143301-4910a1d54f87/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
110112
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
113+
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
114+
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
111115
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b h1:ag/x1USPSsqHud38I9BAC88qdNLDHHtQ4mlgQIZPPNA=
112116
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
117+
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
113118
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c h1:fqgJT0MGcGpPgpWU7VRdRjuArfcOvC4AoJmILihzhDg=
114119
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
115120
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
121+
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
122+
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
123+
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
116124
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
117125
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
118126
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=

pack/base.go

+9-4
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"os"
1111
"path/filepath"
1212
"regexp"
13+
"text/template"
1314

1415
"github.com/docker/libcompose/docker/builder"
1516
"github.com/docker/libcompose/docker/client"
@@ -67,6 +68,7 @@ type Tool struct {
6768
Download string
6869
Files []string
6970
Install []string
71+
Hook func(meta *Metadata, tool *Tool) error
7072
}
7173

7274
func Detect(workDir string) (pack *Buildpack, err error) {
@@ -111,12 +113,12 @@ func Detect(workDir string) (pack *Buildpack, err error) {
111113
return nil, err
112114
}
113115

114-
err = getTools(workDir, pack.Metadata)
116+
err = getVersion(pack.Metadata)
115117
if err != nil {
116118
return nil, err
117119
}
118120

119-
err = getVersion(pack.Metadata)
121+
err = getTools(workDir, pack.Metadata)
120122
return
121123
}
122124

@@ -211,13 +213,16 @@ func (b *Buildpack) createDockerignore() error {
211213
return w.Flush()
212214
}
213215

216+
var (
217+
dockerTemplate = template.Must(template.New("Dockerfile").Parse(dockerString))
218+
imageRegex = regexp.MustCompile(`^ ---> ([0-9a-f]+)\s*$`)
219+
)
220+
214221
type buildLogger struct {
215222
logger.RawLogger
216223
imageID string
217224
}
218225

219-
var imageRegex = regexp.MustCompile(`^ ---> ([0-9a-f]+)\s*$`)
220-
221226
func (b *buildLogger) Out(message []byte) {
222227
msg := string(message)
223228
matches := imageRegex.FindStringSubmatch(msg)

pack/base_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -98,10 +98,10 @@ func TestBuild(t *testing.T) {
9898
if err != nil {
9999
return err
100100
}
101-
if resp.StatusCode == 500 {
102-
return errors.New(resp.Status)
101+
if resp.StatusCode == 200 || resp.StatusCode == 404 {
102+
return nil
103103
}
104-
return nil
104+
return errors.New(resp.Status)
105105
})
106106
assert.NoError(t, err)
107107
assert.NoError(t, testPool.Purge(resource))

0 commit comments

Comments
 (0)