Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: combined publish flow for CDK/SDM #77

Merged
merged 43 commits into from
Nov 20, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
b8bb0c8
fix: account for dynamic CDK version
ChristoGrab Nov 19, 2024
cacd521
add test SDM publish flow to pypi publish
ChristoGrab Nov 19, 2024
71340d3
add debugging steps
ChristoGrab Nov 19, 2024
9b4c32b
skip actual publish for testing
ChristoGrab Nov 19, 2024
8e9bf19
trigger workflow on dev branch
ChristoGrab Nov 19, 2024
a4f8a35
debug CDK version step failure
ChristoGrab Nov 19, 2024
7b01af0
add login flow
ChristoGrab Nov 19, 2024
0040ed9
comment out SDM publish steps
ChristoGrab Nov 19, 2024
6a471b7
update docker publish logic from other workflow
aaronsteers Nov 19, 2024
2373d16
remove 'test-' prefix from docker version tag
aaronsteers Nov 19, 2024
a8bcfb3
remove extra workflow, update job names
aaronsteers Nov 19, 2024
01ca117
update existing tag logic and add extracted CDK tag print statement
ChristoGrab Nov 19, 2024
41a3117
fix typo and use test name for publish
ChristoGrab Nov 19, 2024
2f3f211
use latte for testing
ChristoGrab Nov 19, 2024
90b29fc
add tag validation to Pypi publishing
ChristoGrab Nov 19, 2024
a384bd1
fix ref variable in tag
ChristoGrab Nov 19, 2024
e24031e
add and validate version on workflow_dispatch
ChristoGrab Nov 19, 2024
f113703
use github.ref_name for tags
ChristoGrab Nov 19, 2024
c4be178
Update .github/workflows/pypi_publish.yml
ChristoGrab Nov 19, 2024
c515dff
Merge tag 'christo/finalize-cdk-sdm-publish-flow' of https://github.c…
ChristoGrab Nov 19, 2024
1565ce3
Github release step only runs for valid tag events
ChristoGrab Nov 19, 2024
91623e5
Merge branch 'christo/finalize-cdk-sdm-publish-flow' of https://githu…
ChristoGrab Nov 19, 2024
9239f59
add debug steps to PyPi publish
ChristoGrab Nov 19, 2024
247e1bf
update location of dist/ in debug steps
ChristoGrab Nov 19, 2024
0e17802
resolve artifact conflict
ChristoGrab Nov 19, 2024
2e43f2b
fix artifact typo
ChristoGrab Nov 19, 2024
8833eaa
add PyPI debug step
ChristoGrab Nov 19, 2024
800eb94
add trusted environment for PyPI publish
ChristoGrab Nov 20, 2024
bed60c0
add packages-dir to PyPI publish
ChristoGrab Nov 20, 2024
534a5c7
add debug step for dist path
ChristoGrab Nov 20, 2024
55864a2
move subdirectory files to the main dist directory
ChristoGrab Nov 20, 2024
0605825
handle permissions when modifying dist location
ChristoGrab Nov 20, 2024
5e8beb5
fix versioning in pypi publish
ChristoGrab Nov 20, 2024
1fd67b2
update version step
ChristoGrab Nov 20, 2024
a85fb0e
refactor: simplify everything
ChristoGrab Nov 20, 2024
4dffb8e
fix: create separate actions for setting version by trigger
ChristoGrab Nov 20, 2024
74a8f19
update upload-path
ChristoGrab Nov 20, 2024
305af6a
add debug step to build
ChristoGrab Nov 20, 2024
8691fc2
update upload step
ChristoGrab Nov 20, 2024
f00602b
try unique package names
ChristoGrab Nov 20, 2024
0c69f29
cleanup extra functions
ChristoGrab Nov 20, 2024
7d10d13
download wheel for dockerhub build
ChristoGrab Nov 20, 2024
598d11e
add latest tag and remove debug step
ChristoGrab Nov 20, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
93 changes: 0 additions & 93 deletions .github/workflows/cdk-publish.yml

This file was deleted.

107 changes: 92 additions & 15 deletions .github/workflows/pypi_publish.yml
Original file line number Diff line number Diff line change
@@ -1,37 +1,50 @@
name: Python Packaging
name: Packaging and Publishing

on:
push:

workflow_dispatch:
inputs:
version:
description: "The version to publish, ie 1.0.0 or 1.0.0-dev1"
required: true

jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
ref: ${{ github.event_name == 'workflow_dispatch' && format('v{0}', github.event.inputs.version) || github.ref }}

- uses: hynek/build-and-inspect-python-package@v2

- uses: actions/upload-artifact@v4
with:
name: Packages-${{ github.run_id }}
path: |
/tmp/baipp/dist/*.whl
/tmp/baipp/dist/*.tar.gz
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Had to specify this path for uploading build artifacts as the /dist directory was not matching the path in the previous step


publish:
name: Publish to PyPI
name: Publish CDK version to PyPI
runs-on: ubuntu-latest
needs: [build]
permissions:
id-token: write # IMPORTANT: this permission is mandatory for trusted publishing
contents: write # Needed to upload artifacts to the release
id-token: write
contents: write
environment:
name: PyPI
url: "https://pypi.org/p/airbyte-cdk"
if: startsWith(github.ref, 'refs/tags/v')
name: PyPi
url: https://pypi.org/p/airbyte
if: startsWith(github.ref, 'refs/tags/v') || github.event_name == 'workflow_dispatch'
steps:
- uses: actions/download-artifact@v4
with:
name: Packages
name: Packages-${{ github.run_id }}
path: dist
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Had to make this name unique for each run to avoid 409 errors being thrown

- name: Attach Wheel to GitHub Release

- name: Upload wheel to release
if: startsWith(github.ref, 'refs/tags/v')
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
Expand All @@ -40,8 +53,72 @@ jobs:
overwrite: true
file_glob: true

- name: Publish to PyPI (${{vars.PYPI_PUBLISH_URL}})
uses: pypa/[email protected]
- name: Publish to PyPI
uses: pypa/[email protected]

publish_sdm:
name: Publish SDM to DockerHub
if: startsWith(github.ref, 'refs/tags/v') || github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
needs: [publish]

steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Set Version (workflow_dispatch)
if: github.event_name == 'workflow_dispatch'
run: |
echo "Version set to ${{ github.event.inputs.version }}"
echo "VERSION=${{ github.event.inputs.version }}" >> $GITHUB_ENV

- name: Set Version (tag)
ChristoGrab marked this conversation as resolved.
Show resolved Hide resolved
if: startsWith(github.ref, 'refs/tags/v')
run: |
echo "Version set to ${{ github.ref_name }}"
echo "VERSION=${{ github.ref_name }}" >> $GITHUB_ENV

# We need to download the build artifact again because the previous job was on a different runner
- name: Download Build Artifact
uses: actions/download-artifact@v4
with:
name: Packages-${{ github.run_id }}
path: dist

Copy link
Collaborator Author

@ChristoGrab ChristoGrab Nov 20, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Adding this step is necessary to ensure that the SDM image has access to the build artifact and can utilize the correct CDK version

- name: Set up QEMU for multi-platform builds
uses: docker/setup-qemu-action@v3

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_PASSWORD }}

- name: Check for existing tag
run: |
tag="airbyte/source-declarative-manifest:${{ env.VERSION }}"
if [ -z "$tag" ]; then
echo "Error: VERSION is not set. Ensure the tag follows the format 'refs/tags/vX.Y.Z'."
exit 1
fi
echo "Checking if tag '$tag' exists on DockerHub..."
if DOCKER_CLI_EXPERIMENTAL=enabled docker manifest inspect "$tag" > /dev/null 2>&1; then
echo "The tag '$tag' already exists on DockerHub. Skipping publish to prevent overwrite."
exit 1
fi
echo "No existing tag '$tag' found. Proceeding with publish."

- name: Build and push
uses: docker/build-push-action@v5
with:
# Can be toggled at the repository level between `https://upload.pypi.org/legacy/` and `https://test.pypi.org/legacy/`
repository-url: ${{vars.PYPI_PUBLISH_URL}}
context: .
platforms: linux/amd64,linux/arm64
push: true
tags: |
airbyte/source-declarative-manifest:latest
airbyte/source-declarative-manifest:${{ env.VERSION }}
airbyte/source-declarative-manifest:${{ github.sha }}
3 changes: 2 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ WORKDIR /airbyte/integration_code

# Copy project files needed for build
COPY pyproject.toml poetry.lock README.md ./
COPY dist/*.whl ./dist/
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy the packages obtained from the build

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A comment + link to code on what builds it and why we think it'll be there would help!


# Install dependencies - ignore keyring warnings
RUN poetry config virtualenvs.create false \
Expand All @@ -13,6 +14,6 @@ RUN poetry config virtualenvs.create false \
COPY airbyte_cdk ./airbyte_cdk

# Build and install the package
RUN poetry build && pip install dist/*.whl
RUN pip install dist/*.whl
Copy link
Collaborator Author

@ChristoGrab ChristoGrab Nov 20, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated this as it would overwrite the CDK version obtained from the build artifact


ENTRYPOINT ["poetry", "run", "source-declarative-manifest"]
Loading