Skip to content

Add interaction test #303

Add interaction test

Add interaction test #303

Workflow file for this run

name: Monorepo
on:
push:
branches: ['main']
pull_request:
types: [opened, reopened, synchronize, assigned, review_requested]
concurrency: ${{ github.workflow }}-${{ github.ref }}
jobs:
yarn-monorepo:
name: Build Yarn Turborepo
timeout-minutes: 30
runs-on: buildjet-4vcpu-ubuntu-2204
# configures turborepo Remote Caching
env:
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
steps:
- name: Checkout
uses: actions/checkout@v3
with:
submodules: recursive
fetch-depth: 0
- uses: dorny/paths-filter@v2
id: filter
with:
filters: |
npm-changed:
- 'sdk/client/**'
- 'sdk/firstload/**'
- 'sdk/highlight-apollo/**'
- 'sdk/highlight-cloudflare/**'
- 'sdk/highlight-nest/**'
- 'sdk/highlight-next/**'
- 'sdk/highlight-node/**'
- 'sdk/highlight-react/**'
- 'sdk/highlight-remix/**'
- 'sdk/opentelemetry-sdk-workers/packages/opentelemetry-sdk-workers/**'
# automatically caches dependencies based on yarn.lock
- name: Setup Node.js environment
uses: actions/setup-node@v3
with:
node-version: 18
cache: 'yarn'
- name: Install js dependencies
run: yarn
- name: Check generated files for Reflame
run: yarn reflame-check
- name: Check formatting
run: yarn format-check
- name: Configure AWS credentials
if: github.event.pull_request.head.repo.full_name == 'highlight/highlight' || github.ref == 'refs/heads/main'
uses: aws-actions/configure-aws-credentials@v2
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-2
- name: Install Doppler CLI
uses: dopplerhq/cli-action@v2
# setting REACT_APP_COMMIT_SHA to a dummy value in CI to allow consistent turborepo remote caching
- name: Build & test (with render environment)
if: github.event.pull_request.head.repo.full_name == 'highlight/highlight' || github.ref == 'refs/heads/main'
run: doppler run -- bash -c 'RENDER_PREVIEW=false yarn test:all'
env:
DOPPLER_TOKEN: ${{ secrets.DOPPLER_PROD_RENDER_SECRET }}
GRAPHCMS_TOKEN: ${{ secrets.GRAPHCMS_TOKEN }}
NEXT_PUBLIC_HIGHLIGHT_PROJECT_ID: 1jdkoe52
REACT_APP_COMMIT_SHA: abcdef1234567890a1b2c3d4e5f6fedcba098765
- name: Build & test (in a fork without doppler)
if: github.event.pull_request.head.repo.full_name != 'highlight/highlight' && github.ref != 'refs/heads/main'
run: yarn test:all
env:
GRAPHCMS_TOKEN: ${{ secrets.GRAPHCMS_TOKEN }}
NEXT_PUBLIC_HIGHLIGHT_PROJECT_ID: 1jdkoe52
REACT_APP_COMMIT_SHA: abcdef1234567890a1b2c3d4e5f6fedcba098765
- name: Test session screenshot lambda
if: github.event.pull_request.head.repo.full_name == 'highlight/highlight' || github.ref == 'refs/heads/main'
run: doppler run -- yarn test:render
env:
DOPPLER_TOKEN: ${{ secrets.DOPPLER_PROD_RENDER_SECRET }}
- name: Validate session screenshot lambda size
# this can only run after `yarn test:render` runs
if: github.event.pull_request.head.repo.full_name == 'highlight/highlight' || github.ref == 'refs/heads/main'
run: yarn workspace render zip && yarn workspace render check
- name: Publish client bundle (preview)
if: github.event.pull_request.head.repo.full_name == 'highlight/highlight' && github.ref != 'refs/heads/main'
run: yarn publish:client --preview ${GIT_SHA} --replace
env:
# this cannot use ${{ github.sha }} as that commit will be a merge ref
# that is not consistent with the frontend PR preview value
GIT_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
- name: Upload frontend sourcemaps
if: github.ref == 'refs/heads/main'
run: yarn sourcemaps:frontend
env:
HIGHLIGHT_API_KEY: ${{ secrets.HIGHLIGHT_SOURCEMAP_API_KEY }}
APP_VERSION: ${{ github.event.pull_request.head.sha || github.sha }}
- name: Configure yarn npm registry credentials
if: github.ref == 'refs/heads/main'
run: |
yarn config set npmRegistryServer "https://registry.npmjs.org"
yarn config set npmAuthToken "${NPM_TOKEN}"
env:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Publish ai lambda
if: github.ref == 'refs/heads/main'
run: yarn publish:ai
- name: Publish render lambda
if: github.ref == 'refs/heads/main'
run: yarn publish:render
- name: Publish client bundle
if: github.ref == 'refs/heads/main'
run: yarn publish:client
- name: Publish changesets
if: github.ref == 'refs/heads/main'
id: changesets
uses: changesets/action@v1
with:
# This expects you to have a script called release which does a build for your packages and calls changeset publish
version: yarn changeset version
publish: yarn publish:turbo
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
e2e-frontend-backend-client:
# needs the client build to be uploaded
needs: yarn-monorepo
name: E2E Client / Frontend / Backend
timeout-minutes: 30
runs-on: buildjet-4vcpu-ubuntu-2204
steps:
- name: Checkout
uses: actions/checkout@v3
with:
submodules: recursive
- name: Setup Node.js environment
uses: buildjet/setup-node@v3
with:
node-version: 18
cache: 'yarn'
- name: Setup Golang environment
uses: buildjet/setup-go@v4
with:
go-version-file: 'backend/go.mod'
cache-dependency-path: '**/go.sum'
- name: Install poetry
run: pipx install poetry
- name: Install python
uses: actions/setup-python@v4
with:
python-version: '3.10'
cache: 'poetry'
- name: Install dependencies
working-directory: ./e2e/tests
run: poetry install --all-extras
- name: Login to Docker Hub
if: github.event.pull_request.head.repo.full_name == 'highlight/highlight' || github.ref == 'refs/heads/main'
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Start docker containers & run cypress
env:
COMMIT_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
REF: ${{ github.ref }}
REPO: ${{ github.event.pull_request.head.repo.full_name }}
run: |
start_time=$(date -Isecond)
if [[ "$REF" != "refs/heads/main" && "$REPO" == "highlight/highlight" ]]; then
export CYPRESS_CLIENT_VERSION="dev-${COMMIT_SHA}"
export REACT_APP_COMMIT_SHA="${COMMIT_SHA}"
fi
echo "Using client version ${CYPRESS_CLIENT_VERSION}";
# start highlight
pushd docker;
source ./env.sh;
./start-infra.sh > /tmp/highlight.log 2>&1;
docker compose exec -e PSQL_HOST -e PSQL_USER -e PSQL_DB postgres bash -c 'psql -h $PSQL_HOST -U $PSQL_USER $PSQL_DB < /root/init.sql' >> /tmp/highlight.log 2>&1;
./run-backend.sh >> /tmp/highlight.log 2>&1 &
yarn install >> /tmp/highlight.log 2>&1;
unset REACT_APP_IN_DOCKER;
yarn build:frontend >> /tmp/highlight.log 2>&1;
yarn workspace @highlight-run/client dev &
yarn workspace highlight.run dev &
yarn workspace @highlight-run/frontend vite preview --port 3000 &
popd;
# run opentelemetry file watcher
pushd e2e/opentelemetry/filelog;
EXAMPLE_LOG_FILE_PATH=/tmp/highlight.log docker compose run -d file-collector;
popd;
# wait for highlight to be ready
yarn dlx wait-on -l -s 4 https://127.0.0.1:3000/index.html http://127.0.0.1:8080/dist/index.js https://127.0.0.1:8082/health;
# run cypress tests
yarn cy:run;
# run python backend functional tests
pushd ./e2e/tests
export HIGHLIGHT_OAUTH_CLIENT_ID=abc123
export HIGHLIGHT_OAUTH_CLIENT_SECRET=def456
poetry run pytest .
popd
# look for containers that crashed
num_crashed=$(docker ps -a -f status=exited | grep -E '\(' | grep -cvE '\(\d+\)' || true)
if [ "$num_crashed" -gt 0 ]; then
echo "$num_crashed containers crashed"
docker ps -a -f status=exited
exit 1
fi
- name: Dump setup logs on failure
if: failure()
run: cat /tmp/highlight.log
- name: Dump docker container logs on failure
if: failure()
run: |
cd docker;
docker compose logs;
- name: Save videos
uses: actions/upload-artifact@v3
if: failure()
with:
name: cypress-videos
path: cypress/videos