Skip to content

Commit ed76ac5

Browse files
PantevoSystemsDaniel
andauthored
feat: phase 5 — repo-type detection metadata (#5)
- New auto-detected fields sent to backend: has_dockerfile, has_python_deps, has_node_deps, has_terraform, has_setup_py - Backend uses these to classify repo type and adjust factor weighting accordingly - Backwards compatible: backend falls back to current adaptive weighting when type cannot be determined Co-authored-by: Daniel <krueger.daniel@mail.de>
1 parent 87184d2 commit ed76ac5

2 files changed

Lines changed: 39 additions & 9 deletions

File tree

action.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,5 +85,4 @@ runs:
8585
GITHUB_REPO: ${{ github.repository }}
8686
GITHUB_BRANCH: ${{ github.ref_name }}
8787
GITHUB_SHA: ${{ github.sha }}
88-
DIFF_CHANGED_PATHS: ${{ inputs.diff-changed-paths }}
89-
88+
DIFF_CHANGED_PATHS: ${{ inputs.diff-changed-paths }}

scripts/analyze.sh

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ if [ -n "$CHANGED_YAMLS" ]; then
1919
K8S=$(echo "$CHANGED_YAMLS" | xargs grep -l 'kind:' 2>/dev/null | wc -l | tr -d ' ')
2020
fi
2121
[ -z "$K8S" ] && K8S=0
22-
# Phase 3 — File-Path-Awareness
23-
# Liste der geänderten Files für path-tier-Klassifizierung im Backend
22+
23+
# ── Phase 3 — File-Path-Awareness ────────────────────────────────────────
2424
CHANGED_PATHS=$(git diff HEAD~1 --name-only 2>/dev/null | tr '\n' ',' | sed 's/,$//')
2525
[ -z "$CHANGED_PATHS" ] && CHANGED_PATHS=""
2626

@@ -29,6 +29,25 @@ if [ -n "${DIFF_CHANGED_PATHS:-}" ]; then
2929
CHANGED_PATHS="${DIFF_CHANGED_PATHS}"
3030
fi
3131

32+
# ── Phase 5 — Repo-Type-Detection Metadata ───────────────────────────────
33+
HAS_DOCKERFILE="false"
34+
HAS_PYTHON_DEPS="false"
35+
HAS_NODE_DEPS="false"
36+
HAS_TERRAFORM="false"
37+
HAS_SETUP_PY="false"
38+
39+
[ -f "Dockerfile" ] || [ -f "dockerfile" ] && HAS_DOCKERFILE="true"
40+
[ -f "requirements.txt" ] || [ -f "pyproject.toml" ] || [ -f "Pipfile" ] && HAS_PYTHON_DEPS="true"
41+
[ -f "package.json" ] && HAS_NODE_DEPS="true"
42+
43+
# Terraform-Files irgendwo im Repo?
44+
if find . -maxdepth 3 -name "*.tf" -type f 2>/dev/null | head -1 | grep -q '.'; then
45+
HAS_TERRAFORM="true"
46+
fi
47+
48+
[ -f "setup.py" ] && HAS_SETUP_PY="true"
49+
50+
# ── K8s-Specifics (Single Replica, PDB) ──────────────────────────────────
3251
SINGLE_REPLICA="false"
3352
MISSING_PDB="false"
3453
HAS_DEPLOYMENT=0
@@ -65,6 +84,7 @@ HELM_CHART_CHANGED=$(git diff HEAD~1 --name-only 2>/dev/null | grep -E 'Chart\.y
6584
[ -z "$HELM_CHART_CHANGED" ] && HELM_CHART_CHANGED=0
6685
[ "$HELM_CHART_CHANGED" -gt 0 ] && HELM_CHART_BUMPED="true" || HELM_CHART_BUMPED="false"
6786

87+
# ── Dependencies & Major Bumps ────────────────────────────────────────────
6888
DEP_FILES=$(git diff HEAD~1 --name-only 2>/dev/null | \
6989
grep -E 'package\.json|requirements\.txt|go\.mod|pom\.xml|Gemfile|Cargo\.toml|yarn\.lock|package-lock\.json' | \
7090
wc -l | tr -d ' ')
@@ -101,14 +121,15 @@ fi
101121
INC7=$(echo "${INCIDENTS_7D:-0}" | tr -d ' \n')
102122
INC30=$(echo "${INCIDENTS_30D:-0}" | tr -d ' \n')
103123

104-
# Pipeline Security Findings (Phase 2)
124+
# ── Pipeline Security Findings (Phase 2) ─────────────────────────────────
105125
TRIVY_CRIT=$(echo "${TRIVY_CRITICAL_CVES:-0}" | tr -d ' \n')
106126
TRIVY_HIGH=$(echo "${TRIVY_HIGH_CVES:-0}" | tr -d ' \n')
107127
SEM_TOTAL=$(echo "${SEMGREP_FINDINGS:-0}" | tr -d ' \n')
108128
SEM_HIGH=$(echo "${SEMGREP_HIGH_SEVERITY:-0}" | tr -d ' \n')
109129
CKV_TOTAL=$(echo "${CHECKOV_FAILED_CHECKS:-0}" | tr -d ' \n')
110130
CKV_CRIT=$(echo "${CHECKOV_CRITICAL_FAILURES:-0}" | tr -d ' \n')
111131

132+
# ── Debug Output ─────────────────────────────────────────────────────────
112133
echo " [guard] diff_lines_added: ${ADDED}"
113134
echo " [guard] diff_lines_removed: ${REMOVED}"
114135
echo " [guard] diff_files_changed: ${FILES}"
@@ -128,15 +149,19 @@ echo " [guard] semgrep_high: ${SEM_HIGH}"
128149
echo " [guard] checkov_failed: ${CKV_TOTAL}"
129150
echo " [guard] checkov_critical: ${CKV_CRIT}"
130151
echo " [guard] changed_paths: ${CHANGED_PATHS:-(none)}"
152+
echo " [guard] has_dockerfile: ${HAS_DOCKERFILE}"
153+
echo " [guard] has_python_deps: ${HAS_PYTHON_DEPS}"
154+
echo " [guard] has_node_deps: ${HAS_NODE_DEPS}"
155+
echo " [guard] has_terraform: ${HAS_TERRAFORM}"
156+
echo " [guard] has_setup_py: ${HAS_SETUP_PY}"
131157

132-
# JSON-Array aus Komma-Liste bauen — ohne jq-Dependency
158+
# ── JSON-Array aus Komma-Liste bauen — ohne jq-Dependency ────────────────
133159
if [ -n "$CHANGED_PATHS" ]; then
134160
PATHS_JSON="["
135161
IFS=',' read -ra PATH_ARR <<< "$CHANGED_PATHS"
136162
FIRST=1
137163
for p in "${PATH_ARR[@]}"; do
138164
[ -z "$p" ] && continue
139-
# Escape doppelte Anführungszeichen (selten in Pfaden, aber safety-first)
140165
p_escaped="${p//\"/\\\"}"
141166
if [ $FIRST -eq 1 ]; then
142167
PATHS_JSON="${PATHS_JSON}\"${p_escaped}\""
@@ -150,6 +175,7 @@ else
150175
PATHS_JSON="[]"
151176
fi
152177

178+
# ── Payload bauen & senden ───────────────────────────────────────────────
153179
PAYLOAD=$(cat <<EOF
154180
{
155181
"repo": "${GITHUB_REPO}",
@@ -173,7 +199,12 @@ PAYLOAD=$(cat <<EOF
173199
"semgrep_high_severity": ${SEM_HIGH},
174200
"checkov_failed_checks": ${CKV_TOTAL},
175201
"checkov_critical_failures": ${CKV_CRIT},
176-
"diff_changed_paths": ${PATHS_JSON}
202+
"diff_changed_paths": ${PATHS_JSON},
203+
"has_dockerfile": ${HAS_DOCKERFILE},
204+
"has_python_deps": ${HAS_PYTHON_DEPS},
205+
"has_node_deps": ${HAS_NODE_DEPS},
206+
"has_terraform": ${HAS_TERRAFORM},
207+
"has_setup_py": ${HAS_SETUP_PY}
177208
}
178209
EOF
179210
)
@@ -239,4 +270,4 @@ fi
239270

240271
if [ "$STATUS" = "PASS" ]; then
241272
echo "✅ Deployment freigegeben (${SCORE}/100)."
242-
fi
273+
fi

0 commit comments

Comments
 (0)