--- name: Release on: push: tags: - "*" # triggers only if push new tag version workflow_dispatch: jobs: goreleaser: runs-on: ubuntu-18.04 # due to CGO we need to user an older version steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 - name: Set up Go uses: actions/setup-go@v3 with: go-version: 1.19.0 - name: Install dependencies run: | sudo apt update sudo apt install -y gcc-aarch64-linux-gnu - name: Run GoReleaser uses: goreleaser/goreleaser-action@v2 with: distribution: goreleaser version: latest args: release --rm-dist env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} docker-release: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 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 key: ${{ runner.os }}-buildx-${{ github.sha }} restore-keys: | ${{ runner.os }}-buildx- - name: Docker meta id: meta 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 tags: | type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} type=semver,pattern={{major}} type=raw,value=latest type=sha - 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: . tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} platforms: linux/amd64,linux/arm64 cache-from: type=local,src=/tmp/.buildx-cache cache-to: type=local,dest=/tmp/.buildx-cache-new build-args: | VERSION=${{ steps.meta.outputs.version }} - name: Prepare cache for next build run: | rm -rf /tmp/.buildx-cache mv /tmp/.buildx-cache-new /tmp/.buildx-cache docker-debug-release: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 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-debug key: ${{ runner.os }}-buildx-debug-${{ github.sha }} restore-keys: | ${{ runner.os }}-buildx-debug- - name: Docker meta id: meta-debug 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}}-debug type=semver,pattern={{major}}.{{minor}}-debug type=semver,pattern={{major}}-debug type=raw,value=latest-debug type=sha,suffix=-debug - 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.debug tags: ${{ steps.meta-debug.outputs.tags }} labels: ${{ steps.meta-debug.outputs.labels }} platforms: linux/amd64,linux/arm64 cache-from: type=local,src=/tmp/.buildx-cache-debug cache-to: type=local,dest=/tmp/.buildx-cache-debug-new build-args: | VERSION=${{ steps.meta-debug.outputs.version }} - name: Prepare cache for next build 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@v3 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 build-args: | VERSION=${{ steps.meta-alpine.outputs.version }} - name: Prepare cache for next build run: | rm -rf /tmp/.buildx-cache-alpine mv /tmp/.buildx-cache-alpine-new /tmp/.buildx-cache-alpine