fix: 解耦 runner 与 placement 实现
test / shell (pull_request) Successful in 3m31s
test / python (pull_request) Failing after 10m54s
test / go (pull_request) Failing after 12m12s

This commit is contained in:
2026-09-25 19:03:13 +00:00
parent 011c1e4c83
commit 53732699df
3 changed files with 30 additions and 24 deletions
+7 -8
View File
@@ -2,6 +2,7 @@ package runnerbootstrap
import (
"context"
"encoding/json"
"errors"
"fmt"
"net"
@@ -10,14 +11,12 @@ import (
"os/exec"
"path/filepath"
"time"
"git.ddupan.top/panxiao81/gitea-dynamic-runner/internal/taskassignment"
)
type ExecutorConfig struct {
AssignmentID string
Capability string
Placement taskassignment.Placement
RunnerLabels []string
FacadeURL string
FacadeSPIFFEID string
WorkloadAPIAddr string
@@ -71,7 +70,7 @@ func RunExecutor(ctx context.Context, config ExecutorConfig) error {
defer os.RemoveAll(workDir)
}
registration, err := RegistrationJSON(
config.AssignmentID, config.Capability, "http://"+listener.Addr().String(), config.Placement,
config.AssignmentID, config.Capability, "http://"+listener.Addr().String(), config.RunnerLabels,
)
if err != nil {
return err
@@ -144,13 +143,13 @@ func waitForFacade(ctx context.Context, endpoint string) error {
// the assignment-scoped values injected by the backend. The Workload API
// address follows SPIFFE_ENDPOINT_SOCKET through go-spiffe when not set here.
func ExecutorConfigFromEnvironment() (ExecutorConfig, error) {
placement := taskassignment.Placement{Class: taskassignment.WorkloadClass(os.Getenv(EnvWorkloadClass)), Driver: taskassignment.Driver(os.Getenv(EnvDriver))}
if err := placement.Validate(); err != nil {
return ExecutorConfig{}, err
var labels []string
if err := json.Unmarshal([]byte(os.Getenv(EnvRunnerLabels)), &labels); err != nil || len(labels) == 0 {
return ExecutorConfig{}, errors.New("valid runner labels are required")
}
config := ExecutorConfig{
AssignmentID: os.Getenv(EnvAssignmentID), Capability: os.Getenv(EnvCapability),
Placement: placement, FacadeURL: os.Getenv(EnvFacadeURL), FacadeSPIFFEID: os.Getenv(EnvFacadeID),
RunnerLabels: labels, FacadeURL: os.Getenv(EnvFacadeURL), FacadeSPIFFEID: os.Getenv(EnvFacadeID),
RunnerBinary: os.Getenv("GITEA_RUNNER_BINARY"), RunnerConfig: os.Getenv("GITEA_RUNNER_CONFIG_FILE"),
ListenAddress: "127.0.0.1:0",
Stdout: os.Stdout, Stderr: os.Stderr,