AKernel 0.1.6rc1 #7
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: Publish Python SDK | |
| on: | |
| release: | |
| types: [published] | |
| concurrency: | |
| group: publish-python-${{ github.ref }} | |
| cancel-in-progress: false | |
| permissions: | |
| contents: read | |
| jobs: | |
| build: | |
| name: Build and verify distributions | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 20 | |
| steps: | |
| - name: Check out source | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.release.tag_name }} | |
| - name: Set up Python | |
| uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 | |
| with: | |
| python-version: "3.12" | |
| cache: pip | |
| cache-dependency-path: sdk/python/pyproject.toml | |
| - name: Validate release tag | |
| env: | |
| RELEASE_TAG: ${{ github.event.release.tag_name }} | |
| run: | | |
| if [[ ! "${RELEASE_TAG}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(rc[0-9]+)?$ ]]; then | |
| echo "Release tag must use vX.Y.Z or vX.Y.ZrcN: ${RELEASE_TAG}" >&2 | |
| exit 1 | |
| fi | |
| package_version="$({ | |
| python - <<'PY' | |
| import pathlib | |
| import tomllib | |
| path = pathlib.Path("sdk/python/pyproject.toml") | |
| with path.open("rb") as stream: | |
| print(tomllib.load(stream)["project"]["version"]) | |
| PY | |
| })" | |
| if [[ "${RELEASE_TAG#v}" != "${package_version}" ]]; then | |
| echo "Tag ${RELEASE_TAG} does not match package version ${package_version}" >&2 | |
| exit 1 | |
| fi | |
| git fetch --no-tags origin \ | |
| +refs/heads/main:refs/remotes/origin/main | |
| if ! git merge-base --is-ancestor \ | |
| HEAD refs/remotes/origin/main; then | |
| echo "Release tag must point to a commit on main" >&2 | |
| exit 1 | |
| fi | |
| - name: Install build dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| python -m pip install -e './sdk/python[dev]' 'twine>=5,<7' | |
| - name: Check SDK | |
| run: | | |
| make sdk-check | |
| - name: Build distributions | |
| run: | | |
| rm -rf sdk/python/dist | |
| python -m build --outdir sdk/python/dist sdk/python | |
| test "$(find sdk/python/dist -maxdepth 1 -name '*.whl' | wc -l)" -eq 1 | |
| test "$(find sdk/python/dist -maxdepth 1 -name '*.tar.gz' | wc -l)" -eq 1 | |
| python -m twine check sdk/python/dist/* | |
| - name: Test installed wheel | |
| run: | | |
| python -m venv /tmp/akernel-wheel-test | |
| /tmp/akernel-wheel-test/bin/python -m pip install \ | |
| --no-deps sdk/python/dist/*.whl | |
| /tmp/akernel-wheel-test/bin/python - <<'PY' | |
| from importlib.metadata import distribution, version | |
| import akernel_sdk | |
| assert version("akernel-sdk") == "${{ github.event.release.tag_name }}".removeprefix("v") | |
| assert any( | |
| entry.name == "ak" and entry.value == "akernel_sdk.cli:main" | |
| for entry in distribution("akernel-sdk").entry_points | |
| ) | |
| assert akernel_sdk.__name__ == "akernel_sdk" | |
| PY | |
| - name: Upload distributions | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: python-distributions | |
| path: sdk/python/dist/ | |
| if-no-files-found: error | |
| retention-days: 7 | |
| publish: | |
| name: Publish distributions to PyPI | |
| needs: build | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 10 | |
| environment: | |
| name: pypi | |
| url: https://pypi.org/project/akernel-sdk/ | |
| permissions: | |
| id-token: write | |
| steps: | |
| - name: Download distributions | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: python-distributions | |
| path: dist | |
| - name: Publish distributions | |
| uses: pypa/gh-action-pypi-publish@ba38be9e461d3875417946c167d0b5f3d385a247 # v1.14.1 |