Skip to content

retry_ubuntu_editor_image_requested #468

retry_ubuntu_editor_image_requested

retry_ubuntu_editor_image_requested #468

name: Retry Building Ubuntu Editor Version 🗔
on:
repository_dispatch:
types:
- retry_ubuntu_editor_image_requested
# Further reading:
# https://docs.github.com/en/free-pro-team@latest/actions/reference/events-that-trigger-workflows#repository_dispatch
# https://docs.github.com/en/free-pro-team@latest/rest/reference/repos#create-a-repository-dispatch-event
# https://developer.github.com/webhooks/event-payloads/#repository_dispatch
jobs:
buildImage:
name: "🛠 Retry unityci/editor (${{ github.event.client_payload.targetPlatform }})"
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
#################
# Variables #
#################
- name: Show hook input
run: |
echo "Event ${{ github.event.action }}"
echo "jobId: ${{ github.event.client_payload.jobId }}"
echo "Target platform to retry: ${{ github.event.client_payload.targetPlatform }}"
echo "Unity editor version: ${{ github.event.client_payload.editorVersion }}"
echo "Unity changeset: ${{ github.event.client_payload.changeSet }}"
echo "repoVersion (full): ${{ github.event.client_payload.repoVersionFull }}"
echo "repoVersion (only minor and major): ${{ github.event.client_payload.repoVersionMinor }}"
echo "repoVersion (only major): ${{ github.event.client_payload.repoVersionMajor }}"
- name: Report new build
uses: ./.github/workflows/actions/report-to-backend
with:
token: ${{ secrets.VERSIONING_TOKEN }}
jobId: ${{ github.event.client_payload.jobId }}
status: started
# Build info
imageType: editor
baseOs: ubuntu
repoVersion: ${{ github.event.client_payload.repoVersionFull }}
editorVersion: ${{ github.event.client_payload.editorVersion }}
targetPlatform: ${{ github.event.client_payload.targetPlatform }}
#############
# Setup #
#############
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Check if image does not already exist
run: |
# Source: https://stackoverflow.com/a/39731444/3593896
function docker_tag_exists() {
curl --silent -f -lSL https://index.docker.io/v1/repositories/$1/tags/$2 > /dev/null
}
if docker_tag_exists unityci/editor ubuntu-${{ github.event.client_payload.editorVersion }}-${{ github.event.client_payload.targetPlatform }}-${{ github.event.client_payload.repoVersionFull }} ; then
echo "Image already exists. Exiting."
exit 1
fi
#######################
# Free disk space #
#######################
- name: Free disk space
run: .github/workflows/scripts/free_disk_space.sh
############################
# Pull previous images #
############################
- name: Pull base image (must exist)
run: docker pull unityci/base:${{ github.event.client_payload.repoVersionFull }}
- name: Pull hub image (must exist)
run: docker pull unityci/hub:${{ github.event.client_payload.repoVersionFull }}
####################
# Editor image #
####################
- name: Build and publish
uses: docker/build-push-action@v5
id: build_ubuntu_editor_image
continue-on-error: true
with:
file: ./images/ubuntu/editor/Dockerfile
build-args: |
hubImage=unityci/hub:${{ github.event.client_payload.repoVersionFull }}
baseImage=unityci/base:${{ github.event.client_payload.repoVersionFull }}
version=${{ github.event.client_payload.editorVersion }}
changeSet=${{ github.event.client_payload.changeSet }}
module=${{ github.event.client_payload.targetPlatform }}
cache-from: type=local,src=/tmp/.buildx-cache
push: true
tags: |
unityci/editor:${{ github.event.client_payload.editorVersion }}-${{ github.event.client_payload.targetPlatform }}-${{ github.event.client_payload.repoVersionFull }}
unityci/editor:ubuntu-${{ github.event.client_payload.editorVersion }}-${{ github.event.client_payload.targetPlatform }}-${{ github.event.client_payload.repoVersionMinor }}
unityci/editor:${{ github.event.client_payload.editorVersion }}-${{ github.event.client_payload.targetPlatform }}-${{ github.event.client_payload.repoVersionMinor }}
unityci/editor:ubuntu-${{ github.event.client_payload.editorVersion }}-${{ github.event.client_payload.targetPlatform }}-${{ github.event.client_payload.repoVersionMajor }}
unityci/editor:${{ github.event.client_payload.editorVersion }}-${{ github.event.client_payload.targetPlatform }}-${{ github.event.client_payload.repoVersionMajor }}
unityci/editor:ubuntu-${{ github.event.client_payload.editorVersion }}-${{ github.event.client_payload.targetPlatform }}-${{ github.event.client_payload.repoVersionFull }}
### Warning: If we once publish latest, we will have to do it forever. Lets not do that unless it's needed ###
### Another warning: order is important: We go from specific to unspecific with the exception of the most specific tag which is used to check if the image is already there ###
#######################
# Retry the above #
#######################
- name: Build and publish (retry)
uses: docker/build-push-action@v5
if: steps.build_ubuntu_editor_image.outcome=='failure'
id: build_ubuntu_editor_image_retry
with:
file: ./images/ubuntu/editor/Dockerfile
build-args: |
hubImage=unityci/hub:${{ github.event.client_payload.repoVersionFull }}
baseImage=unityci/base:${{ github.event.client_payload.repoVersionFull }}
version=${{ github.event.client_payload.editorVersion }}
changeSet=${{ github.event.client_payload.changeSet }}
module=${{ github.event.client_payload.targetPlatform }}
cache-from: type=local,src=/tmp/.buildx-cache
push: true
tags: |
unityci/editor:${{ github.event.client_payload.editorVersion }}-${{ github.event.client_payload.targetPlatform }}-${{ github.event.client_payload.repoVersionFull }}
unityci/editor:ubuntu-${{ github.event.client_payload.editorVersion }}-${{ github.event.client_payload.targetPlatform }}-${{ github.event.client_payload.repoVersionMinor }}
unityci/editor:${{ github.event.client_payload.editorVersion }}-${{ github.event.client_payload.targetPlatform }}-${{ github.event.client_payload.repoVersionMinor }}
unityci/editor:ubuntu-${{ github.event.client_payload.editorVersion }}-${{ github.event.client_payload.targetPlatform }}-${{ github.event.client_payload.repoVersionMajor }}
unityci/editor:${{ github.event.client_payload.editorVersion }}-${{ github.event.client_payload.targetPlatform }}-${{ github.event.client_payload.repoVersionMajor }}
unityci/editor:ubuntu-${{ github.event.client_payload.editorVersion }}-${{ github.event.client_payload.targetPlatform }}-${{ github.event.client_payload.repoVersionFull }}
### Warning: If we once publish latest, we will have to do it forever. Lets not do that unless it's needed ###
### Another warning: order is important: We go from specific to unspecific with the exception of the most specific tag which is used to check if the image is already there ###
###########################
# Inspect publication #
###########################
- name: Inspect
run: |
docker buildx imagetools inspect unityci/editor:ubuntu-${{ github.event.client_payload.editorVersion }}-${{ github.event.client_payload.targetPlatform }}-${{ github.event.client_payload.repoVersionFull }}
- name: Image digest
id: image-digest
run: |
[ '${{ steps.build_ubuntu_editor_image.outcome }}' = 'success' ] && echo "digest=${{ steps.build_ubuntu_editor_image.outputs.digest }}" >> $GITHUB_OUTPUT || :
[ '${{ steps.build_ubuntu_editor_image_retry.outcome }}' = 'success' ] && echo "digest=${{ steps.build_ubuntu_editor_image_retry.outputs.digest }}" >> $GITHUB_OUTPUT || :
#################
# reporting #
#################
- name: Report publication
if: ${{ success() }}
uses: ./.github/workflows/actions/report-to-backend
with:
token: ${{ secrets.VERSIONING_TOKEN }}
jobId: ${{ github.event.client_payload.jobId }}
status: published
# Build info
imageType: editor
baseOs: ubuntu
repoVersion: ${{ github.event.client_payload.repoVersionFull }}
editorVersion: ${{ github.event.client_payload.editorVersion }}
targetPlatform: ${{ github.event.client_payload.targetPlatform }}
# Publication info
imageRepo: unityci
imageName: editor
friendlyTag: ${{ github.event.client_payload.repoVersionMinor }}
specificTag: ubuntu-${{ github.event.client_payload.repoVersionFull }}
digest: ${{ steps.image-digest.outputs.digest }}
- name: Report failure
if: ${{ failure() || cancelled() }}
uses: ./.github/workflows/actions/report-to-backend
with:
token: ${{ secrets.VERSIONING_TOKEN }}
jobId: ${{ github.event.client_payload.jobId }}
status: failed
# Build info
imageType: editor
baseOs: ubuntu
repoVersion: ${{ github.event.client_payload.repoVersionFull }}
editorVersion: ${{ github.event.client_payload.editorVersion }}
targetPlatform: ${{ github.event.client_payload.targetPlatform }}
# Failure info
reason: ${{ job.status }} - ${{ steps.build_ubuntu_editor_image.outputs.metadata }}
###############
# Metrics #
###############
- name: Disk space after
if: always()
run: df -h