version-monitor-docker-dockerhub #102
This file contains hidden or 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: 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 |