mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-06-21 22:24:32 +00:00
## Why this should be merged
Safer release process by enforcing invariants of `release/*` branches as
automated in #137 to fulfil #25.
## How this works
New test for `go_tooling` CI job.
If the PR target branch is `main` then only the `params.ReleaseType` is
checked. If the target is neither `main` nor a release branch then the
test is skipped. The checks performed on `release/*` branches are
described in the test.
## How this was tested
Locally against a dummy release branch with deliberate problems created
by (a) including this PR's changes in the final commit and (b) not
updating the libevm version.
```
$ go test -v ./... --target_branch="release/v1.13.14-0.1.0.rc.3"
=== RUN TestCherryPicksFormat
--- PASS: TestCherryPicksFormat (0.39s)
=== RUN TestBranchProperties
=== RUN TestBranchProperties/branch_name
release_test.go:172:
Error Trace: .../ava-labs/libevm/libevm/tooling/release/release_test.go:172
Error: Not equal:
expected: "release/v1.13.14-0.1.0.beta"
actual : "release/v1.13.14-0.1.0.rc.3"
Diff:
--- Expected
+++ Actual
@@ -1 +1 @@
-release/v1.13.14-0.1.0.beta
+release/v1.13.14-0.1.0.rc.3
Test: TestBranchProperties/branch_name
release_test.go:175: On release branch; params.LibEVMReleaseType = "beta", which is unsuitable for release branches
=== RUN TestBranchProperties/commit_history
release_test.go:192: Forked from "main" at commit 4c6e50e7d1 (chore: module-renaming workflow inverts between `libevm` and `geth` (#152))
release_test.go:314: ### History since fork from default branch (8 commits):
release_test.go:316: internal/build, rpc: add missing HTTP response body Close() calls (#29223) by Shiming Zhang <wzshiming@hotmail.com>
release_test.go:316: core/state: fix bug in statedb.Copy and remove unnecessary preallocation (#29563) by Aaron Chen <aaronchen.lisp@gmail.com>
release_test.go:316: params: print time value instead of pointer in ConfigCompatError (#29514) by Nathan <Nathan.l@nodereal.io>
release_test.go:316: eth/gasprice: add query limit for FeeHistory to defend DDOS attack (#29644) by Nathan <Nathan.l@nodereal.io>
release_test.go:316: core/state/snapshot: add a missing lock (#30001) by maskpp <maskpp266@gmail.com>
release_test.go:316: crypto: add IsOnCurve check (#31100) by Felix Lange <fjl@twurst.com>
release_test.go:316: internal/ethapi: fix panic in debug methods (#31157) by Sina M <1591639+s1na@users.noreply.github.com>
release_test.go:316: x by Arran Schlosberg <me@arranschlosberg.com>
=== RUN TestBranchProperties/commit_history/cherry_picked_commits
release_test.go:314: ### Expected cherry-picks (7 commits):
release_test.go:316: internal/build, rpc: add missing HTTP response body Close() calls (#29223) by Shiming Zhang <wzshiming@hotmail.com>
release_test.go:316: core/state: fix bug in statedb.Copy and remove unnecessary preallocation (#29563) by Aaron Chen <aaronchen.lisp@gmail.com>
release_test.go:316: params: print time value instead of pointer in ConfigCompatError (#29514) by Nathan <Nathan.l@nodereal.io>
release_test.go:316: eth/gasprice: add query limit for FeeHistory to defend DDOS attack (#29644) by Nathan <Nathan.l@nodereal.io>
release_test.go:316: core/state/snapshot: add a missing lock (#30001) by maskpp <maskpp266@gmail.com>
release_test.go:316: crypto: add IsOnCurve check (#31100) by Felix Lange <fjl@twurst.com>
release_test.go:316: internal/ethapi: fix panic in debug methods (#31157) by Sina M <1591639+s1na@users.noreply.github.com>
=== RUN TestBranchProperties/commit_history/final_commit
release_test.go:365: Modified disallowed file "go.yml"
release_test.go:365: Modified disallowed file "go.mod"
release_test.go:365: Modified disallowed file "go.sum"
release_test.go:365: Modified disallowed file "release_test.go"
--- FAIL: TestBranchProperties (2.07s)
--- FAIL: TestBranchProperties/branch_name (0.00s)
--- FAIL: TestBranchProperties/commit_history (2.07s)
--- PASS: TestBranchProperties/commit_history/cherry_picked_commits (1.81s)
--- FAIL: TestBranchProperties/commit_history/final_commit (0.01s)
FAIL
FAIL github.com/ava-labs/libevm/libevm/tooling/release 2.712s
FAIL
```
86 lines
2.4 KiB
Go
86 lines
2.4 KiB
Go
// Copyright 2024 the libevm authors.
|
|
//
|
|
// The libevm additions to go-ethereum are free software: you can redistribute
|
|
// them and/or modify them under the terms of the GNU Lesser General Public License
|
|
// as published by the Free Software Foundation, either version 3 of the License,
|
|
// or (at your option) any later version.
|
|
//
|
|
// The libevm additions are distributed in the hope that they will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
|
|
// General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU Lesser General Public License
|
|
// along with the go-ethereum library. If not, see
|
|
// <http://www.gnu.org/licenses/>.
|
|
|
|
package params
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"golang.org/x/mod/semver"
|
|
)
|
|
|
|
func TestLibEVMVersioning(t *testing.T) {
|
|
// We have an unusual version structure as defined by [LibEVMVersion] that
|
|
// is easy to mess up, so it's easier to just automate it and test the
|
|
// ordering assumptions.
|
|
|
|
// This is a deliberate change-detector test to provide us with a copyable
|
|
// string of the current version, useful for git tagging.
|
|
const curr = "1.13.14-0.1.0.beta"
|
|
if got, want := LibEVMVersion, curr; got != want {
|
|
t.Errorf("got LibEVMVersion %q; want %q", got, want)
|
|
}
|
|
|
|
ordered := []libEVMSemver{
|
|
{
|
|
semverTriplet{1, 13, 14},
|
|
semverTriplet{0, 1, 0},
|
|
BetaRelease,
|
|
0, // ignored
|
|
},
|
|
{
|
|
semverTriplet{1, 13, 14},
|
|
semverTriplet{0, 1, 0},
|
|
ReleaseCandidate, 1,
|
|
},
|
|
{
|
|
semverTriplet{1, 13, 14},
|
|
semverTriplet{0, 1, 0},
|
|
ReleaseCandidate, 2,
|
|
},
|
|
{
|
|
semverTriplet{1, 13, 14},
|
|
semverTriplet{0, 1, 0},
|
|
ProductionRelease,
|
|
0, // ignored,
|
|
},
|
|
{
|
|
semverTriplet{1, 13, 14},
|
|
semverTriplet{0, 1, 1}, // bump takes precedence
|
|
BetaRelease, 0,
|
|
},
|
|
{
|
|
semverTriplet{1, 13, 14},
|
|
semverTriplet{0, 1, 1},
|
|
ProductionRelease, 0,
|
|
},
|
|
{
|
|
semverTriplet{1, 13, 15}, // bump takes precedence
|
|
semverTriplet{0, 1, 1},
|
|
BetaRelease, 0,
|
|
},
|
|
}
|
|
|
|
for i, low := range ordered[:len(ordered)-1] {
|
|
// The `go mod` semver package requires the "v" prefix, which
|
|
// technically isn't valid semver.
|
|
lo := "v" + low.String()
|
|
hi := "v" + ordered[i+1].String()
|
|
if got := semver.Compare(lo, hi); got != -1 {
|
|
t.Errorf("Version pattern is not strictly ordered; semver.Compare(%q, %q) = %d", lo, hi, got)
|
|
}
|
|
}
|
|
}
|