|
| 1 | +#!/usr/bin/env bash |
| 2 | +set -euo pipefail |
| 3 | + |
| 4 | +FUZZ_IMAGE="${FUZZ_IMAGE:-registry.ddbuild.io/java-profiler-fuzz}" |
| 5 | +GIT_SHA="${CI_COMMIT_SHORT_SHA:-$(git rev-parse --short HEAD)}" |
| 6 | + |
| 7 | +export FUZZYDOG_AUTH_TOKEN |
| 8 | +FUZZYDOG_AUTH_TOKEN=$(vault read -field=token identity/oidc/token/security-fuzzing-platform) |
| 9 | + |
| 10 | +# Build and push the compiled image (all fuzz binaries + fuzzydog) |
| 11 | +docker buildx build \ |
| 12 | + --target build \ |
| 13 | + -f docker/Dockerfile.fuzz \ |
| 14 | + --build-arg "FUZZYDOG_VERSION=${FUZZYDOG_VERSION}" \ |
| 15 | + -t "${FUZZ_IMAGE}:${GIT_SHA}" \ |
| 16 | + --push \ |
| 17 | + --metadata-file compiled-metadata.json \ |
| 18 | + . |
| 19 | + |
| 20 | +COMPILED_DIGEST=$(jq -r '."containerimage.digest"' compiled-metadata.json) |
| 21 | + |
| 22 | +# Extract binary list via the manifest target |
| 23 | +docker buildx build \ |
| 24 | + --target manifest \ |
| 25 | + -f docker/Dockerfile.fuzz \ |
| 26 | + --build-arg "FUZZYDOG_VERSION=${FUZZYDOG_VERSION}" \ |
| 27 | + --output "type=local,dest=manifest-out" \ |
| 28 | + . |
| 29 | + |
| 30 | +# For each binary: build thin per-binary image, sign, replicate, register |
| 31 | +while IFS= read -r binary; do |
| 32 | + [ -z "${binary}" ] && continue |
| 33 | + # Normalize to k8s-safe label: camelCase -> lowercase-hyphenated, prefixed with repo name |
| 34 | + normalized=$(printf '%s' "${binary}" | sed 's/[A-Z]/-&/g' | tr '[:upper:]' '[:lower:]' | sed 's/^-//') |
| 35 | + fuzz_app="java-profiler-${normalized}" |
| 36 | + IMAGE_REF="${FUZZ_IMAGE}:${GIT_SHA}-${normalized}" |
| 37 | + |
| 38 | + printf 'FROM %s@%s\nENV FUZZ_APP=%s\nENV FUZZ_BUILD_ID=%s\nRUN ln -sf /fuzzer/builds/%s /fuzzer/builds/%s\n' \ |
| 39 | + "${FUZZ_IMAGE}" "${COMPILED_DIGEST}" "${fuzz_app}" "${GIT_SHA}" "${binary}" "${GIT_SHA}" \ |
| 40 | + | docker buildx build - \ |
| 41 | + -t "${IMAGE_REF}" \ |
| 42 | + --push \ |
| 43 | + --metadata-file "meta-${binary}.json" |
| 44 | + |
| 45 | + ddsign sign "${IMAGE_REF}" --docker-metadata-file "meta-${binary}.json" |
| 46 | + ddsign replicate --to us1.ddbuild.io \ |
| 47 | + "${FUZZ_IMAGE}@$(jq -r '."containerimage.digest"' "meta-${binary}.json")" |
| 48 | + |
| 49 | + fuzzydog fuzzer create "${fuzz_app}" \ |
| 50 | + --image "${IMAGE_REF}" \ |
| 51 | + --version "${GIT_SHA}" \ |
| 52 | + --type libfuzzer \ |
| 53 | + --team profiling \ |
| 54 | + --slack-channel profiling-java \ |
| 55 | + --repository-url https://github.com/DataDog/java-profiler |
| 56 | +done < manifest-out/fuzz_binaries.txt |
0 commit comments