Skip to content

Commit 7c1e017

Browse files
authored
add CI for auto releasing internal packages (#6357)
* add CI for auto releasing internal packages * fix concurrency issues * add CI to build packages * fix pyi hashes * use package at version for release title * fetch tag ref
1 parent ccd497c commit 7c1e017

6 files changed

Lines changed: 187 additions & 22 deletions

File tree

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
name: Auto-release internal packages
2+
3+
on:
4+
push:
5+
branches: [main]
6+
paths:
7+
- "packages/reflex-components-internal/**"
8+
- "packages/reflex-site-shared/**"
9+
- ".github/workflows/auto_release_internal.yml"
10+
workflow_dispatch:
11+
inputs:
12+
package:
13+
description: "Package to release"
14+
required: true
15+
type: choice
16+
options:
17+
- reflex-components-internal
18+
- reflex-site-shared
19+
20+
permissions:
21+
contents: write
22+
actions: write
23+
24+
jobs:
25+
detect:
26+
runs-on: ubuntu-latest
27+
outputs:
28+
packages: ${{ steps.detect.outputs.packages }}
29+
steps:
30+
- uses: actions/checkout@v6
31+
with:
32+
fetch-depth: 2
33+
- id: detect
34+
env:
35+
EVENT_NAME: ${{ github.event_name }}
36+
DISPATCH_PACKAGE: ${{ inputs.package }}
37+
run: |
38+
set -euo pipefail
39+
if [ "$EVENT_NAME" = "workflow_dispatch" ]; then
40+
printf 'packages=["%s"]\n' "$DISPATCH_PACKAGE" >> "$GITHUB_OUTPUT"
41+
exit 0
42+
fi
43+
PACKAGES=()
44+
for pkg in reflex-components-internal reflex-site-shared; do
45+
if git diff --name-only HEAD~1 HEAD -- "packages/$pkg/" | grep -q .; then
46+
PACKAGES+=("\"$pkg\"")
47+
fi
48+
done
49+
JOINED=$(IFS=,; echo "${PACKAGES[*]:-}")
50+
echo "packages=[$JOINED]" >> "$GITHUB_OUTPUT"
51+
52+
release:
53+
needs: detect
54+
if: needs.detect.outputs.packages != '[]'
55+
runs-on: ubuntu-latest
56+
strategy:
57+
matrix:
58+
package: ${{ fromJson(needs.detect.outputs.packages) }}
59+
fail-fast: false
60+
concurrency:
61+
group: release-${{ matrix.package }}
62+
cancel-in-progress: false
63+
steps:
64+
- uses: actions/checkout@v6
65+
with:
66+
fetch-tags: true
67+
fetch-depth: 0
68+
- name: Compute next version
69+
id: version
70+
env:
71+
PKG: ${{ matrix.package }}
72+
run: |
73+
set -euo pipefail
74+
LATEST=$(git tag -l "${PKG}-v*" | sed "s/^${PKG}-v//" | sort -V | tail -1)
75+
if [ -z "$LATEST" ]; then
76+
NEXT="0.0.1"
77+
else
78+
IFS='.' read -r MAJOR MINOR PATCH <<< "$LATEST"
79+
NEXT="${MAJOR}.${MINOR}.$((PATCH + 1))"
80+
fi
81+
echo "version=$NEXT" >> "$GITHUB_OUTPUT"
82+
echo "tag=${PKG}-v${NEXT}" >> "$GITHUB_OUTPUT"
83+
- name: Create GitHub release (not marked latest)
84+
env:
85+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
86+
TAG: ${{ steps.version.outputs.tag }}
87+
PKG: ${{ matrix.package }}
88+
VERSION: ${{ steps.version.outputs.version }}
89+
run: |
90+
set -euo pipefail
91+
gh release create "$TAG" \
92+
--title "$PKG@$VERSION" \
93+
--notes "Automated release for $PKG v$VERSION" \
94+
--target "$GITHUB_SHA" \
95+
--latest=false
96+
- name: Trigger publish workflow
97+
env:
98+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
99+
TAG: ${{ steps.version.outputs.tag }}
100+
run: |
101+
set -euo pipefail
102+
gh workflow run publish.yml -f tag="$TAG"
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
name: Build all packages
2+
3+
on:
4+
pull_request:
5+
branches: [main]
6+
push:
7+
branches: [main]
8+
9+
concurrency:
10+
group: ${{ github.workflow }}-${{ github.event.pull_request.id || github.sha }}
11+
cancel-in-progress: true
12+
13+
permissions:
14+
contents: read
15+
16+
jobs:
17+
discover:
18+
runs-on: ubuntu-latest
19+
outputs:
20+
builds: ${{ steps.discover.outputs.builds }}
21+
steps:
22+
- uses: actions/checkout@v6
23+
- id: discover
24+
run: |
25+
set -euo pipefail
26+
ENTRIES=('{"name":"reflex","dir":"."}')
27+
for pkg in packages/*/; do
28+
name=$(basename "$pkg")
29+
ENTRIES+=("{\"name\":\"$name\",\"dir\":\"$pkg\"}")
30+
done
31+
JOINED=$(IFS=,; echo "${ENTRIES[*]}")
32+
echo "builds=[$JOINED]" >> "$GITHUB_OUTPUT"
33+
34+
build:
35+
needs: discover
36+
runs-on: ubuntu-latest
37+
strategy:
38+
matrix:
39+
include: ${{ fromJson(needs.discover.outputs.builds) }}
40+
fail-fast: false
41+
steps:
42+
- uses: actions/checkout@v6
43+
with:
44+
fetch-tags: true
45+
fetch-depth: 0
46+
- uses: ./.github/actions/setup_build_env
47+
with:
48+
python-version: 3.14
49+
run-uv-sync: false
50+
- name: Build ${{ matrix.name }}
51+
run: uv build --directory "${{ matrix.dir }}"

.github/workflows/publish.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ jobs:
2121
- name: Checkout
2222
uses: actions/checkout@v6
2323
with:
24+
ref: ${{ github.event.release.tag_name || inputs.tag }}
2425
fetch-tags: true
2526
fetch-depth: 0
2627

packages/reflex-components-internal/pyproject.toml

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,7 @@ readme = "README.md"
66
authors = [{ name = "Khaleel Al-Adhami", email = "khaleel@reflex.dev" }]
77
maintainers = [{ name = "Khaleel Al-Adhami", email = "khaleel@reflex.dev" }]
88
requires-python = ">=3.10"
9-
dependencies = ["reflex-base", "reflex-components-core"]
10-
11-
[tool.uv.sources]
12-
reflex-base = { workspace = true }
13-
reflex-components-core = { workspace = true }
9+
dependencies = ["reflex"]
1410

1511
[tool.hatch.version]
1612
source = "uv-dynamic-versioning"
@@ -24,7 +20,23 @@ targets.sdist.artifacts = ["*.pyi"]
2420
targets.wheel.artifacts = ["*.pyi"]
2521

2622
[tool.hatch.build.hooks.reflex-pyi]
27-
dependencies = ["ruff", "reflex-base", "reflex-components-core", "reflex-components-lucide", "reflex-components-sonner"]
23+
dependencies = [
24+
"ruff",
25+
"reflex",
26+
"reflex-base",
27+
"reflex-components-code",
28+
"reflex-components-core",
29+
"reflex-components-dataeditor",
30+
"reflex-components-gridjs",
31+
"reflex-components-lucide",
32+
"reflex-components-markdown",
33+
"reflex-components-moment",
34+
"reflex-components-plotly",
35+
"reflex-components-radix",
36+
"reflex-components-react-player",
37+
"reflex-components-recharts",
38+
"reflex-components-sonner",
39+
]
2840

2941
[build-system]
3042
requires = ["hatchling", "uv-dynamic-versioning", "hatch-reflex-pyi"]

packages/reflex-site-shared/pyproject.toml

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,8 @@ readme = "README.md"
66
authors = [{ name = "Khaleel Al-Adhami", email = "khaleel@reflex.dev" }]
77
maintainers = [{ name = "Khaleel Al-Adhami", email = "khaleel@reflex.dev" }]
88
requires-python = ">=3.10"
9-
dependencies = ["reflex-base", "reflex-components-core"]
9+
dependencies = ["reflex"]
1010

11-
[tool.uv.sources]
12-
reflex-base = { workspace = true }
13-
reflex-components-core = { workspace = true }
1411

1512
[tool.hatch.version]
1613
source = "uv-dynamic-versioning"
@@ -26,9 +23,19 @@ targets.wheel.artifacts = ["*.pyi"]
2623
[tool.hatch.build.hooks.reflex-pyi]
2724
dependencies = [
2825
"ruff",
26+
"reflex",
2927
"reflex-base",
28+
"reflex-components-code",
3029
"reflex-components-core",
30+
"reflex-components-dataeditor",
31+
"reflex-components-gridjs",
3132
"reflex-components-lucide",
33+
"reflex-components-markdown",
34+
"reflex-components-moment",
35+
"reflex-components-plotly",
36+
"reflex-components-radix",
37+
"reflex-components-react-player",
38+
"reflex-components-recharts",
3239
"reflex-components-sonner",
3340
"httpx",
3441
"email-validator",

uv.lock

Lines changed: 4 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)