Skip to content

Enahnce DataEngine Swagger Endpoints Description #474

Enahnce DataEngine Swagger Endpoints Description

Enahnce DataEngine Swagger Endpoints Description #474

name: Playwright Tests
on:
workflow_dispatch:
pull_request:
branches:
- 'main'
- 'develop'
- 'release/**'
- 'hotfix/**'
push:
branches:
- 'main'
- 'develop'
- 'release/**'
- 'hotfix/**'
permissions:
contents: read
env:
BUILD_CONFIGURATION: "Release"
SOLUTION_PATH: source/AAS.TwinEngine.DataEngine.sln
PLAYWRIGHT_TEST_PROJECT: source/AAS.TwinEngine.Plugin.TestPlugin.PlaywrightTests/AAS.TwinEngine.Plugin.TestPlugin.PlaywrightTests.csproj
DOCKER_COMPOSE_PATH: source/AAS.TwinEngine.Plugin.TestPlugin/Example
BASE_URL: "http://localhost:8085"
jobs:
playwright-tests:
name: Run Playwright Tests
runs-on: ubuntu-latest
timeout-minutes: 30
permissions:
contents: read
checks: write
pull-requests: write
steps:
- name: Checkout code
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- name: Setup .NET
uses: actions/setup-dotnet@9a946fdbd5fb07b82b2f5a4466058b876ab72bb2 # v5.3.0
with:
dotnet-version: "8.0.x"
- name: Restore dependencies
run: dotnet restore ${{ env.SOLUTION_PATH }} --locked-mode
- name: Build solution
run: dotnet build ${{ env.SOLUTION_PATH }} --configuration ${{ env.BUILD_CONFIGURATION }} --no-restore
- name: Build Playwright test project
run: dotnet build ${{ env.PLAYWRIGHT_TEST_PROJECT }} --configuration ${{ env.BUILD_CONFIGURATION }} --no-restore
- name: Start Docker Compose services
run: |
cd ${{ env.DOCKER_COMPOSE_PATH }}
docker compose up -d
env:
COMPOSE_HTTP_TIMEOUT: 200
- name: Wait for services to be healthy
run: |
cd ${{ env.DOCKER_COMPOSE_PATH }}
echo "Waiting for services to be healthy..."
MAX_WAIT=300
ELAPSED=0
INTERVAL=10
while [ $ELAPSED -lt $MAX_WAIT ]; do
# Check if all services are running
RUNNING=$(docker compose ps --status running --format json 2>/dev/null | jq -s 'length' 2>/dev/null || echo "0")
TOTAL=$(docker compose ps --format json 2>/dev/null | jq -s 'length' 2>/dev/null || echo "0")
echo "Running containers: $RUNNING/$TOTAL"
# Check for any unhealthy services
UNHEALTHY=$(docker compose ps --format json 2>/dev/null | jq -r 'select(.Health != "" and .Health != "healthy") | .Service' 2>/dev/null | wc -l)
if [ $RUNNING -ge 6 ] && [ $UNHEALTHY -eq 0 ]; then
echo "Services are up and running!"
docker compose ps
break
fi
echo "Waiting for services... ($ELAPSED/$MAX_WAIT seconds)"
sleep $INTERVAL
ELAPSED=$((ELAPSED + INTERVAL))
done
if [ $ELAPSED -ge $MAX_WAIT ]; then
echo "Timeout waiting for services to be ready"
echo "Current service status:"
docker compose ps
echo "Service logs:"
docker compose logs --tail=100
exit 1
fi
# Additional wait to ensure services are fully ready
echo "Waiting additional 20 seconds for services to stabilize..."
sleep 20
# Verify critical endpoints are responding
echo "Checking DataEngine endpoint..."
for i in {1..15}; do
if curl -f -s -o /dev/null ${{ env.BASE_URL }}/shell-descriptors 2>&1; then
echo "DataEngine is responding!"
break
fi
if [ $i -eq 15 ]; then
echo "DataEngine is not responding after 15 attempts"
docker compose logs twinengine-dataengine --tail=50
exit 1
fi
echo "Attempt $i: DataEngine not ready yet..."
sleep 5
done
echo "All services are ready for testing!"
- name: Show running containers
if: always()
run: |
cd ${{ env.DOCKER_COMPOSE_PATH }}
docker compose ps
echo "---"
docker compose logs --tail=50
- name: Run Playwright Tests
run: dotnet test ${{ env.PLAYWRIGHT_TEST_PROJECT }} --configuration ${{ env.BUILD_CONFIGURATION }} --no-build --logger "trx;LogFileName=playwright_test_results.trx" --verbosity normal
env:
BASE_URL: ${{ env.BASE_URL }}
- name: Publish Test Results
uses: dorny/test-reporter@a43b3a5f7366b97d083190328d2c652e1a8b6aa2 # v3.0.0
if: github.event.pull_request.head.repo.fork == false
with:
name: Playwright Test Results
path: "**/playwright_test_results.trx"
reporter: dotnet-trx
fail-on-error: true
- name: Upload TRX as artifact
if: always()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: playwright-test-results
path: "**/*playwright_test_results.trx"
- name: Capture Docker Compose Logs
if: always()
run: |
cd ${{ env.DOCKER_COMPOSE_PATH }}
mkdir -p logs
docker compose logs > logs/docker-compose-full.log 2>&1 || true
docker compose ps > logs/docker-compose-status.txt 2>&1 || true
- name: Stop Docker Compose services
if: always()
run: |
cd ${{ env.DOCKER_COMPOSE_PATH }}
docker compose down -v