Commit 0397f1f
authored
Rel v25.10.2 (#1734)
* new dev branch towards v25.10.2
* Add comprehensive SHA256 verification for native wheels artifacts
Fixes #1733, #1732 - Prevents corrupted artifacts from reaching PyPI
## Problem
Native wheels (macOS, Windows, Linux no-NVX) had NO checksum verification
during artifact transfer from wheels workflow to release workflows. This is
the SAME vulnerability that allowed the corrupted v25.10.1 source distribution
to reach PyPI (issue #1714).
The root cause: all three native wheel artifacts download to the same dist/
directory with files all named CHECKSUMS.sha256, causing them to overwrite
each other. Only the last downloaded checksum file remains, leaving most
wheels unverified.
## Solution
Implemented immediate verification pattern for all three release jobs
(release-development, release-nightly, release-stable):
1. Changed from merge-multiple downloads to separate artifact downloads
2. Verify checksums immediately after each download, before the next
download overwrites the checksum file
3. Fail fast on any checksum mismatch or missing files
## Coverage
ALL artifact transfer pairs now have SHA256 verification:
- ✅ Source distributions (wheels → release) - already fixed in prior commit
- ✅ macOS ARM64 wheels (wheels → release) - NEW
- ✅ Windows x86_64 wheels (wheels → release) - NEW
- ✅ Linux no-NVX wheels (wheels → release) - NEW
- ✅ Manylinux wheels with NVX (wheels-docker → release) - already existed
- ✅ ARM64 wheels with NVX (wheels-arm64 → release) - already existed
Complete end-to-end cryptographic chain of custody from build → PyPI.
* bump version to 25.10.2
* Reorganize documentation: add Runtime Environment Notes section
Fixes #1731 - Adds comprehensive Conda installation guidance
## Changes
1. **New documentation structure**
- Created `docs/environments/` directory for environment-specific guides
- Added `docs/environments/index.rst` overview page
- Moved `autobahn-on-free-threaded-python.rst` → `environments/free-threaded-python.rst`
2. **New Conda documentation** (`docs/environments/conda.rst`)
- Explains why conda-forge lags behind PyPI
- Recommends `pip install autobahn` within Conda environments
- Documents native wheel selection and NVX acceleration
- Troubleshooting guide for common Conda issues
- Addresses user feedback from issue #1731
3. **Updated references**
- Modified `docs/index.rst` to reference new `environments/index` section
- Updated reference label from `autobahn-on-free-threaded-python` to `free-threaded-python`
## Why This Structure
Consolidates all environment-specific documentation under a single section,
making it easier for users to find platform/deployment-specific guidance.
Future additions (Docker, embedded systems, etc.) can follow the same pattern.
## Documentation Quality
- Follows existing .rst formatting patterns
- Includes comprehensive examples and code blocks
- Cross-references related documentation pages
- Provides troubleshooting sections
- Uses consistent section hierarchy
Addresses user confusion about installing Autobahn in Conda environments
and getting outdated versions from conda-forge.
* Integrate cryptographic artifact verification in wheels workflow
Updates wheels.yml to use new upload-artifact-verified action from wamp-cicd.
## Changes
1. **Updated .cicd submodule** to bfe9880 (includes new verified artifact actions)
2. **Replaced all upload-artifact@v4 calls** with upload-artifact-verified:
- wheels-{platform}-{arch} upload (line 591)
- source-distribution upload (line 773, Linux only)
- linux-wheels-no-nvx upload (line 781, Linux only)
3. **Simplified upload paths** from file patterns to entire dist/ directory
## Behavior Changes
**Before:**
- Manual CHECKSUMS.sha256 generation (kept for debugging)
- Upload specific files via YAML list pattern
- No meta-checksum verification
**After:**
- Automated CHECKSUMS.sha256 generation by verified action
- Upload entire dist/ directory (includes all build outputs)
- Auto-generated CHECKSUMS.sha256.meta for integrity verification
- Filesystem sync before/after checksum generation
## Files in Uploaded Artifacts
Each artifact now includes:
- Original build outputs (*.whl, *.tar.gz, *.verify.txt, VALIDATION.txt)
- CHECKSUMS.sha256 (generated by action, replaces manual version)
- CHECKSUMS.sha256.meta (NEW - enables two-level verification)
## Security Improvement
Artifacts now have cryptographic chain-of-custody protection:
1. Build creates files → dist/
2. verified-upload generates checksums + meta-checksum
3. verified-download verifies meta-checksum → checksums → files
4. Any corruption during artifact transfer is detected
This prevents corrupted artifacts (like the PyPy ARM64 wheel in v25.10.1)
from reaching the release workflow and ultimately PyPI.
Part of fixing #1733, #1732 (chain-of-custody verification).
* Replace artifact upload/download with cryptographic chain-of-custody verification
This commit integrates the new verified artifact actions from wamp-cicd to
replace standard GitHub Actions artifact handling with cryptographically
verified transfers that include automatic retry logic for GitHub storage
eventual consistency issues.
Changes:
1. wheels-docker.yml (line 478-484):
- Replaced upload-artifact@v4 with upload-artifact-verified
- Changed from file patterns to directory path (wheelhouse/)
- Automatic CHECKSUMS.sha256 and meta-checksum generation
2. wheels-arm64.yml (line 414-419):
- Replaced upload-artifact@v4 with upload-artifact-verified
- Changed from file patterns to directory path (wheelhouse/)
- Automatic CHECKSUMS.sha256 and meta-checksum generation
3. release.yml (multiple locations):
- Replaced download-artifact@v4 with download-artifact-verified for:
* wheels-macos-arm64 (3 occurrences)
* wheels-windows-x86_64 (3 occurrences)
* source-distribution (3 occurrences)
* linux-wheels-no-nvx (3 occurrences)
- Removed 12 manual "Re-verify" steps (replaced by built-in verification)
- Added max-attempts: 3 and retry-delay: 60 for all downloads
- Preserved continue-on-error behavior for optional artifacts
Technical improvements:
- Two-level cryptographic verification:
1. Meta-checksum verifies CHECKSUMS.sha256 integrity
2. Individual file checksums verify each artifact file
- Automatic retry logic with delay handles GitHub Actions storage eventual
consistency issues (artifacts marked "completed" before async writes finish)
- Filesystem sync before/after checksum generation ensures QEMU buffer flush
- Self-contained verification (checksum files travel with artifacts)
- Fail-safe design: only succeeds after complete verification
Note: Pattern-based downloads (artifacts-*, artifacts-arm64-*) still use
standard download-artifact@v4 with merge-multiple because the verified action
doesn't yet support pattern matching. These artifacts are protected at upload
time by the verified upload actions in wheels-docker.yml and wheels-arm64.yml.
Related issues:
- Addresses artifact corruption detected in run 18516073936
- Implements solution discussed in issue #1714
* Add comprehensive docstrings for public API attributes
Added detailed Sphinx-compatible docstrings for the following public API
attributes to improve documentation and developer experience:
1. autobahn.websocket.HAS_NVX
- Explains build-time NVX availability check
- Documents what NVX provides (UTF-8 validation, XOR masking)
- Clarifies independence from AUTOBAHN_USE_NVX runtime setting
- Includes usage example and cross-reference to USES_NVX
2. autobahn.websocket.USES_NVX
- Explains runtime NVX usage decision
- Documents interaction between build-time availability and runtime config
- Provides complete AUTOBAHN_USE_NVX environment variable reference
- Includes scenario examples and cross-reference to HAS_NVX
3. autobahn.twisted.__ident__
- Enhanced existing brief docstring with comprehensive documentation
- Documents format variations (with/without NVX acceleration)
- Explains usage in protocol handshakes (WebSocket Upgrade, WAMP HELLO)
- Provides example values for different configurations
- Cross-references asyncio.__ident__ and USES_NVX
4. autobahn.asyncio.__ident__
- Enhanced existing brief docstring with comprehensive documentation
- Documents format variations (with/without NVX acceleration)
- Explains usage in protocol handshakes (WebSocket Upgrade, WAMP HELLO)
- Notes difference from Twisted variant (no asyncio version number)
- Provides example values for different configurations
- Cross-references twisted.__ident__ and USES_NVX
All docstrings follow reStructuredText format for proper Sphinx rendering in
Read the Docs documentation. This is a documentation-only change with no
functional modifications.
Related: This is a safe change to trigger final workflow testing before
merging rel_v25.10.2 to master (addresses issues #1735, #1714).1 parent 02aef1b commit 0397f1f
File tree
15 files changed
+719
-67
lines changed- .audit
- .github/workflows
- autobahn
- asyncio
- twisted
- websocket
- docs
- environments
15 files changed
+719
-67
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
122 | 122 | | |
123 | 123 | | |
124 | 124 | | |
125 | | - | |
126 | | - | |
| 125 | + | |
| 126 | + | |
127 | 127 | | |
128 | | - | |
129 | | - | |
| 128 | + | |
130 | 129 | | |
131 | 130 | | |
132 | 131 | | |
| 132 | + | |
| 133 | + | |
133 | 134 | | |
134 | 135 | | |
135 | | - | |
136 | | - | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
137 | 149 | | |
138 | 150 | | |
139 | 151 | | |
140 | 152 | | |
141 | 153 | | |
| 154 | + | |
| 155 | + | |
142 | 156 | | |
143 | 157 | | |
144 | 158 | | |
| |||
172 | 186 | | |
173 | 187 | | |
174 | 188 | | |
| 189 | + | |
175 | 190 | | |
176 | 191 | | |
177 | 192 | | |
| |||
194 | 209 | | |
195 | 210 | | |
196 | 211 | | |
| 212 | + | |
| 213 | + | |
197 | 214 | | |
198 | 215 | | |
199 | 216 | | |
| |||
286 | 303 | | |
287 | 304 | | |
288 | 305 | | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
289 | 321 | | |
290 | 322 | | |
291 | | - | |
| 323 | + | |
292 | 324 | | |
293 | 325 | | |
294 | 326 | | |
295 | 327 | | |
296 | 328 | | |
297 | 329 | | |
298 | 330 | | |
299 | | - | |
300 | | - | |
| 331 | + | |
| 332 | + | |
301 | 333 | | |
302 | 334 | | |
303 | 335 | | |
304 | 336 | | |
305 | 337 | | |
| 338 | + | |
| 339 | + | |
306 | 340 | | |
307 | 341 | | |
308 | 342 | | |
| |||
783 | 817 | | |
784 | 818 | | |
785 | 819 | | |
786 | | - | |
787 | | - | |
| 820 | + | |
| 821 | + | |
788 | 822 | | |
789 | | - | |
790 | | - | |
| 823 | + | |
791 | 824 | | |
792 | 825 | | |
793 | 826 | | |
| 827 | + | |
| 828 | + | |
794 | 829 | | |
795 | 830 | | |
796 | | - | |
797 | | - | |
| 831 | + | |
| 832 | + | |
| 833 | + | |
| 834 | + | |
| 835 | + | |
| 836 | + | |
| 837 | + | |
| 838 | + | |
| 839 | + | |
| 840 | + | |
| 841 | + | |
| 842 | + | |
| 843 | + | |
798 | 844 | | |
799 | 845 | | |
800 | 846 | | |
801 | 847 | | |
802 | 848 | | |
| 849 | + | |
| 850 | + | |
803 | 851 | | |
804 | 852 | | |
805 | 853 | | |
| |||
833 | 881 | | |
834 | 882 | | |
835 | 883 | | |
| 884 | + | |
836 | 885 | | |
837 | 886 | | |
838 | 887 | | |
| |||
855 | 904 | | |
856 | 905 | | |
857 | 906 | | |
| 907 | + | |
| 908 | + | |
858 | 909 | | |
859 | 910 | | |
860 | 911 | | |
| |||
947 | 998 | | |
948 | 999 | | |
949 | 1000 | | |
| 1001 | + | |
| 1002 | + | |
| 1003 | + | |
| 1004 | + | |
| 1005 | + | |
| 1006 | + | |
| 1007 | + | |
| 1008 | + | |
| 1009 | + | |
| 1010 | + | |
| 1011 | + | |
| 1012 | + | |
| 1013 | + | |
| 1014 | + | |
| 1015 | + | |
950 | 1016 | | |
951 | 1017 | | |
952 | | - | |
| 1018 | + | |
953 | 1019 | | |
954 | 1020 | | |
955 | 1021 | | |
956 | 1022 | | |
957 | 1023 | | |
958 | 1024 | | |
959 | 1025 | | |
960 | | - | |
961 | | - | |
| 1026 | + | |
| 1027 | + | |
962 | 1028 | | |
963 | 1029 | | |
964 | 1030 | | |
965 | 1031 | | |
966 | 1032 | | |
| 1033 | + | |
| 1034 | + | |
967 | 1035 | | |
968 | 1036 | | |
969 | 1037 | | |
| |||
1461 | 1529 | | |
1462 | 1530 | | |
1463 | 1531 | | |
1464 | | - | |
1465 | | - | |
| 1532 | + | |
| 1533 | + | |
1466 | 1534 | | |
1467 | 1535 | | |
1468 | 1536 | | |
1469 | 1537 | | |
1470 | 1538 | | |
| 1539 | + | |
| 1540 | + | |
1471 | 1541 | | |
1472 | 1542 | | |
1473 | | - | |
1474 | | - | |
| 1543 | + | |
| 1544 | + | |
1475 | 1545 | | |
1476 | 1546 | | |
1477 | 1547 | | |
1478 | 1548 | | |
1479 | 1549 | | |
| 1550 | + | |
| 1551 | + | |
1480 | 1552 | | |
1481 | 1553 | | |
1482 | | - | |
1483 | | - | |
| 1554 | + | |
| 1555 | + | |
1484 | 1556 | | |
1485 | 1557 | | |
1486 | 1558 | | |
1487 | 1559 | | |
1488 | 1560 | | |
| 1561 | + | |
| 1562 | + | |
1489 | 1563 | | |
1490 | 1564 | | |
1491 | 1565 | | |
| |||
1519 | 1593 | | |
1520 | 1594 | | |
1521 | 1595 | | |
| 1596 | + | |
1522 | 1597 | | |
1523 | 1598 | | |
1524 | 1599 | | |
| |||
1541 | 1616 | | |
1542 | 1617 | | |
1543 | 1618 | | |
| 1619 | + | |
| 1620 | + | |
1544 | 1621 | | |
1545 | 1622 | | |
1546 | 1623 | | |
| |||
1633 | 1710 | | |
1634 | 1711 | | |
1635 | 1712 | | |
| 1713 | + | |
| 1714 | + | |
| 1715 | + | |
| 1716 | + | |
| 1717 | + | |
| 1718 | + | |
| 1719 | + | |
| 1720 | + | |
| 1721 | + | |
| 1722 | + | |
| 1723 | + | |
| 1724 | + | |
| 1725 | + | |
| 1726 | + | |
| 1727 | + | |
1636 | 1728 | | |
1637 | 1729 | | |
1638 | | - | |
| 1730 | + | |
1639 | 1731 | | |
1640 | 1732 | | |
1641 | 1733 | | |
1642 | 1734 | | |
1643 | 1735 | | |
1644 | 1736 | | |
1645 | 1737 | | |
1646 | | - | |
1647 | | - | |
| 1738 | + | |
| 1739 | + | |
1648 | 1740 | | |
1649 | 1741 | | |
1650 | 1742 | | |
1651 | 1743 | | |
1652 | 1744 | | |
| 1745 | + | |
| 1746 | + | |
1653 | 1747 | | |
1654 | 1748 | | |
1655 | 1749 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
411 | 411 | | |
412 | 412 | | |
413 | 413 | | |
414 | | - | |
415 | | - | |
| 414 | + | |
| 415 | + | |
416 | 416 | | |
417 | 417 | | |
418 | | - | |
419 | | - | |
420 | | - | |
421 | | - | |
422 | | - | |
423 | | - | |
| 418 | + | |
424 | 419 | | |
425 | 420 | | |
426 | 421 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
476 | 476 | | |
477 | 477 | | |
478 | 478 | | |
479 | | - | |
480 | | - | |
| 479 | + | |
| 480 | + | |
481 | 481 | | |
482 | 482 | | |
483 | | - | |
484 | | - | |
485 | | - | |
486 | | - | |
487 | | - | |
488 | | - | |
| 483 | + | |
489 | 484 | | |
490 | 485 | | |
491 | 486 | | |
0 commit comments