Skip to content

Commit ab639b4

Browse files
authored
Merge pull request #89 from GetStream/chore-add-release-workflow
chore: add new release workflow
2 parents d59ac12 + 6dd83c0 commit ab639b4

File tree

1 file changed

+181
-0
lines changed

1 file changed

+181
-0
lines changed

.github/workflows/release-v2.yml

Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,181 @@
1+
name: ReleaseV2 (TestPyPI)
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
python-version:
7+
description: "Python version to use"
8+
default: "3.12"
9+
required: false
10+
11+
permissions:
12+
contents: read
13+
id-token: write # required for OIDC publishing to TestPyPI via trusted publisher
14+
15+
jobs:
16+
build-core:
17+
name: Build & Test Core SDK
18+
runs-on: ubuntu-latest
19+
outputs:
20+
version: ${{ steps.get_version.outputs.version }}
21+
steps:
22+
- name: Checkout repository
23+
uses: actions/checkout@v4
24+
25+
- name: Set up Python ${{ github.event.inputs.python-version || '3.12' }}
26+
uses: actions/setup-python@v5
27+
with:
28+
python-version: ${{ github.event.inputs.python-version || '3.12' }}
29+
30+
- name: Install build tooling (uv & test deps)
31+
run: |
32+
python -m pip install --upgrade pip
33+
# Install uv (once) using pip, then use uv for the rest
34+
python -m pip install uv
35+
uv pip install pytest pytest-asyncio coverage[toml]
36+
37+
- name: Sync environment & install dev extras
38+
run: |
39+
uv sync --dev --all-packages --all-groups --all-extras
40+
41+
- name: Build core distributions
42+
run: |
43+
uv build -o dist
44+
45+
- name: Run tests with coverage (core only)
46+
env:
47+
PYTHONPATH: "${{ github.workspace }}"
48+
run: |
49+
uv run pytest --cov=getstream --cov-report=xml --ignore=getstream/plugins
50+
51+
- name: Upload coverage artifact
52+
uses: actions/upload-artifact@v4
53+
with:
54+
name: core-coverage-xml
55+
path: coverage.xml
56+
57+
- name: Extract package version
58+
id: get_version
59+
run: |
60+
python - <<'PY'
61+
import tomllib, pathlib, os
62+
meta = tomllib.loads(pathlib.Path('pyproject.toml').read_text())
63+
version = meta['project']['version']
64+
with open(os.environ['GITHUB_OUTPUT'], 'a') as fh:
65+
fh.write(f'version={version}\n')
66+
PY
67+
68+
- name: Publish core to TestPyPI
69+
uses: pypa/gh-action-pypi-publish@release/v1
70+
with:
71+
repository-url: https://test.pypi.org/legacy/
72+
packages-dir: dist
73+
environment:
74+
name: testpypi
75+
76+
test-core-index:
77+
name: Verify Core from TestPyPI
78+
needs: build-core
79+
runs-on: ubuntu-latest
80+
env:
81+
UV_NO_SOURCES: "1"
82+
steps:
83+
- name: Set up Python
84+
uses: actions/setup-python@v5
85+
with:
86+
python-version: ${{ github.event.inputs.python-version || '3.12' }}
87+
88+
- name: Install uv and testing tools
89+
run: |
90+
python -m pip install uv
91+
uv pip install pytest pytest-asyncio
92+
93+
- name: Install core from TestPyPI using uv
94+
run: |
95+
uv pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple getstream==${{ needs.build-core.outputs.version }}
96+
97+
- name: Run core tests against TestPyPI artifact
98+
run: |
99+
UV_NO_SOURCES=1 uv run pytest tests/ --ignore=getstream/plugins
100+
101+
build-plugins:
102+
name: Build & Test Plugin Packages
103+
runs-on: ubuntu-latest
104+
needs: test-core-index
105+
env:
106+
CORE_VERSION: ${{ needs.build-core.outputs.version }}
107+
UV_NO_SOURCES: "1"
108+
steps:
109+
- uses: actions/checkout@v4
110+
111+
- uses: actions/setup-python@v5
112+
with:
113+
python-version: ${{ github.event.inputs.python-version || '3.12' }}
114+
115+
- name: Install uv & tooling
116+
run: |
117+
python -m pip install uv
118+
uv pip install pytest pytest-asyncio
119+
120+
- name: Install new core from TestPyPI using uv (for plugin builds/tests)
121+
run: |
122+
uv pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple getstream==${CORE_VERSION}
123+
124+
- name: Build all plugin dists (no workspace sources)
125+
run: |
126+
UV_NO_SOURCES=1 uv build --all-packages -o dist-plugins --wheel --sdist
127+
128+
- name: Run plugin tests (local wheels, core from TestPyPI)
129+
run: |
130+
# Install all built plugin wheels using uv
131+
uv pip install dist-plugins/*.whl
132+
uv run pytest getstream/plugins
133+
134+
- name: Publish plugins to TestPyPI
135+
uses: pypa/gh-action-pypi-publish@release/v1
136+
with:
137+
repository-url: https://test.pypi.org/legacy/
138+
packages-dir: dist-plugins
139+
environment:
140+
name: testpypi
141+
142+
test-plugins-index:
143+
name: Verify Plugins from TestPyPI
144+
runs-on: ubuntu-latest
145+
needs: build-plugins
146+
env:
147+
CORE_VERSION: ${{ needs.build-core.outputs.version }}
148+
UV_NO_SOURCES: "1"
149+
steps:
150+
- uses: actions/setup-python@v5
151+
with:
152+
python-version: ${{ github.event.inputs.python-version || '3.12' }}
153+
154+
- name: Install uv & test tools
155+
run: |
156+
python -m pip install uv
157+
uv pip install pytest pytest-asyncio
158+
159+
- name: Install core and plugins from TestPyPI using uv
160+
run: |
161+
uv pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple getstream==${CORE_VERSION}
162+
uv pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple "getstream-plugins-*"
163+
164+
- name: Run all plugin tests against TestPyPI artifacts
165+
run: |
166+
uv run pytest getstream/plugins
167+
168+
summarize:
169+
name: Publish Test Deployment Report
170+
runs-on: ubuntu-latest
171+
needs: test-plugins-index
172+
steps:
173+
- name: Generate summary
174+
run: |
175+
echo "### Release V2 Test Report" >> $GITHUB_STEP_SUMMARY
176+
echo "* Core Version: ${{ needs.build-core.outputs.version }}" >> $GITHUB_STEP_SUMMARY
177+
echo "* Core build & tests: ✅" >> $GITHUB_STEP_SUMMARY
178+
echo "* Core published to TestPyPI: ✅" >> $GITHUB_STEP_SUMMARY
179+
echo "* Plugins built & tests: ✅" >> $GITHUB_STEP_SUMMARY
180+
echo "* Plugins published to TestPyPI: ✅" >> $GITHUB_STEP_SUMMARY
181+
echo "* Tests against TestPyPI packages: ✅" >> $GITHUB_STEP_SUMMARY

0 commit comments

Comments
 (0)