docs(pdftract-245s): add verification note for pdftract-py-ci WorkflowTemplate

Documents the implementation of the pdftract-py-ci WorkflowTemplate
that builds 5 platform wheels + 1 sdist using maturin and publishes
to PyPI via twine.

Acceptance criteria:
- PASS: WorkflowTemplate file at correct location
- PASS: Failed platform builds don't cancel others (continueOn.failed: true)
- PASS: Idempotent re-runs (twine --skip-existing)
- PASS: PyPI token from ESO Secret configured
- WARN: Test workflow submission (requires iad-ci cluster access)
- WARN: Actual pip install test (requires PyPI publish)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
jedarden 2026-05-20 19:12:56 -04:00
parent ae17a42489
commit fda4403014

101
notes/pdftract-245s.md Normal file
View file

@ -0,0 +1,101 @@
# Verification Note: pdftract-245s (pdftract-py-ci WorkflowTemplate)
## Summary
Implemented the `pdftract-py-ci` WorkflowTemplate at `k8s/iad-ci/argo-workflows/pdftract-py-ci.yaml` in `jedarden/declarative-config`. The template builds 5 platform wheels + 1 source distribution using maturin and publishes to PyPI via twine.
## File Location
- **WorkflowTemplate**: `jedarden/declarative-config/k8s/iad-ci/argo-workflows/pdftract-py-ci.yaml`
- **ExternalSecret**: `jedarden/declarative-config/k8s/iad-ci/argo-workflows/pypi-token-pdftract-externalsecret.yml`
- **Commit**: `9d40a65` (feat(pdftract-245s): implement pdftract-py-ci WorkflowTemplate with maturin builds)
## Acceptance Criteria Status
### PASS
1. **WorkflowTemplate file lands at correct location**
- File exists at `k8s/iad-ci/argo-workflows/pdftract-py-ci.yaml`
- Commit `9d40a65` added the file to `jedarden/declarative-config`
2. **Failed platform publish does NOT cancel other matrix items**
- Verified: All 5 wheel build tasks have `continueOn.failed: true`
- The sdist and publish steps run independently
- Lines 163-188 in the YAML confirm continueOn behavior
3. **Two consecutive runs are idempotent**
- Verified: `twine upload --skip-existing` is used (line 702)
- Returns 0 for already-uploaded files
- Only missing artifacts are uploaded on re-run
4. **PyPI token from ESO Secret**
- ExternalSecret `pypi-token-pdftract` exists
- Syncs from OpenBao key `rs-manager/iad-ci/pypi/pdftract`
- Referenced in publish-pypi template (lines 710-714)
5. **Wheel naming convention**
- Uses abi3 tagging: `pdftract-X.Y.Z-cp311-abi3-<platform_tag>.whl`
- One wheel per platform serves Python 3.11+
6. **Parallel builds**
- All 5 wheel builds run in parallel under DAG dependencies
- sdist builds in parallel with wheels
### WARN (Environmental - Not Testable in This Session)
1. **A test workflow against a sample tag produces artifacts**
- Requires Argo Workflows submission to `iad-ci` cluster
- Would verify wheel and sdist artifact generation
- Command to test: `kubectl --kubeconfig=/home/coding/.kube/iad-ci.kubeconfig create -f <workflow-manifest>`
2. **The `twine upload` step succeeds with ESO-provided token**
- Requires actual PyPI token to be present in OpenBao
- Requires a real tag to be published
- Would verify `twine upload --skip-existing` succeeds
3. **`pip install pdftract` on clean machine installs appropriate wheel**
- Requires PyPI publish to complete
- Would verify pip selects correct platform wheel
- Test command: `pip install pdftract==X.Y.Z`
## Implementation Details
### Platform Wheels Built
| Platform | Container Image | Target Triple |
|----------|-----------------|---------------|
| manylinux_2_28_x86_64 | quay.io/pypa/manylinux_2_28_x86_64 | x86_64-unknown-linux-gnu |
| manylinux_2_28_aarch64 | messense/manylinux_2_28-cross:aarch64 | aarch64-unknown-linux-gnu |
| macosx_11_0_x86_64 | messense/maturin:main-darwin-x86_64 | x86_64-apple-darwin |
| macosx_11_0_arm64 | messense/maturin:main-darwin-aarch64 | aarch64-apple-darwin |
| win_amd64 | messense/maturin:main-windows-x86_64 | x86_64-pc-windows-msvc |
### DAG Structure
```
setup -> [parallel: wheel-linux-x86_64, wheel-linux-aarch64,
wheel-darwin-x86_64, wheel-darwin-aarch64,
wheel-windows-x86_64, sdist] ->
[parallel: publish-pypi-sdist (after sdist),
publish-pypi-wheels (after all wheels)]
```
### Key Features
- **Maturin version**: Installed via cargo in setup, pip in manylinux containers
- **abi3 tagging**: `--interpreter python3.11 --abi3` for Python 3.11+ compatibility
- **Strip symbols**: `--strip` for smaller wheel sizes
- **Reproducible builds**: `SOURCE_DATE_EPOCH` set from git commit timestamp
- **Shared cargo cache**: 50Gi PVC for faster rebuilds
- **Wheel artifacts PVC**: 5Gi for collecting wheels before upload
## ADR-009 Compliance
Per ADR-009: NO OIDC trusted-publisher (GitHub Actions exclusive feature). The workflow uses PyPI API token from ExternalSecret, not OIDC.
## References
- Plan section: Release Engineering / Argo WorkflowTemplates, line 3390
- Plan section: Artifact Taxonomy, lines 3355-3356
- ADR-009 (PyPI token auth, not GitHub OIDC)
- Phase 6.3 (PyO3 binding provides the cdylib)