Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 67 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@
- name: Use Node.js 18.12.0
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
with:
node-version: '18.12.0'
cache: 'yarn'
node-version: "18.12.0"
cache: "yarn"
- run: yarn install --frozen-lockfile
- run: yarn prepublishOnly
- run: node index.node.js
Expand All @@ -31,3 +31,68 @@
with:
token: ${{ secrets.CODECOV_TOKEN }}
- run: yarn check-deps

e2e-tests:
runs-on: ubuntu-latest
timeout-minutes: 30

strategy:
matrix:
browser: [chromium, firefox, webkit]
fail-fast: false

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
- name: Install React example dependencies
working-directory: ./react-example
run: yarn install --frozen-lockfile
- name: Install Playwright browsers
working-directory: ./react-example
run: yarn playwright install --with-deps ${{ matrix.browser }}
- name: Create environment configuration
working-directory: ./react-example
run: |
cat > .env << 'EOF'
API_KEY=${{ secrets.ITERABLE_API_KEY }}
JWT_SECRET=${{ secrets.JWT_SECRET }}
USE_JWT=true
[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: |
npx webpack serve --config webpack.config.js --port 8080 &
for i in {1..15}; do
if curl -f http://localhost:8080 >/dev/null 2>&1; then
echo "Server is ready"
break
fi
if [ $i -eq 15 ]; then
echo "Server failed to start after 75 seconds"
exit 1
fi
echo "Waiting for server... (attempt $i/15)"
sleep 5
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 }}
path: react-example/playwright-report/
retention-days: 30
67 changes: 67 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2740,6 +2740,73 @@ yarn start # In one terminal
yarn playwright # In another terminal
```

## CI/CD with GitHub Actions

The project uses GitHub Actions for continuous integration, including automated Playwright E2E testing across multiple browsers.

### CI Pipeline Overview

The CI pipeline (`/.github/workflows/ci.yml`) runs:

1. **Unit Tests**: SDK build verification and Jest unit tests
2. **E2E Tests**: Playwright tests across Chromium, Firefox, and WebKit browsers

### Playwright CI Configuration

The E2E tests run automatically on every push and pull request:

- **Browsers**: Tests run simultaneously on Chromium, Firefox, and WebKit
- **Environment**: Automatically configured with test API keys
- **Reports**: Test results and screenshots are uploaded as artifacts
- **Retry Strategy**: Failed tests are retried twice on CI

### Required GitHub Secrets

The repository uses these configured secrets for Playwright E2E testing in CI:

- **`ITERABLE_API_KEY`**: Iterable web API key for SDK authentication during testing
- **`JWT_SECRET`**: JWT secret associated with the API key for token generation

These secrets are already configured in the repository's GitHub Actions settings. They enable the CI environment to authenticate with Iterable's API and test SDK functionality with real API endpoints.

**Test Configuration Details:**
- **Default Test User**: `[email protected]` is used as the default test user for CI testing
- **Test Project**: The API_KEY uses Iterable's production test project:
- **Project**: Mobile SDK Test (Do Not Delete) (Project ID: 1226)
- **URL**: https://app.iterable.com/campaigns/manage?projectId=1226

> **Note for developers**: If you need to update these secrets or configure them in a fork, go to Repository Settings β†’ Secrets and variables β†’ Actions and update the values accordingly.

### CI Environment Configuration

During CI execution, the environment is automatically configured with:

```bash
API_KEY=${{ secrets.ITERABLE_API_KEY }}
JWT_SECRET=${{ secrets.JWT_SECRET }}
USE_JWT=true
[email protected]
```

### Features Tested in CI

The automated tests cover:

- **Authentication**: Login form functionality and user management
- **Navigation**: All app sections (Commerce, Events, Users, InApp, Embedded)
- **UUA Testing**: Unknown user activation and consent management
- **Core SDK Integration**: Proper initialization and configuration

### Accessing CI Results

After CI runs, you can:

- View test results in the GitHub Actions tab
- Download test reports and screenshots from artifacts
- Debug failed tests using uploaded traces and videos

For detailed troubleshooting and local development setup, see the [E2E Testing Guide](./react-example/e2e/README.md).

# Contributing

Looking to contribute? Please see the [contributing instructions here](./CONTRIBUTING.md)
Expand Down
Loading