-
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.
Merge pull request #18017 from MadhavJivrajani/go-version-setup-35
[release-3.5] Setup a way to consistently manage go versions across scripts and go.mods
- Loading branch information
Showing
17 changed files
with
162 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
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