feat: add some scripts

This commit is contained in:
Dominik Polakovics Polakovics 2026-02-03 09:46:43 +01:00
parent 39a98152ba
commit f8f2bd75b1
5 changed files with 320 additions and 0 deletions

57
scripts/scan-actions.sh Executable file
View file

@ -0,0 +1,57 @@
#!/usr/bin/env bash
# Scan git repositories for GitHub/Gitea/Forgejo Actions used in workflows
# Usage: ./scripts/scan-actions.sh /var/lib/gitea/repositories
set -euo pipefail
# Wrapper to handle safe.directory issues when running as root
git_cmd() {
git -c safe.directory='*' "$@"
}
if [[ $# -ne 1 ]]; then
echo "Usage: $0 <base-folder>" >&2
echo "Example: $0 /var/lib/gitea/repositories" >&2
exit 1
fi
BASE_DIR="$1"
if [[ ! -d "$BASE_DIR" ]]; then
echo "Error: Directory '$BASE_DIR' does not exist" >&2
exit 1
fi
# Find all bare git repositories
find "$BASE_DIR" -type d -name "*.git" -print0 2>/dev/null | while IFS= read -r -d '' repo; do
# Get all branch refs
branches=$(git_cmd -C "$repo" for-each-ref --format='%(refname:short)' refs/heads/ 2>/dev/null || true)
if [[ -z "$branches" ]]; then
continue
fi
for branch in $branches; do
# Check all workflow directories
for workflow_dir in ".github/workflows" ".gitea/workflows" ".forgejo/workflows"; do
# List files in the workflow directory
files=$(git_cmd -C "$repo" ls-tree --name-only "$branch":"$workflow_dir" 2>/dev/null || true)
for file in $files; do
# Only process .yml and .yaml files
case "$file" in
*.yml|*.yaml)
# Read the file content and extract uses: statements
git_cmd -C "$repo" show "$branch:$workflow_dir/$file" 2>/dev/null || true
;;
esac
done
done
done
done | \
# Extract uses: values - match owner/repo@ref or owner/repo/path@ref pattern
grep -oE 'uses:\s*["'"'"']?[a-zA-Z0-9_.-]+/[a-zA-Z0-9_./-]+@[a-zA-Z0-9_.-]+' | \
# Remove the uses: prefix and any quotes
sed -E 's/uses:\s*["'"'"']?//' | \
# Sort and deduplicate
sort -u