diff --git a/.drone.star b/.drone.star
index bf1b31e02d..91630751c8 100644
--- a/.drone.star
+++ b/.drone.star
@@ -449,9 +449,10 @@ def binary(ctx, name):
'files': [
'dist/release/*',
],
- 'title': ctx.build.ref.replace("refs/tags/", ""),
+ 'title': ctx.build.ref.replace("refs/tags/v", ""),
'note': 'dist/CHANGELOG.md',
'overwrite': True,
+ 'prerelease': len(ctx.build.ref.split("-")) > 1,
},
'when': {
'ref': [
@@ -522,6 +523,7 @@ def manifest(ctx):
}
def changelog(ctx):
+ repo_slug = ctx.build.source_repo if ctx.build.source_repo else ctx.repo.slug
return {
'kind': 'pipeline',
'type': 'docker',
@@ -542,8 +544,8 @@ def changelog(ctx):
'actions': [
'clone',
],
- 'remote': 'https://github.com/%s' % (ctx.repo.slug),
- 'branch': ctx.build.branch if ctx.build.event == 'pull_request' else 'master',
+ 'remote': 'https://github.com/%s' % (repo_slug),
+ 'branch': ctx.build.source if ctx.build.event == 'pull_request' else 'master',
'path': '/drone/src',
'netrc_machine': 'github.com',
'netrc_username': {
@@ -562,6 +564,14 @@ def changelog(ctx):
'make changelog',
],
},
+ {
+ 'name': 'diff',
+ 'image': 'webhippie/golang:1.13',
+ 'pull': 'always',
+ 'commands': [
+ 'git diff',
+ ],
+ },
{
'name': 'output',
'image': 'webhippie/golang:1.13',
@@ -606,7 +616,7 @@ def changelog(ctx):
'trigger': {
'ref': [
'refs/heads/master',
- 'refs/tags/**',
+ 'refs/pull/**',
],
},
}
@@ -693,11 +703,25 @@ def website(ctx):
},
'steps': [
{
- 'name': 'generate',
- 'image': 'webhippie/hugo:latest',
- 'pull': 'always',
+ 'name': 'prepare',
+ 'image': 'owncloudci/alpine:latest',
'commands': [
- 'make docs',
+ 'make docs-copy'
+ ],
+ },
+ {
+ 'name': 'test',
+ 'image': 'webhippie/hugo:latest',
+ 'commands': [
+ 'cd hugo',
+ 'hugo',
+ ],
+ },
+ {
+ 'name': 'list',
+ 'image': 'owncloudci/alpine:latest',
+ 'commands': [
+ 'tree hugo/public',
],
},
{
@@ -711,8 +735,28 @@ def website(ctx):
'password': {
'from_secret': 'github_token',
},
- 'pages_directory': 'docs/public/',
- 'temporary_base': 'tmp/',
+ 'pages_directory': 'docs/',
+ 'target_branch': 'docs',
+ },
+ 'when': {
+ 'ref': {
+ 'exclude': [
+ 'refs/pull/**',
+ ],
+ },
+ },
+ },
+ {
+ 'name': 'downstream',
+ 'image': 'plugins/downstream',
+ 'settings': {
+ 'server': 'https://cloud.drone.io/',
+ 'token': {
+ 'from_secret': 'drone_token',
+ },
+ 'repositories': [
+ 'owncloud/owncloud.github.io@source',
+ ],
},
'when': {
'ref': {
diff --git a/.gitignore b/.gitignore
index 94ba5a12be..6067678797 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,7 @@ coverage.out
/bin
/dist
+/hugo
/node_modules
/assets
diff --git a/Makefile b/Makefile
index e5eb471cc1..a8bfd2d573 100644
--- a/Makefile
+++ b/Makefile
@@ -3,6 +3,7 @@ NAME := ocis-reva
IMPORT := github.com/owncloud/$(NAME)
BIN := bin
DIST := dist
+HUGO := hugo
ifeq ($(OS), Windows_NT)
EXECUTABLE := $(NAME).exe
@@ -130,9 +131,24 @@ release-check:
.PHONY: release-finish
release-finish: release-copy release-check
+.PHONY: docs-copy
+docs-copy:
+ mkdir -p $(HUGO); \
+ mkdir -p $(HUGO)/content/extensions; \
+ cd $(HUGO); \
+ git init; \
+ git remote rm origin; \
+ git remote add origin https://github.com/owncloud/owncloud.github.io; \
+ git fetch; \
+ git checkout origin/source -f; \
+ rsync --delete -ax ../docs/ content/extensions/$(NAME)
+
+.PHONY: docs-build
+docs-build:
+ cd $(HUGO); hugo
+
.PHONY: docs
-docs:
- cd docs; hugo
+docs: docs-copy docs-build
.PHONY: watch
watch:
diff --git a/changelog/CHANGELOG.tmpl b/changelog/CHANGELOG.tmpl
index 3fee894812..0c9c645a23 100644
--- a/changelog/CHANGELOG.tmpl
+++ b/changelog/CHANGELOG.tmpl
@@ -1,18 +1,40 @@
-{{- range $changes := . }}{{ with $changes -}}
-# Changelog for {{ .Version }}
+{{ $allVersions := . }}
+{{- range $index, $changes := . }}{{ with $changes -}}
+# Changelog for [{{ .Version }}] ({{ .Date }})
The following sections list the changes for {{ .Version }}.
+{{ if gt (len $allVersions) 1 -}}
+{{/* creating version compare links */ -}}
+{{ $next := add1 $index -}}
+{{ if ne (len $allVersions) $next -}}
+{{ $previousVersion := (index $allVersions $next).Version -}}
+{{ if eq .Version "unreleased" -}}
+[{{ .Version }}]: https://github.com/owncloud/ocis-reva/compare/v{{ $previousVersion }}...master
+
+{{ else -}}
+[{{ .Version }}]: https://github.com/owncloud/ocis-reva/compare/v{{ $previousVersion }}...v{{ .Version }}
+
+{{ end -}}
+{{ end -}}
+
+{{- /* last version managed by calens, end of the loop */ -}}
+{{ if eq .Version "0.1.0" -}}
+[{{ .Version }}]: https://github.com/owncloud/ocis-reva/compare/6702be7f9045a382d40691a9bcd04f572203e9ed...v{{ .Version }}
+
+{{ end -}}
+{{- end -}}
+
## Summary
{{ range $entry := .Entries }}{{ with $entry }}
- * {{ .TypeShort }} #{{ .PrimaryID }}: {{ .Title }}
+* {{ .Type }} #{{ .PrimaryID }}: {{ .Title }}
{{- end }}{{ end }}
## Details
{{ range $entry := .Entries }}{{ with $entry }}
- * {{ .Type }} #{{ .PrimaryID }}: {{ .Title }}
+* {{ .Type }} #{{ .PrimaryID }}: {{ .Title }}
{{ range $par := .Paragraphs }}
- {{ wrap $par 80 3 }}
+ {{ wrapIndent $par 80 3 }}
{{ end -}}
{{ range $url := .IssueURLs }}
{{ $url -}}
@@ -23,6 +45,6 @@ The following sections list the changes for {{ .Version }}.
{{ range $url := .OtherURLs }}
{{ $url -}}
{{ end }}
-{{ end }}{{ end }}
{{ end }}{{ end -}}
+{{ end }}{{ end -}}
diff --git a/docs/.gitignore b/docs/.gitignore
deleted file mode 100644
index 364fdec1aa..0000000000
--- a/docs/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-public/
diff --git a/docs/content/about.md b/docs/_index.md
similarity index 84%
rename from docs/content/about.md
rename to docs/_index.md
index df0238ebf4..0fc8bbb2cc 100644
--- a/docs/content/about.md
+++ b/docs/_index.md
@@ -1,7 +1,7 @@
---
-title: "About"
+title: "Reva"
date: 2018-05-02T00:00:00+00:00
-anchor: "about"
+anchor: "ocis-reva"
weight: 10
---
diff --git a/docs/archetypes/default.md b/docs/archetypes/default.md
deleted file mode 100644
index 4e777bee13..0000000000
--- a/docs/archetypes/default.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: "{{ replace .TranslationBaseName "-" " " | title }}"
-date: {{ .Date }}
-anchor: "{{ replace .TranslationBaseName "-" " " | title | urlize }}"
-weight:
----
diff --git a/docs/content/building.md b/docs/building.md
similarity index 100%
rename from docs/content/building.md
rename to docs/building.md
diff --git a/docs/config.toml b/docs/config.toml
deleted file mode 100644
index f90bc63933..0000000000
--- a/docs/config.toml
+++ /dev/null
@@ -1,18 +0,0 @@
-baseURL = "https://owncloud.github.io/ocis-reva/"
-languageCode = "en-us"
-title = "ownCloud Infinite Scale: Reva"
-pygmentsUseClasses = true
-
-disableKinds = ["taxonomy", "taxonomyTerm", "RSS", "sitemap"]
-
-[blackfriday]
- angledQuotes = true
- fractions = false
- plainIDAnchors = true
- smartlists = true
- extensions = ["hardLineBreak"]
-
-[params]
- author = "ownCloud GmbH"
- description = "Example service for oCIS"
- keywords = "reva, ocis"
diff --git a/docs/content/getting-started.md b/docs/getting-started.md
similarity index 100%
rename from docs/content/getting-started.md
rename to docs/getting-started.md
diff --git a/docs/layouts/_default/list.html b/docs/layouts/_default/list.html
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/docs/layouts/_default/single.html b/docs/layouts/_default/single.html
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/docs/layouts/index.html b/docs/layouts/index.html
deleted file mode 100644
index 27db113acd..0000000000
--- a/docs/layouts/index.html
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
-
-
-
-
-
-
- {{ .Site.Title }}
-
-
-
-
-
- {{ partial "style.html" . }}
-
-
-
-
-
- {{ range .Data.Pages.ByWeight }}
-
-
-
- {{ .Content | markdownify }}
-
- {{ end }}
-
-
diff --git a/docs/layouts/partials/style.html b/docs/layouts/partials/style.html
deleted file mode 100644
index 1386c59b0d..0000000000
--- a/docs/layouts/partials/style.html
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
diff --git a/docs/content/license.md b/docs/license.md
similarity index 100%
rename from docs/content/license.md
rename to docs/license.md
diff --git a/docs/static/styles.css b/docs/static/styles.css
deleted file mode 100644
index 61acc8ddb5..0000000000
--- a/docs/static/styles.css
+++ /dev/null
@@ -1,338 +0,0 @@
-body,
-html {
- cursor: default;
-}
-
-body,
-div,
-dl,
-dt,
-dd,
-ul,
-ol,
-li,
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-pre,
-form,
-fieldset,
-input,
-textarea,
-p,
-blockquote,
-th,
-td {
- margin: 0;
- padding: 0;
-}
-
-* {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-:before,
-:after {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-img,
-object,
-embed {
- max-width: 100%;
- height: auto;
-}
-
-object,
-embed {
- height: 100%;
-}
-
-img {
- margin: 1.25% 0;
- -ms-interpolation-mode: bicubic;
-}
-
-html {
- background-color: #F0F1F3;
- padding: 2%;
-}
-
-body {
- font-size: 16px;
- line-height: 1.6;
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
- color: #242424;
- max-width: 800px;
- margin: 5% auto;
-}
-
-body::after {
- clear: both;
- content: "";
- display: table;
-}
-
-header {
- margin-bottom: 8%;
-}
-
-footer {
- text-align: center;
-}
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h2 a {
- color: #263A48;
- font-weight: 500;
- text-decoration: none;
-}
-
-h1,
-h2 {
- font-size: 36px;
- padding-bottom: 0.3em;
- margin-bottom: 0.4em;
- border-bottom: 1px solid #eee
-}
-
-h2 {
- font-size: 22px;
- padding-bottom: 0.6em;
- margin-bottom: 0.6em;
- margin-top: 2.5em;
-}
-
-h3 {
- font-size: 18px;
- margin-bottom: 0.3em;
-}
-
-h2 small a {
- color: #98999C;
- font-size: 15px;
- font-weight: normal;
- float: right;
- position: absolute;
- top: 15px;
- right: 20px;
-}
-
-section {
- background: #fff;
- margin-bottom: 1%;
- position: relative;
- padding: 6% 8%;
-}
-
-blockquote {
- border-left: 3px solid #d54e21;
- font-size: 16px;
- padding: 0 0 0 20px;
- color: #d54e21;
-}
-
-blockquote a {
- color: #d54e21;
- font-weight: 500;
-}
-
-blockquote code {
- color: #d54e21;
-}
-
-.highlight pre {
- padding: 10px;
-}
-
-.highlight {
- margin-bottom: 4%;
-}
-
-a {
- color: #1e8cbe;
- text-decoration: underline;
-}
-
-a:hover {
- color: #d54e21;
-}
-
-ul {
- list-style: none;
-}
-
-ol {
- list-style: number;
-}
-
-ol li {
- color: #98999C;
- margin-bottom: 5px;
-}
-
-ol li:last-child {
- margin-bottom: 0;
-}
-
-p,
-ul,
-ol,
-blockquote {
- margin-bottom: 4%;
-}
-
-ul ul {
- padding-top: 0;
- margin-bottom: 0;
- margin-left: 4%;
-}
-
-ul ul li:before {
- content: '-';
- display: inline-block;
- padding-right: 2%;
-}
-
-ul.col-2 {
- color: #98999C;
- -webkit-column-count: 2;
- -moz-column-count: 2;
- column-count: 2;
- -webkit-column-gap: 20px;
- -moz-column-gap: 20px;
- column-gap: 20px;
-}
-
-dl dt {
- font-weight: bold;
-}
-
-dl dd {
- padding-left: 10px;
-}
-
-@media screen and (min-width: 500px) {
- ul.col-2 {
- -webkit-column-count: 3;
- -moz-column-count: 3;
- column-count: 3;
- -webkit-column-gap: 20px;
- -moz-column-gap: 20px;
- column-gap: 20px;
- }
-}
-
-nav {
- background: #F0F1F3;
- min-width: 215px;
- margin-bottom: 5px;
- margin-top: 15px;
-}
-
-nav:first-of-type a {
- color: #d54e21;
- border-radius: 0;
-}
-
-nav:first-of-type a:hover {
- color: #d54e21;
-}
-
-nav:first-of-type a:before {
- background-color: #d54e21;
-}
-
-nav.affix {
- position: fixed;
- top: 20px;
-}
-
-nav.affix-bottom {
- position: absolute;
-}
-
-nav a {
- border-radius: 3px;
- font-size: 15px;
- display: block;
- cursor: pointer;
- font-weight: 500;
- position: relative;
- text-decoration: none;
- padding: 10px 12px;
- width: 100%;
- padding-right: 3px;
- border-bottom: 2px solid #fff;
-}
-
-nav a:before {
- content: '';
- width: 4px;
- display: block;
- left: 0;
- position: absolute;
- height: 100%;
- display: none;
- background: #1e8cbe;
- top: 0;
-}
-
-nav a:hover {
- background-color: #E6E8EA;
- color: #1e8cbe;
- text-decoration: underline;
-}
-
-nav a:hover:before {
- display: block;
-}
-
-nav a:last-of-type {
- border-bottom: none;
-}
-
-.gist {
- margin-top: 5.1%;
- margin-bottom: 5%;
-}
-
-@media screen and (max-width: 1050px) {
- body {
- margin: 0 auto;
- }
-}
-
-@media screen and (max-width: 767px) {
- header span {
- display: none;
- }
-
- h1 {
- font-size: 26px;
- }
-
- h2 {
- font-size: 20px;
- }
-}
-
-@media screen and (max-width: 514px) {
- p,
- ul,
- ol,
- blockquote {
- margin-bottom: 8%;
- }
-}
diff --git a/docs/static/syntax.css b/docs/static/syntax.css
deleted file mode 100644
index 681758d068..0000000000
--- a/docs/static/syntax.css
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Background */ .chroma { color: #f8f8f2; background-color: #272822 }
-/* Error */ .chroma .err { color: #960050; background-color: #1e0010 }
-/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
-/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; width: auto; overflow: auto; display: block; }
-/* LineHighlight */ .chroma .hl { display: block; width: 100%;background-color: #ffffcc }
-/* LineNumbersTable */ .chroma .lnt { margin-right: 0.4em; padding: 0 0.4em 0 0.4em; }
-/* LineNumbers */ .chroma .ln { margin-right: 0.4em; padding: 0 0.4em 0 0.4em; }
-/* Keyword */ .chroma .k { color: #66d9ef }
-/* KeywordConstant */ .chroma .kc { color: #66d9ef }
-/* KeywordDeclaration */ .chroma .kd { color: #66d9ef }
-/* KeywordNamespace */ .chroma .kn { color: #f92672 }
-/* KeywordPseudo */ .chroma .kp { color: #66d9ef }
-/* KeywordReserved */ .chroma .kr { color: #66d9ef }
-/* KeywordType */ .chroma .kt { color: #66d9ef }
-/* NameAttribute */ .chroma .na { color: #a6e22e }
-/* NameClass */ .chroma .nc { color: #a6e22e }
-/* NameConstant */ .chroma .no { color: #66d9ef }
-/* NameDecorator */ .chroma .nd { color: #a6e22e }
-/* NameException */ .chroma .ne { color: #a6e22e }
-/* NameFunction */ .chroma .nf { color: #a6e22e }
-/* NameOther */ .chroma .nx { color: #a6e22e }
-/* NameTag */ .chroma .nt { color: #f92672 }
-/* Literal */ .chroma .l { color: #ae81ff }
-/* LiteralDate */ .chroma .ld { color: #e6db74 }
-/* LiteralString */ .chroma .s { color: #e6db74 }
-/* LiteralStringAffix */ .chroma .sa { color: #e6db74 }
-/* LiteralStringBacktick */ .chroma .sb { color: #e6db74 }
-/* LiteralStringChar */ .chroma .sc { color: #e6db74 }
-/* LiteralStringDelimiter */ .chroma .dl { color: #e6db74 }
-/* LiteralStringDoc */ .chroma .sd { color: #e6db74 }
-/* LiteralStringDouble */ .chroma .s2 { color: #e6db74 }
-/* LiteralStringEscape */ .chroma .se { color: #ae81ff }
-/* LiteralStringHeredoc */ .chroma .sh { color: #e6db74 }
-/* LiteralStringInterpol */ .chroma .si { color: #e6db74 }
-/* LiteralStringOther */ .chroma .sx { color: #e6db74 }
-/* LiteralStringRegex */ .chroma .sr { color: #e6db74 }
-/* LiteralStringSingle */ .chroma .s1 { color: #e6db74 }
-/* LiteralStringSymbol */ .chroma .ss { color: #e6db74 }
-/* LiteralNumber */ .chroma .m { color: #ae81ff }
-/* LiteralNumberBin */ .chroma .mb { color: #ae81ff }
-/* LiteralNumberFloat */ .chroma .mf { color: #ae81ff }
-/* LiteralNumberHex */ .chroma .mh { color: #ae81ff }
-/* LiteralNumberInteger */ .chroma .mi { color: #ae81ff }
-/* LiteralNumberIntegerLong */ .chroma .il { color: #ae81ff }
-/* LiteralNumberOct */ .chroma .mo { color: #ae81ff }
-/* Operator */ .chroma .o { color: #f92672 }
-/* OperatorWord */ .chroma .ow { color: #f92672 }
-/* Comment */ .chroma .c { color: #75715e }
-/* CommentHashbang */ .chroma .ch { color: #75715e }
-/* CommentMultiline */ .chroma .cm { color: #75715e }
-/* CommentSingle */ .chroma .c1 { color: #75715e }
-/* CommentSpecial */ .chroma .cs { color: #75715e }
-/* CommentPreproc */ .chroma .cp { color: #75715e }
-/* CommentPreprocFile */ .chroma .cpf { color: #75715e }
-/* GenericDeleted */ .chroma .gd { color: #f92672 }
-/* GenericEmph */ .chroma .ge { font-style: italic }
-/* GenericInserted */ .chroma .gi { color: #a6e22e }
-/* GenericStrong */ .chroma .gs { font-weight: bold }
-/* GenericSubheading */ .chroma .gu { color: #75715e }
diff --git a/docs/content/users.md b/docs/users.md
similarity index 100%
rename from docs/content/users.md
rename to docs/users.md
diff --git a/go.mod b/go.mod
index c03d8cea50..19c09e8383 100644
--- a/go.mod
+++ b/go.mod
@@ -14,6 +14,7 @@ require (
github.com/pelletier/go-toml v1.6.0 // indirect
github.com/prometheus/client_model v0.0.0-20191202183732-d1d2010b5bee // indirect
github.com/prometheus/procfs v0.0.8 // indirect
+ github.com/restic/calens v0.2.0 // indirect
github.com/spf13/afero v1.2.2 // indirect
github.com/spf13/cast v1.3.1 // indirect
github.com/spf13/jwalterweatherman v1.1.0 // indirect
diff --git a/go.sum b/go.sum
index c65fd61313..5b68fcdd26 100644
--- a/go.sum
+++ b/go.sum
@@ -33,6 +33,12 @@ github.com/Azure/go-autorest/tracing v0.1.0/go.mod h1:ROEEAFwXycQw7Sn3DXNtEedEvd
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/Masterminds/goutils v1.1.0 h1:zukEsf/1JZwCMgHiK3GZftabmxiCw4apj3a28RPBiVg=
+github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU=
+github.com/Masterminds/semver/v3 v3.0.2 h1:tRi7ENs+AaOUCH+j6qwNQgPYfV26dX3JNonq+V4mhqc=
+github.com/Masterminds/semver/v3 v3.0.2/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs=
+github.com/Masterminds/sprig/v3 v3.0.1 h1:RuaOafp+8qOLUPX1lInLfUrLc1MEVbnz7a40RLoixKY=
+github.com/Masterminds/sprig/v3 v3.0.1/go.mod h1:Cp7HwZjmqKrC+Y7XqSJOU2yRvAJRGLiohfgz5ZJj8+4=
github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA=
github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw=
github.com/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg=
@@ -183,6 +189,7 @@ github.com/go-playground/universal-translator v0.16.0/go.mod h1:1AnU7NaIRDWWzGEK
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/go-telegram-bot-api/telegram-bot-api v4.6.4+incompatible/go.mod h1:qf9acutJ8cwBUhm1bqgz6Bei9/C/c93FPDljKWwsOgM=
+github.com/go-test/deep v1.0.1 h1:UQhStjbkDClarlmv0am7OXXO4/GaPdCGiUiMTvi28sg=
github.com/go-test/deep v1.0.1/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4=
github.com/gofrs/uuid v3.2.0+incompatible h1:y12jRkkFxsd7GpqdSZ+/KCs/fJbqpEXSGd4+jfEaewE=
@@ -262,8 +269,12 @@ github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T
github.com/haya14busa/goverage v0.0.0-20180129164344-eec3514a20b5/go.mod h1:0YZ2wQSuwviXXXGUiK6zXzskyBLAbLXhamxzcFHSLoM=
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+github.com/huandu/xstrings v1.2.0 h1:yPeWdRnmynF7p+lLYz0H2tthW9lqhMJrQV/U7yy4wX0=
+github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4=
github.com/iij/doapi v0.0.0-20190504054126-0bbf12d6d7df/go.mod h1:QMZY7/J/KSQEhKWFeDesPjMj+wCHReeknARU3wqlyN4=
github.com/ijc/Gotty v0.0.0-20170406111628-a8b993ba6abd/go.mod h1:3LVOLeyx9XVvwPgrt2be44XgSqndprz1G18rSk8KD84=
+github.com/imdario/mergo v0.3.7/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
+github.com/imdario/mergo v0.3.8 h1:CGgOkSJeqMRmt0D9XLWExdT4m4F1vd3FV3VPt+0VxkQ=
github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
github.com/jedib0t/go-pretty v4.3.0+incompatible/go.mod h1:XemHduiw8R651AF9Pt4FwCTKeG3oo7hrHJAoznj9nag=
@@ -352,12 +363,16 @@ github.com/miekg/dns v1.1.15/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3N
github.com/miekg/dns v1.1.22 h1:Jm64b3bO9kP43ddLjL2EY3Io6bmy1qGb9Xxz6TqS6rc=
github.com/miekg/dns v1.1.22/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso=
github.com/miekg/dns v1.1.27/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM=
+github.com/mitchellh/copystructure v1.0.0 h1:Laisrj+bAB6b/yJwB5Bt3ITZhGJdqmxquMKeZ+mmkFQ=
+github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/go-vnc v0.0.0-20150629162542-723ed9867aed/go.mod h1:3rdaFaCv4AyBgu5ALFM0+tSuHrBh6v692nyQe3ikrq0=
github.com/mitchellh/hashstructure v1.0.0 h1:ZkRJX1CyOoTkar7p/mLS5TZU4nJ1Rn/F8u9dGS02Q3Y=
github.com/mitchellh/hashstructure v1.0.0/go.mod h1:QjSHrPWS+BGUVBYkbTZWEnOh3G1DutKwClXU/ABz6AQ=
github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/mitchellh/reflectwalk v1.0.0 h1:9D+8oIskB4VJBN5SFlmc27fSlIBZaov1Wpk/IfikLNY=
+github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -478,6 +493,8 @@ github.com/rainycape/memcache v0.0.0-20150622160815-1031fa0ce2f2/go.mod h1:7tZKc
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
github.com/restic/calens v0.1.0 h1:RHGokdZ72dICyIz1EjEsfZwUhvNZz/zy2SawxJktdWA=
github.com/restic/calens v0.1.0/go.mod h1:u67f5msOjCTDYNzOf/NoAUSdmXP03YXPCwIQLYADy5M=
+github.com/restic/calens v0.2.0 h1:LVNAtmFc+Pb4ODX66qdX1T3Di1P0OTLyUsVyvM/xD7E=
+github.com/restic/calens v0.2.0/go.mod h1:UXwyAKS4wsgUZGEc7NrzzygJbLsQZIo3wl+62Q1wvmU=
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik=
diff --git a/tools.go b/tools.go
new file mode 100644
index 0000000000..f1911ffdcb
--- /dev/null
+++ b/tools.go
@@ -0,0 +1,7 @@
+// +build tools
+
+package main
+
+import (
+ _ "github.com/restic/calens"
+)