Jakob Borg
b9ab05af02
build: fix hash failure by limiting globbing ( #10505 )
...
The glob in **/go.sum fails in some builds because there are a lot of files in ** due to things like the zig cache directory. We can be more specific. Also, avoid a huge build context sent to Docker for the container builds.
---------
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-12-22 19:28:16 +00:00
Syncthing Release Automation
43d826913f
chore(gui, man, authors): update docs, translations, and contributors
2025-12-22 04:06:33 +00:00
Marcus B Spencer
801ef0e22d
fix(beacon): don't join multicast groups on non-multicast interfaces ( fixes #10497 ) ( #10498 )
...
fix(beacon): don't join multicast groups on non-multicast interfaces
Signed-off-by: Marcus B Spencer <marcus@marcusspencer.us >
2025-12-18 08:58:06 +01:00
Marcus B Spencer
e5dfd2c549
chore(beacon): more verbose debug logging ( #10496 )
...
Signed-off-by: Marcus B Spencer <marcus@marcusspencer.us >
2025-12-17 15:04:47 +00:00
Syncthing Release Automation
5800d1acc3
chore(gui, man, authors): update docs, translations, and contributors
2025-12-15 04:06:28 +00:00
Jakob Borg
fd9dcbb8c2
build: fix docker build by ensuring qemu ( #10492 )
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-12-13 12:28:12 +00:00
Syncthing Release Automation
bc7e56fdcd
chore(gui, man, authors): update docs, translations, and contributors
2025-12-08 04:02:18 +00:00
Jakob Borg
7f7f5d87df
Merge branch 'infrastructure'
...
* infrastructure:
chore(stdiscosrv): use log/slog
chore(stdiscosrv): larger write buffer
2025-12-02 08:43:15 +01:00
Syncthing Release Automation
49f2736adb
chore(gui, man, authors): update docs, translations, and contributors
2025-12-01 04:08:13 +00:00
Jakob Borg
cde867cf74
chore(stdiscosrv): use log/slog
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-11-30 11:17:29 +01:00
Jakob Borg
70292b4902
chore(stdiscosrv): larger write buffer
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-11-30 11:17:29 +01:00
Jakob Borg
553c02f244
chore(model): refactor context handling for folder type ( #10472 )
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-11-27 20:34:35 +00:00
André Colomb
ce884e5d72
chore(cli): clean up generated usage strings for config commands ( fixes #10462 ) ( #10463 )
...
* Show proper subcommand prefix in generated config CLI.
* Remove useless author info and copy command group description.
* Really accept (implicit) -h and --help flags.
These were disabled by HideHelp, leading to an error message in every
usage output. This way, the flags get documented as well.
* Override AppHelpTemplate to better match Kong's style.
* Override (Sub)commandHelpTemplate to better match Kong's style.
* Use <command> and [flags] like Kong.
Signed-off-by: André Colomb <src@andre.colomb.de >
v2.0.12
v2.0.12-rc.1
2025-11-24 16:49:42 +01:00
Syncthing Release Automation
5f702c1406
chore(gui, man, authors): update docs, translations, and contributors
2025-11-24 04:02:55 +00:00
Syncthing Release Automation
a6bcd02739
chore(gui, man, authors): update docs, translations, and contributors
2025-11-17 03:57:56 +00:00
Jakob Borg
488c33aef5
chore: update quic-go, adapt to lack of write tracking ( #10456 )
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-11-16 00:48:28 +01:00
Syncthing Release Automation
9241a475e9
chore(gui, man, authors): update docs, translations, and contributors
2025-11-10 03:59:12 +00:00
Syncthing Release Automation
01eef47bbc
chore(gui, man, authors): update docs, translations, and contributors
2025-11-03 03:59:21 +00:00
Jakob Borg
c518d99c35
build: do not clobber .deb files when publishing
2025-10-31 11:01:09 +01:00
Syncthing Release Automation
81c99e07db
chore(gui, man, authors): update docs, translations, and contributors
v2.0.11
v2.0.11-rc.1
2025-10-27 03:59:48 +00:00
André Colomb
5279330c1d
chore(gui): add Azerbaijani (az) and Kurdish (ckb) l10n templates. ( #10442 )
...
Based on user requests from Weblate:
* `@miryusifrahimov` for Azerbaijani
* `@halbast` für Kurdish (Central)
Both seem to be legit and have previously contributed translations on
Weblate.
Signed-off-by: André Colomb <src@andre.colomb.de >
2025-10-26 17:55:03 +01:00
Jakob Borg
194b59b3ed
chore: job for adding org members
2025-10-24 08:10:30 +02:00
Jakob Borg
8e796ddb94
chore: linter: errorlint
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-10-23 22:48:54 +02:00
Jakob Borg
7c9d06b4d2
chore: linter: embeddedstructfieldcheck
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-10-23 22:48:54 +02:00
Jakob Borg
df8d8c276e
chore: linter: staticcheck
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-10-23 22:48:54 +02:00
Jakob Borg
98cf5872e9
chore: linter: perfsprint
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-10-23 22:48:54 +02:00
Jakob Borg
c883f49a24
chore: linter: usestdlibvars
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-10-23 22:48:54 +02:00
Jakob Borg
d84280107c
chore: linter: canonicalheader
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-10-23 22:48:54 +02:00
Jakob Borg
d97fd638bc
chore: linter: dupword
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-10-23 22:48:54 +02:00
Jakob Borg
a1069a0d70
chore: linter: intrange
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-10-23 22:48:54 +02:00
Jakob Borg
465804161b
chore: linter: staticcheck
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-10-23 22:48:54 +02:00
Jakob Borg
d08f483811
chore: linter: unused
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-10-23 22:48:54 +02:00
Marcus B Spencer
655b4568c1
fix(fs): only apply case option to fakefs in stress test ( #10440 )
...
Fixes a regression introduced in #10439 , mentioned in [a comment](https://github.com/syncthing/syncthing/pull/10439#issuecomment-3436515824 ) made by @imsodin:
> That might not be the greatest way to do this, but nevertheless it afaik means that the benchmarks now do case checking once when it shouldn't happen at all, and twice otherwise.
Benchmarks do approximately as well as before the regression, and I think most of them are random chance:
```
│ ../oldold.txt │ ../new.txt │
│ sec/op │ sec/op vs base │
WalkCaseFakeFS100k/rawfs-8 654.6m ± 1% 652.6m ± 3% ~ (p=0.971 n=10)
WalkCaseFakeFS100k/casefs-8 1.049 ± 2% 1.071 ± 3% ~ (p=0.190 n=10)
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 1.053 ± 3% 1.081 ± 5% ~ (p=0.165 n=10)
geomean 897.7m 910.8m +1.46%
│ ../oldold.txt │ ../new.txt │
│ B/entry │ B/entry vs base │
WalkCaseFakeFS100k/rawfs-8 1.274Ki ± 0% 1.274Ki ± 0% ~ (p=1.000 n=10) ¹
WalkCaseFakeFS100k/casefs-8 1.771Ki ± 0% 1.771Ki ± 0% ~ (p=1.000 n=10) ¹
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 1.772Ki ± 0% 1.772Ki ± 0% ~ (p=1.000 n=10) ¹
geomean 1.587Ki 1.587Ki +0.00%
¹ all samples are equal
│ ../oldold.txt │ ../new.txt │
│ DirNames/entry │ DirNames/entry vs base │
WalkCaseFakeFS100k/rawfs-8 512.5m ± 0% 512.5m ± 0% ~ (p=1.000 n=10) ¹
WalkCaseFakeFS100k/casefs-8 1.025 ± 0% 1.025 ± 0% ~ (p=1.000 n=10) ¹
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 1.025 ± 0% 1.025 ± 0% ~ (p=1.000 n=10) ¹
geomean 813.5m 813.5m +0.00%
¹ all samples are equal
│ ../oldold.txt │ ../new.txt │
│ DirNames/op │ DirNames/op vs base │
WalkCaseFakeFS100k/rawfs-8 51.25k ± 0% 51.25k ± 0% ~ (p=1.000 n=10) ¹
WalkCaseFakeFS100k/casefs-8 102.5k ± 0% 102.5k ± 0% ~ (p=1.000 n=10) ¹
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 102.5k ± 0% 102.5k ± 0% ~ (p=1.000 n=10) ¹
geomean 81.35k 81.35k +0.00%
¹ all samples are equal
│ ../oldold.txt │ ../new.txt │
│ Lstat/entry │ Lstat/entry vs base │
WalkCaseFakeFS100k/rawfs-8 5.535 ± 0% 5.535 ± 0% ~ (p=1.000 n=10) ¹
WalkCaseFakeFS100k/casefs-8 5.535 ± 0% 5.535 ± 0% ~ (p=1.000 n=10) ¹
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 5.540 ± 0% 5.540 ± 0% ~ (p=1.000 n=10) ¹
geomean 5.537 5.537 +0.00%
¹ all samples are equal
│ ../oldold.txt │ ../new.txt │
│ Lstat/op │ Lstat/op vs base │
WalkCaseFakeFS100k/rawfs-8 553.5k ± 0% 553.5k ± 0% ~ (p=1.000 n=10) ¹
WalkCaseFakeFS100k/casefs-8 553.5k ± 0% 553.5k ± 0% ~ (p=1.000 n=10) ¹
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 554.0k ± 0% 554.0k ± 0% ~ (p=1.000 n=10) ¹
geomean 553.7k 553.7k +0.00%
¹ all samples are equal
│ ../oldold.txt │ ../new.txt │
│ allocs/entry │ allocs/entry vs base │
WalkCaseFakeFS100k/rawfs-8 19.00 ± 0% 19.00 ± 0% ~ (p=1.000 n=10) ¹
WalkCaseFakeFS100k/casefs-8 35.35 ± 0% 35.35 ± 0% ~ (p=1.000 n=10) ¹
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 35.38 ± 0% 35.38 ± 0% ~ (p=1.000 n=10) ¹
geomean 28.75 28.75 +0.00%
¹ all samples are equal
│ ../oldold.txt │ ../new.txt │
│ sec/entry │ sec/entry vs base │
WalkCaseFakeFS100k/rawfs-8 4.328µ ± 1% 4.315µ ± 3% ~ (p=0.971 n=10)
WalkCaseFakeFS100k/casefs-8 6.936µ ± 2% 7.082µ ± 3% ~ (p=0.171 n=10)
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 6.965µ ± 3% 7.147µ ± 5% ~ (p=0.165 n=10)
geomean 5.935µ 6.022µ +1.46%
│ ../oldold.txt │ ../new.txt │
│ B/op │ B/op vs base │
WalkCaseFakeFS100k/rawfs-8 188.3Mi ± 0% 188.3Mi ± 0% -0.00% (p=0.006 n=10)
WalkCaseFakeFS100k/casefs-8 261.5Mi ± 0% 261.5Mi ± 0% ~ (p=0.142 n=10)
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 261.7Mi ± 0% 261.7Mi ± 0% ~ (p=0.315 n=10)
geomean 234.4Mi 234.4Mi -0.00%
│ ../oldold.txt │ ../new.txt │
│ allocs/op │ allocs/op vs base │
WalkCaseFakeFS100k/rawfs-8 2.873M ± 0% 2.873M ± 0% -0.00% (p=0.026 n=10)
WalkCaseFakeFS100k/casefs-8 5.346M ± 0% 5.346M ± 0% ~ (p=0.136 n=10)
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 5.351M ± 0% 5.351M ± 0% ~ (p=0.305 n=10)
geomean 4.348M 4.348M -0.00%
```
Signed-off-by: Marcus B Spencer <marcus@marcusspencer.us >
2025-10-23 13:12:03 -05:00
Marcus B Spencer
c6a887865f
fix(fs): apply case option to fakefs in casefs tests ( #10439 )
...
Required for the casefs tests/benchmarks to test the casefs.
Benchmarks do significantly worse (as expected).
```
│ ../old.txt │ ../new.txt │
│ sec/op │ sec/op vs base │
WalkCaseFakeFS100k/rawfs-8 626.5m ± 5% 993.4m ± 1% +58.56% (p=0.002 n=6)
WalkCaseFakeFS100k/casefs-8 1.011 ± 1% 1.425 ± 1% +40.94% (p=0.002 n=6)
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 1.014 ± 2% 1.439 ± 1% +41.97% (p=0.002 n=6)
geomean 862.9m 1.268 +46.94%
│ ../old.txt │ ../new.txt │
│ B/entry │ B/entry vs base │
WalkCaseFakeFS100k/rawfs-8 1.274Ki ± 0% 1.766Ki ± 0% +38.54% (p=0.002 n=6)
WalkCaseFakeFS100k/casefs-8 1.771Ki ± 0% 2.354Ki ± 0% +32.98% (p=0.002 n=6)
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 1.772Ki ± 0% 2.356Ki ± 0% +32.95% (p=0.002 n=6)
geomean 1.587Ki 2.140Ki +34.80%
│ ../old.txt │ ../new.txt │
│ DirNames/entry │ DirNames/entry vs base │
WalkCaseFakeFS100k/rawfs-8 512.5m ± 0% 1025.0m ± 0% +100.00% (p=0.002 n=6)
WalkCaseFakeFS100k/casefs-8 1.025 ± 0% 1.537 ± 0% +49.95% (p=0.002 n=6)
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 1.025 ± 0% 1.537 ± 0% +49.95% (p=0.002 n=6)
geomean 813.5m 1.343 +65.06%
│ ../old.txt │ ../new.txt │
│ DirNames/op │ DirNames/op vs base │
WalkCaseFakeFS100k/rawfs-8 51.25k ± 0% 102.49k ± 0% +100.00% (p=0.002 n=6)
WalkCaseFakeFS100k/casefs-8 102.5k ± 0% 153.7k ± 0% +50.00% (p=0.002 n=6)
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 102.5k ± 0% 153.7k ± 0% +50.00% (p=0.002 n=6)
geomean 81.35k 134.3k +65.10%
│ ../old.txt │ ../new.txt │
│ allocs/entry │ allocs/entry vs base │
WalkCaseFakeFS100k/rawfs-8 19.00 ± 0% 35.35 ± 0% +86.05% (p=0.002 n=6)
WalkCaseFakeFS100k/casefs-8 35.35 ± 0% 54.40 ± 0% +53.89% (p=0.002 n=6)
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 35.38 ± 0% 54.46 ± 0% +53.93% (p=0.002 n=6)
geomean 28.75 47.14 +63.95%
│ ../old.txt │ ../new.txt │
│ sec/entry │ sec/entry vs base │
WalkCaseFakeFS100k/rawfs-8 4.143µ ± 5% 6.568µ ± 1% +58.55% (p=0.002 n=6)
WalkCaseFakeFS100k/casefs-8 6.686µ ± 1% 9.424µ ± 1% +40.95% (p=0.002 n=6)
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 6.703µ ± 2% 9.517µ ± 1% +41.97% (p=0.002 n=6)
geomean 5.705µ 8.383µ +46.94%
│ ../old.txt │ ../new.txt │
│ B/op │ B/op vs base │
WalkCaseFakeFS100k/rawfs-8 188.3Mi ± 0% 260.8Mi ± 0% +38.51% (p=0.002 n=6)
WalkCaseFakeFS100k/casefs-8 261.5Mi ± 0% 347.7Mi ± 0% +32.98% (p=0.002 n=6)
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 261.7Mi ± 0% 348.0Mi ± 0% +32.96% (p=0.002 n=6)
geomean 234.4Mi 316.0Mi +34.79%
│ ../old.txt │ ../new.txt │
│ allocs/op │ allocs/op vs base │
WalkCaseFakeFS100k/rawfs-8 2.873M ± 0% 5.346M ± 0% +86.04% (p=0.002 n=6)
WalkCaseFakeFS100k/casefs-8 5.346M ± 0% 8.228M ± 0% +53.91% (p=0.002 n=6)
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 5.351M ± 0% 8.236M ± 0% +53.92% (p=0.002 n=6)
geomean 4.348M 7.129M +63.96%
```
Signed-off-by: Marcus B Spencer <marcus@marcusspencer.us >
2025-10-23 08:40:42 +00:00
Marcus B Spencer
b4565c87ee
fix(fs): store getExpireAdd mutex in caseCache ( fixes #9836 ) ( #10430 )
...
In #9701 there was a change that put the mutex used for `getExpireAdd` directly in `defaultRealCaser`, which is erroneous because multiple filesystems can share the same `caseCache`.
### Purpose
Fixes #9836 and [Slow sync sending files from Android](https://forum.syncthing.net/t/slow-sync-sending-files-from-android/24208?u=marbens ). There may be other issues caused by `getExpireAdd` conflicting with itself, though.
### Testing
Unit tests pass and the case cache and conflict detection _seem_ to behave correctly.
Signed-off-by: Marcus B Spencer <marcus@marcusspencer.us >
2025-10-18 21:56:03 +02:00
Simon Frei
20d2406a0e
chore(upnp): remove incorrect embedding of nat.Service ( fixes #10426 ) ( #10428 )
2025-10-13 07:11:00 +02:00
Marcus B Spencer
d3d3fc2d0e
fix(policy): only allow approvals by non-author contributors ( #10419 )
...
This replaces `allow_contributor` with `allow_non_author_contributor`,
because the former allows authors to approve their own pull requests.
From https://github.com/syncthing/syncthing/pull/9818#issue-2651431707 :
> This adds `allow_contributor: true` which allows approvals by contributors to the PR (*but still not the author themself*, which is a different thing).
This statement conflicts with [the policybot README](c013552248/README.md ), which says:
> If true, the approvals of someone who has committed to the pull request are
> considered when calculating the status.
> *The pull request author is considered a contributor.*
Signed-off-by: Marcus B Spencer <marcus@marcusspencer.us >
2025-10-06 08:42:58 +02:00
bt90
f8c44923c7
docs(docker): make host network mode the default ( #10416 )
...
Signed-off-by: bt90 <btom1990@googlemail.com >
2025-09-29 15:20:44 -04:00
Jakob Borg
6f0acacbd2
fix(sqlite): actually always insert blocks for local files ( fixes #10388 ) ( #10411 )
...
Due to a thinko, this optimisation was wildly incorrect and would read
to lack of block reuse when syncing files.
(We do not insert a blocklist per device, but only a single one. We
can't use the fact of whether the insert happened as a criteria for
inserting blocks.)
Signed-off-by: Jakob Borg <jakob@kastelo.net >
v2.0.10
v2.0.10-rc.1
2025-09-23 12:46:31 +00:00
Jakob Borg
932b4ce9bd
fix(model): don't announce untrusted devices to other devices ( fixes #10393 ) ( #10408 )
...
fix(model): don't announce untrusted devices to other devices
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-09-23 13:16:58 +02:00
mrclmr
b3e3ca7294
build: update GitHub actions ( #10399 )
2025-09-22 08:50:09 +03:00
Syncthing Release Automation
41b4c5cd5e
chore(gui, man, authors): update docs, translations, and contributors
2025-09-22 03:52:07 +00:00
Tommy van der Vorst
eb4eb7524d
fix(syncthing): only perform CPU benchmark on startup when logging enabled, and on goroutine ( #10398 )
...
Signed-off-by: Tommy van der Vorst <tommy@pixelspark.nl >
Co-authored-by: bt90 <btom1990@googlemail.com >
2025-09-19 07:17:10 +02:00
Tommy van der Vorst
a64c5396e9
fix(db): only perform foreign key checking when a migration was applied ( #10397 )
2025-09-18 12:22:35 +00:00
Jakob Borg
5595113074
fix(gui): don't fetch usage report preview unnecessarily on GUI load ( #10395 )
...
IMHO the logic here was inverted. The only use for the report data is to
show a preview when we ask the user whether they want to participate in
usage reporting. However, the GUI would first load the report data and
then consider whether we wanted to show that dialog or not. Instead,
only load if it we're going to show the dialog.
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-09-16 18:01:17 +02:00
Jakob Borg
ea19ec64bf
fix(ur): properly skip zero/empty fields in report ( #10394 )
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-09-15 20:35:59 +00:00
Syncthing Release Automation
9de6c5ed69
chore(gui, man, authors): update docs, translations, and contributors
2025-09-15 03:52:28 +00:00
Jakob Borg
d037681fd1
fix: improve conflict detection by tracking previous file hash ( fixes #10349 ) ( #10351 )
...
This adds a new field to the file information we keep, the "previous
blocks hash". This is the hash of the file contents as it was in its
previous incarnation. That is, every scan that updates the blocks hash
will move the current hash to the "previous" field.
This enables an addition to the conflict detection algorithm: if the
file to be synced is in conflict with the current file on disk
(version-counter wise), but it indicates that it was based on the
precise contents we have (new.prevBlocksHash == current.blocksHash),
then it's not really a conflict.
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-09-13 16:16:28 +02:00
Jakob Borg
1b0eaa093a
chore(policy): increase power & responsibility for maintainers
...
This adds a rule where a maintainer can merge a PR on their own even in
non-trivial cases, which we (I) already do as-is today, but by breaking
the rules instead of following them. This just codifies that behavior.
If we get to a point where it's no longer necessary, that'd be cool.
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-09-13 15:42:54 +02:00
Jakob Borg
3382ccc3f1
chore(model): slightly deflake TestRecvOnlyRevertOwnID ( #10390 )
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
v2.0.9
2025-09-12 09:41:47 +00:00