From ca380fed2f72b78cc2695929f38c32892c8c7d37 Mon Sep 17 00:00:00 2001 From: Dimitris Date: Sun, 29 Jul 2018 21:21:05 +0100 Subject: [PATCH] control over caching pre-release, stable release or latest --- lib/cache.js | 13 ++++++-- lib/server.js | 2 ++ test/cache.test.js | 36 ++++++++++++++++++++++ yarn.lock | 77 +++++++++++++++++++++++++++++++++++++++------- 4 files changed, 114 insertions(+), 14 deletions(-) diff --git a/lib/cache.js b/lib/cache.js index 65e9d30..9b66211 100644 --- a/lib/cache.js +++ b/lib/cache.js @@ -75,7 +75,7 @@ module.exports = class Cache { } async refreshCache() { - const { account, repository, pre, token } = this.config + const { account, repository, pre, only_pre, token } = this.config const repo = account + '/' + repository const url = `https://api.github.com/repos/${repo}/releases?per_page=100` const headers = { Accept: 'application/vnd.github.preview' } @@ -106,8 +106,14 @@ module.exports = class Cache { } const release = data.find(item => { - const isPre = Boolean(pre) === Boolean(item.prerelease) - return !item.draft && isPre + if (item.draft) return false + if (only_pre) { + return item.prerelease + } + if (!pre) { + return !item.prerelease + } + return true }) if (!release || !release.assets || !Array.isArray(release.assets)) { @@ -127,6 +133,7 @@ module.exports = class Cache { this.latest.version = tag_name this.latest.notes = release.body this.latest.pub_date = release.published_at + this.latest.prerelease = release.prerelease // Clear list of download links this.latest.platforms = {} diff --git a/lib/server.js b/lib/server.js index f4b2e39..05df517 100644 --- a/lib/server.js +++ b/lib/server.js @@ -5,6 +5,7 @@ const { ACCOUNT: account, REPOSITORY: repository, PRE: pre, + ONLY_PRE: only_pre, TOKEN: token, URL: PRIVATE_BASE_URL, VERCEL_URL @@ -17,6 +18,7 @@ module.exports = hazel({ account, repository, pre, + only_pre, token, url }) diff --git a/test/cache.test.js b/test/cache.test.js index 2f76552..8c192ac 100644 --- a/test/cache.test.js +++ b/test/cache.test.js @@ -50,6 +50,42 @@ describe('Cache', () => { expect(typeof storage.platforms).toBe('object') }) + it('a pre-release is cached', async () => { + const config = { + account: 'zeit', + repository: 'hyper', + token: process.env.TOKEN, + url: process.env.URL, + pre: false, + only_pre: true + } + + const cache = new Cache(config) + await cache.refreshCache() + const storage = cache.loadCache() + + expect(typeof storage.version).toBe('string') + expect(typeof storage.platforms).toBe('object') + expect(storage.prerelease).toBe(true) + }) + + it('a stable release is cached', async () => { + const config = { + account: 'zeit', + repository: 'hyper', + token: process.env.TOKEN, + url: process.env.URL + } + + const cache = new Cache(config) + await cache.refreshCache() + const storage = cache.loadCache() + + expect(typeof storage.version).toBe('string') + expect(typeof storage.platforms).toBe('object') + expect(storage.prerelease).toBe(false) + }) + it('should set platforms correctly', async () => { const config = { account: 'zeit', diff --git a/yarn.lock b/yarn.lock index cd83fc4..244ecd3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -149,6 +149,10 @@ abab@^2.0.0: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" integrity sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w== +abab@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" + abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" @@ -691,6 +695,12 @@ capture-exit@^1.2.0: dependencies: rsvp "^3.3.3" +capture-exit@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f" + dependencies: + rsvp "^3.3.3" + capture-stack-trace@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" @@ -972,7 +982,6 @@ cosmiconfig@^4.0.0: is-directory "^0.3.1" js-yaml "^3.9.0" parse-json "^4.0.0" - require-from-string "^2.0.1" create-error-class@^3.0.0: version "3.0.2" @@ -2260,6 +2269,18 @@ ignore-walk@^3.0.1: dependencies: minimatch "^3.0.4" +iconv-lite@^0.4.17, iconv-lite@^0.4.4, iconv-lite@~0.4.13: + version "0.4.23" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ignore-walk@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" + dependencies: + minimatch "^3.0.4" + ignore@^3.3.3, ignore@^3.3.5, ignore@^3.3.6: version "3.3.10" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" @@ -3302,6 +3323,10 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + js-types@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/js-types/-/js-types-1.0.0.tgz#d242e6494ed572ad3c92809fc8bed7f7687cbf03" @@ -3483,14 +3508,15 @@ lint-staged@7.0.0: app-root-path "^2.0.1" chalk "^2.3.1" commander "^2.14.1" - cosmiconfig "^4.0.0" + cosmiconfig "^5.0.2" debug "^3.1.0" dedent "^0.7.0" execa "^0.9.0" find-parent-dir "^0.3.0" is-glob "^4.0.0" - jest-validate "^22.4.0" - listr "^0.13.0" + is-windows "^1.0.2" + jest-validate "^23.0.0" + listr "^0.14.1" lodash "^4.17.5" log-symbols "^2.2.0" micromatch "^3.1.8" @@ -3498,8 +3524,9 @@ lint-staged@7.0.0: p-map "^1.1.1" path-is-inside "^1.0.2" pify "^3.0.0" - please-upgrade-node "^3.0.1" - staged-git-files "1.1.0" + please-upgrade-node "^3.0.2" + staged-git-files "1.1.1" + string-argv "^0.0.2" stringify-object "^3.2.2" listr-silent-renderer@^1.1.1: @@ -3536,11 +3563,11 @@ listr@^0.13.0: resolved "https://registry.yarnpkg.com/listr/-/listr-0.13.0.tgz#20bb0ba30bae660ee84cc0503df4be3d5623887d" integrity sha1-ILsLowuuZg7oTMBQPfS+PVYjiH0= dependencies: - chalk "^1.1.3" + "@samverschueren/stream-to-observable" "^0.3.0" cli-truncate "^0.2.1" figures "^1.7.0" indent-string "^2.1.0" - is-observable "^0.2.0" + is-observable "^1.1.0" is-promise "^2.1.0" is-stream "^1.1.0" listr-silent-renderer "^1.1.1" @@ -3550,8 +3577,7 @@ listr@^0.13.0: log-update "^1.0.2" ora "^0.2.3" p-map "^1.1.1" - rxjs "^5.4.2" - stream-to-observable "^0.2.0" + rxjs "^6.1.0" strip-ansi "^3.0.1" load-json-file@^2.0.0: @@ -3900,6 +3926,19 @@ minizlib@^1.1.1: dependencies: minipass "^2.2.1" +minipass@^2.2.1, minipass@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.3.tgz#a7dcc8b7b833f5d368759cce544dccb55f50f233" + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb" + dependencies: + minipass "^2.2.1" + mixin-deep@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" @@ -3981,6 +4020,14 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +needle@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.1.tgz#b5e325bd3aae8c2678902fa296f729455d1d3a7d" + dependencies: + debug "^2.1.2" + iconv-lite "^0.4.4" + sax "^1.2.4" + node-fetch@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.0.0.tgz#982bba43ecd4f2922a29cc186a6bbb0bb73fcba6" @@ -4959,7 +5006,7 @@ rxjs@^5.4.2: resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc" integrity sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw== dependencies: - symbol-observable "1.0.1" + tslib "^1.9.0" safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" @@ -5005,6 +5052,10 @@ semver-compare@^1.0.0: resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + semver-diff@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" @@ -5556,6 +5607,10 @@ trim-right@^1.0.1: resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= +tslib@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"