config/.github/actions/wait-for-hydra-build.yml
2024-10-19 22:58:49 -04:00

91 lines
3.2 KiB
YAML

name: 'Wait for Hydra Build'
description: 'Waits for a Hydra build to complete and returns the build status'
inputs:
hydra_instance:
description: 'URL of the Hydra instance'
required: true
hydra_project:
description: 'Name of the Hydra project'
required: true
hydra_jobset:
description: 'Name of the Hydra jobset'
required: true
hydra_username:
description: 'Username for Hydra authentication'
required: true
hydra_password:
description: 'Password for Hydra authentication'
required: true
max_attempts:
description: 'Maximum number of attempts to check build status'
required: false
default: '60'
wait_interval:
description: 'Interval in seconds between status checks'
required: false
default: '120'
outputs:
build_success:
description: 'Whether the build succeeded (true) or failed (false)'
value: ${{ steps.wait-for-build.outputs.build_success }}
runs:
using: "composite"
steps:
- name: Wait for Hydra build
id: wait-for-build
shell: bash
run: |
AUTH_HEADER="Authorization: Basic $(echo -n '${{ inputs.hydra_username }}:${{ inputs.hydra_password }}' | base64)"
attempt=0
max_attempts=${{ inputs.max_attempts }}
wait_interval=${{ inputs.wait_interval }}
while [ $attempt -lt $max_attempts ]; do
echo "Attempt $((attempt + 1))/$max_attempts"
response=$(curl -s -H "$AUTH_HEADER" \
"${{ inputs.hydra_instance }}/api/jobsets?project=${{ inputs.hydra_project }}")
jobset=$(echo "$response" | jq -r '.[] | select(.name == "${{ inputs.hydra_jobset }}")')
if [ -z "$jobset" ]; then
echo "Jobset ${{ inputs.hydra_jobset }} not found. Waiting..."
sleep $wait_interval
attempt=$((attempt + 1))
continue
fi
nrscheduled=$(echo "$jobset" | jq -r '.nrscheduled')
nrfailed=$(echo "$jobset" | jq -r '.nrfailed')
nrsucceeded=$(echo "$jobset" | jq -r '.nrsucceeded')
nrtotal=$(echo "$jobset" | jq -r '.nrtotal')
echo "Status: nrscheduled=$nrscheduled, nrfailed=$nrfailed, nrsucceeded=$nrsucceeded, nrtotal=$nrtotal"
if [ "$nrtotal" = "0" ]; then
echo "Build not started yet. Waiting..."
elif [ "$nrfailed" != "0" ]; then
echo "build_success=false" >> $GITHUB_OUTPUT
echo "Build failed"
exit 0
elif [ "$nrsucceeded" = "$nrtotal" ] && [ "$nrtotal" != "0" ]; then
echo "build_success=true" >> $GITHUB_OUTPUT
echo "Build succeeded"
exit 0
elif [ "$nrscheduled" = "0" ] && [ "$nrsucceeded" != "0" ] && [ "$nrsucceeded" = "$nrtotal" ]; then
echo "build_success=true" >> $GITHUB_OUTPUT
echo "Build succeeded"
exit 0
else
echo "Build in progress. Waiting..."
fi
sleep $wait_interval
attempt=$((attempt + 1))
done
echo "build_success=false" >> $GITHUB_OUTPUT
echo "Timeout reached. Build considered failed."
exit 1