From bc4d84f01fbe06014cb738199a79a98193de446e Mon Sep 17 00:00:00 2001 From: Lincoln Stoll Date: Fri, 29 Mar 2024 17:04:22 +0100 Subject: [PATCH] CI build + docker publish --- .github/workflows/go.yml | 81 ++++++++++++++++++++++++++++++++++++++++ Dockerfile | 11 ++++++ tsproxy_test.go | 8 ---- 3 files changed, 92 insertions(+), 8 deletions(-) create mode 100644 .github/workflows/go.yml create mode 100644 Dockerfile diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml new file mode 100644 index 0000000..e9856bd --- /dev/null +++ b/.github/workflows/go.yml @@ -0,0 +1,81 @@ +name: Go +on: + push: + branches: + - '**' + tags: + - 'v*.*.*' +jobs: + + build: + name: Build + runs-on: ubuntu-latest + env: + CGO_ENABLED: 0 + steps: + + - name: Set up Go + uses: actions/setup-go@v4 + with: + go-version: stable + id: go + + - name: Check out code into the Go module directory + uses: actions/checkout@v4 + + - name: go mod download + run: | + go mod download + + - name: Cross-build + run: | + GOOS=linux GOARCH=amd64 go build -o tsproxy-amd64 . + GOOS=linux GOARCH=arm64 go build -o tsproxy-arm64 . + + - name: Test + run: | + go test ./... + + - name: Lint + uses: golangci/golangci-lint-action@v4 + with: + version: latest + + - name: Docker meta + id: meta + uses: docker/metadata-action@v4 + with: + # list of Docker images to use as base name for tags + images: | + ghcr.io/sr/tsproxy + # generate Docker tags based on the following events/attributes + tags: | + type=ref,event=branch + type=ref,event=pr + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + type=sha + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Login to GHCR + if: github.event_name != 'pull_request' + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push + uses: docker/build-push-action@v3 + with: + context: . + platforms: linux/amd64,linux/arm64 + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..d84df37 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,11 @@ +FROM debian:bookworm +ARG TARGETARCH + +WORKDIR /app + +RUN apt-get update && \ + apt-get install -y ca-certificates + +COPY tsproxy-$TARGETARCH /usr/bin/tsproxy + +CMD ["/usr/bin/tsproxy"] diff --git a/tsproxy_test.go b/tsproxy_test.go index d3b6cf9..eafb269 100644 --- a/tsproxy_test.go +++ b/tsproxy_test.go @@ -27,14 +27,6 @@ func (c *fakeLocalClient) WhoIs(ctx context.Context, remoteAddr string) (*apityp return c.whois(ctx, remoteAddr) } -func mustParseURL(s string) *url.URL { - v, err := url.Parse(s) - if err != nil { - panic(err) - } - return v -} - func TestReverseProxy(t *testing.T) { t.Parallel()