diff --git a/.github/workflows/build-images.yaml b/.github/workflows/build-images.yaml new file mode 100644 index 0000000..ff5d6bb --- /dev/null +++ b/.github/workflows/build-images.yaml @@ -0,0 +1,94 @@ +--- +name: 'Build Docker images' + +on: + push: + branches: + - master + tags: + - 'v*' + pull_request: + branches: + - master + - build-images # remove when merged + +# cancel build action if superseded by new commit on same branch +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + docker: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set version params + id: version + shell: bash + run: | + echo "git_commit=$(echo ${GITHUB_SHA})" >> $GITHUB_OUTPUT + echo "git_branch=$(echo ${GITHUB_REF#refs/heads/})" >> $GITHUB_OUTPUT + echo "git_version=$(git name-rev --tags --name-only $(git rev-parse HEAD))" >> $GITHUB_OUTPUT + + - uses: actions-ecosystem/action-get-latest-tag@v1 + id: get-latest-tag + with: + semver_only: true + + - name: Print version params + run: | + echo "Commit: ${{ steps.version.outputs.git_commit }}" + echo "Branch: ${{ steps.version.outputs.git_branch }}" + echo "Version: ${{ steps.version.outputs.git_version }}" + echo "Latest tag: ${{ steps.get-latest-tag.outputs.tag }}" + echo "This tag: ${{ github.ref }}" + + - name: Docker meta + id: docker_meta + uses: docker/metadata-action@v5 + with: + images: nutsfoundation/nuts-node + tags: | + # generate 'master' tag for the master branch + type=ref,event=branch,enable={{is_default_branch}},prefix= + # generate 5.2.1 tag + type=semver,pattern={{version}} + flavor: | + latest=${{ steps.version.outputs.git_version == steps.get-latest-tag.outputs.tag }} + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Docker Hub + if: ${{ github.event_name != 'pull_request' }} + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build and push + uses: docker/build-push-action@v6 + with: + context: . + file: Dockerfile + platforms: linux/amd64,linux/arm64 + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.docker_meta.outputs.tags }} + build-args: | + GIT_VERSION=${{ steps.version.outputs.git_version }} + GIT_COMMIT=${{ steps.version.outputs.git_commit }} + GIT_BRANCH=${{ steps.version.outputs.git_branch }} + + - name: Build and push development image + if: ${{ github.event_name != 'pull_request' && github.ref == 'refs/heads/master'}} + uses: docker/build-push-action@v6 + with: + context: development/dev-image + push: true + platforms: linux/amd64,linux/arm64 + tags: nutsfoundation/nuts-node:dev