Test Dev Image #119
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |