update gotip in CI and fix -tiny on the latest tip

printOneCgoTraceback now returns a boolean rather than an int.
Since we need to have different logic based on the Go version,
and toolchainVersionSemver was only set for the main process,
move the string to the shared cache global.
This is a nice thing to do anyway, to reduce the number of globals.

While here, update actions/setup-go to v4, which starts caching
GOMODCACHE and GOCACHE by default now.
Disable it, because it still doesn't help in our case,
and GitHub's Actions caching is still really inefficient.

And update staticcheck too.
pull/720/head
Daniel Martí 1 year ago committed by lu4p
parent cd003eade0
commit 4d7546703a

@ -11,11 +11,14 @@ on:
# as it runs many builds under the hood.
# The default -timeout=10m can be hit by the hosted runners.
#
# Also note that we don't use actions/cache for Go on purpose.
# Also note that we don't use Actions caching for Go on purpose.
# Caching GOMODCACHE wouldn't help much, as we have few deps.
# Caching GOCACHE would do more harm than good,
# as the tests redo most of their work if the garble version changes,
# and the majority of commits or PRs will do so.
# Moreover, GitHub saves and restores caches via compressed archives over the
# network, which means it can easily add one minute of overhead on its own for
# just a few hundred megabytes worth of files.
name: Test
jobs:
@ -27,10 +30,11 @@ jobs:
os: [ubuntu-latest, macos-11, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/setup-go@v3
- uses: actions/checkout@v3
- uses: actions/setup-go@v4
with:
go-version: ${{ matrix.go-version }}
- uses: actions/checkout@v3
cache: false
- name: Test
run: go test -timeout=15m ./...
- uses: actions/upload-artifact@v3
@ -60,7 +64,7 @@ jobs:
- if: matrix.os == 'ubuntu-latest' && matrix.go-version == '1.20.x'
uses: dominikh/staticcheck-action@v1
with:
version: "2023.1.2"
version: "2023.1.3"
install-go: false
# We don't care about GOARCH=386 particularly,
@ -84,7 +88,7 @@ jobs:
steps:
- name: Install Go
env:
GO_COMMIT: 70f98a251efdbfd619c4ff466a43da299ad04752 # 2023-03-11
GO_COMMIT: 231f290e51e130a1699d5c29d28133d68f43d2e9 # 2023-04-08
run: |
cd $HOME
mkdir $HOME/gotip

@ -260,11 +260,6 @@ type errJustExit int
func (e errJustExit) Error() string { return fmt.Sprintf("exit: %d", e) }
// toolchainVersionSemver is a semver-compatible version of the Go toolchain currently
// being used, as reported by "go env GOVERSION".
// Note that the version of Go that built the garble binary might be newer.
var toolchainVersionSemver string
func goVersionOK() bool {
const (
minGoVersionSemver = "v1.20.0"
@ -275,7 +270,7 @@ func goVersionOK() bool {
rxVersion := regexp.MustCompile(`go\d+\.\d+(?:\.\d+)?`)
toolchainVersionFull := cache.GoEnv.GOVERSION
toolchainVersion := rxVersion.FindString(cache.GoEnv.GOVERSION)
toolchainVersion := rxVersion.FindString(toolchainVersionFull)
if toolchainVersion == "" {
// Go 1.15.x and older do not have GOVERSION yet.
// We could go the extra mile and fetch it via 'go toolchainVersion',
@ -284,14 +279,14 @@ func goVersionOK() bool {
return false
}
toolchainVersionSemver = "v" + strings.TrimPrefix(toolchainVersion, "go")
if semver.Compare(toolchainVersionSemver, minGoVersionSemver) < 0 {
cache.GoVersionSemver = "v" + strings.TrimPrefix(toolchainVersion, "go")
if semver.Compare(cache.GoVersionSemver, minGoVersionSemver) < 0 {
fmt.Fprintf(os.Stderr, "Go version %q is too old; please upgrade to Go %s or newer\n", toolchainVersionFull, suggestedGoVersion)
return false
}
// Ensure that the version of Go that built the garble binary is equal or
// newer than toolchainVersionSemver.
// newer than cache.GoVersionSemver.
builtVersionFull := os.Getenv("GARBLE_TEST_GOVERSION")
if builtVersionFull == "" {
builtVersionFull = runtime.Version()
@ -303,7 +298,7 @@ func goVersionOK() bool {
return true
}
builtVersionSemver := "v" + strings.TrimPrefix(builtVersion, "go")
if semver.Compare(builtVersionSemver, toolchainVersionSemver) < 0 {
if semver.Compare(builtVersionSemver, cache.GoVersionSemver) < 0 {
fmt.Fprintf(os.Stderr, "garble was built with %q and is being used with %q; please rebuild garble with the newer version\n",
builtVersionFull, toolchainVersionFull)
return false

@ -9,6 +9,8 @@ import (
"strconv"
"strings"
"golang.org/x/mod/semver"
ah "mvdan.cc/garble/internal/asthelper"
)
@ -236,7 +238,11 @@ func stripRuntime(basename string, file *ast.File) {
"printAncestorTracebackFuncInfo", "goroutineheader", "tracebackothers", "tracebackHexdump", "printCgoTraceback":
funcDecl.Body.List = nil
case "printOneCgoTraceback":
funcDecl.Body = ah.BlockStmt(ah.ReturnStmt(ah.IntLit(0)))
if semver.Compare(cache.GoVersionSemver, "v1.21") >= 0 {
funcDecl.Body = ah.BlockStmt(ah.ReturnStmt(ast.NewIdent("false")))
} else {
funcDecl.Body = ah.BlockStmt(ah.ReturnStmt(ah.IntLit(0)))
}
default:
if strings.HasPrefix(funcDecl.Name.Name, "print") {
funcDecl.Body.List = nil

@ -46,6 +46,13 @@ type sharedCache struct {
GOGARBLE string
// GoVersionSemver is a semver-compatible version of the Go toolchain
// currently being used, as reported by "go env GOVERSION".
// Note that the version of Go that built the garble binary might be newer.
// Also note that a devel version like "go1.21-231f290e51" is
// currently represented as "v1.21".
GoVersionSemver string
// Filled directly from "go env".
// Keep in sync with fetchGoEnv.
GoEnv struct {

Loading…
Cancel
Save