-
Notifications
You must be signed in to change notification settings - Fork 265
Remove GPL dependencies via golangci-lint binary distribution #15050
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -840,10 +840,26 @@ jobs: | |
| fi | ||
| echo "✅ Go formatting check passed" >> $GITHUB_STEP_SUMMARY | ||
|
|
||
| # Install only golangci-lint (the only tool needed for linting) | ||
| # Other tools (actionlint, gosec, gopls, govulncheck) are not used in this job | ||
| # Install golangci-lint binary (avoiding GPL dependencies) | ||
| # Downloads pre-built binary from GitHub releases instead of using go install | ||
| - name: Install golangci-lint | ||
| run: go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.7.2 | ||
| run: | | ||
| GOLANGCI_LINT_VERSION="v2.8.0" | ||
| GOOS=$(go env GOOS) | ||
| GOARCH=$(go env GOARCH) | ||
| GOPATH=$(go env GOPATH) | ||
| BINARY_NAME="golangci-lint" | ||
|
|
||
| echo "Installing golangci-lint $GOLANGCI_LINT_VERSION for $GOOS/$GOARCH..." | ||
| DOWNLOAD_URL="https://github.com/golangci/golangci-lint/releases/download/$GOLANGCI_LINT_VERSION/golangci-lint-${GOLANGCI_LINT_VERSION#v}-$GOOS-$GOARCH.tar.gz" | ||
|
|
||
| curl -sSL "$DOWNLOAD_URL" | tar -xz -C /tmp | ||
| mkdir -p "$GOPATH/bin" | ||
| mv /tmp/golangci-lint-*/$BINARY_NAME "$GOPATH/bin/$BINARY_NAME" | ||
| chmod +x "$GOPATH/bin/$BINARY_NAME" | ||
|
Comment on lines
+846
to
+859
|
||
|
|
||
| echo "✓ golangci-lint $GOLANGCI_LINT_VERSION installed" | ||
| "$GOPATH/bin/$BINARY_NAME" version | ||
|
|
||
| # Run golangci-lint via Makefile for consistency | ||
| # Uses incremental linting on PRs for faster CI (50-75% speedup) | ||
|
|
||
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -362,6 +362,40 @@ tools: ## Install build-time tools from tools.go | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| @grep _ tools.go | awk -F'"' '{print $$2}' | xargs -tI % go install % | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| @echo "✓ Tools installed successfully" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| # Install golangci-lint binary (avoiding GPL dependencies in go.mod) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| # Downloads pre-built binary from GitHub releases | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| .PHONY: install-golangci-lint | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| install-golangci-lint: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| @echo "Installing golangci-lint binary..." | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| @GOLANGCI_LINT_VERSION="v2.8.0"; \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GOPATH=$$(go env GOPATH); \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GOOS=$$(go env GOOS); \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GOARCH=$$(go env GOARCH); \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| BINARY_NAME="golangci-lint"; \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if [ "$$GOOS" = "windows" ]; then \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| BINARY_NAME="golangci-lint.exe"; \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| fi; \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if [ -x "$$GOPATH/bin/$$BINARY_NAME" ]; then \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| INSTALLED_VERSION=$$("$$GOPATH/bin/$$BINARY_NAME" version --short 2>/dev/null || echo "unknown"); \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if [ "$$INSTALLED_VERSION" = "$${GOLANGCI_LINT_VERSION#v}" ]; then \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "✓ golangci-lint $$GOLANGCI_LINT_VERSION already installed"; \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| exit 0; \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| fi; \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| fi; \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| DOWNLOAD_URL="https://github.com/golangci/golangci-lint/releases/download/$$GOLANGCI_LINT_VERSION/golangci-lint-$${GOLANGCI_LINT_VERSION#v}-$$GOOS-$$GOARCH.tar.gz"; \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| TEMP_DIR=$$(mktemp -d); \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| trap "rm -rf $$TEMP_DIR" EXIT; \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "Downloading golangci-lint $$GOLANGCI_LINT_VERSION for $$GOOS/$$GOARCH..."; \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if curl -sSL "$$DOWNLOAD_URL" | tar -xz -C "$$TEMP_DIR"; then \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| mkdir -p "$$GOPATH/bin"; \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| mv "$$TEMP_DIR"/golangci-lint-*/$$BINARY_NAME "$$GOPATH/bin/$$BINARY_NAME"; \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| chmod +x "$$GOPATH/bin/$$BINARY_NAME"; \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "✓ golangci-lint $$GOLANGCI_LINT_VERSION installed to $$GOPATH/bin/$$BINARY_NAME"; \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| else \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "Error: Failed to download golangci-lint from $$DOWNLOAD_URL"; \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+385
to
+395
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| DOWNLOAD_URL="https://github.com/golangci/golangci-lint/releases/download/$$GOLANGCI_LINT_VERSION/golangci-lint-$${GOLANGCI_LINT_VERSION#v}-$$GOOS-$$GOARCH.tar.gz"; \ | |
| TEMP_DIR=$$(mktemp -d); \ | |
| trap "rm -rf $$TEMP_DIR" EXIT; \ | |
| echo "Downloading golangci-lint $$GOLANGCI_LINT_VERSION for $$GOOS/$$GOARCH..."; \ | |
| if curl -sSL "$$DOWNLOAD_URL" | tar -xz -C "$$TEMP_DIR"; then \ | |
| mkdir -p "$$GOPATH/bin"; \ | |
| mv "$$TEMP_DIR"/golangci-lint-*/$$BINARY_NAME "$$GOPATH/bin/$$BINARY_NAME"; \ | |
| chmod +x "$$GOPATH/bin/$$BINARY_NAME"; \ | |
| echo "✓ golangci-lint $$GOLANGCI_LINT_VERSION installed to $$GOPATH/bin/$$BINARY_NAME"; \ | |
| else \ | |
| echo "Error: Failed to download golangci-lint from $$DOWNLOAD_URL"; \ | |
| TARBALL_NAME="golangci-lint-$${GOLANGCI_LINT_VERSION#v}-$$GOOS-$$GOARCH.tar.gz"; \ | |
| DOWNLOAD_URL="https://github.com/golangci/golangci-lint/releases/download/$$GOLANGCI_LINT_VERSION/$$TARBALL_NAME"; \ | |
| CHECKSUMS_URL="https://github.com/golangci/golangci-lint/releases/download/$$GOLANGCI_LINT_VERSION/golangci-lint-$${GOLANGCI_LINT_VERSION#v}-checksums.txt"; \ | |
| TEMP_DIR=$$(mktemp -d); \ | |
| trap "rm -rf $$TEMP_DIR" EXIT; \ | |
| echo "Downloading golangci-lint $$GOLANGCI_LINT_VERSION for $$GOOS/$$GOARCH..."; \ | |
| if ! curl -sSL -o "$$TEMP_DIR/$$TARBALL_NAME" "$$DOWNLOAD_URL"; then \ | |
| echo "Error: Failed to download golangci-lint from $$DOWNLOAD_URL"; \ | |
| exit 1; \ | |
| fi; \ | |
| echo "Downloading checksums from $$CHECKSUMS_URL..."; \ | |
| if ! curl -sSL -o "$$TEMP_DIR/checksums.txt" "$$CHECKSUMS_URL"; then \ | |
| echo "Error: Failed to download checksums from $$CHECKSUMS_URL"; \ | |
| exit 1; \ | |
| fi; \ | |
| EXPECTED_CHECKSUM=$$(grep " $$TARBALL_NAME$$" "$$TEMP_DIR/checksums.txt" | awk '{print $$1}'); \ | |
| if [ -z "$$EXPECTED_CHECKSUM" ]; then \ | |
| echo "Error: Checksum for $$TARBALL_NAME not found in checksums file"; \ | |
| exit 1; \ | |
| fi; \ | |
| if command -v sha256sum >/dev/null 2>&1; then \ | |
| ACTUAL_CHECKSUM=$$(sha256sum "$$TEMP_DIR/$$TARBALL_NAME" | awk '{print $$1}'); \ | |
| elif command -v shasum >/dev/null 2>&1; then \ | |
| ACTUAL_CHECKSUM=$$(shasum -a 256 "$$TEMP_DIR/$$TARBALL_NAME" | awk '{print $$1}'); \ | |
| else \ | |
| echo "Error: Neither sha256sum nor shasum is available to verify checksums"; \ | |
| exit 1; \ | |
| fi; \ | |
| if [ "$$EXPECTED_CHECKSUM" != "$$ACTUAL_CHECKSUM" ]; then \ | |
| echo "Error: Checksum verification failed for $$TARBALL_NAME"; \ | |
| echo "Expected: $$EXPECTED_CHECKSUM"; \ | |
| echo "Actual: $$ACTUAL_CHECKSUM"; \ | |
| exit 1; \ | |
| fi; \ | |
| if tar -xz -C "$$TEMP_DIR" -f "$$TEMP_DIR/$$TARBALL_NAME"; then \ | |
| mkdir -p "$$GOPATH/bin"; \ | |
| mv "$$TEMP_DIR"/golangci-lint-*/$$BINARY_NAME "$$GOPATH/bin/$$BINARY_NAME"; \ | |
| chmod +x "$$GOPATH/bin/$$BINARY_NAME"; \ | |
| echo "✓ golangci-lint $$GOLANGCI_LINT_VERSION installed to $$GOPATH/bin/$$BINARY_NAME"; \ | |
| else \ | |
| echo "Error: Failed to extract $$TEMP_DIR/$$TARBALL_NAME"; \ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This installs golangci-lint by downloading and extracting an archive to /tmp without integrity verification or cleanup. For better supply-chain safety and to avoid /tmp collisions, download into a unique temp dir, verify checksums/signatures, then move the binary into place (or reuse the Makefile install target).