From 874207492e942eb566c358937de98fe8df16c14f Mon Sep 17 00:00:00 2001 From: Kir Kolyshkin Date: Mon, 20 Jan 2025 16:51:04 -0800 Subject: [PATCH 1/3] CI: add Go 1.24, drop go1.22 Also, bump golangci-lint to v1.64 (v1.64.2 added Go 1.24 support). NOTE we still use Go 1.23.x for official builds. Signed-off-by: Kir Kolyshkin --- .github/workflows/test.yml | 2 +- .github/workflows/validate.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7f4c5b0fc..620c77f2f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -24,7 +24,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-20.04, ubuntu-24.04, actuated-arm64-6cpu-8gb] - go-version: [1.22.x, 1.23.x] + go-version: [1.23.x, 1.24.x] rootless: ["rootless", ""] race: ["-race", ""] criu: ["", "criu-dev"] diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index dad27d5b5..a5c8fbad6 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -8,7 +8,7 @@ on: - release-* pull_request: env: - GO_VERSION: 1.23.x + GO_VERSION: 1.24 permissions: contents: read @@ -40,7 +40,7 @@ jobs: sudo apt -qy install libseccomp-dev - uses: golangci/golangci-lint-action@v6 with: - version: v1.62 + version: v1.64 # Extra linters, only checking new code from a pull request. - name: lint-extra if: github.event_name == 'pull_request' From 16d7336791d5ad854adfea390c1955641b368f5d Mon Sep 17 00:00:00 2001 From: Kir Kolyshkin Date: Tue, 11 Feb 2025 17:45:03 -0800 Subject: [PATCH 2/3] Require Go 1.23.x, drop Go 1.22 support Signed-off-by: Kir Kolyshkin --- go.mod | 7 +----- libcontainer/system/rlimit_linux_go122.go | 27 ----------------------- 2 files changed, 1 insertion(+), 33 deletions(-) delete mode 100644 libcontainer/system/rlimit_linux_go122.go diff --git a/go.mod b/go.mod index 28ee71313..f42a08e55 100644 --- a/go.mod +++ b/go.mod @@ -1,11 +1,6 @@ module github.com/opencontainers/runc -go 1.22 - -// Suggest toolchain 1.22.4 due to a fix in golang for libcontainer/nsenter/. -// For more info, see: #4233 -// Note that toolchain does not impose a requirement on other modules using runc. -toolchain go1.22.4 +go 1.23.0 require ( github.com/checkpoint-restore/go-criu/v6 v6.3.0 diff --git a/libcontainer/system/rlimit_linux_go122.go b/libcontainer/system/rlimit_linux_go122.go deleted file mode 100644 index 865d18022..000000000 --- a/libcontainer/system/rlimit_linux_go122.go +++ /dev/null @@ -1,27 +0,0 @@ -//go:build !go1.23 - -// TODO: remove this file once go 1.22 is no longer supported. - -package system - -import ( - "sync/atomic" - "syscall" - _ "unsafe" // Needed for go:linkname to work. -) - -//go:linkname syscallOrigRlimitNofile syscall.origRlimitNofile -var syscallOrigRlimitNofile atomic.Pointer[syscall.Rlimit] - -// ClearRlimitNofileCache clears go runtime's nofile rlimit cache. -// The argument is process RLIMIT_NOFILE values. -func ClearRlimitNofileCache(_ *syscall.Rlimit) { - // As reported in issue #4195, the new version of go runtime(since 1.19) - // will cache rlimit-nofile. Before executing execve, the rlimit-nofile - // of the process will be restored with the cache. In runc, this will - // cause the rlimit-nofile setting by the parent process for the container - // to become invalid. It can be solved by clearing this cache. But - // unfortunately, go stdlib doesn't provide such function, so we need to - // link to the private var `origRlimitNofile` in package syscall to hack. - syscallOrigRlimitNofile.Store(nil) -} From d237bc462aea7c9ee4e05cd3951585315418e82e Mon Sep 17 00:00:00 2001 From: Kir Kolyshkin Date: Mon, 20 Jan 2025 16:56:42 -0800 Subject: [PATCH 3/3] .cirrus.yml: use Go 1.24 Also: 1. Change GO_VERSION to GO_VER_PREFIX, and move the "." from the jq argument to the variable value. It allows to use something like "1.25" to match "1.25rc" etc, but set to "1.24." for now to require a released 1.24.x version. 2. Change PREFIX to URL_PREFIX. Signed-off-by: Kir Kolyshkin --- .cirrus.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.cirrus.yml b/.cirrus.yml index e63ef51cf..65c70cd9a 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -77,7 +77,7 @@ task: env: HOME: /root CIRRUS_WORKING_DIR: /home/runc - GO_VERSION: "1.23" + GO_VER_PREFIX: "1.24." BATS_VERSION: "v1.9.0" RPMS: gcc git iptables jq glibc-static libseccomp-devel make criu fuse-sshfs container-selinux # yamllint disable rule:key-duplicates @@ -117,10 +117,10 @@ task: [ $? -eq 0 ] # fail if yum failed # Install Go. - PREFIX="https://go.dev/dl/" + URL_PREFIX="https://go.dev/dl/" # Find out the latest minor release URL. - filename=$(curl -fsSL "${PREFIX}?mode=json&include=all" | jq -r --arg Ver "go$GO_VERSION." '. | map(select(.version | contains($Ver))) | first | .files[] | select(.os == "linux" and .arch == "amd64" and .kind == "archive") | .filename') - curl -fsSL "$PREFIX$filename" | tar Cxz /usr/local + filename=$(curl -fsSL "${URL_PREFIX}?mode=json&include=all" | jq -r --arg Ver "go$GO_VER_PREFIX" '. | map(select(.version | contains($Ver))) | first | .files[] | select(.os == "linux" and .arch == "amd64" and .kind == "archive") | .filename') + curl -fsSL "$URL_PREFIX$filename" | tar Cxz /usr/local # install bats cd /tmp git clone https://github.com/bats-core/bats-core