#!/bin/sh
# Build the exact bundled plugin source snapshots. Datasource commits stay pinned.
# Tempo is additionally built against official Tempo v3.1.0; see pin-tempo-v3.sh.
set -eu
mkdir -p /out/plugins /out/source/plugins
while IFS="$(printf '\t')" read -r directory url expected commit binary bumps; do
 case "$directory" in *[!a-z0-9-]*|'') echo 'invalid plugin directory' >&2; exit 2;; esac
 work="/plugins/$directory"
 records="/out/source/plugins/$directory/records"
 mkdir -p "$work" "$records" "/out/plugins/$directory"
 wget -q -O "$work/upstream.tar.gz" "$url"
 printf '%s  %s\n' "$expected" "$work/upstream.tar.gz" | sha256sum -c -
 tar -xzf "$work/upstream.tar.gz" --strip-components=1 -C "$work"
 cd "$work"
 cp go.mod "$records/upstream.go.mod"
 cp go.sum "$records/upstream.go.sum"
 if [ "$directory" = tempo ]; then
  sh /inputs/pin-tempo-v3.sh "$work"
  export GOPROXY='https://proxy.golang.org,file:///tmp/tempo-modproxy'
  export GONOSUMDB='github.com/grafana/tempo/v3'
  rm -rf "$(go env GOMODCACHE)/cache/download/github.com/grafana/tempo"
 fi
 # All bumps are applied jointly, preserving the net/crypto dependency requirement.
 if [ -n "$bumps" ]; then go get $bumps; fi
 if [ "$directory" = tempo ]; then go get github.com/grafana/tempo/v3@v3.1.0; fi
 go mod download
 go mod verify
 go build -p 4 -mod=readonly -buildvcs=false -trimpath -ldflags '-s -w' -o "/out/plugins/$directory/$binary" ./pkg
 go version -m "/out/plugins/$directory/$binary" > "$records/go-version-m.txt"
 go list -m -json all > "$records/modules.json"
 go list -deps -json ./pkg > "$records/dependencies.json"
 printf '%s\n' "$commit" > "$records/upstream-commit"
 printf '%s\n' "$bumps" > "$records/bumps"
 cp go.mod go.sum LICENSE "$records/"
 if [ -f NOTICE ]; then cp NOTICE "$records/"; fi
 go mod vendor
 tar -czf "/out/source/plugins/$directory/vendor.tar.gz" vendor
 cp upstream.tar.gz "/out/source/plugins/$directory/upstream.tar.gz"
 find . -type f \( -name go.mod -o -name go.sum -o -name go.work -o -name go.work.sum \) ! -path './vendor/*' | LC_ALL=C sort > "$records/module-manifests.list"
 tar -czf "/out/source/plugins/$directory/module-manifests.tar.gz" -T "$records/module-manifests.list"
 cd "/out/source/plugins/$directory"
 sha256sum upstream.tar.gz vendor.tar.gz module-manifests.tar.gz records/* > SHA256SUMS
 if [ "$directory" = tempo ]; then unset GOPROXY GONOSUMDB; fi
 printf 'completed bundled plugin %s\n' "$directory"
done < /inputs/plugins.tsv
