ReleaseV2 (TestPyPI) #10
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: ReleaseV2 (TestPyPI) | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| python-version: | |
| description: "Python version to use" | |
| default: "3.12" | |
| required: false | |
| permissions: | |
| contents: read | |
| id-token: write # required for OIDC publishing to TestPyPI via trusted publisher | |
| jobs: | |
| build-core: | |
| name: Build & Test Core SDK | |
| runs-on: ubuntu-latest | |
| environment: ci | |
| outputs: | |
| version: ${{ steps.get_version.outputs.version }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Install uv and set the python version | |
| uses: astral-sh/setup-uv@v5 | |
| with: | |
| python-version: ${{ github.event.inputs.python-version || '3.12' }} | |
| - name: Sync environment & install dev extras | |
| run: | | |
| uv sync --all-packages --all-extras --dev --all-groups | |
| - name: Build core distributions | |
| run: | | |
| uv build -o dist | |
| - name: Extract package version | |
| id: get_version | |
| run: | | |
| python - <<'PY' | |
| import tomllib, pathlib, os | |
| meta = tomllib.loads(pathlib.Path('pyproject.toml').read_text()) | |
| version = meta['project']['version'] | |
| with open(os.environ['GITHUB_OUTPUT'], 'a') as fh: | |
| fh.write(f'version={version}\n') | |
| PY | |
| - name: Publish core to TestPyPI | |
| env: | |
| TWINE_USERNAME: __token__ | |
| TWINE_PASSWORD: ${{ secrets.TEST_PYPI_API_TOKEN }} | |
| run: | | |
| uv pip install --upgrade twine | |
| twine upload --repository-url https://test.pypi.org/legacy/ dist/* | |
| - name: Install core from TestPyPI using uv | |
| run: | | |
| uv pip install --index-url https://test.pypi.org/simple/ "getstream==${{ needs.build-core.outputs.version }}" | |
| - name: Run core tests against TestPyPI artifact | |
| env: | |
| STREAM_BASE_URL: ${{ vars.STREAM_BASE_URL }} | |
| STREAM_API_KEY: ${{ vars.STREAM_API_KEY }} | |
| STREAM_API_SECRET: ${{ secrets.STREAM_API_SECRET }} | |
| run: | | |
| UV_NO_SOURCES=1 uv run pytest --ignore=getstream/plugins | |
| build-plugins: | |
| name: Build & Test Plugin Packages | |
| runs-on: ubuntu-latest | |
| needs: build-core | |
| environment: ci | |
| env: | |
| CORE_VERSION: ${{ needs.build-core.outputs.version }} | |
| UV_NO_SOURCES: "1" | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Install uv and set the python version | |
| uses: astral-sh/setup-uv@v5 | |
| with: | |
| python-version: ${{ github.event.inputs.python-version || '3.12' }} | |
| - name: Install new core from TestPyPI using uv (for plugin builds/tests) | |
| run: | | |
| uv pip install --index-url https://test.pypi.org/simple/ getstream==${CORE_VERSION} | |
| - name: Sync environment & install dev extras | |
| run: | | |
| uv sync --all-packages --all-extras --dev --all-groups | |
| - name: Build all plugin dists | |
| run: | | |
| uv build --all-packages -o dist-plugins --wheel --sdist | |
| - name: Run plugin tests (local wheels, core from TestPyPI) | |
| env: | |
| STREAM_BASE_URL: ${{ vars.STREAM_BASE_URL }} | |
| STREAM_API_KEY: ${{ vars.STREAM_API_KEY }} | |
| STREAM_API_SECRET: ${{ secrets.STREAM_API_SECRET }} | |
| run: | | |
| # Install all built plugin wheels using uv | |
| uv pip install dist-plugins/*.whl | |
| uv run pytest getstream/plugins | |
| - name: Publish plugins to TestPyPI | |
| env: | |
| TWINE_USERNAME: __token__ | |
| TWINE_PASSWORD: ${{ secrets.TEST_PYPI_API_TOKEN }} | |
| run: | | |
| uv pip install --upgrade twine | |
| twine upload --repository-url https://test.pypi.org/legacy/ dist-plugins/* | |
| - name: Install core and plugins from TestPyPI using uv | |
| run: | | |
| uv pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple "getstream==${CORE_VERSION}" | |
| uv pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple getstream-plugins-* | |
| - name: Run all plugin tests against TestPyPI artifacts | |
| run: | | |
| uv run pytest getstream/plugins | |
| summarize: | |
| name: Publish Test Deployment Report | |
| runs-on: ubuntu-latest | |
| needs: build-plugins | |
| steps: | |
| - name: Generate summary | |
| run: | | |
| echo "### Release V2 Test Report" >> $GITHUB_STEP_SUMMARY | |
| echo "* Core Version: ${{ needs.build-core.outputs.version }}" >> $GITHUB_STEP_SUMMARY | |
| echo "* Core build & tests: ✅" >> $GITHUB_STEP_SUMMARY | |
| echo "* Core published to TestPyPI: ✅" >> $GITHUB_STEP_SUMMARY | |
| echo "* Plugins built & tests: ✅" >> $GITHUB_STEP_SUMMARY | |
| echo "* Plugins published to TestPyPI: ✅" >> $GITHUB_STEP_SUMMARY | |
| echo "* Tests against TestPyPI packages: ✅" >> $GITHUB_STEP_SUMMARY |