Skip to content

Commit 6c80585

Browse files
authored
chore: release version 2.0.0 - Cask support and XDG compliance (#30)
* feat: add leaves filter to show explicitly installed packages (#25) Add new filter [L] to display only "leaf" packages - those installed explicitly by the user and not as dependencies of other packages. * refactor: Migrate to Podman with OCI Containerfile and enhanced Makefile (#26) * refactor: migrate from Docker to Podman with OCI Containerfile Replace Docker with Podman for better security and OCI compliance. Switch from Dockerfile to standard Containerfile format. * chore: upgrade Go from 1.24 to 1.25 Update Go version to 1.25 to support latest goreleaser v2 and benefit from improved performance and language features. * refactor: migrate to Podman and enhance Makefile Replace Docker with Podman and upgrade Makefile with help system and new developer-friendly targets. * chore: upgrade to Go 1.25 and golangci-lint v2.5.0 Update Go to 1.25 and golangci-lint to v2.5.0 for better tooling support. * feat: add security scanning with govulncheck and gosec (#27) Add comprehensive security scanning to the project with vulnerability checks and static analysis tools. * feat: Add complete Casks support with unified UI (#28) * feat(cask): add backend support for Homebrew casks Implement complete backend infrastructure for managing Homebrew casks alongside formulae, preparing for unified UI. * feat(cask): add complete Homebrew casks support with unified UI Implement full backend and UI support for managing Homebrew casks alongside formulae in a unified interface. * fix(cask): parse cask analytics correctly Fix cask analytics not being displayed (showing 0 for all casks). * feat(cask): add complete Homebrew casks support with unified UI Implement full backend and UI support for managing Homebrew casks alongside formulae in a unified interface. * fix: create copy to avoid implicit memory aliasing * feat: implement XDG Base Directory Specification with github.com/adrg/xdg (#29) Implement XDG Base Directory Specification using the github.com/adrg/xdg package for robust cross-platform support.
1 parent edae4d7 commit 6c80585

File tree

16 files changed

+761
-185
lines changed

16 files changed

+761
-185
lines changed

.env

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
APP_NAME=bbrew
22
APP_VERSION=0.0.1-local
3-
4-
### Docker
5-
DOCKER_IMAGE_NAME=bbrew
6-
7-
### Build
8-
BUILD_GOVERSION=1.20
3+
CONTAINER_IMAGE_NAME=bbrew
4+
BUILD_GOVERSION=1.25
95
BUILD_GOOS=darwin
106
BUILD_GOARCH=arm64

.github/workflows/quality.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ jobs:
1616
- uses: actions/checkout@v4
1717
- uses: actions/setup-go@v5
1818
with:
19-
go-version: stable
19+
go-version: '1.25'
2020
- name: golangci-lint
2121
uses: golangci/golangci-lint-action@v8
2222
with:
23-
version: v2.1
23+
version: v2.5.0
2424
skip-cache: true
2525

2626
build:
@@ -30,7 +30,7 @@ jobs:
3030
- uses: actions/checkout@v4
3131
- uses: actions/setup-go@v5
3232
with:
33-
go-version: stable
33+
go-version: '1.25'
3434
- name: Get dependencies
3535
run: go mod download
3636
- name: Build

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ jobs:
2121
- name: Set up Go
2222
uses: actions/setup-go@v5
2323
with:
24-
go-version: stable
24+
go-version: '1.25'
2525

2626
- name: Run GoReleaser
2727
uses: goreleaser/goreleaser-action@v6

.github/workflows/security.yml

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
name: Security
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
pull_request:
8+
9+
permissions:
10+
contents: read
11+
12+
jobs:
13+
govulncheck:
14+
name: Go Vulnerability Check
15+
runs-on: ubuntu-latest
16+
steps:
17+
- name: Checkout
18+
uses: actions/checkout@v4
19+
20+
- name: Set up Go
21+
uses: actions/setup-go@v5
22+
with:
23+
go-version: '1.25'
24+
25+
- name: Install govulncheck
26+
run: go install golang.org/x/vuln/cmd/govulncheck@latest
27+
28+
- name: Run govulncheck
29+
run: govulncheck ./...
30+
31+
gosec:
32+
name: Security Scanner
33+
runs-on: ubuntu-latest
34+
steps:
35+
- name: Checkout
36+
uses: actions/checkout@v4
37+
38+
- name: Set up Go
39+
uses: actions/setup-go@v5
40+
with:
41+
go-version: '1.25'
42+
43+
- name: Run Gosec Security Scanner
44+
uses: securego/gosec@master
45+
with:
46+
args: '-no-fail -fmt sarif -out results.sarif ./...'
47+
48+
- name: Upload SARIF file
49+
if: always()
50+
uses: github/codeql-action/upload-sarif@v3
51+
with:
52+
sarif_file: results.sarif
53+

Containerfile

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
FROM golang:1.25
2+
3+
# Install dependencies
4+
RUN curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/HEAD/install.sh | sh -s -- -b $(go env GOPATH)/bin v2.5.0
5+
RUN go install github.com/goreleaser/goreleaser/v2@latest
6+
7+
# Install security tools
8+
RUN go install golang.org/x/vuln/cmd/govulncheck@latest
9+
RUN go install github.com/securego/gosec/v2/cmd/gosec@latest
10+
11+
WORKDIR /app

Dockerfile

Lines changed: 0 additions & 7 deletions
This file was deleted.

Makefile

Lines changed: 113 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,148 @@
11
##############################
22
# VARIABLES
33
##############################
4-
ifneq (,$(wildcard ./.env))
5-
include .env
6-
export
7-
endif
8-
%:@
4+
# Load .env if exists (loaded first so defaults can override if not set)
5+
-include .env
6+
7+
# Default values (can be overridden by .env or command line)
8+
APP_NAME ?= bbrew
9+
APP_VERSION ?= 0.0.1-local
10+
CONTAINER_IMAGE_NAME ?= bbrew
11+
BUILD_GOVERSION ?= 1.25
12+
BUILD_GOOS ?= $(shell go env GOOS)
13+
BUILD_GOARCH ?= $(shell go env GOARCH)
14+
15+
# Container runtime command
16+
CONTAINER_RUN = podman run --rm -v $(PWD):/app $(CONTAINER_IMAGE_NAME)
17+
18+
##############################
19+
# HELP
20+
##############################
21+
.PHONY: help
22+
help: ## Show this help message
23+
@echo "Usage: make [target]"
24+
@echo ""
25+
@echo "Available targets:"
26+
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf " \033[36m%-25s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST) | sort
27+
28+
.DEFAULT_GOAL := help
929

1030
##############################
11-
# DOCKER
31+
# CONTAINER
1232
##############################
13-
.PHONY: docker-build-image
14-
docker-build-image:
15-
@docker build -t $(DOCKER_IMAGE_NAME) .
33+
.PHONY: container-build-image
34+
container-build-image: ## Build container image
35+
@podman build -f Containerfile -t $(CONTAINER_IMAGE_NAME) .
1636

17-
docker-build-force-recreate:
18-
@docker build --no-cache -t $(DOCKER_IMAGE_NAME) .
37+
.PHONY: container-build-force
38+
container-build-force: ## Force rebuild container image (no cache)
39+
@podman build --no-cache -f Containerfile -t $(CONTAINER_IMAGE_NAME) .
40+
41+
.PHONY: container-clean
42+
container-clean: ## Remove container image
43+
@podman rmi $(CONTAINER_IMAGE_NAME) 2>/dev/null || true
1944

2045
##############################
2146
# RELEASE
2247
##############################
2348
.PHONY: release-snapshot
24-
release-snapshot: docker-build-image # Builds the project in snapshot mode and releases it [This is used for testing releases]
25-
@docker run --rm -v $(PWD):/app $(DOCKER_IMAGE_NAME) goreleaser release --snapshot --clean
49+
release-snapshot: container-build-image ## Build and release snapshot (testing)
50+
@$(CONTAINER_RUN) goreleaser release --snapshot --clean
2651

27-
.PHONY: build-snapshot # Builds the project in snapshot mode [This is used for testing releases]
28-
build-snapshot: docker-build-image
29-
@docker run --rm -v $(PWD):/app $(DOCKER_IMAGE_NAME) goreleaser build --snapshot --clean
52+
.PHONY: build-snapshot
53+
build-snapshot: container-build-image ## Build snapshot without release
54+
@$(CONTAINER_RUN) goreleaser build --snapshot --clean
3055

3156
##############################
3257
# BUILD
3358
##############################
3459
.PHONY: build
35-
build: docker-build-image
36-
@docker run --rm -v $(PWD):/app $(DOCKER_IMAGE_NAME) \
37-
env GOOS=$(BUILD_GOOS) GOARCH=$(BUILD_GOARCH) go build -o $(APP_NAME) ./cmd/$(APP_NAME)
60+
build: container-build-image ## Build the application binary
61+
@$(CONTAINER_RUN) env GOOS=$(BUILD_GOOS) GOARCH=$(BUILD_GOARCH) \
62+
go build -o $(APP_NAME) ./cmd/$(APP_NAME)
63+
64+
.PHONY: build-local
65+
build-local: ## Build locally without container (requires Go installed)
66+
@go build -o $(APP_NAME) ./cmd/$(APP_NAME)
3867

3968
.PHONY: run
40-
run: build
41-
./$(APP_NAME)
69+
run: build ## Build and run the application
70+
@./$(APP_NAME)
71+
72+
.PHONY: clean
73+
clean: ## Clean build artifacts
74+
@rm -f $(APP_NAME)
75+
@rm -rf dist/
4276

4377
##############################
44-
# HELPER
78+
# QUALITY
4579
##############################
4680
.PHONY: quality
47-
quality: docker-build-image
48-
@docker run --rm -v $(PWD):/app $(DOCKER_IMAGE_NAME) golangci-lint run
81+
quality: container-build-image ## Run linter checks
82+
@$(CONTAINER_RUN) golangci-lint run
83+
84+
.PHONY: quality-local
85+
quality-local: ## Run linter locally (requires golangci-lint installed)
86+
@golangci-lint run
87+
88+
.PHONY: test
89+
test: ## Run tests
90+
@go test -v ./...
91+
92+
.PHONY: test-coverage
93+
test-coverage: ## Run tests with coverage
94+
@go test -v -coverprofile=coverage.out ./...
95+
@go tool cover -html=coverage.out -o coverage.html
96+
97+
##############################
98+
# SECURITY
99+
##############################
100+
.PHONY: security
101+
security: security-vuln security-scan ## Run all security checks
102+
103+
.PHONY: security-vuln
104+
security-vuln: container-build-image ## Check for known vulnerabilities
105+
@$(CONTAINER_RUN) govulncheck ./...
106+
107+
.PHONY: security-vuln-local
108+
security-vuln-local: ## Check vulnerabilities locally (requires govulncheck)
109+
@govulncheck ./...
110+
111+
.PHONY: security-scan
112+
security-scan: container-build-image ## Run security scanner
113+
@$(CONTAINER_RUN) gosec ./...
114+
115+
.PHONY: security-scan-local
116+
security-scan-local: ## Run security scanner locally (requires gosec)
117+
@gosec ./...
49118

50119
##############################
51120
# WEBSITE
52121
##############################
53122
.PHONY: build-site
54-
build-site:
123+
build-site: ## Build the static website
55124
@node build.js
56125

57126
.PHONY: serve-site
58-
serve-site:
127+
serve-site: ## Serve the website locally
59128
@npx http-server docs -p 3000
60129

61130
.PHONY: dev-site
62-
dev-site: build-site serve-site
131+
dev-site: build-site serve-site ## Build and serve the website
132+
133+
##############################
134+
# UTILITY
135+
##############################
136+
.PHONY: install
137+
install: build-local ## Install binary to $GOPATH/bin
138+
@go install ./cmd/$(APP_NAME)
139+
140+
.PHONY: deps
141+
deps: ## Download and tidy dependencies
142+
@go mod download
143+
@go mod tidy
144+
145+
.PHONY: deps-update
146+
deps-update: ## Update all dependencies
147+
@go get -u ./...
148+
@go mod tidy

go.mod

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
module bbrew
22

3-
go 1.24
3+
go 1.25
44

55
require (
66
github.com/gdamore/tcell/v2 v2.8.1
77
github.com/rivo/tview v0.0.0-20250625164341-a4a78f1e05cb
8-
golang.org/x/text v0.26.0
8+
golang.org/x/text v0.27.0
99
)
1010

1111
require (
12+
github.com/adrg/xdg v0.5.3 // indirect
1213
github.com/gdamore/encoding v1.0.1 // indirect
1314
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
1415
github.com/mattn/go-runewidth v0.0.16 // indirect
1516
github.com/rivo/uniseg v0.4.7 // indirect
16-
golang.org/x/sys v0.33.0 // indirect
17-
golang.org/x/term v0.32.0 // indirect
17+
golang.org/x/sys v0.34.0 // indirect
18+
golang.org/x/term v0.33.0 // indirect
1819
)

go.sum

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,14 @@
1-
github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko=
2-
github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg=
1+
github.com/adrg/xdg v0.5.3 h1:xRnxJXne7+oWDatRhR1JLnvuccuIeCoBu2rtuLqQB78=
2+
github.com/adrg/xdg v0.5.3/go.mod h1:nlTsY+NNiCBGCK2tpm09vRqfVzrc2fLmXGpBLF0zlTQ=
33
github.com/gdamore/encoding v1.0.1 h1:YzKZckdBL6jVt2Gc+5p82qhrGiqMdG/eNs6Wy0u3Uhw=
44
github.com/gdamore/encoding v1.0.1/go.mod h1:0Z0cMFinngz9kS1QfMjCP8TY7em3bZYeeklsSDPivEo=
5-
github.com/gdamore/tcell/v2 v2.7.1 h1:TiCcmpWHiAU7F0rA2I3S2Y4mmLmO9KHxJ7E1QhYzQbc=
6-
github.com/gdamore/tcell/v2 v2.7.1/go.mod h1:dSXtXTSK0VsW1biw65DZLZ2NKr7j0qP/0J7ONmsraWg=
75
github.com/gdamore/tcell/v2 v2.8.1 h1:KPNxyqclpWpWQlPLx6Xui1pMk8S+7+R37h3g07997NU=
86
github.com/gdamore/tcell/v2 v2.8.1/go.mod h1:bj8ori1BG3OYMjmb3IklZVWfZUJ1UBQt9JXrOCOhGWw=
97
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
108
github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY=
119
github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
12-
github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U=
13-
github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
1410
github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
1511
github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
16-
github.com/rivo/tview v0.0.0-20241227133733-17b7edb88c57 h1:LmsF7Fk5jyEDhJk0fYIqdWNuTxSyid2W42A0L2YWjGE=
17-
github.com/rivo/tview v0.0.0-20241227133733-17b7edb88c57/go.mod h1:02iFIz7K/A9jGCvrizLPvoqr4cEIx7q54RH5Qudkrss=
1812
github.com/rivo/tview v0.0.0-20250625164341-a4a78f1e05cb h1:n7UJ8X9UnrTZBYXnd1kAIBc067SWyuPIrsocjketYW8=
1913
github.com/rivo/tview v0.0.0-20250625164341-a4a78f1e05cb/go.mod h1:cSfIYfhpSGCjp3r/ECJb+GKS7cGJnqV8vfjQPwoXyfY=
2014
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
@@ -55,36 +49,33 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc
5549
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
5650
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
5751
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
58-
golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y=
5952
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
6053
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
6154
golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
62-
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
63-
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
55+
golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA=
56+
golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
6457
golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=
6558
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
6659
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
6760
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
6861
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
6962
golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
70-
golang.org/x/term v0.17.0 h1:mkTF7LCd6WGJNL3K1Ad7kwxNfYAW6a8a8QqtMblp/4U=
7163
golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
7264
golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
7365
golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek=
74-
golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg=
75-
golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ=
66+
golang.org/x/term v0.33.0 h1:NuFncQrRcaRvVmgRkvM3j/F00gWIAlcmlB8ACEKmGIg=
67+
golang.org/x/term v0.33.0/go.mod h1:s18+ql9tYWp1IfpV9DmCtQDDSRBUjKaw9M1eAv5UeF0=
7668
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
7769
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
7870
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
7971
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
8072
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
8173
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
82-
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
8374
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
8475
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
8576
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
86-
golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M=
87-
golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA=
77+
golang.org/x/text v0.27.0 h1:4fGWRpyh641NLlecmyl4LOe6yDdfaYNrGb2zdfo4JV4=
78+
golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU=
8879
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
8980
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
9081
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=

0 commit comments

Comments
 (0)