diff --git a/.github/workflows/branch.yml b/.github/workflows/branch.yml new file mode 100644 index 00000000..1b1b9a0d --- /dev/null +++ b/.github/workflows/branch.yml @@ -0,0 +1,51 @@ +name: branch +on: + push: + branches: + - "*" + - "!master" + paths: + - .github/workflows/branch.yml + - cmd/** + - internal/** + - .dockerignore + - .golangci.yml + - Dockerfile + - go.mod + - go.sum + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - env: + DOCKER_BUILDKIT: "1" + run: docker build --target test . + + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - env: + DOCKER_BUILDKIT: "1" + run: docker build --target lint . + + docker: + runs-on: ubuntu-latest + needs: [test, lint] + steps: + - uses: actions/checkout@v2 + - uses: docker/setup-buildx-action@v1 + - name: Dockerhub login + run: echo ${{ secrets.DOCKERHUB_PASSWORD }} | docker login -u qmcgaw --password-stdin 2>&1 + - name: Docker build + run: | + docker buildx build \ + --platform=linux/amd64,linux/386,linux/arm64,linux/arm/v6,linux/arm/v7 \ + --build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` \ + --build-arg COMMIT=`git rev-parse --short HEAD` \ + --build-arg VERSION="branch-${GITHUB_REF##*/}" \ + -t qmcgaw/gluetun:branch-${GITHUB_REF##*/} \ + --push \ + . diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index b6127ddb..00000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: Docker build -on: - pull_request: - branches: [master] - paths: - - .github/workflows/build.yml - - cmd/** - - internal/** - - .dockerignore - - .golangci.yml - - Dockerfile - - go.mod - - go.sum -jobs: - build: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v2 - - name: Build image - run: docker build . diff --git a/.github/workflows/buildx-branch.yml b/.github/workflows/buildx-branch.yml deleted file mode 100644 index 432c107c..00000000 --- a/.github/workflows/buildx-branch.yml +++ /dev/null @@ -1,37 +0,0 @@ -name: Buildx branch -on: - push: - branches: - - "*" - - "*/*" - - "!master" - paths: - - .github/workflows/buildx-branch.yml - - cmd/** - - internal/** - - .dockerignore - - .golangci.yml - - Dockerfile - - go.mod - - go.sum -jobs: - buildx: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Buildx setup - uses: crazy-max/ghaction-docker-buildx@v3 - - name: Dockerhub login - run: echo ${{ secrets.DOCKERHUB_PASSWORD }} | docker login -u qmcgaw --password-stdin 2>&1 - - name: Run Buildx - run: | - docker buildx build \ - --progress plain \ - --platform=linux/amd64 \ - --build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` \ - --build-arg COMMIT=`git rev-parse --short HEAD` \ - --build-arg VERSION=${GITHUB_REF##*/} \ - -t qmcgaw/private-internet-access:${GITHUB_REF##*/} \ - -t qmcgaw/gluetun:${GITHUB_REF##*/} \ - --push \ - . diff --git a/.github/workflows/buildx-latest.yml b/.github/workflows/latest.yml similarity index 64% rename from .github/workflows/buildx-latest.yml rename to .github/workflows/latest.yml index b8bd7274..0a8b8da5 100644 --- a/.github/workflows/buildx-latest.yml +++ b/.github/workflows/latest.yml @@ -1,9 +1,9 @@ -name: Buildx latest +name: latest on: push: branches: [master] paths: - - .github/workflows/buildx-latest.yml + - .github/workflows/latest.yml - cmd/** - internal/** - .dockerignore @@ -11,20 +11,36 @@ on: - Dockerfile - go.mod - go.sum + jobs: - buildx: + test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - name: Buildx setup - uses: crazy-max/ghaction-docker-buildx@v3 + - env: + DOCKER_BUILDKIT: "1" + run: docker build --target test . + + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - env: + DOCKER_BUILDKIT: "1" + run: docker build --target lint . + + docker: + runs-on: ubuntu-latest + needs: [test, lint] + steps: + - uses: actions/checkout@v2 + - uses: docker/setup-buildx-action@v1 - name: Dockerhub login run: echo ${{ secrets.DOCKERHUB_PASSWORD }} | docker login -u qmcgaw --password-stdin 2>&1 - - name: Run Buildx + - name: Docker buildx run: | docker buildx build \ - --progress plain \ - --platform=linux/amd64,linux/386,linux/arm64,linux/arm/v7,linux/arm/v6 \ + --platform=linux/amd64,linux/386,linux/arm64,linux/arm/v6,linux/arm/v7 \ --build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` \ --build-arg COMMIT=`git rev-parse --short HEAD` \ --build-arg VERSION=latest \ diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml new file mode 100644 index 00000000..a1b6df9c --- /dev/null +++ b/.github/workflows/pr.yml @@ -0,0 +1,40 @@ +name: pull request +on: + pull_request: + branches: [master] + paths: + - .github/workflows/pr.yml + - cmd/** + - internal/** + - .dockerignore + - .golangci.yml + - Dockerfile + - go.mod + - go.sum + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - env: + DOCKER_BUILDKIT: "1" + run: docker build --target test . + + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - env: + DOCKER_BUILDKIT: "1" + run: docker build --target lint . + + docker: + runs-on: ubuntu-latest + needs: [test, lint] + steps: + - uses: actions/checkout@v2 + - name: Docker build + env: + DOCKER_BUILDKIT: "1" + run: docker build . diff --git a/.github/workflows/buildx-release.yml b/.github/workflows/release.yml similarity index 61% rename from .github/workflows/buildx-release.yml rename to .github/workflows/release.yml index 45bd0d51..0c34e783 100644 --- a/.github/workflows/buildx-release.yml +++ b/.github/workflows/release.yml @@ -1,9 +1,9 @@ -name: Buildx release +name: release on: release: types: [published] paths: - - .github/workflows/buildx-release.yml + - .github/workflows/release.yml - cmd/** - internal/** - .dockerignore @@ -11,20 +11,36 @@ on: - Dockerfile - go.mod - go.sum + jobs: - buildx: + test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - name: Buildx setup - uses: crazy-max/ghaction-docker-buildx@v3 + - env: + DOCKER_BUILDKIT: "1" + run: docker build --target test . + + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - env: + DOCKER_BUILDKIT: "1" + run: docker build --target lint . + + docker: + runs-on: ubuntu-latest + needs: [test, lint] + steps: + - uses: actions/checkout@v2 + - uses: docker/setup-buildx-action@v1 - name: Dockerhub login run: echo ${{ secrets.DOCKERHUB_PASSWORD }} | docker login -u qmcgaw --password-stdin 2>&1 - - name: Run Buildx + - name: Docker buildx run: | docker buildx build \ - --progress plain \ - --platform=linux/amd64,linux/386,linux/arm64,linux/arm/v7,linux/arm/v6 \ + --platform=linux/amd64,linux/386,linux/arm64,linux/arm/v6,linux/arm/v7 \ --build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` \ --build-arg COMMIT=`git rev-parse --short HEAD` \ --build-arg VERSION=${GITHUB_REF##*/} \ diff --git a/Dockerfile b/Dockerfile index df5fe16c..fddd5577 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,27 +1,38 @@ ARG ALPINE_VERSION=3.12 ARG GO_VERSION=1.15 -FROM golang:${GO_VERSION}-alpine${ALPINE_VERSION} AS builder +FROM golang:${GO_VERSION}-alpine${ALPINE_VERSION} AS base RUN apk --update add git ENV CGO_ENABLED=0 -ARG GOLANGCI_LINT_VERSION=v1.34.1 -RUN [ "$(uname -m)" != "x86_64" ] || wget -O- -nv https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s ${GOLANGCI_LINT_VERSION} WORKDIR /tmp/gobuild -COPY .golangci.yml . COPY go.mod go.sum ./ RUN go mod download +COPY cmd/ ./cmd/ +COPY internal/ ./internal/ + +FROM base AS test +ENV CGO_ENABLED=1 +RUN apk --update add g++ +RUN go test -race ./... + +FROM base AS lint +ARG GOLANGCI_LINT_VERSION=v1.34.1 +RUN wget -O- -nv https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | \ + sh -s -- -b /usr/local/bin ${GOLANGCI_LINT_VERSION} +COPY .golangci.yml ./ +RUN golangci-lint run --timeout=10m + +FROM base AS build ARG VERSION=unknown ARG BUILD_DATE="an unknown date" ARG COMMIT=unknown -COPY cmd/gluetun/main.go . +COPY cmd/ ./cmd/ COPY internal/ ./internal/ -RUN [ "$(uname -m)" != "x86_64" ] || go test ./... -RUN [ "$(uname -m)" != "x86_64" ] || golangci-lint run --timeout=10m RUN go build -trimpath -ldflags="-s -w \ -X 'main.version=$VERSION' \ -X 'main.buildDate=$BUILD_DATE' \ -X 'main.commit=$COMMIT' \ - " -o entrypoint main.go + " -o entrypoint cmd/gluetun/main.go FROM alpine:${ALPINE_VERSION} ARG VERSION=unknown @@ -126,4 +137,4 @@ RUN apk add -q --progress --no-cache --update openvpn ca-certificates iptables i mkdir /gluetun # TODO remove once SAN is added to PIA servers certificates, see https://github.com/pia-foss/manual-connections/issues/10 ENV GODEBUG=x509ignoreCN=0 -COPY --from=builder /tmp/gobuild/entrypoint /entrypoint +COPY --from=build /tmp/gobuild/entrypoint /entrypoint