Skip to content

Commit a661ea9

Browse files
Create download-all-artifacts.sh
Signed-off-by: John Osborne <josborne@chainguard.dev>
1 parent b21b96f commit a661ea9

1 file changed

Lines changed: 54 additions & 0 deletions

File tree

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
#!/bin/bash
2+
3+
echo "Fetching gavs endpoint"
4+
curl -L --user "$CHAINGUARD_JAVA_IDENTITY_ID:$CHAINGUARD_JAVA_TOKEN" "$BASEURL-/api/gavs?page_size=1000" 2>/dev/null | jq > gavs.json
5+
echo "GAVs found: $(jq '.gavs | length' gavs.json)"
6+
echo ".cgr fixes: $(jq '[.gavs[] | capture("cgr\\.(?<n>[0-9]+)") | .n | tonumber] | add // 0' gavs.json)"
7+
echo ".cgp fixes: $(jq '[.gavs[] | capture("cgp\\.(?<n>[0-9]+)") | .n | tonumber] | add // 0' gavs.json)"
8+
echo "saving results to gavs.json"
9+
10+
mkdir -p jars patches
11+
for gav in $(jq -r '.gavs[]' gavs.json); do
12+
13+
group=$(echo "$gav" | cut -d: -f1)
14+
artifact=$(echo "$gav" | cut -d: -f2)
15+
version=$(echo "$gav" | cut -d: -f3)
16+
name="${group}:${artifact}"
17+
QUERYJSON=$(curl -s "$CONSOLE_API_URL_QUERY" \
18+
-H "Authorization: Bearer $(chainctl auth token)" \
19+
-H 'Content-Type: application/json' \
20+
-d "{\"package\":{\"ecosystem\":\"Maven\",\"name\":\"${name}\"}}" | jq)
21+
22+
if fixed_version=$(echo "$QUERYJSON" | jq -r '.vulns[].affected[].ranges[].events[] | select(has("fixed")) | .fixed' | head -1) && [ -n "$fixed_version" ]; then
23+
echo "OSV Fixed Data Found for Artifact: $group:$artifact:$fixed_version"
24+
fi
25+
26+
VERSION_DIR="$BASEURL${group//.//}/${artifact//.//}/$version/"
27+
GAV_DIR="artifacts/${group//.//}/${artifact//.//}/$version"
28+
mkdir -p "$GAV_DIR"
29+
30+
LISTING=$(curl -L --user "$CHAINGUARD_JAVA_IDENTITY_ID:$CHAINGUARD_JAVA_TOKEN" -s "$VERSION_DIR")
31+
FILES=$(echo "$LISTING" | grep -oP '(?<=href=")[^"]+' | grep -v '^\.\./$')
32+
33+
if [ -z "$FILES" ]; then
34+
echo "Failed: no listing returned for $VERSION_DIR"
35+
echo "Attempting to guess the .jar and -patches.zip URLs"
36+
37+
# Fall back to guessing standard jar/patches URLs since the listing-based fetch failed
38+
JARURL="$BASEURL${group//.//}/${artifact//.//}/$version/$artifact-$version.jar"
39+
PATCHURL="$BASEURL${group//.//}/${artifact//.//}/$version/$artifact-$version-patches.zip"
40+
JAR_URL_HTTP_CODE=$(curl -L --user "$CHAINGUARD_JAVA_IDENTITY_ID:$CHAINGUARD_JAVA_TOKEN" -s -o "$GAV_DIR/$(basename "$JARURL")" -w "%{http_code}" "$JARURL")
41+
[ "$JAR_URL_HTTP_CODE" = "200" ] && echo "Saved: $DEST" || echo "Failed ($JAR_URL_HTTP_CODE): $JARURL"
42+
PATCH_URL_HTTP_CODE=$(curl -L --user "$CHAINGUARD_JAVA_IDENTITY_ID:$CHAINGUARD_JAVA_TOKEN" -s -o "$GAV_DIR/$(basename "$PATCHURL")" -w "%{http_code}" "$PATCHURL")
43+
[ "$PATCH_URL_HTTP_CODE" = "200" ] && echo "Saved: $DEST" || echo "Failed ($PATCH_URL_HTTP_CODE): $PATCHURL"
44+
else
45+
echo "Found file listing for $VERSION_DIR"
46+
while IFS= read -r FNAME; do
47+
FILEURL="${VERSION_DIR}${FNAME}"
48+
DEST="$GAV_DIR/$FNAME"
49+
50+
HTTP_CODE=$(curl -L --user "$CHAINGUARD_JAVA_IDENTITY_ID:$CHAINGUARD_JAVA_TOKEN" -s -o "$DEST" -w "%{http_code}" "$FILEURL")
51+
[ "$HTTP_CODE" = "200" ] && echo "Saved: $DEST" || echo "Failed ($HTTP_CODE): $FILEURL"
52+
done <<< "$FILES"
53+
fi
54+
done

0 commit comments

Comments
 (0)