diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..8f11961 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,57 @@ +name: Lightstep Receiver build + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Go + uses: actions/setup-go@v5 + with: + go-version: 1.23.3 + cache: false + + - run: go install golang.org/x/lint/golint@latest + - run: go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest + + - name: Check + run: make check + + - name: Build + run: make build + + release: + runs-on: ubuntu-latest + if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} + needs: build + permissions: + contents: write + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Get next version + uses: reecetech/version-increment@2024.10.1 + id: version + with: + scheme: semver + increment: patch + + - name: Create Tag and Release + id: create_release + uses: actions/create-release@latest + env: + GITHUB_TOKEN: ${{ github.token }} + with: + tag_name: v${{ steps.version.outputs.version }} + release_name: Release v${{ steps.version.outputs.version }} + draft: false + prerelease: false diff --git a/internal/lightstep_pb/http/server.go b/internal/lightstep_pb/http/server.go index 2117204..47222cb 100644 --- a/internal/lightstep_pb/http/server.go +++ b/internal/lightstep_pb/http/server.go @@ -17,6 +17,7 @@ import ( "io" "net" "net/http" + "sync" lightstepCommon "github.com/zalando/otelcol-lightstep-receiver/internal/lightstep_common" "github.com/zalando/otelcol-lightstep-receiver/internal/lightstep_pb" @@ -37,6 +38,8 @@ type ServerHTTP struct { nextTraces consumer.Traces telemetry *telemetry.Telemetry + + shutdownWG sync.WaitGroup } func NewServer( @@ -64,7 +67,7 @@ func (s *ServerHTTP) Start(ctx context.Context, host component.Host) error { ln, err = s.config.ToListener(ctx) if err != nil { - return fmt.Errorf("can't init thrift server: %s", err) + return fmt.Errorf("can't init http pb server: %s", err) } rt := mux.NewRouter() @@ -72,10 +75,13 @@ func (s *ServerHTTP) Start(ctx context.Context, host component.Host) error { s.server, err = s.config.ToServer(ctx, host, s.settings.TelemetrySettings, rt) if err != nil { - return fmt.Errorf("can't start thrift http server %s", err) + return fmt.Errorf("can't start http pb server %s", err) } + s.shutdownWG.Add(1) go func() { + defer s.shutdownWG.Done() + if errHTTP := s.server.Serve(ln); !errors.Is(errHTTP, http.ErrServerClosed) && errHTTP != nil { componentstatus.ReportStatus(host, componentstatus.NewFatalErrorEvent(errHTTP)) } @@ -94,6 +100,7 @@ func (s *ServerHTTP) Shutdown(ctx context.Context) { if err != nil { s.telemetry.Logger.Error("failed to stop http pb server", zap.Error(err)) } + s.shutdownWG.Wait() } } diff --git a/internal/lightstep_thrift/server.go b/internal/lightstep_thrift/server.go index 05d8143..2f1e080 100644 --- a/internal/lightstep_thrift/server.go +++ b/internal/lightstep_thrift/server.go @@ -21,6 +21,7 @@ import ( "io" "net" "net/http" + "sync" "github.com/zalando/otelcol-lightstep-receiver/internal/lightstep_thrift/thrift_0_9_2/lib/go/thrift" @@ -40,6 +41,8 @@ type ThriftServer struct { nextTraces consumer.Traces telemetry *telemetry.Telemetry + + shutdownWG sync.WaitGroup } func NewServer( @@ -85,7 +88,10 @@ func (ts *ThriftServer) Start(ctx context.Context, host component.Host) error { return fmt.Errorf("can't start thrift http server %s", err) } + ts.shutdownWG.Add(1) go func() { + defer ts.shutdownWG.Done() + if errHTTP := ts.server.Serve(ln); !errors.Is(errHTTP, http.ErrServerClosed) && errHTTP != nil { componentstatus.ReportStatus(host, componentstatus.NewFatalErrorEvent(errHTTP)) } @@ -104,6 +110,7 @@ func (ts *ThriftServer) Shutdown(ctx context.Context) { if err != nil { ts.telemetry.Logger.Error("failed to stop thrift server", zap.Error(err)) } + ts.shutdownWG.Wait() } }