Update main.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 943b344..aca082a 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -7,6 +7,11 @@ on:
branches: [ master, maint/* ]
jobs:
+ # Build the docker container images that we will use for our Linux builds. This will
+ # identify the last commit to the repository that updated the docker images, and try
+ # to download the image tagged with that sha. If it does not exist, we'll do a docker
+ # build and push the image up to GitHub Packages for the actual CI/CD runs. We tag
+ # with both the sha and "latest" so that the subsequent runs need not know the sha.
build_containers:
strategy:
matrix:
@@ -24,20 +29,20 @@ jobs:
fetch-depth: 0
- name: Calculate image label
run: |
- echo "::set-env name=docker-label::test3-$(git log -1 --pretty=format:"%h" -- ${{ env.docker-config-path }})"
- - name: Log in to GitHub Packages
+ echo "::set-env name=docker-container::${{ github.repository }}/${{ matrix.container.name }}"
+ echo "::set-env name=docker-container-url::docker.pkg.github.com/${{ env.docker-container }}"
+ echo "::set-env name=docker-sha-tag::test3-$(git log -1 --pretty=format:"%h" -- ${{ env.docker-config-path }})"
+ - name: Download existing image
run: |
docker login https://docker.pkg.github.com -u ${{github.actor}} -p ${{github.token}}
- - name: Download image
- run: |
+
echo "::set-env name=docker-exists::true"
- docker pull docker.pkg.github.com/${{ github.repository }}/${{ matrix.container.name }}:${{ env.docker-label }} || echo "::set-env name=docker-exists::false"
- - name: Build image
+ docker pull ${{ env.docker-container-url }}:${{ env.docker-sha-tag }} || echo "::set-env name=docker-exists::false"
+ - name: Build and publish image
run: |
- docker build -t docker.pkg.github.com/${{ github.repository }}/${{ matrix.container.name }}:${{ env.docker-label }} --build-arg BASE=${{ matrix.container.base }} -f ${{ matrix.container.name }} .
+ docker build -t ${{ env.docker-container-url }}:${{ env.docker-sha-tag }} --build-arg BASE=${{ matrix.container.base }} -f ${{ matrix.container.name }} .
+ docker tag ${{ env.docker-container-url }}:${{ env.docker-sha-tag }} ${{ env.docker-container-url }}:latest
+ docker push ${{ docker.container-url }}:${{ env.docker-sha-tag }}
+ docker push ${{ docker.container-url }}:latest
working-directory: ${{ env.docker-config-path }}
if: env.docker-exists != 'true'
- - name: Publish image
- run: |
- docker push docker.pkg.github.com/${{ github.repository }}/${{ matrix.container.name }}:${{ env.docker-label }}
- if: env.docker-exists != 'true'