-
Notifications
You must be signed in to change notification settings - Fork 121
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1080 from lightninglabs/go-version-scripts-lnd
linter: copy over Go version check scripts from LND
- Loading branch information
Showing
5 changed files
with
141 additions
and
118 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
#!/bin/bash | ||
|
||
# Function to check if the Dockerfile contains only the specified Go version. | ||
check_go_version() { | ||
local dockerfile="$1" | ||
local required_go_version="$2" | ||
|
||
# Use grep to find lines with 'FROM golang:' | ||
local go_lines=$(grep -i '^FROM golang:' "$dockerfile") | ||
|
||
# Check if all lines have the required Go version. | ||
if [ -z "$go_lines" ]; then | ||
# No Go version found in the file. Skip the check. | ||
return | ||
elif echo "$go_lines" | grep -q -v "$required_go_version"; then | ||
echo "$go_lines" | ||
echo "Error: $dockerfile does not use Go version $required_go_version exclusively." | ||
exit 1 | ||
else | ||
echo "$dockerfile is using Go version $required_go_version." | ||
fi | ||
} | ||
|
||
# Check if the target Go version argument is provided. | ||
if [ $# -eq 0 ]; then | ||
echo "Usage: $0 <target_go_version>" | ||
exit 1 | ||
fi | ||
|
||
target_go_version="$1" | ||
|
||
# File paths to be excluded from the check. | ||
exception_list=( | ||
# Exclude the tools Dockerfile as otherwise the linter may need to be | ||
# considered every time the Go version is updated. | ||
"./tools/Dockerfile" | ||
) | ||
|
||
# is_exception checks if a file is in the exception list. | ||
is_exception() { | ||
local file="$1" | ||
for exception in "${exception_list[@]}"; do | ||
if [ "$file" == "$exception" ]; then | ||
return 0 | ||
fi | ||
done | ||
return 1 | ||
} | ||
|
||
# Search for Dockerfiles in the current directory and its subdirectories. | ||
dockerfiles=$(find . -type f -name "*.Dockerfile" -o -name "Dockerfile") | ||
|
||
# Check each Dockerfile | ||
for file in $dockerfiles; do | ||
# Skip the file if it is in the exception list. | ||
if is_exception "$file"; then | ||
echo "Skipping $file" | ||
continue | ||
fi | ||
|
||
check_go_version "$file" "$target_go_version" | ||
done | ||
|
||
echo "All Dockerfiles pass the Go version check for Go version $target_go_version." |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
#!/bin/bash | ||
|
||
# Function to check if the YAML file contains the specified Go version after | ||
# field 'go:'. | ||
check_go_version_yaml() { | ||
local yamlfile="$1" | ||
local required_go_version="$2" | ||
|
||
# Use grep to find lines with 'go:'. The grep exist status is ignored. | ||
local go_lines=$(grep -i '^\s*go:\s*"[0-9]\+\.[0-9]\+\(\.[0-9]\+\)\?"' "$yamlfile" || true) | ||
|
||
# Check if any lines specify the Go version. | ||
if [ -n "$go_lines" ]; then | ||
# Extract the Go version from the file's lines. Example matching strings: | ||
# go: "1.21.0" | ||
local extracted_go_version=$(echo "$go_lines" | sed -n 's/.*go: "\([^"]*\)".*/\1/p') | ||
|
||
# Check if the extracted Go version matches the required version. | ||
if [ "$extracted_go_version" != "$required_go_version" ]; then | ||
echo "Error finding pattern 'go:': $yamlfile specifies Go version '$extracted_go_version', but required version is '$required_go_version'." | ||
exit 1 | ||
else | ||
echo "$yamlfile specifies Go version $required_go_version." | ||
fi | ||
fi | ||
} | ||
|
||
# Function to check if the YAML file contains the specified Go version after | ||
# environment variable 'GO_VERSION:'. | ||
check_go_version_env_variable() { | ||
local yamlfile="$1" | ||
local required_go_version="$2" | ||
|
||
# Use grep to find lines with 'GO_VERSION:'. The grep exist status is | ||
# ignored. | ||
local go_lines=$(grep -i 'GO_VERSION:' "$yamlfile" || true) | ||
|
||
# Check if any lines specify the Go version. | ||
if [ -n "$go_lines" ]; then | ||
# Extract the Go version from the file's lines. Example matching strings: | ||
# GO_VERSION: "1.21.0" | ||
# GO_VERSION: '1.21.0' | ||
# GO_VERSION: 1.21.0 | ||
# GO_VERSION:1.21.0 | ||
# GO_VERSION:1.21.0 | ||
local extracted_go_version=$(echo "$go_lines" | sed -n 's/.*GO_VERSION[: ]*["'\'']*\([0-9.]*\).*/\1/p') | ||
|
||
# Check if the extracted Go version matches the required version. | ||
if [ "$extracted_go_version" != "$required_go_version" ]; then | ||
echo "Error finding pattern 'GO_VERSION:': $yamlfile specifies Go version '$extracted_go_version', but required version is '$required_go_version'." | ||
exit 1 | ||
else | ||
echo "$yamlfile specifies Go version $required_go_version." | ||
fi | ||
fi | ||
} | ||
|
||
# Check if the target Go version argument is provided. | ||
if [ $# -eq 0 ]; then | ||
echo "Usage: $0 <target_go_version>" | ||
exit 1 | ||
fi | ||
|
||
target_go_version="$1" | ||
|
||
# Search for YAML files in the current directory and its subdirectories. | ||
yaml_files=$(find . -type f \( -name "*.yaml" -o -name "*.yml" \)) | ||
|
||
# Check each YAML file. | ||
for file in $yaml_files; do | ||
check_go_version_yaml "$file" "$target_go_version" | ||
check_go_version_env_variable "$file" "$target_go_version" | ||
done | ||
|
||
echo "All YAML files pass the Go version check for Go version $target_go_version." |
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.