Text file src/cmd/go/testdata/script/mod_download_exec_toolchain.txt

     1  env TESTGO_VERSION=go1.21
     2  env TESTGO_VERSION_SWITCH=switch
     3  
     4  # First, test 'go mod download' outside of a module.
     5  #
     6  # There is no go.mod file into which we can record the selected toolchain,
     7  # so unfortunately these version switches won't be as reproducible as other
     8  # go commands, but that's still preferable to failing entirely or downloading
     9  # a module zip that we don't understand.
    10  
    11  # GOTOOLCHAIN=auto should run the newer toolchain
    12  env GOTOOLCHAIN=auto
    13  go mod download rsc.io/needgo121@latest rsc.io/needgo122@latest rsc.io/needgo123@latest rsc.io/needall@latest
    14  stderr '^go: rsc.io/needall@v0.0.1 requires go >= 1.23; switching to go1.23.9$'
    15  ! stderr '\(running'
    16  
    17  # GOTOOLCHAIN=min+auto should run the newer toolchain
    18  env GOTOOLCHAIN=go1.21+auto
    19  go mod download rsc.io/needgo121@latest rsc.io/needgo122@latest rsc.io/needgo123@latest rsc.io/needall@latest
    20  stderr '^go: rsc.io/needall@v0.0.1 requires go >= 1.23; switching to go1.23.9$'
    21  ! stderr '\(running'
    22  
    23  # GOTOOLCHAIN=go1.21 should NOT run the newer toolchain
    24  env GOTOOLCHAIN=go1.21
    25  ! go mod download rsc.io/needgo121@latest rsc.io/needgo122@latest rsc.io/needgo123@latest rsc.io/needall@latest
    26  ! stderr switching
    27  stderr 'rsc.io/needgo122@v0.0.1 requires go >= 1.22'
    28  stderr 'rsc.io/needgo123@v0.0.1 requires go >= 1.23'
    29  stderr 'rsc.io/needall@v0.0.1 requires go >= 1.23'
    30  stderr 'requires go >= 1.23'
    31  ! stderr 'requires go >= 1.21' # that's us!
    32  
    33  
    34  # JSON output should be emitted exactly once,
    35  # and non-JSON output should go to stderr instead of stdout.
    36  env GOTOOLCHAIN=auto
    37  go mod download -json rsc.io/needgo121@latest rsc.io/needgo122@latest rsc.io/needgo123@latest rsc.io/needall@latest
    38  stderr '^go: rsc.io/needall@v0.0.1 requires go >= 1.23; switching to go1.23.9$'
    39  ! stderr '\(running'
    40  stdout -count=1 '"Path": "rsc.io/needgo121",'
    41  stdout -count=1 '"Path": "rsc.io/needgo122",'
    42  stdout -count=1 '"Path": "rsc.io/needgo123",'
    43  stdout -count=1 '"Path": "rsc.io/needall",'
    44  
    45  # GOTOOLCHAIN=go1.21 should write the errors in the JSON Error fields, not to stderr.
    46  env GOTOOLCHAIN=go1.21
    47  ! go mod download -json rsc.io/needgo121@latest rsc.io/needgo122@latest rsc.io/needgo123@latest rsc.io/needall@latest
    48  ! stderr switching
    49  stdout -count=1 '"Error": "rsc.io/needgo122@v0.0.1 requires go .*= 1.22 \(running go 1.21; GOTOOLCHAIN=go1.21\)"'
    50  stdout -count=1 '"Error": "rsc.io/needgo123@v0.0.1 requires go .*= 1.23 \(running go 1.21; GOTOOLCHAIN=go1.21\)"'
    51  stdout -count=1 '"Error": "rsc.io/needall@v0.0.1 requires go .*= 1.23 \(running go 1.21; GOTOOLCHAIN=go1.21\)"'
    52  ! stdout '"Error": "rsc.io/needgo121'  # We can handle this one.
    53  ! stderr .
    54  
    55  
    56  # Within a module, 'go mod download' of explicit versions should upgrade if
    57  # needed to perform the download, but should not change the main module's
    58  # toolchain version (because the downloaded modules are still not required by
    59  # the main module).
    60  
    61  cd example
    62  cp go.mod go.mod.orig
    63  
    64  env GOTOOLCHAIN=auto
    65  go mod download rsc.io/needgo121@latest rsc.io/needgo122@latest rsc.io/needgo123@latest rsc.io/needall@latest
    66  stderr '^go: rsc.io/needall@v0.0.1 requires go >= 1.23; switching to go1.23.9$'
    67  ! stderr '\(running'
    68  cmp go.mod go.mod.orig
    69  
    70  
    71  # However, 'go mod download' without arguments should fix up the
    72  # 'go' and 'toolchain' lines to be consistent with the existing
    73  # requirements in the module graph.
    74  
    75  go mod edit -require=rsc.io/needall@v0.0.1
    76  cp go.mod go.mod.121
    77  
    78  # If an upgrade is needed, GOTOOLCHAIN=go1.21 should cause
    79  # the command to fail without changing go.mod.
    80  
    81  env GOTOOLCHAIN=go1.21
    82  ! go mod download
    83  stderr 'rsc.io/needall@v0.0.1 requires go >= 1.23'
    84  ! stderr switching
    85  cmp go.mod go.mod.121
    86  
    87  # If an upgrade is needed, GOTOOLCHAIN=auto should perform
    88  # the upgrade and record the resulting toolchain version.
    89  
    90  env GOTOOLCHAIN=auto
    91  go mod download
    92  stderr '^go: module rsc.io/needall@v0.0.1 requires go >= 1.23; switching to go1.23.9$'
    93  cmp go.mod go.mod.final
    94  
    95  
    96  -- example/go.mod --
    97  module example
    98  
    99  go 1.21
   100  -- example/go.mod.final --
   101  module example
   102  
   103  go 1.23
   104  
   105  toolchain go1.23.9
   106  
   107  require rsc.io/needall v0.0.1
   108  

View as plain text