Skip to content

Commit f914673

Browse files
committed
Polish release pipeline
Change-Id: I600646bad64a72be6faaa88211a5fbc64dfc3869 Co-developed-by: Cursor <noreply@cursor.com>
1 parent 2579398 commit f914673

File tree

11 files changed

+720
-527
lines changed

11 files changed

+720
-527
lines changed

.github/workflows/loongsuite-release.yml

Lines changed: 32 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,15 @@
22
#
33
# This workflow handles the complete LoongSuite release process:
44
#
5-
# 1. PyPI packages (loongsuite-util-genai, loongsuite-distro) - .whl only, NOT loongsuite-python-agent.tar.gz
6-
# 2. GitHub Release (instrumentation-genai/*, instrumentation-loongsuite/* as tar.gz)
5+
# 1. Create release/{version} branch from main
6+
# 2. Build packages (bootstrap_gen.py, PyPI wheels, GitHub Release tar.gz)
7+
# 3. Collect changelogs and archive Unreleased sections
8+
# 4. Commit & push release branch
9+
# 5. Create GitHub Release
10+
# 6. Publish to PyPI / Test PyPI
11+
#
12+
# The core logic lives in scripts/loongsuite/loongsuite_release.sh, which can also be
13+
# run locally for the same workflow.
714
#
815
# Trigger:
916
# - workflow_dispatch: Manual trigger with version inputs
@@ -30,9 +37,6 @@ on:
3037
upstream_version:
3138
description: 'Upstream OTel version (e.g., 0.60b1) - for opentelemetry-* packages in bootstrap_gen.py'
3239
required: true
33-
release_notes:
34-
description: 'Release notes (optional, uses CHANGELOG-loongsuite.md Unreleased if empty)'
35-
required: false
3640
skip_pypi:
3741
description: 'Skip PyPI publish (for testing)'
3842
type: boolean
@@ -48,33 +52,31 @@ on:
4852
tags:
4953
- 'v*'
5054

51-
permissions:
52-
contents: read
53-
5455
env:
5556
PYTHON_VERSION: '3.11'
5657

5758
jobs:
58-
# Build all packages
59+
# Build all packages, create release branch, archive changelogs
5960
build:
6061
runs-on: ubuntu-latest
62+
permissions:
63+
contents: write
6164
outputs:
6265
loongsuite_version: ${{ steps.version.outputs.loongsuite_version }}
6366
upstream_version: ${{ steps.version.outputs.upstream_version }}
6467
steps:
6568
- uses: actions/checkout@v4
69+
with:
70+
fetch-depth: 0
6671

6772
- name: Set versions from tag or input
6873
id: version
6974
run: |
7075
if [[ "${{ github.event_name }}" == "push" && "${{ github.ref_type }}" == "tag" ]]; then
71-
# Tag-based release: extract version from tag (v0.1.0 -> 0.1.0)
7276
tag="${GITHUB_REF#refs/tags/}"
7377
loongsuite_version="${tag#v}"
74-
# For tag-based release, upstream_version must be set via environment or default
7578
upstream_version="${UPSTREAM_VERSION:-0.60b1}"
7679
else
77-
# Manual release: use inputs
7880
loongsuite_version="${{ github.event.inputs.loongsuite_version }}"
7981
upstream_version="${{ github.event.inputs.upstream_version }}"
8082
fi
@@ -90,8 +92,6 @@ jobs:
9092
9193
echo "loongsuite_version=$loongsuite_version" >> $GITHUB_OUTPUT
9294
echo "upstream_version=$upstream_version" >> $GITHUB_OUTPUT
93-
echo "LOONGSUITE_VERSION=$loongsuite_version" >> $GITHUB_ENV
94-
echo "UPSTREAM_VERSION=$upstream_version" >> $GITHUB_ENV
9595
9696
echo "LoongSuite version: $loongsuite_version"
9797
echo "Upstream version: $upstream_version"
@@ -100,51 +100,34 @@ jobs:
100100
with:
101101
python-version: ${{ env.PYTHON_VERSION }}
102102

103-
- name: Install build dependencies
103+
- name: Configure git for CI
104104
run: |
105-
python -m pip install --upgrade pip
106-
python -m pip install -r pkg-requirements.txt
105+
git config user.name "github-actions[bot]"
106+
git config user.email "github-actions[bot]@users.noreply.github.com"
107107
108-
- name: Generate bootstrap_gen.py with versions
108+
- name: Run release script
109109
run: |
110-
python scripts/generate_loongsuite_bootstrap.py \
110+
./scripts/loongsuite/loongsuite_release.sh \
111+
--loongsuite-version ${{ steps.version.outputs.loongsuite_version }} \
111112
--upstream-version ${{ steps.version.outputs.upstream_version }} \
112-
--loongsuite-version ${{ steps.version.outputs.loongsuite_version }}
113-
114-
echo "Generated bootstrap_gen.py:"
115-
head -30 loongsuite-distro/src/loongsuite/distro/bootstrap_gen.py
116-
117-
- name: Build PyPI packages
118-
run: |
119-
python scripts/build_loongsuite_package.py \
120-
--build-pypi \
121-
--version ${{ steps.version.outputs.loongsuite_version }}
122-
123-
echo "PyPI packages built:"
124-
ls -la dist/*.whl
125-
126-
- name: Build GitHub Release packages
127-
run: |
128-
python scripts/build_loongsuite_package.py \
129-
--build-github-release \
130-
--version ${{ steps.version.outputs.loongsuite_version }}
131-
132-
echo "GitHub Release tar:"
133-
ls -la dist/*.tar.gz
113+
--skip-install \
114+
--skip-github-release
134115
135116
- name: Upload PyPI artifacts
136117
uses: actions/upload-artifact@v4
137118
with:
138119
name: pypi-packages
139120
path: |
140-
dist/loongsuite_util_genai-*.whl
141-
dist/loongsuite_distro-*.whl
121+
dist-pypi/loongsuite_util_genai-*.whl
122+
dist-pypi/loongsuite_distro-*.whl
142123
143-
- name: Upload GitHub Release artifact
124+
- name: Upload GitHub Release artifacts
144125
uses: actions/upload-artifact@v4
145126
with:
146127
name: github-release
147-
path: dist/loongsuite-python-agent-*.tar.gz
128+
path: |
129+
dist/loongsuite-python-agent-*.tar.gz
130+
dist/release-notes.md
148131
149132
# Publish to production PyPI
150133
publish-pypi:
@@ -157,7 +140,7 @@ jobs:
157140
name: pypi
158141
url: https://pypi.org/project/loongsuite-distro/
159142
permissions:
160-
id-token: write # For OIDC; or use PYPI_API_TOKEN secret
143+
id-token: write
161144
steps:
162145
- name: Download PyPI artifacts
163146
uses: actions/download-artifact@v4
@@ -195,78 +178,20 @@ jobs:
195178
needs: build
196179
runs-on: ubuntu-latest
197180
permissions:
198-
contents: write # Required for creating releases
181+
contents: write
199182
steps:
200-
- uses: actions/checkout@v4
201-
202-
- name: Download GitHub Release artifact
183+
- name: Download GitHub Release artifacts
203184
uses: actions/download-artifact@v4
204185
with:
205186
name: github-release
206187
path: dist/
207188

208-
- name: Generate release notes
209-
id: release_notes
210-
run: |
211-
LOONGSUITE_VERSION="${{ needs.build.outputs.loongsuite_version }}"
212-
UPSTREAM_VERSION="${{ needs.build.outputs.upstream_version }}"
213-
214-
if [[ -n "${{ github.event.inputs.release_notes }}" ]]; then
215-
echo "${{ github.event.inputs.release_notes }}" > /tmp/release-notes.txt
216-
else
217-
# Start with header
218-
cat > /tmp/release-notes.txt << EOF
219-
# LoongSuite Python Agent v${LOONGSUITE_VERSION}
220-
221-
## Installation
222-
223-
\`\`\`bash
224-
pip install loongsuite-distro==${LOONGSUITE_VERSION}
225-
loongsuite-bootstrap -a install --version ${LOONGSUITE_VERSION}
226-
\`\`\`
227-
228-
## Package Versions
229-
230-
- loongsuite-* packages: ${LOONGSUITE_VERSION}
231-
- opentelemetry-* packages: ${UPSTREAM_VERSION}
232-
233-
---
234-
235-
EOF
236-
237-
# Collect from root CHANGELOG-loongsuite.md
238-
if [[ -f CHANGELOG-loongsuite.md ]]; then
239-
echo "## loongsuite-distro" >> /tmp/release-notes.txt
240-
echo "" >> /tmp/release-notes.txt
241-
sed -n '/^## \[*Unreleased\]*$/,/^## /p' CHANGELOG-loongsuite.md | sed '/^## /d' >> /tmp/release-notes.txt
242-
echo "" >> /tmp/release-notes.txt
243-
fi
244-
245-
# Collect from instrumentation-loongsuite/*/CHANGELOG.md
246-
for changelog in instrumentation-loongsuite/*/CHANGELOG.md; do
247-
if [[ -f "$changelog" ]]; then
248-
pkg_dir=$(dirname "$changelog")
249-
pkg_name=$(basename "$pkg_dir")
250-
unreleased_content=$(sed -n '/^## \[*Unreleased\]*$/,/^## /p' "$changelog" | sed '/^## /d')
251-
if [[ -n "$unreleased_content" && "$unreleased_content" =~ [^[:space:]] ]]; then
252-
echo "## $pkg_name" >> /tmp/release-notes.txt
253-
echo "" >> /tmp/release-notes.txt
254-
echo "$unreleased_content" >> /tmp/release-notes.txt
255-
echo "" >> /tmp/release-notes.txt
256-
fi
257-
fi
258-
done
259-
fi
260-
261-
echo "Release notes:"
262-
cat /tmp/release-notes.txt
263-
264189
- name: Create GitHub release
265190
env:
266191
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
267192
run: |
268193
VERSION="${{ needs.build.outputs.loongsuite_version }}"
269194
gh release create "v${VERSION}" \
270195
--title "LoongSuite Python Agent v${VERSION}" \
271-
--notes-file /tmp/release-notes.txt \
196+
--notes-file dist/release-notes.md \
272197
dist/loongsuite-python-agent-${VERSION}.tar.gz

0 commit comments

Comments
 (0)