chore: sync staging workspace
This commit is contained in:
169
scripts/delete-all-workflow-runs.sh
Executable file
169
scripts/delete-all-workflow-runs.sh
Executable file
@@ -0,0 +1,169 @@
|
||||
#!/bin/bash
|
||||
# Script to delete all workflow runs from Gitea repository
|
||||
# Usage: ./scripts/delete-all-workflow-runs.sh [GITEA_TOKEN]
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# Colors
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
GITEA_URL="${GITEA_URL:-https://git.michaelschiemer.de}"
|
||||
REPO_OWNER="${REPO_OWNER:-michael}"
|
||||
REPO_NAME="${REPO_NAME:-michaelschiemer}"
|
||||
|
||||
# Try to get token from parameter, env var, CI_TOKEN, or Ansible vault
|
||||
if [ -n "${1:-}" ]; then
|
||||
GITEA_TOKEN="$1"
|
||||
elif [ -n "${GITEA_TOKEN:-}" ]; then
|
||||
# Token already set
|
||||
:
|
||||
elif [ -n "${CI_TOKEN:-}" ]; then
|
||||
GITEA_TOKEN="$CI_TOKEN"
|
||||
else
|
||||
# Try to extract from Ansible vault
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
VAULT_FILE="$PROJECT_ROOT/deployment/ansible/secrets/production.vault.yml"
|
||||
VAULT_PASS="$PROJECT_ROOT/deployment/ansible/.vault_pass"
|
||||
|
||||
if [ -f "$VAULT_FILE" ] && command -v ansible-playbook >/dev/null 2>&1; then
|
||||
echo -e "${BLUE}Trying to extract CI_TOKEN from Ansible vault...${NC}"
|
||||
if [ -f "$VAULT_PASS" ]; then
|
||||
TOKEN=$(cd "$PROJECT_ROOT" && ansible localhost -m debug -a "var=vault_git_token" -e "@deployment/ansible/secrets/production.vault.yml" --vault-password-file "$VAULT_PASS" 2>/dev/null | grep -oP "vault_git_token.*\"\K[^\"]+" | head -1 || echo "")
|
||||
else
|
||||
TOKEN=$(cd "$PROJECT_ROOT" && ansible localhost -m debug -a "var=vault_git_token" -e "@deployment/ansible/secrets/production.vault.yml" --ask-vault-pass <<< "" 2>/dev/null | grep -oP "vault_git_token.*\"\K[^\"]+" | head -1 || echo "")
|
||||
fi
|
||||
|
||||
if [ -n "$TOKEN" ] && [ "$TOKEN" != "null" ] && [ "$TOKEN" != "undefined" ]; then
|
||||
GITEA_TOKEN="$TOKEN"
|
||||
echo -e "${GREEN}? Token extracted from Ansible vault${NC}"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
echo -e "${BLUE}=== Gitea Workflow Runs Deletion ===${NC}"
|
||||
echo ""
|
||||
|
||||
# Check if token is provided
|
||||
if [ -z "$GITEA_TOKEN" ]; then
|
||||
echo -e "${YELLOW}?? GITEA_TOKEN nicht gesetzt${NC}"
|
||||
echo ""
|
||||
echo "Bitte generiere einen Gitea Access Token:"
|
||||
echo "1. Gehe zu: ${GITEA_URL}/user/settings/applications"
|
||||
echo "2. Klicke 'Generate New Token'"
|
||||
echo "3. Name: z.B. 'delete-workflow-runs'"
|
||||
echo "4. Scopes: 'write:repository' (mindestens)"
|
||||
echo "5. Kopiere den Token"
|
||||
echo ""
|
||||
echo "Dann f?hre aus:"
|
||||
echo " export GITEA_TOKEN='dein-token'"
|
||||
echo " ./scripts/delete-all-workflow-runs.sh"
|
||||
echo ""
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Function to get all workflow runs
|
||||
get_workflow_runs() {
|
||||
local page="${1:-1}"
|
||||
local per_page="${2:-100}"
|
||||
|
||||
curl -s \
|
||||
-H "Authorization: token ${GITEA_TOKEN}" \
|
||||
-H "Accept: application/json" \
|
||||
"${GITEA_URL}/api/v1/repos/${REPO_OWNER}/${REPO_NAME}/actions/runs?page=${page}&limit=${per_page}"
|
||||
}
|
||||
|
||||
# Function to delete a workflow run
|
||||
delete_workflow_run() {
|
||||
local run_id=$1
|
||||
|
||||
local response=$(curl -s -w "\n%{http_code}" \
|
||||
-X DELETE \
|
||||
-H "Authorization: token ${GITEA_TOKEN}" \
|
||||
"${GITEA_URL}/api/v1/repos/${REPO_OWNER}/${REPO_NAME}/actions/runs/${run_id}")
|
||||
|
||||
local http_code=$(echo "$response" | tail -n1)
|
||||
local body=$(echo "$response" | sed '$d')
|
||||
|
||||
if [ "$http_code" = "204" ] || [ "$http_code" = "200" ]; then
|
||||
return 0
|
||||
else
|
||||
echo -e "${RED}? FAILED (HTTP $http_code)${NC}"
|
||||
echo "Response: $body"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
echo "Repository: ${REPO_OWNER}/${REPO_NAME}"
|
||||
echo "Gitea URL: ${GITEA_URL}"
|
||||
echo ""
|
||||
|
||||
# Fetch all workflow runs
|
||||
echo -e "${BLUE}Fetching workflow runs...${NC}"
|
||||
all_runs=""
|
||||
page=1
|
||||
total_deleted=0
|
||||
|
||||
while true; do
|
||||
echo -n "Loading page ${page}... "
|
||||
runs_data=$(get_workflow_runs "$page" 100)
|
||||
|
||||
# Check if we got any runs
|
||||
if ! echo "$runs_data" | grep -q "\"workflow_runs\""; then
|
||||
echo "no more runs"
|
||||
break
|
||||
fi
|
||||
|
||||
# Extract run IDs using jq if available, otherwise use grep/sed
|
||||
if command -v jq >/dev/null 2>&1; then
|
||||
run_ids=$(echo "$runs_data" | jq -r '.workflow_runs[]?.id // empty' 2>/dev/null || echo "")
|
||||
total_count=$(echo "$runs_data" | jq -r '.total_count // 0' 2>/dev/null || echo "0")
|
||||
else
|
||||
# Fallback: extract IDs with grep/sed
|
||||
run_ids=$(echo "$runs_data" | grep -o '"id":[0-9]*' | grep -o '[0-9]*' || echo "")
|
||||
total_count=$(echo "$runs_data" | grep -o '"total_count":[0-9]*' | grep -o '[0-9]*' | head -1 || echo "0")
|
||||
fi
|
||||
|
||||
if [ -z "$run_ids" ]; then
|
||||
echo "no runs found"
|
||||
break
|
||||
fi
|
||||
|
||||
run_count=$(echo "$run_ids" | wc -l)
|
||||
echo "${run_count} runs found"
|
||||
|
||||
# Delete each run
|
||||
for run_id in $run_ids; do
|
||||
if [ -n "$run_id" ] && [ "$run_id" != "null" ]; then
|
||||
echo -n " Deleting run ${run_id}... "
|
||||
if delete_workflow_run "$run_id"; then
|
||||
echo -e "${GREEN}?${NC}"
|
||||
total_deleted=$((total_deleted + 1))
|
||||
else
|
||||
echo -e "${RED}?${NC}"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
# Check if there are more pages
|
||||
if command -v jq >/dev/null 2>&1; then
|
||||
has_more=$(echo "$runs_data" | jq -r 'if .workflow_runs | length > 0 then true else false end' 2>/dev/null || echo "false")
|
||||
else
|
||||
has_more=$(echo "$runs_data" | grep -q '"workflow_runs"' && echo "true" || echo "false")
|
||||
fi
|
||||
|
||||
if [ "$has_more" != "true" ] || [ "$run_count" -eq 0 ]; then
|
||||
break
|
||||
fi
|
||||
|
||||
page=$((page + 1))
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}=== Deletion Complete ===${NC}"
|
||||
echo -e "Total runs deleted: ${total_deleted}"
|
||||
echo ""
|
||||
Reference in New Issue
Block a user