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 Wolfi 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: 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) | |
PYATLAN_BRANCH="" | |
INSTALL_FROM_GIT="false" | |
echo "Release trigger detected - using latest versions" | |
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 | |
# Check if branch is provided (overrides version) | |
if [ -n "${{ github.event.inputs.pyatlan_branch }}" ]; then | |
PYATLAN_BRANCH="${{ github.event.inputs.pyatlan_branch }}" | |
PYATLAN_VERSION="branch-${PYATLAN_BRANCH}" | |
INSTALL_FROM_GIT="true" | |
echo "Using pyatlan branch: $PYATLAN_BRANCH" | |
else | |
# Set Pyatlan version (default to version.txt if empty) | |
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 | |
PYATLAN_BRANCH="" | |
INSTALL_FROM_GIT="false" | |
fi | |
fi | |
echo "BUILD_TYPE=$BUILD_TYPE" >> $GITHUB_ENV | |
echo "PYTHON_VERSION=$PYTHON_VERSION" >> $GITHUB_ENV | |
echo "PYATLAN_VERSION=$PYATLAN_VERSION" >> $GITHUB_ENV | |
echo "PYATLAN_BRANCH=$PYATLAN_BRANCH" >> $GITHUB_ENV | |
echo "INSTALL_FROM_GIT=$INSTALL_FROM_GIT" >> $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" | |
if [ "$INSTALL_FROM_GIT" = "true" ]; then | |
echo " - Pyatlan Branch: $PYATLAN_BRANCH" | |
echo " - Install Method: Git (development build)" | |
else | |
echo " - Install Method: PyPI (stable release)" | |
fi | |
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-wolfi-base:$IMAGE_TAG" | |
- name: Wait for PyPI availability | |
if: env.INSTALL_FROM_GIT == 'false' && (github.event.inputs.pyatlan_version != '' || github.event_name == 'release') | |
uses: nick-fields/retry@v3 | |
with: | |
max_attempts: 5 | |
timeout_minutes: 3 | |
command: | | |
echo "Checking if pyatlan==${{ env.PYATLAN_VERSION }} is available on PyPI..." | |
if pip index versions pyatlan | grep -q "${{ env.PYATLAN_VERSION }}"; then | |
echo "Package is available on PyPI!" | |
exit 0 | |
else | |
echo "Package not available yet. Retrying..." | |
exit 1 | |
fi | |
- name: Build and push Docker image | |
uses: docker/build-push-action@v6 | |
with: | |
context: . | |
file: ./Dockerfile.wolfi | |
platforms: ${{ env.PLATFORMS }} | |
push: true | |
tags: | | |
ghcr.io/atlanhq/pyatlan-wolfi-base:${{ env.IMAGE_TAG }} | |
build-args: | | |
PYTHON_VERSION=${{ env.PYTHON_VERSION }} | |
PYATLAN_VERSION=${{ env.PYATLAN_VERSION }} | |
PYATLAN_BRANCH=${{ env.PYATLAN_BRANCH }} | |
INSTALL_FROM_GIT=${{ env.INSTALL_FROM_GIT }} | |
cache-from: type=gha | |
cache-to: type=gha,mode=max | |
- name: Output image information | |
run: | | |
echo "## π³ Wolfi Docker Image Built Successfully!" >> $GITHUB_STEP_SUMMARY | |
echo "" >> $GITHUB_STEP_SUMMARY | |
echo "### Image Details:" >> $GITHUB_STEP_SUMMARY | |
echo "- **Base Image:** Wolfi" >> $GITHUB_STEP_SUMMARY | |
echo "- **Trigger:** ${{ github.event_name }}" >> $GITHUB_STEP_SUMMARY | |
echo "- **Build Type:** ${{ env.BUILD_TYPE }}" >> $GITHUB_STEP_SUMMARY | |
echo "- **Python Version:** ${{ env.PYTHON_VERSION }}" >> $GITHUB_STEP_SUMMARY | |
echo "- **Pyatlan Version:** ${{ env.PYATLAN_VERSION }}" >> $GITHUB_STEP_SUMMARY | |
if [ "${{ env.INSTALL_FROM_GIT }}" = "true" ]; then | |
echo "- **Pyatlan Branch:** ${{ env.PYATLAN_BRANCH }}" >> $GITHUB_STEP_SUMMARY | |
echo "- **Install Method:** Git (development build)" >> $GITHUB_STEP_SUMMARY | |
else | |
echo "- **Install Method:** PyPI (stable release)" >> $GITHUB_STEP_SUMMARY | |
fi | |
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-wolfi-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-wolfi-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 |