1
0
mirror of https://git.cloudron.io/cloudron/syncthing-app synced 2025-09-13 08:19:09 +00:00

Compare commits

..

13 Commits

Author SHA1 Message Date
Johannes Zellner
ef295ffb0b Update test deps 2020-09-08 13:15:20 +02:00
Johannes Zellner
0a1c5ceed2 Bump version for 1.9.0 2020-09-08 13:14:21 +02:00
Johannes Zellner
23f4e2abd9 Update test deps 2020-08-08 11:21:10 +02:00
Girish Ramakrishnan
af1a53e0ca Revert "Bump version for 1.8.0"
This reverts commit 8ba346c847.

It seems they reverted this release
2020-08-06 10:49:32 -07:00
Johannes Zellner
8ba346c847 Bump version for 1.8.0 2020-08-03 16:18:51 +02:00
Girish Ramakrishnan
1f12c096f8 update changelog 2020-07-14 20:29:06 -07:00
Girish Ramakrishnan
5358d94cb0 Fix manifest and postinstall 2020-07-14 20:27:05 -07:00
Johannes Zellner
eb3c1d27dc Bump version for 1.7.1 2020-07-13 11:59:17 +02:00
Johannes Zellner
7d9d8049d0 Update test deps 2020-06-02 14:47:16 +02:00
Johannes Zellner
ac1fe56e47 Bump version for 1.6.1 2020-06-02 14:39:01 +02:00
Johannes Zellner
dc08b5314d Bump version for 1.5.0 2020-05-05 12:45:46 +02:00
Johannes Zellner
46177b5ad6 Fixup tests 2020-05-05 12:42:59 +02:00
Johannes Zellner
def7b55560 Use new base image 2020-05-05 10:51:50 +02:00
8 changed files with 606 additions and 347 deletions

View File

@@ -154,3 +154,26 @@
[1.7.2] [1.7.2]
* Update Syncthing to 1.4.2 * Update Syncthing to 1.4.2
[1.8.0]
* Update Syncthing to 1.5.0
* Update to new Cloudron base image
[1.9.0]
* Update Syncthing to 1.6.1
[1.10.0]
* Update Syncthing to 1.7.1
* [Full changelog](https://github.com/syncthing/syncthing/releases/tag/v1.7.0)
* #6552: panic: Stop called more than once on ... created by nat.Service
* #6564: Closing an already removed connection causes GUI error message
* #6646: Misleading error message when to be deleted dir contains receive-only changes
* #6653: panic: nil pointer dereference in leveldb.(*DB).isClosed()
[1.11.0]
* Update Syncthing to 1.9.0
* [Full changelog](https://github.com/syncthing/syncthing/releases/tag/v1.9.0)
* Offline nodes after drive replacement automatically heal and join back into the cluster, refer #10416
* Listing improvements with parallel disk.Walk calls across many nodes, refer #10420
* certs now supports multiple domains for TLS termination, refer #10207
* Context now passed around at storage layer for future context support, refer #10321

View File

@@ -5,7 +5,7 @@
"description": "file://DESCRIPTION.md", "description": "file://DESCRIPTION.md",
"changelog": "file://CHANGELOG", "changelog": "file://CHANGELOG",
"tagline": "Decentralized file synchronization", "tagline": "Decentralized file synchronization",
"version": "1.7.2", "version": "1.11.0",
"healthCheckPath": "/healthcheck", "healthCheckPath": "/healthcheck",
"httpPort": 8000, "httpPort": 8000,
"addons": { "addons": {
@@ -27,12 +27,13 @@
"storage", "storage",
"sync" "sync"
], ],
"minBoxVersion": "4.1.4", "minBoxVersion": "5.3.0",
"forumUrl": "https://forum.cloudron.io/category/56/syncthing",
"documentationUrl": "https://cloudron.io/documentation/apps/syncthing/", "documentationUrl": "https://cloudron.io/documentation/apps/syncthing/",
"mediaLinks": [ "mediaLinks": [
"https://s3.amazonaws.com/cloudron-app-screenshots/net.syncthing.cloudronapp2/53bc9300d71bb5bf32362f8213194a0c3a415429/1.png", "https://cloudron-app-screenshots.s3.amazonaws.com/net.syncthing.cloudronapp2/53bc9300d71bb5bf32362f8213194a0c3a415429/1.png",
"https://s3.amazonaws.com/cloudron-app-screenshots/net.syncthing.cloudronapp2/53bc9300d71bb5bf32362f8213194a0c3a415429/2.png", "https://cloudron-app-screenshots.s3.amazonaws.com/net.syncthing.cloudronapp2/53bc9300d71bb5bf32362f8213194a0c3a415429/2.png",
"https://s3.amazonaws.com/cloudron-app-screenshots/net.syncthing.cloudronapp2/53bc9300d71bb5bf32362f8213194a0c3a415429/3.png" "https://cloudron-app-screenshots.s3.amazonaws.com/net.syncthing.cloudronapp2/53bc9300d71bb5bf32362f8213194a0c3a415429/3.png"
], ],
"postInstallMessage": "file://POSTINSTALL.md" "postInstallMessage": "file://POSTINSTALL.md"
} }

View File

@@ -1,4 +1,4 @@
This app packages Syncthing <upstream>1.4.2</upstream>. This app packages Syncthing <upstream>1.9.0</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. 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.

View File

@@ -1,17 +1,16 @@
FROM cloudron/base:1.0.0@sha256:147a648a068a2e746644746bbfb42eb7a50d682437cead3c67c933c546357617 FROM cloudron/base:2.0.0@sha256:f9fea80513aa7c92fe2e7bf3978b54c8ac5222f47a9a32a7f8833edf0eb5a4f4
ARG VERSION=1.4.2 ARG VERSION=1.9.0
RUN mkdir -p /app/code \
&& 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 mkdir -p /app/code
WORKDIR /app/code WORKDIR /app/code
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
# add supervisor configs # add supervisor configs
ADD supervisor/* /etc/supervisor/conf.d/ ADD supervisor/* /etc/supervisor/conf.d/
RUN ln -sf /run/syncthing/supervisord.log /var/log/supervisor/supervisord.log RUN ln -sf /run/syncthing/supervisord.log /var/log/supervisor/supervisord.log
ADD nginx.conf /app/code/nginx.conf ADD nginx.conf start.sh /app/code/
ADD start.sh /app/code/start.sh
CMD [ "/app/code/start.sh" ] CMD [ "/app/code/start.sh" ]

View File

@@ -1,8 +1,7 @@
Use the following credentials for initial setup: This app is pre-setup with an admin account. The initial credentials are:
`username`: admin **Username**: admin <br/>
**Password**: changeme <br/>
`password`: changeme Please change the admin password immediately.
**Please change the admin password on first login**

797
test/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -9,14 +9,13 @@
"author": "", "author": "",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"chromedriver": "^80.0.2", "chromedriver": "^85.0.0",
"ejs": "^3.0.2",
"expect.js": "^0.3.1", "expect.js": "^0.3.1",
"mkdirp": "^1.0.4", "mkdirp": "^1.0.4",
"mocha": "^7.1.1", "mocha": "^8.1.3",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
"selenium-server-standalone-jar": "^3.141.59", "selenium-server-standalone-jar": "^3.141.59",
"selenium-webdriver": "^3.6.0", "selenium-webdriver": "^3.6.0",
"superagent": "^5.2.2" "superagent": "^6.1.0"
} }
} }

View File

@@ -2,6 +2,11 @@
'use strict'; 'use strict';
/* global describe */
/* global before */
/* global after */
/* global it */
require('chromedriver'); require('chromedriver');
var execSync = require('child_process').execSync, var execSync = require('child_process').execSync,
@@ -15,15 +20,6 @@ var by = require('selenium-webdriver').By,
Key = require('selenium-webdriver').Key, Key = require('selenium-webdriver').Key,
Builder = require('selenium-webdriver').Builder; Builder = require('selenium-webdriver').Builder;
var accessKey = 'admin',
secretKey = 'secretkey';
var bucket_prefix = 'bucket',
bucket_id = 0,
bucket;
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
describe('Application life cycle test', function () { describe('Application life cycle test', function () {
this.timeout(0); this.timeout(0);
@@ -49,10 +45,14 @@ describe('Application life cycle test', function () {
var TEST_TIMEOUT = 30000; var TEST_TIMEOUT = 30000;
var FOLDER = 'xmf'; // keep this small. long folder names fail in automation, not sure why var FOLDER = 'xmf'; // keep this small. long folder names fail in automation, not sure why
var SYNC_PORT = 22001; var SYNC_PORT = 22001;
var EXEC_ARGS = { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' };
var app; var app;
function installApp() { function getAppInfo() {
execSync('cloudron install --port-bindings SYNC_PORT=' + SYNC_PORT + ' --location ' + LOCATION, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' }); var inspect = JSON.parse(execSync('cloudron inspect'));
app = inspect.apps.filter(function (a) { return a.location === LOCATION || a.location === LOCATION + '2'; })[0];
expect(app).to.be.an('object');
} }
function pageLoaded() { function pageLoaded() {
@@ -75,6 +75,8 @@ describe('Application life cycle test', function () {
function loadPage(callback) { function loadPage(callback) {
browser.manage().deleteAllCookies().then(function () { browser.manage().deleteAllCookies().then(function () {
return browser.sleep(10000);
}).then(function() {
return browser.get('https://' + username + ':' + encodeURIComponent(password) + '@' + app.fqdn).then(function () { return browser.get('https://' + username + ':' + encodeURIComponent(password) + '@' + app.fqdn).then(function () {
return browser.get('https://' + app.fqdn); return browser.get('https://' + app.fqdn);
}); });
@@ -110,7 +112,7 @@ describe('Application life cycle test', function () {
function checkFolder(callback) { function checkFolder(callback) {
browser.get('https://' + app.fqdn).then(function () { browser.get('https://' + app.fqdn).then(function () {
return browser.wait(until.elementLocated(by.xpath(`//span[text()="${FOLDER}"]`)), TEST_TIMEOUT); return browser.wait(until.elementLocated(by.xpath(`//span[text()="${FOLDER}"]`)), TEST_TIMEOUT);
}).then(function () { }).then(function () {
callback(); callback();
}); });
} }
@@ -139,65 +141,54 @@ describe('Application life cycle test', function () {
}); });
} }
xit('build app', function () { xit('build app', function () { execSync('cloudron build', EXEC_ARGS); });
execSync('cloudron build', { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' });
});
it('install app', installApp); it('install app', function () { execSync('cloudron install --port-bindings SYNC_PORT=' + SYNC_PORT + ' --location ' + LOCATION, EXEC_ARGS); });
it('can get app information', getAppInfo);
it('can get app information', function () {
var inspect = JSON.parse(execSync('cloudron inspect'));
app = inspect.apps.filter(function (a) { return a.location === LOCATION; })[0];
expect(app).to.be.an('object');
});
it('fails with invalid password', invalidPassword); it('fails with invalid password', invalidPassword);
it('can load page', loadPage); it('can load page', loadPage);
it('can add folder', addFolder); it('can add folder', addFolder);
it('backup app', function () { it('backup app', function () { execSync('cloudron backup create --app ' + app.id, EXEC_ARGS); });
execSync('cloudron backup create --app ' + app.id, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' }); it('restore app', function () { execSync('cloudron restore --app ' + app.id, EXEC_ARGS); });
});
it('restore app', function () {
execSync('cloudron restore --app ' + app.id, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' });
});
it('can load page', loadPage); it('can load page', loadPage);
it('can check folder', checkFolder); it('can check folder', checkFolder);
it('move to different location', function () { it('move to different location', function (done) {
browser.manage().deleteAllCookies(); // ensure we don't hit NXDOMAIN in the mean time
execSync('cloudron configure --location ' + LOCATION + '2', { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' }); browser.get('about:blank').then(function () {
var inspect = JSON.parse(execSync('cloudron inspect')); execSync(`cloudron configure --location ${LOCATION}2 --app ${app.id}`, EXEC_ARGS);
app = inspect.apps.filter(function (a) { return a.location === LOCATION + '2'; })[0]; done();
expect(app).to.be.an('object'); });
}); });
it('can get app information', getAppInfo);
it('can load page', loadPage); it('can load page', loadPage);
it('can check folder', checkFolder); it('can check folder', checkFolder);
it('can remove folder', removeFolder); it('can remove folder', removeFolder);
it('uninstall app', function () { it('uninstall app', function (done) {
execSync('cloudron uninstall --app ' + app.id, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' }); browser.get('about:blank').then(function () {
execSync('cloudron uninstall --app ' + app.id, EXEC_ARGS);
done();
});
}); });
// test update // test update
it('can install app', function () { it('can install app', function () { execSync('cloudron install --port-bindings SYNC_PORT=' + SYNC_PORT + ' --appstore-id net.syncthing.cloudronapp2 --location ' + LOCATION, EXEC_ARGS); });
execSync('cloudron install --appstore-id net.syncthing.cloudronapp2 --location ' + LOCATION, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' }); it('can get app information', getAppInfo);
var inspect = JSON.parse(execSync('cloudron inspect'));
app = inspect.apps.filter(function (a) { return a.location === LOCATION; })[0];
expect(app).to.be.an('object');
});
it('can load page', loadPage); it('can load page', loadPage);
it('can add folder', addFolder); it('can add folder', addFolder);
it('can update', function () { it('can update', function () { execSync('cloudron update --app ' + LOCATION, EXEC_ARGS); });
execSync('cloudron update --app ' + LOCATION, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' }); it('wait for app to startup fully', function (done) { setTimeout(done, 10000); });
});
it('can check folder', checkFolder); it('can check folder', checkFolder);
it('uninstall app', function () {
execSync('cloudron uninstall --app ' + app.id, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' }); it('uninstall app', function (done) {
browser.get('about:blank').then(function () {
execSync('cloudron uninstall --app ' + app.id, EXEC_ARGS);
done();
});
}); });
}); });