ci: run tasks with the flow binary under review - #447
Merged
Conversation
Every job installed flow via flowexec/action with `flow-version: main`, which clones flow from GitHub and builds main — discarding the branch. CI therefore validated each change with a flow that predated it. That is a silent gap in general, and a hard block when a .execs target depends on a flow capability that has not shipped: no change to the PR can make such a job pass, because the capability must already be on main. Adding Python support hit exactly this — the released flow parsed a .py target as shell and failed on every platform. Each job now builds flow first and passes it via the action's flow-binary input (flowexec/action#2), so tasks run against the code as it would land on main. flow-version: main is kept alongside it as a transitional fallback: action releases predating flow-binary ignore the new input, and without it they would quietly fall back to `latest` rather than today's behavior. It can be dropped once v1 carries the input. Two deliberate exclusions: - windows-ci's build-binary job keeps `flow-version: latest`; its purpose is to exercise the install script. - release, container, and release-docs are untouched. The same reasoning applies to them, but they publish artifacts and cannot be verified from a pull request, so they belong in a separate change. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01R328pa3FUUfga4gYah1iQi
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
Member
Author
|
|
Empty commit. The previous run resolved flowexec/action@v1 to a commit predating the flow-binary input, so the jobs silently fell back to flow-version: main. Re-running now that v1 carries the input, to confirm the built binary is what actually runs. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01R328pa3FUUfga4gYah1iQi
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Important
Depends on flowexec/action#2. Until that lands and
v1moves, theflow-binaryinput is ignored and these jobs behave exactly as they do today (see Merge order below).Summary
Every CI job installed flow via
flowexec/actionwithflow-version: main, which clones flow from GitHub and buildsmain— discarding the branch under review. CI validated each change with a flow that predated it.Each job now builds flow first and passes it through:
Why it matters
For the Go-test jobs the gap is mostly benign — flow is only the task runner, and
go testcompiles the PR's code either way. It stops being benign as soon as a.execstarget depends on a flow capability that has not shipped.That is not hypothetical. #439 adds Python execution, and its
.execstarget failed on every platform:The released flow parsed the
.pyfile as shell. No change to that PR could have made the job pass — the capability has to be onmainbefore CI can use it, which is circular. The job there was reworked to build locally; this PR generalizes that to every job rather than leaving it a one-off.Merge order
flow-version: 'main'is deliberately kept alongsideflow-binary, so this is safe to merge in either order:flow-binarywins → tasks run the PR's build ✅flow-version: main→ today's behavior, CI stays greenWithout that fallback the input would be silently dropped and
flow-versionwould default tolatest, quietly changing which flow runs. Theflow-versionlines can be removed oncev1carries the input.Notable Changes
ci.yaml:lint,unit-tests,e2e-tests,validate-generated,build-matrix,security.windows-ci.yml:unit-tests,e2e-tests,binary-smoke,native-scripts.build-matrixnames the binary per-OS (flow.exeon Windows) rather than relying on whethergo build -oappends the extension. Its bootstrap lives in./bin;build binarystill writes its own to.bin, so they do not collide.Deliberate exclusions
windows-ci'sbuild-binaryjob keepsflow-version: latest— its whole purpose is to exercise the install script.release,container,release-docsare untouched. The same reasoning applies (arguably more so: a tag build should use the tagged code), but they publish artifacts and cannot be verified from a pull request. Worth a follow-up.Testing
Both workflow files parse as valid YAML. The end-to-end proof is this PR's own CI run once flowexec/action#2 is released — the step log should read
Using provided flow binary: ./bin/flowinstead ofBuilding flow from main branch....Note this touches the same jobs as #439, which adds
setup-pythonand apython-scriptsjob. Whichever merges second needs a rebase; the changes are complementary, not conflicting in intent.🤖 Generated with Claude Code
https://claude.ai/code/session_01R328pa3FUUfga4gYah1iQi