Compare commits

...

332 Commits

Author SHA1 Message Date
Amir Raminfar
8888aec7fc Release 1.26.1 2020-06-01 12:10:03 -07:00
Daniel Sutton
ac2bbea915 Updated dockerfile to node 14 (#495) 2020-05-31 15:58:21 -07:00
dependabot-preview[bot]
3ee936d6e7 Merge pull request #494 from amir20/dependabot/npm_and_yarn/babel/core-7.10.2 2020-05-30 20:35:03 +00:00
dependabot-preview[bot]
7b61e7b047 Bump @babel/core from 7.10.1 to 7.10.2
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.10.1 to 7.10.2.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.10.2/packages/babel-core)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-30 20:28:53 +00:00
dependabot-preview[bot]
e6156a9142 Merge pull request #493 from amir20/dependabot/npm_and_yarn/vue-router-3.3.2 2020-05-29 16:48:10 +00:00
dependabot-preview[bot]
670282f19f Bump vue-router from 3.3.1 to 3.3.2
Bumps [vue-router](https://github.com/vuejs/vue-router) from 3.3.1 to 3.3.2.
- [Release notes](https://github.com/vuejs/vue-router/releases)
- [Changelog](https://github.com/vuejs/vue-router/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-router/compare/v3.3.1...v3.3.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-29 16:43:15 +00:00
dependabot-preview[bot]
3c1226db5b Merge pull request #492 from amir20/dependabot/go_modules/github.com/stretchr/testify-1.6.0 2020-05-29 13:24:27 +00:00
dependabot-preview[bot]
e1d5d96df1 Bump github.com/stretchr/testify from 1.5.1 to 1.6.0
Bumps [github.com/stretchr/testify](https://github.com/stretchr/testify) from 1.5.1 to 1.6.0.
- [Release notes](https://github.com/stretchr/testify/releases)
- [Commits](https://github.com/stretchr/testify/compare/v1.5.1...v1.6.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-29 13:17:39 +00:00
dependabot-preview[bot]
5d8c2a697a Merge pull request #490 from amir20/dependabot/npm_and_yarn/lint-staged-10.2.7 2020-05-29 06:27:13 +00:00
dependabot-preview[bot]
ece93e239a Bump lint-staged from 10.2.6 to 10.2.7
Bumps [lint-staged](https://github.com/okonet/lint-staged) from 10.2.6 to 10.2.7.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v10.2.6...v10.2.7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-29 06:21:55 +00:00
dependabot-preview[bot]
d8624693cd Merge pull request #489 from amir20/dependabot/npm_and_yarn/sass-1.26.7 2020-05-29 00:42:38 +00:00
dependabot-preview[bot]
882d759828 Bump sass from 1.26.6 to 1.26.7
Bumps [sass](https://github.com/sass/dart-sass) from 1.26.6 to 1.26.7.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.26.6...1.26.7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-29 00:32:30 +00:00
dependabot-preview[bot]
e365603bcd Merge pull request #488 from amir20/dependabot/npm_and_yarn/sass-1.26.6 2020-05-28 21:59:10 +00:00
dependabot-preview[bot]
22b198a06d Bump sass from 1.26.5 to 1.26.6
Bumps [sass](https://github.com/sass/dart-sass) from 1.26.5 to 1.26.6.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.26.5...1.26.6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-28 21:53:22 +00:00
Amir Raminfar
c2be62af10 Removes manifest 2020-05-28 10:29:47 -07:00
Amir Raminfar
87b8acea1c Removes node-fetch 2020-05-28 10:27:08 -07:00
Amir Raminfar
35c587e08e Removes babel-loader 2020-05-27 17:13:07 -07:00
dependabot-preview[bot]
7195bab2ee Merge pull request #487 from amir20/dependabot/npm_and_yarn/babel/core-7.10.1 2020-05-27 23:57:05 +00:00
dependabot-preview[bot]
980ea3fe6a Bump @babel/core from 7.10.0 to 7.10.1
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.10.0 to 7.10.1.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.10.1/packages/babel-core)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-27 23:51:26 +00:00
dependabot-preview[bot]
c931574615 Merge pull request #486 from amir20/dependabot/npm_and_yarn/babel/plugin-transform-runtime-7.10.1 2020-05-27 22:59:52 +00:00
dependabot-preview[bot]
59e784c7ed Bump @babel/plugin-transform-runtime from 7.10.0 to 7.10.1
Bumps [@babel/plugin-transform-runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-runtime) from 7.10.0 to 7.10.1.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.10.1/packages/babel-plugin-transform-runtime)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-27 22:54:42 +00:00
dependabot-preview[bot]
439f97f1e1 Merge pull request #485 from amir20/dependabot/npm_and_yarn/vue-router-3.3.1 2020-05-27 19:29:57 +00:00
dependabot-preview[bot]
7acec88b03 Bump vue-router from 3.3.0 to 3.3.1
Bumps [vue-router](https://github.com/vuejs/vue-router) from 3.3.0 to 3.3.1.
- [Release notes](https://github.com/vuejs/vue-router/releases)
- [Changelog](https://github.com/vuejs/vue-router/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-router/compare/v3.3.0...v3.3.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-27 19:24:35 +00:00
dependabot-preview[bot]
d22a4dff72 Merge pull request #484 from amir20/dependabot/npm_and_yarn/integration/jest-image-snapshot-4.0.2 2020-05-27 16:15:46 +00:00
dependabot-preview[bot]
82570ce986 Bump jest-image-snapshot from 4.0.1 to 4.0.2 in /integration
Bumps [jest-image-snapshot](https://github.com/americanexpress/jest-image-snapshot) from 4.0.1 to 4.0.2.
- [Release notes](https://github.com/americanexpress/jest-image-snapshot/releases)
- [Changelog](https://github.com/americanexpress/jest-image-snapshot/blob/master/CHANGELOG.md)
- [Commits](https://github.com/americanexpress/jest-image-snapshot/compare/v4.0.1...v4.0.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-27 16:10:37 +00:00
dependabot-preview[bot]
6388d7d3fc Merge pull request #483 from amir20/dependabot/npm_and_yarn/integration/jest-image-snapshot-4.0.1 2020-05-27 16:02:37 +00:00
dependabot-preview[bot]
ee301949a9 Bump jest-image-snapshot from 4.0.0 to 4.0.1 in /integration
Bumps [jest-image-snapshot](https://github.com/americanexpress/jest-image-snapshot) from 4.0.0 to 4.0.1.
- [Release notes](https://github.com/americanexpress/jest-image-snapshot/releases)
- [Changelog](https://github.com/americanexpress/jest-image-snapshot/blob/master/CHANGELOG.md)
- [Commits](https://github.com/americanexpress/jest-image-snapshot/compare/v4.0.0...v4.0.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-27 15:57:19 +00:00
dependabot-preview[bot]
3a4be02bc9 Merge pull request #482 from amir20/dependabot/npm_and_yarn/vue-router-3.3.0 2020-05-27 14:34:11 +00:00
dependabot-preview[bot]
ecb9594bd0 Bump vue-router from 3.2.0 to 3.3.0
Bumps [vue-router](https://github.com/vuejs/vue-router) from 3.2.0 to 3.3.0.
- [Release notes](https://github.com/vuejs/vue-router/releases)
- [Changelog](https://github.com/vuejs/vue-router/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-router/compare/v3.2.0...v3.3.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-27 14:28:32 +00:00
dependabot-preview[bot]
29caf91d79 Merge pull request #481 from amir20/dependabot/npm_and_yarn/babel/core-7.10.0 2020-05-26 22:53:59 +00:00
dependabot-preview[bot]
2574114d3e Bump @babel/core from 7.9.6 to 7.10.0
Bumps [@babel/core](https://github.com/babel/babel) from 7.9.6 to 7.10.0.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/compare/v7.9.6...v7.10.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-26 22:48:25 +00:00
dependabot-preview[bot]
4097c3e90e Merge pull request #480 from amir20/dependabot/npm_and_yarn/babel/plugin-transform-runtime-7.10.0 2020-05-26 22:09:16 +00:00
dependabot-preview[bot]
d98e841bc8 Bump @babel/plugin-transform-runtime from 7.9.6 to 7.10.0
Bumps [@babel/plugin-transform-runtime](https://github.com/babel/babel) from 7.9.6 to 7.10.0.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/compare/v7.9.6...v7.10.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-26 22:02:26 +00:00
dependabot-preview[bot]
af86681f16 Merge pull request #479 from amir20/dependabot/npm_and_yarn/vue-meta-2.3.4 2020-05-26 21:17:22 +00:00
dependabot-preview[bot]
5f228e4bdc Bump vue-meta from 2.3.3 to 2.3.4
Bumps [vue-meta](https://github.com/nuxt/vue-meta) from 2.3.3 to 2.3.4.
- [Release notes](https://github.com/nuxt/vue-meta/releases)
- [Changelog](https://github.com/nuxt/vue-meta/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nuxt/vue-meta/compare/v2.3.3...v2.3.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-26 21:11:11 +00:00
Amir Raminfar
177ca6e6f9 Use npm-all 2020-05-26 10:51:41 -07:00
dependabot-preview[bot]
772b8a4f2d Merge pull request #478 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001066 2020-05-25 23:10:34 +00:00
dependabot-preview[bot]
8bcaf051e2 Bump caniuse-lite from 1.0.30001065 to 1.0.30001066
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001065 to 1.0.30001066.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001065...v1.0.30001066)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-25 23:04:30 +00:00
dependabot-preview[bot]
a6258bbdfb Merge pull request #477 from amir20/dependabot/npm_and_yarn/buefy-0.8.20 2020-05-25 13:39:54 +00:00
dependabot-preview[bot]
52e73534c7 Bump buefy from 0.8.19 to 0.8.20
Bumps [buefy](https://github.com/buefy/buefy) from 0.8.19 to 0.8.20.
- [Release notes](https://github.com/buefy/buefy/releases)
- [Changelog](https://github.com/buefy/buefy/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/buefy/buefy/compare/v0.8.19...v0.8.20)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-25 13:34:16 +00:00
dependabot-preview[bot]
6c4996905a Merge pull request #476 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001065 2020-05-25 01:05:10 +00:00
dependabot-preview[bot]
7dc8076840 Bump caniuse-lite from 1.0.30001064 to 1.0.30001065
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001064 to 1.0.30001065.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001064...v1.0.30001065)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-25 00:59:23 +00:00
Amir Raminfar
19ce70ba1c Removes html for templates 2020-05-23 16:20:54 -07:00
Amir Raminfar
f026e7291c Release 1.26.0 2020-05-23 11:09:34 -07:00
Amir Raminfar
129b5a75b2 Uses == and fixes error messages 2020-05-23 11:09:13 -07:00
dependabot-preview[bot]
d354c2b751 Bump caniuse-lite from 1.0.30001062 to 1.0.30001064 (#475)
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001062 to 1.0.30001064.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001062...v1.0.30001064)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-05-23 07:45:17 -07:00
Amir Raminfar
bae3ecca7b Adds show page with name param (#474) 2020-05-22 16:49:23 -07:00
Amir Raminfar
a7241b6fbe Fixes max size 2020-05-22 10:56:34 -07:00
Amir Raminfar
e66f3f5a59 Sets tz 2020-05-22 10:54:59 -07:00
Amir Raminfar
237032a714 Removes mocked date 2020-05-22 10:36:59 -07:00
dependabot-preview[bot]
fb622085ce Merge pull request #472 from amir20/dependabot/npm_and_yarn/lint-staged-10.2.6 2020-05-22 11:28:19 +00:00
dependabot-preview[bot]
b5a653e305 Bump lint-staged from 10.2.4 to 10.2.6
Bumps [lint-staged](https://github.com/okonet/lint-staged) from 10.2.4 to 10.2.6.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v10.2.4...v10.2.6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-22 11:23:16 +00:00
dependabot-preview[bot]
41ee1c569a Merge pull request #470 from amir20/dependabot/npm_and_yarn/mockdate-3.0.2 2020-05-21 20:08:32 +00:00
dependabot-preview[bot]
d48b4a262f Bump mockdate from 3.0.1 to 3.0.2
Bumps [mockdate](https://github.com/boblauer/MockDate) from 3.0.1 to 3.0.2.
- [Release notes](https://github.com/boblauer/MockDate/releases)
- [Changelog](https://github.com/boblauer/MockDate/blob/master/CHANGELOG.md)
- [Commits](https://github.com/boblauer/MockDate/compare/v3.0.1...v3.0.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-21 20:02:52 +00:00
dependabot-preview[bot]
64cdc9457d Merge pull request #469 from amir20/dependabot/npm_and_yarn/mockdate-3.0.1 2020-05-21 15:53:35 +00:00
dependabot-preview[bot]
1cf1121856 Bump mockdate from 2.0.5 to 3.0.1
Bumps [mockdate](https://github.com/boblauer/MockDate) from 2.0.5 to 3.0.1.
- [Release notes](https://github.com/boblauer/MockDate/releases)
- [Changelog](https://github.com/boblauer/MockDate/blob/master/CHANGELOG.md)
- [Commits](https://github.com/boblauer/MockDate/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-21 15:48:07 +00:00
dependabot-preview[bot]
dd2a732525 Merge pull request #467 from amir20/dependabot/npm_and_yarn/vue-router-3.2.0 2020-05-19 16:48:27 +00:00
dependabot-preview[bot]
67cf6734ff Bump vue-router from 3.1.6 to 3.2.0
Bumps [vue-router](https://github.com/vuejs/vue-router) from 3.1.6 to 3.2.0.
- [Release notes](https://github.com/vuejs/vue-router/releases)
- [Changelog](https://github.com/vuejs/vue-router/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-router/compare/v3.1.6...v3.2.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-19 16:42:54 +00:00
dependabot-preview[bot]
abfd6753da Merge pull request #466 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001062 2020-05-19 12:29:28 +00:00
dependabot-preview[bot]
65d1ea047b Bump caniuse-lite from 1.0.30001061 to 1.0.30001062
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001061 to 1.0.30001062.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001061...v1.0.30001062)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-19 12:23:57 +00:00
dependabot-preview[bot]
cc3fd3fe67 Merge pull request #464 from amir20/dependabot/npm_and_yarn/date-fns-2.14.0 2020-05-18 18:41:30 +00:00
dependabot-preview[bot]
acc39b3097 Bump date-fns from 2.13.0 to 2.14.0
Bumps [date-fns](https://github.com/date-fns/date-fns) from 2.13.0 to 2.14.0.
- [Release notes](https://github.com/date-fns/date-fns/releases)
- [Changelog](https://github.com/date-fns/date-fns/blob/master/CHANGELOG.md)
- [Commits](https://github.com/date-fns/date-fns/compare/v2.13.0...v2.14.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-18 18:35:48 +00:00
dependabot-preview[bot]
773e736123 Merge pull request #465 from amir20/dependabot/npm_and_yarn/buefy-0.8.19 2020-05-18 18:34:36 +00:00
dependabot-preview[bot]
2414ef7424 Merge pull request #463 from amir20/dependabot/npm_and_yarn/hotkeys-js-3.8.1 2020-05-18 18:33:49 +00:00
dependabot-preview[bot]
1ab60cba59 Bump buefy from 0.8.18 to 0.8.19
Bumps [buefy](https://github.com/buefy/buefy) from 0.8.18 to 0.8.19.
- [Release notes](https://github.com/buefy/buefy/releases)
- [Changelog](https://github.com/buefy/buefy/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/buefy/buefy/compare/v0.8.18...v0.8.19)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-18 18:29:21 +00:00
dependabot-preview[bot]
78685301fb Bump hotkeys-js from 3.8.0 to 3.8.1
Bumps [hotkeys-js](https://github.com/jaywcjlove/hotkeys) from 3.8.0 to 3.8.1.
- [Release notes](https://github.com/jaywcjlove/hotkeys/releases)
- [Commits](https://github.com/jaywcjlove/hotkeys/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-18 18:28:10 +00:00
Amir Raminfar
841f000c75 Release 1.25.6 2020-05-18 10:57:45 -07:00
dependabot-preview[bot]
caa83c17d9 Merge pull request #461 from amir20/dependabot/npm_and_yarn/lint-staged-10.2.4 2020-05-18 17:52:43 +00:00
dependabot-preview[bot]
0a17e06d8f Bump lint-staged from 10.2.2 to 10.2.4
Bumps [lint-staged](https://github.com/okonet/lint-staged) from 10.2.2 to 10.2.4.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v10.2.2...v10.2.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-18 17:47:10 +00:00
dependabot-preview[bot]
d3650f33a3 Merge pull request #460 from amir20/dependabot/npm_and_yarn/integration/puppeteer-3.1.0 2020-05-18 12:02:45 +00:00
dependabot-preview[bot]
77c2d7f0c5 Bump puppeteer from 3.0.4 to 3.1.0 in /integration
Bumps [puppeteer](https://github.com/puppeteer/puppeteer) from 3.0.4 to 3.1.0.
- [Release notes](https://github.com/puppeteer/puppeteer/releases)
- [Commits](https://github.com/puppeteer/puppeteer/compare/v3.0.4...v3.1.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-18 11:57:38 +00:00
dependabot-preview[bot]
9821a78847 Merge pull request #459 from amir20/dependabot/npm_and_yarn/release-it-13.6.1 2020-05-17 13:03:48 +00:00
dependabot-preview[bot]
a3cd0a5743 Bump release-it from 13.6.0 to 13.6.1
Bumps [release-it](https://github.com/release-it/release-it) from 13.6.0 to 13.6.1.
- [Release notes](https://github.com/release-it/release-it/releases)
- [Changelog](https://github.com/release-it/release-it/blob/master/CHANGELOG.md)
- [Commits](https://github.com/release-it/release-it/compare/13.6.0...13.6.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-17 12:59:01 +00:00
dependabot-preview[bot]
fd0091fb4c Merge pull request #458 from amir20/dependabot/npm_and_yarn/vue/test-utils-1.0.3 2020-05-17 12:06:17 +00:00
dependabot-preview[bot]
fc34a9dd08 Bump @vue/test-utils from 1.0.2 to 1.0.3
Bumps [@vue/test-utils](https://github.com/vuejs/vue-test-utils/tree/HEAD/packages/test-utils) from 1.0.2 to 1.0.3.
- [Release notes](https://github.com/vuejs/vue-test-utils/releases)
- [Changelog](https://github.com/vuejs/vue-test-utils/blob/dev/packages/test-utils/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-test-utils/commits/v1.0.3/packages/test-utils)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-17 12:01:19 +00:00
dependabot-preview[bot]
747dba19b7 Merge pull request #457 from amir20/dependabot/npm_and_yarn/hotkeys-js-3.8.0 2020-05-16 10:36:03 +00:00
dependabot-preview[bot]
6e826b08f3 Bump hotkeys-js from 3.7.6 to 3.8.0
Bumps [hotkeys-js](https://github.com/jaywcjlove/hotkeys) from 3.7.6 to 3.8.0.
- [Release notes](https://github.com/jaywcjlove/hotkeys/releases)
- [Commits](https://github.com/jaywcjlove/hotkeys/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-16 10:30:43 +00:00
dependabot-preview[bot]
922b8ca832 Merge pull request #456 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001061 2020-05-16 04:42:04 +00:00
dependabot-preview[bot]
175015ce9e Bump caniuse-lite from 1.0.30001059 to 1.0.30001061
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001059 to 1.0.30001061.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001059...v1.0.30001061)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-16 04:36:50 +00:00
Amir Raminfar
ed13c83b0e Uses noreferrer noopener instead for settings 2020-05-15 09:47:45 -07:00
dependabot-preview[bot]
e1a6681f5f Bump jest-image-snapshot from 3.1.0 to 4.0.0 in /integration (#453)
Bumps [jest-image-snapshot](https://github.com/americanexpress/jest-image-snapshot) from 3.1.0 to 4.0.0.
- [Release notes](https://github.com/americanexpress/jest-image-snapshot/releases)
- [Changelog](https://github.com/americanexpress/jest-image-snapshot/blob/master/CHANGELOG.md)
- [Commits](https://github.com/americanexpress/jest-image-snapshot/compare/v3.1.0...v4.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-05-15 06:59:36 -07:00
dependabot-preview[bot]
e14b340f00 Merge pull request #455 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001059 2020-05-15 02:45:48 +00:00
dependabot-preview[bot]
b465f58a74 Bump caniuse-lite from 1.0.30001058 to 1.0.30001059
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001058 to 1.0.30001059.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001058...v1.0.30001059)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-15 02:40:24 +00:00
dependabot-preview[bot]
ea62473ab8 Merge pull request #454 from amir20/dependabot/npm_and_yarn/release-it-13.6.0 2020-05-14 18:25:07 +00:00
dependabot-preview[bot]
3f924fc5ad Bump release-it from 13.5.8 to 13.6.0
Bumps [release-it](https://github.com/release-it/release-it) from 13.5.8 to 13.6.0.
- [Release notes](https://github.com/release-it/release-it/releases)
- [Changelog](https://github.com/release-it/release-it/blob/master/CHANGELOG.md)
- [Commits](https://github.com/release-it/release-it/compare/13.5.8...13.6.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-14 18:19:36 +00:00
Amir Raminfar
cc9dda416b Release 1.25.5 2020-05-14 10:09:34 -07:00
Amir Raminfar
d31a1ccea9 Uses lower to sort. Fixes #452 2020-05-14 10:00:37 -07:00
dependabot-preview[bot]
a86a86a4ba Merge pull request #451 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001058 2020-05-14 02:42:11 +00:00
dependabot-preview[bot]
f2706e4fc6 Bump caniuse-lite from 1.0.30001055 to 1.0.30001058
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001055 to 1.0.30001058.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001055...v1.0.30001058)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-14 02:37:14 +00:00
Amir Raminfar
ed3672cb54 Reverts onmessage 2020-05-13 19:12:54 -07:00
Amir Raminfar
14373f5123 Uses addEventListenr 2020-05-13 15:20:53 -07:00
Amir Raminfar
5154002cb2 Adds more tests for streams 2020-05-13 11:59:04 -07:00
Amir Raminfar
9d0f8cd63a Release 1.25.4 2020-05-12 12:27:23 -07:00
Amir Raminfar
b8fa7a591f Allows inline css for colors in logs 2020-05-12 12:26:17 -07:00
Amir Raminfar
6a912b2784 Release 1.25.3 2020-05-12 12:03:18 -07:00
Amir Raminfar
5755224c2a Fixes jest test 2020-05-12 12:02:50 -07:00
Amir Raminfar
676a80038b Fixes title to use visible containers 2020-05-12 11:55:07 -07:00
Amir Raminfar
3eafab1e0b Adds another int test 2020-05-12 11:51:11 -07:00
Amir Raminfar
f66a9c14c7 Release 1.25.2 2020-05-12 11:37:26 -07:00
Amir Raminfar
1906a86374 Fixes mobile menu 2020-05-12 11:37:10 -07:00
Amir Raminfar
b29bb29654 Release 1.25.1 2020-05-12 10:37:45 -07:00
Amir Raminfar
fa7912f829 Removes showAll from readme 2020-05-12 10:26:41 -07:00
Amir Raminfar
42f4f67087 Release 1.25.0 2020-05-12 10:26:00 -07:00
Amir Raminfar
1e4763c450 Adds Last-Event-ID (#449) 2020-05-12 10:25:21 -07:00
Amir Raminfar
ca20f7c0a3 Makes changes to show all containers and event streams (#448) 2020-05-11 17:05:21 -07:00
Amir Raminfar
825491fb06 Adds DOMPurify.sanitize as default policy (#447) 2020-05-11 12:33:05 -07:00
dependabot-preview[bot]
40ebe10b93 Merge pull request #446 from amir20/dependabot/npm_and_yarn/vuex-3.4.0 2020-05-11 18:34:25 +00:00
dependabot-preview[bot]
60186225a7 Bump vuex from 3.3.0 to 3.4.0
Bumps [vuex](https://github.com/vuejs/vuex) from 3.3.0 to 3.4.0.
- [Release notes](https://github.com/vuejs/vuex/releases)
- [Changelog](https://github.com/vuejs/vuex/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vuex/compare/v3.3.0...v3.4.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-11 18:29:19 +00:00
dependabot-preview[bot]
dbeb53198b Merge pull request #445 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001055 2020-05-11 00:42:19 +00:00
dependabot-preview[bot]
08a6f0edeb Bump caniuse-lite from 1.0.30001054 to 1.0.30001055
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001054 to 1.0.30001055.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001054...v1.0.30001055)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-11 00:36:47 +00:00
dependabot-preview[bot]
f3bc71a07b Merge pull request #444 from amir20/dependabot/npm_and_yarn/buefy-0.8.18 2020-05-10 21:19:34 +00:00
dependabot-preview[bot]
4736d96752 Bump buefy from 0.8.17 to 0.8.18
Bumps [buefy](https://github.com/buefy/buefy) from 0.8.17 to 0.8.18.
- [Release notes](https://github.com/buefy/buefy/releases)
- [Changelog](https://github.com/buefy/buefy/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/buefy/buefy/compare/v0.8.17...v0.8.18)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-10 21:15:01 +00:00
dependabot-preview[bot]
9c0832a8b5 Merge pull request #443 from amir20/dependabot/go_modules/github.com/spf13/viper-1.7.0 2020-05-10 15:03:04 +00:00
dependabot-preview[bot]
1c302cfac7 Bump github.com/spf13/viper from 1.6.3 to 1.7.0
Bumps [github.com/spf13/viper](https://github.com/spf13/viper) from 1.6.3 to 1.7.0.
- [Release notes](https://github.com/spf13/viper/releases)
- [Commits](https://github.com/spf13/viper/compare/v1.6.3...v1.7.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-10 14:57:38 +00:00
Amir Raminfar
d6c7e90311 Updates readme 2020-05-09 14:51:04 -07:00
Amir Raminfar
456e6fa087 Release 1.24.1 2020-05-09 14:02:39 -07:00
Amir Raminfar
ce8186cc15 Fixes connect for github api 2020-05-09 14:02:29 -07:00
Amir Raminfar
17a9a6777a Release 1.24.0 2020-05-09 10:29:06 -07:00
Amir Raminfar
0752bb9a10 Fixes tests 2020-05-08 20:10:01 -07:00
Amir Raminfar
0360950eec Adds require trusted 2020-05-08 19:57:34 -07:00
Amir Raminfar
99f7e0d980 Implements Content-Security-Policy (#442) 2020-05-08 19:45:08 -07:00
dependabot-preview[bot]
b04e950358 Merge pull request #441 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001054 2020-05-08 03:43:16 +00:00
dependabot-preview[bot]
328bc80c14 Bump caniuse-lite from 1.0.30001053 to 1.0.30001054
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001053 to 1.0.30001054.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001053...v1.0.30001054)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-08 03:37:30 +00:00
Amir Raminfar
203e6ab780 Removes transition 2020-05-07 19:21:45 -07:00
Amir Raminfar
2f467ff83e Uses --force-recreate 2020-05-07 19:06:51 -07:00
Amir Raminfar
e9234a827c Release 1.23.2 2020-05-07 16:15:05 -07:00
Amir Raminfar
b773e61c69 Fixes int test 2020-05-07 16:14:52 -07:00
Amir Raminfar
898b5379da Release 1.23.1 2020-05-07 15:41:22 -07:00
Amir Raminfar
68833e4786 Fixes broken buildx 2020-05-07 15:41:14 -07:00
Amir Raminfar
6a26c4ecf0 Fixes broken splitter 2020-05-07 15:39:06 -07:00
Amir Raminfar
6118cda6de Release 1.23.0 2020-05-07 15:31:44 -07:00
Amir Raminfar
d5bac298ec Updates tests 2020-05-07 15:26:05 -07:00
Amir Raminfar
2286bc65a7 Adds w.Header().Set("X-Accel-Buffering", "no") for server events 2020-05-07 15:23:53 -07:00
Amir Raminfar
254faa7145 Fixes buffer bug 2020-05-07 15:22:47 -07:00
Amir Raminfar
a927ba66a5 Fixes nginx buffer problem by adding X-Accel-Buffering: no 2020-05-07 15:22:21 -07:00
Amir Raminfar
6c9b6b7768 Fixes title bug 2020-05-07 15:18:22 -07:00
dependabot-preview[bot]
77abe748f0 Merge pull request #439 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001053 2020-05-07 22:07:16 +00:00
dependabot-preview[bot]
6e17e178da Bump caniuse-lite from 1.0.30001052 to 1.0.30001053
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001052 to 1.0.30001053.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001052...v1.0.30001053)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-07 06:05:19 +00:00
Amir Raminfar
55f4cff699 Adds web manifest 2020-05-06 16:00:15 -07:00
Amir Raminfar
6ed4dcc86a Uses webpack instead of parcel (#438) 2020-05-06 15:44:12 -07:00
dependabot-preview[bot]
fad25076f7 Merge pull request #437 from amir20/dependabot/npm_and_yarn/date-fns-2.13.0 2020-05-06 21:34:05 +00:00
dependabot-preview[bot]
6c796ecd2c Bump date-fns from 2.12.0 to 2.13.0
Bumps [date-fns](https://github.com/date-fns/date-fns) from 2.12.0 to 2.13.0.
- [Release notes](https://github.com/date-fns/date-fns/releases)
- [Changelog](https://github.com/date-fns/date-fns/blob/master/CHANGELOG.md)
- [Commits](https://github.com/date-fns/date-fns/compare/v2.12.0...v2.13.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-06 21:29:04 +00:00
dependabot-preview[bot]
df9c0f6863 Merge pull request #436 from amir20/dependabot/npm_and_yarn/vue/test-utils-1.0.2 2020-05-06 16:52:25 +00:00
dependabot-preview[bot]
6be5d7e42d Bump @vue/test-utils from 1.0.0 to 1.0.2
Bumps [@vue/test-utils](https://github.com/vuejs/vue-test-utils/tree/HEAD/packages/test-utils) from 1.0.0 to 1.0.2.
- [Release notes](https://github.com/vuejs/vue-test-utils/releases)
- [Changelog](https://github.com/vuejs/vue-test-utils/blob/dev/packages/test-utils/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-test-utils/commits/v1.0.2/packages/test-utils)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-06 16:47:28 +00:00
dependabot-preview[bot]
69dd53d669 Merge pull request #435 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001052 2020-05-06 00:43:13 +00:00
dependabot-preview[bot]
3673ea9b72 Bump caniuse-lite from 1.0.30001051 to 1.0.30001052
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001051 to 1.0.30001052.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001051...v1.0.30001052)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-06 00:36:53 +00:00
dependabot-preview[bot]
0a4f53b7c9 Merge pull request #434 from amir20/dependabot/npm_and_yarn/vue/test-utils-1.0.0 2020-05-05 17:14:46 +00:00
dependabot-preview[bot]
f5a84c249a Bump @vue/test-utils from 1.0.0-beta.33 to 1.0.0
Bumps [@vue/test-utils](https://github.com/vuejs/vue-test-utils/tree/HEAD/packages/test-utils) from 1.0.0-beta.33 to 1.0.0.
- [Release notes](https://github.com/vuejs/vue-test-utils/releases)
- [Changelog](https://github.com/vuejs/vue-test-utils/blob/dev/packages/test-utils/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-test-utils/commits/v1.0.0/packages/test-utils)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-05 17:08:27 +00:00
dependabot-preview[bot]
63a9f24193 Merge pull request #433 from amir20/dependabot/npm_and_yarn/jest-26.0.1 2020-05-05 15:43:05 +00:00
dependabot-preview[bot]
fa37625f36 Bump jest from 26.0.0 to 26.0.1
Bumps [jest](https://github.com/facebook/jest) from 26.0.0 to 26.0.1.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v26.0.0...v26.0.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-05 15:37:27 +00:00
dependabot-preview[bot]
a73fda2a29 Merge pull request #432 from amir20/dependabot/npm_and_yarn/babel-jest-26.0.1 2020-05-05 14:53:57 +00:00
dependabot-preview[bot]
75c80bdc96 Bump babel-jest from 26.0.0 to 26.0.1
Bumps [babel-jest](https://github.com/facebook/jest/tree/HEAD/packages/babel-jest) from 26.0.0 to 26.0.1.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/commits/v26.0.1/packages/babel-jest)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-05 14:47:55 +00:00
dependabot-preview[bot]
2414a65371 Merge pull request #431 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001051 2020-05-05 06:14:30 +00:00
dependabot-preview[bot]
83ca9b0a89 Bump caniuse-lite from 1.0.30001050 to 1.0.30001051
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001050 to 1.0.30001051.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001050...v1.0.30001051)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-05 06:08:57 +00:00
dependabot-preview[bot]
6bceaee801 Merge pull request #430 from amir20/dependabot/npm_and_yarn/jest-26.0.0 2020-05-04 19:14:21 +00:00
dependabot-preview[bot]
70dfa399e4 Bump jest from 25.5.4 to 26.0.0
Bumps [jest](https://github.com/facebook/jest) from 25.5.4 to 26.0.0.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v25.5.4...v26.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-04 19:08:23 +00:00
dependabot-preview[bot]
8e89aa7a28 Merge pull request #429 from amir20/dependabot/npm_and_yarn/babel-jest-26.0.0 2020-05-04 19:06:26 +00:00
dependabot-preview[bot]
9a1938c071 Bump babel-jest from 25.5.1 to 26.0.0
Bumps [babel-jest](https://github.com/facebook/jest/tree/HEAD/packages/babel-jest) from 25.5.1 to 26.0.0.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/commits/v26.0.0/packages/babel-jest)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-04 19:00:44 +00:00
dependabot-preview[bot]
7e150daac7 Merge pull request #428 from amir20/dependabot/go_modules/github.com/sirupsen/logrus-1.6.0 2020-05-04 13:23:23 +00:00
dependabot-preview[bot]
3386dd3af9 Bump github.com/sirupsen/logrus from 1.5.0 to 1.6.0
Bumps [github.com/sirupsen/logrus](https://github.com/sirupsen/logrus) from 1.5.0 to 1.6.0.
- [Release notes](https://github.com/sirupsen/logrus/releases)
- [Changelog](https://github.com/sirupsen/logrus/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sirupsen/logrus/compare/v1.5.0...v1.6.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-04 13:17:15 +00:00
dependabot-preview[bot]
293a03153c Merge pull request #427 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001050 2020-05-04 06:57:00 +00:00
dependabot-preview[bot]
092fa34e1a Bump caniuse-lite from 1.0.30001049 to 1.0.30001050
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001049 to 1.0.30001050.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001049...v1.0.30001050)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-04 06:51:31 +00:00
dependabot-preview[bot]
20d42bf83c Merge pull request #426 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001049 2020-05-04 03:45:17 +00:00
dependabot-preview[bot]
a7ee8c6061 Bump caniuse-lite from 1.0.30001048 to 1.0.30001049
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001048 to 1.0.30001049.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001048...v1.0.30001049)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-04 03:40:19 +00:00
dependabot-preview[bot]
1afcedc3e3 Merge pull request #425 from amir20/dependabot/npm_and_yarn/release-it-13.5.8 2020-05-03 18:58:36 +00:00
dependabot-preview[bot]
8e49c76039 Bump release-it from 13.5.7 to 13.5.8
Bumps [release-it](https://github.com/release-it/release-it) from 13.5.7 to 13.5.8.
- [Release notes](https://github.com/release-it/release-it/releases)
- [Changelog](https://github.com/release-it/release-it/blob/master/CHANGELOG.md)
- [Commits](https://github.com/release-it/release-it/compare/13.5.7...13.5.8)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-03 18:53:37 +00:00
Amir Raminfar
c9599676c9 Adds target="_blank" rel="noopener" for settings 2020-05-02 19:20:54 -07:00
dependabot-preview[bot]
d547a4ca81 Merge pull request #424 from amir20/dependabot/npm_and_yarn/jest-25.5.4 2020-05-02 08:43:53 +00:00
dependabot-preview[bot]
f2764fad0c Bump jest from 25.5.3 to 25.5.4
Bumps [jest](https://github.com/facebook/jest) from 25.5.3 to 25.5.4.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v25.5.3...v25.5.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-02 08:39:04 +00:00
dependabot-preview[bot]
cf381dfc1a Merge pull request #423 from amir20/dependabot/npm_and_yarn/integration/jest-25.5.4 2020-05-02 08:30:56 +00:00
dependabot-preview[bot]
0806405099 Bump jest from 25.5.3 to 25.5.4 in /integration
Bumps [jest](https://github.com/facebook/jest) from 25.5.3 to 25.5.4.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v25.5.3...v25.5.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-02 08:26:08 +00:00
Amir Raminfar
d4f2b50a5e Updates readme 2020-05-01 18:57:08 -07:00
dependabot-preview[bot]
584166f80d Merge pull request #422 from amir20/dependabot/npm_and_yarn/lint-staged-10.2.2 2020-05-01 04:36:48 +00:00
dependabot-preview[bot]
23f5d5e4e7 Bump lint-staged from 10.2.1 to 10.2.2
Bumps [lint-staged](https://github.com/okonet/lint-staged) from 10.2.1 to 10.2.2.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v10.2.1...v10.2.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-01 04:31:34 +00:00
dependabot-preview[bot]
57d0c70ad7 Merge pull request #421 from amir20/dependabot/npm_and_yarn/jest-25.5.3 2020-04-30 22:46:00 +00:00
dependabot-preview[bot]
d3e02e24c5 Bump jest from 25.5.2 to 25.5.3
Bumps [jest](https://github.com/facebook/jest) from 25.5.2 to 25.5.3.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v25.5.2...v25.5.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-30 22:40:47 +00:00
dependabot-preview[bot]
9fd2f387c5 Merge pull request #420 from amir20/dependabot/npm_and_yarn/integration/jest-25.5.3 2020-04-30 22:25:32 +00:00
dependabot-preview[bot]
2f71ef6063 Bump jest from 25.5.2 to 25.5.3 in /integration
Bumps [jest](https://github.com/facebook/jest) from 25.5.2 to 25.5.3.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v25.5.2...v25.5.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-30 22:20:40 +00:00
Amir Raminfar
1a7416d5c7 Release 1.22.8 2020-04-30 15:18:51 -07:00
Amir Raminfar
eec14bbe18 Revert to node 13 2020-04-30 15:18:36 -07:00
Amir Raminfar
9a9997d5e0 Release 1.22.7 2020-04-30 14:33:53 -07:00
Amir Raminfar
2c041bc351 Removes file again 2020-04-30 14:33:35 -07:00
Amir Raminfar
8f98c28b96 Adds dev build back 2020-04-30 14:29:03 -07:00
Amir Raminfar
da3071cfa0 Uses absolute file path 2020-04-30 14:12:02 -07:00
Amir Raminfar
5484947ee3 Docker readme does not support 2fa so disabling 2020-04-30 14:01:43 -07:00
Amir Raminfar
c0f31b2ac5 Adds steps to update README on dockerhub 2020-04-30 13:59:34 -07:00
Amir Raminfar
d39c0e65aa Updates readme 2020-04-30 13:54:17 -07:00
Aaron
d090da9dcf Add sample Nginx config to README.md (#419) 2020-04-30 13:50:05 -07:00
Amir Raminfar
2ea63a2609 Updates to node v14 2020-04-30 12:58:27 -07:00
dependabot-preview[bot]
5766f7d1c5 Merge pull request #418 from amir20/dependabot/npm_and_yarn/lint-staged-10.2.1 2020-04-30 14:55:02 +00:00
dependabot-preview[bot]
0b762f6b88 Bump lint-staged from 10.2.0 to 10.2.1
Bumps [lint-staged](https://github.com/okonet/lint-staged) from 10.2.0 to 10.2.1.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v10.2.0...v10.2.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-30 14:49:08 +00:00
dependabot-preview[bot]
51e708742d Merge pull request #417 from amir20/dependabot/npm_and_yarn/jest-25.5.2 2020-04-29 22:43:18 +00:00
dependabot-preview[bot]
99d74aefa4 Bump jest from 25.5.1 to 25.5.2
Bumps [jest](https://github.com/facebook/jest) from 25.5.1 to 25.5.2.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v25.5.1...v25.5.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-29 22:37:43 +00:00
dependabot-preview[bot]
0105f6d1a4 Merge pull request #416 from amir20/dependabot/npm_and_yarn/integration/jest-25.5.2 2020-04-29 21:59:14 +00:00
dependabot-preview[bot]
9168739140 Bump jest from 25.5.1 to 25.5.2 in /integration
Bumps [jest](https://github.com/facebook/jest) from 25.5.1 to 25.5.2.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v25.5.1...v25.5.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-29 21:54:10 +00:00
dependabot-preview[bot]
429c82c372 Merge pull request #415 from amir20/dependabot/npm_and_yarn/babel/core-7.9.6 2020-04-29 19:20:14 +00:00
dependabot-preview[bot]
4f65f43267 Bump @babel/core from 7.9.0 to 7.9.6
Bumps [@babel/core](https://github.com/babel/babel) from 7.9.0 to 7.9.6.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/compare/v7.9.0...v7.9.6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-29 19:14:22 +00:00
dependabot-preview[bot]
bae86f4956 Merge pull request #414 from amir20/dependabot/npm_and_yarn/babel/plugin-transform-runtime-7.9.6 2020-04-29 18:49:53 +00:00
dependabot-preview[bot]
e0f550374f Bump @babel/plugin-transform-runtime from 7.9.0 to 7.9.6
Bumps [@babel/plugin-transform-runtime](https://github.com/babel/babel) from 7.9.0 to 7.9.6.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/compare/v7.9.0...v7.9.6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-29 18:43:36 +00:00
dependabot-preview[bot]
2dc9b9d921 Merge pull request #413 from amir20/dependabot/npm_and_yarn/jest-25.5.1 2020-04-29 13:43:09 +00:00
dependabot-preview[bot]
bb11e88e26 Bump jest from 25.5.0 to 25.5.1
Bumps [jest](https://github.com/facebook/jest) from 25.5.0 to 25.5.1.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v25.5.0...v25.5.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-29 13:37:30 +00:00
dependabot-preview[bot]
63392b9aab Merge pull request #412 from amir20/dependabot/npm_and_yarn/babel-jest-25.5.1 2020-04-29 13:35:51 +00:00
dependabot-preview[bot]
6fe24d3bbf Bump babel-jest from 25.5.0 to 25.5.1
Bumps [babel-jest](https://github.com/facebook/jest/tree/HEAD/packages/babel-jest) from 25.5.0 to 25.5.1.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/commits/v25.5.1/packages/babel-jest)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-29 13:29:46 +00:00
dependabot-preview[bot]
340f4d9baa Merge pull request #411 from amir20/dependabot/npm_and_yarn/integration/jest-25.5.1 2020-04-29 11:03:52 +00:00
dependabot-preview[bot]
aa37ca02b5 Bump jest from 25.5.0 to 25.5.1 in /integration
Bumps [jest](https://github.com/facebook/jest) from 25.5.0 to 25.5.1.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v25.5.0...v25.5.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-29 10:59:00 +00:00
dependabot-preview[bot]
34b3b7e1e3 Merge pull request #409 from amir20/dependabot/npm_and_yarn/babel-jest-25.5.0 2020-04-28 20:29:06 +00:00
dependabot-preview[bot]
11067205e9 Bump babel-jest from 25.4.0 to 25.5.0
Bumps [babel-jest](https://github.com/facebook/jest/tree/HEAD/packages/babel-jest) from 25.4.0 to 25.5.0.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/commits/v25.5.0/packages/babel-jest)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-28 20:22:58 +00:00
dependabot-preview[bot]
753e909411 Merge pull request #410 from amir20/dependabot/npm_and_yarn/jest-25.5.0 2020-04-28 20:20:51 +00:00
dependabot-preview[bot]
14d2ae53bc Bump jest from 25.4.0 to 25.5.0
Bumps [jest](https://github.com/facebook/jest) from 25.4.0 to 25.5.0.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v25.4.0...v25.5.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-28 20:14:54 +00:00
dependabot-preview[bot]
93ab440dd9 Merge pull request #408 from amir20/dependabot/npm_and_yarn/integration/jest-25.5.0 2020-04-28 19:57:26 +00:00
dependabot-preview[bot]
612cf9408f Bump jest from 25.4.0 to 25.5.0 in /integration
Bumps [jest](https://github.com/facebook/jest) from 25.4.0 to 25.5.0.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v25.4.0...v25.5.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-28 19:52:41 +00:00
Amir Raminfar
da6287d060 Release 1.22.6 2020-04-28 10:50:28 -07:00
Amir Raminfar
b84b5a2d8d Uses specific imports 2020-04-28 08:21:06 -07:00
dependabot-preview[bot]
b219c984c4 Merge pull request #407 from amir20/dependabot/npm_and_yarn/lint-staged-10.2.0 2020-04-28 15:06:01 +00:00
dependabot-preview[bot]
b11dc46d7b Bump lint-staged from 10.1.7 to 10.2.0
Bumps [lint-staged](https://github.com/okonet/lint-staged) from 10.1.7 to 10.2.0.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v10.1.7...v10.2.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-28 15:00:52 +00:00
dependabot-preview[bot]
bff0f0a5bb Merge pull request #406 from amir20/dependabot/npm_and_yarn/release-it-13.5.7 2020-04-28 12:17:42 +00:00
dependabot-preview[bot]
61637599d8 Bump release-it from 13.5.6 to 13.5.7
Bumps [release-it](https://github.com/release-it/release-it) from 13.5.6 to 13.5.7.
- [Release notes](https://github.com/release-it/release-it/releases)
- [Changelog](https://github.com/release-it/release-it/blob/master/CHANGELOG.md)
- [Commits](https://github.com/release-it/release-it/compare/13.5.6...13.5.7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-28 12:12:48 +00:00
Amir Raminfar
d9642eec3f Release 1.22.5 2020-04-27 15:07:21 -07:00
Amir Raminfar
d277b4e878 Fixes bad date 2020-04-27 15:07:04 -07:00
Amir Raminfar
e84c9c874b Adds relative date debug console 2020-04-27 14:50:50 -07:00
Amir Raminfar
682822eef7 Adds debug mode 2020-04-27 14:35:56 -07:00
Amir Raminfar
9fcbcadba7 Release 1.22.4 2020-04-27 12:44:05 -07:00
Amir Raminfar
198ba36dbd Fixes user/pass 2020-04-27 12:36:50 -07:00
Amir Raminfar
3a48f9f194 Adds latest docker 2020-04-27 12:35:20 -07:00
Amir Raminfar
df0b584c8e Fixes key 2020-04-27 12:14:12 -07:00
Raphael Piccolo
d794ca1c7f support more timestamp formats (#405) 2020-04-27 12:03:51 -07:00
dependabot-preview[bot]
00c143a8c8 Merge pull request #404 from amir20/dependabot/npm_and_yarn/release-it-13.5.6 2020-04-27 18:20:39 +00:00
dependabot-preview[bot]
c2d8f330af Bump release-it from 13.5.5 to 13.5.6
Bumps [release-it](https://github.com/release-it/release-it) from 13.5.5 to 13.5.6.
- [Release notes](https://github.com/release-it/release-it/releases)
- [Changelog](https://github.com/release-it/release-it/blob/master/CHANGELOG.md)
- [Commits](https://github.com/release-it/release-it/compare/13.5.5...13.5.6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-27 18:15:28 +00:00
dependabot-preview[bot]
c5d89dc981 Merge pull request #402 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001048 2020-04-25 17:42:52 +00:00
dependabot-preview[bot]
784bc40e76 Bump caniuse-lite from 1.0.30001047 to 1.0.30001048
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001047 to 1.0.30001048.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001047...v1.0.30001048)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-25 17:37:09 +00:00
dependabot-preview[bot]
74e13abded Merge pull request #401 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001047 2020-04-25 16:45:12 +00:00
dependabot-preview[bot]
2519bf2815 Bump caniuse-lite from 1.0.30001046 to 1.0.30001047
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001046 to 1.0.30001047.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001046...v1.0.30001047)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-25 16:39:51 +00:00
dependabot-preview[bot]
7b0477755d Merge pull request #400 from amir20/dependabot/npm_and_yarn/buefy-0.8.17 2020-04-25 16:02:45 +00:00
dependabot-preview[bot]
a6cec39b16 Bump buefy from 0.8.16 to 0.8.17
Bumps [buefy](https://github.com/buefy/buefy) from 0.8.16 to 0.8.17.
- [Release notes](https://github.com/buefy/buefy/releases)
- [Changelog](https://github.com/buefy/buefy/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/buefy/buefy/compare/v0.8.16...v0.8.17)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-25 15:56:41 +00:00
dependabot-preview[bot]
277648b4ff Merge pull request #399 from amir20/dependabot/npm_and_yarn/vuex-3.3.0 2020-04-25 06:18:44 +00:00
dependabot-preview[bot]
b76f0aa3f8 Bump vuex from 3.2.0 to 3.3.0
Bumps [vuex](https://github.com/vuejs/vuex) from 3.2.0 to 3.3.0.
- [Release notes](https://github.com/vuejs/vuex/releases)
- [Changelog](https://github.com/vuejs/vuex/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vuex/compare/v3.2.0...v3.3.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-25 06:13:16 +00:00
dependabot-preview[bot]
5a35458586 Merge pull request #398 from amir20/dependabot/npm_and_yarn/concurrently-5.2.0 2020-04-25 04:19:45 +00:00
dependabot-preview[bot]
fb0bec2950 Bump concurrently from 5.1.0 to 5.2.0
Bumps [concurrently](https://github.com/kimmobrunfeldt/concurrently) from 5.1.0 to 5.2.0.
- [Release notes](https://github.com/kimmobrunfeldt/concurrently/releases)
- [Commits](https://github.com/kimmobrunfeldt/concurrently/compare/v5.1.0...v5.2.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-25 04:14:13 +00:00
dependabot-preview[bot]
7af36da76e Merge pull request #397 from amir20/dependabot/npm_and_yarn/sass-1.26.5 2020-04-24 03:08:43 +00:00
dependabot-preview[bot]
4017da77fb Bump sass from 1.26.3 to 1.26.5
Bumps [sass](https://github.com/sass/dart-sass) from 1.26.3 to 1.26.5.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.26.3...1.26.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-24 03:02:27 +00:00
Amir Raminfar
6f336bbcae Verifies go mod 2020-04-23 13:55:40 -07:00
dependabot-preview[bot]
6db4c9ba65 Merge pull request #395 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001046 2020-04-23 10:40:07 +00:00
dependabot-preview[bot]
8fb35f9ff6 Bump caniuse-lite from 1.0.30001045 to 1.0.30001046
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001045 to 1.0.30001046.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001045...v1.0.30001046)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-23 10:34:44 +00:00
dependabot-preview[bot]
e41e34d45c Merge pull request #394 from amir20/dependabot/npm_and_yarn/buefy-0.8.16 2020-04-22 21:57:34 +00:00
dependabot-preview[bot]
cb82e5d221 Bump buefy from 0.8.15 to 0.8.16
Bumps [buefy](https://github.com/buefy/buefy) from 0.8.15 to 0.8.16.
- [Release notes](https://github.com/buefy/buefy/releases)
- [Changelog](https://github.com/buefy/buefy/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/buefy/buefy/compare/v0.8.15...v0.8.16)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-22 21:52:26 +00:00
dependabot-preview[bot]
23aba02e41 Merge pull request #393 from amir20/dependabot/npm_and_yarn/prettier-2.0.5 2020-04-21 17:28:01 +00:00
dependabot-preview[bot]
c281818579 Bump prettier from 2.0.4 to 2.0.5
Bumps [prettier](https://github.com/prettier/prettier) from 2.0.4 to 2.0.5.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/master/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/2.0.4...2.0.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-21 17:22:16 +00:00
Amir Raminfar
42a8a9af80 Moves demo 2020-04-21 10:14:53 -07:00
Amir Raminfar
33e86ac18e Moves demo 2020-04-21 10:14:30 -07:00
dependabot-preview[bot]
b4dae48a5e Merge pull request #392 from amir20/dependabot/npm_and_yarn/release-it-13.5.5 2020-04-21 16:44:55 +00:00
dependabot-preview[bot]
8b9704bc69 Bump release-it from 13.5.4 to 13.5.5
Bumps [release-it](https://github.com/release-it/release-it) from 13.5.4 to 13.5.5.
- [Release notes](https://github.com/release-it/release-it/releases)
- [Changelog](https://github.com/release-it/release-it/blob/master/CHANGELOG.md)
- [Commits](https://github.com/release-it/release-it/compare/13.5.4...13.5.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-21 16:23:50 +00:00
dependabot-preview[bot]
def504ca04 Merge pull request #391 from amir20/dependabot/npm_and_yarn/lint-staged-10.1.7 2020-04-21 15:12:33 +00:00
dependabot-preview[bot]
451dbefc93 Bump lint-staged from 10.1.6 to 10.1.7
Bumps [lint-staged](https://github.com/okonet/lint-staged) from 10.1.6 to 10.1.7.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v10.1.6...v10.1.7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-21 15:07:48 +00:00
dependabot-preview[bot]
1e35ffb1fe Merge pull request #390 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001045 2020-04-21 10:46:33 +00:00
dependabot-preview[bot]
570b0246b7 Bump caniuse-lite from 1.0.30001043 to 1.0.30001045
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001043 to 1.0.30001045.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001043...v1.0.30001045)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-21 10:41:55 +00:00
dependabot-preview[bot]
b91360220c Merge pull request #389 from amir20/dependabot/npm_and_yarn/integration/jest-25.4.0 2020-04-20 13:50:18 +00:00
dependabot-preview[bot]
1c82ba87ba Bump jest from 25.3.0 to 25.4.0 in /integration
Bumps [jest](https://github.com/facebook/jest) from 25.3.0 to 25.4.0.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v25.3.0...v25.4.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-20 13:44:57 +00:00
dependabot-preview[bot]
14e64b8460 Merge pull request #388 from amir20/dependabot/npm_and_yarn/integration/jest-image-snapshot-3.1.0 2020-04-20 13:43:19 +00:00
dependabot-preview[bot]
314549c038 Bump jest-image-snapshot from 3.0.1 to 3.1.0 in /integration
Bumps [jest-image-snapshot](https://github.com/americanexpress/jest-image-snapshot) from 3.0.1 to 3.1.0.
- [Release notes](https://github.com/americanexpress/jest-image-snapshot/releases)
- [Changelog](https://github.com/americanexpress/jest-image-snapshot/blob/master/CHANGELOG.md)
- [Commits](https://github.com/americanexpress/jest-image-snapshot/compare/v3.0.1...v3.1.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-20 13:38:00 +00:00
Amir Raminfar
df059f7e63 Adds missing routes 2020-04-19 17:11:43 -07:00
Amir Raminfar
2a620d8c6e Moves routes to own file 2020-04-19 17:05:21 -07:00
dependabot-preview[bot]
ba0de92f84 Merge pull request #386 from amir20/dependabot/npm_and_yarn/jest-25.4.0 2020-04-19 22:49:40 +00:00
dependabot-preview[bot]
38fd3dd372 Bump jest from 25.3.0 to 25.4.0
Bumps [jest](https://github.com/facebook/jest) from 25.3.0 to 25.4.0.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v25.3.0...v25.4.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-19 22:44:21 +00:00
dependabot-preview[bot]
14b5eac802 Merge pull request #385 from amir20/dependabot/npm_and_yarn/babel-jest-25.4.0 2020-04-19 22:31:12 +00:00
dependabot-preview[bot]
25fc2710fc Bump babel-jest from 25.3.0 to 25.4.0
Bumps [babel-jest](https://github.com/facebook/jest/tree/HEAD/packages/babel-jest) from 25.3.0 to 25.4.0.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/commits/v25.4.0/packages/babel-jest)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-19 22:20:31 +00:00
dependabot-preview[bot]
54fff1e191 Merge pull request #384 from amir20/dependabot/npm_and_yarn/vuex-3.2.0 2020-04-19 11:21:41 +00:00
dependabot-preview[bot]
0f7a940e11 Bump vuex from 3.1.3 to 3.2.0
Bumps [vuex](https://github.com/vuejs/vuex) from 3.1.3 to 3.2.0.
- [Release notes](https://github.com/vuejs/vuex/releases)
- [Changelog](https://github.com/vuejs/vuex/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vuex/compare/v3.1.3...v3.2.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-19 11:16:01 +00:00
dependabot-preview[bot]
b53895dead Merge pull request #383 from amir20/dependabot/npm_and_yarn/lint-staged-10.1.6 2020-04-19 09:58:01 +00:00
dependabot-preview[bot]
d0cb1cad44 Bump lint-staged from 10.1.5 to 10.1.6
Bumps [lint-staged](https://github.com/okonet/lint-staged) from 10.1.5 to 10.1.6.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v10.1.5...v10.1.6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-19 09:52:41 +00:00
dependabot-preview[bot]
ebdd78d6b0 Merge pull request #382 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001043 2020-04-19 04:48:14 +00:00
dependabot-preview[bot]
3f5be54938 Bump caniuse-lite from 1.0.30001042 to 1.0.30001043
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001042 to 1.0.30001043.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001042...v1.0.30001043)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-19 04:42:24 +00:00
dependabot-preview[bot]
fca8ef26c5 Merge pull request #381 from amir20/dependabot/npm_and_yarn/lint-staged-10.1.5 2020-04-18 08:28:05 +00:00
dependabot-preview[bot]
aa12682a42 Bump lint-staged from 10.1.4 to 10.1.5
Bumps [lint-staged](https://github.com/okonet/lint-staged) from 10.1.4 to 10.1.5.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v10.1.4...v10.1.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-18 08:22:40 +00:00
dependabot-preview[bot]
bfa3714634 Merge pull request #380 from amir20/dependabot/npm_and_yarn/release-it-13.5.4 2020-04-17 15:37:53 +00:00
dependabot-preview[bot]
a7c3ee024b Bump release-it from 13.5.3 to 13.5.4
Bumps [release-it](https://github.com/release-it/release-it) from 13.5.3 to 13.5.4.
- [Release notes](https://github.com/release-it/release-it/releases)
- [Changelog](https://github.com/release-it/release-it/blob/master/CHANGELOG.md)
- [Commits](https://github.com/release-it/release-it/compare/13.5.3...13.5.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-17 15:32:42 +00:00
dependabot-preview[bot]
63eb64cbde Merge pull request #379 from amir20/dependabot/npm_and_yarn/lint-staged-10.1.4 2020-04-17 14:17:01 +00:00
dependabot-preview[bot]
fd58b5c248 Bump lint-staged from 10.1.3 to 10.1.4
Bumps [lint-staged](https://github.com/okonet/lint-staged) from 10.1.3 to 10.1.4.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v10.1.3...v10.1.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-17 14:11:01 +00:00
dependabot-preview[bot]
126d121e34 Merge pull request #378 from amir20/dependabot/npm_and_yarn/release-it-13.5.3 2020-04-17 14:08:36 +00:00
dependabot-preview[bot]
30331275f6 Bump release-it from 13.5.2 to 13.5.3
Bumps [release-it](https://github.com/release-it/release-it) from 13.5.2 to 13.5.3.
- [Release notes](https://github.com/release-it/release-it/releases)
- [Changelog](https://github.com/release-it/release-it/blob/master/CHANGELOG.md)
- [Commits](https://github.com/release-it/release-it/compare/13.5.2...13.5.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-17 14:02:06 +00:00
Amir Raminfar
8571dddd98 Release 1.22.3 2020-04-16 15:53:06 -07:00
Amir Raminfar
cf6f3945b5 Updates push.yml 2020-04-16 14:35:03 -07:00
Amir Raminfar
f644f7b9b3 Separates build in push.yml 2020-04-16 14:31:49 -07:00
Amir Raminfar
2e656e8882 Removes DOCKER_API_VERSION 2020-04-16 14:29:19 -07:00
Amir Raminfar
a277b7c00e Release 1.22.2 2020-04-16 14:24:43 -07:00
Amir Raminfar
26d7d1620e Sticky scroll (#377)
* Uses scroll-snap-type: y proximity to behave sticky when resizing windows

* Puts js back
2020-04-16 14:23:48 -07:00
Amir Raminfar
e7b65efc7a Uses client.WithAPIVersionNegotiation 2020-04-16 14:12:08 -07:00
dependabot-preview[bot]
3884eb9648 Merge pull request #376 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001042 2020-04-15 05:59:25 +00:00
dependabot-preview[bot]
c1a02644b6 Bump caniuse-lite from 1.0.30001041 to 1.0.30001042
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001041 to 1.0.30001042.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001041...v1.0.30001042)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-15 05:54:10 +00:00
dependabot-preview[bot]
63135ded8a Merge pull request #375 from amir20/dependabot/npm_and_yarn/semver-7.3.2 2020-04-14 17:53:36 +00:00
dependabot-preview[bot]
ded48ab821 Bump semver from 7.3.1 to 7.3.2
Bumps [semver](https://github.com/npm/node-semver) from 7.3.1 to 7.3.2.
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/master/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v7.3.1...v7.3.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-14 17:47:41 +00:00
dependabot-preview[bot]
c014837e41 Merge pull request #374 from amir20/dependabot/npm_and_yarn/semver-7.3.1 2020-04-14 17:06:11 +00:00
dependabot-preview[bot]
c0768d7843 Bump semver from 7.3.0 to 7.3.1
Bumps [semver](https://github.com/npm/node-semver) from 7.3.0 to 7.3.1.
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/master/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v7.3.0...v7.3.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-14 17:00:10 +00:00
dependabot-preview[bot]
32a6fe1d91 Merge pull request #373 from amir20/dependabot/npm_and_yarn/semver-7.3.0 2020-04-14 01:19:05 +00:00
dependabot-preview[bot]
6187483bc2 Bump semver from 7.2.3 to 7.3.0
Bumps [semver](https://github.com/npm/node-semver) from 7.2.3 to 7.3.0.
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/master/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v7.2.3...v7.3.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-14 01:13:45 +00:00
dependabot-preview[bot]
59143841c9 Merge pull request #372 from amir20/dependabot/npm_and_yarn/semver-7.2.3 2020-04-13 18:41:27 +00:00
dependabot-preview[bot]
f9f22dbdf2 Bump semver from 7.2.2 to 7.2.3
Bumps [semver](https://github.com/npm/node-semver) from 7.2.2 to 7.2.3.
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/master/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v7.2.2...v7.2.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-13 18:35:32 +00:00
dependabot-preview[bot]
3da3a319af Merge pull request #371 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001041 2020-04-13 03:43:36 +00:00
dependabot-preview[bot]
2d5a9a2b42 Bump caniuse-lite from 1.0.30001040 to 1.0.30001041
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001040 to 1.0.30001041.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001040...v1.0.30001041)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-13 03:38:11 +00:00
Amir Raminfar
50d34442b7 Release 1.22.1 2020-04-11 19:39:28 -07:00
Amir Raminfar
d52a4d86e9 Adds settings for timestamp. Fixes #360 (#370)
* Adds settings for timestamp. Fixes #360

* Fixes test

* Updates actions
2020-04-11 19:39:00 -07:00
dependabot-preview[bot]
0b18c00db3 Merge pull request #369 from amir20/dependabot/npm_and_yarn/bulma-0.8.2 2020-04-11 12:31:22 +00:00
dependabot-preview[bot]
561c8372da Bump bulma from 0.8.1 to 0.8.2
Bumps [bulma](https://github.com/jgthms/bulma) from 0.8.1 to 0.8.2.
- [Release notes](https://github.com/jgthms/bulma/releases)
- [Changelog](https://github.com/jgthms/bulma/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jgthms/bulma/compare/0.8.1...0.8.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-11 12:25:54 +00:00
dependabot-preview[bot]
db32fa51aa Merge pull request #368 from amir20/dependabot/npm_and_yarn/semver-7.2.2 2020-04-10 16:10:58 +00:00
dependabot-preview[bot]
6a28fd9474 Bump semver from 7.2.1 to 7.2.2
Bumps [semver](https://github.com/npm/node-semver) from 7.2.1 to 7.2.2.
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/master/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v7.2.1...v7.2.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-10 16:05:32 +00:00
dependabot-preview[bot]
d52961e06e Merge pull request #367 from amir20/dependabot/go_modules/github.com/spf13/viper-1.6.3 2020-04-10 13:22:23 +00:00
dependabot-preview[bot]
969728eb69 Bump github.com/spf13/viper from 1.6.2 to 1.6.3
Bumps [github.com/spf13/viper](https://github.com/spf13/viper) from 1.6.2 to 1.6.3.
- [Release notes](https://github.com/spf13/viper/releases)
- [Commits](https://github.com/spf13/viper/compare/v1.6.2...v1.6.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-10 13:17:38 +00:00
dependabot-preview[bot]
5001340f0d Merge pull request #366 from amir20/dependabot/npm_and_yarn/husky-4.2.5 2020-04-09 21:54:47 +00:00
dependabot-preview[bot]
7d21f2d5db Bump husky from 4.2.4 to 4.2.5
Bumps [husky](https://github.com/typicode/husky) from 4.2.4 to 4.2.5.
- [Release notes](https://github.com/typicode/husky/releases)
- [Changelog](https://github.com/typicode/husky/blob/master/CHANGELOG.md)
- [Commits](https://github.com/typicode/husky/compare/v4.2.4...v4.2.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-09 21:49:19 +00:00
Amir Raminfar
58613fe771 Release 1.22.0 2020-04-09 13:36:11 -07:00
Amir Raminfar
62ab55b1e4 Updates icons to use builtin SVGs instead for no external depend… (#354)
* Use iconmoon

* Adds icons

* Use go to update BASE

* Changes more icons

* Uses html inline

* Reverts css changes

* Fixes icons

* Fixes tests and icons

* Adds --rm to int tests

* Fixes unit tests
2020-04-09 11:06:04 -07:00
dependabot-preview[bot]
6dc0c93588 Merge pull request #365 from amir20/dependabot/npm_and_yarn/date-fns-2.12.0 2020-04-09 17:55:17 +00:00
dependabot-preview[bot]
84e24b9ec8 Bump date-fns from 2.11.1 to 2.12.0
Bumps [date-fns](https://github.com/date-fns/date-fns) from 2.11.1 to 2.12.0.
- [Release notes](https://github.com/date-fns/date-fns/releases)
- [Changelog](https://github.com/date-fns/date-fns/blob/master/CHANGELOG.md)
- [Commits](https://github.com/date-fns/date-fns/compare/v2.11.1...v2.12.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-09 17:49:31 +00:00
dependabot-preview[bot]
f689e9c3d3 Merge pull request #364 from amir20/dependabot/npm_and_yarn/husky-4.2.4 2020-04-09 17:04:52 +00:00
dependabot-preview[bot]
054f1c616f Bump husky from 4.2.3 to 4.2.4
Bumps [husky](https://github.com/typicode/husky) from 4.2.3 to 4.2.4.
- [Release notes](https://github.com/typicode/husky/releases)
- [Changelog](https://github.com/typicode/husky/blob/master/CHANGELOG.md)
- [Commits](https://github.com/typicode/husky/compare/v4.2.3...v4.2.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-09 16:59:14 +00:00
dependabot-preview[bot]
8bfe5b5193 Merge pull request #363 from amir20/dependabot/npm_and_yarn/lint-staged-10.1.3 2020-04-09 14:22:15 +00:00
dependabot-preview[bot]
120f70d39a Bump lint-staged from 10.1.2 to 10.1.3
Bumps [lint-staged](https://github.com/okonet/lint-staged) from 10.1.2 to 10.1.3.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v10.1.2...v10.1.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-09 14:16:08 +00:00
dependabot-preview[bot]
66f5fcd06b Merge pull request #362 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001040 2020-04-09 09:58:17 +00:00
dependabot-preview[bot]
e934639220 Bump caniuse-lite from 1.0.30001039 to 1.0.30001040
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001039 to 1.0.30001040.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001039...v1.0.30001040)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-09 09:53:08 +00:00
Amir Raminfar
52a8d6489d Removes lock 2020-04-08 11:55:37 -07:00
Amir Raminfar
4176202bcc Uses Yarn again with a timeout 2020-04-08 10:29:06 -07:00
dependabot-preview[bot]
09731be502 Merge pull request #359 from amir20/dependabot/npm_and_yarn/babel-jest-25.3.0 2020-04-08 14:30:56 +00:00
dependabot-preview[bot]
aea496422a Bump babel-jest from 25.2.6 to 25.3.0
Bumps [babel-jest](https://github.com/facebook/jest/tree/HEAD/packages/babel-jest) from 25.2.6 to 25.3.0.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/commits/v25.3.0/packages/babel-jest)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-08 14:25:56 +00:00
dependabot-preview[bot]
8970bb7db9 Merge pull request #358 from amir20/dependabot/npm_and_yarn/vue/component-compiler-utils-3.1.2 2020-04-08 14:24:31 +00:00
dependabot-preview[bot]
f4fbdaa42f Merge pull request #357 from amir20/dependabot/npm_and_yarn/jest-25.3.0 2020-04-08 14:23:48 +00:00
dependabot-preview[bot]
07330ecabe Bump @vue/component-compiler-utils from 3.1.1 to 3.1.2
Bumps [@vue/component-compiler-utils](https://github.com/vuejs/component-compiler-utils) from 3.1.1 to 3.1.2.
- [Release notes](https://github.com/vuejs/component-compiler-utils/releases)
- [Changelog](https://github.com/vuejs/component-compiler-utils/blob/master/CHANGELOG.md)
- [Commits](https://github.com/vuejs/component-compiler-utils/compare/v3.1.1...v3.1.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-08 14:19:25 +00:00
dependabot-preview[bot]
c5a3e2a7e7 Bump jest from 25.2.7 to 25.3.0
Bumps [jest](https://github.com/facebook/jest) from 25.2.7 to 25.3.0.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v25.2.7...v25.3.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-08 14:18:47 +00:00
dependabot-preview[bot]
de0de15b5b Merge pull request #356 from amir20/dependabot/npm_and_yarn/integration/jest-25.3.0 2020-04-08 13:36:31 +00:00
dependabot-preview[bot]
b8bd70adc3 Bump jest from 25.2.7 to 25.3.0 in /integration
Bumps [jest](https://github.com/facebook/jest) from 25.2.7 to 25.3.0.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v25.2.7...v25.3.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-08 13:30:49 +00:00
dependabot-preview[bot]
ff11f8e0cc Merge pull request #355 from amir20/dependabot/npm_and_yarn/vue/test-utils-1.0.0-beta.33 2020-04-08 11:26:19 +00:00
dependabot-preview[bot]
7d118fd162 Bump @vue/test-utils from 1.0.0-beta.32 to 1.0.0-beta.33
Bumps [@vue/test-utils](https://github.com/vuejs/vue-test-utils/tree/HEAD/packages/test-utils) from 1.0.0-beta.32 to 1.0.0-beta.33.
- [Release notes](https://github.com/vuejs/vue-test-utils/releases)
- [Changelog](https://github.com/vuejs/vue-test-utils/blob/dev/packages/test-utils/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-test-utils/commits/v1.0.0-beta.33/packages/test-utils)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-08 11:20:40 +00:00
Amir Raminfar
6a01e0ca16 Release 1.21.9 2020-04-07 15:33:47 -07:00
Amir Raminfar
12ec8189f3 Tries to fix build 2020-04-07 15:28:34 -07:00
60 changed files with 5956 additions and 4526 deletions

View File

@@ -1,9 +1,8 @@
{
"presets": [["@babel/preset-env", { "modules": false }]],
"plugins": [["@babel/plugin-transform-runtime", { "regenerator": true }]],
"presets": [["env", { "modules": false }]],
"env": {
"test": {
"presets": [["@babel/preset-env", { "targets": { "node": "current" } }]]
"presets": [["env", { "targets": { "node": "current" } }]]
}
}
}

View File

@@ -4,4 +4,5 @@ node_modules
dist
.git
static
integration
integration
demo.gif

View File

Before

Width:  |  Height:  |  Size: 24 MiB

After

Width:  |  Height:  |  Size: 24 MiB

View File

@@ -5,17 +5,19 @@ on:
name: Test and Release
jobs:
npm-test:
name: npm test
name: JavaScript Tests
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: npm test
- name: Install Node
uses: actions/setup-node@v1
- name: npm it
run: npm it
- name: Install depdencies
run: yarn
- name: Run Tests
run: yarn test
go-test:
name: go test
name: Go Tests
runs-on: ubuntu-latest
steps:
- name: Install Go
@@ -24,10 +26,21 @@ jobs:
go-version: 1.14.x
- name: Checkout code
uses: actions/checkout@v2
- name: Test
- name: Run Go Tests with Coverage
run: go test -cover ./...
buildx:
int-test:
needs: [go-test, npm-test]
name: Integration Tests
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Build images
run: docker-compose -f integration/docker-compose.test.yml build
- name: Run tests
run: docker-compose -f integration/docker-compose.test.yml run integration
buildx:
needs: [int-test]
name: Release
runs-on: ubuntu-latest
steps:
@@ -37,7 +50,8 @@ jobs:
id: buildx
uses: crazy-max/ghaction-docker-buildx@v1
with:
version: latest
buildx-version: latest
qemu-version: latest
- name: Available platforms
run: echo ${{ steps.buildx.outputs.platforms }}
- name: Docker Login

View File

@@ -2,17 +2,19 @@ on: push
name: Test
jobs:
npm-test:
name: npm test
name: JavaScript Tests
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Install Node
uses: actions/setup-node@v1
- name: Run NPM Tests
run: npm it
- name: Install depdencies
run: yarn
- name: Run Tests
run: yarn test
go-test:
name: go test
name: Go Tests
runs-on: ubuntu-latest
steps:
- name: Install Go
@@ -21,13 +23,15 @@ jobs:
go-version: 1.14.x
- name: Checkout code
uses: actions/checkout@v2
- name: Run Go Tests
- name: Run Go Tests with Coverage
run: go test -cover ./...
docker-build:
int-test:
name: Integration Tests
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Build images
run: docker-compose -f integration/docker-compose.test.yml build
- name: Run tests
run: docker-compose -f integration/docker-compose.test.yml run integration

3
.prettierrc.js Normal file
View File

@@ -0,0 +1,3 @@
module.exports = {
printWidth: 120,
};

View File

@@ -1,3 +0,0 @@
{
"printWidth": 120
}

View File

@@ -1 +1 @@
-r '\.go$' -R '^node_modules/' -R '^static/' -R '^.cache/' -G '*_test.go' -s -- go run main.go --level debug
-r '\.go$' -R '^node_modules/' -R '^static/' -R '^.cache/' -G '*_test.go' -s -- go run main.go routes.go --level debug

View File

@@ -1,13 +1,16 @@
# Build assets
FROM node:13-alpine as node
FROM node:14-alpine as node
RUN apk add --no-cache git openssh python make g++ util-linux
WORKDIR /build
# Install dependencies
COPY package.json yarn.lock ./
RUN yarn
COPY package*.json yarn.lock ./
RUN yarn install --network-timeout 1000000
# Copy config files
COPY .* webpack*.js ./
# Copy assets to build
COPY assets ./assets
@@ -15,7 +18,6 @@ COPY assets ./assets
# Do the build
RUN yarn build
FROM golang:1.14-alpine AS builder
RUN apk add --no-cache git ca-certificates
@@ -48,7 +50,6 @@ RUN CGO_ENABLED=0 go build -ldflags "-s -w -X main.version=$TAG" -o dozzle
FROM scratch
ENV PATH=/bin
ENV DOCKER_API_VERSION 1.38
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
COPY --from=builder /dozzle/dozzle /dozzle

View File

@@ -6,13 +6,13 @@
# Dozzle - [dozzle.dev](https://dozzle.dev/)
Dozzle is a real-time log viewer for Docker. It's free. It's small. And it's in your browser.
Dozzle is a simple, lightweight application that provides you with a web based interface to monitor your Docker container logs live. It doesnt store log information, it is for live monitoring of your container logs only.
While dozzle should work for most, it is not meant to be a full logging solution. For enterprise use, I recommend you look at [Loggly](https://www.loggly.com), [Papertrail](https://papertrailapp.com) or [Kibana](https://www.elastic.co/products/kibana).
While dozzle should work for most, it is not meant to be a full logging solution. For enterprise applications, products like [Loggly](https://www.loggly.com), [Papertrail](https://papertrailapp.com) or [Kibana](https://www.elastic.co/products/kibana) are more suited.
But if you don't want to pay for these services, then Dozzle can help! Dozzle will be able to capture all logs from your containers and send them in real-time to your browser. Installation is also very easy. Dozzle is not a database. It does not store or save any logs. You can only see live logs while using Dozzle.
Dozzle doesn't cost any money. Dozzle aims to stay simple, small and free.
![Image](demo.gif)
![Image](https://github.com/amir20/dozzle/blob/master/.github/demo.gif?raw=true)
## Getting dozzle
@@ -81,11 +81,51 @@ Dozzle follows the [12-factor](https://12factor.net/) model. Configurations can
| `--addr` | `DOZZLE_ADDR` | `:8080` |
| `--base` | `DOZZLE_BASE` | `/` |
| `--level` | `DOZZLE_LEVEL` | `info` |
| `--showAll` | `DOZZLE_SHOWALL` | `false` |
| n/a | `DOCKER_API_VERSION` | `1.38` |
| n/a | `DOCKER_API_VERSION` | not set |
| `--tailSize` | `DOZZLE_TAILSIZE` | `300` |
| `--filter` | `DOZZLE_FILTER` | `""` |
## Troubleshooting and FAQs
<details>
<summary>I installed Dozzle, but logs are slow or they never load. Help!</summary>
Dozzle uses Server Sent Events (SSE) which connects to a sever using a HTTP stream without closing the connection. If any proxy tries to buffer this connection, then Dozzle never receives the data and hangs forever waiting for the reverse proxy to flush the buffer. Since version `1.23.0`, Dozzle send the `X-Accel-Buffering: no` header which should stop reverse proxies buffering. However, some proxies may ignore this header. In those case, you need to explicitly disable any buffering.
Below is an example with nginx and using `proxy_pass` to disable buffering.
```
server {
...
location / {
proxy_pass http://<dozzle.container.ip.address>:8080;
}
location /api {
proxy_pass http://<dozzle.container.ip.address>:8080;
proxy_buffering off;
proxy_cache off;
}
}
```
</details>
<details>
<summary>What data does Dozzle collect?</summary>
Dozzle does not collect any metrics or analytics. Dozzle has a [strict](https://github.com/amir20/dozzle/blob/master/routes.go#L33-L38) Content Security Policy which only allows the following policies:
- Allow connect to `api.github.com` to fetch most recent version.
- Allow fonts from `fonts.gstatic.com` and styles from `fonts.googleapis.com`
- Only allow `<script>` and `<style>` files from `self`
Dozzle opens all links with `rel="noopener"`.
</details>
## License
[MIT](LICENSE)
@@ -101,4 +141,3 @@ To Build and test locally:
5. Install node modules with `npm install`.
6. Do `npm start`
Instructions for Github actions can be found [here](.github/goreleaser/Dockerfile) which build and tests Dozzle.

View File

@@ -1,6 +1,7 @@
/* snapshot: Test_createRoutes_foobar */
HTTP/1.1 200 OK
Connection: close
Content-Security-Policy: default-src 'none'; script-src 'self'; style-src 'self' 'unsafe-inline' fonts.googleapis.com; img-src 'self'; manifest-src 'self'; font-src fonts.gstatic.com; connect-src 'self' api.github.com; require-trusted-types-for 'script'
Content-Type: text/plain; charset=utf-8
foo page
@@ -8,6 +9,7 @@ foo page
/* snapshot: Test_createRoutes_index */
HTTP/1.1 200 OK
Connection: close
Content-Security-Policy: default-src 'none'; script-src 'self'; style-src 'self' 'unsafe-inline' fonts.googleapis.com; img-src 'self'; manifest-src 'self'; font-src fonts.gstatic.com; connect-src 'self' api.github.com; require-trusted-types-for 'script'
Content-Type: text/plain; charset=utf-8
index page
@@ -15,6 +17,7 @@ index page
/* snapshot: Test_createRoutes_redirect */
HTTP/1.1 301 Moved Permanently
Connection: close
Content-Security-Policy: default-src 'none'; script-src 'self'; style-src 'self' 'unsafe-inline' fonts.googleapis.com; img-src 'self'; manifest-src 'self'; font-src fonts.gstatic.com; connect-src 'self' api.github.com; require-trusted-types-for 'script'
Content-Type: text/html; charset=utf-8
Location: /foobar/
@@ -23,6 +26,7 @@ Location: /foobar/
/* snapshot: Test_createRoutes_version */
HTTP/1.1 200 OK
Connection: close
Content-Security-Policy: default-src 'none'; script-src 'self'; style-src 'self' 'unsafe-inline' fonts.googleapis.com; img-src 'self'; manifest-src 'self'; font-src fonts.gstatic.com; connect-src 'self' api.github.com; require-trusted-types-for 'script'
Content-Type: text/plain; charset=utf-8
dev
@@ -39,14 +43,16 @@ HTTP/1.1 200 OK
Connection: close
Cache-Control: no-cache
Connection: keep-alive
Content-Type: text/event-stream
Content-Type: text/event-stream
X-Accel-Buffering: no
/* snapshot: Test_handler_streamEvents_error_request */
HTTP/1.1 200 OK
Connection: close
Cache-Control: no-cache
Connection: keep-alive
Content-Type: text/event-stream
Content-Type: text/event-stream
X-Accel-Buffering: no
/* snapshot: Test_handler_streamEvents_happy */
HTTP/1.1 200 OK
@@ -54,12 +60,13 @@ Connection: close
Cache-Control: no-cache
Connection: keep-alive
Content-Type: text/event-stream
X-Accel-Buffering: no
event: containers-changed
data: start
/* snapshot: Test_handler_streamLogs_error_finding_container */
HTTP/1.1 500 Internal Server Error
HTTP/1.1 404 Not Found
Connection: close
Content-Type: text/plain; charset=utf-8
X-Content-Type-Options: nosniff
@@ -71,7 +78,8 @@ HTTP/1.1 200 OK
Connection: close
Cache-Control: no-cache
Connection: keep-alive
Content-Type: text/event-stream
Content-Type: text/event-stream
X-Accel-Buffering: no
/* snapshot: Test_handler_streamLogs_happy */
HTTP/1.1 200 OK
@@ -79,5 +87,28 @@ Connection: close
Cache-Control: no-cache
Connection: keep-alive
Content-Type: text/event-stream
X-Accel-Buffering: no
data: INFO Testing logs...
data: INFO Testing logs...
/* snapshot: Test_handler_streamLogs_happy_container_stopped */
HTTP/1.1 200 OK
Connection: close
Cache-Control: no-cache
Connection: keep-alive
Content-Type: text/event-stream
X-Accel-Buffering: no
event: container-stopped
data: end of stream
/* snapshot: Test_handler_streamLogs_happy_with_id */
HTTP/1.1 200 OK
Connection: close
Cache-Control: no-cache
Connection: keep-alive
Content-Type: text/event-stream
X-Accel-Buffering: no
data: 2020-05-13T18:55:37.772853839Z INFO Testing logs...
id: 2020-05-13T18:55:37.772853839Z

View File

@@ -3,40 +3,42 @@ import { shallowMount, RouterLinkStub, createLocalVue } from "@vue/test-utils";
import Vuex from "vuex";
import App from "./App";
jest.mock("./store/config.js", () => ({ base: "" }));
const localVue = createLocalVue();
localVue.use(Vuex);
describe("<App />", () => {
const stubs = { RouterLink: RouterLinkStub, "router-view": true, "ion-icon": true };
const stubs = { RouterLink: RouterLinkStub, "router-view": true, icon: true };
let store;
beforeEach(() => {
global.BASE_PATH = "";
global.EventSource = EventSource;
const state = {
containers: [
{ id: "abc", name: "Test 1" },
{ id: "xyz", name: "Test 2" }
],
settings: { menuWidth: 15 }
settings: { menuWidth: 15 },
};
const getters = {
visibleContainers() {
return [
{ id: "abc", name: "Test 1" },
{ id: "xyz", name: "Test 2" },
];
},
};
const actions = {
FETCH_CONTAINERS: () => Promise.resolve()
FETCH_CONTAINERS: () => Promise.resolve(),
};
store = new Vuex.Store({
state,
actions
getters,
actions,
});
});
test("is a Vue instance", async () => {
const wrapper = shallowMount(App, { stubs, store, localVue });
expect(wrapper.isVueInstance()).toBeTruthy();
});
test("has right title", async () => {
const wrapper = shallowMount(App, { stubs, store, localVue });
await wrapper.vm.$nextTick();

View File

@@ -1,4 +1,4 @@
<template lang="html">
<template>
<main>
<mobile-menu v-if="isMobile"></mobile-menu>
@@ -31,7 +31,7 @@
v-if="!isMobile"
>
<span class="icon">
<ion-icon :name="collapseNav ? 'arrow-dropright' : 'arrow-dropleft'" size="large"></ion-icon>
<icon :name="collapseNav ? 'chevron-right' : 'chevron-left'"></icon>
</span>
</button>
</main>
@@ -47,10 +47,12 @@ import SideMenu from "./components/SideMenu";
import MobileMenu from "./components/MobileMenu";
import Search from "./components/Search";
import ContainerTitle from "./components/ContainerTitle";
import Icon from "./components/Icon";
export default {
name: "App",
components: {
Icon,
LogViewerWithSource,
SideMenu,
MobileMenu,
@@ -74,7 +76,7 @@ export default {
},
async created() {
await this.fetchContainerList();
this.title = `${this.containers.length} containers`;
this.title = `${this.visibleContainers.length} containers`;
},
mounted() {
if (this.hasSmallerScrollbars) {
@@ -92,7 +94,8 @@ export default {
},
},
computed: {
...mapState(["containers", "activeContainers", "isMobile", "settings"]),
...mapState(["activeContainers", "isMobile", "settings"]),
...mapGetters(["visibleContainers"]),
hasSmallerScrollbars() {
return this.settings.smallerScrollbars;
},
@@ -114,8 +117,8 @@ export default {
</script>
<style scoped lang="scss">
::v-deep .splitpanes__splitter {
min-width: 4px;
::v-deep .splitpanes--vertical > .splitpanes__splitter {
min-width: 3px;
background: #666;
&:hover {
background: rgb(255, 221, 87);

View File

@@ -45,9 +45,8 @@ exports[`<App /> renders correctly 1`] = `
<span
class="icon"
>
<ion-icon-stub
name="arrow-dropleft"
size="large"
<icon-stub
name="chevron-left"
/>
</span>
</button>

View File

@@ -1,4 +1,4 @@
<template lang="html">
<template>
<div class="name columns is-marginless">
<span class="column">{{ value }}</span>
<span class="column is-narrow" v-if="closable">

View File

@@ -0,0 +1,32 @@
<template functional>
<svg class="icomoon" :class="['icon-' + props.name]">
<use :href="'#icon-' + props.name"></use>
</svg>
</template>
<script>
export default {
props: {
name: {
required: true,
type: String,
},
},
name: "Icon",
};
</script>
<style lang="scss" scoped>
.icomoon {
display: inline-block;
width: 1em;
height: 1em;
stroke-width: 0;
stroke: currentColor;
fill: currentColor;
.icon:not(.keep-size) & {
width: 100%;
height: 100%;
}
}
</style>

View File

@@ -1,4 +1,4 @@
<template lang="html">
<template>
<div ref="observer" class="control" :class="{ 'is-loading': isLoading }"></div>
</template>

View File

@@ -3,7 +3,6 @@ import EventSource from "eventsourcemock";
import { sources } from "eventsourcemock";
import { shallowMount, mount, createLocalVue } from "@vue/test-utils";
import Vuex from "vuex";
import MockDate from "mockdate";
import LogEventSource from "./LogEventSource.vue";
import LogViewer from "./LogViewer.vue";
@@ -13,13 +12,12 @@ jest.mock("lodash.debounce", () =>
})
);
jest.mock("../store/config.js", () => ({ base: "" }));
describe("<LogEventSource />", () => {
beforeEach(() => {
global.BASE_PATH = "";
global.EventSource = EventSource;
MockDate.set("6/12/2019", 0);
window.scrollTo = jest.fn();
const observe = jest.fn();
const unobserve = jest.fn();
global.IntersectionObserver = jest.fn(() => ({
@@ -29,15 +27,13 @@ describe("<LogEventSource />", () => {
debounce.mockClear();
});
afterEach(() => MockDate.reset());
function createLogEventSource(searchFilter = null) {
const localVue = createLocalVue();
localVue.use(Vuex);
localVue.component("log-viewer", LogViewer);
const state = { searchFilter, settings: { size: "medium" } };
const state = { searchFilter, settings: { size: "medium", showTimestamp: true } };
const store = new Vuex.Store({
state,
@@ -55,24 +51,9 @@ describe("<LogEventSource />", () => {
});
}
test("is a Vue instance", async () => {
const wrapper = shallowMount(LogEventSource);
expect(wrapper.isVueInstance()).toBeTruthy();
});
test("renders correctly", async () => {
const wrapper = createLogEventSource();
expect(wrapper.element).toMatchInlineSnapshot(`
<div>
<div
class="control"
/>
<ul
class="events medium"
/>
</div>
`);
expect(wrapper.element).toMatchSnapshot();
});
test("should connect to EventSource", async () => {
@@ -105,11 +86,28 @@ describe("<LogEventSource />", () => {
`);
});
test("should parse messages with loki's timestamp format", async () => {
const wrapper = createLogEventSource();
sources["/api/logs/stream?id=abc"].emitOpen();
sources["/api/logs/stream?id=abc"].emitMessage({ data: `2020-04-27T12:35:43.272974324+02:00 xxxxx` });
const [message, _] = wrapper.vm.messages;
const { key, ...messageWithoutKey } = message;
expect(key).toBe("2020-04-27T12:35:43.272974324+02:00");
expect(messageWithoutKey).toMatchInlineSnapshot(`
Object {
"date": 2020-04-27T10:35:43.272Z,
"message": "xxxxx",
}
`);
});
test("should pass messages to slot", async () => {
const wrapper = createLogEventSource();
sources["/api/logs/stream?id=abc"].emitOpen();
sources["/api/logs/stream?id=abc"].emitMessage({ data: `2019-06-12T10:55:42.459034602Z "This is a message."` });
const [message, _] = wrapper.find(LogViewer).vm.messages;
const [message, _] = wrapper.findComponent(LogViewer).vm.messages;
const { key, ...messageWithoutKey } = message;
@@ -123,64 +121,80 @@ describe("<LogEventSource />", () => {
`);
});
test("should render messages", async () => {
const wrapper = createLogEventSource();
sources["/api/logs/stream?id=abc"].emitOpen();
sources["/api/logs/stream?id=abc"].emitMessage({ data: `2019-06-12T10:55:42.459034602Z "This is a message."` });
describe("render html correctly", () => {
const RealDate = Date;
beforeAll(() => {
global.Date = class extends RealDate {
constructor(arg) {
if (arg) {
return new RealDate(arg);
} else {
return new RealDate(1560336936000);
}
}
};
});
afterAll(() => (global.Date = RealDate));
await wrapper.vm.$nextTick();
expect(wrapper.find("ul.events")).toMatchInlineSnapshot(`
<ul class="events medium">
<li><span class="date">today at 10:55 AM</span> <span class="text">"This is a message."</span></li>
</ul>
`);
});
test("should render messages", async () => {
const wrapper = createLogEventSource();
sources["/api/logs/stream?id=abc"].emitOpen();
sources["/api/logs/stream?id=abc"].emitMessage({ data: `2019-06-12T10:55:42.459034602Z "This is a message."` });
test("should render messages with color", async () => {
const wrapper = createLogEventSource();
sources["/api/logs/stream?id=abc"].emitOpen();
sources["/api/logs/stream?id=abc"].emitMessage({
data: `2019-06-12T10:55:42.459034602Z \x1b[30mblack\x1b[37mwhite`,
await wrapper.vm.$nextTick();
expect(wrapper.find("ul.events")).toMatchInlineSnapshot(`
<ul class="events medium">
<li class=""><span class="date">today at 10:55 AM</span> <span class="text">"This is a message."</span></li>
</ul>
`);
});
await wrapper.vm.$nextTick();
expect(wrapper.find("ul.events")).toMatchInlineSnapshot(`
<ul class="events medium">
<li><span class="date">today at 10:55 AM</span> <span class="text"><span style="color:#000">black<span style="color:#AAA">white</span></span></span></li>
</ul>
`);
});
test("should render messages with color", async () => {
const wrapper = createLogEventSource();
sources["/api/logs/stream?id=abc"].emitOpen();
sources["/api/logs/stream?id=abc"].emitMessage({
data: `2019-06-12T10:55:42.459034602Z \x1b[30mblack\x1b[37mwhite`,
});
test("should render messages with html entities", async () => {
const wrapper = createLogEventSource();
sources["/api/logs/stream?id=abc"].emitOpen();
sources["/api/logs/stream?id=abc"].emitMessage({
data: `2019-06-12T10:55:42.459034602Z <test>foo bar</test>`,
await wrapper.vm.$nextTick();
expect(wrapper.find("ul.events")).toMatchInlineSnapshot(`
<ul class="events medium">
<li class=""><span class="date">today at 10:55 AM</span> <span class="text"><span style="color:#000">black<span style="color:#AAA">white</span></span></span></li>
</ul>
`);
});
await wrapper.vm.$nextTick();
expect(wrapper.find("ul.events")).toMatchInlineSnapshot(`
<ul class="events medium">
<li><span class="date">today at 10:55 AM</span> <span class="text">&lt;test&gt;foo bar&lt;/test&gt;</span></li>
</ul>
`);
});
test("should render messages with html entities", async () => {
const wrapper = createLogEventSource();
sources["/api/logs/stream?id=abc"].emitOpen();
sources["/api/logs/stream?id=abc"].emitMessage({
data: `2019-06-12T10:55:42.459034602Z <test>foo bar</test>`,
});
test("should render messages with filter", async () => {
const wrapper = createLogEventSource("test");
sources["/api/logs/stream?id=abc"].emitOpen();
sources["/api/logs/stream?id=abc"].emitMessage({
data: `2019-06-11T10:55:42.459034602Z Foo bar`,
});
sources["/api/logs/stream?id=abc"].emitMessage({
data: `2019-06-12T10:55:42.459034602Z This is a test <hi></hi>`,
await wrapper.vm.$nextTick();
expect(wrapper.find("ul.events")).toMatchInlineSnapshot(`
<ul class="events medium">
<li class=""><span class="date">today at 10:55 AM</span> <span class="text">&lt;test&gt;foo bar&lt;/test&gt;</span></li>
</ul>
`);
});
await wrapper.vm.$nextTick();
expect(wrapper.find("ul.events")).toMatchInlineSnapshot(`
<ul class="events medium">
<li><span class="date">today at 10:55 AM</span> <span class="text">This is a <mark>test</mark> &lt;hi&gt;&lt;/hi&gt;</span></li>
</ul>
`);
test("should render messages with filter", async () => {
const wrapper = createLogEventSource("test");
sources["/api/logs/stream?id=abc"].emitOpen();
sources["/api/logs/stream?id=abc"].emitMessage({
data: `2019-06-11T10:55:42.459034602Z Foo bar`,
});
sources["/api/logs/stream?id=abc"].emitMessage({
data: `2019-06-12T10:55:42.459034602Z This is a test <hi></hi>`,
});
await wrapper.vm.$nextTick();
expect(wrapper.find("ul.events")).toMatchInlineSnapshot(`
<ul class="events medium">
<li class=""><span class="date">today at 10:55 AM</span> <span class="text">This is a <mark>test</mark> &lt;hi&gt;&lt;/hi&gt;</span></li>
</ul>
`);
});
});
});

View File

@@ -1,4 +1,4 @@
<template lang="html">
<template>
<div>
<infinite-loader :onLoadMore="loadOlderLogs" :enabled="messages.length > 100"></infinite-loader>
<slot :messages="messages"></slot>
@@ -8,17 +8,7 @@
<script>
import debounce from "lodash.debounce";
import InfiniteLoader from "./InfiniteLoader";
function parseMessage(data) {
const date = new Date(data.substring(0, 30));
const key = data.substring(0, 30);
const message = data.substring(30).trim();
return {
key,
date,
message,
};
}
import config from "../store/config";
export default {
props: ["id"],
@@ -41,22 +31,27 @@ export default {
if (this.es) {
this.es.close();
this.messages = [];
this.buffer = [];
this.es = null;
}
this.es = new EventSource(`${BASE_PATH}/api/logs/stream?id=${this.id}`);
const flushBuffer = debounce(
() => {
this.messages.push(...this.buffer);
this.buffer = [];
},
250,
{ maxWait: 1000 }
);
this.es = new EventSource(`${config.base}/api/logs/stream?id=${this.id}`);
this.es.addEventListener("container-stopped", (e) => {
this.es.close();
this.buffer.push({ event: "container-stopped", message: "Container stopped", date: new Date() });
flushNow();
});
this.es.addEventListener("error", (e) => console.log("EventSource failed: " + JSON.stringify(e)));
const flushBuffer = debounce(() => flushNow(), 250, { maxWait: 1000 });
const flushNow = () => {
this.messages.push(...this.buffer);
this.buffer = [];
};
this.es.onmessage = (e) => {
this.buffer.push(parseMessage(e.data));
this.buffer.push(this.parseMessage(e.data));
flushBuffer();
};
this.es.onerror = (e) => console.log("EventSource failed." + e);
this.$once("hook:beforeDestroy", () => this.es.close());
},
async loadOlderLogs() {
@@ -73,10 +68,20 @@ export default {
const newMessages = logs
.trim()
.split("\n")
.map((line) => parseMessage(line));
.map((line) => this.parseMessage(line));
this.messages.unshift(...newMessages);
}
},
parseMessage(data) {
let i = data.indexOf(" ");
if (i == -1) {
i = data.length;
}
const key = data.substring(0, i);
const date = new Date(key);
const message = data.substring(i).trim();
return { key, date, message };
},
},
watch: {
id(newValue, oldValue) {

View File

@@ -1,7 +1,7 @@
<template lang="html">
<template>
<ul class="events" :class="settings.size">
<li v-for="item in filtered" :key="item.key">
<span class="date">{{ item.date | relativeTime }}</span>
<li v-for="item in filtered" :key="item.key" :class="{ event: !!item.event }">
<span class="date" v-if="settings.showTimestamp">{{ item.date | relativeTime }}</span>
<span class="text" v-html="colorize(item.message)"></span>
</li>
</ul>
@@ -11,9 +11,16 @@
import { mapActions, mapGetters, mapState } from "vuex";
import { formatRelative } from "date-fns";
import AnsiConvertor from "ansi-to-html";
import DOMPurify from "dompurify";
const ansiConvertor = new AnsiConvertor({ escapeXML: true });
if (window.trustedTypes && trustedTypes.createPolicy) {
trustedTypes.createPolicy("default", {
createHTML: (string, sink) => DOMPurify.sanitize(string, { RETURN_TRUSTED_TYPE: true }),
});
}
export default {
props: ["messages"],
name: "LogViewer",
@@ -68,6 +75,10 @@ export default {
& > li {
word-wrap: break-word;
line-height: 130%;
&:last-child {
scroll-snap-align: end;
scroll-margin-block-end: 5rem;
}
}
&.small {
@@ -92,6 +103,10 @@ export default {
white-space: pre-wrap;
}
li.event {
color: #f14668;
}
::v-deep mark {
border-radius: 2px;
background-color: #ffdd57;

View File

@@ -1,4 +1,4 @@
<template lang="html">
<template>
<log-event-source :id="id" v-slot="eventSource">
<log-viewer :messages="eventSource.messages"></log-viewer>
</log-event-source>

View File

@@ -1,4 +1,4 @@
<template lang="html">
<template>
<aside>
<a
role="button"
@@ -11,7 +11,7 @@
<h1 class="title has-text-warning is-marginless">Dozzle</h1>
<p class="menu-label is-hidden-mobile" :class="{ 'is-active': showNav }">Containers</p>
<ul class="menu-list is-hidden-mobile" :class="{ 'is-active': showNav }">
<li v-for="item in containers">
<li v-for="item in visibleContainers" :key="item.id">
<router-link
:to="{ name: 'container', params: { id: item.id, name: item.name } }"
active-class="is-active"
@@ -27,7 +27,7 @@
</template>
<script>
import { mapActions, mapGetters, mapState } from "vuex";
import { mapGetters } from "vuex";
export default {
props: [],
@@ -37,13 +37,8 @@ export default {
showNav: false,
};
},
computed: {
...mapState(["containers"]),
...mapGetters(["activeContainersById"]),
},
methods: {
...mapActions({}),
...mapGetters(["activeContainersById", "visibleContainers"]),
},
watch: {
$route(to, from) {

View File

@@ -1,4 +1,4 @@
<template lang="html">
<template>
<section :class="{ 'is-full-height-scrollable': scrollable }">
<header v-if="$slots.header">
<slot name="header"></slot>
@@ -15,7 +15,7 @@
@click="scrollToBottom('instant')"
v-show="paused"
>
<ion-icon name="download"></ion-icon>
<icon name="download"></icon>
</button>
</transition>
</div>
@@ -23,6 +23,8 @@
</template>
<script>
import Icon from "./Icon";
export default {
props: {
scrollable: {
@@ -30,6 +32,9 @@ export default {
default: true,
},
},
components: {
Icon,
},
name: "ScrollableView",
data() {
return {
@@ -75,6 +80,7 @@ section {
main {
flex: 1;
overflow: auto;
scroll-snap-type: y proximity;
}
.scroll-bar-notification {

View File

@@ -1,4 +1,4 @@
<template lang="html">
<template>
<div class="search columns is-gapless is-vcentered" v-show="showSearch" v-if="settings.search">
<div class="column">
<p class="control has-icons-left">
@@ -10,8 +10,8 @@
v-model="filter"
@keyup.esc="resetSearch()"
/>
<span class="icon is-small is-left">
<ion-icon name="search"></ion-icon>
<span class="icon is-left">
<icon name="search"></icon>
</span>
</p>
</div>
@@ -24,10 +24,14 @@
<script>
import { mapActions, mapState } from "vuex";
import hotkeys from "hotkeys-js";
import Icon from "./Icon";
export default {
props: [],
name: "Search",
components: {
Icon,
},
data() {
return {
showSearch: false,
@@ -80,4 +84,8 @@ export default {
.delete {
margin-left: 1em;
}
.icon {
padding: 10px 3px;
}
</style>

View File

@@ -1,4 +1,4 @@
<template lang="html">
<template>
<aside>
<div class="columns is-marginless">
<div class="column">
@@ -10,13 +10,15 @@
active-class="is-active"
class="button is-small is-rounded is-settings-control"
>
<span class="icon"><ion-icon name="settings" size="large"></ion-icon></span>
<span class="icon">
<icon name="cog"></icon>
</span>
</router-link>
</div>
</div>
<p class="menu-label is-hidden-mobile">Containers</p>
<ul class="menu-list is-hidden-mobile">
<li v-for="item in containers">
<li v-for="item in visibleContainers" :key="item.id" :class="item.state">
<router-link
:to="{ name: 'container', params: { id: item.id, name: item.name } }"
active-class="is-active"
@@ -28,7 +30,7 @@
class="icon is-small will-append-container"
:class="{ 'is-active': activeContainersById[item.id] }"
>
<ion-icon name="ios-add-circle"></ion-icon>
<icon name="pin"></icon>
</span>
{{ item.name }}
</div>
@@ -41,15 +43,20 @@
<script>
import { mapActions, mapGetters, mapState } from "vuex";
import Icon from "./Icon";
export default {
props: [],
name: "SideMenu",
components: {
Icon,
},
data() {
return {};
},
computed: {
...mapState(["containers", "activeContainers"]),
...mapGetters(["activeContainersById"]),
...mapState(["activeContainers"]),
...mapGetters(["activeContainersById", "visibleContainers"]),
},
methods: {
...mapActions({
@@ -81,6 +88,10 @@ aside {
}
}
li.exited a {
color: #777;
}
.will-append-container.icon {
transition: transform 0.2s ease-out;
&.is-active {

View File

@@ -0,0 +1,13 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`<LogEventSource /> renders correctly 1`] = `
<div>
<div
class="control"
/>
<ul
class="events medium"
/>
</div>
`;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

5
assets/favicon.svg Normal file
View File

@@ -0,0 +1,5 @@
<svg width="128" height="128" viewBox="0 0 128 128" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="128" height="128" rx="6" fill="#222222"/>
<path d="M82.3248 94.3863H123V104.093H67.8025V95.3506L106.164 44.3736H68.3808V34.5382H121.072V42.9594L82.3248 94.3863Z" fill="#FFDD57"/>
<path d="M8 107.107L17.5656 14L43.8372 16.7013C51.9339 17.5338 58.9091 20.0604 64.7629 24.2812C70.6166 28.5019 74.8873 34.0893 77.5749 41.0432C80.3052 48.0016 81.2514 55.7674 80.4137 64.3407L79.8027 70.2877C78.9005 79.0698 76.4053 86.5894 72.3173 92.8468C68.2719 99.1084 62.914 103.684 56.2436 106.574C49.6158 109.468 42.1213 110.529 33.7602 109.755L8 107.107ZM28.8005 25.3655L21.3043 98.3288L34.2164 99.6565C43.6767 100.629 51.3299 98.4435 57.1758 93.0993C63.0644 87.7595 66.5671 79.6542 67.684 68.7832L68.2424 63.3477C69.3286 52.7752 67.6788 44.3123 63.293 37.9592C58.9542 31.5678 52.2295 27.8607 43.1188 26.8377L28.8005 25.3655Z" fill="#FFDD57"/>
</svg>

After

Width:  |  Height:  |  Size: 949 B

71
assets/index.ejs Normal file
View File

@@ -0,0 +1,71 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Dozzle</title>
<link href="https://fonts.googleapis.com/css?family=Roboto|Roboto+Mono|Gafata" rel="stylesheet" />
<script type="application/json" id="config__json">
{
"base": "{{ .Base }}",
"version": "{{ .Version }}"
}
</script>
</head>
<body>
<svg
aria-hidden="true"
class="is-hidden"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
>
<defs>
<symbol id="icon-check" viewBox="0 0 24 24">
<path
d="M19.293 5.293l-10.293 10.293-4.293-4.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414l5 5c0.391 0.391 1.024 0.391 1.414 0l11-11c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0z"
></path>
</symbol>
<symbol id="icon-chevron-down" viewBox="0 0 24 24">
<path
d="M5.293 9.707l6 6c0.391 0.391 1.024 0.391 1.414 0l6-6c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-5.293 5.293-5.293-5.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z"
></path>
</symbol>
<symbol id="icon-chevron-left" viewBox="0 0 24 24">
<path
d="M15.707 17.293l-5.293-5.293 5.293-5.293c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-6 6c-0.391 0.391-0.391 1.024 0 1.414l6 6c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414z"
></path>
</symbol>
<symbol id="icon-chevron-right" viewBox="0 0 24 24">
<path
d="M9.707 18.707l6-6c0.391-0.391 0.391-1.024 0-1.414l-6-6c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414l5.293 5.293-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0z"
></path>
</symbol>
<symbol id="icon-chevrons-down" viewBox="0 0 24 24">
<path
d="M6.293 13.707l5 5c0.391 0.391 1.024 0.391 1.414 0l5-5c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-4.293 4.293-4.293-4.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414zM6.293 6.707l5 5c0.391 0.391 1.024 0.391 1.414 0l5-5c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-4.293 4.293-4.293-4.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z"
></path>
</symbol>
<symbol id="icon-download" viewBox="0 0 24 24">
<path d="M15.6 9.6v-7.2h-7.2v7.2h-6l9.6 9.6 9.6-9.6h-6zM0 21.6h24v2.4h-24v-2.4z"></path>
</symbol>
<symbol id="icon-pin" viewBox="0 0 24 24">
<path
d="M13.2 14.4h7.2v-1.2l-3.6-1.2v-9.6l3.6-1.2v-1.2h-16.8v1.2l3.6 1.2v9.6l-3.6 1.2v1.2h7.2v8.4l1.2 1.2 1.2-1.2v-8.4z"
></path>
</symbol>
<symbol id="icon-search" viewBox="0 0 24 24">
<path
d="M15.48 17.184c-1.608 1.259-3.66 2.019-5.889 2.019-5.302 0-9.6-4.298-9.6-9.6s4.298-9.6 9.6-9.6c5.302 0 9.6 4.298 9.6 9.6 0 2.229-0.76 4.281-2.035 5.91l0.016-0.021 6.42 6.396-1.704 1.704-6.396-6.408zM9.6 16.8c3.976 0 7.2-3.224 7.2-7.2s-3.224-7.2-7.2-7.2v0c-3.976 0-7.2 3.224-7.2 7.2s3.224 7.2 7.2 7.2v0z"
></path>
</symbol>
<symbol id="icon-cog" viewBox="0 0 24 24">
<path
d="M21.886 14.303c-1.259-2.181-0.502-4.976 1.691-6.246l-2.358-4.085c-0.674 0.395-1.457 0.622-2.293 0.622-2.52 0-4.563-2.057-4.563-4.594h-4.717c0.006 0.783-0.189 1.577-0.608 2.303-1.259 2.181-4.058 2.923-6.255 1.658l-2.358 4.085c0.679 0.386 1.267 0.951 1.685 1.675 1.257 2.178 0.504 4.967-1.681 6.24l2.358 4.085c0.671-0.391 1.451-0.615 2.283-0.615 2.512 0 4.55 2.044 4.563 4.569h4.717c-0.002-0.775 0.194-1.56 0.609-2.279 1.257-2.177 4.049-2.92 6.244-1.664l2.358-4.085c-0.675-0.386-1.258-0.949-1.674-1.669zM12 16.859c-2.684 0-4.859-2.176-4.859-4.859s2.176-4.859 4.859-4.859c2.684 0 4.859 2.176 4.859 4.859s-2.176 4.859-4.859 4.859z"
></path>
</symbol>
</defs>
</svg>
<div id="app"></div>
</body>
</html>

View File

@@ -1,23 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Dozzle</title>
<link href="https://fonts.googleapis.com/css?family=Roboto|Roboto+Mono|Gafata" rel="stylesheet" />
<link rel="manifest" href="manifest.webmanifest" />
<link href="styles.scss" rel="stylesheet" />
<link rel="icon" href="favicon.ico" />
<script>
window["BASE_PATH"] = "{{ .Base }}";
window["VERSION"] = "{{ .Version }}";
</script>
<script type="module" src="https://unpkg.com/ionicons@4.5.10-0/dist/ionicons/ionicons.esm.js"></script>
<script nomodule="" src="https://unpkg.com/ionicons@4.5.10-0/dist/ionicons/ionicons.js"></script>
</head>
<body>
<div id="app"></div>
<script src="main.js"></script>
</body>
</html>

View File

@@ -1,47 +1,53 @@
import Vue from "vue";
import VueRouter from "vue-router";
import Meta from "vue-meta";
import { Dropdown, Switch } from "buefy";
import Dropdown from "buefy/dist/esm/dropdown";
import Switch from "buefy/dist/esm/switch";
import store from "./store";
import config from "./store/config";
import App from "./App.vue";
import Container from "./pages/Container.vue";
import Settings from "./pages/Settings.vue";
import Index from "./pages/Index.vue";
import Show from "./pages/Show.vue";
Vue.use(VueRouter);
Vue.use(Meta);
Vue.use(Dropdown);
Vue.use(Switch);
Vue.config.ignoredElements = [/^ion-/];
const routes = [
{
path: "/",
component: Index,
name: "default"
name: "default",
},
{
path: "/container/:id",
component: Container,
name: "container",
props: true
props: true,
},
{
path: "/settings",
component: Settings,
name: "settings"
}
name: "settings",
},
{
path: "/show",
component: Show,
name: "show",
},
];
const router = new VueRouter({
mode: "history",
base: BASE_PATH + "/",
routes
base: config.base + "/",
routes,
});
new Vue({
router,
store,
render: h => h(App)
render: (h) => h(App),
}).$mount("#app");

View File

@@ -1,9 +0,0 @@
{
"name": "Dozzle Log Viewer",
"short_name": "Dozzle",
"theme_color": "#111111",
"background_color": "#111111",
"display": "standalone",
"scope": "/",
"start_url": "/"
}

View File

@@ -1,4 +1,4 @@
<template lang="html">
<template>
<scrollable-view :scrollable="activeContainers.length > 0">
<template v-slot:header v-if="activeContainers.length > 0">
<container-title :value="allContainersById[id].name"></container-title>

View File

@@ -2,11 +2,6 @@ import { shallowMount } from "@vue/test-utils";
import Index from "./Index";
describe("<Index />", () => {
test("is a Vue instance", () => {
const wrapper = shallowMount(Index);
expect(wrapper.isVueInstance()).toBeTruthy();
});
test("renders correctly", () => {
const wrapper = shallowMount(Index);
expect(wrapper.element).toMatchSnapshot();

View File

@@ -1,4 +1,4 @@
<template lang="html">
<template>
<div class="hero is-fullheight is-dark">
<div class="hero-body">
<div class="container has-text-centered">

View File

@@ -1,4 +1,4 @@
<template lang="html">
<template>
<div>
<section class="section">
<div class="has-underline">
@@ -10,7 +10,9 @@
>.
<span v-if="hasUpdate">
New version is available! Update to
<a :href="nextRelease.html_url" class="next-release">{{ nextRelease.name }}</a
<a :href="nextRelease.html_url" class="next-release" target="_blank" rel="noreferrer noopener">{{
nextRelease.name
}}</a
>.
</span>
</div>
@@ -31,6 +33,18 @@
</b-switch>
</div>
<div class="item">
<b-switch v-model="showTimestamp">
Show timestamps
</b-switch>
</div>
<div class="item">
<b-switch v-model="showAllContainers">
Show stopped containers
</b-switch>
</div>
<div class="item">
<h2 class="title is-6 is-marginless">Font size</h2>
Modify the font size when viewing logs.
@@ -38,12 +52,17 @@
<b-dropdown v-model="size" aria-role="list" style="margin: -8px 10px 0;">
<button class="button is-primary" type="button" slot="trigger">
<span class="is-capitalized">{{ size }}</span>
<span class="icon"><ion-icon name="ios-arrow-down"></ion-icon></span>
<span class="icon"><icon name="chevron-down"></icon></span>
</button>
<b-dropdown-item :value="value" aria-role="listitem" v-for="value in ['small', 'medium', 'large']">
<b-dropdown-item
:value="value"
aria-role="listitem"
v-for="value in ['small', 'medium', 'large']"
:key="value"
>
<div class="media">
<span class="icon">
<ion-icon name="checkmark" v-if="value == size"></ion-icon>
<span class="icon keep-size">
<icon name="check" v-if="value == size"></icon>
</span>
<div class="media-content">
<h3 class="is-capitalized">{{ value }}</h3>
@@ -60,14 +79,18 @@
import gt from "semver/functions/gt";
import valid from "semver/functions/valid";
import { mapActions, mapState } from "vuex";
import Icon from "../components/Icon";
import config from "../store/config";
export default {
props: [],
name: "Settings",
components: {},
components: {
Icon,
},
data() {
return {
currentVersion: VERSION,
currentVersion: config.version,
nextRelease: null,
hasUpdate: false,
};
@@ -89,7 +112,7 @@ export default {
},
computed: {
...mapState(["settings"]),
...["search", "size", "smallerScrollbars"].reduce((map, name) => {
...["search", "size", "smallerScrollbars", "showTimestamp", "showAllContainers"].reduce((map, name) => {
map[name] = {
get() {
return this.settings[name];
@@ -103,7 +126,7 @@ export default {
},
};
</script>
<style lang="scss">
<style lang="scss" scoped>
.title {
color: #eee;
}

29
assets/pages/Show.vue Normal file
View File

@@ -0,0 +1,29 @@
<template> </template>
<script>
import { mapActions, mapGetters, mapState } from "vuex";
export default {
props: [],
name: "Show",
computed: mapGetters(["visibleContainers"]),
watch: {
visibleContainers(newValue) {
if (newValue) {
if (this.$route.query.name) {
const [container, _] = this.visibleContainers.filter((c) => c.name == this.$route.query.name);
if (container) {
this.$router.push({ name: "container", params: { id: container.id } });
} else {
console.error(`No containers found matching name=${this.$route.query.name}. Redirecting to /`);
this.$router.push({ name: "default" });
}
} else {
console.error(`Expection query parameter name to be set. Redirecting to /`);
this.$router.push({ name: "default" });
}
}
},
},
};
</script>
<style scoped></style>

2
assets/store/config.js Normal file
View File

@@ -0,0 +1,2 @@
const config = JSON.parse(document.querySelector("script#config__json").textContent);
export default config;

View File

@@ -2,6 +2,7 @@ import Vue from "vue";
import Vuex from "vuex";
import storage from "store/dist/store.modern";
import { DEFAULT_SETTINGS, DOZZLE_SETTINGS_KEY } from "./settings";
import config from "./config";
Vue.use(Vuex);
@@ -50,7 +51,7 @@ const actions = {
commit("SET_SEARCH", filter);
},
async FETCH_CONTAINERS({ commit }) {
const containers = await (await fetch(`${BASE_PATH}/api/containers.json`)).json();
const containers = await (await fetch(`${config.base}/api/containers.json`)).json();
commit("SET_CONTAINERS", containers);
},
UPDATE_SETTING({ commit }, setting) {
@@ -58,21 +59,25 @@ const actions = {
},
};
const getters = {
activeContainersById(state) {
return state.activeContainers.reduce((map, obj) => {
activeContainersById({ activeContainers }) {
return activeContainers.reduce((map, obj) => {
map[obj.id] = obj;
return map;
}, {});
},
allContainersById(state) {
return state.containers.reduce((map, obj) => {
allContainersById({ containers }) {
return containers.reduce((map, obj) => {
map[obj.id] = obj;
return map;
}, {});
},
visibleContainers({ containers, settings: { showAllContainers } }) {
const filter = showAllContainers ? () => true : (c) => c.state === "running";
return containers.filter(filter);
},
};
const es = new EventSource(`${BASE_PATH}/api/events/stream`);
const es = new EventSource(`${config.base}/api/events/stream`);
es.addEventListener("containers-changed", (e) => setTimeout(() => store.dispatch("FETCH_CONTAINERS"), 1000), false);
mql.addListener((e) => store.commit("SET_MOBILE_WIDTH", e.matches));

View File

@@ -4,4 +4,6 @@ export const DEFAULT_SETTINGS = {
size: "medium",
menuWidth: 15,
smallerScrollbars: false,
showTimestamp: true,
showAllContainers: false,
};

View File

@@ -22,6 +22,7 @@ h1.title {
html {
overflow-x: unset;
overflow-y: unset;
scroll-snap-type: y proximity;
}
html.has-custom-scrollbars {
@@ -55,11 +56,9 @@ html.has-custom-scrollbars {
}
.is-settings-control {
background: rgba(0, 0, 0, 0.4);
color: #fff;
border-color: transparent;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
&:hover {
border-color: rgb(255, 221, 87) !important;
background: rgba(0, 0, 0, 0.8) !important;

View File

@@ -33,9 +33,9 @@ type dockerProxy interface {
// Client is a proxy around the docker client
type Client interface {
ListContainers(showAll bool) ([]Container, error)
ListContainers() ([]Container, error)
FindContainer(string) (Container, error)
ContainerLogs(context.Context, string, int) (<-chan string, <-chan error)
ContainerLogs(context.Context, string, int, string) (<-chan string, <-chan error)
Events(context.Context) (<-chan events.Message, <-chan error)
ContainerLogsBetweenDates(context.Context, string, time.Time, time.Time) ([]string, error)
}
@@ -54,7 +54,7 @@ func NewClientWithFilters(f map[string]string) Client {
log.Debugf("filterArgs = %v", filterArgs)
cli, err := client.NewClientWithOpts(client.FromEnv)
cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
if err != nil {
log.Fatal(err)
@@ -65,7 +65,7 @@ func NewClientWithFilters(f map[string]string) Client {
func (d *dockerClient) FindContainer(id string) (Container, error) {
var container Container
containers, err := d.ListContainers(true)
containers, err := d.ListContainers()
if err != nil {
return container, err
}
@@ -85,10 +85,10 @@ func (d *dockerClient) FindContainer(id string) (Container, error) {
return container, nil
}
func (d *dockerClient) ListContainers(showAll bool) ([]Container, error) {
func (d *dockerClient) ListContainers() ([]Container, error) {
containerListOptions := types.ContainerListOptions{
Filters: d.filters,
All: showAll,
All: true,
}
list, err := d.cli.ContainerList(context.Background(), containerListOptions)
if err != nil {
@@ -113,7 +113,7 @@ func (d *dockerClient) ListContainers(showAll bool) ([]Container, error) {
}
sort.Slice(containers, func(i, j int) bool {
return containers[i].Name < containers[j].Name
return strings.ToLower(containers[i].Name) < strings.ToLower(containers[j].Name)
})
if containers == nil {
@@ -151,8 +151,17 @@ func logReader(reader io.ReadCloser, tty bool) func() (string, error) {
}
}
func (d *dockerClient) ContainerLogs(ctx context.Context, id string, tailSize int) (<-chan string, <-chan error) {
options := types.ContainerLogsOptions{ShowStdout: true, ShowStderr: true, Follow: true, Tail: strconv.Itoa(tailSize), Timestamps: true}
func (d *dockerClient) ContainerLogs(ctx context.Context, id string, tailSize int, since string) (<-chan string, <-chan error) {
log.WithField("id", id).WithField("since", since).Debug("Streaming logs for container")
options := types.ContainerLogsOptions{
ShowStdout: true,
ShowStderr: true,
Follow: true,
Tail: strconv.Itoa(tailSize),
Timestamps: true,
Since: since,
}
reader, err := d.cli.ContainerLogs(ctx, id, options)
errChannel := make(chan error, 1)

View File

@@ -55,7 +55,7 @@ func Test_dockerClient_ListContainers_null(t *testing.T) {
proxy.On("ContainerList", mock.Anything, mock.Anything).Return(nil, nil)
client := &dockerClient{proxy, filters.NewArgs()}
list, err := client.ListContainers(true)
list, err := client.ListContainers()
assert.Empty(t, list, "list should be empty")
require.NoError(t, err, "error should not return an error.")
@@ -67,7 +67,7 @@ func Test_dockerClient_ListContainers_error(t *testing.T) {
proxy.On("ContainerList", mock.Anything, mock.Anything).Return(nil, errors.New("test"))
client := &dockerClient{proxy, filters.NewArgs()}
list, err := client.ListContainers(true)
list, err := client.ListContainers()
assert.Nil(t, list, "list should be nil")
require.Error(t, err, "test.")
@@ -90,7 +90,7 @@ func Test_dockerClient_ListContainers_happy(t *testing.T) {
proxy.On("ContainerList", mock.Anything, mock.Anything).Return(containers, nil)
client := &dockerClient{proxy, filters.NewArgs()}
list, err := client.ListContainers(true)
list, err := client.ListContainers()
require.NoError(t, err, "error should not return an error.")
assert.Equal(t, list, []Container{
@@ -120,14 +120,14 @@ func Test_dockerClient_ContainerLogs_happy(t *testing.T) {
b = append(b, []byte(expected)...)
reader := ioutil.NopCloser(bytes.NewReader(b))
options := types.ContainerLogsOptions{ShowStdout: true, ShowStderr: true, Follow: true, Tail: "300", Timestamps: true}
options := types.ContainerLogsOptions{ShowStdout: true, ShowStderr: true, Follow: true, Tail: "300", Timestamps: true, Since: "since"}
proxy.On("ContainerLogs", mock.Anything, id, options).Return(reader, nil)
json := types.ContainerJSON{Config: &container.Config{Tty: false}}
proxy.On("ContainerInspect", mock.Anything, id).Return(json, nil)
client := &dockerClient{proxy, filters.NewArgs()}
messages, _ := client.ContainerLogs(context.Background(), id, 300)
messages, _ := client.ContainerLogs(context.Background(), id, 300, "since")
actual, _ := <-messages
assert.Equal(t, expected, actual, "message doesn't match expected")
@@ -151,7 +151,7 @@ func Test_dockerClient_ContainerLogs_happy_with_tty(t *testing.T) {
proxy.On("ContainerInspect", mock.Anything, id).Return(json, nil)
client := &dockerClient{proxy, filters.NewArgs()}
messages, _ := client.ContainerLogs(context.Background(), id, 300)
messages, _ := client.ContainerLogs(context.Background(), id, 300, "")
actual, _ := <-messages
assert.Equal(t, expected, actual, "message doesn't match expected")
@@ -169,7 +169,7 @@ func Test_dockerClient_ContainerLogs_error(t *testing.T) {
client := &dockerClient{proxy, filters.NewArgs()}
messages, err := client.ContainerLogs(context.Background(), id, 300)
messages, err := client.ContainerLogs(context.Background(), id, 300, "")
assert.Nil(t, messages, "messages should be nil")

7
go.mod
View File

@@ -34,17 +34,16 @@ require (
github.com/pkg/errors v0.9.1 // indirect
github.com/rogpeppe/go-internal v1.5.2 // indirect
github.com/sergi/go-diff v1.0.0 // indirect
github.com/sirupsen/logrus v1.5.0
github.com/sirupsen/logrus v1.6.0
github.com/spf13/afero v1.2.2 // indirect
github.com/spf13/cast v1.3.1 // indirect
github.com/spf13/jwalterweatherman v1.1.0 // indirect
github.com/spf13/pflag v1.0.5
github.com/spf13/viper v1.6.2
github.com/spf13/viper v1.7.0
github.com/stretchr/objx v0.2.0 // indirect
github.com/stretchr/testify v1.5.1
github.com/stretchr/testify v1.6.0
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b // indirect
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae // indirect
golang.org/x/text v0.3.2 // indirect
google.golang.org/genproto v0.0.0-20200226201735-46b91f19d98c // indirect
google.golang.org/grpc v1.27.1 // indirect
gopkg.in/ini.v1 v1.52.0 // indirect

154
go.sum
View File

@@ -1,25 +1,42 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8=
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
github.com/Azure/go-autorest v10.8.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/Microsoft/go-winio v0.4.14 h1:+hMXMk01us9KgxGb7ftKQt2Xpf5hH/yky+TDA+qxleU=
github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0=
github.com/beme/abide v0.0.0-20190723115211-635a09831760 h1:FvTM5NSN5HYvfKpgL+8x73U5v063vHsd7AX05eV1DnM=
github.com/beme/abide v0.0.0-20190723115211-635a09831760/go.mod h1:6+8gCKsZnxzhGTmKRh4BSkLos9CbWRJNcrp55We4SqQ=
github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA=
github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk=
github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8=
@@ -32,8 +49,10 @@ github.com/containerd/containerd v1.3.3 h1:LoIzb5y9x5l8VKAlyrbusNPXqBY0+kviRloxF
github.com/containerd/containerd v1.3.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
@@ -57,10 +76,12 @@ github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDD
github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
@@ -87,6 +108,8 @@ github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekf
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
@@ -96,10 +119,19 @@ github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.4 h1:87PNWwrRvUSnqS4dlcBU/ftvOIBep4sYuBLlh6rX2wk=
github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
@@ -107,17 +139,40 @@ github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2z
github.com/gorilla/mux v1.7.4 h1:VuZ8uybHlWmqV03+zRzdwKL4tUnIp1MAQtp1mIFE1bc=
github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc=
github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
@@ -128,6 +183,8 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s=
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
@@ -138,11 +195,24 @@ github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czP
github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4=
github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg=
github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c h1:nXxl5PrvVm2L/wCy8dQu6DMTwH4oIuGN8GJDAlqDdVE=
github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
@@ -154,6 +224,7 @@ github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQ
github.com/opencontainers/image-spec v1.0.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
github.com/opencontainers/image-spec v1.0.1 h1:JMemWkRwHx4Zj+fVxWoMCFm/8sYGGrUVojFA6h/TRcI=
github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc=
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/pelletier/go-toml v1.6.0 h1:aetoXYr0Tv7xRU/V4B4IZJ2QcbtMUFoNb3ORp7TzIK4=
@@ -166,6 +237,7 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
github.com/prometheus/client_golang v0.0.0-20180209125602-c332b6f63c06/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
@@ -189,7 +261,9 @@ github.com/rogpeppe/go-internal v1.3.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTE
github.com/rogpeppe/go-internal v1.5.2 h1:qLvObTrvO/XRCqmkKxUlOBc48bI3efyDuAZe25QiF0w=
github.com/rogpeppe/go-internal v1.5.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ=
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
@@ -198,6 +272,8 @@ github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.5.0 h1:1N5EYkVAPEywqZRJd7cwnRtCb6xJx7NH3T3WUTF980Q=
github.com/sirupsen/logrus v1.5.0/go.mod h1:+F7Ogzej0PZc/94MaYx/nvG9jOFMD2osvC3s+Squfpo=
github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I=
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
@@ -225,8 +301,10 @@ github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.3.2 h1:VUFqw5KcqRf7i70GOzW7N+Q7+gxVBkSSqiXB12+JQ4M=
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
github.com/spf13/viper v1.6.2 h1:7aKfF+e8/k68gda3LOjo5RxiUqddoFxVq4BKBPrxk5E=
github.com/spf13/viper v1.6.2/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k=
github.com/spf13/viper v1.6.3 h1:pDDu1OyEDTKzpJwdq4TiuLyMsUgRa/BT5cn5O62NoHs=
github.com/spf13/viper v1.6.3/go.mod h1:jUMtyi0/lB5yZH/FjyGAoH7IMNrIhlBf6pXZmbMDvzw=
github.com/spf13/viper v1.7.0 h1:xVKxvI7ouOI5I+U9s2eeiUfMaWBVoXA3AWskkrqK0VM=
github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48=
@@ -238,10 +316,11 @@ github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJy
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.6.0 h1:jlIyCplCJFULU/01vCkhKuTyc3OorI3bJFuw6obfgho=
github.com/stretchr/testify v1.6.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
@@ -249,56 +328,91 @@ github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX
github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA=
github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg=
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a h1:oWX7TPOiFAMXLq8o0ikBYfCJVlRHBcsciT5bXOrH628=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190522155817-f3200d17e092 h1:4QSRKanuywn15aTZvI/mIDEgPQpswuFndXpOj3rKEco=
golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b h1:0mm1VjtFUOIlE1SbDlwjYaDxZVDP2S5ou6y0gSgXHu8=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190515120540-06a5c4944438 h1:khxRGsvPk4n2y8I/mLLjp7e5dMTJmH75wvqS6nMwUtY=
golang.org/x/sys v0.0.0-20190515120540-06a5c4944438/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae h1:/WDfKMnPU+m5M4xB+6x4kaepxRw6jWvR5iDRdvjHgy8=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -307,22 +421,50 @@ golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGm
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190624180213-70d37148ca0c/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8 h1:Nw54tB0rB7hY/N0NQvRW8DG4Yk3Q6T9cu9RcFQDu1tc=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200226201735-46b91f19d98c h1:xFOdgVPpeowWAH0MJ5i0XMp+3yWiWamMtN/kx9xThIQ=
google.golang.org/genproto v0.0.0-20200226201735-46b91f19d98c/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.0 h1:G+97AoqBnmZIT91cLG/EkCoK9NSelj64P8bOHHNmGn0=
google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.1 h1:zvIju4sqAGvwKspUQOhwnpcqSbzi7/H6QomNNjTL4sk=
@@ -346,7 +488,13 @@ gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=

View File

@@ -1,6 +1,6 @@
FROM amir20/docker-alpine-puppeteer:edge
COPY --chown=pptruser:pptruser package*.json /app/
COPY --chown=pptruser:pptruser package*.json yarn.lock /app/
RUN yarn
COPY --chown=pptruser:pptruser . /app/

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 45 KiB

View File

@@ -11,7 +11,7 @@ services:
integration:
build:
context: .
command: npm test
command: yarn test
environment:
- BASE=http://dozzle:8080/
depends_on:

View File

@@ -1,6 +1,6 @@
module.exports = {
launch: {
headless: true,
headless: process.env.HEADLESS !== "false",
defaultViewport: { width: 1920, height: 1200 },
args: ["--no-sandbox", "--disable-setuid-sandbox"],
executablePath: process.env.CHROME_EXE_PATH || "",

View File

@@ -8,9 +8,9 @@
"author": "",
"license": "ISC",
"dependencies": {
"jest": "^25.2.6",
"jest-image-snapshot": "^3.0.1",
"puppeteer": "^2.1.1"
"jest": "^26.0.1",
"jest-image-snapshot": "^4.0.0",
"puppeteer": "^3.0.4"
},
"jest": {
"preset": "jest-puppeteer",

View File

@@ -29,10 +29,17 @@ describe("home page", () => {
expect(image).toMatchImageSnapshot();
});
it("displays iphone menu", async () => {
await page.emulate(iPhoneX);
await page.click("a.navbar-burger");
const menuText = await page.$eval("aside ul.menu-list.is-hidden-mobile li a", (e) => e.textContent);
expect(menuText.trim()).toEqual("dozzle");
});
describe("has menu visible", () => {
beforeAll(async () => {
await jestPuppeteer.resetBrowser();
// await page.setViewport({ width: 1920, height: 1200 });
});
beforeEach(async () => {

File diff suppressed because it is too large Load Diff

13
jest.config.js Normal file
View File

@@ -0,0 +1,13 @@
module.exports = {
clearMocks: true,
moduleFileExtensions: ["js", "json", "vue"],
coveragePathIgnorePatterns: ["node_modules"],
testPathIgnorePatterns: ["node_modules", "<rootDir>/integration/"],
transformIgnorePatterns: ["node_modules"],
watchPathIgnorePatterns: ["<rootDir>/node_modules/"],
snapshotSerializers: ["jest-serializer-vue"],
transform: {
".*\\.vue$": "vue-jest",
"^.+\\.js$": "babel-jest",
},
};

194
main.go
View File

@@ -2,20 +2,15 @@ package main
import (
"context"
"encoding/json"
"fmt"
"html/template"
"net/http"
"net/url"
"os"
"os/signal"
"runtime"
"strings"
"time"
"github.com/amir20/dozzle/docker"
"github.com/gobuffalo/packr"
"github.com/gorilla/mux"
log "github.com/sirupsen/logrus"
"github.com/spf13/pflag"
"github.com/spf13/viper"
@@ -32,15 +27,13 @@ var (
)
type handler struct {
client docker.Client
showAll bool
box packr.Box
client docker.Client
box packr.Box
}
func init() {
pflag.String("addr", ":8080", "http service address")
pflag.String("base", "/", "base address of the application to mount")
pflag.Bool("showAll", false, "show all containers, even stopped")
pflag.String("level", "info", "logging level")
pflag.Int("tailSize", 300, "Tail size to use for initial container logs")
pflag.StringToStringVar(&filters, "filter", map[string]string{}, "Container filters to use for showing logs")
@@ -54,10 +47,9 @@ func init() {
base = viper.GetString("base")
level = viper.GetString("level")
tailSize = viper.GetInt("tailSize")
showAll = viper.GetBool("showAll")
// Until https://github.com/spf13/viper/issues/608 is fixed. We have to use this hacky way.
// filters = viper.GetStringSlice("filter")
// Until https://github.com/spf13/viper/issues/911 is fixed. We have to use this hacky way.
// filters = viper.GetStringMapString("filter")
if value, ok := os.LookupEnv("DOZZLE_FILTER"); ok {
log.Infof("Parsing %s", value)
urlValues, err := url.ParseQuery(strings.ReplaceAll(value, ",", "&"))
@@ -79,27 +71,10 @@ func init() {
})
}
func createRoutes(base string, h *handler) *mux.Router {
r := mux.NewRouter()
if base != "/" {
r.HandleFunc(base, http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
http.Redirect(w, req, base+"/", http.StatusMovedPermanently)
}))
}
s := r.PathPrefix(base).Subrouter()
s.HandleFunc("/api/containers.json", h.listContainers)
s.HandleFunc("/api/logs/stream", h.streamLogs)
s.HandleFunc("/api/logs", h.fetchLogsBetweenDates)
s.HandleFunc("/api/events/stream", h.streamEvents)
s.HandleFunc("/version", h.version)
s.PathPrefix("/").Handler(http.StripPrefix(base, http.HandlerFunc(h.index)))
return r
}
func main() {
log.Infof("Dozzle version %s", version)
dockerClient := docker.NewClientWithFilters(filters)
_, err := dockerClient.ListContainers(true)
_, err := dockerClient.ListContainers()
if err != nil {
log.Fatalf("Could not connect to Docker Engine: %v", err)
@@ -107,9 +82,8 @@ func main() {
box := packr.NewBox("./static")
r := createRoutes(base, &handler{
client: dockerClient,
showAll: showAll,
box: box,
client: dockerClient,
box: box,
})
srv := &http.Server{Addr: addr, Handler: r}
@@ -130,157 +104,3 @@ func main() {
srv.Shutdown(ctx)
os.Exit(0)
}
func (h *handler) index(w http.ResponseWriter, req *http.Request) {
fileServer := http.FileServer(h.box)
if h.box.Has(req.URL.Path) && req.URL.Path != "" && req.URL.Path != "/" {
fileServer.ServeHTTP(w, req)
} else {
text, err := h.box.FindString("index.html")
if err != nil {
panic(err)
}
text = strings.Replace(text, "__BASE__", "{{ .Base }}", -1)
tmpl, err := template.New("index.html").Parse(text)
if err != nil {
panic(err)
}
path := ""
if base != "/" {
path = base
}
data := struct {
Base string
Version string
}{path, version}
err = tmpl.Execute(w, data)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
}
}
func (h *handler) listContainers(w http.ResponseWriter, r *http.Request) {
containers, err := h.client.ListContainers(h.showAll)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
err = json.NewEncoder(w).Encode(containers)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
}
func (h *handler) fetchLogsBetweenDates(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/plain; charset=UTF-8")
from, _ := time.Parse(time.RFC3339, r.URL.Query().Get("from"))
to, _ := time.Parse(time.RFC3339, r.URL.Query().Get("to"))
id := r.URL.Query().Get("id")
messages, _ := h.client.ContainerLogsBetweenDates(r.Context(), id, from, to)
for _, m := range messages {
fmt.Fprintln(w, m)
}
}
func (h *handler) streamLogs(w http.ResponseWriter, r *http.Request) {
id := r.URL.Query().Get("id")
if id == "" {
http.Error(w, "id is required", http.StatusBadRequest)
return
}
f, ok := w.(http.Flusher)
if !ok {
http.Error(w, "Streaming unsupported!", http.StatusInternalServerError)
return
}
container, e := h.client.FindContainer(id)
if e != nil {
http.Error(w, e.Error(), http.StatusInternalServerError)
return
}
messages, err := h.client.ContainerLogs(r.Context(), container.ID, tailSize)
w.Header().Set("Content-Type", "text/event-stream")
w.Header().Set("Cache-Control", "no-cache")
w.Header().Set("Connection", "keep-alive")
w.Header().Set("Transfer-Encoding", "chunked")
log.Debugf("Starting to stream logs for %s", id)
Loop:
for {
select {
case message, ok := <-messages:
if !ok {
break Loop
}
_, e := fmt.Fprintf(w, "data: %s\n\n", message)
if e != nil {
log.Debugf("Error while writing to log stream: %v", e)
break Loop
}
f.Flush()
case e := <-err:
log.Debugf("Error while reading from log stream: %v", e)
break Loop
}
}
log.WithField("NumGoroutine", runtime.NumGoroutine()).Debug("runtime stats")
}
func (h *handler) streamEvents(w http.ResponseWriter, r *http.Request) {
f, ok := w.(http.Flusher)
if !ok {
http.Error(w, "Streaming unsupported!", http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "text/event-stream")
w.Header().Set("Cache-Control", "no-cache")
w.Header().Set("Connection", "keep-alive")
w.Header().Set("Transfer-Encoding", "chunked")
ctx := r.Context()
messages, err := h.client.Events(ctx)
Loop:
for {
select {
case message, ok := <-messages:
if !ok {
break Loop
}
switch message.Action {
case "connect", "disconnect", "create", "destroy", "start", "stop":
log.Debugf("Triggering docker event: %v", message.Action)
_, err := fmt.Fprintf(w, "event: containers-changed\ndata: %s\n\n", message.Action)
if err != nil {
log.Debugf("Error while writing to event stream: %v", err)
break
}
f.Flush()
default:
log.Debugf("Ignoring docker event: %v", message.Action)
}
case <-ctx.Done():
break Loop
case <-err:
break Loop
}
}
}
func (h *handler) version(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, version)
}

View File

@@ -3,6 +3,7 @@ package main
import (
"context"
"errors"
"io"
"net/http"
"net/http/httptest"
"os"
@@ -32,7 +33,7 @@ func (m *MockedClient) FindContainer(id string) (docker.Container, error) {
return container, args.Error(1)
}
func (m *MockedClient) ListContainers(showAll bool) ([]docker.Container, error) {
func (m *MockedClient) ListContainers() ([]docker.Container, error) {
args := m.Called()
containers, ok := args.Get(0).([]docker.Container)
if !ok {
@@ -41,7 +42,7 @@ func (m *MockedClient) ListContainers(showAll bool) ([]docker.Container, error)
return containers, args.Error(1)
}
func (m *MockedClient) ContainerLogs(ctx context.Context, id string, tailSize int) (<-chan string, <-chan error) {
func (m *MockedClient) ContainerLogs(ctx context.Context, id string, tailSize int, since string) (<-chan string, <-chan error) {
args := m.Called(ctx, id, tailSize)
channel, ok := args.Get(0).(chan string)
if !ok {
@@ -124,6 +125,60 @@ func Test_handler_streamLogs_happy(t *testing.T) {
mockedClient.AssertExpectations(t)
}
func Test_handler_streamLogs_happy_with_id(t *testing.T) {
id := "123456"
req, err := http.NewRequest("GET", "/api/logs/stream", nil)
q := req.URL.Query()
q.Add("id", id)
req.URL.RawQuery = q.Encode()
require.NoError(t, err, "NewRequest should not return an error.")
mockedClient := new(MockedClient)
messages := make(chan string)
errChannel := make(chan error)
mockedClient.On("FindContainer", id).Return(docker.Container{ID: id}, nil)
mockedClient.On("ContainerLogs", mock.Anything, mock.Anything, 300).Return(messages, errChannel)
go func() {
messages <- "2020-05-13T18:55:37.772853839Z INFO Testing logs..."
close(messages)
}()
h := handler{client: mockedClient}
handler := http.HandlerFunc(h.streamLogs)
rr := httptest.NewRecorder()
handler.ServeHTTP(rr, req)
abide.AssertHTTPResponse(t, t.Name(), rr.Result())
mockedClient.AssertExpectations(t)
}
func Test_handler_streamLogs_happy_container_stopped(t *testing.T) {
id := "123456"
req, err := http.NewRequest("GET", "/api/logs/stream", nil)
q := req.URL.Query()
q.Add("id", id)
req.URL.RawQuery = q.Encode()
require.NoError(t, err, "NewRequest should not return an error.")
mockedClient := new(MockedClient)
messages := make(chan string)
errChannel := make(chan error)
mockedClient.On("FindContainer", id).Return(docker.Container{ID: id}, nil)
mockedClient.On("ContainerLogs", mock.Anything, id, 300).Return(messages, errChannel)
go func() {
errChannel <- io.EOF
close(messages)
}()
h := handler{client: mockedClient}
handler := http.HandlerFunc(h.streamLogs)
rr := httptest.NewRecorder()
handler.ServeHTTP(rr, req)
abide.AssertHTTPResponse(t, t.Name(), rr.Result())
mockedClient.AssertExpectations(t)
}
func Test_handler_streamLogs_error_finding_container(t *testing.T) {
id := "123456"
req, err := http.NewRequest("GET", "/api/logs/stream", nil)
@@ -159,6 +214,7 @@ func Test_handler_streamLogs_error_reading(t *testing.T) {
go func() {
errChannel <- errors.New("test error")
close(messages)
}()
h := handler{client: mockedClient}
@@ -246,7 +302,7 @@ func Test_createRoutes_index(t *testing.T) {
box := packr.NewBox("./virtual")
require.NoError(t, box.AddString("index.html", "index page"), "AddString should have no error.")
handler := createRoutes("/", &handler{mockedClient, true, box})
handler := createRoutes("/", &handler{mockedClient, box})
req, err := http.NewRequest("GET", "/", nil)
require.NoError(t, err, "NewRequest should not return an error.")
rr := httptest.NewRecorder()
@@ -259,7 +315,7 @@ func Test_createRoutes_redirect(t *testing.T) {
mockedClient := new(MockedClient)
box := packr.NewBox("./virtual")
handler := createRoutes("/foobar", &handler{mockedClient, true, box})
handler := createRoutes("/foobar", &handler{mockedClient, box})
req, err := http.NewRequest("GET", "/foobar", nil)
require.NoError(t, err, "NewRequest should not return an error.")
rr := httptest.NewRecorder()
@@ -273,7 +329,7 @@ func Test_createRoutes_foobar(t *testing.T) {
box := packr.NewBox("./virtual")
require.NoError(t, box.AddString("index.html", "foo page"), "AddString should have no error.")
handler := createRoutes("/foobar", &handler{mockedClient, true, box})
handler := createRoutes("/foobar", &handler{mockedClient, box})
req, err := http.NewRequest("GET", "/foobar/", nil)
require.NoError(t, err, "NewRequest should not return an error.")
rr := httptest.NewRecorder()
@@ -287,7 +343,7 @@ func Test_createRoutes_foobar_file(t *testing.T) {
box := packr.NewBox("./virtual")
require.NoError(t, box.AddString("/test", "test page"), "AddString should have no error.")
handler := createRoutes("/foobar", &handler{mockedClient, true, box})
handler := createRoutes("/foobar", &handler{mockedClient, box})
req, err := http.NewRequest("GET", "/foobar/test", nil)
require.NoError(t, err, "NewRequest should not return an error.")
rr := httptest.NewRecorder()
@@ -300,7 +356,7 @@ func Test_createRoutes_version(t *testing.T) {
mockedClient := new(MockedClient)
box := packr.NewBox("./virtual")
handler := createRoutes("/", &handler{mockedClient, true, box})
handler := createRoutes("/", &handler{mockedClient, box})
req, err := http.NewRequest("GET", "/version", nil)
require.NoError(t, err, "NewRequest should not return an error.")
rr := httptest.NewRecorder()

View File

@@ -1,18 +1,18 @@
{
"name": "dozzle",
"version": "1.21.8",
"version": "1.26.1",
"description": "Realtime log viewer for docker containers. ",
"scripts": {
"prestart": "npm run clean",
"start": "DOCKER_API_VERSION=1.38 concurrently 'npm run watch-server' 'npm run watch-assets'",
"watch-assets": "npx parcel watch --no-source-maps --public-url '__BASE__' assets/index.html -d static",
"watch-server": "reflex -c .reflex",
"prebuild": "npm run clean",
"build": "npx parcel build --no-source-maps --public-url '__BASE__' assets/index.html -d static",
"prestart": "yarn clean",
"start": "npm-run-all -p watch:*",
"watch:assets": "webpack --mode=development --watch",
"watch:server": "reflex -c .reflex",
"prebuild": "yarn clean",
"build": "yarn webpack --mode=production",
"clean": "rm -rf static/ a_main-packr.go",
"release": "release-it",
"test": "jest",
"integration": "docker-compose -f integration/docker-compose.test.yml run integration"
"test": "TZ=UTC jest",
"integration": "docker-compose -f integration/docker-compose.test.yml up --build --force-recreate integration"
},
"repository": {
"type": "git",
@@ -26,42 +26,53 @@
"homepage": "https://github.com/amir20/dozzle#readme",
"dependencies": {
"ansi-to-html": "^0.6.14",
"buefy": "^0.8.15",
"bulma": "^0.8.1",
"caniuse-lite": "^1.0.30001039",
"date-fns": "^2.11.1",
"hotkeys-js": "^3.7.6",
"buefy": "^0.8.20",
"bulma": "^0.8.2",
"date-fns": "^2.14.0",
"dompurify": "^2.0.11",
"hotkeys-js": "^3.8.1",
"lodash.debounce": "^4.0.8",
"semver": "^7.2.1",
"semver": "^7.3.2",
"splitpanes": "^2.2.1",
"store": "^2.0.12",
"vue": "^2.6.11",
"vue-meta": "^2.3.3",
"vue-router": "^3.1.6",
"vuex": "^3.1.3"
"vue-meta": "^2.3.4",
"vue-router": "^3.3.2",
"vuex": "^3.4.0"
},
"devDependencies": {
"@babel/core": "^7.9.0",
"@babel/plugin-transform-runtime": "^7.9.0",
"@vue/component-compiler-utils": "^3.1.1",
"@vue/test-utils": "^1.0.0-beta.29",
"@babel/core": "^7.10.2",
"@babel/plugin-transform-runtime": "^7.10.1",
"@vue/component-compiler-utils": "^3.1.2",
"@vue/test-utils": "^1.0.3",
"babel-core": "^7.0.0-bridge.0",
"babel-jest": "^25.2.6",
"concurrently": "^5.1.0",
"babel-jest": "^26.0.1",
"babel-preset-env": "^1.7.0",
"caniuse-lite": "^1.0.30001066",
"css-loader": "^3.5.3",
"eventsourcemock": "^2.0.0",
"husky": "^4.2.3",
"jest": "^25.2.7",
"html-webpack-plugin": "^4.3.0",
"husky": "^4.2.5",
"jest": "^26.0.1",
"jest-serializer-vue": "^2.0.2",
"lint-staged": "^10.1.2",
"mockdate": "^2.0.5",
"node-fetch": "^2.6.0",
"parcel-bundler": "^1.12.4",
"prettier": "^2.0.4",
"release-it": "^13.5.2",
"sass": "^1.26.3",
"lint-staged": "^10.2.7",
"mini-css-extract-plugin": "^0.9.0",
"npm-run-all": "^4.1.5",
"postcss-cssnext": "^3.1.0",
"postcss-import": "^12.0.1",
"postcss-loader": "^3.0.0",
"prettier": "^2.0.5",
"release-it": "^13.6.1",
"sass": "^1.26.7",
"sass-loader": "^8.0.2",
"vue-hot-reload-api": "^2.3.4",
"vue-jest": "^3.0.5",
"vue-template-compiler": "^2.6.11"
"vue-loader": "^15.9.2",
"vue-style-loader": "^4.1.2",
"vue-template-compiler": "^2.6.11",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.11",
"webpack-pwa-manifest": "^4.2.0"
},
"husky": {
"hooks": {
@@ -73,40 +84,6 @@
"prettier --write"
]
},
"browserslist": [
">5%"
],
"alias": {
"vue": "./node_modules/vue/dist/vue.runtime.esm.js"
},
"jest": {
"clearMocks": true,
"moduleFileExtensions": [
"js",
"json",
"vue"
],
"coveragePathIgnorePatterns": [
"node_modules"
],
"testPathIgnorePatterns": [
"node_modules",
"<rootDir>/integration/"
],
"transformIgnorePatterns": [
"node_modules"
],
"watchPathIgnorePatterns": [
"<rootDir>/node_modules/"
],
"snapshotSerializers": [
"jest-serializer-vue"
],
"transform": {
".*\\.vue$": "vue-jest",
".+\\.js$": "babel-jest"
}
},
"release-it": {
"github": {
"release": true

200
routes.go Normal file
View File

@@ -0,0 +1,200 @@
package main
import (
"encoding/json"
"fmt"
"html/template"
"io"
"net/http"
"runtime"
"strings"
"time"
"github.com/gorilla/mux"
log "github.com/sirupsen/logrus"
)
func createRoutes(base string, h *handler) *mux.Router {
r := mux.NewRouter()
r.Use(setCSPHeaders)
if base != "/" {
r.HandleFunc(base, http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
http.Redirect(w, req, base+"/", http.StatusMovedPermanently)
}))
}
s := r.PathPrefix(base).Subrouter()
s.HandleFunc("/api/containers.json", h.listContainers)
s.HandleFunc("/api/logs/stream", h.streamLogs)
s.HandleFunc("/api/logs", h.fetchLogsBetweenDates)
s.HandleFunc("/api/events/stream", h.streamEvents)
s.HandleFunc("/version", h.version)
s.PathPrefix("/").Handler(http.StripPrefix(base, http.HandlerFunc(h.index)))
return r
}
func setCSPHeaders(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Security-Policy", "default-src 'none'; script-src 'self'; style-src 'self' 'unsafe-inline' fonts.googleapis.com; img-src 'self'; manifest-src 'self'; font-src fonts.gstatic.com; connect-src 'self' api.github.com; require-trusted-types-for 'script'")
next.ServeHTTP(w, r)
})
}
func (h *handler) index(w http.ResponseWriter, req *http.Request) {
fileServer := http.FileServer(h.box)
if h.box.Has(req.URL.Path) && req.URL.Path != "" && req.URL.Path != "/" {
fileServer.ServeHTTP(w, req)
} else {
text, err := h.box.FindString("index.html")
if err != nil {
panic(err)
}
tmpl, err := template.New("index.html").Parse(text)
if err != nil {
panic(err)
}
path := ""
if base != "/" {
path = base
}
data := struct {
Base string
Version string
}{path, version}
err = tmpl.Execute(w, data)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
}
}
func (h *handler) listContainers(w http.ResponseWriter, r *http.Request) {
containers, err := h.client.ListContainers()
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
err = json.NewEncoder(w).Encode(containers)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
}
func (h *handler) fetchLogsBetweenDates(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/plain; charset=UTF-8")
from, _ := time.Parse(time.RFC3339, r.URL.Query().Get("from"))
to, _ := time.Parse(time.RFC3339, r.URL.Query().Get("to"))
id := r.URL.Query().Get("id")
messages, _ := h.client.ContainerLogsBetweenDates(r.Context(), id, from, to)
for _, m := range messages {
fmt.Fprintln(w, m)
}
}
func (h *handler) streamLogs(w http.ResponseWriter, r *http.Request) {
id := r.URL.Query().Get("id")
if id == "" {
http.Error(w, "id is required", http.StatusBadRequest)
return
}
f, ok := w.(http.Flusher)
if !ok {
http.Error(w, "Streaming unsupported!", http.StatusInternalServerError)
return
}
container, e := h.client.FindContainer(id)
if e != nil {
http.Error(w, e.Error(), http.StatusNotFound)
return
}
messages, err := h.client.ContainerLogs(r.Context(), container.ID, tailSize, r.Header.Get("Last-Event-ID"))
w.Header().Set("Content-Type", "text/event-stream")
w.Header().Set("Cache-Control", "no-cache")
w.Header().Set("Connection", "keep-alive")
w.Header().Set("X-Accel-Buffering", "no")
Loop:
for {
select {
case message, ok := <-messages:
if !ok {
break Loop
}
fmt.Fprintf(w, "data: %s\n", message)
if index := strings.IndexAny(message, " "); index != -1 {
id := message[:index]
if _, err := time.Parse(time.RFC3339Nano, id); err == nil {
fmt.Fprintf(w, "id: %s\n", id)
}
}
fmt.Fprintf(w, "\n")
f.Flush()
case e := <-err:
if e == io.EOF {
log.Debugf("Container stopped: %v", container.ID)
fmt.Fprintf(w, "event: container-stopped\ndata: end of stream\n\n")
f.Flush()
} else {
log.Debugf("Error while reading from log stream: %v", e)
break Loop
}
}
}
log.WithField("NumGoroutine", runtime.NumGoroutine()).Debug("runtime stats")
}
func (h *handler) streamEvents(w http.ResponseWriter, r *http.Request) {
f, ok := w.(http.Flusher)
if !ok {
http.Error(w, "Streaming unsupported!", http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "text/event-stream")
w.Header().Set("Cache-Control", "no-cache")
w.Header().Set("Connection", "keep-alive")
w.Header().Set("X-Accel-Buffering", "no")
ctx := r.Context()
messages, err := h.client.Events(ctx)
Loop:
for {
select {
case message, ok := <-messages:
if !ok {
break Loop
}
switch message.Action {
case "connect", "disconnect", "create", "destroy", "start", "stop":
log.Debugf("Triggering docker event: %v", message.Action)
_, err := fmt.Fprintf(w, "event: containers-changed\ndata: %s\n\n", message.Action)
if err != nil {
log.Debugf("Error while writing to event stream: %v", err)
break
}
f.Flush()
default:
log.Debugf("Ignoring docker event: %v", message.Action)
}
case <-ctx.Done():
break Loop
case <-err:
break Loop
}
}
}
func (h *handler) version(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, version)
}

78
webpack.config.js Normal file
View File

@@ -0,0 +1,78 @@
const path = require("path");
const { VueLoaderPlugin } = require("vue-loader");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const WebpackPwaManifest = require("webpack-pwa-manifest");
module.exports = (env, argv) => ({
stats: { children: false, entrypoints: false, modules: false },
performance: {
maxAssetSize: 350000,
maxEntrypointSize: 600000,
},
devtool: argv.mode === "development" ? "inline-cheap-source-map" : false,
entry: ["./assets/main.js", "./assets/styles.scss"],
output: {
path: path.resolve(__dirname, "./static"),
filename: "[name].js",
publicPath: "{{ .Base }}",
},
module: {
rules: [
{
test: /\.vue$/,
loader: "vue-loader",
},
{
test: /\.(sass|scss|css)$/,
use: [
MiniCssExtractPlugin.loader,
{
loader: "css-loader",
query: {
importLoaders: 1,
},
},
{
loader: "postcss-loader",
options: {
ident: "postcss",
plugins: (loader) => [
require("postcss-import")(),
require("postcss-cssnext")({
features: {
customProperties: { warnings: false },
},
}),
],
},
},
"sass-loader",
],
},
],
},
plugins: [
new VueLoaderPlugin(),
new MiniCssExtractPlugin(),
new HtmlWebpackPlugin({
hash: true,
template: "assets/index.ejs",
scriptLoading: "defer",
favicon: "assets/favicon.svg",
}),
new WebpackPwaManifest({
name: "Dozzle Log Viewer",
short_name: "Dozzle",
theme_color: "#222",
background_color: "#222",
display: "standalone",
}),
],
resolve: {
alias: {
vue$: "vue/dist/vue.runtime.esm.js",
},
extensions: ["*", ".js", ".vue", ".json"],
},
});

7168
yarn.lock

File diff suppressed because it is too large Load Diff