Bring staging up to date with main #1220
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
# Run cypress tests | |
name: cypress | |
on: | |
pull_request: | |
branches: [main, dev, staging, release/*] | |
types: | |
- opened # when a PR is opened | |
- synchronize # when a PR is pushed to | |
- reopened # when a PR is reopened | |
- ready_for_review # when a PR is marked as ready for review (e.g. taken off draft mode) | |
workflow_dispatch: | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
cancel-in-progress: true | |
env: | |
GITHUB_TOKEN: ${{ secrets.PROSOPONATOR_PAT }} | |
GH_TOKEN: ${{ secrets.PROSOPONATOR_PAT }} | |
CARGO_TERM_COLOR: always | |
NODE_OPTIONS: "--max-old-space-size=4096" | |
NODE_ENV: "test" | |
defaults: | |
run: | |
shell: bash | |
jobs: | |
check: | |
runs-on: ubuntu-latest | |
if: github.event.pull_request.draft == false | |
steps: | |
- name: Print contexts | |
env: | |
GITHUB_CONTEXT: ${{ toJson(github) }} | |
ENV_CONTEXT: ${{ toJson(env) }} | |
VARS_CONTEXT: ${{ toJson(vars) }} | |
JOB_CONTEXT: ${{ toJson(job) }} | |
STEPS_CONTEXT: ${{ toJson(steps) }} | |
RUNNER_CONTEXT: ${{ toJson(runner) }} | |
SECRETS_CONTEXT: ${{ toJson(secrets) }} | |
STRATEGY_CONTEXT: ${{ toJson(strategy) }} | |
MATRIX_CONTEXT: ${{ toJson(matrix) }} | |
NEEDS_CONTEXT: ${{ toJson(needs) }} | |
INPUTS_CONTEXT: ${{ toJson(inputs) }} | |
run: | | |
echo "******************************" | |
echo "github:" "$GITHUB_CONTEXT" | |
echo "******************************" | |
echo "env:" "$ENV_CONTEXT" | |
echo "******************************" | |
echo "vars:" "$VARS_CONTEXT" | |
echo "******************************" | |
echo "job:" "$JOB_CONTEXT" | |
echo "******************************" | |
echo "steps:" "$STEPS_CONTEXT" | |
echo "******************************" | |
echo "runner:" "$RUNNER_CONTEXT" | |
echo "******************************" | |
echo "secrets:" "$SECRETS_CONTEXT" | |
echo "******************************" | |
echo "strategy:" "$STRATEGY_CONTEXT" | |
echo "******************************" | |
echo "matrix:" "$MATRIX_CONTEXT" | |
echo "******************************" | |
echo "needs:" "$NEEDS_CONTEXT" | |
echo "******************************" | |
echo "inputs:" "$INPUTS_CONTEXT" | |
echo "******************************" | |
- uses: actions/checkout@v4 | |
with: | |
submodules: "recursive" | |
- run: mkdir -p ~/.npm | |
- run: mkdir -p ~/.cache/Cypress | |
- name: Restore npm cache | |
if: ${{ runner.environment != 'self-hosted' }} # don't restore cache on self-hosted runners, network speed not good enough | |
uses: actions/cache/restore@v4 | |
with: | |
# must restore all cache dirs, and they must exist ahead of this! | |
path: | | |
~/.npm | |
~/.cache/Cypress | |
# note that restoring a cache in github is a pain. The trailing '-' matches any string after the '-', therefore 'abc-' would match a cache named 'abc-1234' or 'abc-5678', etc. | |
# the problem is 'abc-' will not match a cache named 'abc'! So if you're using wildcard cache name selectors like this, you need a field that changes as the suffix to become the wildcard | |
# here we're setting the key to an unused cache key so it falls back to the wildcard selector in `restore-keys` | |
key: some-unused-cache-key | |
restore-keys: | | |
npm-${{ runner.os }}-${{ runner.arch }}- | |
- uses: actions/setup-node@v4 | |
with: | |
node-version-file: 'package.json' | |
- run: npm i -g "npm@$(jq -r .engines.npm < package.json)" | |
- run: npm ci | |
# build all packages in workspace | |
- run: npm run build:all | |
- name: Setup env | |
run: | | |
set -euxo pipefail # stop on errors, print commands, fail on pipe fails | |
cp demos/client-example-server/env.development demos/client-example-server/.env.test | |
cp demos/client-example/env.development demos/client-example/.env.test | |
cp demos/client-bundle-example/env.development demos/client-example/.env.test | |
cp dev/scripts/env.test .env.test | |
cp dev/scripts/env.test dev/scripts/.env.test | |
cp dev/scripts/env.test packages/cli/.env.test | |
cp dev/scripts/env.test packages/procaptcha-bundle/.env.test | |
echo NODE_ENV: "$NODE_ENV" | |
- name: Start the docker images | |
run: | | |
docker compose --file ./docker/docker-compose.test.yml up -d --remove-orphans --force-recreate --always-recreate-deps | |
docker container ls | |
sleep 10s | |
# deploy dapp + protocol and run setup to register, stake and load a dataset for a provider | |
- run: NODE_ENV="test" npm run setup | |
# Build a test version of the procaptcha bundle and run the cypress tests on it and on the React client-example | |
# Running using NODE_ENV=development instead of NODE_ENV=production means the bundle will be built with selectors that can be used | |
# by the cypress tests to find the elements they need to interact with | |
- run: NODE_ENV="development" npm -w @prosopo/procaptcha-bundle run bundle | |
- name: Run the cypress tests on client-example | |
run: | | |
npx concurrently "npm run start:server" "npm run start:provider:admin" "npm run start:demo" "sleep 10s && npm -w @prosopo/cypress-shared run cypress:run:client-example" --success "first" --kill-others | |
- name: Run the cypress tests on client-bundle-example | |
run: | | |
npx concurrently "npm run start:server" "npm run start:provider:admin" "npm run start:bundle" "sleep 10s && npm -w @prosopo/cypress-shared run cypress:run:client-bundle-example" --success "first" --kill-others | |
- name: Run the cypress tests on client-bundle-example explicit rendering | |
run: | | |
npx concurrently "npm run start:server" "npm run start:provider:admin" "npm run start:bundle" "sleep 10s && npm -w @prosopo/cypress-shared run cypress:run:client-bundle-example:explicit" --success "first" --kill-others | |
# after the test run completes store videos and any screenshots | |
- uses: actions/upload-artifact@v4 | |
# store screenshots only on failures | |
if: failure() | |
with: | |
name: cypress-screenshots | |
path: ./demos/cypress-shared/cypress/screenshots | |
if-no-files-found: ignore # 'warn' or 'error' are also available, defaults to `warn` | |
# after the test run completes store videos and any screenshots | |
- uses: actions/upload-artifact@v4 | |
# store videos only on failures | |
if: failure() | |
with: | |
name: cypress-videos | |
path: ./demos/cypress-shared/cypress/videos | |
if-no-files-found: ignore # 'warn' or 'error' are also available, defaults to `warn` | |
- run: docker compose --file ./docker/docker-compose.test.yml down |