mirror of
https://git.cloudron.io/cloudron/syncthing-app
synced 2025-09-13 08:19:09 +00:00
Compare commits
35 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
eeabcd9b30 | ||
|
f56054506e | ||
|
de4b8ff977 | ||
|
8c74b83013 | ||
|
1f2ad16358 | ||
|
62b4fe40c1 | ||
|
c3533569c1 | ||
|
06a75583e8 | ||
|
b413b5d43a | ||
|
5377c0180c | ||
|
f3a6e7b69e | ||
|
7620eec7b6 | ||
|
2d4e328955 | ||
|
ef3a205467 | ||
|
9400c1a99f | ||
|
ff751142d4 | ||
|
2032c881a5 | ||
|
692c124a61 | ||
|
70c159edbc | ||
|
d7a7febb91 | ||
|
9fff5574cb | ||
|
cfc7133606 | ||
|
ef92705074 | ||
|
baf46b3f52 | ||
|
3d8ea24781 | ||
|
e628a70b60 | ||
|
02e9dbdedc | ||
|
3e83a29587 | ||
|
bbe4721c76 | ||
|
92ae28d0da | ||
|
5e085fc42a | ||
|
d1c449aef8 | ||
|
831efb6f8c | ||
|
012db8bad1 | ||
|
4e805ba62f |
31
CHANGELOG
31
CHANGELOG
@@ -9,3 +9,34 @@
|
||||
|
||||
[0.1.3]
|
||||
* Updated postinstall message
|
||||
|
||||
[0.2.0]
|
||||
* Upstream version 0.14.29
|
||||
* Uses syncthing generated config (thanks to @rymnel)
|
||||
* Fixed typo in manifest (thanks to @rymnel)
|
||||
* Running under user cloudron
|
||||
|
||||
[0.2.1]
|
||||
* Fixed description
|
||||
|
||||
[0.2.2]
|
||||
* Add to sync category in app store
|
||||
|
||||
[0.2.3]
|
||||
* Updated to version 0.14.30
|
||||
|
||||
[0.2.4]
|
||||
* Updated to version 0.14.31
|
||||
|
||||
[0.2.5]
|
||||
* Updated to version 0.14.32
|
||||
|
||||
[0.3.0]
|
||||
* Updated to version 0.14.33
|
||||
|
||||
[0.3.1]
|
||||
* Updated to version 0.14.35
|
||||
|
||||
[0.3.2]
|
||||
* Updated to version 0.14.36
|
||||
|
||||
|
@@ -5,7 +5,7 @@
|
||||
"description": "file://DESCRIPTION.md",
|
||||
"changelog": "file://CHANGELOG",
|
||||
"tagline": "Decentralized file synchronization",
|
||||
"version": "0.1.3",
|
||||
"version": "0.3.2",
|
||||
"healthCheckPath": "/check",
|
||||
"httpPort": 8000,
|
||||
"addons": {
|
||||
@@ -21,11 +21,12 @@
|
||||
}
|
||||
},
|
||||
"manifestVersion": 1,
|
||||
"website": "http://syncthing.net",
|
||||
"website": "https://syncthing.net",
|
||||
"contactEmail": "support@cloudron.io",
|
||||
"icon": "logo.png",
|
||||
"tags": [
|
||||
"storage"
|
||||
"storage",
|
||||
"sync"
|
||||
],
|
||||
"mediaLinks": [
|
||||
"https://git.cloudron.io/dswd/syncthing-app/raw/master/screenshots/1.jpg"
|
||||
|
@@ -1,4 +1,4 @@
|
||||
This app packages Syncthing v0.14.27.
|
||||
This app packages Syncthing <upstream>v0.14.36</upstream>.
|
||||
|
||||
Syncthing replaces proprietary sync and cloud services with something open, trustworthy and decentralized. Your data is your data alone and you deserve to choose where it is stored, if it is shared with some third party and how it's transmitted over the Internet.
|
||||
|
||||
|
@@ -28,7 +28,7 @@ RUN ./configure \
|
||||
--build=cloudron-river
|
||||
RUN make install
|
||||
|
||||
ENV VERSION 0.14.27
|
||||
ENV VERSION 0.14.36
|
||||
|
||||
RUN mkdir -p /app/code \
|
||||
&& wget https://github.com/syncthing/syncthing/releases/download/v${VERSION}/syncthing-linux-amd64-v${VERSION}.tar.gz -O - \
|
||||
@@ -37,7 +37,6 @@ RUN mkdir -p /app/code \
|
||||
WORKDIR /app/code
|
||||
|
||||
ADD nginx.conf /app/code/nginx.conf
|
||||
ADD config.xml /app/code/config.xml.default
|
||||
ADD inittab /etc/inittab
|
||||
ADD start.sh /app/code/start.sh
|
||||
|
||||
|
@@ -31,7 +31,6 @@ The e2e tests are located in the `test/` folder and require [nodejs](http://node
|
||||
cd syncthing-app/test
|
||||
|
||||
npm install
|
||||
export PATH=$PATH:node_modules/.bin
|
||||
USERNAME=user PASSWORD=password mocha --bail test.js
|
||||
PATH=$PATH:node_modules/.bin USERNAME=user PASSWORD=password mocha --bail test.js
|
||||
```
|
||||
|
||||
|
15
config.xml
15
config.xml
@@ -1,15 +0,0 @@
|
||||
<configuration version="19">
|
||||
<gui enabled="true" tls="false" debugging="false">
|
||||
<insecureAdminAccess>true</insecureAdminAccess>
|
||||
<address>0.0.0.0:3000</address>
|
||||
<theme>default</theme>
|
||||
</gui>
|
||||
<options>
|
||||
<listenAddress>tcp://:22000</listenAddress>
|
||||
<localAnnounceEnabled>false</localAnnounceEnabled>
|
||||
<startBrowser>false</startBrowser>
|
||||
<natEnabled>true</natEnabled>
|
||||
<autoUpgradeIntervalH>0</autoUpgradeIntervalH>
|
||||
<upgradeToPreReleases>false</upgradeToPreReleases>
|
||||
</options>
|
||||
</configuration>
|
2
inittab
2
inittab
@@ -1,2 +1,2 @@
|
||||
::respawn:/app/code/syncthing -gui-address=0.0.0.0:3000 -home=/app/data/config -no-browser >/dev/stdout 2>/dev/stderr
|
||||
::respawn:sudo -nu cloudron /app/code/syncthing -gui-address=0.0.0.0:3000 -home=/app/data/config -no-browser >/dev/stdout 2>/dev/stderr
|
||||
::respawn:/usr/local/nginx/sbin/nginx -c /app/code/nginx.conf
|
||||
|
12
start.sh
12
start.sh
@@ -4,8 +4,12 @@ set -eu
|
||||
|
||||
mkdir -p /app/data/config
|
||||
|
||||
if ! [ -f /app/data/config/config.xml ]; then
|
||||
cp /app/code/config.xml.default /app/data/config/config.xml
|
||||
export STNODEFAULTFOLDER=1 STNOUPGRADE=1
|
||||
|
||||
# if this if the first run, generate a useful config
|
||||
if [ ! -f /app/data/config/config.xml ]; then
|
||||
echo "=> Generating config"
|
||||
/app/code/syncthing --generate="/app/data/config"
|
||||
fi
|
||||
|
||||
cat >/run/ldap.conf <<EOF
|
||||
@@ -19,9 +23,11 @@ ldap_server cloudron {
|
||||
}
|
||||
EOF
|
||||
|
||||
# Set the listenAddress and the gui enabled to make sure user doesnt lock themselves out by accident.
|
||||
sed -e 's,<listenAddress>.*</listenAddress>,<listenAddress>tcp://:22000</listenAddress>,' -i /app/data/config/config.xml
|
||||
sed -e 's,<gui .*>,<gui enabled="true" tls="false" debugging="false">,' -i /app/data/config/config.xml
|
||||
|
||||
export STNODEFAULTFOLDER=1 STNOUPGRADE=1
|
||||
chown -R cloudron:cloudron /app/data/config /app/data
|
||||
|
||||
exec busybox init
|
||||
|
||||
|
@@ -15,8 +15,8 @@
|
||||
"mocha": "^2.5.3",
|
||||
"rimraf": "^2.5.3",
|
||||
"selenium-server-standalone-jar": "^2.53.1",
|
||||
"selenium-webdriver": "^2.53.3",
|
||||
"selenium-webdriver": "^2.53.1",
|
||||
"superagent": "^1.4.0",
|
||||
"chromedriver": "^2.27.0"
|
||||
"chromedriver": "^2.31.0"
|
||||
}
|
||||
}
|
||||
|
74
test/test.js
74
test/test.js
@@ -46,7 +46,7 @@ describe('Application life cycle test', function () {
|
||||
done();
|
||||
});
|
||||
|
||||
var LOCATION = 'syncthing-test';
|
||||
var LOCATION = 'test';
|
||||
var TEST_TIMEOUT = 30000;
|
||||
var SYNC_PORT = 22001;
|
||||
var app;
|
||||
@@ -62,47 +62,59 @@ describe('Application life cycle test', function () {
|
||||
}
|
||||
|
||||
function loadPage(callback) {
|
||||
browser.manage().deleteAllCookies();
|
||||
browser.get('https://' + username + ':' + password + '@' + app.fqdn);
|
||||
return pageLoaded().then(function() {
|
||||
browser.manage().deleteAllCookies().then(function () {
|
||||
return browser.get('https://' + username + ':' + encodeURIComponent(password) + '@' + app.fqdn).then(function () {
|
||||
return browser.get('https://' + app.fqdn);
|
||||
});
|
||||
}).then(function () {
|
||||
return pageLoaded();
|
||||
}).then(function () {
|
||||
callback();
|
||||
});
|
||||
}
|
||||
|
||||
function addFolder(callback) {
|
||||
return pageLoaded().then(function() {
|
||||
browser.findElement(by.css('[ng-click*=addFolder]')).click();
|
||||
return visible(by.id('folderPath')).then(function() {
|
||||
return browser.findElement(by.id('folderLabel')).sendKeys('test');
|
||||
}).then(function() {
|
||||
pageLoaded().then(function() {
|
||||
return browser.findElement(by.css('[ng-click*=addFolder]')).click();
|
||||
}).then(function () {
|
||||
return visible(by.id('folderPath'));
|
||||
}).then(function() {
|
||||
return browser.findElement(by.id('folderLabel')).sendKeys('test');
|
||||
}).then(function () {
|
||||
return browser.findElement(by.id('folderPath')).sendKeys('/app/data/test');
|
||||
}).then(function() {
|
||||
//Clear and re-enter the folder to avoid race with auto-completion
|
||||
return browser.findElement(by.id('folderPath')).clear();
|
||||
}).then(function() {
|
||||
}).then(function() {
|
||||
//Clear and re-enter the folder to avoid race with auto-completion
|
||||
return browser.findElement(by.id('folderPath')).clear();
|
||||
}).then(function() {
|
||||
return browser.findElement(by.id('folderPath')).sendKeys('/app/data/test');
|
||||
}).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() {
|
||||
callback();
|
||||
});
|
||||
}).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() {
|
||||
callback();
|
||||
});
|
||||
}
|
||||
|
||||
function removeFolder(callback) {
|
||||
browser.get('https://' + username + ':' + password + '@' + app.fqdn);
|
||||
return pageLoaded().then(function() {
|
||||
browser.findElement(by.css('#folders button')).click();
|
||||
setTimeout(function() {
|
||||
browser.findElement(by.css('#folder-0 button[ng-click*=editFolder]')).click();
|
||||
setTimeout(function() {
|
||||
browser.findElement(by.css('[ng-click*=deleteFolder]')).click().then(function() {
|
||||
setTimeout(callback, 1000); //This needs to run for some time
|
||||
});
|
||||
}, 1000); //No way to check for visibility of angular-js components
|
||||
}, 1000); //No way to check for visibility of angular-js components
|
||||
browser.get('https://' + username + ':' + encodeURIComponent(password) + '@' + app.fqdn).then(function () {
|
||||
return browser.get('https://' + app.fqdn);
|
||||
}).then(function () {
|
||||
return pageLoaded();
|
||||
}).then(function() {
|
||||
return browser.findElement(by.css('#folders button')).click();
|
||||
}).then(function () {
|
||||
return browser.sleep(1000); //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(1000); //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(1000); //This needs to run for some time
|
||||
}).then(function () {
|
||||
callback();
|
||||
});
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user