Cypress E2E Tests parallelization #20
Workflow file for this run
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: Cypress Parallelization POC | |
on: | |
workflow_dispatch: | |
pull_request: | |
types: [opened, synchronize] | |
env: | |
MIX_ENV: test | |
NODE_VERSION: "20" | |
MANTAINERS: '["cdimonaco", "dottorblaster", "janvhs", "nelsonkopliku", "arbulu89","jagabomb","emaksy", "balanza", "gagandeepb"]' | |
RG_TEST_LABEL: regression | |
INTEGRATION_TEST_LABEL: integration | |
jobs: | |
elixir-deps: | |
name: Elixir ${{ matrix.mix_env }} dependencies | |
runs-on: ubuntu-20.04 | |
strategy: | |
matrix: | |
include: | |
- mix_env: dev | |
- mix_env: test | |
env: | |
MIX_ENV: ${{ matrix.mix_env }} | |
steps: | |
- name: Cancel Previous Runs | |
uses: styfle/cancel-workflow-action@0.12.1 | |
with: | |
access_token: ${{ github.token }} | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Setup | |
id: setup-elixir | |
uses: erlef/setup-beam@v1 | |
with: | |
version-file: .tool-versions | |
version-type: strict | |
env: | |
ImageOS: ubuntu20 | |
- name: Retrieve Cached Dependencies | |
uses: actions/cache@v4 | |
id: mix-cache | |
with: | |
path: | | |
deps | |
_build/${{ matrix.mix_env }} | |
priv/plts | |
key: ${{ runner.os }}-${{ steps.setup-elixir.outputs.otp-version }}-${{ steps.setup-elixir.outputs.elixir-version }}-${{ hashFiles('mix.lock') }} | |
- name: Install Dependencies | |
if: steps.mix-cache.outputs.cache-hit != 'true' | |
run: | | |
mkdir -p priv/plts | |
mix local.rebar --force | |
mix local.hex --force | |
mix deps.get | |
mix deps.compile --warnings-as-errors | |
mix dialyzer --plt | |
npm-deps: | |
name: Npm dependencies | |
runs-on: ubuntu-20.04 | |
steps: | |
- name: Cancel Previous Runs | |
uses: styfle/cancel-workflow-action@0.12.1 | |
with: | |
access_token: ${{ github.token }} | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Retrieve Cached Dependencies | |
uses: actions/cache@v4 | |
id: npm-cache | |
with: | |
path: | | |
assets/node_modules | |
key: ${{ runner.os }}-${{ env.NODE_VERSION }}-${{ hashFiles('assets/package-lock.json') }} | |
- name: Setup Node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ env.NODE_VERSION }} | |
- name: Install NPM dependencies | |
if: steps.npm-cache.outputs.cache-hit != 'true' | |
run: cd assets && npm install | |
npm-e2e-deps: | |
name: Npm E2E dependencies | |
runs-on: ubuntu-20.04 | |
steps: | |
- name: Cancel Previous Runs | |
uses: styfle/cancel-workflow-action@0.12.1 | |
with: | |
access_token: ${{ github.token }} | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Retrieve Cached Dependencies | |
uses: actions/cache@v4 | |
id: npm-e2e-cache | |
with: | |
path: | | |
test/e2e/node_modules | |
key: ${{ runner.os }}-${{ env.NODE_VERSION }}-${{ hashFiles('test/e2e/package-lock.json') }} | |
- name: Setup Node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ env.NODE_VERSION }} | |
- name: Install E2E NPM dependencies | |
if: steps.npm-e2e-cache.outputs.cache-hit != 'true' | |
run: cd test/e2e && npm install | |
test-e2e: | |
name: End to end tests | |
needs: [elixir-deps, npm-deps, npm-e2e-deps] | |
runs-on: ubuntu-20.04 | |
strategy: | |
fail-fast: false | |
matrix: | |
containers: [1] | |
env: | |
MIX_ENV: dev | |
steps: | |
- name: Cancel Previous Runs | |
uses: styfle/cancel-workflow-action@0.12.1 | |
with: | |
access_token: ${{ github.token }} | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Setup | |
id: setup-elixir | |
uses: erlef/setup-beam@v1 | |
with: | |
version-file: .tool-versions | |
version-type: strict | |
env: | |
ImageOS: ubuntu20 | |
- name: Setup Node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ env.NODE_VERSION }} | |
- name: Retrieve Cached Dependencies | |
uses: actions/cache@v4 | |
id: mix-cache | |
with: | |
path: | | |
deps | |
_build/dev | |
priv/plts | |
key: ${{ runner.os }}-${{ steps.setup-elixir.outputs.otp-version }}-${{ steps.setup-elixir.outputs.elixir-version }}-${{ hashFiles('mix.lock') }} | |
- name: Retrieve NPM Cached Dependencies | |
uses: actions/cache@v4 | |
id: npm-cache | |
with: | |
path: | | |
assets/node_modules | |
key: ${{ runner.os }}-${{ env.NODE_VERSION }}-${{ hashFiles('assets/package-lock.json') }} | |
- name: Retrieve E2E NPM Cached Dependencies | |
uses: actions/cache@v4 | |
id: npm-e2e-cache | |
with: | |
path: | | |
test/e2e/node_modules | |
key: ${{ runner.os }}-${{ env.NODE_VERSION }}-${{ hashFiles('test/e2e/package-lock.json') }} | |
- name: Check Eslint and JS Code Format | |
run: cd test/e2e && npm run lint && npm run format:check | |
- name: "Docker compose dependencies" | |
uses: isbang/compose-action@v2.0.2 | |
with: | |
compose-file: "./docker-compose.yaml" | |
down-flags: "--volumes" | |
- name: Mix setup | |
run: mix setup | |
- name: Run trento detached | |
run: mix phx.server & | |
- name: Install photofinish | |
uses: jaxxstorm/action-install-gh-release@v1.14.0 | |
with: | |
repo: trento-project/photofinish | |
tag: v1.4.1 | |
cache: enable | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Give executable permissions to photofinish | |
run: chmod +x $(whereis photofinish | cut -d" " -f2) | |
- name: Cypress run | |
uses: cypress-io/github-action@v6 | |
env: | |
cypress_video: false | |
cypress_db_host: postgres | |
cypress_db_port: 5432 | |
cypress_photofinish_binary: $(whereis photofinish | cut -d" " -f2) | |
with: | |
spec: cypress/e2e/hosts_overview.cy.js | |
working-directory: test/e2e | |
wait-on-timeout: 30 | |
config: baseUrl=http://localhost:4000 | |
- name: Upload cypress test screenshots | |
uses: actions/upload-artifact@v4 | |
if: failure() | |
with: | |
name: e2e-screenshots | |
path: test/e2e/cypress/screenshots/ |