mirror of
https://gitea.com/gitea/act_runner.git
synced 2026-10-29 11:26:31 +08:00
- Keep `GITHUB_ENV`, `GITHUB_OUTPUT`, `GITHUB_STATE` and `GITHUB_PATH` when a job times out or is cancelled, so post steps still get their state - Retry the startup Declare while Gitea is unreachable instead of exiting, still failing fast on rejected registrations, auth and misconfiguration - Reuse a local image when a platform variant such as `linux/arm/v7` is requested instead of pulling again - Read `PATH` from the created job container so cross-architecture jobs get tool paths for the right architecture - Extract action copies relative to the act volume so they never cross an image's `/var/run` symlink, which rootless Podman rejects - Keep the job container's entrypoint when container options set `--entrypoint`, warning instead of appending it to the keep-alive command - Lock action cache entries across runner processes that share a cache directory - `exec`: omit `GITHUB_SERVER_URL` and `GITHUB_API_URL` without `--gitea-instance` instead of exporting a bare `https://`, and read owner and repository from any origin remote Reviewed-on: https://gitea.com/gitea/runner/pulls/1294 Reviewed-by: bircni <bircni@icloud.com> Co-authored-by: silverwind <me@silverwind.io>
87 lines
2.2 KiB
Go
87 lines
2.2 KiB
Go
// Copyright 2026 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package container
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestParsePlatform(t *testing.T) {
|
|
t.Run("empty input returns nil platform without error", func(t *testing.T) {
|
|
got, err := parsePlatform("")
|
|
require.NoError(t, err)
|
|
assert.Nil(t, got)
|
|
})
|
|
|
|
t.Run("os/arch", func(t *testing.T) {
|
|
got, err := parsePlatform("linux/amd64")
|
|
require.NoError(t, err)
|
|
require.NotNil(t, got)
|
|
assert.Equal(t, "linux", got.OS)
|
|
assert.Equal(t, "amd64", got.Architecture)
|
|
assert.Empty(t, got.Variant)
|
|
})
|
|
|
|
t.Run("os/arch/variant", func(t *testing.T) {
|
|
got, err := parsePlatform("linux/arm/v7")
|
|
require.NoError(t, err)
|
|
require.NotNil(t, got)
|
|
assert.Equal(t, "linux", got.OS)
|
|
assert.Equal(t, "arm", got.Architecture)
|
|
assert.Equal(t, "v7", got.Variant)
|
|
})
|
|
|
|
t.Run("input is lowercased", func(t *testing.T) {
|
|
got, err := parsePlatform("Linux/AMD64/V8")
|
|
require.NoError(t, err)
|
|
require.NotNil(t, got)
|
|
assert.Equal(t, "linux", got.OS)
|
|
assert.Equal(t, "amd64", got.Architecture)
|
|
assert.Equal(t, "v8", got.Variant)
|
|
})
|
|
|
|
for _, bad := range []string{
|
|
"amd64",
|
|
"linux",
|
|
"linux/",
|
|
"/amd64",
|
|
"/",
|
|
"//",
|
|
"linux/arm/",
|
|
"linux/arm/v7/extra",
|
|
} {
|
|
t.Run("rejects "+bad, func(t *testing.T) {
|
|
got, err := parsePlatform(bad)
|
|
require.Error(t, err)
|
|
assert.Nil(t, got)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestPlatformMatches(t *testing.T) {
|
|
for _, testcase := range []struct {
|
|
requested, image string
|
|
want bool
|
|
}{
|
|
{"linux/amd64", "linux/amd64", true},
|
|
{"linux/amd64/v1", "linux/amd64", true},
|
|
{"linux/arm64", "linux/amd64", false},
|
|
{"linux/arm64/v8", "linux/arm64", true},
|
|
{"linux/arm/v7", "linux/arm/v7", true},
|
|
{"linux/arm", "linux/arm/v7", true},
|
|
{"linux/arm/v6", "linux/arm/v7", false},
|
|
{"linux/arm", "linux/arm/v6", true},
|
|
{"windows/arm/v7", "linux/arm/v7", false},
|
|
} {
|
|
requested, err := parsePlatform(testcase.requested)
|
|
require.NoError(t, err)
|
|
image, err := parsePlatform(testcase.image)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, testcase.want, platformMatches(requested, image), "%s on %s", testcase.requested, testcase.image)
|
|
}
|
|
}
|