#!/bin/sh
set -eu
# Snowflake documents this tag as required for CGO-disabled static builds.
# Keep every contrib component; exclude the unusable optional native load probe.
BUILD_TAGS="grpcnotrace minicore_disabled"
case "${1:-}" in
  prepare)
    mkdir -p /out/source /out/records /out/bin
    wget -q -O /out/source/upstream.tar.gz "$SOURCE_URL"
    printf '%s  %s\n' "$SOURCE_SHA256" /out/source/upstream.tar.gz | sha256sum -c -
    tar -xzf /out/source/upstream.tar.gz --strip-components=1 -C /src
    wget -q -O /out/source/obi-v0.13.0-source-generated.tar.gz "$OBI_URL"
    printf '%s  %s\n' "$OBI_SHA256" /out/source/obi-v0.13.0-source-generated.tar.gz | sha256sum -c -
    mkdir -p /src/internal/obi-src
    tar -xzf /out/source/obi-v0.13.0-source-generated.tar.gz --strip-components=1 -C /src/internal/obi-src
    cd /src/distributions/otelcol-contrib
    printf '%s  %s\n' "$MANIFEST_SHA256" manifest.yaml | sha256sum -c -
    cp manifest.yaml /out/records/manifest.yaml
    go install -trimpath go.opentelemetry.io/collector/cmd/builder@v0.162.0
    go version -m /go/bin/builder > /out/records/builder-go-version-m.txt
    /go/bin/builder --skip-compilation --config manifest.yaml
    cd _build
    cp go.mod /out/records/upstream.go.mod
    cp go.sum /out/records/upstream.go.sum
    if [ -n "$GO_BUMPS" ]; then go get $GO_BUMPS; fi
    go mod download
    go mod verify
    cp go.mod go.sum /out/records/
    go list -m -json all > /out/records/modules.json
    go mod download -json all > /out/records/module-downloads.json
    go list -tags "$BUILD_TAGS" -mod=readonly -deps . > /out/records/packages.txt
    printf '%s\n' "$SOURCE_COMMIT" > /out/records/upstream-commit
    printf '%s\n' "$GO_BUMPS" > /out/records/bumps
    cp /src/LICENSE /out/records/
    if [ -f /src/NOTICE ]; then cp /src/NOTICE /out/records/; fi
    tar -czf /out/source/generated.tar.gz --exclude=build.log .
    tar -czf /out/source/module-inputs.tar.gz -C "$GOMODCACHE/cache/download" .
    cp -R /out/records /out/source/records
    cd /out/source
    sha256sum upstream.tar.gz obi-v0.13.0-source-generated.tar.gz generated.tar.gz module-inputs.tar.gz records/* > SHA256SUMS
    ;;
  record-inputs)
    cd /src/distributions/otelcol-contrib/_build
    # Preserve the generator checkpoint's graph when another supported SDK
    # compiles it. Runtime records describe the compiler's actual package set.
    if [ ! -f /out/records/generator-packages.txt ]; then
      cp /out/records/packages.txt /out/records/generator-packages.txt
      cp /out/records/modules.json /out/records/generator-modules.json
    fi
    go mod verify
    go version > /out/records/compiler-version.txt
    printf '%s\n' "$BUILD_TAGS" > /out/records/build-tags
    go list -tags "$BUILD_TAGS" -mod=readonly -deps . > /out/records/packages.txt
    go list -m -json all > /out/records/modules.json
    ;;
  compile)
    /usr/local/bin/build-collector record-inputs
    cd /src/distributions/otelcol-contrib/_build
    go build -p 4 -tags "$BUILD_TAGS" -mod=readonly -buildvcs=false -trimpath -ldflags '-s -w' -o /out/bin/otelcol-contrib .
    go version -m /out/bin/otelcol-contrib > /out/records/go-version-m.txt
    sha256sum /out/bin/otelcol-contrib > /out/records/binary-sha256
    ;;
  *) echo 'usage: build-collector prepare|record-inputs|compile' >&2; exit 2 ;;
esac
