From 221e3023f6ebb26b6f34bb419a21b6e1612cd82f Mon Sep 17 00:00:00 2001 From: Chris Evich Date: Tue, 25 Apr 2023 10:49:47 -0400 Subject: [PATCH 1/3] Fix rand.Seed() deprecation in golang 1.20 Ref: https://pkg.go.dev/math/rand@go1.20#Seed Note: For `runtime_test.go`, this test-case was never actually doing what appears as it's intent . Fixing it to work as intended would be require incredibly libpod-invasive changes. Do the least-worse thing and simply confirm that consecutive generated names are different. Signed-off-by: Chris Evich --- libpod/runtime.go | 8 -------- libpod/runtime_pre_go1.20.go | 18 ++++++++++++++++++ libpod/runtime_test.go | 5 +---- test/e2e/common_test.go | 6 +++--- 4 files changed, 22 insertions(+), 15 deletions(-) create mode 100644 libpod/runtime_pre_go1.20.go diff --git a/libpod/runtime.go b/libpod/runtime.go index 83c5a1eba1..98956a5e16 100644 --- a/libpod/runtime.go +++ b/libpod/runtime.go @@ -5,7 +5,6 @@ import ( "context" "errors" "fmt" - "math/rand" "os" "path/filepath" "strings" @@ -118,13 +117,6 @@ type Runtime struct { secretsManager *secrets.SecretsManager } -func init() { - // generateName calls namesgenerator.GetRandomName which the - // global RNG from math/rand. Seed it here to make sure we - // don't get the same name every time. - rand.Seed(time.Now().UnixNano()) -} - // SetXdgDirs ensures the XDG_RUNTIME_DIR env and XDG_CONFIG_HOME variables are set. // containers/image uses XDG_RUNTIME_DIR to locate the auth file, XDG_CONFIG_HOME is // use for the containers.conf configuration file. diff --git a/libpod/runtime_pre_go1.20.go b/libpod/runtime_pre_go1.20.go new file mode 100644 index 0000000000..1c73043de4 --- /dev/null +++ b/libpod/runtime_pre_go1.20.go @@ -0,0 +1,18 @@ +// In go 1.20 and later, the global RNG is automatically initialized. +// Ref: https://pkg.go.dev/math/rand@go1.20#Seed +//go:build !go1.20 +// +build !go1.20 + +package libpod + +import ( + "math/rand" + "time" +) + +func init() { + // generateName calls namesgenerator.GetRandomName which the + // global RNG from math/rand. Seed it here to make sure we + // don't get the same name every time. + rand.Seed(time.Now().UnixNano()) +} diff --git a/libpod/runtime_test.go b/libpod/runtime_test.go index 2e16c7fcd3..7468d34938 100644 --- a/libpod/runtime_test.go +++ b/libpod/runtime_test.go @@ -1,7 +1,6 @@ package libpod import ( - "math/rand" "os" "testing" @@ -19,10 +18,8 @@ func Test_generateName(t *testing.T) { } // Test that (*Runtime).generateName returns different names - // if called twice, even if the global RNG has the default - // seed. + // if called twice. n1, _ := r.generateName() - rand.Seed(1) n2, _ := r.generateName() assert.NotEqual(t, n1, n2) } diff --git a/test/e2e/common_test.go b/test/e2e/common_test.go index 82d6bce297..946b973b27 100644 --- a/test/e2e/common_test.go +++ b/test/e2e/common_test.go @@ -430,11 +430,11 @@ func GetPortLock(port string) *lockfile.LockFile { // collisions during parallel tests func GetRandomIPAddress() string { // To avoid IP collisions of initialize random seed for random IP addresses - rand.Seed(time.Now().UnixNano()) + rng := rand.New(rand.NewSource(time.Now().UnixNano())) // Add GinkgoParallelProcess() on top of the IP address // in case of the same random seed - ip3 := strconv.Itoa(rand.Intn(230) + GinkgoParallelProcess()) - ip4 := strconv.Itoa(rand.Intn(230) + GinkgoParallelProcess()) + ip3 := strconv.Itoa(rng.Intn(230) + GinkgoParallelProcess()) + ip4 := strconv.Itoa(rng.Intn(230) + GinkgoParallelProcess()) return "10.88." + ip3 + "." + ip4 } From 0e1ddd3dff1e5b7865d1697ead098e8d7e851681 Mon Sep 17 00:00:00 2001 From: Chris Evich Date: Tue, 25 Apr 2023 17:00:15 -0400 Subject: [PATCH 2/3] Cirrus: Run code validation on rawhide Signed-off-by: Chris Evich --- .cirrus.yml | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/.cirrus.yml b/.cirrus.yml index 7340b285ec..bb2750949c 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -235,7 +235,7 @@ build_aarch64_task: # This confirms the binaries can be executed, checks --help vs docs, and # other essential post-build validation checks. validate_task: - name: "Validate $DISTRO_NV Build" + name: "Validate ${DISTRO_NV} Build" alias: validate # This task is primarily intended to catch human-errors early on, in a # PR. Skip it for branch-push, branch-create, and tag-push to improve @@ -251,9 +251,16 @@ validate_task: <<: *standardvm cpu: 8 memory: "16Gb" + matrix: + - env: + <<: *stdenvars + VM_IMAGE_NAME: ${FEDORA_CACHE_IMAGE_NAME} + DISTRO_NV: ${FEDORA_NAME} + - env: + <<: *stdenvars + VM_IMAGE_NAME: ${RAWHIDE_CACHE_IMAGE_NAME} + DISTRO_NV: ${RAWHIDE_NAME} env: - <<: *stdenvars - DISTRO_NV: ${FEDORA_NAME} TEST_FLAVOR: validate # N/B: This script depends on ${DISTRO_NV} being defined for the task. clone_script: &get_gosrc | From 7ff2eaf960f1353e5e9852fcb9ebceeacfb7e7ab Mon Sep 17 00:00:00 2001 From: Chris Evich Date: Mon, 24 Apr 2023 15:11:29 -0400 Subject: [PATCH 3/3] Cirrus: Update CI VM Image to F38/37 Signed-off-by: Chris Evich --- .cirrus.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.cirrus.yml b/.cirrus.yml index bb2750949c..5737805e7f 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -26,14 +26,15 @@ env: #### #### Cache-image names to test with (double-quotes around names are critical) #### - FEDORA_NAME: "fedora-37" + FEDORA_NAME: "fedora-38" FEDORA_AARCH64_NAME: "${FEDORA_NAME}-aarch64" - PRIOR_FEDORA_NAME: "fedora-36" + PRIOR_FEDORA_NAME: "fedora-37" RAWHIDE_NAME: "rawhide" DEBIAN_NAME: "debian-12" # Image identifiers - IMAGE_SUFFIX: "c20230420t184033z-f37f36d12" + IMAGE_SUFFIX: "c20230426t140447z-f38f37d12" + # EC2 images FEDORA_AMI: "fedora-aws-${IMAGE_SUFFIX}" FEDORA_AARCH64_AMI: "fedora-podman-aws-arm64-${IMAGE_SUFFIX}"