From 18ba115bb527ce08316906c8085bd184c1dc8ac5 Mon Sep 17 00:00:00 2001 From: copilotcoder Date: Sat, 6 Jun 2026 00:15:18 -0400 Subject: [PATCH] More CICD fixes again again again again again again again again again again again again again again again Signed-off-by: copilotcoder --- .gitea/workflows/cicd-checks.yaml | 21 ++++++++++++- .gitea/workflows/cicd-start.yaml | 25 +++++++++++++++- .gitea/workflows/cicd-tests.yaml | 6 ++++ .gitea/workflows/cicd.yml | 14 ++++++++- .gitea/workflows/docker-build-base.yaml | 40 ++++++++++++++++++++++++- .gitea/workflows/docker-build-main.yaml | 21 ++++++++++++- 6 files changed, 122 insertions(+), 5 deletions(-) diff --git a/.gitea/workflows/cicd-checks.yaml b/.gitea/workflows/cicd-checks.yaml index fc1be3d..feac8ea 100644 --- a/.gitea/workflows/cicd-checks.yaml +++ b/.gitea/workflows/cicd-checks.yaml @@ -9,6 +9,9 @@ on: source_workflow: description: Upstream workflow name required: false + trace_id: + description: Correlation id propagated across CICD dispatch chain + required: false env: GITEA_REGISTRY: kankali.darkhelm.lan:3001 @@ -34,7 +37,9 @@ jobs: REF: ${{ github.ref }} REF_NAME: ${{ github.ref_name }} HEAD_REF: ${{ github.head_ref }} + TRACE_ID_INPUT: ${{ github.event.inputs.trace_id }} run: | + TRACE_ID="${TRACE_ID_INPUT:-cicd-checks-${GITHUB_RUN_ID}-${GITHUB_RUN_ATTEMPT}-${HEAD_SHA:0:8}}" echo "=== Dispatch Audit: CICD Checks ===" echo "event_name=${EVENT_NAME}" echo "source_workflow=${SOURCE_WORKFLOW}" @@ -42,6 +47,7 @@ jobs: echo "ref=${REF}" echo "ref_name=${REF_NAME}" echo "head_ref=${HEAD_REF}" + echo "trace_id=${TRACE_ID}" - name: Resolve head SHA id: meta @@ -130,6 +136,7 @@ jobs: REPO_FULL: ${{ github.repository }} HEAD_REF: ${{ github.head_ref }} REF_NAME: ${{ github.ref_name }} + TRACE_ID_INPUT: ${{ github.event.inputs.trace_id }} run: | set -e @@ -148,13 +155,19 @@ jobs: REPO_OWNER="${REPO_FULL%/*}" REPO_NAME="${REPO_FULL#*/}" TARGET_REF="${HEAD_REF:-${REF_NAME}}" + TRACE_ID="${TRACE_ID_INPUT:-cicd-checks-${GITHUB_RUN_ID}-${GITHUB_RUN_ATTEMPT}-${HEAD_SHA:0:8}}" + + echo "trace_id=${TRACE_ID}" + echo "target_ref=${TARGET_REF}" + echo "dispatch_api_base=${API_BASE}" payload=$(cat < "${RESPONSE_FILE}" + dispatch_start_ms=$(date +%s%3N) HTTP_CODE=$(curl -sS --connect-timeout 5 --max-time 20 -o "${RESPONSE_FILE}" -w "%{http_code}" -X POST \ -H "Authorization: token ${DISPATCH_TOKEN}" \ -H "Content-Type: application/json" \ "${DISPATCH_URL}" \ -d "${payload}" || true) + dispatch_end_ms=$(date +%s%3N) + dispatch_elapsed_ms=$((dispatch_end_ms - dispatch_start_ms)) + + echo "dispatch_elapsed_ms=${dispatch_elapsed_ms}" + echo "dispatch_http_code=${HTTP_CODE}" if [ "${HTTP_CODE}" -lt 200 ] || [ "${HTTP_CODE}" -ge 300 ]; then echo "❌ Dispatch failed with HTTP ${HTTP_CODE}" diff --git a/.gitea/workflows/cicd-start.yaml b/.gitea/workflows/cicd-start.yaml index 8f0495b..25207a6 100644 --- a/.gitea/workflows/cicd-start.yaml +++ b/.gitea/workflows/cicd-start.yaml @@ -6,6 +6,10 @@ on: pull_request: branches: [ main, develop ] workflow_dispatch: + inputs: + trace_id: + description: Correlation id propagated across CICD dispatch chain + required: false env: GITEA_SSH_HOST: kankali.darkhelm.lan @@ -39,7 +43,9 @@ jobs: REF_NAME: ${{ github.ref_name }} HEAD_REF: ${{ github.head_ref }} SHA: ${{ github.sha }} + TRACE_ID_INPUT: ${{ github.event.inputs.trace_id }} run: | + TRACE_ID="${TRACE_ID_INPUT:-cicd-start-${GITHUB_RUN_ID}-${GITHUB_RUN_ATTEMPT}-${SHA:0:8}}" echo "=== Dispatch Audit: CICD Start ===" echo "event_name=${EVENT_NAME}" echo "repository=${REPOSITORY}" @@ -48,6 +54,7 @@ jobs: echo "ref_name=${REF_NAME}" echo "head_ref=${HEAD_REF}" echo "sha=${SHA}" + echo "trace_id=${TRACE_ID}" - name: Configure registry host resolution run: | @@ -80,6 +87,7 @@ jobs: REPO_FULL: ${{ github.repository }} HEAD_REF: ${{ github.head_ref }} REF_NAME: ${{ github.ref_name }} + TRACE_ID_INPUT: ${{ github.event.inputs.trace_id }} run: | set -e @@ -93,6 +101,10 @@ jobs: REPO_OWNER="${REPO_FULL%/*}" REPO_NAME="${REPO_FULL#*/}" TARGET_REF="${HEAD_REF:-${REF_NAME}}" + TRACE_ID="${TRACE_ID_INPUT:-cicd-start-${GITHUB_RUN_ID}-${GITHUB_RUN_ATTEMPT}-${HEAD_SHA:0:8}}" + + echo "trace_id=${TRACE_ID}" + echo "target_ref=${TARGET_REF}" if [ "${BASE_NEEDED}" = "true" ]; then TARGET_WORKFLOW="docker-build-base.yaml" @@ -107,7 +119,8 @@ jobs: "head_sha": "${HEAD_SHA}", "base_hash": "${BASE_HASH}", "source_workflow": "CICD Start", - "base_needed": "${BASE_NEEDED}" + "base_needed": "${BASE_NEEDED}", + "trace_id": "${TRACE_ID}" } } EOF @@ -149,18 +162,28 @@ jobs: ensure_curl dispatched=false + total_attempts=${#CANDIDATE_API_BASES[@]} + attempt=0 for API_BASE in "${CANDIDATE_API_BASES[@]}"; do + attempt=$((attempt + 1)) DISPATCH_URL="${API_BASE}/repos/${REPO_OWNER}/${REPO_NAME}/actions/workflows/${TARGET_WORKFLOW}/dispatches" + echo "dispatch_attempt=${attempt}/${total_attempts}" + echo "dispatch_api_base=${API_BASE}" RESPONSE_FILE="/tmp/dispatch-response.txt" : > "${RESPONSE_FILE}" + dispatch_start_ms=$(date +%s%3N) HTTP_CODE=$(curl -sS --connect-timeout 5 --max-time 20 -o "${RESPONSE_FILE}" -w "%{http_code}" -X POST \ -H "Authorization: token ${DISPATCH_TOKEN}" \ -H "Content-Type: application/json" \ -H "User-Agent: plex-playlist-cicd-start" \ "${DISPATCH_URL}" \ -d "${payload}" || true) + dispatch_end_ms=$(date +%s%3N) + dispatch_elapsed_ms=$((dispatch_end_ms - dispatch_start_ms)) + echo "dispatch_elapsed_ms=${dispatch_elapsed_ms}" + echo "dispatch_http_code=${HTTP_CODE}" if [[ "${HTTP_CODE}" =~ ^[0-9]+$ ]] && [ "${HTTP_CODE}" -ge 200 ] && [ "${HTTP_CODE}" -lt 300 ]; then echo "✓ Dispatch succeeded via ${API_BASE}" diff --git a/.gitea/workflows/cicd-tests.yaml b/.gitea/workflows/cicd-tests.yaml index a6826e9..813e7e1 100644 --- a/.gitea/workflows/cicd-tests.yaml +++ b/.gitea/workflows/cicd-tests.yaml @@ -9,6 +9,9 @@ on: source_workflow: description: Upstream workflow name required: false + trace_id: + description: Correlation id propagated across CICD dispatch chain + required: false env: GITEA_REGISTRY: kankali.darkhelm.lan:3001 @@ -34,7 +37,9 @@ jobs: REF: ${{ github.ref }} REF_NAME: ${{ github.ref_name }} HEAD_REF: ${{ github.head_ref }} + TRACE_ID_INPUT: ${{ github.event.inputs.trace_id }} run: | + TRACE_ID="${TRACE_ID_INPUT:-cicd-tests-${GITHUB_RUN_ID}-${GITHUB_RUN_ATTEMPT}-${HEAD_SHA:0:8}}" echo "=== Dispatch Audit: CICD Tests ===" echo "event_name=${EVENT_NAME}" echo "source_workflow=${SOURCE_WORKFLOW}" @@ -42,6 +47,7 @@ jobs: echo "ref=${REF}" echo "ref_name=${REF_NAME}" echo "head_ref=${HEAD_REF}" + echo "trace_id=${TRACE_ID}" - name: Resolve head SHA id: meta diff --git a/.gitea/workflows/cicd.yml b/.gitea/workflows/cicd.yml index 24c8825..cb7a015 100644 --- a/.gitea/workflows/cicd.yml +++ b/.gitea/workflows/cicd.yml @@ -49,13 +49,19 @@ jobs: REPO_OWNER="${REPO_FULL%/*}" REPO_NAME="${REPO_FULL#*/}" TARGET_REF="${HEAD_REF:-${REF_NAME}}" + TRACE_ID="cicd-${GITHUB_RUN_ID}-${GITHUB_RUN_ATTEMPT}-${HEAD_SHA:0:8}" + + echo "trace_id=${TRACE_ID}" + echo "target_ref=${TARGET_REF}" + echo "api_base=${API_BASE}" payload=$(cat < "${RESPONSE_FILE}" + dispatch_start_ms=$(date +%s%3N) HTTP_CODE=$(curl -sS --connect-timeout 5 --max-time 20 -o "${RESPONSE_FILE}" -w "%{http_code}" -X POST \ -H "Authorization: token ${DISPATCH_TOKEN}" \ -H "Content-Type: application/json" \ "${DISPATCH_URL}" \ -d "${payload}" || true) + dispatch_end_ms=$(date +%s%3N) + dispatch_elapsed_ms=$((dispatch_end_ms - dispatch_start_ms)) + + echo "dispatch_elapsed_ms=${dispatch_elapsed_ms}" + echo "dispatch_http_code=${HTTP_CODE}" if [ "${HTTP_CODE}" -lt 200 ] || [ "${HTTP_CODE}" -ge 300 ]; then echo "❌ Dispatch failed with HTTP ${HTTP_CODE}" diff --git a/.gitea/workflows/docker-build-base.yaml b/.gitea/workflows/docker-build-base.yaml index f450ab6..8336afc 100644 --- a/.gitea/workflows/docker-build-base.yaml +++ b/.gitea/workflows/docker-build-base.yaml @@ -13,6 +13,9 @@ on: source_workflow: description: Upstream workflow name required: false + trace_id: + description: Correlation id propagated across CICD dispatch chain + required: false concurrency: group: base-${{ github.sha }} @@ -36,6 +39,28 @@ jobs: head_sha: ${{ steps.meta.outputs.head_sha }} steps: + - name: Audit trigger context + env: + EVENT_NAME: ${{ github.event_name }} + SOURCE_WORKFLOW: ${{ github.event.inputs.source_workflow }} + FORCE_REBUILD: ${{ github.event.inputs.force_rebuild }} + TRACE_ID_INPUT: ${{ github.event.inputs.trace_id }} + HEAD_SHA: ${{ github.sha }} + REF: ${{ github.ref }} + REF_NAME: ${{ github.ref_name }} + HEAD_REF: ${{ github.head_ref }} + run: | + TRACE_ID="${TRACE_ID_INPUT:-cicd-base-${GITHUB_RUN_ID}-${GITHUB_RUN_ATTEMPT}-${HEAD_SHA:0:8}}" + echo "=== Dispatch Audit: CICD Base Image ===" + echo "event_name=${EVENT_NAME}" + echo "source_workflow=${SOURCE_WORKFLOW}" + echo "force_rebuild=${FORCE_REBUILD}" + echo "head_sha=${HEAD_SHA}" + echo "ref=${REF}" + echo "ref_name=${REF_NAME}" + echo "head_ref=${HEAD_REF}" + echo "trace_id=${TRACE_ID}" + - name: Resolve head SHA id: meta env: @@ -290,6 +315,7 @@ jobs: REPO_FULL: ${{ github.repository }} HEAD_REF: ${{ github.head_ref }} REF_NAME: ${{ github.ref_name }} + TRACE_ID_INPUT: ${{ github.event.inputs.trace_id }} run: | set -e @@ -308,6 +334,11 @@ jobs: REPO_OWNER="${REPO_FULL%/*}" REPO_NAME="${REPO_FULL#*/}" TARGET_REF="${HEAD_REF:-${REF_NAME}}" + TRACE_ID="${TRACE_ID_INPUT:-cicd-base-${GITHUB_RUN_ID}-${GITHUB_RUN_ATTEMPT}-${HEAD_SHA:0:8}}" + + echo "trace_id=${TRACE_ID}" + echo "target_ref=${TARGET_REF}" + echo "dispatch_api_base=${API_BASE}" if ! command -v curl >/dev/null 2>&1; then export DEBIAN_FRONTEND=noninteractive @@ -322,7 +353,8 @@ jobs: "head_sha": "${HEAD_SHA}", "base_hash": "${BASE_HASH}", "source_workflow": "CICD Base Image", - "base_needed": "true" + "base_needed": "true", + "trace_id": "${TRACE_ID}" } } EOF @@ -331,11 +363,17 @@ jobs: DISPATCH_URL="${API_BASE}/repos/${REPO_OWNER}/${REPO_NAME}/actions/workflows/docker-build-main.yaml/dispatches" RESPONSE_FILE="/tmp/dispatch-response.txt" : > "${RESPONSE_FILE}" + dispatch_start_ms=$(date +%s%3N) HTTP_CODE=$(curl -sS --connect-timeout 5 --max-time 20 -o "${RESPONSE_FILE}" -w "%{http_code}" -X POST \ -H "Authorization: token ${DISPATCH_TOKEN}" \ -H "Content-Type: application/json" \ "${DISPATCH_URL}" \ -d "${payload}" || true) + dispatch_end_ms=$(date +%s%3N) + dispatch_elapsed_ms=$((dispatch_end_ms - dispatch_start_ms)) + + echo "dispatch_elapsed_ms=${dispatch_elapsed_ms}" + echo "dispatch_http_code=${HTTP_CODE}" if ! [[ "${HTTP_CODE}" =~ ^[0-9]+$ ]] || [ "${HTTP_CODE}" -lt 200 ] || [ "${HTTP_CODE}" -ge 300 ]; then echo "❌ Dispatch failed with HTTP ${HTTP_CODE}" diff --git a/.gitea/workflows/docker-build-main.yaml b/.gitea/workflows/docker-build-main.yaml index adc9844..1ca3aa9 100644 --- a/.gitea/workflows/docker-build-main.yaml +++ b/.gitea/workflows/docker-build-main.yaml @@ -15,6 +15,9 @@ on: base_needed: description: Whether base rebuild was required required: false + trace_id: + description: Correlation id propagated across CICD dispatch chain + required: false env: GITEA_SSH_HOST: kankali.darkhelm.lan @@ -47,7 +50,9 @@ jobs: REF: ${{ github.ref }} REF_NAME: ${{ github.ref_name }} HEAD_REF: ${{ github.head_ref }} + TRACE_ID_INPUT: ${{ github.event.inputs.trace_id }} run: | + TRACE_ID="${TRACE_ID_INPUT:-cicd-main-${GITHUB_RUN_ID}-${GITHUB_RUN_ATTEMPT}-${HEAD_SHA:0:8}}" echo "=== Dispatch Audit: CICD Main Build ===" echo "event_name=${EVENT_NAME}" echo "source_workflow=${SOURCE_WORKFLOW}" @@ -57,6 +62,7 @@ jobs: echo "ref=${REF}" echo "ref_name=${REF_NAME}" echo "head_ref=${HEAD_REF}" + echo "trace_id=${TRACE_ID}" - name: Resolve head SHA id: meta @@ -188,6 +194,7 @@ jobs: REPO_FULL: ${{ github.repository }} HEAD_REF: ${{ github.head_ref }} REF_NAME: ${{ github.ref_name }} + TRACE_ID_INPUT: ${{ github.event.inputs.trace_id }} run: | set -e @@ -206,13 +213,19 @@ jobs: REPO_OWNER="${REPO_FULL%/*}" REPO_NAME="${REPO_FULL#*/}" TARGET_REF="${HEAD_REF:-${REF_NAME}}" + TRACE_ID="${TRACE_ID_INPUT:-cicd-main-${GITHUB_RUN_ID}-${GITHUB_RUN_ATTEMPT}-${HEAD_SHA:0:8}}" + + echo "trace_id=${TRACE_ID}" + echo "target_ref=${TARGET_REF}" + echo "dispatch_api_base=${API_BASE}" payload=$(cat < "${RESPONSE_FILE}" + dispatch_start_ms=$(date +%s%3N) HTTP_CODE=$(curl -sS --connect-timeout 5 --max-time 20 -o "${RESPONSE_FILE}" -w "%{http_code}" -X POST \ -H "Authorization: token ${DISPATCH_TOKEN}" \ -H "Content-Type: application/json" \ "${DISPATCH_URL}" \ -d "${payload}" || true) + dispatch_end_ms=$(date +%s%3N) + dispatch_elapsed_ms=$((dispatch_end_ms - dispatch_start_ms)) + + echo "dispatch_elapsed_ms=${dispatch_elapsed_ms}" + echo "dispatch_http_code=${HTTP_CODE}" if [ "${HTTP_CODE}" -lt 200 ] || [ "${HTTP_CODE}" -ge 300 ]; then echo "❌ Dispatch failed with HTTP ${HTTP_CODE}"