new_hub_images_requested #15
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: New Windows Hub Version ⚙ | |
on: | |
repository_dispatch: | |
types: | |
- new_hub_images_requested | |
- new_windows_hub_image_requested | |
workflow_dispatch: | |
inputs: | |
jobId: | |
description: "Job ID" | |
required: true | |
default: "dryRun" | |
repoVersionFull: | |
description: "All digits of the latest tag of this repository, e.g. `1.23.45`" | |
required: true | |
repoVersionMinor: | |
description: "Minor digit of that tag, e.g. `23`" | |
required: true | |
repoVersionMajor: | |
description: "Major digit of that tag, e.g. `1`" | |
required: true | |
# 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: | |
build: | |
name: "🛠 Build unityci/hub" | |
runs-on: windows-2022 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Checkout latest release tag | |
run: | | |
LATEST_TAG=$(git describe --tags `git rev-list --tags --max-count=1`) | |
git checkout $LATEST_TAG | |
shell: bash | |
################# | |
# Variables # | |
################# | |
- name: Setup Build Parameters | |
id: buildParameters | |
run: | | |
if ("${{ github.event.inputs.jobId }}") | |
{ | |
# Workflow Dispatch | |
echo "jobId={{ github.event.inputs.jobId }}" >> $Env:GITHUB_OUTPUT | |
echo "repoVersionFull={{ github.event.inputs.repoVersionFull }}" >> $Env:GITHUB_OUTPUT | |
echo "repoVersionMinor={{ github.event.inputs.repoVersionMinor }}" >> $Env:GITHUB_OUTPUT | |
echo "repoVersionMajor={{ github.event.inputs.repoVersionMajor }}" >> $Env:GITHUB_OUTPUT | |
} else | |
{ | |
# Repo Dispatch | |
echo "jobId=${{ github.event.client_payload.jobId }}" >> $Env:GITHUB_OUTPUT | |
echo "repoVersionFull=${{ github.event.client_payload.repoVersionFull }}" >> $Env:GITHUB_OUTPUT | |
echo "repoVersionMinor=${{ github.event.client_payload.repoVersionMinor }}" >> $Env:GITHUB_OUTPUT | |
echo "repoVersionMajor=${{ github.event.client_payload.repoVersionMajor }}" >> $Env:GITHUB_OUTPUT | |
} | |
- name: Show hook input | |
run: | | |
echo "Event ${{ github.event.action }}" | |
echo "jobId: ${{ steps.buildParameters.outputs.jobId }}" | |
echo "repoVersion (full): ${{ steps.buildParameters.outputs.repoVersionFull }}" | |
echo "repoVersion (only minor and major): ${{ steps.buildParameters.outputs.repoVersionMinor }}" | |
echo "repoVersion (only major): ${{ steps.buildParameters.outputs.repoVersionMajor }}" | |
- name: Report new build | |
uses: ./.github/workflows/actions/report-to-backend | |
with: | |
token: ${{ secrets.VERSIONING_TOKEN }} | |
jobId: ${{ steps.buildParameters.outputs.jobId }} | |
status: started | |
# Build info | |
imageType: hub | |
baseOs: windows | |
repoVersion: ${{ steps.buildParameters.outputs.repoVersionFull }} | |
############# | |
# Setup # | |
############# | |
- name: Login to DockerHub | |
env: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
run: docker login --username $Env:username --password $Env:password | |
- name: Check if image does not already exist | |
run: | | |
# Source: https://gist.github.com/webbertakken/1789a4683a99e2a62b975ff436a85382 | |
function Docker-Tag-Exists { | |
[CmdletBinding()] | |
param([string] $Repository, [string] $Tag) | |
Try { | |
Invoke-RestMethod "https://index.docker.io/v1/repositories/$Repository/tags/$Tag" | |
} Catch {} # Assume image does not exist on erroneous response | |
return $? | |
} | |
if (Docker-Tag-Exists -Repository "unityci/hub" -Tag "windows-${{ steps.buildParameters.outputs.repoVersionFull }}") { | |
echo "Image already exists. Exiting." | |
exit 1 | |
} | |
# TODO: Cache layers, currently not supported on windows | |
############################ | |
# Pull previous images # | |
############################ | |
- name: Pull base image (must exist) | |
run: docker pull unityci/base:windows-${{ steps.buildParameters.outputs.repoVersionFull }} | |
################# | |
# Hub image # | |
################# | |
- name: Build and Publish Windows Hub Image | |
id: build_windows_hub_image | |
run: | | |
docker build ./images/windows/hub/ ` | |
--tag unityci/hub:windows-${{ steps.buildParameters.outputs.repoVersionFull }} ` | |
--tag unityci/hub:windows-${{ steps.buildParameters.outputs.repoVersionMinor }} ` | |
--tag unityci/hub:windows-${{ steps.buildParameters.outputs.repoVersionMajor }} ` | |
--tag unityci/hub:windows-latest | |
docker push unityci/hub:windows-${{ steps.buildParameters.outputs.repoVersionFull }} | |
docker push unityci/hub:windows-${{ steps.buildParameters.outputs.repoVersionMinor }} | |
docker push unityci/hub:windows-${{ steps.buildParameters.outputs.repoVersionMajor }} | |
docker push unityci/hub:windows-latest | |
$MetaData = docker inspect unityci/hub:windows-${{ steps.buildParameters.outputs.repoVersionFull }} | |
$ImageDetails = $MetaData | ConvertFrom-Json | |
$Digest = $ImageDetails.Config.Image | |
echo "digest=$Digest" >> $Env:GITHUB_OUTPUT | |
echo "metadata=$MetaData" >> $Env:GITHUB_OUTPUT | |
- name: Inspect | |
run: | | |
docker inspect unityci/hub:windows-${{ steps.buildParameters.outputs.repoVersionFull }} | |
- name: Image digest | |
run: echo ${{ steps.build_windows_hub_image.outputs.digest }} | |
################# | |
# reporting # | |
################# | |
- name: Report publication | |
if: ${{ success() }} | |
uses: ./.github/workflows/actions/report-to-backend | |
with: | |
token: ${{ secrets.VERSIONING_TOKEN }} | |
jobId: ${{ steps.buildParameters.outputs.jobId }} | |
status: published | |
# Build info | |
imageType: hub | |
baseOs: windows | |
repoVersion: ${{ steps.buildParameters.outputs.repoVersionFull }} | |
# Publication info | |
imageRepo: unityci | |
imageName: hub | |
friendlyTag: windows-${{ steps.buildParameters.outputs.repoVersionMinor }} | |
specificTag: windows-${{ steps.buildParameters.outputs.repoVersionFull }} | |
digest: ${{ steps.build_windows_hub_image.outputs.digest }} | |
- name: Report failure | |
if: ${{ failure() || cancelled() }} | |
uses: ./.github/workflows/actions/report-to-backend | |
with: | |
token: ${{ secrets.VERSIONING_TOKEN }} | |
jobId: ${{ steps.buildParameters.outputs.jobId }} | |
status: failed | |
# Build info | |
imageType: hub | |
baseOs: windows | |
repoVersion: ${{ steps.buildParameters.outputs.repoVersionFull }} | |
# Failure info | |
reason: ${{ job.status }} - ${{ steps.build_windows_hub_image.outputs.metadata }} |