diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 37553eb32643..a1f96105d078 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -13,27 +13,6 @@ on: permissions: contents: read # to fetch code (actions/checkout) -# Define shared environment variables for all jobs below -env: - # Define tags to use for Docker images based on Git tags/branches (for docker/metadata-action) - # For a new commit on default branch (main), use the literal tag 'latest' on Docker image. - # For a new commit on other branches, use the branch name as the tag for Docker image. - # For a new tag, copy that tag name as the tag for Docker image. - IMAGE_TAGS: | - type=raw,value=latest,enable=${{ endsWith(github.ref, github.event.repository.default_branch) }} - type=ref,event=branch,enable=${{ !endsWith(github.ref, github.event.repository.default_branch) }} - type=ref,event=tag - # Define default tag "flavor" for docker/metadata-action per - # https://github.com/docker/metadata-action#flavor-input - # We manage the 'latest' tag ourselves to the 'main' branch (see settings above) - TAGS_FLAVOR: | - latest=false - # Architectures / Platforms for which we will build Docker images - # If this is a PR, we ONLY build for AMD64. For PRs we only do a sanity check test to ensure Docker builds work. - # If this is NOT a PR (e.g. a tag or merge commit), also build for ARM64. NOTE: The ARM64 build takes MUCH - # longer (around 45mins or so) which is why we only run it when pushing a new Docker image. - PLATFORMS: linux/amd64${{ github.event_name != 'pull_request' && ', linux/arm64' || '' }} - jobs: docker: # Ensure this job never runs on forked repos. It's only executed for our repo @@ -111,6 +90,97 @@ jobs: # Use tags / labels provided by 'docker/metadata-action' above tags: ${{ steps.meta_build_deps.outputs.tags }} labels: ${{ steps.meta_build_deps.outputs.labels }} + + ####################################### + # Build/Push the 'dataquest/dspace' image + ####################################### + # Get Metadata for docker_build step below + - name: Sync metadata (tags, labels) from GitHub to Docker for 'dspace' image + id: meta_build + uses: docker/metadata-action@v4 + with: + images: dataquest/dspace + tags: ${{ env.IMAGE_TAGS }} + flavor: ${{ env.TAGS_FLAVOR }} + + - name: Build and push 'dspace' image + id: docker_build + uses: docker/build-push-action@v3 + with: + context: . + file: ./Dockerfile + platforms: ${{ env.PLATFORMS }} + # For pull requests, we run the Docker build (to ensure no PR changes break the build), + # but we ONLY do an image push to DockerHub if it's NOT a PR + push: ${{ github.event_name != 'pull_request' }} + # Use tags / labels provided by 'docker/metadata-action' above + tags: ${{ steps.meta_build.outputs.tags }} + labels: ${{ steps.meta_build.outputs.labels }} + + ##################################################### + # Build/Push the 'dataquest/dspace' image ('-test' tag) + ##################################################### + # Get Metadata for docker_build_test step below + - name: Sync metadata (tags, labels) from GitHub to Docker for 'dspace-test' image + id: meta_build_test + uses: docker/metadata-action@v4 + with: + images: dataquest/dspace + tags: ${{ env.IMAGE_TAGS }} + # As this is a test/development image, its tags are all suffixed with "-test". Otherwise, it uses the same + # tagging logic as the primary 'dataquest/dspace' image above. + flavor: ${{ env.TAGS_FLAVOR }} + suffix=-test + + - name: Build and push 'dspace-test' image + id: docker_build_test + uses: docker/build-push-action@v3 + with: + context: . + file: ./Dockerfile.test + platforms: ${{ env.PLATFORMS }} + # For pull requests, we run the Docker build (to ensure no PR changes break the build), + # but we ONLY do an image push to DockerHub if it's NOT a PR + push: ${{ github.event_name != 'pull_request' }} + # Use tags / labels provided by 'docker/metadata-action' above + tags: ${{ steps.meta_build_test.outputs.tags }} + labels: ${{ steps.meta_build_test.outputs.labels }} + + ########################################### + # Build/Push the 'dataquest/dspace-cli' image + ########################################### + # Get Metadata for docker_build_test step below + - name: Sync metadata (tags, labels) from GitHub to Docker for 'dspace-cli' image + id: meta_build_cli + uses: docker/metadata-action@v4 + with: + images: dataquest/dspace-cli + tags: ${{ env.IMAGE_TAGS }} + flavor: ${{ env.TAGS_FLAVOR }} + + - name: Build and push 'dspace-cli' image + id: docker_build_cli + uses: docker/build-push-action@v3 + with: + context: . + file: ./Dockerfile.cli + platforms: ${{ env.PLATFORMS }} + # For pull requests, we run the Docker build (to ensure no PR changes break the build), + # but we ONLY do an image push to DockerHub if it's NOT a PR + push: ${{ github.event_name != 'pull_request' }} + # Use tags / labels provided by 'docker/metadata-action' above + tags: ${{ steps.meta_build_cli.outputs.tags }} + labels: ${{ steps.meta_build_cli.outputs.labels }} + + - name: redeploy + if: '!cancelled()' + run: | + curl -H "Accept: application/vnd.github.everest-preview+json" \ + -H "Authorization: token ${{ secrets.DEPLOY_DEV5_GH_ACTION_DISPATCH }}" \ + --request POST \ + https://api.github.com/repos/dataquest-dev/\ + dspace-angular/actions/workflows/deploy.yml/dispatches \ + --data "{\"ref\":\"refs/heads/dtq-dev\"}" #################################################### # Build/Push the 'dspace/dspace-dependencies' image.