-
Notifications
You must be signed in to change notification settings - Fork 9.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
.*: sync go toolchain version and add ability to verify versions
This commit adds a script to sync the version present in .go-version across all go.mod files as the toolchain directive. As part of that, this commit also modifies go.mod files that did not have synced toolchain directives. Additionally, this also adds a script to verify all toolchain and go directives against the version present in .go-version as follows: (1) The go directive <= version in .go-version (2) The toolchain directive == version in .go-version This script runs as part of the `make verify` target, making it run as a presbumit by default. Signed-off-by: Madhav Jivrajani <madhav.jiv@gmail.com>
- Loading branch information
1 parent
297130d
commit 4740315
Showing
16 changed files
with
138 additions
and
0 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
--- | ||
name: Static Analysis | ||
on: [push, pull_request] | ||
permissions: read-all | ||
jobs: | ||
run: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 | ||
- id: goversion | ||
run: echo "goversion=$(cat .go-version)" >> "$GITHUB_OUTPUT" | ||
- uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7 # v5.0.1 | ||
with: | ||
go-version: ${{ steps.goversion.outputs.goversion }} | ||
- run: | | ||
set -euo pipefail | ||
make verify | ||
- run: | | ||
set -euo pipefail | ||
make fix | ||
DIFF=$(git status --porcelain) | ||
if [ -n "$DIFF" ]; then | ||
echo "These files were modified:" | ||
echo | ||
echo "$DIFF" | ||
echo | ||
exit 1 | ||
fi |
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
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
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
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
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
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,14 @@ | ||
#!/usr/bin/env bash | ||
|
||
# This script looks at the version present in the .go-version file and treats | ||
# that to be the value of the toolchain directive that go should use. It then | ||
# updates the toolchain directives of all go.mod files to reflect this version. | ||
# | ||
# We do this to ensure that .go-version acts as the source of truth for go versions. | ||
|
||
set -euo pipefail | ||
|
||
source ./scripts/test_lib.sh | ||
|
||
TARGET_GO_VERSION="${TARGET_GO_VERSION:-"$(cat "${ETCD_ROOT_DIR}/.go-version")"}" | ||
find . -name 'go.mod' -exec go mod edit -toolchain=go"${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,53 @@ | ||
#!/usr/bin/env bash | ||
|
||
# This script verifies that the value of the toolchain directive in the | ||
# go.mod files always match that of the .go-version file to ensure that | ||
# we accidentally don't test and release with differing versions of Go. | ||
|
||
set -euo pipefail | ||
|
||
source ./scripts/test_lib.sh | ||
|
||
target_go_version="${target_go_version:-"$(cat "${ETCD_ROOT_DIR}/.go-version")"}" | ||
log_info "expected go toolchain directive: go${target_go_version}" | ||
log_info | ||
|
||
toolchain_out_of_sync="false" | ||
go_line_violation="false" | ||
|
||
# verify_go_versions takes a go.mod filepath as an argument | ||
# and checks if: | ||
# (1) go directive <= version in .go-version | ||
# (2) toolchain directive == version in .go-version | ||
function verify_go_versions() { | ||
# shellcheck disable=SC2086 | ||
toolchain_version="$(go mod edit -json $1 | jq -r .Toolchain)" | ||
# shellcheck disable=SC2086 | ||
go_line_version="$(go mod edit -json $1 | jq -r .Go)" | ||
if [[ "go${target_go_version}" != "${toolchain_version}" ]]; then | ||
log_error "go toolchain directive out of sync for $1, got: ${toolchain_version}" | ||
toolchain_out_of_sync="true" | ||
fi | ||
if ! printf '%s\n' "${go_line_version}" "${target_go_version}" | sort --check=silent --version-sort; then | ||
log_error "go directive in $1 is greater than maximum allowed: go${target_go_version}" | ||
go_line_violation="true" | ||
fi | ||
} | ||
|
||
while read -r mod; do | ||
verify_go_versions "${mod}"; | ||
done < <(find . -name 'go.mod') | ||
|
||
if [[ "${toolchain_out_of_sync}" == "true" ]]; then | ||
log_error | ||
log_error "Please run scripts/sync_go_toolchain_directive.sh or update .go-version to rectify this error" | ||
fi | ||
|
||
if [[ "${go_line_violation}" == "true" ]]; then | ||
log_error | ||
log_error "Please update .go-version to rectify this error, any go directive should be <= .go-version" | ||
fi | ||
|
||
if [[ "${go_line_violation}" == "true" ]] || [[ "${toolchain_out_of_sync}" == "true" ]]; then | ||
exit 1 | ||
fi |
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
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