From 5aab391b74817a00bf335be6f6a49b0d6fd127e7 Mon Sep 17 00:00:00 2001 From: Tyler Koenig Date: Tue, 26 May 2026 18:24:19 -0400 Subject: [PATCH 1/5] =?UTF-8?q?ci:=20overhaul=20pipeline=20=E2=80=94=20cac?= =?UTF-8?q?hing,=20GoReleaser,=20govulncheck?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add module + build cache to CI (was only caching go-build, not go/pkg/mod) - Declare explicit Alpine container instead of relying on runner image - Drop redundant go vet (already in golangci-lint) - Add govulncheck job for dependency CVE scanning - Add GoReleaser config for Gitea-native binary releases + checksums - Replace .github/workflows/docker.yml with .gitea/workflows/release.yml - Docker multiarch (amd64+arm64) via buildx in release workflow - Dockerfile: add --mount=type=cache for mod/build, add -trimpath --- .gitea/workflows/ci.yml | 36 ++++++++++++++----- .gitea/workflows/release.yml | 68 ++++++++++++++++++++++++++++++++++++ .github/workflows/docker.yml | 47 ------------------------- .goreleaser.yaml | 42 ++++++++++++++++++++++ Dockerfile | 7 ++-- 5 files changed, 142 insertions(+), 58 deletions(-) create mode 100644 .gitea/workflows/release.yml delete mode 100644 .github/workflows/docker.yml create mode 100644 .goreleaser.yaml diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 144425b..3ed2004 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -5,30 +5,33 @@ on: branches: [main] pull_request: +env: + GO_VERSION: "1.24" + jobs: test: runs-on: ubuntu-latest + container: + image: golang:1.24-alpine3.21 defaults: run: shell: sh steps: - uses: actions/checkout@v4 - - uses: actions/setup-go@v5 - with: - go-version: "1.24" - - uses: actions/cache@v4 with: - path: ~/.cache/go-build - key: go-build-${{ hashFiles('**/*.go', 'go.sum') }} - restore-keys: go-build- + path: | + /go/pkg/mod + /root/.cache/go-build + key: go-${{ hashFiles('go.sum') }} + restore-keys: go- - name: Install build tools run: apk add --no-cache gcc musl-dev - - name: Vet - run: go vet ./... + - name: Download modules + run: go mod download - name: Test run: CGO_ENABLED=1 go test -race -timeout 120s ./... @@ -45,3 +48,18 @@ jobs: - uses: golangci/golangci-lint-action@v7 with: version: v2.11.2 + + vulncheck: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-go@v5 + with: + go-version: "1.24" + + - name: Install govulncheck + run: go install golang.org/x/vuln/cmd/govulncheck@latest + + - name: Run govulncheck + run: govulncheck ./... diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml new file mode 100644 index 0000000..349556d --- /dev/null +++ b/.gitea/workflows/release.yml @@ -0,0 +1,68 @@ +name: Release + +on: + push: + tags: + - "[0-9]*" + +jobs: + release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - uses: actions/setup-go@v5 + with: + go-version: "1.24" + + - uses: actions/cache@v4 + with: + path: | + ~/go/pkg/mod + ~/.cache/go-build + key: release-go-${{ hashFiles('go.sum') }} + restore-keys: release-go- + + - name: Run GoReleaser + uses: goreleaser/goreleaser-action@v7 + with: + distribution: goreleaser + version: "~> v2" + args: release --clean + env: + GORELEASER_FORCE_TOKEN: gitea + GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} + + docker: + runs-on: ubuntu-latest + needs: [release] + steps: + - uses: actions/checkout@v4 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build and push + uses: docker/build-push-action@v5 + with: + context: . + push: true + platforms: linux/amd64,linux/arm64 + tags: | + lerkolabs/uptop:${{ github.ref_name }} + lerkolabs/uptop:latest + build-args: | + VERSION=${{ github.ref_name }} + COMMIT=${{ github.sha }} + BUILD_DATE=${{ github.event.head_commit.timestamp }} diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml deleted file mode 100644 index 0ced3ab..0000000 --- a/.github/workflows/docker.yml +++ /dev/null @@ -1,47 +0,0 @@ -name: Publish Release - -on: - push: - tags: - - '[0-9]*' - -jobs: - push_to_registry: - name: Build and Push Docker Image - runs-on: ubuntu-latest - steps: - - name: Check out the repo - uses: actions/checkout@v4 - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to Docker Hub - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Extract metadata (tags, labels) - id: meta - uses: docker/metadata-action@v5 - with: - images: ${{ secrets.DOCKERHUB_USERNAME }}/uptop - tags: | - type=match,pattern=\d+\.\d+\.\d+ - type=raw,value=latest - - - name: Build and push - uses: docker/build-push-action@v5 - with: - context: . - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - build-args: | - VERSION=${{ github.ref_name }} - COMMIT=${{ github.sha }} - BUILD_DATE=${{ github.event.head_commit.timestamp }} diff --git a/.goreleaser.yaml b/.goreleaser.yaml new file mode 100644 index 0000000..27fb7ed --- /dev/null +++ b/.goreleaser.yaml @@ -0,0 +1,42 @@ +version: 2 + +gitea_urls: + api: https://gitea.lerkolabs.com/api/v1 + download: https://gitea.lerkolabs.com + +release: + gitea: + owner: lerko + name: uptop + +builds: + - main: ./cmd/uptop/main.go + binary: uptop + env: + - CGO_ENABLED=1 + goos: + - linux + goarch: + - amd64 + ldflags: + - -s -w + - -X main.version={{ .Version }} + - -X main.commit={{ .Commit }} + - -X main.date={{ .Date }} + flags: + - -trimpath + +archives: + - formats: [tar.gz] + name_template: "{{ .ProjectName }}_{{ .Os }}_{{ .Arch }}" + +checksum: + name_template: checksums.txt + +changelog: + sort: asc + filters: + exclude: + - "^docs:" + - "^chore:" + - "^style:" diff --git a/Dockerfile b/Dockerfile index 54671e9..48f7b9e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,13 +3,16 @@ FROM golang:1.24-alpine3.21 AS builder RUN apk add --no-cache gcc musl-dev WORKDIR /app COPY go.mod go.sum ./ -RUN go mod download +RUN --mount=type=cache,target=/go/pkg/mod \ + go mod download COPY . . ENV CGO_ENABLED=1 ARG VERSION=dev ARG COMMIT=none ARG BUILD_DATE=unknown -RUN go build -ldflags="-s -w -X main.version=${VERSION} -X main.commit=${COMMIT} -X main.date=${BUILD_DATE}" -o uptop ./cmd/uptop/main.go +RUN --mount=type=cache,target=/go/pkg/mod \ + --mount=type=cache,target=/root/.cache/go-build \ + go build -trimpath -ldflags="-s -w -X main.version=${VERSION} -X main.commit=${COMMIT} -X main.date=${BUILD_DATE}" -o uptop ./cmd/uptop/main.go # --- Stage 2: Runner --- FROM alpine:3.21 From f0ff87c0d052cc20932b90e24f17d5dfec331d14 Mon Sep 17 00:00:00 2001 From: Tyler Koenig Date: Tue, 26 May 2026 18:36:11 -0400 Subject: [PATCH 2/5] fix(ci): rename GITEA_TOKEN to RELEASE_TOKEN Gitea reserves the GITEA_ prefix for repo action secrets. --- .gitea/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml index 349556d..c4df119 100644 --- a/.gitea/workflows/release.yml +++ b/.gitea/workflows/release.yml @@ -33,7 +33,7 @@ jobs: args: release --clean env: GORELEASER_FORCE_TOKEN: gitea - GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} + GITEA_TOKEN: ${{ secrets.RELEASE_TOKEN }} docker: runs-on: ubuntu-latest From 7d4ef1f594b11042c0490c4af939415a5d4f0ee1 Mon Sep 17 00:00:00 2001 From: Tyler Koenig Date: Tue, 26 May 2026 18:44:08 -0400 Subject: [PATCH 3/5] fix(ci): remove explicit container, use sh shell MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Act runner is Alpine-based — container: directive breaks node-based actions (checkout, setup-go). Runner already has apk natively. Added shell: sh to all jobs since runner lacks bash. --- .gitea/workflows/ci.yml | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 3ed2004..e1292ea 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -11,19 +11,21 @@ env: jobs: test: runs-on: ubuntu-latest - container: - image: golang:1.24-alpine3.21 defaults: run: shell: sh steps: - uses: actions/checkout@v4 + - uses: actions/setup-go@v5 + with: + go-version: "1.24" + - uses: actions/cache@v4 with: path: | - /go/pkg/mod - /root/.cache/go-build + ~/go/pkg/mod + ~/.cache/go-build key: go-${{ hashFiles('go.sum') }} restore-keys: go- @@ -38,6 +40,9 @@ jobs: lint: runs-on: ubuntu-latest + defaults: + run: + shell: sh steps: - uses: actions/checkout@v4 @@ -51,6 +56,9 @@ jobs: vulncheck: runs-on: ubuntu-latest + defaults: + run: + shell: sh steps: - uses: actions/checkout@v4 From 2cd3dcddb4a485b6b60f85fb284ec26823e1efd0 Mon Sep 17 00:00:00 2001 From: Tyler Koenig Date: Tue, 26 May 2026 20:12:43 -0400 Subject: [PATCH 4/5] =?UTF-8?q?chore:=20bump=20Go=201.24.4=20=E2=86=92=201?= =?UTF-8?q?.26.3,=20Alpine=203.21=20=E2=86=92=203.23?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Go 1.24 EOL since Feb 2026. Fixes 33 stdlib vulns found by govulncheck (database/sql, os/exec, net/http). Gets Green Tea GC. --- .gitea/workflows/ci.yml | 8 ++++---- .gitea/workflows/release.yml | 2 +- Dockerfile | 4 ++-- go.mod | 4 ++-- go.sum | 1 + 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index e1292ea..b2291f1 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -6,7 +6,7 @@ on: pull_request: env: - GO_VERSION: "1.24" + GO_VERSION: "1.26" jobs: test: @@ -19,7 +19,7 @@ jobs: - uses: actions/setup-go@v5 with: - go-version: "1.24" + go-version: "1.26" - uses: actions/cache@v4 with: @@ -48,7 +48,7 @@ jobs: - uses: actions/setup-go@v5 with: - go-version: "1.24" + go-version: "1.26" - uses: golangci/golangci-lint-action@v7 with: @@ -64,7 +64,7 @@ jobs: - uses: actions/setup-go@v5 with: - go-version: "1.24" + go-version: "1.26" - name: Install govulncheck run: go install golang.org/x/vuln/cmd/govulncheck@latest diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml index c4df119..4476b8b 100644 --- a/.gitea/workflows/release.yml +++ b/.gitea/workflows/release.yml @@ -15,7 +15,7 @@ jobs: - uses: actions/setup-go@v5 with: - go-version: "1.24" + go-version: "1.26" - uses: actions/cache@v4 with: diff --git a/Dockerfile b/Dockerfile index 48f7b9e..9978b2e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # --- Stage 1: Builder --- -FROM golang:1.24-alpine3.21 AS builder +FROM golang:1.26-alpine3.23 AS builder RUN apk add --no-cache gcc musl-dev WORKDIR /app COPY go.mod go.sum ./ @@ -15,7 +15,7 @@ RUN --mount=type=cache,target=/go/pkg/mod \ go build -trimpath -ldflags="-s -w -X main.version=${VERSION} -X main.commit=${COMMIT} -X main.date=${BUILD_DATE}" -o uptop ./cmd/uptop/main.go # --- Stage 2: Runner --- -FROM alpine:3.21 +FROM alpine:3.23 WORKDIR /app RUN apk add --no-cache ca-certificates openssh-client RUN mkdir /data diff --git a/go.mod b/go.mod index 06b6111..e28a302 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module gitea.lerkolabs.com/lerko/uptop -go 1.24.4 +go 1.26.3 require ( github.com/charmbracelet/bubbles v0.21.1-0.20250623103423-23b8fd6302d7 @@ -16,6 +16,7 @@ require ( github.com/mattn/go-sqlite3 v1.14.33 github.com/miekg/dns v1.1.72 github.com/prometheus-community/pro-bing v0.8.0 + gopkg.in/yaml.v3 v3.0.1 ) require ( @@ -57,5 +58,4 @@ require ( golang.org/x/sys v0.40.0 // indirect golang.org/x/text v0.33.0 // indirect golang.org/x/tools v0.40.0 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 17c3eca..ac19cd4 100644 --- a/go.sum +++ b/go.sum @@ -121,6 +121,7 @@ golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE= golang.org/x/text v0.33.0/go.mod h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8= golang.org/x/tools v0.40.0 h1:yLkxfA+Qnul4cs9QA3KnlFu0lVmd8JJfoq+E41uSutA= golang.org/x/tools v0.40.0/go.mod h1:Ik/tzLRlbscWpqqMRjyWYDisX8bG13FrdXp3o4Sr9lc= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= From b1935aa68275913fa78f1c26741e2479d8fa9ea1 Mon Sep 17 00:00:00 2001 From: Tyler Koenig Date: Tue, 26 May 2026 20:20:23 -0400 Subject: [PATCH 5/5] =?UTF-8?q?fix(deps):=20bump=20golang.org/x/crypto=20v?= =?UTF-8?q?0.47.0=20=E2=86=92=20v0.52.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes 7 vulns (GO-2026-5014 through GO-2026-5023) found by govulncheck. Also bumps x/net, x/sys, x/text, x/sync, x/mod, x/tools to latest. --- go.mod | 14 +++++++------- go.sum | 32 ++++++++++++++++---------------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/go.mod b/go.mod index e28a302..e87ef3c 100644 --- a/go.mod +++ b/go.mod @@ -50,12 +50,12 @@ require ( github.com/muesli/termenv v0.16.0 // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect - golang.org/x/crypto v0.47.0 // indirect + golang.org/x/crypto v0.52.0 // indirect golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect - golang.org/x/mod v0.31.0 // indirect - golang.org/x/net v0.49.0 // indirect - golang.org/x/sync v0.19.0 // indirect - golang.org/x/sys v0.40.0 // indirect - golang.org/x/text v0.33.0 // indirect - golang.org/x/tools v0.40.0 // indirect + golang.org/x/mod v0.35.0 // indirect + golang.org/x/net v0.54.0 // indirect + golang.org/x/sync v0.20.0 // indirect + golang.org/x/sys v0.45.0 // indirect + golang.org/x/text v0.37.0 // indirect + golang.org/x/tools v0.44.0 // indirect ) diff --git a/go.sum b/go.sum index ac19cd4..db48509 100644 --- a/go.sum +++ b/go.sum @@ -101,26 +101,26 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= -golang.org/x/crypto v0.47.0 h1:V6e3FRj+n4dbpw86FJ8Fv7XVOql7TEwpHapKoMJ/GO8= -golang.org/x/crypto v0.47.0/go.mod h1:ff3Y9VzzKbwSSEzWqJsJVBnWmRwRSHt/6Op5n9bQc4A= +golang.org/x/crypto v0.52.0 h1:RMs7fP2rXdep0CftQlK8Uf+kibLm7qkCcradZWYz988= +golang.org/x/crypto v0.52.0/go.mod h1:1QgfPxDqh0T2M/elOJtp9RvuR95kVjir0e6/BvEmGbc= golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= -golang.org/x/mod v0.31.0 h1:HaW9xtz0+kOcWKwli0ZXy79Ix+UW/vOfmWI5QVd2tgI= -golang.org/x/mod v0.31.0/go.mod h1:43JraMp9cGx1Rx3AqioxrbrhNsLl2l/iNAvuBkrezpg= -golang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o= -golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8= -golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= -golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM= +golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU= +golang.org/x/net v0.54.0 h1:2zJIZAxAHV/OHCDTCOHAYehQzLfSXuf/5SoL/Dv6w/w= +golang.org/x/net v0.54.0/go.mod h1:Sj4oj8jK6XmHpBZU/zWHw3BV3abl4Kvi+Ut7cQcY+cQ= +golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= +golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= -golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= -golang.org/x/term v0.39.0 h1:RclSuaJf32jOqZz74CkPA9qFuVTX7vhLlpfj/IGWlqY= -golang.org/x/term v0.39.0/go.mod h1:yxzUCTP/U+FzoxfdKmLaA0RV1WgE0VY7hXBwKtY/4ww= -golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE= -golang.org/x/text v0.33.0/go.mod h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8= -golang.org/x/tools v0.40.0 h1:yLkxfA+Qnul4cs9QA3KnlFu0lVmd8JJfoq+E41uSutA= -golang.org/x/tools v0.40.0/go.mod h1:Ik/tzLRlbscWpqqMRjyWYDisX8bG13FrdXp3o4Sr9lc= +golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= +golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4= +golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk= +golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= +golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= +golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c= +golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=