name: Tests on: push: branches: - main - master pull_request: workflow_dispatch: jobs: test: runs-on: ubuntu-latest services: postgres: image: postgres:16-alpine env: POSTGRES_DB: tnsu_approval_route POSTGRES_USER: tnsu_approval_route POSTGRES_PASSWORD: tnsu_approval_route ports: - 5432:5432 options: >- --health-cmd "pg_isready -U tnsu_approval_route -d tnsu_approval_route" --health-interval 5s --health-timeout 3s --health-retries 10 steps: - name: Checkout uses: actions/checkout@v4 - name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: '10.0.x' - name: Restore run: dotnet restore backend/Tnsu.ApprovalRoute.sln - name: Build run: dotnet build backend/Tnsu.ApprovalRoute.sln --no-restore -c Release - name: Wait for Postgres run: | for i in $(seq 1 30); do if (echo > /dev/tcp/postgres/5432) 2>/dev/null; then echo "Postgres is reachable" exit 0 fi echo "Waiting for postgres... ($i/30)" sleep 2 done echo "Postgres did not become reachable in time" >&2 exit 1 - name: Test env: # act_runner запускает джобу в отдельном контейнере на одной docker-сети с сервисами — # postgres здесь резолвится по имени сервиса, а не через localhost/127.0.0.1 (это не VM, как в GitHub-hosted runners). TEST_POSTGRES_CONNECTION: "Host=postgres;Port=5432;Database=tnsu_approval_route;Username=tnsu_approval_route;Password=tnsu_approval_route" run: dotnet test backend/Tnsu.ApprovalRoute.sln --no-build -c Release