Build Pyatlan Chainguard Base Image #12
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@v3 | |
| - name: Log in to GitHub Container Registry | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Log in to Chainguard Container Registry | |
| uses: docker/login-action@v3 | |
| 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 | |
| COMMIT_HASH=$(git rev-parse --short HEAD) | |
| echo "COMMIT_HASH=$COMMIT_HASH" >> $GITHUB_ENV | |
| echo "Build parameters:" | |
| echo " - Trigger: ${{ github.event_name }}" | |
| echo " - Build Type: $BUILD_TYPE" | |
| echo " - Python Version: $PYTHON_VERSION" | |
| echo " - Pyatlan Version: $PYATLAN_VERSION (from git tag v${PYATLAN_VERSION})" | |
| echo " - Build Method: Multi-stage build from GitHub source" | |
| echo " - Platforms: $PLATFORMS" | |
| echo " - Commit Hash: $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}" | |
| else | |
| # Release: 8.0.0-3.11 | |
| IMAGE_TAG="${PYATLAN_VERSION}-${PYTHON_VERSION}" | |
| fi | |
| echo "IMAGE_TAG=$IMAGE_TAG" >> $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@v6 | |
| with: | |
| context: . | |
| file: ./Dockerfile.chainguard | |
| platforms: ${{ env.PLATFORMS }} | |
| push: true | |
| tags: | | |
| ghcr.io/atlanhq/pyatlan-chainguard-base:${{ env.IMAGE_TAG }} | |
| build-args: | | |
| PYTHON_VERSION=${{ env.PYTHON_VERSION }} | |
| PYATLAN_VERSION=${{ env.PYATLAN_VERSION }} | |
| PYATLAN_COMMIT_SHA=${{ env.COMMIT_HASH }} | |
| 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 | |
| echo "- **Pyatlan Version:** ${{ env.PYATLAN_VERSION }} (git tag v${{ env.PYATLAN_VERSION }})" >> $GITHUB_STEP_SUMMARY | |
| 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 "- **Commit Hash:** ${{ 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 |