mirror of
https://gitea.com/gitea/act_runner.git
synced 2026-10-29 03:16:43 +08:00
After https://gitea.com/gitea/runner/pulls/1304, logrus stayed only to forward logs from docker/cli and moby/go-archive. The runner used a small part of those: volume parsing, the build context tar, the `ssh://` connection and registry credentials. Own code that matches them replaces them, so logrus leaves the module graph. docker/cli stays for its logrus-free `opts` and `connhelper/ssh` packages. Other dependencies that the standard library or existing ones cover go too: mergo, httprouter (replaced by `http.ServeMux`), retry-go, go-isatty, go-selinux, container-device-interface, gotest.tools and go-cmp (replaced by testify). The binary shrinks by 5%. Behaviour differences: 1. An unreadable file in a build context is skipped with a warning, where go-archive left a truncated tar. 2. Build contexts no longer carry `security.capability` xattrs. 3. The cache and artifact servers answer HEAD on GET routes, and no longer redirect trailing slashes or answer OPTIONS. *Written by Claude.* --------- Co-authored-by: bircni <bircni@icloud.com> Reviewed-on: https://gitea.com/gitea/runner/pulls/1319 Reviewed-by: bircni <bircni@icloud.com> Reviewed-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: silverwind <2021+silverwind@noreply.gitea.com>
38 lines
917 B
Go
38 lines
917 B
Go
// Copyright 2026 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package runner
|
|
|
|
import (
|
|
"os"
|
|
"strings"
|
|
"sync"
|
|
|
|
"golang.org/x/sys/unix"
|
|
)
|
|
|
|
var selinuxEnabled = sync.OnceValue(func() bool {
|
|
if !isSELinuxfs("/sys/fs/selinux") && !hasOtherSELinuxfs() {
|
|
return false
|
|
}
|
|
label, _ := os.ReadFile("/proc/self/attr/current")
|
|
return strings.TrimSuffix(string(label), "\x00") != "kernel"
|
|
})
|
|
|
|
func hasOtherSELinuxfs() bool {
|
|
mounts, _ := os.ReadFile("/proc/self/mountinfo")
|
|
for line := range strings.Lines(string(mounts)) {
|
|
if strings.Contains(line, " - selinuxfs ") {
|
|
if fields := strings.Fields(line); len(fields) > 4 && isSELinuxfs(fields[4]) {
|
|
return true
|
|
}
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func isSELinuxfs(mountPoint string) bool {
|
|
var fs unix.Statfs_t
|
|
return unix.Statfs(mountPoint, &fs) == nil && uint32(fs.Type) == uint32(unix.SELINUX_MAGIC) && fs.Flags&unix.ST_RDONLY == 0
|
|
}
|