-
Notifications
You must be signed in to change notification settings - Fork 9.9k
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
Minimal changes to enable a Go workspace #19423
base: main
Are you sure you want to change the base?
Changes from all commits
198bd69
8ffaff1
e7560fa
4e842b0
15fe747
eb81e5b
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 |
---|---|---|
@@ -0,0 +1,21 @@ | ||
// This is a generated file. Do not edit directly. | ||
|
||
go 1.23 | ||
|
||
toolchain go1.23.6 | ||
|
||
use ( | ||
. | ||
./api | ||
./client/internal/v2 | ||
./client/pkg | ||
./client/v3 | ||
./etcdctl | ||
./etcdutl | ||
./pkg | ||
./server | ||
./tests | ||
./tools/mod | ||
./tools/rw-heatmaps | ||
./tools/testgrid-analysis | ||
) |
Large diffs are not rendered by default.
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -483,7 +483,7 @@ function bom_pass { | |
run cp go.sum go.sum.tmp || return 2 | ||
run cp go.mod go.mod.tmp || return 2 | ||
|
||
output=$(GOFLAGS=-mod=mod run_go_tool github.com/appscodelabs/license-bill-of-materials \ | ||
output=$(run_go_tool github.com/appscodelabs/license-bill-of-materials \ | ||
--override-file ./bill-of-materials.override.json \ | ||
"${modules[@]}") | ||
code="$?" | ||
|
@@ -508,7 +508,7 @@ function bom_pass { | |
|
||
function dump_deps_of_module() { | ||
local module | ||
if ! module=$(run go list -m); then | ||
if ! module=$(run go mod edit -json | jq -r .Module.Path); then | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Could we merge it independent to migration to workspaces as a separate PR? Having less changes in the main PR will increase confidence during review. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Great idea. Thanks, Marek 🙇. I'll break down this pull request even further, as most of the commits can coexist with the current codebase. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I opened #19463. |
||
return 255 | ||
fi | ||
run go mod edit -json | jq -r '.Require[] | .Path+","+.Version+","+if .Indirect then " (indirect)" else "" end+",'"${module}"'"' | ||
|
@@ -617,6 +617,17 @@ function genproto_pass { | |
"${ETCD_ROOT_DIR}/scripts/verify_genproto.sh" | ||
} | ||
|
||
function go_workspace_pass { | ||
log_callout "Ensuring go workspace is in sync." | ||
|
||
run go mod download | ||
if [ -n "$(git status --porcelain go.work.sum)" ]; then | ||
log_error "Go workspace not in sync." | ||
log_warning "Suggestion: run \"make fix\" to address the issue." | ||
return 255 | ||
fi | ||
} | ||
|
||
########### MAIN ############################################################### | ||
|
||
function run_pass { | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
#!/usr/bin/env bash | ||
# | ||
# Copyright 2024 The etcd Authors | ||
# | ||
# Licensed under the Apache License, Version 2.0 (the "License"); | ||
# you may not use this file except in compliance with the License. | ||
# You may obtain a copy of the License at | ||
# | ||
# http://www.apache.org/licenses/LICENSE-2.0 | ||
# | ||
# Unless required by applicable law or agreed to in writing, software | ||
# distributed under the License is distributed on an "AS IS" BASIS, | ||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
# See the License for the specific language governing permissions and | ||
# limitations under the License. | ||
# | ||
# Based on k/k scripts/update-go-workspace.sh: | ||
# https://github.com/kubernetes/kubernetes/blob/e2b96b25661849775dedf441b2f5c555392caa84/hack/update-go-workspace.sh | ||
|
||
# This script generates go.work so that it includes all Go packages | ||
# in this repo, with a few exceptions. | ||
|
||
set -euo pipefail | ||
|
||
source ./scripts/test_lib.sh | ||
|
||
# Avoid issues and remove the workspace files. | ||
rm -f go.work go.work.sum | ||
|
||
# Generate the workspace. | ||
go work init | ||
sed -i -e '1i\// This is a generated file. Do not edit directly.\n' go.work | ||
|
||
git ls-files -z ':(glob)**/go.mod' \ | ||
| xargs -0 -n1 dirname -z \ | ||
| xargs -0 -n1 go work edit -use | ||
|
||
go work edit -toolchain "go$(cat .go-version)" | ||
go work edit -go "$(go mod edit -json | jq -r .Go)" | ||
|
||
# generate go.work.sum | ||
go mod download |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -14,7 +14,7 @@ function bom_fixlet { | |
# shellcheck disable=SC2207 | ||
modules=($(modules_for_bom)) | ||
|
||
if GOFLAGS=-mod=mod run_go_tool "github.com/appscodelabs/license-bill-of-materials" \ | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes, I think so. This should predate Go 1. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ah, never mind. Actually, I believe, due to the note in |
||
if run_go_tool "github.com/appscodelabs/license-bill-of-materials" \ | ||
--override-file ./bill-of-materials.override.json \ | ||
"${modules[@]}" > ./bill-of-materials.json.tmp; then | ||
cp ./bill-of-materials.json.tmp ./bill-of-materials.json | ||
|
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.
When I run the two commands now I get different results, is that different when we enable workspaces?
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 observation led me down a rabbit hole. It took me a while to review why running
go list—m all
differs from the output of doinggo mod edit—json
.It made me realize I had an issue with my
jq
expression. So, I revised the expression. The amended version is:.Require[] | select(.Indirect | not) | .Path
. And I wrote the following to double-check that the output matches:So, there are no differences.
My rabbit hole, investigation, solution, and verification may have been an overkill 😅, as in the context of the original function, it filters the output only to keep
go.etcd.io/etcd/*/v{2,3}
modules (to do the version bump), which are always in thego.mod
. But thanks for the good catch :) I'll update the code and open a pull request targeting this change, as it can coexist with the current code without the workspace.