Upgrade to Go 1.26.3, update CI, and fix SSH/run bugs#68
Merged
Conversation
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Pin server-9 IPv4 (172.24.2.12) and swap IPv6 to ULA so containers come up cleanly in CI under the /24 subnet - Fix sshd MaxStartups to 100:30:100 (single-integer form left start/rate at default, causing random handshake drops under parallel load) - Drop obsolete compose `version` attribute - core/run: use `&&` instead of `;` between `cd workDir` and the command so a failed `cd` aborts the task - core/run/exec.go: fix PubFile pointer assignment - core/run/unix.go: pass IdentityFile via -i for interactive SSH - Regenerate golden files for IPv6 address change Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- AsExport: split env on first '=' only and single-quote values to prevent value truncation and remote shell injection - unix SSHToServer: pass -p/-o/-i/-J option values as separate argv elements so OpenSSH does not see an embedded leading space - CleanupClients: drop the dead signal-forwarding goroutine whose wg.Wait returned immediately Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
GetTaskServers passed runFlags.Invert to FilterServers for config targets, but that value was always false there since any explicit --invert routes to the runtime-selector branch. As a result a target with invert: true never inverted, and --invert combined with a config target was ignored. Use the target's configured invert (overridable by an explicit --invert), and stop treating --invert as a runtime selector since it is a modifier, not a server selector. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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.
Summary
A maintenance pass that upgrades the toolchain and fixes a batch of run/SSH correctness bugs found along the way.
Three themes:
golangci-lintfindings and addedCLAUDE.md.Toolchain & tooling
go.mod/go.sum).build.yml,release.yml) and bumpedgolangci-lint.sshdMaxStartupsso parallel handshakes don't randomly drop).golangci-lintfindings (errcheck, govet, staticcheck).CLAUDE.mdwith build/test/architecture notes.Bug fixes
core/run/ssh.go—AsExport=, silently truncating values like URLs with query params; values were also interpolated unescaped, so a value such as$(...)could execute on the remote host.=only (SplitN) and single-quote values via a newshellQuotehelper.core/run/unix.go— interactive SSH-i,-p,-o,-Jwere packed into single argv strings (e.g."-i /path"), so OpenSSH saw a leading space and looked for a key named" /path".core/run/exec.go—CleanupClientswg.Wait()returned before anywg.Add), so it never did anything.core/dao/task.go— target filteringinvert: truein YAML was ignored, and combining--invertwith a config target discarded the target's selection entirely.invert, overridable by an explicit--invert; treat--invertas a modifier, not a selector.Also from the integration-test stabilization pass: use
&&(not;) betweencd <workdir>and the command so a failedcdaborts the task, and aPubFilepointer fix inexec.go.Tests
main_test.goto match the IP and behavior changes.