mirror of
https://github.com/langbot-app/LangBot.git
synced 2025-11-25 03:15:06 +08:00
109 lines
3.2 KiB
YAML
109 lines
3.2 KiB
YAML
name: Test Dev Image
|
|
|
|
on:
|
|
workflow_run:
|
|
workflows: ["Build Dev Image"]
|
|
types:
|
|
- completed
|
|
branches:
|
|
- master
|
|
|
|
jobs:
|
|
test-dev-image:
|
|
runs-on: ubuntu-latest
|
|
# Only run if the build workflow succeeded
|
|
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Update Docker Compose to use master tag
|
|
working-directory: ./docker
|
|
run: |
|
|
# Replace 'latest' with 'master' tag for testing the dev image
|
|
sed -i 's/rockchin\/langbot:latest/rockchin\/langbot:master/g' docker-compose.yaml
|
|
echo "Updated docker-compose.yaml to use master tag:"
|
|
cat docker-compose.yaml
|
|
|
|
- name: Start Docker Compose
|
|
working-directory: ./docker
|
|
run: docker compose up -d
|
|
|
|
- name: Wait and Test API
|
|
run: |
|
|
# Function to test API endpoint
|
|
test_api() {
|
|
echo "Testing API endpoint..."
|
|
response=$(curl -s --connect-timeout 10 --max-time 30 -w "\n%{http_code}" http://localhost:5300/api/v1/system/info 2>&1)
|
|
curl_exit_code=$?
|
|
|
|
if [ $curl_exit_code -ne 0 ]; then
|
|
echo "Curl failed with exit code: $curl_exit_code"
|
|
echo "Error: $response"
|
|
return 1
|
|
fi
|
|
|
|
http_code=$(echo "$response" | tail -n 1)
|
|
response_body=$(echo "$response" | head -n -1)
|
|
|
|
if [ "$http_code" = "200" ]; then
|
|
echo "API is healthy! Response code: $http_code"
|
|
echo "Response: $response_body"
|
|
return 0
|
|
else
|
|
echo "API returned non-200 response: $http_code"
|
|
echo "Response body: $response_body"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Wait 30 seconds before first attempt
|
|
echo "Waiting 30 seconds for services to start..."
|
|
sleep 30
|
|
|
|
# Try up to 3 times with 30-second intervals
|
|
max_attempts=3
|
|
attempt=1
|
|
|
|
while [ $attempt -le $max_attempts ]; do
|
|
echo "Attempt $attempt of $max_attempts"
|
|
|
|
if test_api; then
|
|
echo "Success! API is responding correctly."
|
|
exit 0
|
|
fi
|
|
|
|
if [ $attempt -lt $max_attempts ]; then
|
|
echo "Retrying in 30 seconds..."
|
|
sleep 30
|
|
fi
|
|
|
|
attempt=$((attempt + 1))
|
|
done
|
|
|
|
# All attempts failed
|
|
echo "Failed to get healthy response after $max_attempts attempts"
|
|
exit 1
|
|
|
|
- name: Show Container Logs on Failure
|
|
if: failure()
|
|
working-directory: ./docker
|
|
run: |
|
|
echo "=== Docker Compose Status ==="
|
|
docker compose ps
|
|
echo ""
|
|
echo "=== LangBot Logs ==="
|
|
docker compose logs langbot
|
|
echo ""
|
|
echo "=== Plugin Runtime Logs ==="
|
|
docker compose logs langbot_plugin_runtime
|
|
|
|
- name: Cleanup
|
|
if: always()
|
|
working-directory: ./docker
|
|
run: docker compose down
|