diff --git a/.github/workflows/cache-build.yml b/.github/workflows/cache-build.yml new file mode 100644 index 00000000..7b3e6f9d --- /dev/null +++ b/.github/workflows/cache-build.yml @@ -0,0 +1,59 @@ +name: Docker Image Build with cache + +on: + push: + branches: + - main + pull_request: + branches: [ main ] + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + cache_build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Prepare + id: prep + run: | + TAG=$(echo $GITHUB_SHA | head -c7) + IMAGE="cndp" + echo ::set-output name=tagged_image::${IMAGE}:${TAG} + echo ::set-output name=tag::${TAG} + + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@master + + # Registry login step intentionally missing + + - name: Cache Docker layers + uses: actions/cache@v2 + with: + path: /tmp/.buildx-cache + key: ${{ runner.os }}-single-buildx-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-single-buildx + + - name: Build production image + uses: docker/build-push-action@v2 + with: + context: . + builder: ${{ steps.buildx.outputs.name }} + file: ./containerization/docker/ubuntu/Dockerfile + push: false # This would be set to true in a real world deployment scenario. + tags: ${{ steps.prep.outputs.tagged_image }} + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache-new + + # Temp fix + # https://github.com/docker/build-push-action/issues/252 + # https://github.com/moby/buildkit/issues/1896 + - name: Move cache + run: | + rm -rf /tmp/.buildx-cache + mv /tmp/.buildx-cache-new /tmp/.buildx-cache