ww: protect public install outputs
This commit is contained in:
@@ -258,11 +258,25 @@ install-only destination validation or output-directory creation.
|
||||
|
||||
The retained executable is byte-identical to the temporary runnable and has
|
||||
executable mode `0777` filtered by the caller's umask, but it is never the path
|
||||
executed by the coordinator. Publication participates in the driver's one
|
||||
request-wide transaction: producer, linker, staging, or installation failure
|
||||
preserves every prior destination and removes stages and newly created output
|
||||
prefixes. A runtime failure occurs after commit and therefore leaves the saved
|
||||
binary. The language runtime owns individual `@test` functions.
|
||||
executed by the coordinator. Compile-only publication participates in the
|
||||
driver's one request-wide transaction: producer, linker, staging, or
|
||||
installation failure preserves every prior destination and removes stages and
|
||||
newly created output prefixes. A running retained request instead withholds
|
||||
the public path from that build transaction. The coordinator runs the private
|
||||
binary, then invokes the selected stage driver's guarded install action only
|
||||
after a successful process result. Failure, signal, timeout, interruption, or
|
||||
child-start failure therefore preserves any prior retained binary and creates
|
||||
no new one. Successful products install independently after their runs. The
|
||||
language runtime owns individual `@test` functions.
|
||||
|
||||
Every build or retained-test public install follows Go 1.26.5's late
|
||||
destination safety rule. After applicable producers (and, for running tests,
|
||||
after the successful run), ordinary `stat` rejects a directory and rejects a
|
||||
nonempty regular non-object file. Empty reservations, recognized prior
|
||||
outputs, and non-directory non-regular paths remain replaceable. Recognition
|
||||
uses Go's archive/ELF/Mach-O/PE/Plan 9/WASM/XCOFF magic plus WW's narrow
|
||||
`//ww:module ` interface prefix. Package/import rejection keeps its earlier
|
||||
diagnostic precedence; exact `/dev/null` and `-S` never enter the guard.
|
||||
|
||||
Every actually executed directory product gives its single generated binary
|
||||
the product's canonical absolute physical source directory as child cwd. A
|
||||
@@ -468,8 +482,9 @@ with one fresh `mkdir` and refuses an existing path; it never clears a
|
||||
collision. A caller keeps only the exact artifacts it observes and removes
|
||||
that exact tree on every later success or failure. Directory-package test
|
||||
plans instead keep their cold semantic-action scratch and runnable binary
|
||||
inside the coordinator's temporary root; only the optional retained executable
|
||||
escapes through the transaction above. `ww run` and no-output single-file
|
||||
inside the coordinator's temporary root; a compile-only retained executable
|
||||
escapes through the build transaction, while a running retained executable
|
||||
uses the post-run install action above. `ww run` and no-output single-file
|
||||
`ww test` use driver-owned scratch instead; both driver stages place that
|
||||
scratch and their temporary executable beneath one freshly acquired directory,
|
||||
remove both after every build result, and make cleanup failure fail the
|
||||
|
||||
Reference in New Issue
Block a user