mirror of
https://git.cloudron.io/cloudron/syncthing-app
synced 2025-09-10 09:15:18 +00:00
Compare commits
40 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
b39ec6f1b4 | ||
|
2cd3a211e2 | ||
|
21c5087aa0 | ||
|
19b12a149d | ||
|
bddaade12e | ||
|
3ac068cf00 | ||
|
c66477e850 | ||
|
e7c0aad591 | ||
|
ffdbc43b29 | ||
|
058563e1dd | ||
|
566c9f2e61 | ||
|
2660199afc | ||
|
8476c07695 | ||
|
e2ea35f9b7 | ||
|
fa0677c155 | ||
|
e2cda9ad73 | ||
|
c91e8fb282 | ||
|
e2987f2687 | ||
|
a490ebb322 | ||
|
b117872f57 | ||
|
51d148e163 | ||
|
62ae532c40 | ||
|
e8c0199923 | ||
|
727abf1974 | ||
|
4e9f359eb3 | ||
|
cc32ef813d | ||
|
7f838181bc | ||
|
8878f63f8a | ||
|
dbd712704d | ||
|
9f5c82864e | ||
|
777990ba85 | ||
|
64fd0bb9a7 | ||
|
f3abbdd291 | ||
|
7bab576c1b | ||
|
79404da144 | ||
|
49ce3bc7db | ||
|
4691f193fa | ||
|
0f9be01fea | ||
|
66abb7718b | ||
|
d7b0862f12 |
117
CHANGELOG
117
CHANGELOG
@@ -485,3 +485,120 @@
|
||||
* Update Syncthing to 1.27.9
|
||||
* [Full changelog](https://github.com/syncthing/syncthing/releases/tag/v1.27.9)
|
||||
|
||||
[1.26.9]
|
||||
* Update Syncthing to 1.27.11
|
||||
* [Full changelog](https://github.com/syncthing/syncthing/releases/tag/v1.27.11)
|
||||
|
||||
[1.26.10]
|
||||
* Update Syncthing to 1.27.12
|
||||
* [Full changelog](https://github.com/syncthing/syncthing/releases/tag/v1.27.12)
|
||||
|
||||
[1.27.0]
|
||||
* Update syncthing to 1.28.0
|
||||
* [Full Changelog](https://github.com/syncthing/syncthing/releases/tag/v1.28.0)
|
||||
* [#​9597](https://github.com/syncthing/syncthing/issues/9597): Filenames with extended characters not ignored correctly on macOS
|
||||
* [#​9668](https://github.com/syncthing/syncthing/issues/9668): The Web UI defaults to Filipino on Finnish browsers.
|
||||
* [#​9670](https://github.com/syncthing/syncthing/issues/9670): lib/api: /svc/lang disregards the passed quality values
|
||||
* [#​9719](https://github.com/syncthing/syncthing/issues/9719): Unable to establish/maintain multiple connections due to connection priority error
|
||||
* [#​9715](https://github.com/syncthing/syncthing/issues/9715): Lower the log level of "already connected to this device" to DEBUG (is: INFO)
|
||||
|
||||
[1.27.1]
|
||||
* Update syncthing to 1.28.1
|
||||
* [Full Changelog](https://github.com/syncthing/syncthing/releases/tag/v1.28.1)
|
||||
* [#​9400](https://github.com/syncthing/syncthing/issues/9400): Folder overlap not detected when using tilde
|
||||
* [#​9590](https://github.com/syncthing/syncthing/issues/9590): WebUI table column widths broken on iPhone 12 Pro Max and wider
|
||||
* [#​9686](https://github.com/syncthing/syncthing/issues/9686): Sync status stays at 'Syncing xx%" when remote device pauses the folder.
|
||||
* [#​9757](https://github.com/syncthing/syncthing/issues/9757): Firefox, dark theme: device ID is hard to read
|
||||
* [#​9775](https://github.com/syncthing/syncthing/issues/9775): Junctions as dirs doesn't work anymore
|
||||
* [#​9776](https://github.com/syncthing/syncthing/issues/9776): Disabled checkbox panels don't respect dark theme
|
||||
* [#​9783](https://github.com/syncthing/syncthing/issues/9783): gui: Address override not respected in fresh default config
|
||||
* [#​9821](https://github.com/syncthing/syncthing/issues/9821): panic: runtime error: index out of range \[-1]
|
||||
* [#​9725](https://github.com/syncthing/syncthing/issues/9725): Ignoring symbolic links when syncing on android as well
|
||||
|
||||
[1.28.0]
|
||||
* Update syncthing to 1.29.1
|
||||
* [Full Changelog](https://github.com/syncthing/syncthing/releases/tag/v1.29.1)
|
||||
* [#​9904](https://github.com/syncthing/syncthing/issues/9904): The browse API response has changed as of Syncthing v1.29.0
|
||||
* [#​9906](https://github.com/syncthing/syncthing/issues/9906): Deadlocks randomly, occasionally
|
||||
* [#​9907](https://github.com/syncthing/syncthing/issues/9907): The response of "pending" APIs has changed as of Syncthing v1.29.0
|
||||
* [#​9909](https://github.com/syncthing/syncthing/issues/9909): Login into UI (Browser) not working anymore
|
||||
* [#​9855](https://github.com/syncthing/syncthing/issues/9855): GUI address unix socket broken
|
||||
* [#​9872](https://github.com/syncthing/syncthing/issues/9872): When socket files are in a folder that needs to be synced on linux, some files were not synced until the socket files were removed
|
||||
* [#​9875](https://github.com/syncthing/syncthing/issues/9875): Clarify log message for ignored folders
|
||||
* [#​9870](https://github.com/syncthing/syncthing/issues/9870): Fails with Go 1.24: runtime go1.24rc1 not found in compat.yaml
|
||||
|
||||
[1.28.1]
|
||||
* Update syncthing to 1.29.2
|
||||
* [Full Changelog](https://github.com/syncthing/syncthing/releases/tag/v1.29.2)
|
||||
* [#​9913](https://github.com/syncthing/syncthing/issues/9913): panic: string field contains invalid UTF-8 \[recovered]
|
||||
|
||||
[1.28.2]
|
||||
* Update syncthing to 1.29.3
|
||||
* [Full Changelog](https://github.com/syncthing/syncthing/releases/tag/v1.29.3)
|
||||
* [#​9929](https://github.com/syncthing/syncthing/issues/9929): Unintelligible error message "setting metadata: lookup failed"
|
||||
|
||||
[1.29.0]
|
||||
* Update base image to 5.0.0
|
||||
|
||||
[1.29.1]
|
||||
* Update syncthing to 1.29.4
|
||||
* [Full Changelog](https://github.com/syncthing/syncthing/releases/tag/v1.29.4)
|
||||
* [#​9990](https://github.com/syncthing/syncthing/issues/9990): Tildes break directory autocomplete
|
||||
|
||||
[1.29.2]
|
||||
* Update syncthing to 1.29.5
|
||||
* [Full Changelog](https://github.com/syncthing/syncthing/releases/tag/v1.29.5)
|
||||
|
||||
[1.29.3]
|
||||
* Update syncthing to 1.29.6
|
||||
* [Full Changelog](https://github.com/syncthing/syncthing/releases/tag/v1.29.6)
|
||||
* feat(gui): explanation to options enabled or disabled per folder type by [@tomasz1986](https://github.com/tomasz1986) in https://github.com/syncthing/syncthing/pull/9367
|
||||
* fix(gui): validate device ID in canonical form (fixes [#7291](https://github.com/syncthing/syncthing/issues/7291)) by [@mathias4833](https://github.com/mathias4833) in https://github.com/syncthing/syncthing/pull/10006
|
||||
* fix(config): remove discontinued primary STUN server (fixes [#10008](https://github.com/syncthing/syncthing/issues/10008)) by [@marbens-arch](https://github.com/marbens-arch) in https://github.com/syncthing/syncthing/pull/10009
|
||||
* fix(stun): better error handling (ref [#10008](https://github.com/syncthing/syncthing/issues/10008)) by [@calmh](https://github.com/calmh) in https://github.com/syncthing/syncthing/pull/10010
|
||||
* feat(fs, config): add support for custom filesystem type construction by [@pixelspark](https://github.com/pixelspark) in https://github.com/syncthing/syncthing/pull/9887
|
||||
* fix(config): properly apply defaults when reading folder configuration by [@pixelspark](https://github.com/pixelspark) in https://github.com/syncthing/syncthing/pull/10034
|
||||
* fix(config): zero filesystemtype is "basic" by [@calmh](https://github.com/calmh) in https://github.com/syncthing/syncthing/pull/10038
|
||||
* fix(strings): differentiate setup(n) and set(v) up by [@systemcrash](https://github.com/systemcrash) in https://github.com/syncthing/syncthing/pull/10024
|
||||
* fix(gui): mark unseen disconnected devices as inactive by [@tomasz1986](https://github.com/tomasz1986) in https://github.com/syncthing/syncthing/pull/10048
|
||||
* fix(syncthing): use separate lock file instead of locking the certificate (fixes [#10053](https://github.com/syncthing/syncthing/issues/10053)) by [@calmh](https://github.com/calmh) in https://github.com/syncthing/syncthing/pull/10054
|
||||
|
||||
[1.29.4]
|
||||
* Update syncthing to 1.29.7
|
||||
* [Full Changelog](https://github.com/syncthing/syncthing/releases/tag/v1.29.7)
|
||||
* fix(config): deep copy configuration defaults (fixes [#9916](https://github.com/syncthing/syncthing/issues/9916)) by [@hazemKrimi](https://github.com/hazemKrimi) in https://github.com/syncthing/syncthing/pull/10101
|
||||
* fix(config): mark audit log options as needing restart (fixes [#10099](https://github.com/syncthing/syncthing/issues/10099)) by [@marbens-arch](https://github.com/marbens-arch) in https://github.com/syncthing/syncthing/pull/10100
|
||||
* fix(versioner): fix perms of created folders (fixes [#9626](https://github.com/syncthing/syncthing/issues/9626)) by [@ashishbhate](https://github.com/ashishbhate) in https://github.com/syncthing/syncthing/pull/10105
|
||||
* fix(syncthing): ensure both config and data dirs exist at startup (fixes [#10126](https://github.com/syncthing/syncthing/issues/10126)) by [@calmh](https://github.com/calmh) in https://github.com/syncthing/syncthing/pull/10127
|
||||
* fix(gui): update `uncamel()` to handle strings like 'IDs' (fixes [#10128](https://github.com/syncthing/syncthing/issues/10128)) by [@luckman212](https://github.com/luckman212) in https://github.com/syncthing/syncthing/pull/10131
|
||||
* feat(gui): close a modal when pressing ESC after switching modal tabs (fixes [#9489](https://github.com/syncthing/syncthing/issues/9489)) by [@hazemKrimi](https://github.com/hazemKrimi) in https://github.com/syncthing/syncthing/pull/10092
|
||||
|
||||
[1.30.0]
|
||||
* Update syncthing to 1.30.0
|
||||
* [Full Changelog](https://github.com/syncthing/syncthing/releases/tag/v1.30.0)
|
||||
* Syncthing version 1.x will soon be replaced by Syncthing version 2.x.
|
||||
* fix(protocol): avoid deadlock with concurrent connection start and close by [@​calmh](https://github.com/calmh) in https://github.com/syncthing/syncthing/pull/10140
|
||||
* fix(syncthing): avoid writing panic log to nil fd by [@​ardevd](https://github.com/ardevd) in https://github.com/syncthing/syncthing/pull/10154
|
||||
* feat(config): expose folder and device info as metrics (fixes [#​9519](https://github.com/syncthing/syncthing/issues/9519)) by [@​calmh](https://github.com/calmh) in https://github.com/syncthing/syncthing/pull/10148
|
||||
|
||||
[1.31.0]
|
||||
* checklist added to manifest
|
||||
|
||||
[1.32.0]
|
||||
* Update syncthing to 2.0.0
|
||||
* [Full Changelog](https://github.com/syncthing/syncthing/releases/tag/v2.0.0)
|
||||
* Database backend switched from LevelDB to SQLite. There is a migration on first launch which can be lengthy for larger setups. The new database is easier to understand and maintain and, hopefully, less buggy.
|
||||
* The logging format has changed to use structured log entries (a message plus several key-value pairs). Additionally, we can now control the log level per package, and a new log level WARNING has been inserted between INFO and ERROR (which was previously known as WARNING...). The INFO level has become more verbose, indicating the sync actions taken by Syncthing. A new command line flag `--log-level` sets the default log level for all packages, and the `STTRACE` environment variable and GUI has been updated to set log levels per package. The `--verbose` and `--logflags` command line options have been removed and will be ignored if given.
|
||||
* Deleted items are no longer kept forever in the database, instead they are forgotten after six months. If your use case require deletes to take effect after more than a six month delay, set the `--db-delete-retention-interval` command line option or corresponding environment variable to zero, or a longer time interval of your choosing.
|
||||
* Modernised command line options parsing. Old single-dash long options are no longer supported, e.g. `-home` must be given as `--home`. Some options have been renamed, others have become subcommands. All serve options are now also accepted as environment variables. See `syncthing --help` and `syncthing serve --help` for details.
|
||||
* Rolling hash detection of shifted data is no longer supported as this effectively never helped. Instead, scanning and syncing is faster and more efficient without it.
|
||||
* A "default folder" is no longer created on first startup.
|
||||
* Multiple connections are now used by default between v2 devices. The new default value is to use three connections: one for index metadata and two for data exchange.
|
||||
* The following platforms unfortunately no longer get prebuilt binaries for download at syncthing.net and on GitHub, due to complexities related to cross compilation with SQLite:
|
||||
* fix(db): handle large numbers of blocks in update by [@calmh](https://github.com/calmh) in https://github.com/syncthing/syncthing/pull/10025
|
||||
* fix(syncthing): make directory flags global for all commands by [@calmh](https://github.com/calmh) in https://github.com/syncthing/syncthing/pull/10028
|
||||
|
||||
[1.32.1]
|
||||
* Update syncthing to 2.0.1
|
||||
* [Full Changelog](https://github.com/syncthing/syncthing/releases/tag/v2.0.1)
|
||||
|
||||
|
@@ -5,14 +5,19 @@
|
||||
"description": "file://DESCRIPTION.md",
|
||||
"changelog": "file://CHANGELOG",
|
||||
"tagline": "Decentralized file synchronization",
|
||||
"version": "1.26.8",
|
||||
"upstreamVersion": "1.27.9",
|
||||
"version": "1.32.1",
|
||||
"upstreamVersion": "2.0.1",
|
||||
"healthCheckPath": "/healthcheck",
|
||||
"httpPort": 8000,
|
||||
"addons": {
|
||||
"localstorage": {},
|
||||
"ldap": {}
|
||||
},
|
||||
"checklist": {
|
||||
"change-default-password": {
|
||||
"message": "Change the admin password immediately."
|
||||
}
|
||||
},
|
||||
"tcpPorts": {
|
||||
"SYNC_PORT": {
|
||||
"title": "Sync Port",
|
||||
@@ -29,9 +34,9 @@
|
||||
"storage",
|
||||
"sync"
|
||||
],
|
||||
"minBoxVersion": "7.1.2",
|
||||
"minBoxVersion": "8.1.0",
|
||||
"forumUrl": "https://forum.cloudron.io/category/56/syncthing",
|
||||
"documentationUrl": "https://docs.cloudron.io/apps/syncthing/",
|
||||
"documentationUrl": "https://docs.cloudron.io/packages/syncthing/",
|
||||
"mediaLinks": [
|
||||
"https://screenshots.cloudron.io/net.syncthing.cloudronapp2/1.png",
|
||||
"https://screenshots.cloudron.io/net.syncthing.cloudronapp2/2.png",
|
||||
|
@@ -1,11 +1,12 @@
|
||||
FROM cloudron/base:4.2.0@sha256:46da2fffb36353ef714f97ae8e962bd2c212ca091108d768ba473078319a47f4
|
||||
FROM cloudron/base:5.0.0@sha256:04fd70dbd8ad6149c19de39e35718e024417c3e01dc9c6637eaf4a41ec4e596c
|
||||
|
||||
RUN mkdir -p /app/code
|
||||
WORKDIR /app/code
|
||||
|
||||
ARG VERSION=1.27.9
|
||||
# renovate: datasource=github-releases depName=syncthing/syncthing versioning=semver extractVersion=^v(?<version>.+)$
|
||||
ARG SYNCTHING_VERSION=2.0.1
|
||||
|
||||
RUN wget https://github.com/syncthing/syncthing/releases/download/v${VERSION}/syncthing-linux-amd64-v${VERSION}.tar.gz -O - | tar -xz -C /app/code --strip-components=1
|
||||
RUN wget https://github.com/syncthing/syncthing/releases/download/v${SYNCTHING_VERSION}/syncthing-linux-amd64-v${SYNCTHING_VERSION}.tar.gz -O - | tar -xz -C /app/code --strip-components=1
|
||||
|
||||
# add supervisor configs
|
||||
ADD supervisor/* /etc/supervisor/conf.d/
|
||||
|
@@ -4,7 +4,6 @@ This app is pre-setup with an account. The initial credentials are:
|
||||
**Username**: admin<br/>
|
||||
**Password**: changeme<br/>
|
||||
|
||||
Please change the admin password immediately.
|
||||
</nosso>
|
||||
|
||||
<sso>
|
||||
|
4
renovate.json5
Normal file
4
renovate.json5
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||
"extends": ["local>devops/renovator//default.renovate.json5"]
|
||||
}
|
2
start.sh
2
start.sh
@@ -7,7 +7,7 @@ mkdir -p /app/data/config /app/data/folders /run/syncthing
|
||||
# if this if the first run, generate a useful config
|
||||
if [[ ! -f /app/data/config/config.xml ]]; then
|
||||
echo "=> Generating config"
|
||||
STNODEFAULTFOLDER=1 /app/code/syncthing --generate="/app/data/config"
|
||||
STNODEFAULTFOLDER=1 /app/code/syncthing generate --home="/app/data/config"
|
||||
|
||||
# The password value (changeme) was determined by reading config.xml and setting value in the GUI
|
||||
# urAccepted is 0 for not decided, -1 for no reporting
|
||||
|
@@ -3,7 +3,7 @@ priority=20
|
||||
environment=HOME=/app/data/folders,STNOUPGRADE=1
|
||||
; -no-browser opens up the browser (for desktop app preumably)
|
||||
; auditfile "-" means log to stdout
|
||||
command=/app/code/syncthing -gui-address=127.0.0.1:3000 -home=/app/data/config -no-browser -auditfile=-
|
||||
command=/app/code/syncthing serve --gui-address=127.0.0.1:3000 --home=/app/data/config --no-browser --auditfile=-
|
||||
user=cloudron
|
||||
autostart=true
|
||||
autorestart=true
|
||||
|
1316
test/package-lock.json
generated
1316
test/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -9,9 +9,9 @@
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"chromedriver": "^126.0.4",
|
||||
"chromedriver": "^139.0.1",
|
||||
"expect.js": "^0.3.1",
|
||||
"mocha": "^10.5.2",
|
||||
"selenium-webdriver": "^4.22.0"
|
||||
"mocha": "^11.7.1",
|
||||
"selenium-webdriver": "^4.35.0"
|
||||
}
|
||||
}
|
||||
|
31
test/test.js
31
test/test.js
@@ -1,11 +1,7 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/* jshint esversion: 8 */
|
||||
/* global describe */
|
||||
/* global before */
|
||||
/* global after */
|
||||
/* global it */
|
||||
/* global xit */
|
||||
/* global it, xit, describe, before, after, afterEach */
|
||||
|
||||
'use strict';
|
||||
|
||||
@@ -13,6 +9,7 @@ require('chromedriver');
|
||||
|
||||
const execSync = require('child_process').execSync,
|
||||
expect = require('expect.js'),
|
||||
fs = require('fs'),
|
||||
path = require('path'),
|
||||
timers = require('timers/promises'),
|
||||
{ Builder, By, until } = require('selenium-webdriver'),
|
||||
@@ -26,7 +23,7 @@ if (!process.env.USERNAME || !process.env.PASSWORD) {
|
||||
describe('Application life cycle test', function () {
|
||||
this.timeout(0);
|
||||
|
||||
const LOCATION = 'test';
|
||||
const LOCATION = process.env.LOCATION || 'test';
|
||||
const TEST_TIMEOUT = 30000;
|
||||
const FOLDER = 'xmf'; // keep this small. long folder names fail in automation, not sure why
|
||||
const SYNC_PORT = 22001;
|
||||
@@ -34,17 +31,31 @@ describe('Application life cycle test', function () {
|
||||
|
||||
let browser, app;
|
||||
const adminUsername = 'admin', adminPassword = 'changeme';
|
||||
let username = process.env.USERNAME;
|
||||
let password = process.env.PASSWORD;
|
||||
const username = process.env.USERNAME;
|
||||
const password = process.env.PASSWORD;
|
||||
|
||||
before(function () {
|
||||
browser = new Builder().forBrowser('chrome').setChromeOptions(new Options().windowSize({ width: 1280, height: 1024 })).build();
|
||||
const chromeOptions = new Options().windowSize({ width: 1280, height: 1024 });
|
||||
if (process.env.CI) chromeOptions.addArguments('no-sandbox', 'disable-dev-shm-usage', 'headless');
|
||||
browser = new Builder().forBrowser('chrome').setChromeOptions(chromeOptions).build();
|
||||
if (!fs.existsSync('./screenshots')) fs.mkdirSync('./screenshots');
|
||||
});
|
||||
|
||||
after(function () {
|
||||
browser.quit();
|
||||
});
|
||||
|
||||
afterEach(async function () {
|
||||
if (!process.env.CI || !app) return;
|
||||
|
||||
const currentUrl = await browser.getCurrentUrl();
|
||||
if (!currentUrl.includes(app.domain)) return;
|
||||
expect(this.currentTest.title).to.be.a('string');
|
||||
|
||||
const screenshotData = await browser.takeScreenshot();
|
||||
fs.writeFileSync(`./screenshots/${new Date().getTime()}-${this.currentTest.title.replaceAll(' ', '_')}.png`, screenshotData, 'base64');
|
||||
});
|
||||
|
||||
function getAppInfo() {
|
||||
const inspect = JSON.parse(execSync('cloudron inspect'));
|
||||
app = inspect.apps.filter(function (a) { return a.location.indexOf(LOCATION) === 0; })[0];
|
||||
@@ -85,9 +96,11 @@ describe('Application life cycle test', function () {
|
||||
async function addFolder() {
|
||||
await browser.get('https://' + app.fqdn);
|
||||
await browser.findElement(By.css('[ng-click*=addFolder]')).click();
|
||||
await browser.sleep(8000);
|
||||
await waitForElement(By.id('folderPath'));
|
||||
await browser.sleep(8000); // wait more, not sure why this is needed
|
||||
await browser.findElement(By.id('folderLabel')).sendKeys(FOLDER);
|
||||
await browser.findElement(By.id('folderPath')).sendKeys(`/app/data/${FOLDER}`);
|
||||
await browser.sleep(8000); // without this sometimes only part of the folder name gets through
|
||||
await browser.findElement(By.css('[ng-click*=saveFolder]')).click();
|
||||
await browser.sleep(8000); // without this "stale element"
|
||||
|
Reference in New Issue
Block a user