Skip to content

[MOB-12019] smoke test suite for inapp (#537) #1457

[MOB-12019] smoke test suite for inapp (#537)

[MOB-12019] smoke test suite for inapp (#537) #1457

Workflow file for this run

# This workflow will do a clean install of node dependencies, cache/restore them,
# build the source code and run tests
# source: https://github.com/actions/starter-workflows/blob/main/ci/node.js.yml
name: ci
permissions:
contents: read
on:
push:
branches:
- main
pull_request:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Use Node.js 18.12.0
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
with:
node-version: "18.12.0"
cache: "yarn"
- run: yarn install --frozen-lockfile
- run: yarn prepublishOnly
- run: node index.node.js
- run: yarn test
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v5
with:
token: ${{ secrets.CODECOV_TOKEN }}
- run: yarn check-deps
e2e-tests:
runs-on: ubuntu-latest
timeout-minutes: 15
container:
image: mcr.microsoft.com/playwright:v1.56.1-jammy
options: --user 1001
strategy:
matrix:
browser: [chromium, firefox, webkit]
fail-fast: false
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Setup Node.js
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
with:
node-version: "18.12.0"
cache: "yarn"
- name: Install dependencies
run: |
yarn install --frozen-lockfile
yarn prepublishOnly
- name: Cache React dependencies
uses: actions/cache@v4
with:
path: react-example/node_modules
key: ${{ runner.os }}-react-deps-${{ hashFiles('react-example/yarn.lock') }}
restore-keys: |
${{ runner.os }}-react-deps-
- name: Install React example dependencies
working-directory: ./react-example
run: yarn install --frozen-lockfile
- name: Install Playwright browsers
working-directory: ./react-example
run: |
echo "📥 Installing ${{ matrix.browser }} browser (dependencies already in Docker image)..."
yarn playwright install ${{ matrix.browser }}
echo "✅ Browser installed"
- name: Create environment configuration
working-directory: ./react-example
run: |
cat > .env << 'EOF'
API_KEY=${{ secrets.ITERABLE_NO_JWT_API_KEY }}
USE_JWT=false
[email protected]
EOF
- name: Build React example app
working-directory: ./react-example
run: yarn build
- name: Start React example server
working-directory: ./react-example
run: |
echo "🚀 Starting React server..."
yarn webpack serve --config webpack.config.js --port 8080 --host 0.0.0.0 &
# Wait for server to be ready
for i in {1..30}; do
if curl -f http://localhost:8080 >/dev/null 2>&1; then
echo "✅ Server ready after ${i} attempts"
break
fi
if [ $i -eq 30 ]; then
echo "❌ Server startup failed"
exit 1
fi
sleep 2
done
- name: Run Playwright tests
working-directory: ./react-example
run: yarn playwright test --project=${{ matrix.browser }}
env:
CI: true
- name: Upload Playwright report
uses: actions/upload-artifact@v4
if: always()
with:
name: playwright-report-${{ matrix.browser }}-${{ github.run_number }}
path: react-example/playwright-report/
retention-days: 14
- name: Upload test results
uses: actions/upload-artifact@v4
if: always()
with:
name: test-results-${{ matrix.browser }}-${{ github.run_number }}
path: react-example/test-results/
retention-days: 7
- name: Cleanup server processes
if: always()
run: |
echo "🧹 Cleaning up server processes..."
# Kill all processes using port 8080
sudo lsof -ti:8080 | xargs -r sudo kill -9 || true
# Kill by process names
pkill -f "webpack serve" || true
pkill -f "node.*webpack" || true
# Kill any remaining browser processes
pkill -f "chrome" || true
pkill -f "firefox" || true
pkill -f "webkit" || true
echo "✅ Cleanup completed"