From 24da0ad533f06462d6b54a92cb929e26a7a6f04b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Wysoki=C5=84ski?= Date: Sat, 9 Sep 2023 05:43:58 +0000 Subject: [PATCH] feat: migrate from drone to woodpecker (#125) Reviewed-on: https://gitea.dwysokinski.me/twhelp/dcbot/pulls/125 --- .drone.yml | 400 ----------------------- .pre-commit-config.yaml | 2 +- .woodpecker/deploy.yml | 35 ++ .woodpecker/docker.yml | 35 ++ .woodpecker/govulncheck.yml | 33 ++ .woodpecker/test.yml | 49 +++ Makefile | 4 +- build/docker/dcbot-migrations/Dockerfile | 2 +- build/docker/dcbot/dev/Dockerfile | 4 +- build/docker/dcbot/prod/Dockerfile | 6 +- go.mod | 15 +- go.sum | 61 +++- 12 files changed, 211 insertions(+), 435 deletions(-) delete mode 100644 .drone.yml create mode 100644 .woodpecker/deploy.yml create mode 100644 .woodpecker/docker.yml create mode 100644 .woodpecker/govulncheck.yml create mode 100644 .woodpecker/test.yml diff --git a/.drone.yml b/.drone.yml deleted file mode 100644 index 3bbdda1..0000000 --- a/.drone.yml +++ /dev/null @@ -1,400 +0,0 @@ ---- -kind: pipeline -type: docker -name: test - -steps: - - name: test - image: golang:1.20 - pull: always - environment: - TESTS_DB_DSN: postgres://postgres:dcbot@database:5432/dcbot?sslmode=disable - TESTS_REDIS_CONNECTION_STRING: redis://:@redis:6379/0 - commands: - - make generate - - go test -race -coverprofile=coverage.txt -covermode=atomic ./... - -services: - - name: database - image: postgres:14.8 - environment: - POSTGRES_DB: dcbot - POSTGRES_PASSWORD: dcbot - - name: redis - image: redis:7.0.12 - -trigger: - event: - - push - - pull_request - branch: - - master - ---- -kind: pipeline -type: docker -name: check-go-mod - -steps: - - name: go.mod - image: golang:1.20 - pull: always - commands: - - make generate - - go mod tidy - - git diff --exit-code go.mod - -trigger: - event: - - push - - pull_request - branch: - - master - ---- -kind: pipeline -type: docker -name: migrations - -steps: - - name: validate - image: golang:1.20 - pull: always - commands: - - make validate-migrations - -trigger: - event: - - push - - pull_request - branch: - - master - ---- -kind: pipeline -type: docker -name: translations - -steps: - - name: validate - image: golang:1.20 - pull: always - commands: - - apt update && apt -y install jq - - make validate-translations - -trigger: - event: - - push - - pull_request - branch: - - master - ---- -kind: pipeline -type: docker -name: golangci-lint - -steps: - - name: golangci-lint - image: golangci/golangci-lint:v1.53 - pull: always - commands: - - make generate - - golangci-lint run - -trigger: - event: - - push - - pull_request - branch: - - master - ---- -kind: pipeline -type: docker -name: govulncheck - -platform: - os: linux - arch: amd64 - -steps: - - name: govulncheck - image: golang:1.20 - pull: always - commands: - - make generate - - go install golang.org/x/vuln/cmd/govulncheck@latest - - govulncheck ./... - - name: notify - image: drillster/drone-email - settings: - from.address: - from_secret: email_from - from.name: Drone - host: - from_secret: email_host - username: - from_secret: email_username - password: - from_secret: email_password - recipients: - - notifications@dwysokinski.me - recipients_only: true - subject: "[govulncheck - {{ build.status }}] {{ repo.owner }}/{{ repo.name }} ({{ build.branch }} - {{ truncate build.commit 8 }})" - when: - status: - - success - - failure - -trigger: - event: - - cron - cron: - - govulncheck - ---- -kind: pipeline -type: docker -name: linux-amd64 - -platform: - os: linux - arch: amd64 - -steps: - - name: publish - image: plugins/docker - settings: - username: - from_secret: docker_username - password: - from_secret: docker_password - registry: gitea.dwysokinski.me - repo: gitea.dwysokinski.me/twhelp-packages/dcbot - auto_tag: true - auto_tag_suffix: linux-amd64 - dockerfile: ./build/docker/dcbot/prod/Dockerfile - build_args_from_env: [DRONE_TAG] - - name: notify - image: drillster/drone-email - settings: - from.address: - from_secret: email_from - from.name: Drone - host: - from_secret: email_host - username: - from_secret: email_username - password: - from_secret: email_password - recipients: - - notifications@dwysokinski.me - recipients_only: true - when: - status: - - failure - -trigger: - event: - - tag - ---- -kind: pipeline -type: docker -name: manifest - -steps: - - name: manifest - image: plugins/manifest - settings: - auto_tag: "true" - ignore_missing: "true" - spec: ./build/docker/dcbot/prod/manifest.tmpl - username: - from_secret: docker_username - password: - from_secret: docker_password - - name: manifest-latest - image: plugins/manifest - settings: - tags: latest - ignore_missing: "true" - spec: ./build/docker/dcbot/prod/manifest.tmpl - username: - from_secret: docker_username - password: - from_secret: docker_password - - name: notify - image: drillster/drone-email - settings: - from.address: - from_secret: email_from - from.name: Drone - host: - from_secret: email_host - username: - from_secret: email_username - password: - from_secret: email_password - recipients: - - notifications@dwysokinski.me - recipients_only: true - when: - status: - - failure - -trigger: - event: - - tag - -depends_on: - - linux-amd64 - ---- -kind: pipeline -type: docker -name: migrations-linux-amd64 - -platform: - os: linux - arch: amd64 - -steps: - - name: publish - image: plugins/docker - settings: - username: - from_secret: docker_username - password: - from_secret: docker_password - registry: gitea.dwysokinski.me - repo: gitea.dwysokinski.me/twhelp-packages/dcbot-migrations - auto_tag: true - auto_tag_suffix: linux-amd64 - dockerfile: ./build/docker/dcbot-migrations/Dockerfile - - name: notify - image: drillster/drone-email - settings: - from.address: - from_secret: email_from - from.name: Drone - host: - from_secret: email_host - username: - from_secret: email_username - password: - from_secret: email_password - recipients: - - notifications@dwysokinski.me - recipients_only: true - when: - status: - - failure - -trigger: - event: - - tag - ---- -kind: pipeline -type: docker -name: migrations-manifest - -steps: - - name: manifest - image: plugins/manifest - settings: - auto_tag: "true" - ignore_missing: "true" - spec: ./build/docker/dcbot-migrations/manifest.tmpl - username: - from_secret: docker_username - password: - from_secret: docker_password - - name: manifest-latest - image: plugins/manifest - settings: - tags: latest - ignore_missing: "true" - spec: ./build/docker/dcbot-migrations/manifest.tmpl - username: - from_secret: docker_username - password: - from_secret: docker_password - - name: notify - image: drillster/drone-email - settings: - from.address: - from_secret: email_from - from.name: Drone - host: - from_secret: email_host - username: - from_secret: email_username - password: - from_secret: email_password - recipients: - - notifications@dwysokinski.me - recipients_only: true - when: - status: - - failure - -trigger: - event: - - tag - -depends_on: - - migrations-linux-amd64 - ---- -kind: pipeline -type: docker -name: deploy - -steps: - - name: deploy-k8s - image: alpine/k8s:1.26.5 - environment: - KUBECONFIG: - from_secret: kubeconfig - commands: - - "mkdir ~/.kube && echo \"$KUBECONFIG\" > ~/.kube/twhelp" - - "cd ./k8s/overlays/prod && kustomize edit set image dcbot=gitea.dwysokinski.me/twhelp-packages/dcbot:${DRONE_TAG##v} dcbot-migrations=gitea.dwysokinski.me/twhelp-packages/dcbot-migrations:${DRONE_TAG##v} && cd ../../.." - - "kubectl --kubeconfig ~/.kube/twhelp -n twhelp delete jobs.batch twhelp-dcbot-migrations-job || true" - - kustomize build ./k8s/overlays/prod | kubectl --kubeconfig ~/.kube/twhelp apply -n twhelp -f - - - name: notify - image: drillster/drone-email - settings: - from.address: - from_secret: email_from - from.name: Drone - host: - from_secret: email_host - username: - from_secret: email_username - password: - from_secret: email_password - recipients: - - notifications@dwysokinski.me - recipients_only: true - subject: "[deploy - {{ build.status }}] {{ repo.owner }}/{{ repo.name }} ({{ build.branch }} - {{ truncate build.commit 8 }})" - when: - status: - - success - - failure - -trigger: - event: - - tag - -depends_on: - - manifest - - migrations-manifest ---- -kind: signature -hmac: ed0db55292798e0b63ba43ae50c749730c9a72423f6387b670e3fd7f68d2f5ad - -... diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e029e56..636ee92 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -6,6 +6,6 @@ repos: stages: [commit-msg] additional_dependencies: ['@commitlint/config-conventional'] - repo: https://github.com/golangci/golangci-lint - rev: v1.53.3 + rev: v1.54.2 hooks: - id: golangci-lint diff --git a/.woodpecker/deploy.yml b/.woodpecker/deploy.yml new file mode 100644 index 0000000..38bc85b --- /dev/null +++ b/.woodpecker/deploy.yml @@ -0,0 +1,35 @@ +when: + event: [tag] + ref: refs/tags/v* + +steps: + deploy: + image: alpine/k8s:1.26.5 + secrets: + - kubeconfig + commands: + - "mkdir ~/.kube && echo \"$KUBECONFIG\" > ~/.kube/twhelp" + - "cd ./k8s/overlays/prod && kustomize edit set image dcbot=gitea.dwysokinski.me/twhelp-packages/dcbot:${DRONE_TAG##v} dcbot-migrations=gitea.dwysokinski.me/twhelp-packages/dcbot-migrations:${DRONE_TAG##v} && cd ../../.." + - "kubectl --kubeconfig ~/.kube/twhelp -n twhelp delete jobs.batch twhelp-dcbot-migrations-job || true" + - kustomize build ./k8s/overlays/prod | kubectl --kubeconfig ~/.kube/twhelp apply -n twhelp -f - + notify: + image: deblan/woodpecker-email + settings: + from: + from_secret: email_from + from.name: Woodpecker + host: + from_secret: email_host + username: + from_secret: email_username + password: + from_secret: email_password + recipients: + - notifications@dwysokinski.me + recipients_only: true + subject: "[deploy - {{ build.status }}] {{ repo.owner }}/{{ repo.name }} ({{ build.branch }} - {{ truncate build.commit 8 }})" + when: + status: [failure] + +depends_on: + - docker diff --git a/.woodpecker/docker.yml b/.woodpecker/docker.yml new file mode 100644 index 0000000..b729b42 --- /dev/null +++ b/.woodpecker/docker.yml @@ -0,0 +1,35 @@ +when: + event: [tag] + ref: refs/tags/v* + +steps: + publish: + image: woodpeckerci/plugin-docker-buildx + settings: + platforms: linux/amd64 + repo: gitea.dwysokinski.me/twhelp-packages/dcbot + registry: gitea.dwysokinski.me + auto_tag: true + build_args: + - CI_COMMIT_TAG=${CI_COMMIT_TAG} + username: + from_secret: docker_username + password: + from_secret: docker_password + notify: + image: deblan/woodpecker-email + settings: + from: + from_secret: email_from + from.name: Woodpecker + host: + from_secret: email_host + username: + from_secret: email_username + password: + from_secret: email_password + recipients: + - notifications@dwysokinski.me + recipients_only: true + when: + status: [failure] diff --git a/.woodpecker/govulncheck.yml b/.woodpecker/govulncheck.yml new file mode 100644 index 0000000..a10f7ca --- /dev/null +++ b/.woodpecker/govulncheck.yml @@ -0,0 +1,33 @@ +when: + event: [cron] + cron: govulncheck + +variables: + - &go_image 'golang:1.21' + +steps: + govulncheck: + image: *go_image + pull: true + commands: + - make generate + - go install golang.org/x/vuln/cmd/govulncheck@latest + - govulncheck ./... + notify: + image: deblan/woodpecker-email + settings: + from: + from_secret: email_from + from.name: Woodpecker + host: + from_secret: email_host + username: + from_secret: email_username + password: + from_secret: email_password + recipients: + - notifications@dwysokinski.me + recipients_only: true + subject: "[deploy - {{ build.status }}] {{ repo.owner }}/{{ repo.name }} ({{ build.branch }} - {{ truncate build.commit 8 }})" + when: + status: [success, failure] diff --git a/.woodpecker/test.yml b/.woodpecker/test.yml new file mode 100644 index 0000000..4eeb769 --- /dev/null +++ b/.woodpecker/test.yml @@ -0,0 +1,49 @@ +when: + - event: [pull_request] + - event: push + branch: + - ${CI_REPO_DEFAULT_BRANCH} + +variables: + - &go_image 'golang:1.21' + +services: + database: + image: postgres:14.8 + environment: + POSTGRES_DB: dcbot + POSTGRES_PASSWORD: dcbot + redis: + image: redis:7.0.12 + +steps: + generate: + image: *go_image + pull: true + commands: + - make generate + + test: + image: *go_image + group: test + pull: true + environment: + TESTS_DB_DSN: postgres://postgres:dcbot@database:5432/dcbot?sslmode=disable + TESTS_REDIS_CONNECTION_STRING: redis://:@redis:6379/0 + commands: + - go test -race -coverprofile=coverage.txt -covermode=atomic ./... + + lint: + image: golangci/golangci-lint:v1.54 + pull: true + group: test + commands: + - golangci-lint run + + check-go-mod: + image: *go_image + group: test + pull: true + commands: + - go mod tidy + - git diff --exit-code go.mod diff --git a/Makefile b/Makefile index 5e671cb..3670174 100644 --- a/Makefile +++ b/Makefile @@ -17,7 +17,7 @@ install-git-hooks: .PHONY: install-golangci-lint install-golangci-lint: @echo "Installing github.com/golangci/golangci-lint..." - @(test -f $(GOLANGCI_LINT_PATH) && echo "github.com/golangci/golangci-lint is already installed. Skipping...") || curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(GOBIN) v1.53.3 + @(test -f $(GOLANGCI_LINT_PATH) && echo "github.com/golangci/golangci-lint is already installed. Skipping...") || curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(GOBIN) v1.54.2 .PHONY: install-counterfeiter install-counterfeiter: @@ -27,7 +27,7 @@ install-counterfeiter: .PHONY: install-goose install-goose: @echo "Installing github.com/pressly/goose..." - @(test -f $(GOOSE_PATH) && echo "github.com/pressly/goose is already installed. Skipping...") || (wget -q -O $(GOOSE_PATH) https://github.com/pressly/goose/releases/download/v3.13.4/goose_$(GOOS)_$(OSARCH) && chmod u+x $(GOOSE_PATH)) + @(test -f $(GOOSE_PATH) && echo "github.com/pressly/goose is already installed. Skipping...") || (wget -q -O $(GOOSE_PATH) https://github.com/pressly/goose/releases/download/v3.15.0/goose_$(GOOS)_$(OSARCH) && chmod u+x $(GOOSE_PATH)) .PHONY: install-tools diff --git a/build/docker/dcbot-migrations/Dockerfile b/build/docker/dcbot-migrations/Dockerfile index 3e394cb..72616b2 100644 --- a/build/docker/dcbot-migrations/Dockerfile +++ b/build/docker/dcbot-migrations/Dockerfile @@ -6,7 +6,7 @@ RUN apk --no-cache add curl RUN curl -fsSL \ https://raw.githubusercontent.com/pressly/goose/master/install.sh |\ - sh -s v3.13.4 + sh -s v3.15.0 COPY ./migrations . diff --git a/build/docker/dcbot/dev/Dockerfile b/build/docker/dcbot/dev/Dockerfile index 25abbc4..b36a4e1 100644 --- a/build/docker/dcbot/dev/Dockerfile +++ b/build/docker/dcbot/dev/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.20 as builder +FROM golang:1.21 as builder WORKDIR /app COPY go.mod go.sum ./ RUN go mod download @@ -15,4 +15,4 @@ ENV GOTRACEBACK=single RUN apt update RUN apt install -y ca-certificates tzdata COPY --from=builder /app/dcbot . -ENTRYPOINT ["./dcbot"] \ No newline at end of file +ENTRYPOINT ["./dcbot"] diff --git a/build/docker/dcbot/prod/Dockerfile b/build/docker/dcbot/prod/Dockerfile index df36265..30597dd 100644 --- a/build/docker/dcbot/prod/Dockerfile +++ b/build/docker/dcbot/prod/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.20.7-alpine3.18 as builder +FROM golang:1.21.1-alpine3.18 as builder WORKDIR /dcbot @@ -9,8 +9,8 @@ RUN apk --no-cache add make COPY . . RUN make generate -ARG DRONE_TAG="development" -RUN CGO_ENABLED=0 go build -ldflags "-X main.version=${DRONE_TAG##v}" -trimpath -o dcbot ./cmd/dcbot/main.go +ARG CI_COMMIT_TAG="development" +RUN CGO_ENABLED=0 go build -ldflags "-X main.version=${CI_COMMIT_TAG##v}" -trimpath -o dcbot ./cmd/dcbot/main.go ######## Start a new stage from scratch ####### FROM alpine:3.18 diff --git a/go.mod b/go.mod index ac9cab4..f1bba0c 100644 --- a/go.mod +++ b/go.mod @@ -1,17 +1,17 @@ module gitea.dwysokinski.me/twhelp/dcbot -go 1.20 +go 1.21 require ( github.com/bwmarrin/discordgo v0.27.1 github.com/cenkalti/backoff/v4 v4.2.1 - github.com/google/uuid v1.3.0 - github.com/hashicorp/golang-lru/v2 v2.0.4 + github.com/google/uuid v1.3.1 + github.com/hashicorp/golang-lru/v2 v2.0.6 github.com/jackc/pgerrcode v0.0.0-20220416144525-469b46aa5efa github.com/kelseyhightower/envconfig v1.4.0 github.com/nicksnyder/go-i18n/v2 v2.2.1 github.com/ory/dockertest/v3 v3.10.0 - github.com/pressly/goose/v3 v3.13.4 + github.com/pressly/goose/v3 v3.15.0 github.com/redis/go-redis/v9 v9.0.5 github.com/robfig/cron/v3 v3.0.1 github.com/stretchr/testify v1.8.4 @@ -20,8 +20,8 @@ require ( github.com/uptrace/bun/dialect/pgdialect v1.1.14 github.com/uptrace/bun/driver/pgdriver v1.1.14 github.com/urfave/cli/v2 v2.25.7 - go.uber.org/zap v1.24.0 - golang.org/x/text v0.11.0 + go.uber.org/zap v1.25.0 + golang.org/x/text v0.13.0 golang.org/x/time v0.3.0 ) @@ -60,8 +60,7 @@ require ( github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xeipuuv/gojsonschema v1.2.0 // indirect github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect - go.uber.org/atomic v1.7.0 // indirect - go.uber.org/multierr v1.6.0 // indirect + go.uber.org/multierr v1.10.0 // indirect golang.org/x/crypto v0.10.0 // indirect golang.org/x/mod v0.12.0 // indirect golang.org/x/sys v0.10.0 // indirect diff --git a/go.sum b/go.sum index df73e6e..f22d689 100644 --- a/go.sum +++ b/go.sum @@ -2,13 +2,17 @@ github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25 github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v1.0.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= +github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= +github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= +github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/bsm/ginkgo/v2 v2.7.0 h1:ItPMPH90RbmZJt5GtkcNvIRuGEdwlBItdNVoyzaNQao= +github.com/bsm/ginkgo/v2 v2.7.0/go.mod h1:AiKlXPm7ItEHNc/2+OkrNG4E0ITzojb9/xWzvQ9XZ9w= github.com/bsm/gomega v1.26.0 h1:LhQm+AFcgV2M0WyKroMASzAzCAJVpAxQXv4SaI9a69Y= +github.com/bsm/gomega v1.26.0/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= github.com/bwmarrin/discordgo v0.27.1 h1:ib9AIc/dom1E/fSIulrBwnez0CToJE113ZGt4HoliGY= github.com/bwmarrin/discordgo v0.27.1/go.mod h1:NJZpH+1AfhIcyQsPeuBKsUtYrRnjkyu0kIVMCHkZtRY= github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM= @@ -20,6 +24,7 @@ github.com/containerd/continuity v0.4.1/go.mod h1:F6PTNCKepoxEaXLQp3wDAjygEnImnZ github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= +github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= 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= @@ -34,19 +39,21 @@ github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5Xh github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI= +github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= +github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/hashicorp/golang-lru/v2 v2.0.4 h1:7GHuZcgid37q8o5i3QI9KMT4nCWQQ3Kx3Ov6bb9MfK0= -github.com/hashicorp/golang-lru/v2 v2.0.4/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= +github.com/hashicorp/golang-lru/v2 v2.0.6 h1:3xi/Cafd1NaoEnS/yDssIiuVeDVywU0QdFGl3aQaQHM= +github.com/hashicorp/golang-lru/v2 v2.0.6/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= github.com/jackc/pgerrcode v0.0.0-20220416144525-469b46aa5efa h1:s+4MhCQ6YrzisK6hFJUX53drDT4UsSW3DEhKn0ifuHw= @@ -54,13 +61,17 @@ github.com/jackc/pgerrcode v0.0.0-20220416144525-469b46aa5efa/go.mod h1:a/s9Lp5W github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= github.com/kelseyhightower/envconfig v1.4.0 h1:Im6hONhd3pLkfDFsbRgu68RDNkGF1r3dvMUtDTo2cv8= github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= +github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= @@ -68,6 +79,7 @@ github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3 github.com/nicksnyder/go-i18n/v2 v2.2.1 h1:aOzRCdwsJuoExfZhoiXHy4bjruwCMdt5otbYojM/PaA= github.com/nicksnyder/go-i18n/v2 v2.2.1/go.mod h1:fF2++lPHlo+/kPaj3nB0uxtPwzlPm+BlgwGX7MkeGj0= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc4 h1:oOxKUJWnFC4YGHCCMNql1x4YaDfYBTS5Y4x/Cgeo1E0= @@ -80,11 +92,12 @@ 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/pressly/goose/v3 v3.13.4 h1:9xRcg/hEU9HqeRNeKh69VLtPWCKAYTX6l2VsXWOX86A= -github.com/pressly/goose/v3 v3.13.4/go.mod h1:Fo8rYaf9tYfQiDpo+ymrnZi8vvLkvguRl16nu7QnUT4= +github.com/pressly/goose/v3 v3.15.0 h1:6tY5aDqFknY6VZkorFGgZtWygodZQxfmmEF4rqyJW9k= +github.com/pressly/goose/v3 v3.15.0/go.mod h1:LlIo3zGccjb/YUgG+Svdb9Er14vefRdlDI7URCDrwYo= github.com/redis/go-redis/v9 v9.0.5 h1:CuQcn5HIEeK7BgElubPP8CGtE0KakrnbBSTLjathl5o= github.com/redis/go-redis/v9 v9.0.5/go.mod h1:WqMKv5vnQbRuZstUwxQI195wHy+t4PuXDOjzMvcuQHk= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= @@ -125,13 +138,12 @@ github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsr github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= -go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= -go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= +go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= +go.uber.org/goleak v1.2.0/go.mod h1:XJYK+MuIchqpmGmUSAzotztawfKvYLUIgg7guXrwVUo= +go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ= +go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.25.0 h1:4Hvk6GtkucQ790dqmj7l1eEnRdKm3k3ZUrUMS2d5+5c= +go.uber.org/zap v1.25.0/go.mod h1:JIAUzQIH94IC4fOJQm7gMmBJP5k7wQfdcnYdPoEXJYk= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -155,6 +167,7 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -172,8 +185,8 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4= -golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -189,6 +202,7 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 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= @@ -196,15 +210,26 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools/v3 v3.3.0 h1:MfDY1b1/0xN1CyMlQDac0ziEy9zJQd9CXBRRDHw2jJo= +gotest.tools/v3 v3.3.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= lukechampine.com/uint128 v1.3.0 h1:cDdUVfRwDUDovz610ABgFD17nXD4/uDgVHl2sC3+sbo= +lukechampine.com/uint128 v1.3.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= mellium.im/sasl v0.3.1 h1:wE0LW6g7U83vhvxjC1IY8DnXM+EU095yeo8XClvCdfo= mellium.im/sasl v0.3.1/go.mod h1:xm59PUYpZHhgQ9ZqoJ5QaCqzWMi8IeS49dhp6plPCzw= modernc.org/cc/v3 v3.41.0 h1:QoR1Sn3YWlmA1T4vLaKZfawdVtSiGx8H+cEojbC7v1Q= +modernc.org/cc/v3 v3.41.0/go.mod h1:Ni4zjJYJ04CDOhG7dn640WGfwBzfE0ecX8TyMB0Fv0Y= modernc.org/ccgo/v3 v3.16.14 h1:af6KNtFgsVmnDYrWk3PQCS9XT6BXe7o3ZFJKkIKvXNQ= +modernc.org/ccgo/v3 v3.16.14/go.mod h1:mPDSujUIaTNWQSG4eqKw+atqLOEbma6Ncsa94WbC9zo= modernc.org/libc v1.24.1 h1:uvJSeCKL/AgzBo2yYIPPTy82v21KgGnizcGYfBHaNuM= +modernc.org/libc v1.24.1/go.mod h1:FmfO1RLrU3MHJfyi9eYYmZBfi/R+tqZ6+hQ3yQQUkak= modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4= +modernc.org/mathutil v1.6.0/go.mod h1:Ui5Q9q1TR2gFm0AQRqQUaBWFLAhQpCwNcuhBOSedWPo= modernc.org/memory v1.6.0 h1:i6mzavxrE9a30whzMfwf7XWVODx2r5OYXvU46cirX7o= +modernc.org/memory v1.6.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4= -modernc.org/sqlite v1.23.1 h1:nrSBg4aRQQwq59JpvGEQ15tNxoO5pX/kUjcRNwSAGQM= +modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/sqlite v1.25.0 h1:AFweiwPNd/b3BoKnBOfFm+Y260guGMF+0UFk0savqeA= +modernc.org/sqlite v1.25.0/go.mod h1:FL3pVXie73rg3Rii6V/u5BoHlSoyeZeIgKZEgHARyCU= modernc.org/strutil v1.1.3 h1:fNMm+oJklMGYfU9Ylcywl0CO5O6nTfaowNsh2wpPjzY= +modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= +modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=