91 lines
3.2 KiB
YAML
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
|