name: Maintenance jobs on: workflow_dispatch: inputs: job: description: Allowlisted maintenance job required: true type: choice options: - cv-benchmark jobs: cv-benchmark: if: inputs.job == 'cv-benchmark' runs-on: ubuntu-latest steps: - name: Run private corpus benchmark on production uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.PROD_HOST }} username: ${{ secrets.PROD_USER }} key: ${{ secrets.PROD_SSH_KEY }} command_timeout: 30m script: | set -euo pipefail cd /opt/job-tracker/app corpus_dir=/home/pi/cvs approved_dir="$corpus_dir/approved-jsons" output_dir="$(mktemp -d)/latest" cleanup() { rm -rf "$(dirname "$output_dir")"; } trap cleanup EXIT AI_SERVICE_TOKEN="$(sed -n 's/^AI_SERVICE_TOKEN=//p' /opt/job-tracker/shared/.env | tail -n 1)" if [ -z "$AI_SERVICE_TOKEN" ]; then echo "AI_SERVICE_TOKEN is not configured." >&2 exit 1 fi ai_id="$(docker compose -f docker-compose.yml ps -q ai-service)" ai_ip="$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$ai_id")" if [ -z "$ai_ip" ]; then echo "The AI extraction service is not running." >&2 exit 1 fi chmod +x scripts/run-cv-benchmark.sh CV_BENCHMARK_CORPUS_DIR="$corpus_dir" \ CV_BENCHMARK_OUTPUT_DIR="$output_dir" \ CV_BENCHMARK_APPROVED_DIR="$approved_dir" \ CV_AI_BASE_URL="http://$ai_ip:8001" \ CV_AI_SERVICE_TOKEN="$AI_SERVICE_TOKEN" \ scripts/run-cv-benchmark.sh backend_id="$(docker compose -f docker-compose.yml ps -q backend)" if [ -z "$backend_id" ]; then echo "The backend container is not running." >&2 exit 1 fi docker exec "$backend_id" sh -c 'mkdir -p /data/CvBenchmarks' docker cp "$output_dir/." "$backend_id:/data/CvBenchmarks/" docker exec "$backend_id" test -s /data/CvBenchmarks/index.json docker exec "$backend_id" test -s /data/CvBenchmarks/report.md