Skip to content

Commit

Permalink
test: Add E2E job on CI
Browse files Browse the repository at this point in the history
  • Loading branch information
Betree committed Dec 27, 2023
1 parent 3a78c7b commit f89f17a
Showing 1 changed file with 294 additions and 0 deletions.
294 changes: 294 additions & 0 deletions .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,294 @@
name: E2E

on: [push]

env:
TZ: UTC
OC_ENV: ci
NODE_ENV: test
WEBSITE_URL: http://localhost:3000
IMAGES_URL: http://localhost:3001
API_URL: http://localhost:3060
API_KEY: dvl-1510egmf4a23d80342403fb599qd
CI: true

E2E_TEST: 1
PGHOST: localhost
PGUSER: postgres
CYPRESS_RECORD: false
CYPRESS_VIDEO: false
CYPRESS_VIDEO_UPLOAD_ON_PASSES: false
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
GITHUB_CLIENT_ID: ${{ secrets.GH_CLIENT_ID }}
GITHUB_CLIENT_SECRET: ${{ secrets.GH_CLIENT_SECRET }}
API_FOLDER: /home/runner/work/opencollective-pdf/opencollective-pdf/opencollective-api
FRONTEND_FOLDER: /home/runner/work/opencollective-pdf/opencollective-pdf/opencollective-frontend
IMAGES_FOLDER: /home/runner/work/opencollective-pdf/opencollective-pdf/opencollective-images
PDF_FOLDER: /home/runner/work/opencollective-pdf/opencollective-pdf
TERM: xterm
STRIPE_WEBHOOK_KEY: ${{ secrets.STRIPE_WEBHOOK_KEY }}
STRIPE_WEBHOOK_SIGNING_SECRET: ${{ secrets.STRIPE_WEBHOOK_SIGNING_SECRET }}

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

strategy:
matrix:
files: ['0*.js', '1*.js', '2*.js', '3*.js']

services:
redis:
image: redis
ports:
- 6379:6379
options: --entrypoint redis-server
postgres:
image: postgres:13.9
env:
POSTGRES_USER: postgres
POSTGRES_DB: postgres
POSTGRES_HOST_AUTH_METHOD: trust
ports:
- 5432:5432
# needed because the postgres container does not provide a healthcheck
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5

steps:
- name: Update apt
run: sudo apt-get update || exit 0

- name: Install Cypress dependencies
run: sudo apt-get install --no-install-recommends -y libgtk2.0-0 libgtk-3-0 libnotify-dev libgconf-2-4 libnss3 libxss1 libasound2 libxtst6 xauth xvfb fonts-arphic-bkai00mp fonts-arphic-bsmi00lp fonts-arphic-gbsn00lp fonts-arphic-gkai00mp fonts-arphic-ukai fonts-arphic-uming ttf-wqy-zenhei ttf-wqy-microhei xfonts-wqy

- name: Install postgresql-client
run: sudo apt-get install -y postgresql-client

- name: Install graphicsmagick
run: sudo apt-get install -y graphicsmagick

- name: Install stripe-cli
run: |
sudo apt-get install -y wget
wget https://github.com/stripe/stripe-cli/releases/download/v1.13.9/stripe_1.13.9_linux_x86_64.tar.gz -O /tmp/stripe_1.13.9_linux_x86_64.tar.gz
sudo tar xzvf /tmp/stripe_1.13.9_linux_x86_64.tar.gz -C /bin/
- name: Checkout
uses: actions/checkout@v3

- name: Setup node
uses: actions/setup-node@v3
with:
node-version-file: 'package.json'

# Npm cache

- name: Restore .npm cache
uses: actions/cache@v3
with:
path: ~/.npm
key: ${{ runner.os }}-npm-cache-${{ github.sha }}
restore-keys: |
- ${{ runner.os }}-npm-cache-${{ github.sha }}
- ${{ runner.os }}-npm-cache-
# Checkout frontend

- name: Set REF in env, removing the `refs/` part
run: echo "MATCHING_BRANCH_REF=$(echo $GITHUB_REF | sed 's|refs/||')" >> $GITHUB_ENV

- name: Check matching branch
id: check-matching-branch-frontend
uses: octokit/[email protected]
with:
route: GET /repos/{owner}/{repo}/git/ref/{ref}
owner: opencollective
repo: opencollective-frontend
ref: ${{ env.MATCHING_BRANCH_REF }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
continue-on-error: true

- name: Checkout (frontend - matching branch)
if: steps.check-matching-branch-frontend.outputs.status == 200
uses: actions/checkout@v3
with:
repository: opencollective/opencollective-frontend
path: opencollective-frontend
ref: ${{ github.ref }}

- name: Checkout (frontend - main)
if: steps.check-matching-branch-frontend.outputs.status != 200
uses: actions/checkout@v3
with:
repository: opencollective/opencollective-frontend
path: opencollective-frontend

# Checkout API

- name: Check matching branch
id: check-matching-branch-api-api
uses: octokit/[email protected]
with:
route: GET /repos/{owner}/{repo}/git/ref/{ref}
owner: opencollective
repo: opencollective-api
ref: ${{ env.MATCHING_BRANCH_REF }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
continue-on-error: true

- name: Checkout (api - matching branch)
if: steps.check-matching-branch-api.outputs.status == 200
uses: actions/checkout@v3
with:
repository: opencollective/opencollective-api
path: opencollective-api
ref: ${{ github.ref }}

- name: Checkout (api - main)
if: steps.check-matching-branch-api.outputs.status != 200
uses: actions/checkout@v3
with:
repository: opencollective/opencollective-api
path: opencollective-api

# Checkout other services

- name: Checkout (images)
uses: actions/checkout@v3
with:
repository: opencollective/opencollective-images
path: opencollective-images

# Prepare API

- name: Restore node_modules (api)
uses: actions/cache@v3
id: api-node-modules
with:
path: opencollective-api/node_modules
key: ${{ runner.os }}-api-node-modules-${{ hashFiles('package-lock.json') }}-${{ secrets.CACHE_VERSION }}

- name: Install dependencies (api)
working-directory: opencollective-api
if: steps.api-node-modules.outputs.cache-hit != 'true'
run: npm ci --prefer-offline --no-audit

- name: Restore build (api)
uses: actions/cache@v3
id: api-build
with:
path: opencollective-api/dist
key: ${{ runner.os }}-api-build-${{ github.sha }}

- name: Build (api)
if: steps.api-build.outputs.cache-hit != 'true'
working-directory: opencollective-api
run: npm run build

# Prepare Frontend

- name: Restore node_modules (frontend)
uses: actions/cache@v3
id: frontend-node-modules
with:
path: opencollective-frontend/node_modules
key: ${{ runner.os }}-frontend-node-modules-${{ hashFiles('opencollective-frontend/package-lock.json') }}

- name: Install dependencies (frontend)
if: steps.frontend-node-modules.outputs.cache-hit != 'true'
working-directory: opencollective-frontend
run: CYPRESS_INSTALL_BINARY=0 npm ci --prefer-offline --no-audit

- name: Set commit hash (frontend)
working-directory: opencollective-frontend
run: echo "FRONTEND_COMMIT_HASH=$(git rev-parse HEAD)" >> $GITHUB_ENV

- name: Restore .next build (frontend)
uses: actions/cache@v3
id: next-build
with:
path: opencollective-frontend/.next
key: ${{ runner.os }}-next-build-${{ env.FRONTEND_COMMIT_HASH }}

- name: Restore .next cache (frontend)
if: steps.next-build.outputs.cache-hit != 'true'
uses: actions/cache@v3
with:
path: opencollective-frontend/.next/cache
key: ${{ runner.os }}-next-cache-${{ env.FRONTEND_COMMIT_HASH }}
restore-keys: |
${{ runner.os }}-next-cache-${{ env.FRONTEND_COMMIT_HASH }}
${{ runner.os }}-next-cache-
- name: Build (frontend)
if: steps.next-build.outputs.cache-hit != 'true'
working-directory: opencollective-frontend
run: npm run build

# Prepare Images

- name: Restore node_modules (images)
uses: actions/cache@v3
id: images-node-modules
with:
path: opencollective-images/node_modules
key: ${{ runner.os }}-images-node-modules-${{ hashFiles('opencollective-images/package-lock.json') }}

- name: Install dependencies (images)
working-directory: opencollective-images
if: steps.images-node-modules.outputs.cache-hit != 'true'
run: npm ci --prefer-offline --no-audit

- name: Build (images)
working-directory: opencollective-images
run: npm run build

# Prepare PDF service
- name: Restore node_modules (PDF)
uses: actions/cache@v3
id: pdf-node-modules
with:
path: node_modules
key: ${{ runner.os }}-pdf-node-modules-${{ hashFiles('opencollective-pdf/package-lock.json') }}

- name: Install dependencies (pdf)
if: steps.pdf-node-modules.outputs.cache-hit != 'true'
run: npm ci --prefer-offline --no-audit

- name: Build PDF service
run: npm run build

# Setup Cypress

- name: Restore Cypress
uses: actions/cache@v3
id: cypress
with:
path: ~/.cache/Cypress
key: ${{ runner.os }}-cypress-${{ hashFiles('opencollective-frontend/node_modules/cypress/package.json') }}

- name: Install Cypress
if: steps.cypress.outputs.cache-hit != 'true'
working-directory: opencollective-frontend
run: npx cypress install

# Run E2E
- name: Setup DB
working-directory: opencollective-frontend
run: ./scripts/setup_db.sh

- name: Run E2E with Cypress
working-directory: opencollective-frontend
run: ./scripts/run_e2e_tests.sh
env:
CYPRESS_TEST_FILES: ${{ matrix.files }}

- name: Archive test screenshots
uses: actions/upload-artifact@v3
with:
name: screenshots
path: opencollective-frontend/test/cypress/screenshots
if: ${{ failure() }}

0 comments on commit f89f17a

Please sign in to comment.