release-sdk #23
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: Release LocalStack Python Client | |
| on: | |
| repository_dispatch: | |
| types: [release-sdk] | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: The version of the OpenAPI spec to release the client for | |
| required: true | |
| env: | |
| GIT_AUTHOR_NAME: localstack[bot] | |
| GIT_AUTHOR_EMAIL: localstack-bot@users.noreply.github.com | |
| GIT_COMMITTER_NAME: localstack[bot] | |
| GIT_COMMITTER_EMAIL: localstack-bot@users.noreply.github.com | |
| jobs: | |
| test_python: | |
| runs-on: ubuntu-latest | |
| env: | |
| RELEASE_VERSION: ${{ github.event_name == 'workflow_dispatch' && inputs.version || github.event.client_payload.version}} | |
| steps: | |
| - name: "Pull Image (localstack/localstack:${{ env.RELEASE_VERSION }})" | |
| run: docker pull "localstack/localstack-pro:${RELEASE_VERSION}" | |
| - name: "Checkout" | |
| uses: actions/checkout@v4 | |
| with: | |
| # setuptools_scm requires git history to determine the version | |
| fetch-depth: 0 | |
| - name: "Set up Python 3.13" | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.13" | |
| - name: "Install uv" | |
| uses: astral-sh/setup-uv@v3 | |
| - name: "Generate Code from Spec" | |
| run: | | |
| make clean-generated | |
| ./bin/generate.sh ${RELEASE_VERSION} | |
| - name: "Commit Changed Code" | |
| run: | | |
| # Code automatically generated goes into the packages directory. | |
| # As we generate code for the version to be released, we commit those changes. | |
| if git status --porcelain packages/ | grep -q '^'; then | |
| git add packages/ | |
| git commit -m "Generate code for ${RELEASE_VERSION}" | |
| echo "Changes committed successfully" | |
| else | |
| echo "No changes detected after generating the code" | |
| fi | |
| - name: "Install Project" | |
| run: make install-dev | |
| - name: "Install LocalStack" | |
| run: pip install localstack==${RELEASE_VERSION} | |
| - name: "Start Localstack" | |
| env: | |
| LOCALSTACK_AUTH_TOKEN: ${{ secrets.LOCALSTACK_AUTH_TOKEN }} | |
| run: | | |
| source .venv/bin/activate | |
| DEBUG=1 DISABLE_EVENTS="1" IMAGE_NAME="localstack/localstack-pro:${RELEASE_VERSION}" localstack start -d | |
| localstack wait -t 120 || (python -m localstack.cli.main logs && false) | |
| - name: "Run Python Tests" | |
| env: | |
| LOCALSTACK_AUTH_TOKEN: ${{ secrets.LOCALSTACK_AUTH_TOKEN }} | |
| run: make test | |
| - name: "Stop Localstack" | |
| if: success() || failure() | |
| run: | | |
| source .venv/bin/activate | |
| localstack logs | |
| localstack stop | |
| - name: "Create the Release Commit and Tag" | |
| run: | | |
| git commit --allow-empty -m "Release: v${RELEASE_VERSION}" | |
| git tag -a "v${RELEASE_VERSION}" -m "Release: v${RELEASE_VERSION}" | |
| - name: "Push the release commit and tag" | |
| run: git push --follow-tags | |
| - name: "Publish Release to PyPi" | |
| env: | |
| UV_PUBLISH_TOKEN: ${{ secrets.UV_PUBLISH_TOKEN }} | |
| run: make publish | |
| - name: "Create GitHub Release" | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.LOCALSTACK_GITHUB_TOKEN }} | |
| run: gh release create "v${RELEASE_VERSION}" --generate-notes | |
| - name: "Show Git Modifications" | |
| run: | | |
| git log --oneline -n 4 | |
| git show HEAD~1 | |
| git show HEAD |