From fc6a6aa46891abe16ea5af9d39bb6c9478c6592c Mon Sep 17 00:00:00 2001 From: yusing Date: Sun, 29 Sep 2024 01:48:36 +0800 Subject: [PATCH] an attempt to speed up github action --- .github/workflows/docker-image.yml | 57 ++++++++++++++++++++++++++++-- Dockerfile | 1 + cmd/main.go | 12 +++++++ gha.Dockerfile | 22 ++++++++++++ go.mod | 11 +++++- go.sum | 1 + internal/common/constants.go | 8 +++++ internal/docker/container.go | 4 --- 8 files changed, 109 insertions(+), 7 deletions(-) create mode 100644 gha.Dockerfile diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index 84e3c8d9..c0129040 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -2,11 +2,13 @@ name: Docker Image CI on: push: - tags: ["*"] + # tags: ["*"] env: REGISTRY: ghcr.io IMAGE_NAME: ${{ github.repository }} + CGO_ENABLED: 0 + BUILD_FLAGS: -ldflags '-w -s' -pgo=auto jobs: build: @@ -30,9 +32,58 @@ jobs: steps: - name: Prepare run: | - platform=${{ matrix.platform }} + platform=${{ matrix.platform.name }} echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV + - name: Set GOARCH and GOARM + run: | + case "${{ matrix.platform }}" in + linux/amd64) + echo "GOARCH=amd64" >> $GITHUB_ENV + ;; + linux/arm/v6) + echo "GOARCH=arm" >> $GITHUB_ENV + echo "GOARM=6" >> $GITHUB_ENV + ;; + linux/arm/v7) + echo "GOARCH=arm" >> $GITHUB_ENV + echo "GOARM=7" >> $GITHUB_ENV + ;; + linux/arm64) + echo "GOARCH=arm64" >> $GITHUB_ENV + ;; + esac + echo "OUTPUT=/tmp/go-proxy-${{ env.PLATFORM_PAIR }}" >> $GITHUB_ENV + + - name: Print GOARCH and GOARM + run: | + echo "GOARCH: $GOARCH" + echo "GOARM: $GOARM" + + - uses: actions/checkout@v4 + + - uses: actions/setup-go@v5 + with: + go-version-file: "go.mod" + cache-dependency-path: go.sum + + - name: Display Go version + run: go version + + - name: Setup dependencies + run: go mod graph | awk '{if ($1 !~ "@") print $2}' | xargs go get + + - name: Build the go-proxy + run: | + go build -v ${{ env.BUILD_FLAGS }} -o ${{ env.OUTPUT }} ./cmd + + - name: Upload artifact + uses: actions/upload-artifact@v3 + with: + name: go-proxy-${{ env.PLATFORM_PAIR }} + path: ${{ env.OUTPUT }} + if-no-files-found: error + - name: Docker meta id: meta uses: docker/metadata-action@v5 @@ -59,6 +110,8 @@ jobs: platforms: ${{ matrix.platform }} labels: ${{ steps.meta.outputs.labels }} outputs: type=image,name=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }},push-by-digest=true,name-canonical=true,push=true + file: gha.Dockerfile + build-args: GOPROXY_BIN=${{ env.OUTPUT }} cache-from: type=gha cache-to: type=gha,mode=max diff --git a/Dockerfile b/Dockerfile index ed566ff3..6666618f 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/cmd/main.go b/cmd/main.go index 5e2a94bc..f21e2b46 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/gha.Dockerfile b/gha.Dockerfile new file mode 100644 index 00000000..8bbc48fe --- /dev/null +++ b/gha.Dockerfile @@ -0,0 +1,22 @@ +FROM gcr.io/distroless/static-debian12:latest AS resources + +LABEL maintainer="yusing@6uo.me" +LABEL proxy.exclude=1 + +ARG GOPROXY_BIN=${OUTPUT} + +# copy schema directory +COPY schema /app/schema + +# copy binary +COPY ${GOPROXY_BIN} /app/go-proxy + +ENV DOCKER_HOST=unix:///var/run/docker.sock + +EXPOSE 80 +EXPOSE 8888 +EXPOSE 443 + +WORKDIR /app + +CMD ["/app/go-proxy"] \ No newline at end of file diff --git a/go.mod b/go.mod index d8432571..4d5ff66a 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 cb8f5356..3c7dde4a 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 69bed7a2..4b69e669 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/docker/container.go b/internal/docker/container.go index da6905b2..d63b7e2d 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 }