name: build on: push: branches: - 'main' - 'release/*' tags: - 'v*' pull_request: branches: - '*' env: DOCKERHUB_SLUG: distribution/distribution jobs: build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 with: fetch-depth: 0 - name: Docker meta id: meta uses: docker/metadata-action@v3 with: images: | ${{ env.DOCKERHUB_SLUG }} ### versioning strategy ### push semver tag v3.2.1 on main (default branch) # distribution/distribution:3.2.1 # distribution/distribution:3.2 # distribution/distribution:3 # distribution/distribution:latest ### push semver prelease tag v3.0.0-beta.1 on main (default branch) # distribution/distribution:3.0.0-beta.1 ### push on main # distribution/distribution:edge tags: | type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} type=semver,pattern={{major}} type=ref,event=pr type=edge labels: | org.opencontainers.image.title=Distribution org.opencontainers.image.description=The toolkit to pack, ship, store, and deliver container content - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 - name: Login to DockerHub if: github.event_name != 'pull_request' uses: docker/login-action@v1 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build artifacts uses: docker/bake-action@v1 with: targets: artifact-all - name: Move artifacts run: | mv ./bin/**/* ./bin/ - name: Upload artifacts uses: actions/upload-artifact@v2 with: name: registry path: ./bin/* if-no-files-found: error - name: Build image uses: docker/bake-action@v1 with: files: | ./docker-bake.hcl ${{ steps.meta.outputs.bake-file }} targets: image-all push: ${{ github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/') }} - name: GitHub Release uses: softprops/action-gh-release@v1 if: startsWith(github.ref, 'refs/tags/') with: draft: true files: | bin/*.tar.gz bin/*.sha256 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}