You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
chore: close the known risks left open after the review (#49)
* chore(ci): update every remaining action to its current major
The release, helm publish, scheduled sync, and Azure DevOps extension
workflows were still on actions targeting Node 20, which GitHub force
migrates to Node 24 today and will stop supporting. They were left behind
earlier because no pull request exercises them; that reasoning holds for
proving them, not for leaving them broken, so they are updated now and the
next tag exercises the release and helm paths for real.
goreleaser is pinned to its v2 major rather than latest. The action warned
that latest is ambiguous and locks to ~> v2 regardless, and a release is
not where a new major should first run.
* chore(deps): clear the two remaining advisories
golang.org/x/text carried an infinite loop on invalid input (GO-2026-5970)
and klauspost/compress an out of bounds read in s2 (GO-2026-5841). Neither
was reachable from SyncerD's own code, which is why they were tolerated,
but both are transitive dependencies that a later change could easily start
calling, and both had a published fix. govulncheck now reports nothing at
all rather than nothing reachable.
* test: prove SyncerD against a real provider
Everything in this repository was checked against fakes written by the same
hand as the code, and three defects that made pull request mirroring
inoperable survived a green suite, a passing verification gate, and a
review of their own change, because every fake agreed with the mistake.
Adds a live suite behind the "live" build tag: it creates two throwaway
private repositories, seeds one, opens a pull request, mirrors branches and
then objects, and asserts what actually landed. It covers exactly the
ground the fakes could not: that the destination repository path is the one
the API accepts, that a pull request is findable by its head branch after
state is lost, that a mirrored comment appears once rather than on every
run, that mentions do not survive into the destination, and that closing
the source closes the mirror. Then it deletes both repositories.
It is inert without credentials and excluded from an ordinary go test, so
CI is unchanged. make test-live runs it, and the runbook says when to.
* docs: record the risk work in the changelog
* fix(github): send an empty label array rather than null
Once the mirror owns labels, a source pull request with none produced a nil
slice, which marshals to null, and GitHub answers 422: the field has to be
an array. Clearing labels is a legitimate and common request, so this broke
the update of nearly every mirrored pull request, and the label failure was
wrapped in a way that failed the whole pull request rather than just its
labels.
Found by the live suite on its first real run against GitHub, in the first
minute it existed. No fake had an opinion about null.
---------
Co-authored-by: Anmol Nagpal <ianmolnagpal@gmail.com>
Copy file name to clipboardExpand all lines: CHANGELOG.md
+7Lines changed: 7 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -21,7 +21,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
21
21
- A failed state save on the fail-fast path was silent, so everything copied before the abort was copied again on the next run with no explanation
22
22
-`git-sync` could not authenticate to Azure DevOps over git in `pat` mode, fixed in v0.2.1 and described there
23
23
24
+
### Fixed
25
+
- A mirrored pull request with no labels failed to update, taking the whole pull request with it. Once the mirror owned labels, an empty set was sent as null rather than as an empty array, and GitHub rejects that with 422. Most pull requests carry no labels, so this affected most of them. Found by the live suite on its first real run
26
+
27
+
### Added
28
+
- A live provider test suite behind the `live` build tag, run with `make test-live`. It creates two throwaway repositories against a real GitHub account, mirrors a pull request between them, and checks what actually landed, then deletes them. Every other test in the repository checks SyncerD against fakes written alongside the code, which is how three defects that made pull request mirroring inoperable passed a green suite and a review
29
+
24
30
### Security
31
+
- Cleared two advisories in transitive Go modules, an infinite loop in `golang.org/x/text` and an out of bounds read in `klauspost/compress`. Neither was reachable from SyncerD's own code, but both had fixes and a later change could have started calling them
25
32
- Patched a high severity advisory in `brace-expansion`, which the Azure DevOps extension pinned to exactly the affected version through an `overrides` entry
0 commit comments