Skip to content

Use common-ci's release plan in place of this repository's copy - #47

Merged
jwrosewell merged 17 commits into
rcfrom
feature/shared-release-plan
Nov 13, 2026
Merged

jwrosewell merged 17 commits into
rcfrom
feature/shared-release-plan

Conversation

@jwrosewell

@jwrosewell jwrosewell commented Nov 5, 2026 •

Copy link
Copy Markdown
Contributor

Problem

Step 1 of common-ci#306. The release plan in ci/packages.ps1, which works out which packages a publish releases and at which version, moved to common-ci as steps/release-plan.ps1 in common-ci#307, and the rule that documentation, tests and examples do not count was added there by common-ci#310. Both reached common-ci's main, which the workflows here use, in common-ci's release of 12 November. This repository then uses the shared step in place of its own copy, so that the rule is written once for every package repository.

#60, which gave this repository's copy the same rule and adds the filter for manifest metadata that the shared step calls, merged into rc as 5eb295c, and this draft follows it.

Change

  • ci/packages.ps1 dot-sources common-ci's steps/release-plan.ps1 and keeps only what is particular to this repository, being Get-ToxGaps, Resolve-AffectedProducts, Get-AffectedProducts and Get-BuildPlan. The functions it no longer holds, Get-Packages, Get-PackagePaths, Test-PathUnder, Get-PackageExcludes, Get-ChangedFiles, Select-CountedFiles, Get-DependentClosure, Sort-ByDependency, ConvertTo-VersionParts, Get-ReleasedVersions and Get-ReleasePlan, are in common-ci's step on main, so every script that dot-sources ci/packages.ps1 calls them as before. Compared function by function with Release a package only for a change that counts, leaving out documentation, tests, examples and manifest metadata #60's copy, they are the same apart from comments and one improvement in common-ci, which lists changed files with core.quotePath=false, so a file name with a character outside ASCII is matched as written.
  • common-ci runs these scripts from its own root, with this repository checked out inside it, which is where ci/packages.ps1 looks first. It also finds a checkout of common-ci beside this repository, as ci/dispatch.Tests.ps1 does, or one named by COMMON_CI, and stops with a message when there is none.
  • ci/release-plan-filter.ps1 and ci/release-plan-filter.py from Release a package only for a change that counts, leaving out documentation, tests, examples and manifest metadata #60 stay, because the shared step calls ci/release-plan-filter.ps1 when a repository has one. The Ignore entries in ci/packages.json stay too, as the shared step reads them.
  • ci/packages.Tests.ps1 loses the tests of the functions that moved, which common-ci's steps/release-plan.Tests.ps1 holds, and keeps those of Resolve-AffectedProducts, of this repository's filter, of Get-BuildPlan and of the real ci/packages.json.
  • ci/dispatch.Tests.ps1 gives the stand-in common-ci folder it builds a copy of common-ci's whole steps folder, where it copied steps/run-script.ps1 alone. Its test "fetches assets when called without a repository name" runs ci/fetch-assets.ps1 from inside that folder, as common-ci's prefetch action does, and failed with only run-script.ps1 there, with "common-ci's steps/release-plan.ps1 was not found" (run 43476219314). The whole folder is copied rather than the two files, because common-ci#314 makes steps/release-plan.ps1 load version-tags.ps1 from its own folder. A real common-ci checkout has every step, so only the test needed the change.
  • AGENTS.md says the release plan is common-ci's step, loaded by ci/packages.ps1.

Checks

The runs below are temporary branches holding a workflow that checks out common-ci beside this repository, runs every ci/*.Tests.ps1 with Pester on ubuntu-latest and windows-latest, and then prints the release plan against the real tags, first of the head and then of four changes made on top of it, each on its own.

Run 43520495899, this head bb56b0e7 with common-ci's main, passed on both, Tests Passed: 144, Failed: 0, being every test in the five ci/*.Tests.ps1 files rc holds with this draft. rc now holds #107, which changed fiftyone_pipeline_cloudrequestengine's constants.py, so the plan of the head itself is that package and its 9 dependants. The plans, the same on both:

Change on top of the head Packages planned Changed since their last tag
None 10 fiftyone_pipeline_cloudrequestengine
location/readme.md only 10 fiftyone_pipeline_cloudrequestengine
A test of fiftyone_pipeline_core only 10 fiftyone_pipeline_cloudrequestengine
fiftyone_location's source 10 fiftyone_pipeline_cloudrequestengine, fiftyone_location
fiftyone_pipeline_engines's source 12 fiftyone_pipeline_engines, fiftyone_pipeline_cloudrequestengine

So a readme or a test releases nothing more, a package's source releases that package and its dependants, and nothing else, each one patch on, with the label 4.5.104, the highest version in the plan.

Before rc held #107, run 43490213977 at the earlier head 742f256 with common-ci's main, and run 43490225698 at the same head with common-ci checked out at the branch of common-ci#314 (feature/version-tag-reader at 4e27cde6) in place of main, each passed Tests Passed: 131, Failed: 0 on both and gave the same plans as each other. There a readme or a test change planned nothing, fiftyone_location's source planned fiftyone_location alone, and fiftyone_pipeline_engines's source planned it and its 11 dependants. So this repository keeps working when #314 reaches common-ci's main.

Python's release plan is common-ci's steps/release-plan.ps1 on main at the time a publish runs, so the plan check is run again after common-ci's release.

This draft changes only CI scripts, their tests and AGENTS.md, with no package code. James Rosewell decided at about 11:35 UTC on 12 November, for such a change, "rebuild and include, but the change doesn't impact the code so no need to run the full builds." Its quick checks passed on this head, being run 43520486141 (environment variable names), run 43520486619 (only rc into main) and run 43520486208 (link campaign tags).

Head bb56b0e was made in this order. The earlier head 1597838, then #60's head 766fe11 merged in (holding rc at df0949d7), then the AGENTS.md sentence (642d492) and the first dispatch test change (d292d72), then #60's later head ec8b2fd merged in, then the dispatch test copying the whole steps folder (742f256), then rc at 32ffdcf1 merged in. rc holds #60 since 5eb295c, so this draft's diff is its own four files again. The last merge kept rc's Get-AffectedProducts, which takes the branch to measure from since #33, and this draft's shorter ci/packages.ps1 and ci/packages.Tests.ps1.

What remains

  • #117 adds a workflow that runs every ci/*.Tests.ps1 on a pull request that changes ci/. Until it merges, these tests run only in the temporary workflow above.
  • common-ci#314, #315 and #316 change the shared step further. This repository takes them from common-ci's main when they reach it, and each of those drafts says what, if anything, a language repository has to change.

The last release into main was #114, merged at 06:22 UTC on 13 November.

The functions that work out which packages a publish releases, and at
which version, move to common-ci as steps/release-plan.ps1, so that every
package repository can use the same ones. ci/packages.ps1 now dot-sources
that step and keeps only what is particular to this repository: the tox.ini
check and the products a pull request touches. The moved functions are the
same code, so every script that dot-sources ci/packages.ps1 calls them as
before.

common-ci runs these scripts from its own root, with this repository
checked out inside it, which is where ci/packages.ps1 looks first. It also
finds a checkout of common-ci beside this repository, as
ci/dispatch.Tests.ps1 does, or one named by COMMON_CI.

The release plan's tests move to common-ci with it, and ci/packages.Tests.ps1
keeps the tests of what stays here.
A package's tox.ini sets up its test environments and is not part of
what is published, so a change to it alone no longer releases the
package. Each package with a tox.ini ignores it in packages.json, and
the tests cover the real package list.
# Conflicts:
#	AGENTS.md
#	ci/packages.ps1
@jwrosewell
jwrosewell marked this pull request as ready for review November 13, 2026 23:27
@jwrosewell
jwrosewell merged commit bc34f81 into rc Nov 13, 2026
3 checks passed
@jwrosewell
jwrosewell deleted the feature/shared-release-plan branch November 13, 2026 23:27
jwrosewell added a commit that referenced this pull request Nov 14, 2026
The scripts in `ci/` decide what a pull request builds and what a publish releases, and each has Pester tests beside it. `rc` holds five such files, being `ci/packages.Tests.ps1`, `ci/dispatch.Tests.ps1`, `ci/check-environment-variable-names.Tests.ps1`, `ci/get-next-package-version.Tests.ps1` from [#54](#54) and `ci/select-options.Tests.ps1` from [#33](#33). Only the environment variable name tests ran in a workflow. The rest ran only by hand or on a temporary branch, as [#47](#47), [#54](#54) and [#60](#60) each say under what remains, so a change to the release plan or the dispatcher could break them unseen.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant