Skip to content
This repository was archived by the owner on Feb 18, 2026. It is now read-only.

Commit d55f6fe

Browse files
fix: change Safety output from JSON to text format
Fix Safety scan output parsing: - Change from JSON format to text format - Use text parsing instead of JSON.parse() - Extract vulnerability count from text output - Fix JSON parsing error in github-script The Safety tool outputs text format by default, not JSON. Parse the text output to extract vulnerability count.
1 parent f43dbf3 commit d55f6fe

1 file changed

Lines changed: 20 additions & 10 deletions

File tree

.github/workflows/security-weekly.yml

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,22 @@ jobs:
5656
run: |
5757
echo "🔍 Safety脆弱性スキャン実行中..."
5858
59-
# Safetyの出力をJSON形式でファイルに保存
60-
if uv run safety check -r requirements.txt --output json > safety-report.json 2>&1; then
59+
# Safetyスキャン実行(テキスト出力)
60+
set +e
61+
uv run safety check -r requirements.txt --output text > safety-report.txt 2>&1
62+
SAFETY_EXIT_CODE=$?
63+
set -e
64+
65+
# 結果を表示
66+
cat safety-report.txt
67+
68+
# 脆弱性カウント(簡易的なパース)
69+
if [ $SAFETY_EXIT_CODE -eq 0 ]; then
6170
echo "✅ 脆弱性は検出されませんでした"
6271
echo "vulnerabilities=0" >> $GITHUB_OUTPUT
6372
else
64-
# エラー終了コードは脆弱性検出を意味する
65-
VULN_COUNT=$(jq '.vulnerabilities | length' safety-report.json 2>/dev/null || echo "0")
73+
# 脆弱性検出数をカウント("found X vulnerabilities"パターンを探す)
74+
VULN_COUNT=$(grep -oP '\d+(?= known security vulnerabilit)' safety-report.txt 2>/dev/null | head -1 || echo "1")
6675
echo "vulnerabilities=$VULN_COUNT" >> $GITHUB_OUTPUT
6776
echo "⚠️ $VULN_COUNT 件の脆弱性が検出されました"
6877
fi
@@ -73,7 +82,7 @@ jobs:
7382
with:
7483
name: safety-report
7584
path: |
76-
safety-report.json
85+
safety-report.txt
7786
requirements.txt
7887
retention-days: 90
7988

@@ -182,8 +191,8 @@ jobs:
182191
echo "## 📊 スキャン結果" >> $GITHUB_STEP_SUMMARY
183192
echo "" >> $GITHUB_STEP_SUMMARY
184193
185-
if [ -f "safety-report.json" ]; then
186-
VULN_COUNT=$(jq '.vulnerabilities | length' safety-report.json 2>/dev/null || echo "0")
194+
if [ -f "safety-report.txt" ]; then
195+
VULN_COUNT=$(grep -oP '\d+(?= known security vulnerabilit)' safety-report.txt 2>/dev/null | head -1 || echo "0")
187196
if [ "$VULN_COUNT" -eq 0 ]; then
188197
echo "- **Safety**: ✅ 脆弱性は検出されませんでした" >> $GITHUB_STEP_SUMMARY
189198
else
@@ -209,9 +218,10 @@ jobs:
209218
210219
// 脆弱性がない場合、既存Issueをクローズ
211220
let vulnCount = 0;
212-
if (fs.existsSync('safety-report.json')) {
213-
const report = JSON.parse(fs.readFileSync('safety-report.json', 'utf8'));
214-
vulnCount = report.vulnerabilities?.length || 0;
221+
if (fs.existsSync('safety-report.txt')) {
222+
const report = fs.readFileSync('safety-report.txt', 'utf8');
223+
const match = report.match(/(\d+) known security vulnerabilit/);
224+
vulnCount = match ? parseInt(match[1]) : 0;
215225
}
216226
217227
if (vulnCount === 0) {

0 commit comments

Comments
 (0)