snowdrop/release-manager

Refactor github workflow to only build image on main branch commits

Closed this issue · 6 comments

Suggestion

Refactor the github workflow to only build an image on main branch commits and not not for PR.

Example of code

name: "CI - JDK 11 Build"

on:
    push:
        branches: [ main ]
        tags: ['*.*']
    pull_request:
        branches: [ main ]

jobs:
    build-jdk11:
        name: "JDK 11 Build"
        runs-on: ubuntu-latest

        steps:
            -   uses: actions/checkout@v2
            -   name: Setup AdoptOpenJDK
                uses: joschi/setup-jdk@v2.3.0
                with:
                    java-version: 11

            -   name: Build
                run: ./mvnw clean package -X
                
    build-container:
        name: "Build container image"
        runs-on: ubuntu-latest
        if: github.event_name != 'push'
        steps:
            -   uses: actions/checkout@v2
            -   name: Container meta
                id: container_meta
                uses: crazy-max/ghaction-docker-meta@v2
                with:
                    # list of Docker images to use as base name for tags
                    images: |
                        quay.io/snowdrop/release-manager
                    # generate Docker tags based on the following events/attributes
                    tags: |
                        type=semver,pattern={{version}}
                        type=semver,pattern={{major}}.{{minor}}
                        type=semver,pattern={{major}}
                        type=sha
                        type=ref,event=tag

            -   name: Login to DockerHub
                uses: docker/login-action@v1
                with:
                  registry: quay.io
                  username: ${{ secrets.QUAY_USERNAME }}
                  password: ${{ secrets.QUAY_ROBOT_TOKEN }}

            -   name: Build and push
                id: container_build
                uses: docker/build-push-action@v2
                with:
                    context: .
                    file: ./ci/Dockerfile.jvm
                    push: ${{ github.event_name != 'pull_request' }}
                    # tags: quay.io/snowdrop/release-manager:latest
                    tags: ${{ steps.container_meta.outputs.tags }}
                    labels: ${{ steps.container_meta.outputs.labels }}

            -   name: Image digest
                run: echo ${{ steps.container_build.outputs.digest }}

WDYT: @jacobdotcosta @aureamunoz

Yes, I agree with that!

I will push the change and we will see if job will not be called for next PR push

If condition is wrong as only one job was executed and no container image was build : https://github.com/snowdrop/release-manager/actions/runs/785457835
To be checked: @aureamunoz @jacobdotcosta

There is still an issue as the files resulting of the application built (= jar, lib, ...) are uploaded here

/home/runner/work/release-manager/release-manager

while docker buildx is looking to find them here

#5 [3/4] COPY target/lib/* /deployments/lib/
#5 sha256:cb1baa6abc82dff111ea8381b0a3b0752ef545ebaaf20cd856308f4d567a0e54
#5 ERROR: lstat /var/lib/docker/tmp/buildkit-mount250359445/target/lib: no such file or directory
------
 > [3/4] COPY target/lib/* /deployments/lib/:
------
error: failed to solve: rpc error: code = Unknown desc = lstat /var/lib/docker/tmp/buildkit-mount250359445/target/lib: no such file or directory

Problem reported within the previous commit has been fixed: https://github.com/snowdrop/release-manager/actions/runs/785782147