name: Start Sencho App description: > Shared setup for integration jobs: installs deps, builds backend, starts backend + frontend dev servers, waits for readiness, and installs Playwright browsers. inputs: jwt-secret: required: false default: 'ci-test-secret-key-not-for-production' compose-dir: required: false default: '/tmp/compose' port: required: false default: '3000' runs: using: composite steps: - name: Setup Node.js uses: actions/setup-node@v6 with: node-version: '20' cache: 'npm' cache-dependency-path: | package-lock.json backend/package-lock.json frontend/package-lock.json - name: Install root dependencies (Playwright) shell: bash run: npm ci - name: Install backend dependencies shell: bash run: npm ci working-directory: ./backend - name: Build backend shell: bash run: npm run build working-directory: ./backend - name: Install frontend dependencies shell: bash run: npm ci working-directory: ./frontend - name: Create compose directory and log dir shell: bash run: | mkdir -p ${{ inputs.compose-dir }} mkdir -p "${{ github.workspace }}/ci-logs" # Log files live under $GITHUB_WORKSPACE so actions/upload-artifact@v4+ can # include them alongside repo-relative paths like e2e/report/. Mixing those # with /tmp paths makes '/' the common root and v4+ strips the absolute # entries from the artifact. `stdbuf -oL -eL` forces line-buffered output # so a crash doesn't lose the final few hundred lines to block buffering. - name: Start backend shell: bash run: stdbuf -oL -eL node dist/index.js > "${{ github.workspace }}/ci-logs/backend.log" 2>&1 & working-directory: ./backend env: JWT_SECRET: ${{ inputs.jwt-secret }} COMPOSE_DIR: ${{ inputs.compose-dir }} PORT: ${{ inputs.port }} NODE_ENV: test - name: Start frontend dev server shell: bash run: stdbuf -oL -eL npm run dev > "${{ github.workspace }}/ci-logs/frontend.log" 2>&1 & working-directory: ./frontend - name: Wait for services to be ready shell: bash run: npx wait-on http://localhost:${{ inputs.port }}/api/health http://localhost:5173 --timeout 30000 - name: Install Playwright browsers shell: bash run: npx playwright install --with-deps chromium