diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 71dab053..c9a40bc0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -157,3 +157,67 @@ jobs: run: | rm -rf /tmp/.buildx-cache-debug mv /tmp/.buildx-cache-debug-new /tmp/.buildx-cache-debug + + docker-alpine-release: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + - name: Set up QEMU for multiple platforms + uses: docker/setup-qemu-action@master + with: + platforms: arm64,amd64 + - name: Cache Docker layers + uses: actions/cache@v2 + with: + path: /tmp/.buildx-cache-alpine + key: ${{ runner.os }}-buildx-alpine-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-buildx-alpine- + - name: Docker meta + id: meta-alpine + uses: docker/metadata-action@v3 + with: + # list of Docker images to use as base name for tags + images: | + ${{ secrets.DOCKERHUB_USERNAME }}/headscale + ghcr.io/${{ github.repository_owner }}/headscale + flavor: | + latest=false + tags: | + type=semver,pattern={{version}}-alpine + type=semver,pattern={{major}}.{{minor}}-alpine + type=semver,pattern={{major}}-alpine + type=raw,value=latest-alpine + type=sha,suffix=-alpine + - name: Login to DockerHub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Login to GHCR + uses: docker/login-action@v1 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Build and push + id: docker_build + uses: docker/build-push-action@v2 + with: + push: true + context: . + file: Dockerfile.alpine + tags: ${{ steps.meta-alpine.outputs.tags }} + labels: ${{ steps.meta-alpine.outputs.labels }} + platforms: linux/amd64,linux/arm64 + cache-from: type=local,src=/tmp/.buildx-cache-alpine + cache-to: type=local,dest=/tmp/.buildx-cache-alpine-new + - name: Prepare cache for next build + run: | + rm -rf /tmp/.buildx-cache-alpine + mv /tmp/.buildx-cache-alpine-new /tmp/.buildx-cache-alpine diff --git a/Dockerfile.alpine b/Dockerfile.alpine new file mode 100644 index 00000000..7d90e1ec --- /dev/null +++ b/Dockerfile.alpine @@ -0,0 +1,22 @@ +# Builder image +FROM golang:1.17.1-alpine AS build +ENV GOPATH /go +WORKDIR /go/src/headscale + +COPY go.mod go.sum /go/src/headscale/ +RUN apk add gcc musl-dev +RUN go mod download + +COPY . . + +RUN go install -a -ldflags="-extldflags=-static" -tags netgo,sqlite_omit_load_extension ./cmd/headscale +RUN test -e /go/bin/headscale + +# Production image +FROM alpine:latest + +COPY --from=build /go/bin/headscale /bin/headscale +ENV TZ UTC + +EXPOSE 8080/tcp +CMD ["headscale"]