Skip to content

version-monitor-docker-dockerhub #102

version-monitor-docker-dockerhub

version-monitor-docker-dockerhub #102

name: Docker Build and Push to DockerHub
# This workflow builds and pushes Docker images to DockerHub only.
# It is triggered automatically by version-monitor dispatches or manually with an
# explicit version.
on:
workflow_dispatch:
inputs:
version:
description: 'Version to build (e.g., 1.2.3)'
required: true
type: string
platform:
description: 'Docker platform (all, linux-amd64, linux-arm64)'
required: false
type: choice
default: all
options:
- all
- linux-amd64
- linux-arm64
dry_run:
description: 'Dry run mode (do not push to registry)'
required: false
type: boolean
default: false
repository_dispatch:
types: [version-monitor-docker-dockerhub]
permissions:
contents: write # Required for uploading release assets
env:
DOTNET_VERSION: '10.0'
jobs:
docker-build-dockerhub:
name: Build and Push to DockerHub
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup .NET SDK
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Resolve workflow inputs
id: resolve-inputs
shell: bash
run: |
EVENT_NAME="${{ github.event_name }}"
VERSION=""
PLATFORM=""
DRY_RUN="false"
SOURCE=""
case "$EVENT_NAME" in
repository_dispatch)
VERSION="${{ github.event.client_payload.version }}"
PLATFORM="${{ github.event.client_payload.platform }}"
DRY_RUN="${{ github.event.client_payload.dry_run }}"
SOURCE="repository_dispatch"
;;
workflow_dispatch)
VERSION="${{ inputs.version }}"
PLATFORM="${{ inputs.platform }}"
DRY_RUN="${{ inputs.dry_run }}"
SOURCE="workflow_dispatch"
;;
*)
echo "Error: Unsupported event '$EVENT_NAME'"
exit 1
;;
esac
if [ -z "$VERSION" ]; then
echo "Error: version is required when triggered by $SOURCE"
exit 1
fi
PLATFORM="${PLATFORM:-all}"
DRY_RUN="${DRY_RUN:-false}"
echo "Resolved version from $SOURCE: $VERSION"
echo "Resolved platform from $SOURCE: $PLATFORM"
echo "Resolved dry-run from $SOURCE: $DRY_RUN"
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "platform=$PLATFORM" >> "$GITHUB_OUTPUT"
echo "dry_run=$DRY_RUN" >> "$GITHUB_OUTPUT"
echo "source=$SOURCE" >> "$GITHUB_OUTPUT"
- name: Build Docker Images (Nuke)
env:
NUGEX_ReleaseVersion: ${{ steps.resolve-inputs.outputs.version }}
NUGEX_DockerPlatform: ${{ steps.resolve-inputs.outputs.platform }}
NUGEX_DryRun: ${{ steps.resolve-inputs.outputs.dry_run }}
NUGEX_AzureBlobSasUrl: ${{ secrets.AZURE_BLOB_SAS_URL }}
NUGEX_DockerHubUsername: ${{ secrets.DOCKER_USERNAME }}
NUGEX_DockerHubToken: ${{ secrets.DOCKER_PASSWORD }}
run: |
./build.sh PushToDockerHub
- name: Summary
env:
NUGEX_ReleaseVersion: ${{ steps.resolve-inputs.outputs.version }}
NUGEX_DockerPlatform: ${{ steps.resolve-inputs.outputs.platform }}
run: |
cd nukeBuild
VERSION="${{ steps.resolve-inputs.outputs.version }}"
PLATFORM="${{ steps.resolve-inputs.outputs.platform }}"
DRY_RUN="${{ steps.resolve-inputs.outputs.dry_run }}"
SOURCE="${{ steps.resolve-inputs.outputs.source }}"
USERNAME="${{ secrets.DOCKERHUB_USERNAME }}"
CLEAN_VERSION="${VERSION#v}"
MAJOR=$(echo ${CLEAN_VERSION} | cut -d. -f1)
MINOR=$(echo ${CLEAN_VERSION} | cut -d. -f2)
IS_STABLE=true
if [[ ${CLEAN_VERSION} =~ ^(rc|beta|alpha|preview|dev)[0-9]*$ ]] || [[ ${CLEAN_VERSION} =~ -(rc|beta|alpha|preview|dev) ]] || [[ ${CLEAN_VERSION} =~ (rc|beta|alpha|preview|dev)- ]]; then
IS_STABLE=false
fi
echo "## Docker Build Summary" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "- **Registry**: DockerHub (${USERNAME})" >> $GITHUB_STEP_SUMMARY
echo "- **Version**: ${VERSION}" >> $GITHUB_STEP_SUMMARY
echo "- **Trigger Source**: ${SOURCE}" >> $GITHUB_STEP_SUMMARY
echo "- **Platform**: ${PLATFORM}" >> $GITHUB_STEP_SUMMARY
echo "- **Dry Run**: ${DRY_RUN}" >> $GITHUB_STEP_SUMMARY
echo "- **Is Stable**: ${IS_STABLE}" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Image Tags" >> $GITHUB_STEP_SUMMARY
echo "- \`${CLEAN_VERSION}\` - Version tag" >> $GITHUB_STEP_SUMMARY
echo "- \`${MAJOR}.${MINOR}\` - Major.minor tag" >> $GITHUB_STEP_SUMMARY
echo "- \`${MAJOR}\` - Major tag" >> $GITHUB_STEP_SUMMARY
if [ "$IS_STABLE" = "true" ]; then
echo "- \`latest\` - Latest tag (stable release)" >> $GITHUB_STEP_SUMMARY
else
echo "- \`latest\` - Skipped (pre-release version)" >> $GITHUB_STEP_SUMMARY
fi