Update Actions to always deploy the locally created image. non-PRs do not need to redownload images from DockerHub.

This commit is contained in:
Tim Donohue
2024-12-05 10:39:34 -06:00
parent 72d36a35bf
commit b035ea9de5
2 changed files with 28 additions and 17 deletions

View File

@@ -149,9 +149,9 @@ jobs:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_ACCESS_TOKEN: ${{ secrets.DOCKER_ACCESS_TOKEN }} DOCKER_ACCESS_TOKEN: ${{ secrets.DOCKER_ACCESS_TOKEN }}
######################################################################## #################################################################################
# Test Deployment via Docker to ensure images are working properly # Test Deployment via Docker to ensure newly built images are working properly
######################################################################## #################################################################################
docker-deploy: docker-deploy:
# Ensure this job never runs on forked repos. It's only executed for 'dspace/dspace' # Ensure this job never runs on forked repos. It's only executed for 'dspace/dspace'
if: github.repository == 'dspace/dspace' if: github.repository == 'dspace/dspace'
@@ -172,25 +172,23 @@ jobs:
swordv2__D__server__P__enabled: true swordv2__D__server__P__enabled: true
# If this is a PR, force using "pr-testing" version of all Docker images. Otherwise, if on main branch, use the # If this is a PR, force using "pr-testing" version of all Docker images. Otherwise, if on main branch, use the
# "latest" tag. Otherwise, use the branch name. NOTE: the "pr-testing" tag is a temporary tag that we assign to # "latest" tag. Otherwise, use the branch name. NOTE: the "pr-testing" tag is a temporary tag that we assign to
# all PR-built docker images in reusabe-docker-build.yml # all PR-built docker images in reusable-docker-build.yml
DSPACE_VER: ${{ (github.event_name == 'pull_request' && 'pr-testing') || (github.ref_name == github.event.repository.default_branch && 'latest') || github.ref_name }} DSPACE_VER: ${{ (github.event_name == 'pull_request' && 'pr-testing') || (github.ref_name == github.event.repository.default_branch && 'latest') || github.ref_name }}
steps: steps:
# Checkout our codebase (to get access to Docker Compose scripts) # Checkout our codebase (to get access to Docker Compose scripts)
- name: Checkout codebase - name: Checkout codebase
uses: actions/checkout@v4 uses: actions/checkout@v4
# For PRs, download Docker image artifacts (built by reusable-docker-build.yml for all PRs) # Download Docker image artifacts (which were just built by reusable-docker-build.yml)
- name: Download Docker image artifacts (for PRs) - name: Download Docker image artifacts
if: github.event_name == 'pull_request'
uses: actions/download-artifact@v4 uses: actions/download-artifact@v4
with: with:
# Download all Docker images (TAR files) into the /tmp/docker directory # Download all amd64 Docker images (TAR files) into the /tmp/docker directory
pattern: docker-image-* pattern: docker-image-*-linux-amd64
path: /tmp/docker path: /tmp/docker
merge-multiple: true merge-multiple: true
# For PRs, load each of the images into Docker by calling "docker image load" for each. # Load each of the images into Docker by calling "docker image load" for each.
# This ensures we are using the images built from this PR & not the prior versions on DockerHub # This ensures we are using the images just built & not any prior versions on DockerHub
- name: Load all downloaded Docker images (for PRs) - name: Load all downloaded Docker images
if: github.event_name == 'pull_request'
run: | run: |
find /tmp/docker -type f -name "*.tar" -exec docker image load --input "{}" \; find /tmp/docker -type f -name "*.tar" -exec docker image load --input "{}" \;
docker image ls -a docker image ls -a

View File

@@ -130,7 +130,7 @@ jobs:
#------------------------------------------------------------ #------------------------------------------------------------
# https://github.com/docker/metadata-action # https://github.com/docker/metadata-action
# Get Metadata for docker_build_deps step below # Get Metadata for docker_build_deps step below
- name: Sync metadata (tags, labels) from GitHub to Docker for image - name: Extract metadata (tags, labels) from GitHub for Docker image
if: ${{ ! matrix.isPr }} if: ${{ ! matrix.isPr }}
id: meta_build id: meta_build
uses: docker/metadata-action@v5 uses: docker/metadata-action@v5
@@ -151,10 +151,23 @@ jobs:
context: ${{ inputs.dockerfile_context }} context: ${{ inputs.dockerfile_context }}
file: ${{ inputs.dockerfile_path }} file: ${{ inputs.dockerfile_path }}
platforms: ${{ matrix.arch }} platforms: ${{ matrix.arch }}
push: true
# Use tags / labels provided by 'docker/metadata-action' above # Use tags / labels provided by 'docker/metadata-action' above
tags: ${{ steps.meta_build.outputs.tags }} tags: ${{ steps.meta_build.outputs.tags }}
labels: ${{ steps.meta_build.outputs.labels }} labels: ${{ steps.meta_build.outputs.labels }}
# Export image to both Docker registry & to a local TAR file
outputs: |
registry
type=docker,dest=/tmp/${{ inputs.build_id }}.tar
# Upload the local docker image (in TAR file) to a build Artifact
- name: Upload local image to artifact
if: ${{ ! matrix.isPr }}
uses: actions/upload-artifact@v4
with:
name: docker-image-${{ inputs.build_id }}-${{ env.ARCH_NAME }}
path: /tmp/${{ inputs.build_id }}.tar
if-no-files-found: error
retention-days: 1
# Export the digest of Docker build locally (for non PRs only) # Export the digest of Docker build locally (for non PRs only)
- name: Export Docker build digest - name: Export Docker build digest
@@ -204,7 +217,7 @@ jobs:
# brand-new images for automated testing. # brand-new images for automated testing.
#-------------------------------------------------------------- #--------------------------------------------------------------
# Get Metadata for docker_build_deps step below # Get Metadata for docker_build_deps step below
- name: Create metadata (tags, labels) for local Docker image - name: Extract metadata (tags, labels) for local Docker image
if: matrix.isPr if: matrix.isPr
id: meta_build_pr id: meta_build_pr
uses: docker/metadata-action@v5 uses: docker/metadata-action@v5
@@ -233,7 +246,7 @@ jobs:
if: matrix.isPr if: matrix.isPr
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:
name: docker-image-${{ inputs.build_id }} name: docker-image-${{ inputs.build_id }}-${{ env.ARCH_NAME }}
path: /tmp/${{ inputs.build_id }}.tar path: /tmp/${{ inputs.build_id }}.tar
if-no-files-found: error if-no-files-found: error
retention-days: 1 retention-days: 1