mirror of
https://git.cloudron.io/cloudron/syncthing-app
synced 2025-09-13 08:19:09 +00:00
Compare commits
98 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
3cd8c5efda | ||
|
aece2cbf7a | ||
|
49b7a045eb | ||
|
2d17cea7ef | ||
|
9c0df554c4 | ||
|
6c1f39247e | ||
|
151eb8e334 | ||
|
699737202d | ||
|
0afa587f81 | ||
|
457996f9cb | ||
|
33406ddc9c | ||
|
4efa85dbcb | ||
|
ab2f8ca6a1 | ||
|
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 | ||
|
3aa7192e5d | ||
|
9c7fb0d580 | ||
|
52bd864c70 | ||
|
3b1e637ab7 | ||
|
8b8597cd7a | ||
|
a701dbbafc | ||
|
9801d5e255 | ||
|
31b7b66a31 | ||
|
dce1a84d59 | ||
|
f57c6fce92 | ||
|
eb13771fd7 | ||
|
81d73ad09e | ||
|
3858cac612 | ||
|
40d2f5626e | ||
|
e73e316292 | ||
|
f651048574 | ||
|
6d6ed058f7 | ||
|
df6b2725ad | ||
|
81277451dc | ||
|
e9a80dddda | ||
|
ba33f68bc8 | ||
|
aa4cdb2de9 | ||
|
302849a50f | ||
|
d8b6645f14 | ||
|
d6ab9d25ba | ||
|
4209af8927 | ||
|
1fabf3766e | ||
|
e276328b3b | ||
|
15c363a5f7 | ||
|
575262b21e | ||
|
76ed36f766 | ||
|
4f5c579e4c | ||
|
687d751dd9 | ||
|
20eefea761 | ||
|
0a81bc61d4 | ||
|
19bdaba65f | ||
|
9805180643 | ||
|
daccdb9237 | ||
|
14fcde4cd4 | ||
|
688e6d53a1 | ||
|
ae4e726aa9 | ||
|
67383ed187 | ||
|
4e734b3323 | ||
|
83578811b0 | ||
|
6da37e33bd |
258
CHANGELOG
258
CHANGELOG
@@ -409,3 +409,261 @@
|
||||
* #141: Use multiple simultaneous TCP connections
|
||||
* #5607: Move footer links to header
|
||||
|
||||
[1.24.0]
|
||||
* Update base image to 4.2.0
|
||||
|
||||
[1.25.0]
|
||||
* Update Syncthing to 1.26.0
|
||||
* [Full changelog](https://github.com/syncthing/syncthing/releases/tag/v1.26.0)
|
||||
* #9106: Posting config with invalid versioner type causes panic
|
||||
* #9120: Deduplicated files on Windows aren't treated as regular files any more (Go 1.21)
|
||||
* #9133: Syncthing Docker container fails to start if underlying filesystem doesn't support chown
|
||||
* #9143: traefik no longer url escape X-Forwarded-Tls-Client-Cert header
|
||||
* #9149: Favicon is stuck in notify state
|
||||
* #4137: Use a real login screen + sessions instead of HTTP basic auth
|
||||
|
||||
[1.25.1]
|
||||
* Update Syncthing to 1.26.1
|
||||
* [Full changelog](https://github.com/syncthing/syncthing/releases/tag/v1.26.1)
|
||||
|
||||
[1.25.2]
|
||||
* Update Syncthing to 1.27.1
|
||||
* [Full changelog](https://github.com/syncthing/syncthing/releases/tag/v1.27.1)
|
||||
* #9253: Permission error on folder causes "connection error" dialog when opening folder editor
|
||||
* #9269: panic: nil pointer dereference in (*indexHandlerRegistry).startLocked
|
||||
* #9274: Missing lock in DeviceStatistics ("fatal error: concurrent map read and map write")
|
||||
|
||||
[1.26.0]
|
||||
* Add LDAP support
|
||||
|
||||
[1.26.1]
|
||||
* Update Syncthing to 1.27.2
|
||||
* [Full changelog](https://github.com/syncthing/syncthing/releases/tag/v1.27.2)
|
||||
* #9041: cli subcommand does not use STHOMEDIR env var
|
||||
* #9183: Filesystem watching (kqueue) is enabled … with a lot of files
|
||||
* #9274: Missing lock in DeviceStatistics ("fatal error: concurrent map read and map write")
|
||||
* #7406: Add UPnP support for IPv6
|
||||
|
||||
[1.26.2]
|
||||
* Update Syncthing to 1.27.3
|
||||
* [Full changelog](https://github.com/syncthing/syncthing/releases/tag/v1.27.3)
|
||||
* #9039: Sync from Linux to Mac with ownership - Local additions after rescan
|
||||
* #9241: Versions path does not honor tilde (~) shortcut
|
||||
* #8616: Add CLI completion
|
||||
* #9151: Add "stay logged in" checkbox to login dialog
|
||||
|
||||
[1.26.3]
|
||||
* Update Syncthing to 1.27.4
|
||||
* [Full changelog](https://github.com/syncthing/syncthing/releases/tag/v1.27.4)
|
||||
* #9369: Panic in ignore matching on invalid UTF-8 from filesystem watcher
|
||||
* #9435: syncthing should be cgroup aware
|
||||
* #9339: File system watcher should skip ignored directories in more cases
|
||||
|
||||
[1.26.4]
|
||||
* Update Syncthing to 1.27.5
|
||||
* [Full changelog](https://github.com/syncthing/syncthing/releases/tag/v1.27.5)
|
||||
* #8972: Open share settings when clicking 'shared with'
|
||||
* #9470: Show encryption status for devices sharing folder
|
||||
|
||||
[1.26.5]
|
||||
* Update Syncthing to 1.27.6
|
||||
* [Full changelog](https://github.com/syncthing/syncthing/releases/tag/v1.27.6)
|
||||
* lib/db: Drop indexes for outgoing data to force refresh (ref #9496) (#9502)
|
||||
|
||||
[1.26.6]
|
||||
* Update Syncthing to 1.27.7
|
||||
* [Full changelog](https://github.com/syncthing/syncthing/releases/tag/v1.27.7)
|
||||
* #9503: lib/nat: panic: runtime error: index out of range
|
||||
|
||||
[1.26.7]
|
||||
* Update Syncthing to 1.27.8
|
||||
* [Full changelog](https://github.com/syncthing/syncthing/releases/tag/v1.27.8)
|
||||
* #9506: gui: Favicon not working in Firefox bookmarks
|
||||
* #9527: Device connection state metric
|
||||
|
||||
[1.26.8]
|
||||
* 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)
|
||||
|
||||
[1.32.2]
|
||||
* Update syncthing to 2.0.2
|
||||
* [Full Changelog](https://github.com/syncthing/syncthing/releases/tag/v2.0.2)
|
||||
* 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 fifteen months. If your use case require deletes to take effect after more than a fifteen 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:
|
||||
* The handling of conflict resolution involving deleted files has changed. A delete can now be the winning outcome of conflict resolution, resulting in the deleted file being moved to a conflict copy.
|
||||
* build: remove netgo and osusergo build tags (fixes [#10251](https://github.com/syncthing/syncthing/issues/10251)) by [@calmh](https://github.com/calmh) in https://github.com/syncthing/syncthing/pull/10256
|
||||
|
||||
[1.33.3]
|
||||
* Fix checklist
|
||||
|
||||
[1.33.4]
|
||||
* Update syncthing to 2.0.3
|
||||
* [Full Changelog](https://github.com/syncthing/syncthing/releases/tag/v2.0.3)
|
||||
* 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 fifteen months. If your use case require deletes to take effect after more than a fifteen 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:
|
||||
* The handling of conflict resolution involving deleted files has changed. A delete can now be the winning outcome of conflict resolution, resulting in the deleted file being moved to a conflict copy.
|
||||
* fix(cmd): restore --version flag for compatibility by [@acolomb](https://github.com/acolomb) in https://github.com/syncthing/syncthing/pull/10269
|
||||
|
||||
[1.33.5]
|
||||
* Update syncthing to 2.0.4
|
||||
* [Full Changelog](https://github.com/syncthing/syncthing/releases/tag/v2.0.4)
|
||||
* fix(cmd): only start temporary API server during migration if it's enabled by [@pixelspark](https://github.com/pixelspark) in https://github.com/syncthing/syncthing/pull/10284
|
||||
* fix(model): consider MaxFolderConcurrency when calculating number of hashers by [@tomasz1986](https://github.com/tomasz1986) in https://github.com/syncthing/syncthing/pull/10285
|
||||
|
||||
[1.33.6]
|
||||
* Update syncthing to 2.0.5
|
||||
* [Full Changelog](https://github.com/syncthing/syncthing/releases/tag/v2.0.5)
|
||||
* 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 fifteen months. If your use case require deletes to take effect after more than a fifteen 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:
|
||||
* The handling of conflict resolution involving deleted files has changed. A delete can now be the winning outcome of conflict resolution, resulting in the deleted file being moved to a conflict copy.
|
||||
* fix(db): only vacuum database on startup when a migration script was actually run by [@pixelspark](https://github.com/pixelspark) in https://github.com/syncthing/syncthing/pull/10339
|
||||
|
||||
[1.33.7]
|
||||
* Update syncthing to 2.0.6
|
||||
* [Full Changelog](https://github.com/syncthing/syncthing/releases/tag/v2.0.6)
|
||||
* 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 fifteen months. If your use case require deletes to take effect after more than a fifteen 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:
|
||||
* The handling of conflict resolution involving deleted files has changed. A delete can now be the winning outcome of conflict resolution, resulting in the deleted file being moved to a conflict copy.
|
||||
* fix(db): remove temp_store = MEMORY pragmas by [@calmh](https://github.com/calmh) in [#10343](https://github.com/syncthing/syncthing/pull/10343)
|
||||
|
||||
|
@@ -5,12 +5,19 @@
|
||||
"description": "file://DESCRIPTION.md",
|
||||
"changelog": "file://CHANGELOG",
|
||||
"tagline": "Decentralized file synchronization",
|
||||
"version": "1.23.0",
|
||||
"upstreamVersion": "1.25.0",
|
||||
"version": "1.33.7",
|
||||
"upstreamVersion": "2.0.6",
|
||||
"healthCheckPath": "/healthcheck",
|
||||
"httpPort": 8000,
|
||||
"addons": {
|
||||
"localstorage": {}
|
||||
"localstorage": {},
|
||||
"ldap": {}
|
||||
},
|
||||
"checklist": {
|
||||
"change-default-password": {
|
||||
"message": "Change the admin password immediately.",
|
||||
"sso": false
|
||||
}
|
||||
},
|
||||
"tcpPorts": {
|
||||
"SYNC_PORT": {
|
||||
@@ -28,13 +35,14 @@
|
||||
"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",
|
||||
"https://screenshots.cloudron.io/net.syncthing.cloudronapp2/3.png"
|
||||
],
|
||||
"optionalSso": true,
|
||||
"postInstallMessage": "file://POSTINSTALL.md"
|
||||
}
|
||||
|
@@ -1,11 +1,12 @@
|
||||
FROM cloudron/base:4.0.0@sha256:31b195ed0662bdb06a6e8a5ddbedb6f191ce92e8bee04c03fb02dd4e9d0286df
|
||||
FROM cloudron/base:5.0.0@sha256:04fd70dbd8ad6149c19de39e35718e024417c3e01dc9c6637eaf4a41ec4e596c
|
||||
|
||||
RUN mkdir -p /app/code
|
||||
WORKDIR /app/code
|
||||
|
||||
ARG VERSION=1.25.0
|
||||
# renovate: datasource=github-releases depName=syncthing/syncthing versioning=semver extractVersion=^v(?<version>.+)$
|
||||
ARG SYNCTHING_VERSION=2.0.6
|
||||
|
||||
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/
|
||||
|
@@ -1,7 +1,12 @@
|
||||
This app is pre-setup with an admin account. The initial credentials are:
|
||||
<nosso>
|
||||
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>
|
||||
Note that all users manage and synchronize the same set of files.
|
||||
</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"]
|
||||
}
|
18
start.sh
18
start.sh
@@ -6,8 +6,8 @@ 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"
|
||||
echo "==> Generating 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
|
||||
@@ -17,6 +17,18 @@ if [[ ! -f /app/data/config/config.xml ]]; then
|
||||
--update "//configuration/options/defaultFolderPath" -v '/app/data/folders' \
|
||||
--update "//configuration/options/urAccepted" -v '-1' \
|
||||
/app/data/config/config.xml
|
||||
|
||||
fi
|
||||
|
||||
if [[ -n ${CLOUDRON_LDAP_HOST:-} ]]; then
|
||||
xmlstarlet ed --inplace \
|
||||
--subnode "//configuration/gui" -t elem -n "authMode" -v "ldap" \
|
||||
--subnode "//configuration/ldap" -t elem -n "address" -v "${CLOUDRON_LDAP_HOST:-}:${CLOUDRON_LDAP_PORT}" \
|
||||
--subnode "//configuration/ldap" -t elem -n "bindDN" -v "${CLOUDRON_LDAP_BIND_DN:-}" \
|
||||
--subnode "//configuration/ldap" -t elem -n "insecureSkipVerify" -v "true" \
|
||||
--subnode "//configuration/ldap" -t elem -n "searchBaseDN" -v "${CLOUDRON_LDAP_USERS_BASE_DN:-}" \
|
||||
--subnode "//configuration/ldap" -t elem -n "searchFilter" -v "(&(objectclass=user)(|(username=%s)(mail=%s)))" \
|
||||
/app/data/config/config.xml
|
||||
fi
|
||||
|
||||
# Set the listenAddress and the gui enabled to make sure user doesnt lock themselves out by accident.
|
||||
@@ -25,5 +37,5 @@ sed -e 's,<gui .*>,<gui enabled="true" tls="false" debugging="false">,' -i /app/
|
||||
|
||||
chown -R cloudron:cloudron /app/data /run/syncthing
|
||||
|
||||
echo "Starting supervisor"
|
||||
echo "==> Starting supervisor"
|
||||
exec /usr/bin/supervisord --configuration /etc/supervisor/supervisord.conf --nodaemon -i syncthing
|
||||
|
@@ -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
|
||||
|
2249
test/package-lock.json
generated
2249
test/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -9,10 +9,9 @@
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"chromedriver": "^117.0.3",
|
||||
"chromedriver": "^140.0.0",
|
||||
"expect.js": "^0.3.1",
|
||||
"mocha": "^10.2.0",
|
||||
"selenium-webdriver": "^4.13.0",
|
||||
"superagent": "^8.1.2"
|
||||
"mocha": "^11.7.2",
|
||||
"selenium-webdriver": "^4.35.0"
|
||||
}
|
||||
}
|
||||
|
220
test/test.js
220
test/test.js
@@ -1,10 +1,7 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/* jshint esversion: 8 */
|
||||
/* global describe */
|
||||
/* global before */
|
||||
/* global after */
|
||||
/* global it */
|
||||
/* global it, xit, describe, before, after, afterEach */
|
||||
|
||||
'use strict';
|
||||
|
||||
@@ -12,165 +9,160 @@ require('chromedriver');
|
||||
|
||||
const execSync = require('child_process').execSync,
|
||||
expect = require('expect.js'),
|
||||
superagent = require('superagent'),
|
||||
fs = require('fs'),
|
||||
path = require('path'),
|
||||
{ Builder, By, Key, until } = require('selenium-webdriver'),
|
||||
timers = require('timers/promises'),
|
||||
{ Builder, By, until } = require('selenium-webdriver'),
|
||||
{ Options } = require('selenium-webdriver/chrome');
|
||||
|
||||
if (!process.env.USERNAME || !process.env.PASSWORD) {
|
||||
console.log('USERNAME and PASSWORD env vars need to be set');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
describe('Application life cycle test', function () {
|
||||
this.timeout(0);
|
||||
|
||||
var LOCATION = 'test';
|
||||
var TEST_TIMEOUT = 30000;
|
||||
var FOLDER = 'xmf'; // keep this small. long folder names fail in automation, not sure why
|
||||
var SYNC_PORT = 22001;
|
||||
var EXEC_ARGS = { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' };
|
||||
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;
|
||||
const EXEC_ARGS = { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' };
|
||||
|
||||
var browser;
|
||||
var app;
|
||||
var username = 'admin', password = 'changeme';
|
||||
let browser, app;
|
||||
const adminUsername = 'admin', adminPassword = 'changeme';
|
||||
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() {
|
||||
var inspect = JSON.parse(execSync('cloudron inspect'));
|
||||
const inspect = JSON.parse(execSync('cloudron inspect'));
|
||||
app = inspect.apps.filter(function (a) { return a.location.indexOf(LOCATION) === 0; })[0];
|
||||
expect(app).to.be.an('object');
|
||||
}
|
||||
|
||||
function waitForElement(elem) {
|
||||
return browser.wait(until.elementLocated(elem), TEST_TIMEOUT).then(function () {
|
||||
return browser.wait(until.elementIsVisible(browser.findElement(elem)), TEST_TIMEOUT);
|
||||
});
|
||||
async function waitForElement(elem) {
|
||||
await browser.wait(until.elementLocated(elem), TEST_TIMEOUT);
|
||||
await browser.wait(until.elementIsVisible(browser.findElement(elem)), TEST_TIMEOUT);
|
||||
}
|
||||
|
||||
function invalidPassword(callback) {
|
||||
superagent.get('https://' + app.fqdn).auth(username, password + 'x').end(function (error, result) {
|
||||
expect(result.status).to.eql(401);
|
||||
|
||||
callback();
|
||||
});
|
||||
async function login(username, password) {
|
||||
await browser.manage().deleteAllCookies();
|
||||
await browser.get('https://' + app.fqdn);
|
||||
await waitForElement(By.id('user'));
|
||||
await browser.findElement(By.id('user')).sendKeys(username);
|
||||
await browser.findElement(By.id('password')).sendKeys(password);
|
||||
await browser.findElement(By.xpath('//button[@type="submit"]')).click();
|
||||
await waitForElement(By.xpath('//span[text()="Actions"]'));
|
||||
}
|
||||
|
||||
function loadPage(callback) {
|
||||
browser.manage().deleteAllCookies().then(function () {
|
||||
return browser.sleep(5000);
|
||||
}).then(function() {
|
||||
return browser.get('https://' + username + ':' + encodeURIComponent(password) + '@' + app.fqdn).then(function () {
|
||||
return browser.get('https://' + app.fqdn);
|
||||
});
|
||||
}).then(function () {
|
||||
return browser.sleep(5000);
|
||||
}).then(function () {
|
||||
return browser.get('https://' + app.fqdn);
|
||||
}).then(function () {
|
||||
return waitForElement(By.xpath('//span[text()="Actions"]'));
|
||||
}).then(function () {
|
||||
callback();
|
||||
});
|
||||
async function logout() {
|
||||
await browser.get('https://' + app.fqdn);
|
||||
await waitForElement(By.xpath('//span[text()="Actions"]'));
|
||||
await browser.findElement(By.xpath('//span[text()="Actions"]')).click();
|
||||
await browser.sleep(4000);
|
||||
await waitForElement(By.xpath('//span[text()="Log Out"]'));
|
||||
await browser.findElement(By.xpath('//span[text()="Log Out"]')).click();
|
||||
await browser.sleep(4000);
|
||||
await waitForElement(By.id('user'));
|
||||
}
|
||||
|
||||
function addFolder(callback) {
|
||||
browser.get('https://' + app.fqdn).then(function () {
|
||||
return browser.findElement(By.css('[ng-click*=addFolder]')).click();
|
||||
}).then(function () {
|
||||
return waitForElement(By.id('folderPath'));
|
||||
}).then(function () {
|
||||
return browser.sleep(4000); // wait more, not sure why this is needed
|
||||
}).then(function() {
|
||||
return browser.findElement(By.id('folderLabel')).sendKeys(FOLDER);
|
||||
}).then(function () {
|
||||
return browser.sleep(4000); // without this sometimes only part of the folder name gets through
|
||||
}).then(function() {
|
||||
return browser.findElement(By.css('[ng-click*=saveFolder]')).click();
|
||||
}).then(function() {
|
||||
return browser.wait(until.elementLocated(By.css('#folders .panel-status span[ng-switch-when=unshared]')), TEST_TIMEOUT);
|
||||
}).then(function () {
|
||||
return browser.sleep(4000);
|
||||
}).then(function() {
|
||||
callback();
|
||||
});
|
||||
async function loadPage() {
|
||||
await browser.get('https://' + app.fqdn);
|
||||
await waitForElement(By.xpath('//span[text()="Actions"]'));
|
||||
}
|
||||
|
||||
function checkFolder(callback) {
|
||||
browser.get('https://' + app.fqdn).then(function () {
|
||||
return browser.sleep(5000);
|
||||
}).then(function () {
|
||||
return browser.get('https://' + app.fqdn);
|
||||
}).then(function () {
|
||||
return browser.wait(until.elementLocated(By.xpath(`//span[text()="${FOLDER}"]`)), TEST_TIMEOUT);
|
||||
}).then(function () {
|
||||
callback();
|
||||
});
|
||||
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"
|
||||
await waitForElement(By.xpath(`//span[contains(text(), '${FOLDER}')]`));
|
||||
await browser.sleep(8000);
|
||||
}
|
||||
|
||||
function removeFolder(callback) {
|
||||
browser.get('https://' + app.fqdn).then(function () {
|
||||
return waitForElement(By.xpath('//span[text()="Actions"]'));
|
||||
}).then(function() {
|
||||
return browser.findElement(By.css('#folders button')).click();
|
||||
}).then(function () {
|
||||
return browser.sleep(3000); //No way to check for visibility of angular-js components
|
||||
}).then(function () {
|
||||
return browser.findElement(By.css('#folder-0 button[ng-click*=editFolder]')).click();
|
||||
}).then(function () {
|
||||
return browser.sleep(3000); //No way to check for visibility of angular-js components
|
||||
}).then(function () {
|
||||
return browser.findElement(By.xpath('//button[@data-target="#remove-folder-confirmation"]')).click();
|
||||
}).then(function () {
|
||||
return browser.sleep(3000); //No way to check for visibility of angular-js components
|
||||
}).then(function () {
|
||||
return browser.findElement(By.css('[ng-click*=deleteFolder]')).click();
|
||||
}).then(function () {
|
||||
return browser.sleep(3000); //This needs to run for some time
|
||||
}).then(function () {
|
||||
callback();
|
||||
});
|
||||
}
|
||||
|
||||
function wait (done) {
|
||||
setTimeout(done, 10000);
|
||||
async function checkFolder() {
|
||||
await browser.get('https://' + app.fqdn);
|
||||
await browser.sleep(5000);
|
||||
await browser.get('https://' + app.fqdn);
|
||||
await browser.wait(until.elementLocated(By.xpath(`//span[text()="${FOLDER}"]`)), TEST_TIMEOUT);
|
||||
}
|
||||
|
||||
xit('build app', function () { execSync('cloudron build', EXEC_ARGS); });
|
||||
|
||||
it('install app', function () { execSync('cloudron install --port-bindings SYNC_PORT=' + SYNC_PORT + ' --location ' + LOCATION, EXEC_ARGS); });
|
||||
// NO SSO
|
||||
it('install app (NO SSO)', function () { execSync('cloudron install --no-sso --port-bindings SYNC_PORT=' + SYNC_PORT + ' --location ' + LOCATION, EXEC_ARGS); });
|
||||
it('can get app information', getAppInfo);
|
||||
|
||||
it('wait', wait);
|
||||
|
||||
it('fails with invalid password', invalidPassword);
|
||||
it('can admin login', login.bind(null, adminUsername, adminPassword));
|
||||
it('can load page', loadPage);
|
||||
it('can add folder', addFolder);
|
||||
it('can check folder', checkFolder);
|
||||
|
||||
it('backup app', function () { execSync('cloudron backup create --app ' + app.id, EXEC_ARGS); });
|
||||
it('uninstall app', async function () {
|
||||
await browser.get('about:blank');
|
||||
execSync('cloudron uninstall --app ' + app.id, EXEC_ARGS);
|
||||
});
|
||||
|
||||
// SSO
|
||||
it('install app (SSO)', function () { execSync('cloudron install --port-bindings SYNC_PORT=' + SYNC_PORT + ' --location ' + LOCATION, EXEC_ARGS); });
|
||||
it('can get app information', getAppInfo);
|
||||
|
||||
it('can login', login.bind(null, username, password));
|
||||
it('can load page', loadPage);
|
||||
it('can add folder', addFolder);
|
||||
it('can logout', logout);
|
||||
|
||||
it('backup app', async function () { execSync('cloudron backup create --app ' + app.id, EXEC_ARGS); });
|
||||
it('restore app', async function () {
|
||||
await browser.get('about:blank');
|
||||
execSync('cloudron restore --app ' + app.id, EXEC_ARGS);
|
||||
await timers.setTimeout(5000);
|
||||
});
|
||||
|
||||
it('wait', wait);
|
||||
|
||||
it('can login', login.bind(null, username, password));
|
||||
it('can load page', loadPage);
|
||||
it('can check folder', checkFolder);
|
||||
it('can logout', logout);
|
||||
|
||||
it('move to different location', async function () {
|
||||
await browser.get('about:blank');
|
||||
execSync(`cloudron configure --location ${LOCATION}2 --app ${app.id}`, EXEC_ARGS);
|
||||
await timers.setTimeout(5000);
|
||||
});
|
||||
it('can get app information', getAppInfo);
|
||||
|
||||
it('wait', wait);
|
||||
|
||||
it('can login', login.bind(null, username, password));
|
||||
it('can load page', loadPage);
|
||||
it('can check folder', checkFolder);
|
||||
it('can remove folder', removeFolder);
|
||||
it('can logout', logout);
|
||||
|
||||
it('uninstall app', async function () {
|
||||
await browser.get('about:blank');
|
||||
@@ -178,16 +170,22 @@ describe('Application life cycle test', function () {
|
||||
});
|
||||
|
||||
// test update
|
||||
it('can install app', function () { execSync('cloudron install --port-bindings SYNC_PORT=' + SYNC_PORT + ' --appstore-id net.syncthing.cloudronapp2 --location ' + LOCATION, EXEC_ARGS); });
|
||||
it('can install app', async function () {
|
||||
execSync('cloudron install --port-bindings SYNC_PORT=' + SYNC_PORT + ' --appstore-id net.syncthing.cloudronapp2 --location ' + LOCATION, EXEC_ARGS);
|
||||
await timers.setTimeout(30000);
|
||||
});
|
||||
it('can get app information', getAppInfo);
|
||||
it('wait', wait);
|
||||
it('can login', login.bind(null, username, password));
|
||||
it('can load page', loadPage);
|
||||
it('can add folder', addFolder);
|
||||
it('can logout', logout);
|
||||
|
||||
it('can update', async function () {
|
||||
await browser.get('about:blank');
|
||||
execSync('cloudron update --app ' + LOCATION, EXEC_ARGS);
|
||||
await timers.setTimeout(30000);
|
||||
});
|
||||
it('wait', wait);
|
||||
it('can login', login.bind(null, username, password));
|
||||
it('can check folder', checkFolder);
|
||||
|
||||
it('uninstall app', async function () {
|
||||
|
Reference in New Issue
Block a user