Skip to content
This repository was archived by the owner on Nov 23, 2022. It is now read-only.

Commit 5e6c6f6

Browse files
committed
Merge branch 'develop', prepare 0.19.0
2 parents ac20b76 + 77d9c93 commit 5e6c6f6

File tree

6 files changed

+102
-1
lines changed

6 files changed

+102
-1
lines changed

package.json

+2
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@
2727
"lodash": "^4.17.4",
2828
"lokijs": "^1.5.0",
2929
"mkdirp": "^0.5.1",
30+
"node-fetch": "^1.7.3",
3031
"rimraf": "^2.6.1",
32+
"semver-compare": "^1.0.0",
3133
"sshpk": "^1.13.1",
3234
"tar-fs": "^1.15.2",
3335
"uuid": "^3.0.1",

src/routes/index.js

+2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ const remove = require('./remove');
55
const logs = require('./logs');
66
const home = require('./home');
77
const update = require('./update');
8+
const version = require('./version');
89

910
module.exports = server => {
1011
deploy(server);
@@ -13,4 +14,5 @@ module.exports = server => {
1314
logs(server);
1415
home(server);
1516
update(server);
17+
version(server);
1618
};

src/routes/version.js

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// npm modules
2+
const fetch = require('node-fetch');
3+
const cmp = require('semver-compare');
4+
5+
// our modules
6+
const docker = require('../docker/docker');
7+
const pkg = require('../../package.json');
8+
9+
// urls for tags request
10+
const exoServerUrl = `https://api.github.com/repos/exoframejs/exoframe-server/releases`;
11+
const traefikUrl = 'https://api.github.com/repos/containous/traefik/releases';
12+
13+
const getLatestVersion = async url => {
14+
const res = await fetch(url).then(r => r.json());
15+
const latestRelease = res.filter(r => !r.draft && !r.prerelease).shift();
16+
return latestRelease.tag_name;
17+
};
18+
19+
module.exports = server => {
20+
server.route({
21+
method: 'GET',
22+
path: '/version',
23+
config: {
24+
auth: 'token',
25+
},
26+
async handler(request, reply) {
27+
// get version of traefik
28+
const allImages = await docker.listImages();
29+
const traefik = allImages.find(img => img.RepoTags && img.RepoTags.find(t => t.includes('traefik')));
30+
const traefikVersion = traefik.Labels['org.label-schema.version'];
31+
// get latest versions
32+
const lastServerTag = await getLatestVersion(exoServerUrl);
33+
const lastTraefikTag = await getLatestVersion(traefikUrl);
34+
// reply
35+
reply({
36+
server: pkg.version,
37+
latestServer: lastServerTag,
38+
serverUpdate: cmp(lastServerTag, pkg.version) > 0,
39+
traefik: traefikVersion,
40+
latestTraefik: lastTraefikTag,
41+
traefikUpdate: cmp(lastTraefikTag, traefikVersion) > 0,
42+
}).code(200);
43+
},
44+
});
45+
};

test/index.js

+3
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ const logs = require('./logs');
1313
const remove = require('./remove');
1414
const update = require('./update');
1515
const dockerInit = require('./docker-init');
16+
const version = require('./version');
1617

1718
const run = async () => {
1819
// wait for config
@@ -38,6 +39,8 @@ const run = async () => {
3839
await remove(server, token, name);
3940
// test update
4041
await update(server, token);
42+
// test version
43+
await version(server, token);
4144

4245
// stop server
4346
await server.stop();

test/version.js

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// npm packages
2+
const tap = require('tap');
3+
4+
module.exports = (server, token) => {
5+
tap.test('Should get current and latest versions', t => {
6+
// options base
7+
const options = {
8+
method: 'GET',
9+
url: '/version',
10+
headers: {
11+
Authorization: `Bearer ${token}`,
12+
},
13+
};
14+
15+
server.inject(options, async response => {
16+
const result = response.result;
17+
18+
// check response
19+
t.equal(response.statusCode, 200, 'Correct status code');
20+
t.ok(result.server, 'Should have server version');
21+
t.ok(result.traefik, 'Should have traefik version');
22+
t.ok(result.latestServer, 'Should have latest server version');
23+
t.ok(result.latestTraefik, 'Should have latest traefik version');
24+
25+
t.end();
26+
});
27+
});
28+
};

yarn.lock

+22-1
Original file line numberDiff line numberDiff line change
@@ -641,6 +641,12 @@ [email protected]:
641641
base64url "^2.0.0"
642642
safe-buffer "^5.0.1"
643643

644+
encoding@^0.1.11:
645+
version "0.1.12"
646+
resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
647+
dependencies:
648+
iconv-lite "~0.4.13"
649+
644650
end-of-stream@^1.0.0, end-of-stream@^1.1.0:
645651
version "1.4.0"
646652
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.0.tgz#7a90d833efda6cfa6eac0f4949dbb0fad3a63206"
@@ -1051,6 +1057,10 @@ http-signature@~1.1.0:
10511057
jsprim "^1.2.2"
10521058
sshpk "^1.7.0"
10531059

1060+
iconv-lite@~0.4.13:
1061+
version "0.4.19"
1062+
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b"
1063+
10541064
imurmurhash@^0.1.4:
10551065
version "0.1.4"
10561066
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
@@ -1185,7 +1195,7 @@ is-property@^1.0.0:
11851195
version "1.0.2"
11861196
resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
11871197

1188-
is-stream@^1.1.0:
1198+
is-stream@^1.0.1, is-stream@^1.1.0:
11891199
version "1.1.0"
11901200
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
11911201

@@ -1609,6 +1619,13 @@ [email protected]:
16091619
hoek "4.x.x"
16101620
vise "2.x.x"
16111621

1622+
node-fetch@^1.7.3:
1623+
version "1.7.3"
1624+
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
1625+
dependencies:
1626+
encoding "^0.1.11"
1627+
is-stream "^1.0.1"
1628+
16121629
node-pre-gyp@^0.6.36:
16131630
version "0.6.36"
16141631
resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz#db604112cb74e0d477554e9b505b17abddfab786"
@@ -2164,6 +2181,10 @@ safe-buffer@^5.0.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
21642181
version "5.1.1"
21652182
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
21662183

2184+
semver-compare@^1.0.0:
2185+
version "1.0.0"
2186+
resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
2187+
21672188
"semver@2 || 3 || 4 || 5", [email protected], semver@^5.3.0:
21682189
version "5.4.1"
21692190
resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e"

0 commit comments

Comments
 (0)