Skip to content

Commit 5e40af0

Browse files
authored
Merge pull request #738 from buchdag/github-actions
Migrate CI to GitHub Actions as Travis CI is ending their free OSS builds
2 parents cc66f42 + 3ac0f26 commit 5e40af0

File tree

25 files changed

+349
-138
lines changed

25 files changed

+349
-138
lines changed

.github/workflows/test.yml

Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
name: Tests
2+
3+
on:
4+
push:
5+
paths-ignore:
6+
- 'docs/**'
7+
- '*.md'
8+
pull_request:
9+
paths-ignore:
10+
- 'docs/**'
11+
- '*.md'
12+
13+
14+
env:
15+
DOCKER_GEN_CONTAINER_NAME: nginx-proxy-gen
16+
IMAGE: jrcs/letsencrypt-nginx-proxy-companion
17+
NGINX_CONTAINER_NAME: nginx-proxy
18+
TEST_DOMAINS: le1.wtf,le2.wtf,le3.wtf
19+
20+
jobs:
21+
companion-build:
22+
runs-on: ubuntu-latest
23+
24+
steps:
25+
- name: Checkout Code
26+
uses: actions/checkout@v2
27+
- name: Patch the Dockerfile's docker-gen
28+
run: |
29+
sed -i 's#DOCKER_GEN_VERSION=.*$#DOCKER_GEN_VERSION=fix-current-container-id#g' Dockerfile
30+
sed -i 's#go get github.com/jwilder/docker-gen#go get github.com/buchdag/docker-gen \&\& mv /go/src/github.com/buchdag /go/src/github.com/jwilder#g' Dockerfile
31+
- name: Build Image
32+
run: docker build -t "$IMAGE" .
33+
- name: Inspect Image
34+
run: docker inspect "$IMAGE"
35+
- name: Get acme.sh Version
36+
run: docker run --rm "$IMAGE" acme.sh --version
37+
- name: List Docker Images
38+
run: docker images
39+
- name: Export Image Artifact
40+
run: docker save $IMAGE > companion.tar
41+
- name: Upload Image Artifact
42+
uses: actions/upload-artifact@v2
43+
with:
44+
name: companion.tar
45+
path: companion.tar
46+
47+
nginx-proxy-build:
48+
runs-on: ubuntu-latest
49+
50+
steps:
51+
- name: Checkout Code
52+
uses: actions/checkout@v2
53+
- name: Build patched nginx-proxy Image
54+
run: docker build -t "jwilder/nginx-proxy:latest" ./test/setup/nginx-proxy
55+
- name: Build patched docker-gen Image
56+
run: docker build -t "jwilder/docker-gen:latest" ./test/setup/docker-gen
57+
- name: List Docker Images
58+
run: docker images
59+
- name: Export Images Artifacts
60+
run: |
61+
docker save jwilder/nginx-proxy:latest > nginx-proxy.tar
62+
docker save jwilder/docker-gen:latest > docker-gen.tar
63+
- name: Upload nginx-proxy Image Artifact
64+
uses: actions/upload-artifact@v2
65+
with:
66+
name: nginx-proxy.tar
67+
path: nginx-proxy.tar
68+
- name: Upload docker-gen Image Artifact
69+
uses: actions/upload-artifact@v2
70+
with:
71+
name: docker-gen.tar
72+
path: docker-gen.tar
73+
74+
docker-specs-testing:
75+
needs: companion-build
76+
runs-on: ubuntu-latest
77+
78+
steps:
79+
- name: Checkout Code
80+
uses: actions/checkout@v2
81+
with:
82+
repository: docker-library/official-images
83+
path: official-images
84+
- name: Download Builded Image
85+
uses: actions/download-artifact@v2
86+
with:
87+
name: companion.tar
88+
- name: Import Builded Image
89+
run: docker load < companion.tar
90+
- name: Docker Specifications Testing
91+
run: official-images/test/run.sh "$IMAGE"
92+
- if: ${{ failure() }}
93+
run: test/github_actions/containers-logs.sh
94+
95+
integration-testing:
96+
needs:
97+
- companion-build
98+
- nginx-proxy-build
99+
strategy:
100+
fail-fast: false
101+
matrix:
102+
setup: [2containers, 3containers]
103+
test-name:
104+
[
105+
docker_api,
106+
location_config,
107+
default_cert,
108+
certs_single,
109+
certs_san,
110+
certs_single_domain,
111+
certs_standalone,
112+
force_renew,
113+
acme_accounts,
114+
private_keys,
115+
container_restart,
116+
permissions_default,
117+
permissions_custom,
118+
symlinks,
119+
]
120+
runs-on: ubuntu-latest
121+
122+
steps:
123+
- name: Checkout Code
124+
uses: actions/checkout@v2
125+
# PREPARE RUNNER ENV
126+
- name: Add Test Domains in /etc/hosts
127+
run: |
128+
test_domains=$(echo $TEST_DOMAINS | tr "," "\n")
129+
for domain in $test_domains
130+
do
131+
echo "127.0.0.1 $domain" | sudo tee -a /etc/hosts
132+
done
133+
- name: Setup Boulder
134+
run: test/setup/setup-boulder.sh
135+
- name: Download nginx-proxy Patched Image
136+
uses: actions/download-artifact@v2
137+
with:
138+
name: nginx-proxy.tar
139+
- name: Download docker-gen Patched Image
140+
uses: actions/download-artifact@v2
141+
with:
142+
name: docker-gen.tar
143+
- name: Import nginx-proxy patched Images
144+
run: |
145+
docker load < nginx-proxy.tar
146+
docker load < docker-gen.tar
147+
- name: Setup NGINX Proxy
148+
env:
149+
SETUP: ${{ matrix.setup }}
150+
run: test/setup/setup-nginx-proxy.sh
151+
# ADD BUILDED IMAGE
152+
- name: Download Builded Image
153+
uses: actions/download-artifact@v2
154+
with:
155+
name: companion.tar
156+
- name: Import Builded Image
157+
run: docker load < companion.tar
158+
# TEST
159+
- name: Integration Testing
160+
env:
161+
SETUP: ${{ matrix.setup }}
162+
run: test/run.sh -t ${{ matrix.test-name }} "$IMAGE"
163+
- if: ${{ failure() }}
164+
run: test/github_actions/containers-logs.sh

.travis.yml

Lines changed: 0 additions & 49 deletions
This file was deleted.
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#!/bin/bash
2+
3+
bold_echo() {
4+
echo -e "\033[33;1m$1\033[0m"
5+
}
6+
7+
if [[ -f "$GITHUB_WORKSPACE/test/github_actions/failed_tests.txt" ]]; then
8+
mapfile -t containers < "$GITHUB_WORKSPACE/test/github_actions/failed_tests.txt"
9+
fi
10+
11+
containers+=("$NGINX_CONTAINER_NAME")
12+
[[ $SETUP = "3containers" ]] && containers+=("$DOCKER_GEN_CONTAINER_NAME")
13+
containers+=("boulder")
14+
15+
for container in "${containers[@]}"; do
16+
bold_echo "Docker container output for $container"
17+
docker logs "$container"
18+
docker inspect "$container"
19+
if [[ "$container" == "acme_accounts" ]]; then
20+
bold_echo "Docker container output for ${container}_default"
21+
docker logs "${container}_default"
22+
docker inspect "${container}_default"
23+
fi
24+
done

test/run.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
203203
self="$(basename "$0")"
204204
failed_tests=()
205205

206-
if [[ -z $TRAVIS ]] && [[ -f "$dir/local_test_env.sh" ]]; then
206+
if [[ -z $GITHUB_ACTIONS ]] && [[ -f "$dir/local_test_env.sh" ]]; then
207207
# shellcheck source=/dev/null
208208
source "$dir/local_test_env.sh"
209209
fi
@@ -448,9 +448,9 @@ done
448448

449449
if [ "$didFail" ]; then
450450
## Next five lines were added by jrcs/docker-letsencrypt-nginx-proxy-companion
451-
if [[ $TRAVIS == 'true' ]]; then
451+
if [[ $GITHUB_ACTIONS == 'true' ]]; then
452452
for test in "${failed_tests[@]}"; do
453-
echo "$test" >> "$dir/travis/failed_tests.txt"
453+
echo "$test" >> "$dir/github_actions/failed_tests.txt"
454454
done
455455
fi
456456
## End of additional code

test/setup/docker-gen/Dockerfile

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
FROM golang:1.15-alpine AS build-docker-gen
2+
3+
ARG DOCKER_GEN_VERSION=fix-current-container-id
4+
5+
LABEL stage=intermediate
6+
7+
# Install build dependencies for docker-gen
8+
RUN apk add --update \
9+
curl \
10+
gcc \
11+
git \
12+
make \
13+
musl-dev
14+
15+
# Build docker-gen
16+
RUN go get github.com/buchdag/docker-gen \
17+
&& mv /go/src/github.com/buchdag /go/src/github.com/jwilder \
18+
&& cd /go/src/github.com/jwilder/docker-gen \
19+
&& git -c advice.detachedHead=false checkout $DOCKER_GEN_VERSION \
20+
&& make get-deps \
21+
&& make all
22+
23+
FROM alpine:3.8
24+
25+
LABEL maintainer="Nicolas Duchon <[email protected]>"
26+
27+
# DOCKER_GEN_VERSION environment variable is required by letsencrypt-nginx-proxy-companion
28+
ENV DOCKER_GEN_VERSION=0.7.4 \
29+
DOCKER_HOST=unix:///tmp/docker.sock
30+
31+
# Copy docker-gen binary from build stage
32+
COPY --from=build-docker-gen /go/src/github.com/jwilder/docker-gen/docker-gen /usr/local/bin/
33+
34+
# Get latest nginx.tmpl
35+
ADD https://raw.githubusercontent.com/jwilder/nginx-proxy/master/nginx.tmpl /etc/docker-gen/templates/
36+
37+
ENTRYPOINT ["/usr/local/bin/docker-gen"]

test/setup/nginx-proxy/Dockerfile

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
FROM golang:1.15-alpine AS go-builder
2+
3+
ARG DOCKER_GEN_VERSION=fix-current-container-id
4+
ARG FOREGO_VERSION=20180216151118
5+
6+
LABEL stage=intermediate
7+
8+
# Install build dependencies for docker-gen and forego
9+
RUN apk add --update \
10+
curl \
11+
gcc \
12+
git \
13+
make \
14+
musl-dev
15+
16+
# Build forego
17+
RUN go get github.com/ddollar/forego \
18+
&& cd /go/src/github.com/ddollar/forego \
19+
&& git -c advice.detachedHead=false checkout $FOREGO_VERSION \
20+
&& make all
21+
22+
# Build docker-gen
23+
RUN go get github.com/buchdag/docker-gen \
24+
&& mv /go/src/github.com/buchdag /go/src/github.com/jwilder \
25+
&& cd /go/src/github.com/jwilder/docker-gen \
26+
&& git -c advice.detachedHead=false checkout $DOCKER_GEN_VERSION \
27+
&& make get-deps \
28+
&& make all
29+
30+
FROM nginx:1.19-alpine
31+
32+
LABEL maintainer="Nicolas Duchon <[email protected]>"
33+
34+
# DOCKER_GEN_VERSION environment variable is required by letsencrypt-nginx-proxy-companion
35+
ENV DOCKER_GEN_VERSION=0.7.4 \
36+
DOCKER_HOST=unix:///tmp/docker.sock
37+
38+
# Install/update run dependencies
39+
RUN apk add --update \
40+
bash \
41+
ca-certificates \
42+
curl \
43+
openssl \
44+
&& rm -rf /var/cache/apk/*
45+
46+
# Configure Nginx and apply fix for very long server names
47+
RUN echo "daemon off;" >> /etc/nginx/nginx.conf \
48+
&& sed -i 's/worker_processes 1/worker_processes auto/' /etc/nginx/nginx.conf
49+
50+
# Copy forego and docker-gen binaries from build stage
51+
COPY --from=go-builder /go/src/github.com/ddollar/forego/forego /usr/local/bin/
52+
COPY --from=go-builder /go/src/github.com/jwilder/docker-gen/docker-gen /usr/local/bin/
53+
54+
# Install nginx-proxy
55+
RUN mkdir /src /app \
56+
&& curl -sSL https://github.com/jwilder/nginx-proxy/archive/master.tar.gz \
57+
| tar -C /src -xz \
58+
&& cp /src/nginx-proxy-master/Procfile /app/ \
59+
&& cp /src/nginx-proxy-master/dhparam.pem.default /app/ \
60+
&& cp /src/nginx-proxy-master/docker-entrypoint.sh /app/ \
61+
&& cp /src/nginx-proxy-master/generate-dhparam.sh /app/ \
62+
&& cp /src/nginx-proxy-master/nginx.tmpl /app/ \
63+
&& cp /src/nginx-proxy-master/network_internal.conf /etc/nginx/ \
64+
&& rm -rf /src
65+
66+
WORKDIR /app
67+
68+
VOLUME ["/etc/nginx/certs", "/etc/nginx/dhparam"]
69+
70+
ENTRYPOINT ["/app/docker-entrypoint.sh"]
71+
CMD ["forego", "start", "-r"]

test/setup/setup-boulder.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ set -e
55
acme_endpoint='http://boulder:4001/directory'
66

77
setup_boulder() {
8-
export GOPATH=${TRAVIS_BUILD_DIR}/go
8+
export GOPATH=${GITHUB_WORKSPACE}/go
99
[[ ! -d $GOPATH/src/github.com/letsencrypt/boulder ]] \
1010
&& git clone https://github.com/letsencrypt/boulder \
1111
"$GOPATH/src/github.com/letsencrypt/boulder"

0 commit comments

Comments
 (0)