Compare commits

...

177 Commits
v2.4.0 ... main

Author SHA1 Message Date
MedzikUserBot d27381c48a go mod tidy 2022-07-18 03:08:04 +00:00
renovate[bot] 36e0d03d9a fix(deps): update module go.mongodb.org/mongo-driver to v1.10.0 2022-07-18 03:07:38 +00:00
MedzikUser c01119e393
chore(renovatebot): update config 2022-07-06 10:58:23 +02:00
MedzikUserBot 0773d198a4 go mod tidy 2022-07-05 10:08:04 +00:00
renovate[bot] 7e35839193 fix(deps): update module github.com/gin-contrib/cors to v1.4.0 2022-07-05 10:07:36 +00:00
MedzikUserBot 08522d132f go mod tidy 2022-06-06 20:16:30 +00:00
Renovate Bot 9dd5c30879 fix(deps): update module github.com/gin-gonic/gin to v1.8.1 2022-06-06 20:16:01 +00:00
Renovate Bot 3cdcd88551 chore(deps): update docker/login-action action to v2 2022-06-05 07:54:26 +02:00
Renovate Bot c8cda28fba chore(deps): update goreleaser/goreleaser-action action to v3 2022-06-05 07:54:10 +02:00
Oskar b6c9b07df8
doc: domain expired 2022-06-05 07:53:42 +02:00
MedzikUser 28a8e294d4
ci: update go version 2022-06-02 21:30:26 +02:00
MedzikUserBot 61d23e1773 go mod tidy 2022-05-30 14:28:39 +00:00
Renovate Bot 3cee6b5ba5 fix(deps): update module github.com/gin-gonic/gin to v1.8.0 2022-05-30 14:28:15 +00:00
Oskar a3ce1b13fc
ci: change commit user 2022-05-13 09:02:40 +02:00
github-actions[bot] 225d307a24 go mod tidy 2022-05-04 00:44:30 +00:00
Renovate Bot 5b6869ea16 fix(deps): update module go.mongodb.org/mongo-driver to v1.9.1 2022-05-04 00:44:02 +00:00
Renovate Bot 5ef696d0de chore(deps): update github/codeql-action action to v2 2022-04-29 22:45:02 +02:00
Renovate Bot 87b7e521b7 chore(deps): update actions/upload-artifact action to v3 2022-04-29 22:44:53 +02:00
Renovate Bot 3d285f2843 chore(deps): update actions/checkout action to v3 2022-04-29 22:44:41 +02:00
Renovate Bot c486a29d3a chore(deps): update actions/setup-go action to v3 2022-04-29 22:44:27 +02:00
github-actions[bot] ad53f8c69a go mod tidy 2022-04-06 03:01:03 +00:00
Renovate Bot d1232268a0 fix(deps): update module go.mongodb.org/mongo-driver to v1.9.0 2022-04-06 03:00:39 +00:00
github-actions[bot] 4e5d075d76 go mod tidy 2022-04-05 04:59:49 +00:00
Renovate Bot 5e06729a08 fix(deps): update module github.com/burntsushi/toml to v1.1.0 2022-04-05 04:59:23 +00:00
github-actions[bot] 37474d2244 go mod tidy 2022-03-03 00:12:23 +00:00
Renovate Bot 6b2e351434 fix(deps): update module go.mongodb.org/mongo-driver to v1.8.4 2022-03-03 00:11:57 +00:00
github-actions[bot] aa661476e9 go mod tidy 2022-02-26 20:56:13 +00:00
Renovate Bot baac708e57 fix(deps): update module github.com/burntsushi/toml to v1 2022-02-26 21:55:51 +01:00
Renovate Bot 5388f506bc chore(deps): update golangci/golangci-lint-action action to v3 2022-02-26 21:55:28 +01:00
github-actions[bot] fb7163f529 go mod tidy 2022-02-01 21:23:00 +00:00
Renovate Bot 09654a572d fix(deps): update module go.mongodb.org/mongo-driver to v1.8.3 2022-02-01 21:22:38 +00:00
github-actions[bot] e595fee153 go mod tidy 2022-01-04 23:52:44 +00:00
Renovate Bot e03093aad6 fix(deps): update module go.mongodb.org/mongo-driver to v1.8.2 2022-01-04 23:52:14 +00:00
github-actions[bot] d037031f46 go mod tidy 2021-12-08 18:31:49 +00:00
Renovate Bot 6d9129bbea fix(deps): update module go.mongodb.org/mongo-driver to v1.8.1 2021-12-08 18:31:27 +00:00
Oskar 8cc6799e34
chore(docs): update readme 2021-11-30 22:15:12 +01:00
github-actions[bot] 09b8a82c50 go mod tidy 2021-11-24 17:40:04 +00:00
Renovate Bot bcddce32ab fix(deps): update module github.com/gin-gonic/gin to v1.7.7 2021-11-24 17:39:42 +00:00
github-actions[bot] 8d24ee0be9 go mod tidy 2021-11-23 23:10:19 +00:00
Renovate Bot 4b4338598f fix(deps): update module go.mongodb.org/mongo-driver to v1.8.0 2021-11-23 23:09:58 +00:00
github-actions[bot] a46ea022a8 go mod tidy 2021-11-23 18:16:09 +00:00
Renovate Bot f7ffc566ac fix(deps): update module go.mongodb.org/mongo-driver to v1.7.5 2021-11-23 18:15:39 +00:00
github-actions[bot] a3a715f8f8 go mod tidy 2021-11-23 10:34:20 +00:00
Renovate Bot fb43354130 fix(deps): update module github.com/gin-gonic/gin to v1.7.6 2021-11-23 10:34:01 +00:00
Medzik 15c60fa84a chore: nodemon has been replaced by air 2021-11-13 12:51:38 +00:00
Medzik 6e9a5805d6 feat(opts): add --no-update, move main.go => cmd/pingbot/main.go 2021-11-13 12:31:50 +00:00
Medzik 09d68066ea chore(deps): upgrade 2021-11-13 11:57:37 +00:00
Oskar b2358fefee
feat: add freebsd and arm64 to releases 2021-11-12 15:27:11 +01:00
github-actions[bot] 6d9e2e2826 go mod tidy 2021-11-10 19:23:29 +00:00
Medzik abf82302ce chore(deps): upgrade 2021-11-10 19:23:05 +00:00
Medzik e8ef0f23af delete node_modules 2021-11-10 19:21:57 +00:00
Medzik a1b863984c update 2021-11-10 13:38:54 +00:00
github-actions[bot] 29d326a29c gofmt 2021-11-07 19:21:43 +00:00
Medzik a880aaf054 fix(log): update trace error log 2021-11-07 19:20:08 +00:00
github-actions[bot] 55b4fb0b14 go mod tidy 2021-11-03 16:31:15 +00:00
Renovate Bot cae43813f9 fix(deps): update module go.mongodb.org/mongo-driver to v1.7.4 2021-11-03 17:30:44 +01:00
github-actions[bot] b4eb3e668c go mod tidy 2021-10-31 17:54:28 +00:00
MedzikUser ea87a1a227 chore(deps): upgrade 2021-10-31 18:54:00 +01:00
github-actions[bot] 2a2304db0e go mod tidy 2021-10-27 21:29:57 +00:00
MedzikUser 02659540d6 chore(deps): upgrade 2021-10-27 23:29:21 +02:00
MedzikUser dd7ae5c856 chore: update module name 2021-10-26 19:39:30 +02:00
Oskar c08c6c36e7
Update README 2021-10-23 11:53:11 +02:00
Oskar cfef7e7bc7
Create codeql-analysis.yml 2021-10-22 23:09:19 +02:00
Oskar dd605b81ed
remove empty line 2021-10-22 22:28:18 +02:00
Oskar d211ea49b1
chore(Makefile): update 2021-10-22 22:27:08 +02:00
github-actions[bot] 538766c1fc go mod tidy 2021-10-21 21:25:52 +00:00
renovate[bot] 228dc22c9a
fix(deps): update module github.com/medzikuser/go-utils to v1 (#24)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2021-10-21 23:24:53 +02:00
Oskar 1b938d0496
chore: remove print http UserAgent 2021-10-21 12:37:21 +02:00
github-actions[bot] 593dc62615 go mod tidy 2021-10-19 21:23:02 +00:00
MedzikUser 787aaaad8f fix(deps): upgrade 2021-10-19 23:22:28 +02:00
Oskar 43e46b5cad
chore(GoReleaser): publish to Docker (#23)
* Create Dockerfile
* Update .goreleaser.yml
* Update .github/workflows/ci.yml
2021-10-19 23:20:25 +02:00
Oskar e7005810b8
Gitpod change workspace image
Change Gitpod workspace image to `medzik/gitpod:full`

* Delete .gitpod.Dockerfile
* Update .gitpod.yml
2021-10-19 22:43:43 +02:00
Oskar e744818d13
Revert 2021-10-19 22:14:14 +02:00
Oskar 48fc36f590
chore: gpg sign artifacts 2021-10-19 21:53:11 +02:00
Medzik f9a954fbd3 feat: add UserAgent 2021-10-15 19:15:29 +00:00
Medzik d906c0d3b4 update workflows 2021-10-15 17:00:54 +00:00
Medzik 6629a3e1cc chore(deps): upgrade golang.org/x/oauth2 2021-10-15 16:56:04 +00:00
github-actions[bot] 6933bd398d go mod tidy 2021-10-05 19:51:05 +00:00
Renovate Bot 48780adb8d fix(deps): update module go.mongodb.org/mongo-driver to v1.7.3 2021-10-05 19:50:43 +00:00
github-actions[bot] 310ffecd9f go mod tidy 2021-09-24 14:01:21 +00:00
Renovate Bot 343e8b807d fix(deps): update module github.com/joho/godotenv to v1.4.0 2021-09-24 14:00:49 +00:00
Medzik 3af027afdc chore: update api status 2021-09-15 19:31:01 +00:00
Medzik 7670dee9e9 chore(deps): upgrade 2021-09-15 19:17:40 +00:00
Medzik 7240621ead fix: delete cluster option (not used in latest config) 2021-09-09 18:55:36 +00:00
Medzik 8f64eb1dcb perf(database): change _id field to url
BREAKING CHANGE: YOU MUST CHANGE `_id` TO `url` AND GENERATE ObjectID to `_id` IN MONGODB.
2021-09-08 20:31:59 +00:00
Medzik 5ebc9a5b0a chore: rename `backend` to `ping` 2021-09-08 20:18:35 +00:00
Medzik 614054e446 perf(config): remove mongodb db and collection from .env
BREAKING CHANGE: mongodb database and collection ISN'T LONGER IN ENV MUST BE IN config.toml, and RENAME MONGODB_URI to MONGO_URI IN .env.
Deleted node in config.
2021-09-08 20:16:02 +00:00
Medzik 5dd2c129cb fix(cache): retry attempts from 1 to 15 2021-09-08 19:49:00 +00:00
Medzik e9d6197817 update few files 2021-09-07 20:45:10 +00:00
Medzik 6af384e731 chore: disable auto updater if version is dev 2021-09-07 20:37:03 +00:00
Medzik fa03e08b28 chore(deps): upgrade 2021-09-07 20:11:45 +00:00
Medzik a9352e4cc9 add build to pre-commit 2021-09-07 20:11:04 +00:00
Medzik d1ad4128d9 add pre-commit 2021-09-07 20:07:51 +00:00
Medzik 22e7e1aa11 chore(website): update getAll 2021-09-05 11:20:19 +00:00
Medzik b3decb1561 chore(retry): add retry from utils 2021-09-05 10:50:41 +00:00
Medzik c8091847d0 Merge branch 'main' of https://github.com/MedzikUser/go-pingbot 2021-09-05 10:26:30 +00:00
github-actions[bot] b836948171 go mod tidy 2021-09-04 13:06:58 +00:00
Renovate Bot 831eae63c5 fix(deps): update module github.com/medzikuser/go-utils to v0.4.0 2021-09-04 13:06:26 +00:00
Medzik f666be4451 go mod tidy -go=1.17 2021-09-04 11:05:41 +00:00
github-actions[bot] bea9b40d96 gofmt 2021-09-02 20:44:51 +00:00
Oskar d728e96d82
chore: move db connect under opts param 2021-09-02 22:44:23 +02:00
github-actions[bot] 4a4505c1f2 go mod tidy 2021-09-02 20:27:07 +00:00
Oskar d1fd5be5c3
Merge pull request #17 from MedzikUser/renovate/go.mongodb.org-mongo-driver-1.x
fix(deps): update module go.mongodb.org/mongo-driver to v1.7.2
2021-09-02 22:26:39 +02:00
Renovate Bot cc9f0c8ac9
fix(deps): update module go.mongodb.org/mongo-driver to v1.7.2 2021-09-02 20:23:12 +00:00
Oskar 0c1252a431 update 2021-09-02 22:21:17 +02:00
Oskar ffa41f6fa2 update 2021-09-02 22:16:11 +02:00
Medzik 5dd6bc1195 update
- update workflow (fix upload artifact)
- update comment in gitpod Dockerfile
2021-09-01 13:00:34 +00:00
Medzik 4b939c6d58 fix(rebuild binary [TEST]): rebuild binary (test update binary from tar.xz)
- add rm bin in gitpod Dockerfile
2021-09-01 12:55:01 +00:00
Medzik 021fc6ea62 update
- updated bash scripts
- renamed env schema
- updated binary archive from tar.gz to tar.xz
- update workflows
2021-09-01 12:49:56 +00:00
Medzik 324863f072 chore(deps): upgrade 2021-09-01 12:30:00 +00:00
Oskar 5ebf84f529 add error check (fix lint) 2021-08-31 20:22:45 +02:00
Medzik 4d7975f7f9 update readme 2021-08-31 18:18:36 +00:00
Medzik 3391c946ff chore(opts): add option update e.g. to major version update 2021-08-31 18:16:28 +00:00
Medzik 15e09e8ab7 chore(deps): upgraded golang.org/x/sys 2021-08-31 17:37:09 +00:00
Medzik 385f98e080 feat: add timeout to stop after ping (set in config) 2021-08-30 13:41:06 +00:00
Medzik cca24ec927 chore(deps): upgraded github.com/klauspost/compress v1.13.4 => v1.13.5 2021-08-30 13:18:34 +00:00
Medzik 08b127e96a add start script 2021-08-29 10:19:54 +00:00
Medzik 7ef99d82c6 feat(config): Add Stop After Ping 2021-08-29 10:14:35 +00:00
Medzik 107e9d3bd8 chore(deps): upgrade 2021-08-29 09:41:10 +00:00
Oskar fcd664c82f update 2021-08-28 13:03:07 +02:00
github-actions[bot] c2d35979e1 gofmt 2021-08-27 17:25:59 +00:00
Oskar 7a541e244f update ci 2021-08-27 19:25:28 +02:00
Oskar 4c07bd41be
Add emoji 2021-08-23 21:19:44 +02:00
Oskar e331178815
Update auto-fix.yml 2021-08-23 21:14:49 +02:00
Medzik c8c798744a git pull 2021-08-22 18:14:18 +02:00
Medzik 169bdca2ba chore(cors): update cors only to pingbot.cf 2021-08-22 18:13:30 +02:00
Oskar 6af039789c
Merge pull request #15 from MedzikUser/renovate/github.com-medzikuser-go-utils-0.x
fix(deps): update module github.com/medzikuser/go-utils to v0.3.4
2021-08-22 17:40:42 +02:00
github-actions[bot] 42905aba51 go mod tidy 2021-08-22 11:38:15 +00:00
Renovate Bot eaa5ec27a6
fix(deps): update module github.com/medzikuser/go-utils to v0.3.4 2021-08-22 11:37:50 +00:00
Medzik a350ed7dee update 2021-08-22 12:04:12 +02:00
Medzik 330998710b chore(deps): upgrade 2021-08-20 14:08:19 +00:00
Medzik 17aab6ff5a Merge branch 'main' of https://github.com/MedzikUser/go-pingbot 2021-08-20 14:06:47 +00:00
Medzik aa7da27a10 update readme 2021-08-20 14:06:29 +00:00
github-actions[bot] d838096f3d go mod tidy 2021-08-20 10:44:16 +00:00
Medzik 44eeaa6bf7 chore: change pid
Change to cpu.PID in api/status
2021-08-20 10:41:52 +00:00
Medzik 3570ee0da3 chore(deps): upgrade 2021-08-20 10:28:52 +00:00
Oskar 7869f3d5ec
Update auto-fix.yml 2021-08-19 23:24:22 +02:00
github-actions[bot] 031864d375 go mod tidy 2021-08-19 21:21:34 +00:00
Oskar fbfce12002
Merge pull request #14 from MedzikUser/renovate/github.com-medzikuser-go-utils-0.x
fix(deps): update module github.com/medzikuser/go-utils to v0.3.3
2021-08-19 23:21:08 +02:00
Renovate Bot b22f043bc5
fix(deps): update module github.com/medzikuser/go-utils to v0.3.3 2021-08-19 20:29:52 +00:00
Oskar a96d4f8229
Update auto-fix.yml 2021-08-19 20:28:52 +02:00
Oskar 6a0e8e8a49
Update auto-fix.yml 2021-08-19 20:26:39 +02:00
Medzik 7002d96902 workflows fix 2021-08-18 17:19:07 +00:00
Medzik aa68098555 workflows fix 2021-08-18 17:13:28 +00:00
Medzik cd04ae3753 git pull 2021-08-18 17:11:48 +00:00
Medzik 67258a2315 workflows fix 2021-08-18 17:11:40 +00:00
github-actions[bot] 7b3f80d518 go mod tidy 2021-08-18 17:02:52 +00:00
Medzik aa06d6e32f fix: upgrade deps and delete unused functions 2021-08-18 16:59:51 +00:00
github-actions[bot] 5d31d95915 gofmt 2021-08-18 16:51:32 +00:00
Medzik fad478ebe6 add gofmt to github workflows 2021-08-18 16:50:08 +00:00
Medzik cafc70c6a6 Update 2021-08-18 16:38:49 +00:00
Oskar 6faee132ad
Update push.yml 2021-08-17 23:31:19 +02:00
Medzik 4afe7bcc5a go get 2021-08-17 21:27:31 +00:00
Medzik 7c5bfeeae9 Update 2021-08-17 21:26:19 +00:00
github-actions[bot] 601837e102 go mod tidy 2021-08-17 21:04:14 +00:00
Medzik 1d6ef68be7 git pull 2021-08-17 21:03:25 +00:00
Medzik 560b5c5470 update workflows 2021-08-17 21:03:04 +00:00
Renovate Bot 0df8fbdcde fix(deps): update module github.com/medzikuser/go-utils to v0.3.2 2021-08-15 22:38:03 +00:00
Medzik e9f0631881 chore(fix api): cpu arch 2021-08-15 17:49:57 +00:00
Medzik cdefd28df7 fix: add github token to auto updater
- Added GitHub Token to auto updater
- Upgrade go-utils
2021-08-15 14:38:12 +00:00
Medzik 4095092cca chore(utils): update 2/2 2021-08-15 14:30:38 +00:00
Renovate Bot ae22397b9e fix(deps): update module github.com/gin-gonic/gin to v1.7.4 2021-08-15 12:38:42 +00:00
Medzik 54833f5ac5 fix(deps): go-utils -> v0.3.0 (1/2) 2021-08-14 21:43:30 +00:00
Renovate Bot 23f2f4e100 fix(deps): update module github.com/medzikuser/go-utils to v0.1.0 2021-08-14 00:16:34 +00:00
Renovate Bot 0f3409b7fa fix(deps): update module github.com/strucoder/pidusage to v0.2.1 2021-08-13 12:15:10 +00:00
Medzik 0ba1c8a2c0 fix: add omitempty to types fields, change error message 2021-08-12 21:13:10 +00:00
Medzik 35298bacfc chore(utils): v0.0.0 => v0.0.1 2021-08-12 21:00:37 +00:00
Medzik 2537ef6fa3 chore(deps): upgraded golang.org/x/crypto 2021-07-11 => 2021-08-12 2021-08-12 20:54:12 +00:00
Medzik dd0d47d166 Update 2021-08-12 19:39:05 +00:00
Medzik 8ba0bb4f9e fix(deps): upgraded github.com/klauspost/compress v1.13.3 => v1.13.4 2021-08-12 19:28:23 +00:00
Medzik e7894959fc chore: add go-utils 2021-08-12 19:26:54 +00:00
Medzik afaae89a9d fix(lint): Delete wait group and Add retry
- Deleted wait group
- Added retry in cache
2021-08-11 11:09:08 +00:00
Medzik 3432a74d23 feat: Add Cache URLs and Database config from toml file
- Added Cache URLs from Database
- and Database Name and Collection set from toml config file
2021-08-11 10:35:51 +00:00
Medzik f09209d1bf deleted(api): now is vercel serverless 2021-08-10 19:57:36 +00:00
Medzik 6eea751bdf fix(deps): go mod tidy 2021-08-10 19:52:17 +00:00
Medzik 43dd7d785c fix(deps): upgrade 2021-08-10 19:50:33 +00:00
MedzikUser 19007525da
Update semantic-release name 2021-08-07 22:13:41 +02:00
50 changed files with 930 additions and 899 deletions

32
.air.toml Normal file
View File

@ -0,0 +1,32 @@
root = "."
tmp_dir = "tmp"
[build]
bin = "./tmp/pingbot"
cmd = "make build BINARY_OUT=./tmp/pingbot"
delay = 1000
exclude_dir = ["tmp"]
exclude_file = []
exclude_regex = []
exclude_unchanged = false
follow_symlink = false
full_bin = ""
include_dir = []
include_ext = ["go", "toml"]
kill_delay = "0s"
log = "air-build-errors.log"
send_interrupt = false
stop_on_error = true
[color]
app = ""
build = "yellow"
main = "magenta"
runner = "green"
watcher = "cyan"
[log]
time = false
[misc]
clean_on_exit = true

View File

@ -1,6 +0,0 @@
# MongoDB
MONGODB_URI=mongodb+srv://...
MONGODB_DB=...
MONGODB_COLLECTION=...
PASSWORD=PrOtEdTeD_pAsSwOrD

89
.github/workflows/ci.yml vendored Normal file
View File

@ -0,0 +1,89 @@
name: CI
on:
push:
branches:
- main
pull_request:
permissions:
contents: write
jobs:
ci:
runs-on: ubuntu-latest
steps:
- name: Checkout (go mod tidy / gofmt)
if: github.event_name != 'pull_request'
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Set up Go
uses: actions/setup-go@v3
- name: Setup Git
if: github.event_name != 'pull_request'
run: |
git config --local user.email "rm99iv9s@duck.com"
git config --local user.name "MedzikUserBot"
- name: Tidy
if: github.event_name != 'pull_request'
run: |
go mod tidy -go=1.17
git add .
git diff-index --quiet HEAD || git commit -m "go mod tidy"
- name: GoFmt
if: github.event_name != 'pull_request'
run: |
go fmt ./...
git add .
git diff-index --quiet HEAD || git commit -m "gofmt"
- name: Pull changes
if: github.event_name != 'pull_request'
run: git pull -r
- name: Push changes
if: github.event_name != 'pull_request'
uses: ad-m/github-push-action@master
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
branch: ${{ github.ref }}
- name: Semantic Release
if: github.event_name != 'pull_request'
uses: go-semantic-release/action@v1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Checkout (build)
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Login to DockerHub
if: github.event_name != 'pull_request'
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@v3
with:
distribution: goreleaser
version: latest
args: release --rm-dist
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload Artifact
uses: actions/upload-artifact@v3
with:
path: dist/*.tar*
retention-days: 10

74
.github/workflows/codeql-analysis.yml vendored Normal file
View File

@ -0,0 +1,74 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
schedule:
- cron: '21 0 * * 5'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ 'go' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
# Learn more:
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
steps:
- name: Checkout repository
uses: actions/checkout@v3
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# queries: ./path/to/local/query, your-org/your-repo/queries@main
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v2
# Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
# and modify them (or add more) to build your code if your project
# uses a compiled language
#- run: |
# make bootstrap
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2

View File

@ -1,4 +1,4 @@
name: Lint
name: lint
on:
pull_request:
@ -9,12 +9,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Set up Go
uses: actions/setup-go@v2
with:
go-version: 1.16
uses: actions/checkout@v3
- name: GolangCi Lint
uses: golangci/golangci-lint-action@v2
uses: golangci/golangci-lint-action@v3
with:
version: latest

View File

@ -1,30 +0,0 @@
name: Pull Request
on:
pull_request:
jobs:
pull:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Set up Go
uses: actions/setup-go@v2
with:
go-version: 1.16
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@v2
with:
distribution: goreleaser
version: latest
args: release --rm-dist
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload Artifact
uses: actions/upload-artifact@v2
with:
path: dist

View File

@ -1,40 +0,0 @@
name: Release
on:
push:
branches: [ main ]
permissions:
contents: write
jobs:
releaser:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: '0'
- name: Set up Go
uses: actions/setup-go@v2
with:
go-version: 1.16
- uses: go-semantic-release/action@v1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: '0'
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@v2
with:
distribution: goreleaser
version: latest
args: release --rm-dist
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

18
.gitignore vendored
View File

@ -1,17 +1,21 @@
# Dot Files
.env
.cache
*.env*
!schema.env
# Binaries for programs and plugins
# Cache
.cache
tmp/
# Binaries
*.exe
*.exe~
*.dll
*.so
*.dylib
*.out
dist/
# Test binary, built with `go test -c`
*.test
# Configs
config.toml
# Log files
air-build-errors.log

7
.gitpod.Dockerfile vendored
View File

@ -1,7 +0,0 @@
FROM gitpod/workspace-full
# GoReleaser
RUN curl -sfL https://install.goreleaser.com/github.com/goreleaser/goreleaser.sh | sh
RUN yarn global add nodemon
RUN echo "export PATH=\$PATH:`yarn global bin`" >> ~/.bashrc

View File

@ -1,5 +1,4 @@
image:
file: .gitpod.Dockerfile
image: medzik/gitpod:full
checkoutLocation: "go/src/pingbot"
workspaceLocation: "go/src/pingbot"

View File

@ -5,28 +5,61 @@ before:
- go mod tidy
builds:
- goos:
- main: ./cmd/pingbot
binary: '{{ .ProjectName }}.out'
goos:
- linux
- freebsd
goarch:
- amd64
binary: '{{ .ProjectName }}.out'
- arm64
ldflags:
- -s -w
- -X gitlab.com/gaming0skar123/go/pingbot/config.Version={{.RawVersion}}
- -X gitlab.com/gaming0skar123/go/pingbot/config.Build={{.Date}}
- -X github.com/medzikuser/go-pingbot/config.Version={{ .RawVersion }}
- -X github.com/medzikuser/go-pingbot/config.Build={{ .Date }}
archives:
- format: tar.gz
- format: tar.xz
files:
- LICENSE
- .env.schema
- schema.env
- config.schema.toml
- README.md
- LICENSE
- start.sh
checksum:
name_template: 'md5_checksums.txt'
name_template: 'checksums.txt'
algorithm: md5
algorithm: sha256
dockers:
- id: amd64
goos: linux
goarch: amd64
goarm: ''
image_templates:
- "medzik/pingbot:latest"
- "medzik/pingbot:{{ .Tag }}"
- "medzik/pingbot:v{{ .Major }}"
- "medzik/pingbot:v{{ .Major }}.{{ .Minor }}"
dockerfile: Dockerfile
use: docker
build_flag_templates:
- "--pull"
- "--label=org.opencontainers.image.created={{ .Date }}"
- "--label=org.opencontainers.image.title={{ .ProjectName }}"
- "--label=org.opencontainers.image.revision={{ .FullCommit }}"
- "--label=org.opencontainers.image.version={{ .Version }}"
extra_files:
- start.sh

20
.pre-commit-config.yaml Normal file
View File

@ -0,0 +1,20 @@
# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
repos:
- repo: https://github.com/tekwizely/pre-commit-golang
rev: v1.0.0-beta.4
hooks:
#
# Go Build
#
- id: go-build-mod
#
# Go Mod Tidy
#
- id: go-mod-tidy
- id: go-mod-tidy-repo
#
# Formatters
#
- id: go-fmt
- id: go-fmt-repo

5
Dockerfile Normal file
View File

@ -0,0 +1,5 @@
FROM alpine
COPY pingbot.out /usr/bin/pingbot
ENTRYPOINT ["/usr/bin/pingbot", "--no-update"]

View File

@ -1,14 +1,18 @@
BINARY_NAME=pingbot.out
BINARY_OUT := pingbot.out
# executables
GO := go
GORELEASER := goreleaser
# build flags
BUILD_FLAGS :=
build:
go build -o ${BINARY_NAME}
$(GO) mod tidy
$(GO) build ${BUILD_FLAGS} -o ${BINARY_OUT} ./cmd/pingbot
snapshot:
goreleaser --snapshot --rm-dist
run:
go run .
$(GORELEASER) --snapshot --rm-dist
clean:
go clean
rm -rf pingbot* dist/
$(GO) clean

View File

@ -1,10 +1,53 @@
# Pingbot - Backend
# [Pingbot](https://pingbot.vercel.app) - Backend
## Install Pre-Compile binary
[![Repo Size](https://img.shields.io/github/repo-size/MedzikUser/go-pingbot)](https://github.com/medzikuser/go-pingbot)
[![Build](https://img.shields.io/github/workflow/status/MedzikUser/go-pingbot/release/main)](https://github.com/medzikuser/go-pingbot/actions/workflows/release.yml)
* Linux amd64
* [Download](https://github.com/MedzikUser/go-pingbot/releases) latest version
* Unpack file `tar xzf pingbot_{VERSION}_linux_amd64.tar.gz`
* Create an .env and config.toml file and complete according to .env.schema and config.schema.toml
* Add permissions `chmod +rwx pingbot.out`
* Run binary `./pingbot.out`
This application "pings" websites every few minutes (to be set in config). It can be used to keep the application alive on e.g. [glitch.me](https://glitch.com/) or [repl.it](https://replit.com/).
## ⚡ Install Pre-Compile binary
* 💻 Linux amd64
* [Download](https://github.com/medzikuser/go-pingbot/releases) latest version
* Unpack file `tar xf pingbot_*_linux_amd64.tar.xz`
* Done your binary is `pingbot.out`
## 👨‍💻 Compile from Source Code
‼️ Not recommended because automatic updates don't work
### 🖥️ Requirements
* [Go](https://golang.org/dl) (recommended latest version)
### ⭐ Compile
Method 1:
* `go install github.com/medzikuser/go-pingbot@latest`
* Output binary path
* Check GOPATH `go env GOPATH`
* Go to GOPATH and binary name is `pingbot`
Method 2:
* Download source code `git clone https://github.com/medzikuser/go-pingbot.git --depth 1`
* Go to folder with source code `cd go-pingbot`
* Build `make` or `go build -o pingbot.out`
* Done your compiled binary name is `pingbot.out`
### ⭐ Cross Compile
> [Check supported OS and ARCH](https://gist.github.com/asukakenji/f15ba7e588ac42795f421b48b8aede63)
* Download source code `git clone https://github.com/medzikuser/go-pingbot.git --depth 1`
* Go to folder with source code `cd go-pingbot`
* Build `make GOOS=os GOARCH=arch`
* e.g. `make GOOS=openbsd GOARCH=arm64 `
* Done your cross compiled binary name is `pingbot.out`
## ⚙️ Configurate
* Complete .env according to schema.env
* And fill in config.toml according to config.schema.toml
## 🔧 Run
* `./pingbot.out` or `./start.sh` (auto restart e.g. if exit on update is enabled)

View File

@ -1,48 +0,0 @@
package backend
import (
"context"
"net/http"
"time"
"gitlab.com/gaming0skar123/go/pingbot/common"
"gitlab.com/gaming0skar123/go/pingbot/database/mongo"
)
var checkErr = common.CheckErr
func ping() {
results, err := mongo.GetAll()
if checkErr(err, "get keys from db") {
return
}
for _, value := range results {
go loop(value)
}
}
func loop(value mongo.URL) {
// Timeout 1 minute
ctx, cancel := context.WithTimeout(context.Background(), 1*time.Minute)
defer cancel()
req, err := http.NewRequestWithContext(ctx, "GET", value.URL, nil)
if checkErr(err, "new http request") {
Status.Error++
return
}
client := http.DefaultClient
r, err := client.Do(req)
if err != nil {
Status.Error++
return
}
if r.StatusCode >= 200 && r.StatusCode < 400 {
Status.Success++
} else {
Status.Error++
}
}

157
cmd/pingbot/main.go Normal file
View File

@ -0,0 +1,157 @@
package main
import (
"bufio"
"fmt"
"os"
"sync"
"time"
"github.com/MedzikUser/go-utils/common"
"github.com/MedzikUser/go-utils/updater"
"github.com/jpillora/opts"
"github.com/medzikuser/go-pingbot/config"
"github.com/medzikuser/go-pingbot/database/mongo"
"github.com/medzikuser/go-pingbot/ping"
"github.com/medzikuser/go-pingbot/website"
)
var log = common.Log
type cmdOpts struct {
Update bool `opts:"help=update version to latest e.g. if update is major"`
NoUpdate bool `opts:"help=disable auto updater"`
}
func main() {
log.Info("You're using verion: ", config.Version)
var wg sync.WaitGroup
c := cmdOpts{}
opts.Parse(&c)
if c.Update {
client := updater.Client{
GitHub: config.GH_Repo,
GitHubToken: config.GH_Token,
Version: config.Version,
Binary: "pingbot.out",
CheckEvery: config.Toml.AutoUpdate.Check * time.Minute,
AfterUpdate: func() {
log.Info("Updated!")
if !config.Toml.Options.Stop_After_Ping {
os.Exit(0)
}
},
Major: false,
}
err := client.Update()
if err != nil && err.Error() == "major update" {
fmt.Print("Update to new major version? (y/N) ")
reader := bufio.NewReader((os.Stdin))
char, _, err := reader.ReadRune()
if err != nil {
log.Error(err)
}
switch char {
case 'y':
client.Major = true
err := client.Update()
if err != nil {
log.Error(err)
os.Exit(1)
}
case 'Y':
client.Major = true
err := client.Update()
if err != nil {
log.Error(err)
os.Exit(1)
}
default:
log.Warn("Canceled!")
os.Exit(2)
}
} else if err != nil {
log.Error(err)
os.Exit(1)
} else {
log.Info("You're using latest version!")
os.Exit(0)
}
}
err := mongo.Connect()
if err != nil {
log.Error(err)
os.Exit(1)
}
if config.Toml.AutoUpdate.Enabled && !c.NoUpdate {
if config.Version == "dev" {
log.Warn("You using dev version. Auto Update DISABLED!")
} else {
wg.Add(1)
client := updater.Client{
GitHub: config.GH_Repo,
GitHubToken: config.GH_Token,
Version: config.Version,
Binary: "pingbot.out",
CheckEvery: config.Toml.AutoUpdate.Check * time.Minute,
AfterUpdate: func() {
log.Info("Updated!")
if !config.Toml.Options.Stop_After_Ping {
os.Exit(0)
}
},
Major: false,
}
go client.AutoUpdater()
}
} else {
log.Warn("Auto Update -> Disabled")
}
if config.Toml.Options.Stop_After_Ping {
ping.StopAfterPing()
os.Exit(0)
}
if config.Toml.HTTP.Enabled {
wg.Add(1)
go website.Server()
} else {
log.Warn("HTTP Server -> Disabled")
}
if config.Toml.Backend.Enabled {
wg.Add(1)
go ping.Ticker()
} else {
log.Warn("Backend -> Disabled")
}
config.StartTime = time.Now()
wg.Wait()
}

View File

@ -1,13 +0,0 @@
package common
import "github.com/sirupsen/logrus"
func CheckErr(err error, trace string) bool {
if err != nil {
Log.WithFields(logrus.Fields{
"trace": trace,
}).Error(err)
}
return err != nil
}

View File

@ -1,14 +0,0 @@
package common
import (
"os"
"github.com/sirupsen/logrus"
)
var Log = &logrus.Logger{
Out: os.Stdout,
Formatter: new(logrus.TextFormatter),
Hooks: make(logrus.LevelHooks),
Level: logrus.InfoLevel,
}

View File

@ -1,19 +1,19 @@
[http]
enabled=true # Enable Website
port=8080 # Port to listen
enabled=true # Enable Website
port=8080 # Port to listen
[backend]
enabled=true # Enable Backend
ping=3 # Ping every three minutes
enabled=true # Enable Backend
ping=3 # Ping every three minutes
[autoupdate]
enabled=true # Enable Auto Updater
check=2 # Check every two minutes
[cluster]
id=1 # Cluster ID
node=1 # Node ID
enabled=true # Enable Auto Updater
check=2 # Check every two minutes
[mongodb]
database="PingBot" # MongoDB Database Name
collection="URL" # MongoDB Collection Name
database="PingBot" # MongoDB Database Name
collection="URL" # MongoDB Collection Name
[options]
stop_after_ping=false # Stop after all pings
stop_after_ping_timeout=120 # If not pinget or other options stop program after 120 (default) seconds

View File

@ -1,11 +0,0 @@
package config
import "time"
const GH_Repo = "MedzikUser/go-pingbot"
var (
Version = "dev"
Build = ""
StartTime time.Time
)

View File

@ -8,9 +8,8 @@ import (
var (
// mongo
Mongo_URI = os.Getenv("MONGODB_URI")
Mongo_DB = os.Getenv("MONGODB_DB")
Mongo_Collection = os.Getenv("MONGODB_COLLECTION")
Mongo_URI = os.Getenv("MONGO_URI")
Password = os.Getenv("PASSWORD")
// github
GH_Token = os.Getenv("GH_TOKEN")
)

View File

@ -7,14 +7,15 @@ import (
"time"
"github.com/BurntSushi/toml"
"gitlab.com/gaming0skar123/go/pingbot/common"
"github.com/MedzikUser/go-utils/common"
)
type tomlConfig struct {
HTTP httpConfig
Backend backendConfig
AutoUpdate autoUpdateConfig
Cluster clusterConfig
MongoDB mongoDBConfig
Options optionsConfig
}
type httpConfig struct {
@ -32,9 +33,14 @@ type autoUpdateConfig struct {
Check time.Duration
}
type clusterConfig struct {
ID int
Node int
type mongoDBConfig struct {
Database string
Collection string
}
type optionsConfig struct {
Stop_After_Ping bool
Stop_After_Ping_Timeout time.Duration
}
var Toml tomlConfig
@ -42,20 +48,12 @@ var Toml tomlConfig
func init() {
_, err := toml.DecodeFile("./config.toml", &Toml)
if common.CheckErr(err, "decode toml config") {
if err.Error() == "open ./config.toml: no such file or directory" {
err := DownloadFile("config.toml", "https://github.com/"+GH_Repo+"/raw/main/config.schema.toml")
if !common.CheckErr(err, "download default config") {
_, err = toml.DecodeFile("./config.toml", &Toml)
common.CheckErr(err, "decode toml config")
}
}
if err != nil {
common.Log.Error("decode toml config: ", err)
}
}
func DownloadFile(filepath string, url string) error {
// Get the data
resp, err := http.Get(url)
if err != nil {
return err

17
config/vars.go Normal file
View File

@ -0,0 +1,17 @@
package config
import (
"fmt"
"runtime"
"strings"
"time"
)
const GH_Repo = "MedzikUser/go-pingbot"
var (
Version = "dev"
Build = ""
StartTime time.Time
UserAgent = fmt.Sprintf("PingBot/%s go/%s", Version, strings.Replace(runtime.Version(), "go", "", 1))
)

View File

@ -2,11 +2,10 @@ package mongo
import (
"context"
"os"
"time"
"gitlab.com/gaming0skar123/go/pingbot/common"
"gitlab.com/gaming0skar123/go/pingbot/config"
"github.com/MedzikUser/go-utils/common"
"github.com/medzikuser/go-pingbot/config"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"go.mongodb.org/mongo-driver/mongo/readpref"
@ -15,33 +14,31 @@ import (
var Client mongo.Client
var Coll *mongo.Collection
func Connect(retry ...int8) {
if len(retry) == 0 {
retry = append(retry, 0)
}
func Connect() error {
return common.Retry(5, 2*time.Second, func() error {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
if retry[0] == 2 {
os.Exit(1)
}
Client, err := mongo.Connect(ctx, options.Client().ApplyURI(config.Mongo_URI))
if err != nil {
common.Log.Error("connect to db", err)
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
time.Sleep(2 * time.Second)
Client, err := mongo.Connect(ctx, options.Client().ApplyURI(config.Mongo_URI))
if common.CheckErr(err, "connect to db") {
time.Sleep(2 * time.Second)
Connect(retry[0] + 1)
return err
}
return
}
err = Client.Ping(ctx, readpref.Primary())
if err != nil {
common.Log.Error("ping db", err)
err = Client.Ping(ctx, readpref.Primary())
if common.CheckErr(err, "ping db") {
time.Sleep(2 * time.Second)
Connect(retry[0] + 1)
time.Sleep(2 * time.Second)
return
}
return err
}
Coll = Client.Database(config.Mongo_DB).Collection(config.Mongo_Collection)
Coll = Client.Database(config.Toml.MongoDB.Database).Collection(config.Toml.MongoDB.Collection)
return nil
})
}

View File

@ -1,23 +0,0 @@
package mongo
import (
"context"
"fmt"
"time"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
)
func Delete(url string) (*mongo.DeleteResult, error) {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
r, err := Coll.DeleteOne(ctx, bson.M{"_id": url})
if err != nil {
fmt.Print(err)
return nil, err
}
return r, err
}

View File

@ -3,8 +3,6 @@ package mongo
import (
"context"
"time"
"gitlab.com/gaming0skar123/go/pingbot/config"
)
func GetAll() ([]URL, error) {
@ -13,9 +11,7 @@ func GetAll() ([]URL, error) {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
cursor, err := Coll.Find(ctx, json{
"cluster": config.Toml.Cluster.ID,
})
cursor, err := Coll.Find(ctx, URL{})
if err != nil {
return nil, err
}

View File

@ -1,17 +0,0 @@
package mongo
import (
"context"
"time"
"go.mongodb.org/mongo-driver/mongo"
)
func Insert(url *URL) (*mongo.InsertOneResult, error) {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
result, err := Coll.InsertOne(ctx, url)
return result, err
}

View File

@ -1,8 +1,9 @@
package mongo
type URL struct {
URL string `bson:"_id"`
Cluster int `bson:"cluster"`
}
import "go.mongodb.org/mongo-driver/bson/primitive"
type json map[string]interface{}
type URL struct {
ID primitive.ObjectID `bson:"_id,omitempty" json:"id,omitempty"`
URL string `bson:"url,omitempty" json:"url,omitempty"`
Cluster int `bson:"cluster,omitempty" json:"cluster,omitempty"`
}

67
go.mod
View File

@ -1,36 +1,59 @@
module gitlab.com/gaming0skar123/go/pingbot
module github.com/medzikuser/go-pingbot
go 1.16
go 1.17
require (
github.com/BurntSushi/toml v0.4.1
github.com/MedzikUser/go-github-selfupdate v1.3.1
github.com/blang/semver/v4 v4.0.0
github.com/gin-contrib/cors v1.3.1
github.com/gin-gonic/gin v1.7.3
github.com/go-playground/validator/v10 v10.8.0 // indirect
github.com/BurntSushi/toml v1.1.0
github.com/MedzikUser/go-utils v1.0.0
github.com/gin-contrib/cors v1.4.0
github.com/gin-gonic/gin v1.8.1
github.com/go-playground/validator/v10 v10.10.0 // indirect
github.com/golang/protobuf v1.5.2 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/google/go-cmp v0.5.6 // indirect
github.com/google/go-querystring v1.1.0 // indirect
github.com/joho/godotenv v1.3.0
github.com/json-iterator/go v1.1.11 // indirect
github.com/klauspost/compress v1.13.3 // indirect
github.com/mattn/go-isatty v0.0.13 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/joho/godotenv v1.4.0
github.com/jpillora/opts v1.2.0
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/compress v1.13.6 // indirect
github.com/mattn/go-isatty v0.0.14 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.1 // indirect
github.com/onsi/gomega v1.10.5 // indirect
github.com/sirupsen/logrus v1.8.1
github.com/struCoder/pidusage v0.2.0
github.com/ugorji/go v1.2.6 // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/posener/complete v1.2.3 // indirect
github.com/ulikunitz/xz v0.5.10 // indirect
github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a // indirect
go.mongodb.org/mongo-driver v1.7.1
golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d // indirect
golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a // indirect
go.mongodb.org/mongo-driver v1.10.0
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d // indirect
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 // indirect
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 // indirect
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069 // indirect
golang.org/x/sys v0.0.0-20211113001501-0c823b97ae02 // indirect
golang.org/x/text v0.3.7 // indirect
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/protobuf v1.27.1 // indirect
google.golang.org/protobuf v1.28.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
)
require (
github.com/MedzikUser/go-github-selfupdate v1.3.1 // indirect
github.com/blang/semver/v4 v4.0.0 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/go-playground/locales v0.14.0 // indirect
github.com/go-playground/universal-translator v0.18.0 // indirect
github.com/goccy/go-json v0.9.7 // indirect
github.com/google/go-github/v30 v30.1.0 // indirect
github.com/inconshreveable/go-update v0.0.0-20160112193335-8152e7eb6ccf // indirect
github.com/leodido/go-urn v1.2.1 // indirect
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe // indirect
github.com/pelletier/go-toml/v2 v2.0.1 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/sirupsen/logrus v1.8.1 // indirect
github.com/struCoder/pidusage v0.2.1 // indirect
github.com/tcnksm/go-gitconfig v0.1.2 // indirect
github.com/ugorji/go/codec v1.2.7 // indirect
github.com/xdg-go/pbkdf2 v1.0.0 // indirect
github.com/xdg-go/scram v1.1.1 // indirect
github.com/xdg-go/stringprep v1.0.3 // indirect
)

220
go.sum
View File

@ -32,11 +32,13 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/toml v0.4.1 h1:GaI7EiDXDRfa8VshkTj7Fym7ha+y8/XxIgD2okUIjLw=
github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/BurntSushi/toml v1.1.0 h1:ksErzDEI1khOiGPgpwuI7x2ebx/uXQNw7xJpn9Eq1+I=
github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/MedzikUser/go-github-selfupdate v1.3.1 h1:PlLrOMEucL8B2LNRUaceAgvu17J4x02NTcPa78ZMxl0=
github.com/MedzikUser/go-github-selfupdate v1.3.1/go.mod h1:vq1/KNWXN7R/aKZFD5p2rsIdQ+2FSXnlIts1QHEZCM4=
github.com/MedzikUser/go-utils v1.0.0 h1:+fq8rTY1Smm9u/FSWYBYi6fREhctbjNcuQR59j+XXbQ=
github.com/MedzikUser/go-utils v1.0.0/go.mod h1:xP+KbYBL9TESTLP4vWnvIT0v+uq5reR4l5S7Nq4eeKo=
github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM=
github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
@ -45,6 +47,7 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@ -53,53 +56,25 @@ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.m
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/gin-contrib/cors v1.3.1 h1:doAsuITavI4IOcd0Y19U4B+O0dNWihRyX//nn4sEmgA=
github.com/gin-contrib/cors v1.3.1/go.mod h1:jjEJ4268OPZUcU7k9Pm653S7lXUGcqMADzFA61xsmDk=
github.com/gin-contrib/cors v1.4.0 h1:oJ6gwtUl3lqV0WEIwM/LxPF1QZ5qe2lGWdY2+bz7y0g=
github.com/gin-contrib/cors v1.4.0/go.mod h1:bs9pNM0x/UsmHPBWT2xZz9ROh8xYjYkiURUfmBoMlcs=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do=
github.com/gin-gonic/gin v1.7.3 h1:aMBzLJ/GMEYmv1UWs2FFTcPISLrQH2mRgL9Glz8xows=
github.com/gin-gonic/gin v1.7.3/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY=
github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8=
github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM=
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
github.com/go-playground/universal-translator v0.16.0/go.mod h1:1AnU7NaIRDWWzGEKwgtJRd2xk99HeFyHw3yid4rvQIY=
github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no=
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
github.com/go-playground/validator/v10 v10.8.0 h1:1kAa0fCrnpv+QYdkdcRzrRM7AyYs5o8+jZdJCz9xj6k=
github.com/go-playground/validator/v10 v10.8.0/go.mod h1:9JhgTzTaE31GZDpH/HSvHiRJrJ3iKAgqqH0Bl/Ocjdk=
github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0=
github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY=
github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg=
github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI=
github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI=
github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs=
github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI=
github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI=
github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk=
github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28=
github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo=
github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk=
github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw=
github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360=
github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg=
github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE=
github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8=
github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc=
github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc=
github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4=
github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4=
github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ=
github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0=
github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw=
github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU=
github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs=
github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho=
github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA=
github.com/go-playground/validator/v10 v10.10.0 h1:I7mrTYv78z8k8VXa/qJlOlEXn/nBh+BF8dHX5nt/dr0=
github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos=
github.com/goccy/go-json v0.9.7 h1:IcB+Aqpx/iMHu5Yooh7jEzJk1JZ7Pjtmys2ukPr7EeM=
github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
@ -128,7 +103,6 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
@ -162,128 +136,120 @@ github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hf
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/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
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/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/inconshreveable/go-update v0.0.0-20160112193335-8152e7eb6ccf h1:WfD7VjIE6z8dIvMsI4/s+1qr5EL+zoIGev1BQj1eoJ8=
github.com/inconshreveable/go-update v0.0.0-20160112193335-8152e7eb6ccf/go.mod h1:hyb9oH7vZsitZCiBt0ZvifOrB+qc8PS5IiilCIb87rg=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
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/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMWAQ=
github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/joho/godotenv v1.4.0 h1:3l4+N6zfMWnkbPEXKng2o2/MR5mSwTrBih4ZEkkz1lg=
github.com/joho/godotenv v1.4.0/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
github.com/jpillora/opts v1.2.0 h1:H8vWooV3P9nsqmCcPgxNZyIa7GPOWA1KQFsfAzIkCtE=
github.com/jpillora/opts v1.2.0/go.mod h1:7p7X/vlpKZmtaDFYKs956EujFqA6aCrOkcCaS6UBcR4=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4=
github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
github.com/klauspost/compress v1.13.3 h1:BtAvtV1+h0YwSVwWoYXMREPpYu9VzTJ9QDI1TEg/iQQ=
github.com/klauspost/compress v1.13.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg=
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/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc=
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=
github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE=
github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0=
github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-isatty v0.0.13 h1:qdl+GuBjcsKKDco5BsxPJlId98mSWNKqYA+Co0SC1yA=
github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
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=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6fbMZ9s0scYfZQ84/6SPL6zC8ACM2oIL0=
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
github.com/onsi/gomega v1.4.2 h1:3mYCb7aPxS/RU7TI1y4rkEn1oKmPRjNJLNEXgw7MH2I=
github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
github.com/onsi/gomega v1.10.5 h1:7n6FEkpFmfCoo2t+YYqXH0evK+a9ICQz0xcAy9dYcaQ=
github.com/onsi/gomega v1.10.5/go.mod h1:gza4q3jKQJijlu05nKWRCW/GavJumGt8aNRxWg7mt48=
github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pelletier/go-toml/v2 v2.0.1 h1:8e3L2cCQzLFi2CR4g7vGFuFxX7Jl1kKX8gW+iV0GUKU=
github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
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.2.2-0.20190308074557-af07aa5181b3/go.mod h1:6gapUrK/U1TAN7ciCoNRIdVC5sbdBTUh1DKN0g6uH7E=
github.com/posener/complete v1.2.3 h1:NP0eAhjcjImqslEwo/1hq7gpajME0fTLTezBKDqfXqo=
github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8=
github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
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.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/struCoder/pidusage v0.2.0 h1:NXIoGYOVeQtWu0XF1fimtFDLNYQph/buI7hFTHyZyJY=
github.com/struCoder/pidusage v0.2.0/go.mod h1:bewtP2KUA1TBUyza5+/PCpSQ6sc/H6jJbIKAzqW86BA=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/struCoder/pidusage v0.2.1 h1:dFiEgUDkubeIj0XA1NpQ6+8LQmKrLi7NiIQl86E6BoY=
github.com/struCoder/pidusage v0.2.1/go.mod h1:bewtP2KUA1TBUyza5+/PCpSQ6sc/H6jJbIKAzqW86BA=
github.com/tcnksm/go-gitconfig v0.1.2 h1:iiDhRitByXAEyjgBqsKi9QU4o2TNtv9kPP3RgPgXBPw=
github.com/tcnksm/go-gitconfig v0.1.2/go.mod h1:/8EhP4H7oJZdIPyT+/UIsG87kTzrzM4UsLGSItWYCpE=
github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4=
github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
github.com/ugorji/go v1.2.6 h1:tGiWC9HENWE2tqYycIqFTNorMmFRVhNwCpDOpWqnk8E=
github.com/ugorji/go v1.2.6/go.mod h1:anCg0y61KIhDlPZmnH+so+RQbysYVyDko0IMgJv0Nn0=
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
github.com/ugorji/go/codec v1.2.6 h1:7kbGefxLoDBuYXOms4yD7223OpNMMPNPZxXk5TvFcyQ=
github.com/ugorji/go/codec v1.2.6/go.mod h1:V6TCNZ4PHqoHGFZuSG1W8nrCzzdgA2DozYxWFFpvxTw=
github.com/ugorji/go v1.2.7 h1:qYhyWUUd6WbiM+C6JZAUkIJt/1WrjzNHY9+KCIjVqTo=
github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M=
github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0=
github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY=
github.com/ulikunitz/xz v0.5.9/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
github.com/ulikunitz/xz v0.5.10 h1:t92gobL9l3HE202wg3rlk19F6X+JOxl9BBrCCMYEYd8=
github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
github.com/xdg-go/scram v1.0.2 h1:akYIkZ28e6A96dkWNJQu3nmCzH3YfwMPQExUYDaRv7w=
github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs=
github.com/xdg-go/stringprep v1.0.2 h1:6iq84/ryjjeRmMJwxutI51F2GIPlP5BfTvXHeYjyhBc=
github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM=
github.com/xdg-go/scram v1.1.1 h1:VOMT+81stJgXW3CpHyqHN3AXDYIMsx56mEFrB37Mb/E=
github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g=
github.com/xdg-go/stringprep v1.0.3 h1:kdwGpVNwPFtjs98xCGkHjQtGKh86rDcRZN17QEMCOIs=
github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8=
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=
github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a h1:fZHgsYlfvtyqToslyjUt3VOPF4J7aK/3MPcK7xp3PDk=
github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a/go.mod h1:ul22v+Nro/R083muKhosV54bj5niojjWZvU8xrevuH4=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
go.mongodb.org/mongo-driver v1.7.1 h1:jwqTeEM3x6L9xDXrCxN0Hbg7vdGfPBOTIkr0+/LYZDA=
go.mongodb.org/mongo-driver v1.7.1/go.mod h1:Q4oFMbo1+MSNqICAdYMlC/zSTrwCogR4R8NzkI+yfU8=
go.mongodb.org/mongo-driver v1.10.0 h1:UtV6N5k14upNp4LTduX0QCufG124fSu25Wz9tu94GLg=
go.mongodb.org/mongo-driver v1.10.0/go.mod h1:wsihk0Kdgv8Kqu1Anit4sfK+22vSFbUrAVEYRhCXrA8=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/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-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
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-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 h1:/UOmuWzQfxxo9UtlXMwuQU8CMgg1eZXqTRwkSQJWKOI=
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d h1:sK3txAijHtOK88l68nt020reeT1ZdKLIYetKl95FzVY=
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
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=
@ -341,23 +307,21 @@ golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d h1:20cMwl2fHAzkJMEA+8J4JgqBQcQGzbisXo31MIeenXI=
golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 h1:CIJ76btIcR3eFI5EgSo6k1qKw9KJexJuRLI9G7Hp5wE=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/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/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a h1:4Kd8OPUx1xgUwrHDaviWZO8MsgoZTZYC3g+8m16RBww=
golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 h1:RerP+noqYHUQ8CMRcPlC2nvTa4dcBIjegkuWdcUDuqg=
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
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-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@ -365,29 +329,20 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
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-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
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-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/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-20190531175056-4c3a928424d2/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-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@ -400,13 +355,13 @@ golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069 h1:siQdpVirKtzPhKl3lZWozZraCFObP8S1v6PRp0bLrtU=
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211113001501-0c823b97ae02 h1:7NCfEGl0sfUojmX78nK9pBJuUlSZWEJA/TwASvfiPLo=
golang.org/x/sys v0.0.0-20211113001501-0c823b97ae02/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@ -415,8 +370,9 @@ golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@ -426,13 +382,9 @@ golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3
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-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190420181800-aa740d480789/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-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
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-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
@ -547,25 +499,23 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
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=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
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=

48
main.go
View File

@ -1,48 +0,0 @@
package main
import (
"sync"
"time"
"gitlab.com/gaming0skar123/go/pingbot/backend"
"gitlab.com/gaming0skar123/go/pingbot/common"
"gitlab.com/gaming0skar123/go/pingbot/config"
"gitlab.com/gaming0skar123/go/pingbot/database/mongo"
"gitlab.com/gaming0skar123/go/pingbot/update"
"gitlab.com/gaming0skar123/go/pingbot/website"
)
var log = common.Log
func main() {
log.Info("You're using verion: ", config.Version)
var wg sync.WaitGroup
mongo.Connect()
if config.Toml.HTTP.Enabled {
wg.Add(1)
go website.Server()
} else {
log.Warn("HTTP Server -> Disabled")
}
if config.Toml.Backend.Enabled {
wg.Add(1)
go backend.Ticker()
} else {
log.Warn("Backend -> Disabled")
}
if config.Toml.AutoUpdate.Enabled {
wg.Add(1)
go update.Ticker()
} else {
log.Warn("Auto Update -> Disabled")
}
config.StartTime = time.Now()
wg.Wait()
}

View File

@ -1,7 +0,0 @@
{
"watch": ["*"],
"ext": "go toml sh",
"signal": "SIGTERM",
"quiet": true,
"exec": "clear && bash nodemon.sh"
}

View File

@ -1,17 +0,0 @@
#!/usr/bin/env bash
# Colors
red="\e[0;91m"
reset="\e[0m"
if ! go build -o pingbot.out; then
echo -e "${reset}[${red}COMPILE ERROR${reset}]"
exit 1
else
if ! ./pingbot.out; then
echo -e "${reset}[${red}PROGRAM PANIC${reset}]"
exit 1
else
echo -e "${reset}[${red}PROGRAM END${reset}]"
fi
fi

31
ping/cache.go Normal file
View File

@ -0,0 +1,31 @@
package ping
import (
"time"
"github.com/MedzikUser/go-utils/common"
"github.com/medzikuser/go-pingbot/database/mongo"
)
var CacheURL []string
func Cache() {
CacheURL = CacheURL[:0]
err := common.Retry(15, 1*time.Second, func() error {
results, err := mongo.GetAll()
if err != nil {
return err
}
for _, value := range results {
CacheURL = append(CacheURL, value.URL)
}
return nil
})
if err != nil {
log.Error(err)
}
}

51
ping/ping.go Normal file
View File

@ -0,0 +1,51 @@
package ping
import (
"context"
"net/http"
"time"
"github.com/MedzikUser/go-utils/common"
"github.com/medzikuser/go-pingbot/config"
)
func ping() int {
Cache()
for _, url := range CacheURL {
go loop(url)
}
return len(CacheURL)
}
func loop(url string) {
// Timeout 1 minute
ctx, cancel := context.WithTimeout(context.Background(), 1*time.Minute)
defer cancel()
req, err := http.NewRequestWithContext(ctx, "GET", url, nil)
if err != nil {
common.Log.Error("new http request", err)
Status.Error++
return
}
req.Header.Set("User-Agent", config.UserAgent)
client := http.DefaultClient
r, err := client.Do(req)
if err != nil {
Status.Error++
return
}
if r.StatusCode >= 200 && r.StatusCode < 400 {
Status.Success++
} else {
Status.Error++
}
}

View File

@ -1,4 +1,4 @@
package backend
package ping
var Status StatusType

46
ping/stopAfterPing.go Normal file
View File

@ -0,0 +1,46 @@
package ping
import (
"os"
"time"
"github.com/MedzikUser/go-utils/common"
"github.com/medzikuser/go-pingbot/config"
)
var log = common.Log
func StopAfterPing() {
Cache()
num := ping()
// timeout
go func() {
timeout := config.Toml.Options.Stop_After_Ping_Timeout
if timeout == 0 {
return
}
time.Sleep(timeout * time.Second)
log.Warn("DB Size -> ", num)
log.Warn("Pinged -> ", Status.Success+Status.Error)
log.Warn("Success -> ", Status.Success)
log.Warn("Error -> ", Status.Error)
os.Exit(1)
}()
for {
if int64(num) == Status.Success+Status.Error {
log.Info("DB Size -> ", num)
log.Info("Pinged -> ", Status.Success+Status.Error)
log.Info("Success -> ", Status.Success)
log.Info("Error -> ", Status.Error)
break
}
time.Sleep(100 * time.Millisecond) // 0.1 second
}
}

View File

@ -1,13 +1,14 @@
package backend
package ping
import (
"time"
"gitlab.com/gaming0skar123/go/pingbot/config"
"github.com/medzikuser/go-pingbot/config"
)
func Ticker() {
// Ping on Start
// On Start
Cache()
ping()
ticker := time.NewTicker(config.Toml.Backend.Ping * time.Minute)

View File

@ -1,13 +1,25 @@
{
"extends": [
"config:base"
],
"automergeType": "pr",
"prCreation": "immediate",
"packageRules": [
{
"matchUpdateTypes": ["minor", "patch", "pin", "digest"],
"automerge": true
}
]
}
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"config:base",
"schedule:weekly",
"group:allNonMajor",
":semanticCommits"
],
"labels": [
"dependencies"
],
"automergeType": "pr",
"prCreation": "immediate",
"packageRules": [
{
"matchUpdateTypes": [
"minor",
"patch",
"pin",
"digest"
],
"automerge": true
}
]
}

5
schema.env Normal file
View File

@ -0,0 +1,5 @@
# MongoDB
MONGO_URI=mongodb+srv://...
# GitHub
GH_TOKEN=ghp_

21
start.sh Executable file
View File

@ -0,0 +1,21 @@
#!/bin/bash
clear
# Colors
green="\e[0;92m"
red="\e[0;91m"
nc="\e[0m" # No Color
printf "${nc}[${green}Start${nc}]\n"
# Add permission and start
chmod +x pingbot.out
./pingbot.out
printf "${nc}[${red}END${nc}]\n"
# Wait 2 seconds
sleep 2
# Loop start e.g. on update => restart
bash start.sh

View File

@ -1,28 +0,0 @@
package update
import (
"time"
"gitlab.com/gaming0skar123/go/pingbot/config"
)
func Ticker() {
// Check on start
Update()
ticker := time.NewTicker(config.Toml.AutoUpdate.Check * time.Minute)
quit := make(chan struct{})
for {
select {
case <-ticker.C:
Update()
case <-quit:
ticker.Stop()
return
}
}
}

View File

@ -1,42 +0,0 @@
package update
import (
"os"
"github.com/MedzikUser/go-github-selfupdate/selfupdate"
"github.com/blang/semver/v4"
"gitlab.com/gaming0skar123/go/pingbot/common"
"gitlab.com/gaming0skar123/go/pingbot/config"
)
var log = common.Log
func Update() {
repo := config.GH_Repo
latest, found, err := selfupdate.DetectLatest(repo)
if common.CheckErr(err, "detecting letest version") {
return
}
v, err := semver.Parse(config.Version)
if common.CheckErr(err, "parse version") || !found || latest.Version.LTE(v) {
return
}
log.Warn("Updating...")
exe, err := os.Executable()
if common.CheckErr(err, "locate executable path") {
return
}
err = selfupdate.UpdateTo(latest.AssetURL, exe, "pingbot.out")
if common.CheckErr(err, "update binary") {
return
}
log.Info("Updated!")
defer os.Exit(0)
}

View File

@ -6,11 +6,7 @@ import (
func ApplyRoutes(r *gin.Engine) {
api := r.Group("/api")
{
api.GET("/url", GetAll)
api.POST("/url", Insert)
api.DELETE("/url/:url", Delete)
api.GET("/status", Status)
}
api.GET("/url", GetAll)
api.GET("/status", Status)
}

View File

@ -1,64 +0,0 @@
package api
import (
"encoding/base64"
"net/http"
"github.com/gin-gonic/gin"
"gitlab.com/gaming0skar123/go/pingbot/config"
"gitlab.com/gaming0skar123/go/pingbot/database/mongo"
)
func Delete(c *gin.Context) {
const BEARER_SCHEMA = "Password"
authHeader := c.GetHeader("Authorization")
passwordString := authHeader[len(BEARER_SCHEMA)+1:]
if passwordString != config.Password {
c.JSON(http.StatusUnauthorized, json{
"success": false,
"message": "Unauth!",
})
return
}
url := c.Param("url")
d, err := base64.StdEncoding.DecodeString(url)
if err != nil {
c.JSON(http.StatusBadRequest, json{
"success": false,
"message": "Error Parsing Base64!",
})
return
}
url = string(d)
r, err := mongo.Delete(url)
if r.DeletedCount <= 0 {
c.JSON(http.StatusNotFound, json{
"success": false,
"message": "Not Found!",
})
return
}
if err != nil {
c.JSON(http.StatusInternalServerError, json{
"success": false,
"message": "Error Deleting from Database!",
})
return
}
c.JSON(http.StatusOK, json{
"success": true,
"message": "Deleted!",
})
}

View File

@ -1,38 +1,16 @@
package api
import (
"fmt"
"net/http"
"github.com/gin-gonic/gin"
"gitlab.com/gaming0skar123/go/pingbot/database/mongo"
"github.com/medzikuser/go-pingbot/ping"
)
func GetAll(c *gin.Context) {
results, err := mongo.GetAll()
// Error Handling
if err != nil {
c.JSON(http.StatusInternalServerError, json{
"success": false,
"message": "Error fetching URLs!",
})
fmt.Println(err)
return
}
// DB Is Empty
if results == nil {
c.JSON(http.StatusNotFound, json{
"success": false,
"message": "Database is empty!",
})
return
}
ping.Cache()
c.JSON(http.StatusOK, json{
"success": true,
"db": results,
"db": ping.CacheURL,
})
}

View File

@ -1,62 +0,0 @@
package api
import (
"net/http"
"github.com/gin-gonic/gin"
"gitlab.com/gaming0skar123/go/pingbot/database/mongo"
)
func Insert(c *gin.Context) {
var post mongo.URL
err := c.BindJSON(&post)
if err != nil {
c.JSON(http.StatusBadRequest, json{
"success": false,
"message": "Error Binding JSON!",
})
return
}
if len(post.URL) < 1 {
c.JSON(http.StatusBadRequest, json{
"success": false,
"message": "URL was not Provided!",
})
return
}
_, err = http.Get(post.URL)
if err != nil {
c.JSON(http.StatusBadRequest, json{
"success": false,
"message": "Error Pinging URL!",
})
return
}
if post.Cluster == 0 {
post.Cluster = 1
}
_, err = mongo.Insert(&mongo.URL{
URL: post.URL,
Cluster: post.Cluster,
})
if err != nil {
c.JSON(http.StatusInternalServerError, json{
"success": false,
"message": "Error Inserting to Database!",
})
return
}
c.JSON(http.StatusOK, json{
"success": true,
"url": post.URL,
})
}

View File

@ -1,54 +1,54 @@
package api
import (
"fmt"
"math"
"net/http"
"os"
"runtime"
"strconv"
"time"
"github.com/MedzikUser/go-utils/common"
"github.com/MedzikUser/go-utils/stats"
"github.com/gin-gonic/gin"
"github.com/struCoder/pidusage"
"gitlab.com/gaming0skar123/go/pingbot/backend"
"gitlab.com/gaming0skar123/go/pingbot/common"
"gitlab.com/gaming0skar123/go/pingbot/config"
"github.com/medzikuser/go-pingbot/config"
"github.com/medzikuser/go-pingbot/ping"
)
func Status(c *gin.Context) {
var m runtime.MemStats
runtime.ReadMemStats(&m)
pid := os.Getpid()
mem := stats.Memory()
cpu, err := stats.CPU()
if err != nil {
common.Log.Error("cpu stat", err)
}
var ping json
var p json
if config.Toml.Backend.Enabled {
ping = json{
"all": backend.Status.Error + backend.Status.Success,
"success": backend.Status.Success,
"err": backend.Status.Error,
p = json{
"all": ping.Status.Error + ping.Status.Success,
"success": ping.Status.Success,
"error": ping.Status.Error,
}
} else {
ping = nil
p = nil
}
c.JSON(http.StatusOK, json{
"ping": ping,
"ping": p,
"sys": json{
"pid": pid,
"os": runtime.GOOS,
"mem": json{
"alloc": mb(m.Alloc),
"totalalloc": mb(m.TotalAlloc),
"sys": mb(m.Sys),
"numgc": m.NumGC,
"uptime": common.Uptime(config.StartTime),
"pid": cpu.PID,
"os": runtime.GOOS,
"memory": json{
"alloc": mem.Alloc,
"totalalloc": mem.TotalAlloc,
"sys": mem.Sys,
"numgc": mem.NumGC,
},
"cpu": json{
"usage": cpu(pid),
"num": runtime.NumCPU(),
"arch": runtime.GOARCH,
"usage": cpu.Usage,
"num": cpu.Num,
"arch": cpu.Arch,
},
},
"v": json{
@ -56,81 +56,5 @@ func Status(c *gin.Context) {
"release": config.Version,
"build": config.Build,
},
"node": json{
"cluster": config.Toml.Cluster.ID,
"node": config.Toml.Cluster.Node,
//"uptime": time.Since(config.StartTime).String(),
"uptime": uptime(),
},
})
}
func uptime() string {
t := time.Since(config.StartTime)
var uptime string
var (
y int
d int
)
h := round(t.Hours())
m := round(t.Minutes())
s := round(t.Seconds())
for h/24 > 0 {
d++
h -= 24
}
for d/365 > 0 {
y++
d -= 365
}
if y > 0 {
uptime += strconv.Itoa(y) + "y "
}
if d > 0 {
uptime += strconv.Itoa(d) + "d "
}
if h > 0 {
uptime += strconv.Itoa(h) + "h "
}
if m > 0 {
uptime += strconv.Itoa(m-(round(t.Hours())*60)) + "m "
}
if s > 0 {
uptime += strconv.Itoa(s-(m*60)) + "s"
}
return uptime
}
func round(val float64) int {
if val < 0 {
return int(val - 1.0)
}
return int(val)
}
func mb(b uint64) string {
return fmt.Sprintf("%d MB", b/1000/1000)
}
func cpu(pid int) *string {
sysInfo, err := pidusage.GetStat(pid)
if common.CheckErr(err, "get cpu stat") {
return nil
}
s := fmt.Sprint(math.Round(sysInfo.CPU*100)/100, "%")
return &s
}

View File

@ -4,12 +4,12 @@ import (
"os"
"strconv"
"github.com/MedzikUser/go-utils/common"
"github.com/gin-contrib/cors"
"github.com/gin-gonic/gin"
"gitlab.com/gaming0skar123/go/pingbot/common"
"gitlab.com/gaming0skar123/go/pingbot/config"
"gitlab.com/gaming0skar123/go/pingbot/website/routes"
"gitlab.com/gaming0skar123/go/pingbot/website/routes/api"
"github.com/medzikuser/go-pingbot/config"
"github.com/medzikuser/go-pingbot/website/routes"
"github.com/medzikuser/go-pingbot/website/routes/api"
)
var router *gin.Engine
@ -20,15 +20,20 @@ func Server() {
router = gin.New()
// Allows all origins
router.Use(cors.Default())
// Fix cors
configCors := cors.DefaultConfig()
configCors.AllowOrigins = []string{"https://www.pingbot.cf"}
router.Use(cors.New(configCors))
router.GET("/", routes.Index)
api.ApplyRoutes(router)
err := router.Run(":" + strconv.Itoa(config.Toml.HTTP.Port))
if common.CheckErr(err, "gin start") {
if err != nil {
common.Log.Error("gin start http server", err)
os.Exit(1)
}
}