@@ -40,81 +40,72 @@ func main() {
40
40
// Remove old k8s.io/* replace lines, rewrite + tidy so they’re really gone.
41
41
// Parse again, unify staging modules in require + replace to the new patch version, rewrite + tidy.
42
42
func fixGoMod (goModPath string ) error {
43
- // parse & remove old lines, write, go mod tidy
44
- mf1 , err := parseMod (goModPath )
43
+ mf , err := parseMod (goModPath )
45
44
if err != nil {
46
45
return err
47
46
}
48
- pruneK8sReplaces (mf1 )
49
- mf1 .SortBlocks ()
50
- mf1 .Cleanup ()
47
+ pruneK8sReplaces (mf )
48
+ mf .SortBlocks ()
49
+ mf .Cleanup ()
51
50
52
- if err := writeModFile (mf1 , goModPath ); err != nil {
51
+ if err := writeModFile (mf , goModPath ); err != nil {
53
52
return err
54
53
}
55
- if err := runCmd ("go" , "mod" , "tidy" ); err != nil {
56
- return fmt .Errorf ("go mod tidy failed: %w" , err )
57
- }
58
- //parse again, unify everything to derived patch version in both require + replace blocks, write, go mod tidy
59
- mf2 , err := parseMod (goModPath )
54
+
55
+ mf , err = parseMod (goModPath )
60
56
if err != nil {
61
57
return err
62
58
}
63
59
64
- k8sVer := findKubernetesVersion (mf2 )
60
+ k8sVer := findKubernetesVersion (mf )
65
61
if k8sVer == "" {
66
62
return fmt .Errorf ("did not find k8s.io/kubernetes in require block" )
67
63
}
68
- if debug {
69
- fmt .Printf ("Found k8s.io/kubernetes version: %s\n " , k8sVer )
70
- }
71
64
72
65
published := toPublishedVersion (k8sVer )
73
66
if published == "" {
74
67
return fmt .Errorf ("cannot derive staging version from %s" , k8sVer )
75
68
}
76
- if debug {
77
- fmt .Printf ("Unifying staging modules to: %s (from %s)\n " , published , k8sVer )
78
- }
79
69
80
- // forcibly unify the REQUIRE items for all staging modules
81
- forceRequireStaging (mf2 , published )
70
+ forceRequireStaging (mf , published )
82
71
83
- // discover all k8s.io/* modules in the graph and unify them with new replace lines
84
72
listOut , errOut , err := runGoList ()
85
73
if err != nil {
86
74
return fmt .Errorf ("go list: %v\n Stderr:\n %s" , err , errOut )
87
75
}
88
76
stagingPins := discoverPinsAlways (listOut , published )
89
- applyReplacements (mf2 , stagingPins )
77
+ applyReplacements (mf , stagingPins )
90
78
91
- // also ensure we have a replace for k8s.io/kubernetes => same version
92
- ensureKubernetesReplace (mf2 , k8sVer )
79
+ ensureKubernetesReplace (mf , k8sVer )
93
80
94
- mf2 .SortBlocks ()
95
- mf2 .Cleanup ()
81
+ mf .SortBlocks ()
82
+ mf .Cleanup ()
96
83
97
- if err := writeModFile (mf2 , goModPath ); err != nil {
84
+ if err := writeModFile (mf , goModPath ); err != nil {
98
85
return err
99
86
}
100
- if err := runCmd ("go" , "mod" , "tidy" ); err != nil {
101
- return fmt .Errorf ("final tidy failed: %w" , err )
87
+
88
+ goVersion , err := getGoVersion (goModPath )
89
+ if err != nil {
90
+ return fmt .Errorf ("failed to determine Go version: %w" , err )
102
91
}
103
- if err := runCmd ("go" , "mod" , "download" , "k8s.io/kubernetes" ); err != nil {
104
- return fmt .Errorf ("final: go mod download k8s.io/kubernetes failed: %w" , err )
92
+
93
+ if err := runCmd ("go" , "mod" , "tidy" , "-go=" + goVersion ); err != nil {
94
+ return fmt .Errorf ("final tidy failed: %w" , err )
105
95
}
106
96
107
- // final check
108
- finalOut , err := exec .Command ("go" , "list" , "-m" , "all" ).Output ()
97
+ return nil
98
+ }
99
+
100
+ func getGoVersion (goModPath string ) (string , error ) {
101
+ mf , err := parseMod (goModPath )
109
102
if err != nil {
110
- return fmt . Errorf ( "running final go list: %w " , err )
103
+ return " " , err
111
104
}
112
- if bytes .Contains (finalOut , []byte ("v0.0.0" )) {
113
- fmt .Println ("WARNING: Some modules remain at v0.0.0, possibly no valid tags." )
114
- } else {
115
- fmt .Println ("Success: staging modules pinned to" , published )
105
+ if mf .Go == nil {
106
+ return "" , fmt .Errorf ("go version not found in go.mod" )
116
107
}
117
- return nil
108
+ return mf . Go . Version , nil
118
109
}
119
110
120
111
// parseMod reads go.mod into memory as a modfile.File
0 commit comments