Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .github/workflows/package-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ jobs:
done
node packaging/assemble.mjs --version "$VERSION" --binaries dist/bin --output dist/packages
- name: Build Python wheels
if: needs.resolve.outputs.channel == 'stable'
env:
VERSION: ${{ needs.resolve.outputs.version }}
shell: bash
Expand All @@ -139,11 +140,13 @@ jobs:
(cd "$directory" && npm pack --dry-run)
done
- name: Assemble immutable release unit
env:
CHANNEL: ${{ needs.resolve.outputs.channel }}
run: |
mkdir -p dist/release-unit
cp dist/packages/SHA256SUMS.json dist/release-unit/
cp -R dist/packages/npm dist/release-unit/npm
cp -R dist/pypi dist/release-unit/pypi
if [[ "$CHANNEL" == stable ]]; then cp -R dist/pypi dist/release-unit/pypi; fi
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: packages-${{ needs.resolve.outputs.version }}-${{ needs.resolve.outputs.source_sha }}
Expand Down
2 changes: 2 additions & 0 deletions scripts/check-release-control.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,8 @@ export async function checkReleaseControl(root = resolve(import.meta.dirname, ".
expect(publisher.jobs?.npm?.permissions?.contents === "read" && publisher.jobs?.npm?.permissions?.["id-token"] === "write", "npm publisher must use read-only source plus OIDC");
expect(publisher.jobs?.pypi?.permissions?.contents === "read" && publisher.jobs?.pypi?.permissions?.["id-token"] === "write", "PyPI publisher must use read-only source plus OIDC");
expect(publisher.jobs?.pypi?.environment === "pypi-production", "stable PyPI publishing must use the protected pypi-production environment");
const pythonWheelStep = publisher.jobs?.build?.steps?.find((step) => step.name === "Build Python wheels");
expect(pythonWheelStep?.if === "needs.resolve.outputs.channel == 'stable'", "PyPI wheels must be built only for stable PEP 440 versions");
expect(raw["package-publish.yml"].indexOf("Publish platform runtimes") < raw["package-publish.yml"].indexOf("Publish SDK and CLI"), "runtime packages must publish before the SDK package");
expect(raw["package-publish.yml"].includes("pypa/gh-action-pypi-publish@"), "PyPI publishing must use the trusted-publishing action");
expect(!raw["package-publish.yml"].includes("skip-existing"), "PyPI retries must verify hashes instead of blindly skipping existing files");
Expand Down