11//go:build ignore
2+ // +build ignore
23
34package main
45
56import (
67 "bytes"
8+ "errors"
79 "fmt"
810 "log"
911 "os"
1012 "os/exec"
13+ "path/filepath"
1114 "strings"
1215 "text/template"
1316
@@ -18,7 +21,8 @@ func main() {
1821 if err := generateApp (); err != nil {
1922 log .Fatal (err )
2023 }
21- if err := generateModule (); err != nil {
24+ rootDir := "../../"
25+ if err := generateModule (rootDir ); err != nil {
2226 log .Fatal (err )
2327 }
2428}
@@ -51,42 +55,33 @@ func generateApp() error {
5155 return os .WriteFile ("main_test.go" , buf .Bytes (), 0o644 )
5256}
5357
54- func generateModule () error {
55- content , err := os .ReadFile ("../../go.mod" )
56- if err != nil {
57- if ! os .IsNotExist (err ) {
58- return err
59- }
60- content = []byte ("module github.com/docker/cli\n " )
61- if err := os .WriteFile ("../../go.mod" , content , 0o644 ); err != nil {
62- return err
63- }
64- // Let's be nice, and remove the go.mod if we created it.
65- // FIXME(thaJeztah): we need to clean up the go.mod after running the test, but need to know if we created it (or if it was an existing go.mod)
66- // defer os.Remove("../../go.mod")
67- } else {
68- log .Println ("WARN: go.mod exists in the repository root!" )
69- log .Println ("WARN: Using your go.mod instead of our generated version -- this may misbehave!" )
70- }
71- mod , err := modfile .Parse ("../../go.mod" , content , nil )
72- if err != nil {
73- return err
58+ func generateModule (rootDir string ) error {
59+ modFile := filepath .Join (rootDir , "go.mod" )
60+ _ , err := os .Stat (modFile )
61+ if err == nil {
62+ return errors .New ("go.mod exists in the repository root" )
7463 }
75- if mod .Go != nil && mod .Go .Version != "" {
76- return fmt .Errorf ("main go.mod must not contain a go version" )
64+
65+ // create an empty go.mod without go version.
66+ //
67+ // this go.mod must exist when running the test.
68+ err = os .WriteFile (modFile , []byte ("module github.com/docker/cli\n " ), 0o644 )
69+ if err != nil {
70+ return fmt .Errorf ("failed to write go.mod: %w" , err )
7771 }
78- content , err = os .ReadFile ("../../vendor.mod" )
72+
73+ content , err := os .ReadFile (filepath .Join (rootDir , "vendor.mod" ))
7974 if err != nil {
8075 return err
8176 }
82- mod , err = modfile .Parse ("../../ vendor.mod" , content , nil )
77+ mod , err : = modfile .Parse (filepath . Join ( rootDir , " vendor.mod") , content , nil )
8378 if err != nil {
8479 return err
8580 }
8681 if err := mod .AddModuleStmt ("example.com/gocompat" ); err != nil {
8782 return err
8883 }
89- if err := mod .AddReplace ("github.com/docker/cli" , "" , "../../" , "" ); err != nil {
84+ if err := mod .AddReplace ("github.com/docker/cli" , "" , rootDir , "" ); err != nil {
9085 return err
9186 }
9287 if err := mod .AddGoStmt ("1.24" ); err != nil {
0 commit comments