feat: add PyPI dev bootstrap release mode#202
Conversation
There was a problem hiding this comment.
Pull request overview
This PR adds a manually-triggered “dev bootstrap” mode to the LoongSuite release workflow to pre-create newly added PyPI project names by publishing uniquely-versioned dev wheels only for distributions that don’t yet exist on PyPI.
Changes:
- Added
mode=dev-bootstrap-new-projectsto the GitHub Actions release workflow, including dev-version derivation, wheel pruning, and conditional publishing. - Introduced a new helper script to detect missing PyPI projects via PyPI JSON and prune built wheels accordingly.
- Updated release documentation to describe the new dev-bootstrap workflow and PyPI publishing setup.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
scripts/loongsuite/select_new_pypi_projects.py |
New script that queries PyPI and prunes dist-pypi/ wheels to only those whose projects don’t yet exist. |
docs/loongsuite-release.md |
Documents the dev-bootstrap mode and updates PyPI publishing guidance. |
.github/workflows/loongsuite-release.yml |
Adds the new workflow mode, jobs, inputs, and token-based publishing changes. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
This PR has been automatically marked as stale because it has not had any activity for 14 days. It will be closed if no further activity occurs within 14 days of this comment. |
ralf0131
left a comment
There was a problem hiding this comment.
Review by github-manager-bot
Summary
Adds a manual dev-bootstrap-new-projects mode to the LoongSuite release workflow for reserving PyPI project names before a formal release. The workflow builds dev wheels with a PEP 440 dev version, queries PyPI JSON for existing projects, keeps only new-project wheels, and publishes them with dry_run=true by default.
Findings
- [Info]
loongsuite-release.yml— The workflow correctly separatesdev-bootstrap-buildfrom the existingbuildjob, usingifconditions to gate onmode == 'dev-bootstrap-new-projects'. Theconcurrencygroup is correctly scoped per mode to prevent conflicts. - [Info]
loongsuite-release.yml— Good security practice: using env vars (INPUT_LOONGSUITE_VERSION,INPUT_UPSTREAM_VERSION) instead of inline${{ }}expressions inrunsteps prevents script injection. TheDEFAULT_UPSTREAM_VERSIONenv var is a clean default. - [Info]
select_new_pypi_projects.py— The PyPI JSON API query and wheel pruning logic is straightforward. The--dry-runflag correctly reports what would be published without actually removing files. - [Warning]
loongsuite-release.yml:dev-bootstrap-build— The dev version derivation${BASE_VERSION}.dev${dev_number}wheredev_number = GITHUB_RUN_NUMBER * 100 + GITHUB_RUN_ATTEMPTis unique per run, but PyPI rejects re-uploads of the same version. If a run is re-triggered (e.g., after a transient error), a newGITHUB_RUN_NUMBERensures uniqueness. However, if the same run number is somehow reused (extremely unlikely), uploads will fail silently. Theif-no-files-found: erroron artifact upload is a good safeguard. - [Info]
docs/loongsuite-release.md— Clear documentation of the dev-bootstrap mode, including the note about PyPI API token permissions and Pending Publishers for future OIDC migration.
LGTM. Well-designed release automation with appropriate safety guards.
Automated review by github-manager-bot
Description
Add a manual
dev-bootstrap-new-projectsmode to the LoongSuite release workflow.This mode is intended for newly merged LoongSuite distributions whose PyPI project names do not exist yet. It:
dry_run=truepreview mode;PYPI_API_TOKENthrough the existingpypienvironment only whendry_run=false;Operational note: this workflow uses PyPI API token publishing. The token must have permission to upload and create new PyPI projects. Pending Publishers are only required if the workflow is switched to OIDC Trusted Publishing. If manual approval is required before upload, configure required reviewers on the GitHub
pypienvironment.Fixes # (issue)
Type of change
How Has This Been Tested?
python3 -m py_compile scripts/loongsuite/select_new_pypi_projects.pyuvx ruff@0.14.1 format --check scripts/loongsuite/select_new_pypi_projects.pyuvx ruff@0.14.1 check scripts/loongsuite/select_new_pypi_projects.py.github/workflows/loongsuite-release.ymlwithyaml.BaseLoaderpython3 <loongsuite-github-pipeline>/scripts/check_loongsuite_pr_readiness.py --repo .tox -e precommitDoes This PR Require a Core Repo Change?
Checklist:
See contributing.md for styleguide, changelog guidelines, and more.
tox -e precommitwere run.