feat(#344): Add Woodpecker CI pipeline monitoring to cli-tools

- Add ci-pipeline-status.sh for checking pipeline status
- Add ci-pipeline-logs.sh for fetching logs
- Add ci-pipeline-wait.sh for waiting on completion
- Update package.json bin section
- Update README with CI commands and examples

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-02-07 11:13:43 -06:00
parent bed440dc36
commit ec87c5479b
5 changed files with 414 additions and 5 deletions

View File

@@ -0,0 +1,111 @@
#!/bin/bash
# ci-pipeline-logs.sh - Fetch Woodpecker CI pipeline logs
# Usage: ci-pipeline-logs.sh -n <pipeline_num> [-r <repo>] [-s <step>]
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/detect-platform.sh"
# Parse arguments
REPO=""
PIPELINE_NUM=""
STEP=""
show_help() {
cat << EOF
Usage: ci-pipeline-logs.sh [OPTIONS]
Fetch logs for a Woodpecker CI pipeline.
Options:
-n, --number <num> Pipeline number (required)
-r, --repo <owner/repo> Repository (default: auto-detect from git remote)
-s, --step <step> Specific step name/number
-h, --help Show this help
Environment:
WOODPECKER_SERVER Woodpecker server URL (required)
WOODPECKER_TOKEN Woodpecker API token (required)
Examples:
# Get all logs for pipeline 42
ci-pipeline-logs.sh -n 42
# Get logs for specific step
ci-pipeline-logs.sh -n 42 -s test
# Get logs for specific repo
ci-pipeline-logs.sh -r mosaic/stack -n 42
EOF
}
while [[ $# -gt 0 ]]; do
case $1 in
-r|--repo)
REPO="$2"
shift 2
;;
-n|--number)
PIPELINE_NUM="$2"
shift 2
;;
-s|--step)
STEP="$2"
shift 2
;;
-h|--help)
show_help
exit 0
;;
*)
echo "Unknown option: $1"
show_help
exit 1
;;
esac
done
# Validate required arguments
if [[ -z "$PIPELINE_NUM" ]]; then
echo "Error: Pipeline number is required (-n)"
show_help
exit 1
fi
# Check required environment variables
if [[ -z "$WOODPECKER_SERVER" ]]; then
echo "Error: WOODPECKER_SERVER environment variable not set"
exit 1
fi
if [[ -z "$WOODPECKER_TOKEN" ]]; then
echo "Error: WOODPECKER_TOKEN environment variable not set"
exit 1
fi
# Auto-detect repo if not provided
if [[ -z "$REPO" ]]; then
REPO=$(get_repo_info)
if [[ $? -ne 0 ]]; then
echo "Error: Could not auto-detect repository. Use -r option."
exit 1
fi
fi
# Check if woodpecker CLI is installed
if ! command -v woodpecker &> /dev/null; then
echo "Error: woodpecker CLI not found. Install it first:"
echo " Arch: paru -S woodpecker"
echo " Other: https://woodpecker-ci.org/docs/usage/cli"
exit 1
fi
# Get pipeline logs
if [[ -n "$STEP" ]]; then
# Get logs for specific step
woodpecker log show "$REPO" "$PIPELINE_NUM" "$STEP"
else
# Get all logs
woodpecker log show "$REPO" "$PIPELINE_NUM"
fi

View File

@@ -0,0 +1,108 @@
#!/bin/bash
# ci-pipeline-status.sh - Check Woodpecker CI pipeline status
# Usage: ci-pipeline-status.sh [-r <repo>] [-n <pipeline_num>] [--latest]
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/detect-platform.sh"
# Parse arguments
REPO=""
PIPELINE_NUM=""
LATEST=false
show_help() {
cat << EOF
Usage: ci-pipeline-status.sh [OPTIONS]
Check Woodpecker CI pipeline status for a repository.
Options:
-r, --repo <owner/repo> Repository (default: auto-detect from git remote)
-n, --number <num> Pipeline number
--latest Get status of latest pipeline
-h, --help Show this help
Environment:
WOODPECKER_SERVER Woodpecker server URL (required)
WOODPECKER_TOKEN Woodpecker API token (required)
Examples:
# Get latest pipeline status for current repo
ci-pipeline-status.sh --latest
# Get specific pipeline status
ci-pipeline-status.sh -n 42
# Get pipeline status for specific repo
ci-pipeline-status.sh -r mosaic/stack --latest
EOF
}
while [[ $# -gt 0 ]]; do
case $1 in
-r|--repo)
REPO="$2"
shift 2
;;
-n|--number)
PIPELINE_NUM="$2"
shift 2
;;
--latest)
LATEST=true
shift
;;
-h|--help)
show_help
exit 0
;;
*)
echo "Unknown option: $1"
show_help
exit 1
;;
esac
done
# Check required environment variables
if [[ -z "$WOODPECKER_SERVER" ]]; then
echo "Error: WOODPECKER_SERVER environment variable not set"
exit 1
fi
if [[ -z "$WOODPECKER_TOKEN" ]]; then
echo "Error: WOODPECKER_TOKEN environment variable not set"
exit 1
fi
# Auto-detect repo if not provided
if [[ -z "$REPO" ]]; then
REPO=$(get_repo_info)
if [[ $? -ne 0 ]]; then
echo "Error: Could not auto-detect repository. Use -r option."
exit 1
fi
fi
# Check if woodpecker CLI is installed
if ! command -v woodpecker &> /dev/null; then
echo "Error: woodpecker CLI not found. Install it first:"
echo " Arch: paru -S woodpecker"
echo " Other: https://woodpecker-ci.org/docs/usage/cli"
exit 1
fi
# Get pipeline status
if [[ "$LATEST" == true ]]; then
# Get latest pipeline
woodpecker pipeline ls "$REPO" --limit 1
elif [[ -n "$PIPELINE_NUM" ]]; then
# Get specific pipeline info
woodpecker pipeline info "$REPO" "$PIPELINE_NUM"
else
echo "Error: Either --latest or -n <number> is required"
show_help
exit 1
fi

View File

@@ -0,0 +1,152 @@
#!/bin/bash
# ci-pipeline-wait.sh - Wait for Woodpecker CI pipeline completion
# Usage: ci-pipeline-wait.sh -n <pipeline_num> [-r <repo>] [-t <timeout>]
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/detect-platform.sh"
# Parse arguments
REPO=""
PIPELINE_NUM=""
TIMEOUT=1800 # 30 minutes default
POLL_INTERVAL=10 # 10 seconds
show_help() {
cat << EOF
Usage: ci-pipeline-wait.sh [OPTIONS]
Wait for a Woodpecker CI pipeline to complete.
Options:
-n, --number <num> Pipeline number (required)
-r, --repo <owner/repo> Repository (default: auto-detect from git remote)
-t, --timeout <seconds> Timeout in seconds (default: 1800)
-i, --interval <seconds> Poll interval in seconds (default: 10)
-h, --help Show this help
Environment:
WOODPECKER_SERVER Woodpecker server URL (required)
WOODPECKER_TOKEN Woodpecker API token (required)
Exit codes:
0 - Pipeline succeeded
1 - Error or timeout
2 - Pipeline failed
3 - Pipeline killed/cancelled
Examples:
# Wait for pipeline 42 to complete
ci-pipeline-wait.sh -n 42
# Wait with custom timeout (10 minutes)
ci-pipeline-wait.sh -n 42 -t 600
EOF
}
while [[ $# -gt 0 ]]; do
case $1 in
-r|--repo)
REPO="$2"
shift 2
;;
-n|--number)
PIPELINE_NUM="$2"
shift 2
;;
-t|--timeout)
TIMEOUT="$2"
shift 2
;;
-i|--interval)
POLL_INTERVAL="$2"
shift 2
;;
-h|--help)
show_help
exit 0
;;
*)
echo "Unknown option: $1"
show_help
exit 1
;;
esac
done
# Validate required arguments
if [[ -z "$PIPELINE_NUM" ]]; then
echo "Error: Pipeline number is required (-n)"
show_help
exit 1
fi
# Check required environment variables
if [[ -z "$WOODPECKER_SERVER" ]]; then
echo "Error: WOODPECKER_SERVER environment variable not set"
exit 1
fi
if [[ -z "$WOODPECKER_TOKEN" ]]; then
echo "Error: WOODPECKER_TOKEN environment variable not set"
exit 1
fi
# Auto-detect repo if not provided
if [[ -z "$REPO" ]]; then
REPO=$(get_repo_info)
if [[ $? -ne 0 ]]; then
echo "Error: Could not auto-detect repository. Use -r option."
exit 1
fi
fi
# Check if woodpecker CLI is installed
if ! command -v woodpecker &> /dev/null; then
echo "Error: woodpecker CLI not found. Install it first:"
echo " Arch: paru -S woodpecker"
echo " Other: https://woodpecker-ci.org/docs/usage/cli"
exit 1
fi
echo "Waiting for pipeline #$PIPELINE_NUM in $REPO (timeout: ${TIMEOUT}s)..."
elapsed=0
while [[ $elapsed -lt $TIMEOUT ]]; do
# Get pipeline info
pipeline_info=$(woodpecker pipeline info "$REPO" "$PIPELINE_NUM" 2>&1)
# Extract status from output
# Woodpecker CLI outputs status in format like "STATUS: success"
if echo "$pipeline_info" | grep -q "success"; then
echo "✓ Pipeline succeeded"
exit 0
elif echo "$pipeline_info" | grep -q "failure\|error"; then
echo "✗ Pipeline failed"
echo ""
echo "$pipeline_info"
exit 2
elif echo "$pipeline_info" | grep -q "killed\|cancelled"; then
echo "✗ Pipeline was cancelled"
echo ""
echo "$pipeline_info"
exit 3
elif echo "$pipeline_info" | grep -q "pending\|running"; then
# Still running
echo -n "."
sleep "$POLL_INTERVAL"
elapsed=$((elapsed + POLL_INTERVAL))
else
# Unknown status, show info and continue
echo ""
echo "Unknown status, continuing to wait..."
echo "$pipeline_info"
sleep "$POLL_INTERVAL"
elapsed=$((elapsed + POLL_INTERVAL))
fi
done
echo ""
echo "✗ Timeout after ${TIMEOUT}s"
exit 1