Playwright tests & CI #94
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: e2e tests | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
branches: | |
- main | |
env: | |
WASP_TELEMETRY_DISABLE: 1 | |
WASP_VERSION: 0.13.2 | |
jobs: | |
test: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout the repo | |
uses: actions/checkout@v4 | |
- name: Setup Node.js | |
id: setup-node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: '20' | |
- name: Install Wasp | |
run: curl -sSL https://get.wasp-lang.dev/installer.sh | sh -s -- -v ${{ env.WASP_VERSION }} | |
- name: Docker setup | |
uses: docker/setup-buildx-action@v3 | |
# In order for the app to run in the dev mode we need to set the required env vars even if they aren't actually used by the app. | |
# This step sets mock env vars in order to pass the validation steps so the app can run | |
# in the CI environment. For env vars that are actually used in tests and therefore need real values, we set them in | |
# the GitHub secrets settings and access them in a step below. | |
- name: Set required wasp app env vars to mock values | |
run: | | |
cd app | |
cp .env.server.example .env.server | |
- name: Cache global node modules | |
uses: actions/cache@v4 | |
with: | |
path: ~/.npm | |
key: node-modules-${{ hashFiles('app/package-lock.json') }}-${{ hashFiles('e2e-tests/package-lock.json') }}-${{ runner.os }}-wasp${{ env.WASP_VERSION }}-node${{ steps.setup-node.outputs.node-version }} | |
restore-keys: | | |
node-modules-${{ runner.os }}- | |
- name: Install Node.js dependencies for Playwright tests | |
if: steps.cache-e2e-tests.outputs.cache-hit != 'true' | |
run: | | |
cd e2e-tests | |
npm ci | |
- name: Store Playwright's Version | |
run: | | |
cd e2e-tests | |
PLAYWRIGHT_VERSION=$(npm ls @playwright/test | grep @playwright | sed 's/.*@//') | |
echo "Playwright's Version: $PLAYWRIGHT_VERSION" | |
echo "PLAYWRIGHT_VERSION=$PLAYWRIGHT_VERSION" >> $GITHUB_ENV | |
- name: Cache Playwright Browsers for Playwright's Version | |
id: cache-playwright-browsers | |
uses: actions/cache@v4 | |
with: | |
path: ~/.cache/ms-playwright | |
key: playwright-browsers-${{ env.PLAYWRIGHT_VERSION }}-${{ runner.os }} | |
- name: Set up Playwright | |
if: steps.cache-playwright-browsers.outputs.cache-hit != 'true' | |
run: | | |
cd e2e-tests | |
npx playwright install --with-deps | |
- name: Install Stripe CLI | |
run: | | |
curl -s https://packages.stripe.dev/api/security/keypair/stripe-cli-gpg/public | gpg --dearmor | sudo tee /usr/share/keyrings/stripe.gpg | |
echo "deb [signed-by=/usr/share/keyrings/stripe.gpg] https://packages.stripe.dev/stripe-cli-debian-local stable main" | sudo tee -a /etc/apt/sources.list.d/stripe.list | |
sudo apt update | |
sudo apt install stripe | |
# We need to run the Stripe CLI in the background to listen for webhook events from Stripe payments. | |
# These events are used to update the user's subscription status, which gives them certain permissions. | |
# If this is not running, the payments will have no effect on a user's subscription status and tests will fail. | |
- name: Run Stripe CLI to listen for webhooks | |
env: | |
STRIPE_DEVICE_NAME: ${{ secrets.STRIPE_DEVICE_NAME }} | |
run: | | |
stripe listen --api-key ${{ secrets.STRIPE_KEY }} --forward-to localhost:3001/stripe-webhook & | |
- name: Run Playwright tests | |
env: | |
# The e2e tests are testing parts of the app that need certain env vars, so we need to access them here. | |
# These secretes can be set in your GitHub repo settings, e.g. https://github.com/<account>/<repo>/settings/secrets/actions | |
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} | |
STRIPE_KEY: ${{ secrets.STRIPE_KEY }} | |
STRIPE_WEBHOOK_SECRET: ${{ secrets.STRIPE_WEBHOOK_SECRET }} | |
HOBBY_SUBSCRIPTION_PRICE_ID: ${{ secrets.HOBBY_SUBSCRIPTION_PRICE_ID }} | |
PRO_SUBSCRIPTION_PRICE_ID: ${{ secrets.PRO_SUBSCRIPTION_PRICE_ID }} | |
CREDITS_PRICE_ID: ${{ secrets.CREDITS_PRICE_ID }} | |
SKIP_EMAIL_VERIFICATION_IN_DEV: true | |
run: | | |
cd e2e-tests | |
npm run e2e:playwright:debug |