Workflow file for this run
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 Pyatlan Chainguard Base Image | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| build_type: | |
| description: 'Build type (dev uses amd64 only, release uses amd64+arm64)' | |
| required: true | |
| default: 'dev' | |
| type: choice | |
| options: | |
| - 'dev' | |
| - 'release' | |
| python_version: | |
| description: 'Python version (leave empty for 3.13)' | |
| required: false | |
| type: choice | |
| options: | |
| - '' | |
| - '3.9' | |
| - '3.10' | |
| - '3.11' | |
| - '3.12' | |
| - '3.13' | |
| pyatlan_version: | |
| description: 'Pyatlan version (leave empty to use version.txt ie: latest)' | |
| required: false | |
| type: string | |
| pyatlan_branch: | |
| description: 'Pyatlan git branch (overrides version - installs from git://github.com/atlanhq/atlan-python.git@branch)' | |
| required: false | |
| type: string | |
| release: | |
| types: [published] | |
| permissions: | |
| contents: read | |
| packages: write | |
| jobs: | |
| build-and-push: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 # Need full history for commit hash | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v4 | |
| - name: Log in to GitHub Container Registry | |
| uses: docker/login-action@v4 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Log in to Atlan Harbor Registry | |
| uses: docker/login-action@v4 | |
| with: | |
| registry: registry.atlan.com | |
| username: ${{ secrets.HARBOR_USERNAME }} | |
| password: ${{ secrets.HARBOR_PASSWORD }} | |
| - name: Log in to Chainguard Container Registry | |
| uses: docker/login-action@v4 | |
| with: | |
| registry: cgr.dev | |
| username: ${{ secrets.CHAINGUARD_USERNAME }} | |
| password: ${{ secrets.CHAINGUARD_PASSWORD }} | |
| - name: Set build parameters | |
| id: set-params | |
| run: | | |
| # Check if triggered by release or manual dispatch | |
| if [ "${{ github.event_name }}" = "release" ]; then | |
| # Release trigger: use latest Python and SDK version, release build type | |
| BUILD_TYPE="release" | |
| PYTHON_VERSION="3.13" | |
| PYATLAN_VERSION=$(cat pyatlan/version.txt) | |
| echo "Release trigger detected - building from git tag v${PYATLAN_VERSION}" | |
| else | |
| # Manual dispatch: use provided inputs with defaults | |
| BUILD_TYPE="${{ github.event.inputs.build_type }}" | |
| # Set Python version (default to 3.13 if empty) | |
| if [ -z "${{ github.event.inputs.python_version }}" ]; then | |
| PYTHON_VERSION="3.13" | |
| else | |
| PYTHON_VERSION="${{ github.event.inputs.python_version }}" | |
| fi | |
| # Set Pyatlan version (reads from pyatlan/version.txt by default) | |
| # This matches the version in the repository | |
| if [ -z "${{ github.event.inputs.pyatlan_version }}" ]; then | |
| PYATLAN_VERSION=$(cat pyatlan/version.txt) | |
| echo "Using pyatlan version from version.txt: $PYATLAN_VERSION" | |
| else | |
| PYATLAN_VERSION="${{ github.event.inputs.pyatlan_version }}" | |
| echo "Using specified pyatlan version: $PYATLAN_VERSION" | |
| fi | |
| # Handle branch input (if provided, will be used as commit SHA or branch name) | |
| if [ -n "${{ github.event.inputs.pyatlan_branch }}" ]; then | |
| echo "Note: Building from branch/commit: ${{ github.event.inputs.pyatlan_branch }}" | |
| echo "This will use PYATLAN_COMMIT_SHA build arg" | |
| fi | |
| fi | |
| echo "BUILD_TYPE=$BUILD_TYPE" >> $GITHUB_ENV | |
| echo "PYTHON_VERSION=$PYTHON_VERSION" >> $GITHUB_ENV | |
| echo "PYATLAN_VERSION=$PYATLAN_VERSION" >> $GITHUB_ENV | |
| # Set platforms based on build type | |
| if [ "$BUILD_TYPE" = "dev" ]; then | |
| PLATFORMS="linux/amd64" | |
| else | |
| PLATFORMS="linux/amd64,linux/arm64" | |
| fi | |
| echo "PLATFORMS=$PLATFORMS" >> $GITHUB_ENV | |
| # Generate commit hash for dev builds (for image tagging only) | |
| COMMIT_HASH=$(git rev-parse --short HEAD) | |
| echo "COMMIT_HASH=$COMMIT_HASH" >> $GITHUB_ENV | |
| # Set PYATLAN_COMMIT_SHA only if pyatlan_branch input is provided | |
| # Otherwise, leave empty to let Dockerfile use version tag | |
| if [ -n "${{ github.event.inputs.pyatlan_branch }}" ]; then | |
| echo "PYATLAN_COMMIT_SHA=${{ github.event.inputs.pyatlan_branch }}" >> $GITHUB_ENV | |
| else | |
| echo "PYATLAN_COMMIT_SHA=" >> $GITHUB_ENV | |
| fi | |
| echo "Build parameters:" | |
| echo " - Trigger: ${{ github.event_name }}" | |
| echo " - Build Type: $BUILD_TYPE" | |
| echo " - Python Version: $PYTHON_VERSION" | |
| if [ -n "${{ github.event.inputs.pyatlan_branch }}" ]; then | |
| echo " - Pyatlan Source: git commit/branch ${{ github.event.inputs.pyatlan_branch }}" | |
| else | |
| echo " - Pyatlan Source: git tag v${PYATLAN_VERSION}" | |
| fi | |
| echo " - Build Method: Multi-stage build from GitHub source" | |
| echo " - Platforms: $PLATFORMS" | |
| echo " - Image Tag Suffix: $COMMIT_HASH" | |
| - name: Generate image tags | |
| id: generate-tags | |
| run: | | |
| BUILD_TYPE="${{ env.BUILD_TYPE }}" | |
| PYTHON_VERSION="${{ env.PYTHON_VERSION }}" | |
| PYATLAN_VERSION="${{ env.PYATLAN_VERSION }}" | |
| COMMIT_HASH="${{ env.COMMIT_HASH }}" | |
| if [ "$BUILD_TYPE" = "dev" ]; then | |
| # Dev: 8.0.0-3.11-commithash | |
| IMAGE_TAG="${PYATLAN_VERSION}-${PYTHON_VERSION}-${COMMIT_HASH}" | |
| HARBOR_TAGS="registry.atlan.com/public/pyatlan:${IMAGE_TAG}\nregistry.atlan.com/public/pyatlan:sha-${COMMIT_HASH}" | |
| else | |
| # Release: 8.0.0-3.11 | |
| IMAGE_TAG="${PYATLAN_VERSION}-${PYTHON_VERSION}" | |
| HARBOR_TAGS="registry.atlan.com/public/pyatlan:${IMAGE_TAG}\nregistry.atlan.com/public/pyatlan:main-latest\nregistry.atlan.com/public/pyatlan:main-${PYATLAN_VERSION}\nregistry.atlan.com/public/pyatlan:sha-${COMMIT_HASH}" | |
| fi | |
| echo "IMAGE_TAG=$IMAGE_TAG" >> $GITHUB_ENV | |
| echo "HARBOR_TAGS<<EOF" >> $GITHUB_ENV | |
| echo -e "$HARBOR_TAGS" >> $GITHUB_ENV | |
| echo "EOF" >> $GITHUB_ENV | |
| echo "Generated image tag: ghcr.io/atlanhq/pyatlan-chainguard-base:$IMAGE_TAG" | |
| - name: Build and push Docker image | |
| uses: docker/build-push-action@v7 | |
| with: | |
| context: . | |
| file: ./Dockerfile | |
| platforms: ${{ env.PLATFORMS }} | |
| push: true | |
| tags: | | |
| ghcr.io/atlanhq/pyatlan-chainguard-base:${{ env.IMAGE_TAG }} | |
| ${{ env.HARBOR_TAGS }} | |
| build-args: | | |
| PYTHON_VERSION=${{ env.PYTHON_VERSION }} | |
| PYATLAN_VERSION=${{ env.PYATLAN_VERSION }} | |
| PYATLAN_COMMIT_SHA=${{ env.PYATLAN_COMMIT_SHA }} | |
| cache-from: type=gha | |
| cache-to: type=gha,mode=max | |
| - name: Output image information | |
| run: | | |
| echo "## π³ Chainguard Docker Image Built Successfully!" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "### Image Details:" >> $GITHUB_STEP_SUMMARY | |
| echo "- **Base Image:** Chainguard pyatlan-golden:3.11" >> $GITHUB_STEP_SUMMARY | |
| echo "- **Trigger:** ${{ github.event_name }}" >> $GITHUB_STEP_SUMMARY | |
| echo "- **Build Type:** ${{ env.BUILD_TYPE }}" >> $GITHUB_STEP_SUMMARY | |
| echo "- **Build Method:** Multi-stage from GitHub source (no PyPI)" >> $GITHUB_STEP_SUMMARY | |
| echo "- **Python Version:** ${{ env.PYTHON_VERSION }}" >> $GITHUB_STEP_SUMMARY | |
| if [ -n "${{ env.PYATLAN_COMMIT_SHA }}" ]; then | |
| echo "- **Pyatlan Source:** Git commit/branch ${{ env.PYATLAN_COMMIT_SHA }}" >> $GITHUB_STEP_SUMMARY | |
| else | |
| echo "- **Pyatlan Source:** Git tag v${{ env.PYATLAN_VERSION }}" >> $GITHUB_STEP_SUMMARY | |
| fi | |
| echo "- **Dependencies:** Hardened from Chainguard APK + minimal pip" >> $GITHUB_STEP_SUMMARY | |
| echo "- **Platforms:** ${{ env.PLATFORMS }}" >> $GITHUB_STEP_SUMMARY | |
| if [ "${{ env.BUILD_TYPE }}" = "dev" ]; then | |
| echo "- **Image Tag Suffix:** ${{ env.COMMIT_HASH }}" >> $GITHUB_STEP_SUMMARY | |
| fi | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "### Available Tag:" >> $GITHUB_STEP_SUMMARY | |
| echo "- \`ghcr.io/atlanhq/pyatlan-chainguard-base:${{ env.IMAGE_TAG }}\`" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "### Usage in your Dockerfile:" >> $GITHUB_STEP_SUMMARY | |
| echo "\`\`\`dockerfile" >> $GITHUB_STEP_SUMMARY | |
| echo "FROM ghcr.io/atlanhq/pyatlan-chainguard-base:${{ env.IMAGE_TAG }}" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "# Your application code here" >> $GITHUB_STEP_SUMMARY | |
| echo "COPY your-package/ /app/" >> $GITHUB_STEP_SUMMARY | |
| echo "RUN uv pip install --system -r requirements.txt" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "CMD [\"python\", \"your-app.py\"]" >> $GITHUB_STEP_SUMMARY | |
| echo "\`\`\`" >> $GITHUB_STEP_SUMMARY |