Skip to content

Commit 664046f

Browse files
ci(appinspect): Improve appinspect scripts
1 parent ad1db90 commit 664046f

File tree

2 files changed

+83
-29
lines changed

2 files changed

+83
-29
lines changed

β€Ž.github/workflows/appinspect.yml

Lines changed: 42 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -37,20 +37,50 @@ jobs:
3737
slim package .
3838
mv crowdsec-splunk-app-*.tar.gz /tmp/crowdsec-splunk-app.tar.gz
3939
40-
- name: Retrieve App Inspect Report
40+
- name: Retrieve Splunk API Token
41+
id: get_token
4142
run: |
42-
TOKEN=$(curl -u '${{ secrets.SPLUNKBASE_USERNAME }}:${{ secrets.SPLUNKBASE_PASSWORD }}' --url 'https://api.splunk.com/2.0/rest/login/splunk' | jq -r .data.token)
43+
TOKEN=$(curl -s -u '${{ secrets.SPLUNKBASE_USERNAME }}:${{ secrets.SPLUNKBASE_PASSWORD }}' \
44+
--url 'https://api.splunk.com/2.0/rest/login/splunk' | jq -r .data.token)
4345
echo "::add-mask::$TOKEN"
44-
REPORT_HREF=$(curl -X POST \
45-
-H "Authorization: bearer $TOKEN" \
46-
-H "Cache-Control: no-cache" \
47-
-F "app_package=@/tmp/crowdsec-splunk-app.tar.gz" \
48-
--url "https://appinspect.splunk.com/v1/app/validate"| jq -r .links[1].href)
49-
REPORT_URL="https://appinspect.splunk.com$REPORT_HREF"
50-
sleep 30
51-
curl -X GET \
52-
-H "Authorization: bearer $TOKEN" \
53-
--url $REPORT_URL > /tmp/report.json
46+
echo "token=$TOKEN" >> $GITHUB_OUTPUT
47+
48+
- name: Submit App for Validation
49+
id: submit_app
50+
run: |
51+
RESPONSE=$(curl -s -X POST \
52+
-H "Authorization: bearer ${{ steps.get_token.outputs.token }}" \
53+
-F "app_package=@/tmp/crowdsec-splunk-app.tar.gz" \
54+
"https://appinspect.splunk.com/v1/app/validate")
55+
56+
REQUEST_ID=$(echo "$RESPONSE" | jq -r '.request_id')
57+
echo "request_id=$REQUEST_ID" >> $GITHUB_OUTPUT
58+
59+
- name: Poll Status and Download Report
60+
run: |
61+
TOKEN=${{ steps.get_token.outputs.token }}
62+
REQUEST_ID=${{ steps.submit_app.outputs.request_id }}
63+
64+
STATUS_URL="https://appinspect.splunk.com/v1/app/validate/status/$REQUEST_ID"
65+
REPORT_URL="https://appinspect.splunk.com/v1/app/report/$REQUEST_ID"
66+
67+
echo "Polling validation status for request ID: $REQUEST_ID"
68+
69+
for i in {1..10}; do
70+
STATUS=$(curl -s -H "Authorization: bearer $TOKEN" "$STATUS_URL" | jq -r .status)
71+
echo "Status: $STATUS"
72+
if [[ "$STATUS" == "SUCCESS" ]]; then
73+
echo "Validation succeeded!"
74+
break
75+
elif [[ "$STATUS" == "FAILURE" ]]; then
76+
echo "Validation failed!"
77+
exit 1
78+
fi
79+
sleep 5
80+
done
81+
82+
echo "Downloading final validation report..."
83+
curl -s -H "Authorization: bearer $TOKEN" "$REPORT_URL" > /tmp/report.json
5484

5585
- name: Upload App Inspect Report
5686
uses: actions/upload-artifact@v4

β€Ždev/splunk_appinspect.sh

Lines changed: 41 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,35 +14,59 @@ if [[ -z "$USERNAME" || -z "$PASSWORD" ]]; then
1414
exit 1
1515
fi
1616

17-
echo "Authenticating to Splunk AppInspect API..."
17+
echo "πŸ” Authenticating to Splunk AppInspect API..."
1818
TOKEN=$(curl -s -u "$USERNAME:$PASSWORD" \
1919
--url 'https://api.splunk.com/2.0/rest/login/splunk' | jq -r .data.token)
2020

2121
if [[ -z "$TOKEN" || "$TOKEN" == "null" ]]; then
22-
echo "Error: Failed to retrieve token."
22+
echo "❌ Error: Failed to retrieve token."
2323
exit 1
2424
fi
2525

26-
echo "Token retrieved successfully. Submitting app for validation..."
27-
REPORT_HREF=$(curl -s -X POST \
26+
echo "βœ… Token retrieved successfully. Submitting app for validation..."
27+
RESPONSE=$(curl -s -X POST \
2828
-H "Authorization: bearer $TOKEN" \
29-
-H "Cache-Control: no-cache" \
3029
-F "app_package=@$APP_PACKAGE" \
31-
--url "https://appinspect.splunk.com/v1/app/validate" | jq -r .links[1].href)
30+
"https://appinspect.splunk.com/v1/app/validate")
3231

33-
if [[ -z "$REPORT_HREF" || "$REPORT_HREF" == "null" ]]; then
34-
echo "Error: Failed to submit the app or retrieve report href."
32+
REQUEST_ID=$(echo "$RESPONSE" | jq -r '.request_id')
33+
34+
if [[ -z "$REQUEST_ID" || "$REQUEST_ID" == "null" ]]; then
35+
echo "❌ Error: Failed to submit app or retrieve request ID."
36+
echo "$RESPONSE"
3537
exit 1
3638
fi
3739

38-
REPORT_URL="https://appinspect.splunk.com$REPORT_HREF"
39-
echo "App submitted. Report URL: $REPORT_URL"
40-
echo "Waiting 30 seconds for processing..."
41-
sleep 30
40+
STATUS_URL="https://appinspect.splunk.com/v1/app/validate/status/$REQUEST_ID"
41+
REPORT_URL="https://appinspect.splunk.com/v1/app/report/$REQUEST_ID"
4242

43-
echo "Fetching report..."
44-
curl -s -X GET \
45-
-H "Authorization: bearer $TOKEN" \
46-
--url "$REPORT_URL" > "$REPORT_PATH"
43+
echo "πŸ“€ App submitted. Request ID: $REQUEST_ID"
44+
echo "⏳ Polling validation status..."
45+
46+
for i in {1..10}; do
47+
STATUS_RESPONSE=$(curl -s -H "Authorization: bearer $TOKEN" "$STATUS_URL")
48+
STATUS=$(echo "$STATUS_RESPONSE" | jq -r .status)
49+
50+
echo "πŸ”„ Status check #$i: $STATUS"
51+
52+
if [[ "$STATUS" == "SUCCESS" ]]; then
53+
echo "βœ… Validation succeeded!"
54+
break
55+
elif [[ "$STATUS" == "FAILURE" ]]; then
56+
echo "❌ Validation failed."
57+
echo "$STATUS_RESPONSE"
58+
exit 1
59+
fi
60+
61+
sleep 5
62+
done
63+
64+
if [[ "$STATUS" != "SUCCESS" ]]; then
65+
echo "❌ Timeout: Validation did not complete within expected time."
66+
exit 1
67+
fi
68+
69+
echo "πŸ“₯ Downloading validation report..."
70+
curl -s -H "Authorization: bearer $TOKEN" "$REPORT_URL" > "$REPORT_PATH"
4771

48-
echo "Report saved to $REPORT_PATH"
72+
echo "πŸ“„ Report saved to $REPORT_PATH"

0 commit comments

Comments
Β (0)