Update configuration and clean up validation module #74
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: Build & Publish UBI Image with Podman | |
| on: | |
| push: | |
| branches: [ chef ] | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| packages: write | |
| env: | |
| REGISTRY: ghcr.io | |
| ORG: x2ansible | |
| IMAGE_NAME: x2a-api-chef | |
| jobs: | |
| build-and-push: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout source | |
| uses: actions/checkout@v4 | |
| with: | |
| # Fetch full history for proper version calculation | |
| fetch-depth: 0 | |
| - name: Install Podman and gh CLI | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get -y install podman gh | |
| - name: Generate version tags | |
| id: version | |
| run: | | |
| # Get the current date for date-based versioning | |
| DATE_TAG=$(date +'%Y.%m.%d') | |
| # Get short commit SHA | |
| SHORT_SHA=${GITHUB_SHA:0:7} | |
| # Count commits to create build number | |
| BUILD_NUMBER=$(git rev-list --count HEAD) | |
| # Create semantic version: YYYY.MM.DD.BUILD_NUMBER | |
| SEMANTIC_VERSION="${DATE_TAG}.${BUILD_NUMBER}" | |
| # Create timestamp for unique identification | |
| TIMESTAMP=$(date +'%Y%m%d-%H%M%S') | |
| echo "DATE_TAG=${DATE_TAG}" >> $GITHUB_OUTPUT | |
| echo "SHORT_SHA=${SHORT_SHA}" >> $GITHUB_OUTPUT | |
| echo "BUILD_NUMBER=${BUILD_NUMBER}" >> $GITHUB_OUTPUT | |
| echo "SEMANTIC_VERSION=${SEMANTIC_VERSION}" >> $GITHUB_OUTPUT | |
| echo "TIMESTAMP=${TIMESTAMP}" >> $GITHUB_OUTPUT | |
| echo "Generated version tags:" | |
| echo " Semantic Version: ${SEMANTIC_VERSION}" | |
| echo " Date Tag: ${DATE_TAG}" | |
| echo " Short SHA: ${SHORT_SHA}" | |
| echo " Build Number: ${BUILD_NUMBER}" | |
| echo " Timestamp: ${TIMESTAMP}" | |
| - name: Login to GHCR | |
| env: | |
| CR_PAT: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| echo "${CR_PAT}" | podman login ${{ env.REGISTRY }} -u ${{ github.actor }} --password-stdin | |
| - name: Build image with enhanced labels and multiple tags | |
| run: | | |
| podman build \ | |
| --label "org.opencontainers.image.source=https://github.com/${{ github.repository }}" \ | |
| --label "org.opencontainers.image.description=${{ env.IMAGE_NAME }} API - Chef Branch" \ | |
| --label "org.opencontainers.image.url=https://github.com/${{ github.repository }}" \ | |
| --label "org.opencontainers.image.documentation=https://github.com/${{ github.repository }}" \ | |
| --label "org.opencontainers.image.version=${{ steps.version.outputs.SEMANTIC_VERSION }}" \ | |
| --label "org.opencontainers.image.revision=${{ github.sha }}" \ | |
| --label "org.opencontainers.image.created=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" \ | |
| --label "org.opencontainers.image.licenses=MIT" \ | |
| --label "org.opencontainers.image.vendor=${{ env.ORG }}" \ | |
| --label "org.opencontainers.image.title=${{ env.IMAGE_NAME }}" \ | |
| --label "org.opencontainers.image.branch=chef" \ | |
| -t ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:latest \ | |
| -t ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.SEMANTIC_VERSION }} \ | |
| -t ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.DATE_TAG }} \ | |
| -t ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.SHORT_SHA }} \ | |
| -t ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:build-${{ steps.version.outputs.BUILD_NUMBER }} \ | |
| -t ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:chef-latest \ | |
| -f Containerfile . | |
| - name: Push all image tags | |
| run: | | |
| echo "📤 Pushing multiple image tags..." | |
| podman push ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:latest | |
| podman push ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.SEMANTIC_VERSION }} | |
| podman push ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.DATE_TAG }} | |
| podman push ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.SHORT_SHA }} | |
| podman push ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:build-${{ steps.version.outputs.BUILD_NUMBER }} | |
| podman push ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:chef-latest | |
| echo " All tags pushed successfully" | |
| - name: Package published successfully | |
| run: | | |
| echo " Package published successfully!" | |
| echo "" | |
| echo "Package Information:" | |
| echo "Registry: ${{ env.REGISTRY }}" | |
| echo "Organization: ${{ env.ORG }}" | |
| echo "Package: ${{ env.IMAGE_NAME }} (Chef Branch)" | |
| echo "" | |
| echo " Available Tags:" | |
| echo " Latest: ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:latest" | |
| echo " Chef Latest: ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:chef-latest" | |
| echo " Version: ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.SEMANTIC_VERSION }}" | |
| echo " Date: ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.DATE_TAG }}" | |
| echo " SHA: ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.SHORT_SHA }}" | |
| echo " Build: ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:build-${{ steps.version.outputs.BUILD_NUMBER }}" | |
| echo "" | |
| echo "Usage Examples:" | |
| echo " # Pull latest version" | |
| echo " podman pull ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:latest" | |
| echo "" | |
| echo " # Pull chef-specific latest" | |
| echo " podman pull ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:chef-latest" | |
| echo "" | |
| echo " # Pull specific version" | |
| echo " podman pull ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.SEMANTIC_VERSION }}" | |
| echo "" | |
| echo " # Pull by date" | |
| echo " podman pull ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.DATE_TAG }}" | |
| echo "" | |
| echo " # Pull by commit" | |
| echo " podman pull ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.SHORT_SHA }}" | |
| echo "" | |
| echo "To make this package public:" | |
| echo "1. Visit: https://github.com/orgs/${{ env.ORG }}/packages/container/${{ env.IMAGE_NAME }}/settings" | |
| echo "2. Change 'Package visibility' from Private to Public" | |
| echo "3. Click 'I understand the consequences, change package visibility'" | |
| echo "" | |
| echo "Package URL: https://github.com/orgs/${{ env.ORG }}/packages/container/${{ env.IMAGE_NAME }}" | |
| - name: Test package accessibility (will fail if private) | |
| continue-on-error: true | |
| run: | | |
| echo "Testing package accessibility..." | |
| podman logout ${{ env.REGISTRY }} || true | |
| if podman pull ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:latest; then | |
| echo " Package is publicly accessible" | |
| else | |
| echo "Package is private (expected for organization packages)" | |
| echo "Manual step required to make it public" | |
| fi | |
| - name: Create deployment summary | |
| run: | | |
| echo "## Deployment Summary" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "### Image Tags Created" >> $GITHUB_STEP_SUMMARY | |
| echo "| Tag Type | Value | Full Image Reference |" >> $GITHUB_STEP_SUMMARY | |
| echo "|----------|-------|---------------------|" >> $GITHUB_STEP_SUMMARY | |
| echo "| Latest | \`latest\` | \`${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:latest\` |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Chef Latest | \`chef-latest\` | \`${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:chef-latest\` |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Semantic | \`${{ steps.version.outputs.SEMANTIC_VERSION }}\` | \`${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.SEMANTIC_VERSION }}\` |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Date | \`${{ steps.version.outputs.DATE_TAG }}\` | \`${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.DATE_TAG }}\` |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Commit | \`${{ steps.version.outputs.SHORT_SHA }}\` | \`${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.SHORT_SHA }}\` |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Build | \`build-${{ steps.version.outputs.BUILD_NUMBER }}\` | \`${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:build-${{ steps.version.outputs.BUILD_NUMBER }}\` |" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "### Quick Links" >> $GITHUB_STEP_SUMMARY | |
| echo "- [Package Registry](https://github.com/orgs/${{ env.ORG }}/packages/container/${{ env.IMAGE_NAME }})" >> $GITHUB_STEP_SUMMARY | |
| echo "- [Package Settings](https://github.com/orgs/${{ env.ORG }}/packages/container/${{ env.IMAGE_NAME }}/settings)" >> $GITHUB_STEP_SUMMARY | |
| echo "- [Repository](https://github.com/${{ github.repository }})" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "### Usage" >> $GITHUB_STEP_SUMMARY | |
| echo "\`\`\`bash" >> $GITHUB_STEP_SUMMARY | |
| echo "# Pull latest" >> $GITHUB_STEP_SUMMARY | |
| echo "podman pull ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:latest" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "# Pull chef-specific latest" >> $GITHUB_STEP_SUMMARY | |
| echo "podman pull ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:chef-latest" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "# Pull specific version" >> $GITHUB_STEP_SUMMARY | |
| echo "podman pull ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.SEMANTIC_VERSION }}" >> $GITHUB_STEP_SUMMARY | |
| echo "\`\`\`" >> $GITHUB_STEP_SUMMARY |