diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index 84e3c8d..8a87574 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -11,7 +11,7 @@ env: jobs: build: name: Build multi-platform Docker image - runs-on: ubuntu-latest + runs-on: self-hosted permissions: contents: read @@ -83,7 +83,7 @@ jobs: if-no-files-found: error retention-days: 1 merge: - runs-on: ubuntu-latest + runs-on: self-hosted needs: - build permissions: diff --git a/Dockerfile b/Dockerfile index ed566ff..6666618 100644 --- a/Dockerfile +++ b/Dockerfile @@ -25,6 +25,7 @@ RUN --mount=type=cache,target="/go/pkg/mod" \ FROM scratch LABEL maintainer="yusing@6uo.me" +LABEL proxy.exclude=1 # copy timezone data COPY --from=builder /usr/share/zoneinfo /usr/share/zoneinfo diff --git a/Makefile b/Makefile index 717d6ba..ec76b20 100755 --- a/Makefile +++ b/Makefile @@ -51,3 +51,7 @@ rapid-crash: debug-list-containers: bash -c 'echo -e "GET /containers/json HTTP/1.0\r\n" | sudo netcat -U /var/run/docker.sock | tail -n +9 | jq' + +ci-test: + mkdir -p /tmp/artifacts + act -n --artifact-server-path /tmp/artifacts -s GITHUB_TOKEN="$$(gh auth token)" \ No newline at end of file diff --git a/cmd/main.go b/cmd/main.go index 5e2a94b..f21e2b4 100755 --- a/cmd/main.go +++ b/cmd/main.go @@ -76,6 +76,10 @@ func main() { return } + for _, dir := range common.RequiredDirectories { + prepareDirectory(dir) + } + err := config.Load() if err != nil { logrus.Warn(err) @@ -188,6 +192,14 @@ func main() { } } +func prepareDirectory(dir string) { + if _, err := os.Stat(dir); os.IsNotExist(err) { + if err = os.MkdirAll(dir, 0755); err != nil { + logrus.Fatalf("failed to create directory %s: %v", dir, err) + } + } +} + func funcName(f func()) string { parts := strings.Split(runtime.FuncForPC(reflect.ValueOf(f).Pointer()).Name(), "/go-proxy/") return parts[len(parts)-1] diff --git a/go.mod b/go.mod index d843257..4d5ff66 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/yusing/go-proxy -go 1.22.0 +go 1.23.1 require ( github.com/docker/cli v27.3.1+incompatible @@ -15,6 +15,7 @@ require ( ) require ( + github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/cloudflare/cloudflare-go v0.106.0 // indirect @@ -29,6 +30,8 @@ require ( github.com/goccy/go-json v0.10.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/google/go-querystring v1.1.0 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // indirect github.com/miekg/dns v1.1.62 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect github.com/moby/term v0.5.0 // indirect @@ -39,10 +42,12 @@ require ( github.com/pkg/errors v0.9.1 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0 // indirect go.opentelemetry.io/otel v1.30.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.30.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.30.0 // indirect go.opentelemetry.io/otel/metric v1.30.0 // indirect go.opentelemetry.io/otel/sdk v1.30.0 // indirect go.opentelemetry.io/otel/trace v1.30.0 // indirect + go.opentelemetry.io/proto/otlp v1.3.1 // indirect golang.org/x/crypto v0.27.0 // indirect golang.org/x/mod v0.21.0 // indirect golang.org/x/oauth2 v0.23.0 // indirect @@ -51,6 +56,10 @@ require ( golang.org/x/text v0.18.0 // indirect golang.org/x/time v0.6.0 // indirect golang.org/x/tools v0.25.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect + google.golang.org/grpc v1.66.1 // indirect + google.golang.org/protobuf v1.34.2 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gotest.tools/v3 v3.5.1 // indirect ) diff --git a/go.sum b/go.sum index cb8f535..3c7dde4 100644 --- a/go.sum +++ b/go.sum @@ -130,6 +130,7 @@ golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= diff --git a/internal/common/constants.go b/internal/common/constants.go index 69bed7a..4b69e66 100644 --- a/internal/common/constants.go +++ b/internal/common/constants.go @@ -34,6 +34,14 @@ const ( ErrorPagesBasePath = "error_pages" ) +var ( + RequiredDirectories = []string{ + ConfigBasePath, + SchemaBasePath, + ErrorPagesBasePath, + } +) + const DockerHostFromEnv = "$DOCKER_HOST" const ( diff --git a/internal/common/env.go b/internal/common/env.go index de2f714..1c0c07b 100644 --- a/internal/common/env.go +++ b/internal/common/env.go @@ -10,8 +10,8 @@ import ( ) var ( - NoSchemaValidation = GetEnvBool("GOPROXY_NO_SCHEMA_VALIDATION") - IsDebug = GetEnvBool("GOPROXY_DEBUG") + NoSchemaValidation = GetEnvBool("GOPROXY_NO_SCHEMA_VALIDATION", false) + IsDebug = GetEnvBool("GOPROXY_DEBUG", false) ProxyHTTPAddr, ProxyHTTPHost, @@ -29,13 +29,17 @@ var ( APIHTTPURL = GetAddrEnv("GOPROXY_API_ADDR", "127.0.0.1:8888", "http") ) -func GetEnvBool(key string) bool { - return U.ParseBool(os.Getenv(key)) +func GetEnvBool(key string, defaultValue bool) bool { + value, ok := os.LookupEnv(key) + if !ok || value == "" { + return defaultValue + } + return U.ParseBool(value) } func GetEnv(key, defaultValue string) string { value, ok := os.LookupEnv(key) - if !ok { + if !ok || value == "" { value = defaultValue } return value diff --git a/internal/docker/container.go b/internal/docker/container.go index da6905b..d63b7e2 100644 --- a/internal/docker/container.go +++ b/internal/docker/container.go @@ -6,7 +6,6 @@ import ( "strings" "github.com/docker/docker/api/types" - "github.com/sirupsen/logrus" U "github.com/yusing/go-proxy/internal/utils" ) @@ -33,9 +32,6 @@ func FromDocker(c *types.Container, dockerHost string) (res Container) { StopSignal: res.getDeleteLabel(LabelStopSignal), Running: c.Status == "running" || c.State == "running", } - if res.NetworkMode == "" { - logrus.Debugf("%v", res.NetworkSettings.Networks) - } return }