Record follow up launcher review findings
This commit is contained in:
@@ -224,3 +224,57 @@ result can appear valid for the wrong candidate.
|
||||
or clear `CDPATH` for those two directory changes. The number of lookups is
|
||||
already fixed; the change corrects which directory is selected. Verify the
|
||||
copyable recipe with a conflicting `CDPATH` entry.
|
||||
|
||||
## Follow-up review after remediation
|
||||
|
||||
Reviewed all six implementation stages at `9797f43`. The focused launcher,
|
||||
delivery, and recovery tests and the public API and dependency checks passed.
|
||||
The host discovery work remains bounded to a fixed number of calls per
|
||||
invocation, and recovery replacement relocation now visits each directive
|
||||
once. No additional scaling issue was identified.
|
||||
|
||||
### Stages 1, 2, and 6: Invoke the exact registered Go tool
|
||||
|
||||
**Evidence:** The [multi-module launcher](../../examples/multi-module/release.sh)
|
||||
and both consumer Woodpecker templates
|
||||
([single-module](../../examples/woodpecker/tag-delivery.yml),
|
||||
[multi-module](../../examples/multi-module/woodpecker.yml)) register the
|
||||
full ReleaseKit package path, but invoke the short name `releasekit`. The
|
||||
[adoption launcher](../consumers/adoption.md#select-the-go-host-target) and
|
||||
[multi-module smoke recipe](../../examples/multi-module/README.md) also use
|
||||
the short name. Go allows two different package paths with the same final
|
||||
component in the tool declarations. With a second local tool ending in
|
||||
`/cmd/releasekit`, the maintained launcher and both extracted CI command
|
||||
blocks prepared the intended module, then exited with an ambiguous-tool
|
||||
error. Changing only the invocation to the full package path ran the
|
||||
intended host-native tool in all three probes. Recovery already invokes
|
||||
the full path and is unaffected.
|
||||
|
||||
**Fix:** Invoke the same full package path used for registration in the
|
||||
maintained launchers, templates, and copyable consumer recipes. Preserve
|
||||
the selected module version, arguments, and exit status. Extend an
|
||||
existing launcher fixture with a second registered tool of the same short
|
||||
name and verify that only the intended tool runs.
|
||||
|
||||
### Stage 3: Build the manual retry tool only from a clean tagged checkout
|
||||
|
||||
**Evidence:** The [manual retry block](../release.md) runs `git fetch` and
|
||||
`git checkout --detach` before the subshell that enables `set -e`. A
|
||||
failed checkout can therefore be followed by dependency preparation, a
|
||||
build, and execution from the wrong source. A successful checkout can
|
||||
also carry local edits forward. Both cases were reproduced with the
|
||||
documented block in disposable Git repositories and a local bare remote:
|
||||
a checkout refused because of conflicting edits still ran a fixture
|
||||
built from the edited source, and checking out the already selected tag
|
||||
succeeded while retaining and executing a local edit. The fixture exited
|
||||
successfully in both cases. ReleaseKit's normal delivery guards check
|
||||
the tagged checkout after the executable has already been built and
|
||||
started; they do not protect this bootstrap.
|
||||
|
||||
**Fix:** Include the fetch and checkout in the fail-fast subshell. Resolve
|
||||
the literal tag to its commit and require a clean checkout before
|
||||
downloading dependencies or building the CLI, as the
|
||||
[source delivery template](../../examples/woodpecker/releasekit-source-delivery.yml)
|
||||
does. Preserve the scoped host target, dependency download before the
|
||||
offline build, and the existing retry arguments. Verify that checkout
|
||||
failure and carried-over edits both stop before the first Go command.
|
||||
|
||||
Reference in New Issue
Block a user