Skip to content

ci(conda): publish the win-64 package (#2060) - #2138

Merged
JarryShaw merged 1 commit into
mainfrom
ci/2060-publish-win64
Oct 24, 2026
Merged

JarryShaw merged 1 commit into
mainfrom
ci/2060-publish-win64

Conversation

@JarryShaw

@JarryShaw JarryShaw commented Oct 24, 2026 •

Copy link
Copy Markdown
Owner

What is the purpose of your pull request?

  • ci — workflows or build tooling

Description of your pull request and other information

Phase 2 of #2060: publish the win-64 conda package. Phase 1 passed on main (run 40052211743): every windows-latest leg, 3.11–3.15, green with no warnings.

  • Conda Update conda-dist: the Windows legs upload win-64 with anaconda-client, like the Intel legs (ci(conda): upload the macos-26-intel legs with the anaconda CLI (#2044) #2049). The new step is "Upload conda packages to Anaconda (Windows)", run in a bash -el login shell. The build-only dispatch guard still skips it, and test_build_only_dispatch treats the upload as a publishing marker.

  • Create Release conda: gains a windows-latest leg with the same upload, gated on check_leg like the others.

  • util/release_published.py: SUBDIRS (PCAPKIT_CONDA_SUBDIRS) adds win-64, so a release counts as complete only once win-64 is on Anaconda.

  • util/release_conda.py: upload resolves Scripts\anaconda.exe on Windows.

  • The Windows leg now blocks like the other platforms. Its continue-on-error, Windows summary step and conda-windows summary tier are removed.

  • Unchanged: no new secrets or environments; it uses the existing ANACONDA_TOKEN in anaconda. The GitHub Release upload is unchanged; only ubuntu-latest does that.

  • Tests: test_conda_windows_leg_2060.py is reworked, and the pins in the other conda/release tests are updated. Without the change, 28 of 56 tests fail. A 68-file selection of the workflow-reading tests gives 1224 passed. actionlint 1.7.12 is clean.

  • Unverified until a real run:

    • The release job's Windows leg has never run.
    • The first real win-64 upload is the first scheduled Conda Update after this merges.
    • With win-64 in SUBDIRS, the current published version reads as incomplete. The conda job still skips it while PCAPKIT_RELEASED_ELSEWHERE is true, so win-64 first ships with the next release.
  • Completeness (round 2): a version counts as complete against the platforms its tagged commit published (release_published.released_subdirs(), reading SUBDIRS at the tag). So 1.5.0b14 is not newly flagged for win-64. It is still flagged for its missing osx-64 files, which predates this PR: release: 1.5.0b14 has no osx-64 conda files, so Create Release warns it is unfinished on every released-elsewhere run #2140.

  • A first real release exercises: on create-release.yml's windows-latest conda leg, the pre-setup-python steps Check the release tags name this run's commit and Check whether this leg is already on Anaconda (python3 under Git Bash, /tmp mapping, curl), then Upload conda packages to Anaconda (Windows) in both jobs. The first scheduled Conda Update after merge exercises the upload; a build-only dispatch does not.

@JarryShaw JarryShaw added enhancement Issues requesting a new capability (set by the feature request template) ci Pull requests that change CI or workflow configuration (ci: subject prefix) review: running A cross-review is in flight against the current head - no verdict yet labels Oct 24, 2026
@JarryShaw JarryShaw moved this to In review in PyPCAPKit Oct 24, 2026
@JarryShaw

Copy link
Copy Markdown
Owner Author

GOOD TO GO at 214d266fa (Sonnet review), with follow-ups in progress.

  • No accidental publishing. Conda Update triggers only on schedule, workflow_run and workflow_dispatch. The Windows upload is gated event_name != 'workflow_dispatch' && windows-latest, and a manual run gets environment: ''. Only the upload steps read ANACONDA_TOKEN. In Create Release, the new upload is gated by check_leg behind the unchanged job gate. Tests pin all of this per leg.
  • Upload parity with Intel: --skip-existing, token via secrets.ANACONDA_TOKEN in anaconda, a bash -el shell, and Scripts\anaconda.exe resolved on Windows. The edited conda and release tests were updated, not weakened (891 passed across 34 files).
  • Being fixed:
    • With win-64 in SUBDIRS, the current published version reads incomplete (9 of 12 files). A released-elsewhere Create Release run then warns "unfinished … re-run the Create Release run", which is the wrong advice. The completeness check will exempt versions released before win-64 publishing.
    • A stale comment in experimental.yml still names the removed Windows summary step.
  • Unverified until the first real release: Create Release's Windows check_leg / release_tags.py check steps, which call python3 in Git Bash before setup-python.

@JarryShaw JarryShaw added review: needs-changes Cross-review at the current head says changes are required; see the verdict comment and removed review: running A cross-review is in flight against the current head - no verdict yet labels Oct 24, 2026
Phase 2 of #2060: Conda Update's runs built and smoke-tested win-64
green, so both conda jobs now publish it from a blocking Windows leg.

- cron-conda.yml: the Windows leg loses its `continue-on-error` guards
  and `Windows summary`, and uploads through the new "Upload conda
  packages to Anaconda (Windows)": the Intel leg's anaconda-client call
  under `bash -el`, skipped on a manual run as every upload is.
- create-release.yml: `conda` gains the `windows-latest` leg, with
  `shell: bash` on its `run:` steps, a login shell for conda,
  setup-python's `python.exe` in the smoke test, and the same upload,
  gated on `check_leg`. The GitHub Release still takes linux-64 alone.
- release_published.py: SUBDIRS counts win-64, and a tagged version is
  counted for the SUBDIRS its tag's commit lists, so one released
  before win-64 does not read as unfinished.
- release_conda.py: `upload` runs base's `Scripts\anaconda.exe` on
  Windows.
- leg_summary.py: the `conda-windows` tier goes.

test_conda_windows_leg_2060 and test_release_tags_the_run_sha_1634 pin
the upload, the blocking leg and the released platforms; the tests
reading the conda jobs, platforms and counts follow, as do the docs.
@JarryShaw
JarryShaw force-pushed the ci/2060-publish-win64 branch from 214d266 to b602422 Compare October 24, 2026 05:00
@JarryShaw JarryShaw added review: running A cross-review is in flight against the current head - no verdict yet and removed review: needs-changes Cross-review at the current head says changes are required; see the verdict comment labels Oct 24, 2026
@JarryShaw

Copy link
Copy Markdown
Owner Author

GOOD TO GO at b6024227b (Sonnet delta review).

  • New rule: released_subdirs() reads SUBDIRS at the version's tagged commit. A tag that predates the file reads the file's first commit, 79934ddd9. Only version_check calls it, and it checks out with fetch-depth: 0, the same pattern as release_tiers.py. ^{commit} handles annotated tags.
  • 1.5.0b14: confirmed through the anaconda.org API at 5 linux-64, 5 osx-arm64 and 0 osx-64 files. The rule expects the same three platforms as before, so the "unfinished" warning (release: 1.5.0b14 has no osx-64 conda files, so Create Release warns it is unfinished on every released-elsewhere run #2140) is neither added nor removed.
  • Failure mode: an unreadable tag line falls back to the current SUBDIRS, a superset, so the error leans towards "incomplete". It warns as Platforms of v… not read (#2060).
  • Tests: the new test pins the SUBDIRS = '…' line format that the regex reads. The new class fails 5 of 8 cases on 214d266fa, and the release and conda tests give 432 passed.

@JarryShaw JarryShaw added review: good-to-go Cross-review at the current head says ready; CI state is separate and removed review: running A cross-review is in flight against the current head - no verdict yet labels Oct 24, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Coverage: 91.55% (unit tier, Python 3.15, b6024227b, Unit Tests run success)

Package Statements Missed Branches Partial Cover
pcapkit (top level) 104 4 20 2 95.16%
pcapkit/const 19599 880 2618 866 92.12%
pcapkit/corekit 2589 75 816 37 96.48%
pcapkit/dumpkit 282 3 102 3 98.44%
pcapkit/foundation 2971 23 1036 25 98.80%
pcapkit/interface 138 4 52 3 96.32%
pcapkit/protocols 17418 219 4574 185 98.14%
pcapkit/toolkit 869 36 298 10 95.20%
pcapkit/utilities 498 7 144 5 98.13%
pcapkit/vendor 4432 1988 1018 167 51.87%

Per-file detail: the coverage-html artifact of this run.

@JarryShaw

Copy link
Copy Markdown
Owner Author

Ready to merge at b6024227b.

  • Review: GOOD TO GO, from the Sonnet review and the round-2 delta review.
  • CI: every blocking check passed (Required checks passed SUCCESS). The 3.8–3.10 KTLO legs carry no warnings.
  • Ordering: the tests/project plain-unittest ordering leg passed on a scratch merge into main d7aa41535: 2246 tests, 0 failures.
  • After merge:

This closes #2060 (phase 2).

@JarryShaw
JarryShaw merged commit 8b43828 into main Oct 24, 2026
64 checks passed
@github-project-automation github-project-automation Bot moved this from In review to Done in PyPCAPKit Oct 24, 2026
@JarryShaw
JarryShaw deleted the ci/2060-publish-win64 branch October 24, 2026 12:53
@JarryShaw JarryShaw removed the review: good-to-go Cross-review at the current head says ready; CI state is separate label Oct 24, 2026
@JarryShaw JarryShaw added this to the PyPCAPKit v1.5 milestone Oct 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci Pull requests that change CI or workflow configuration (ci: subject prefix) enhancement Issues requesting a new capability (set by the feature request template)

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant