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: End to End Example Apps | |
on: | |
push: | |
branches: ['main'] | |
pull_request: | |
types: [opened, synchronize] | |
concurrency: ${{ github.workflow }}-${{ github.ref }} | |
jobs: | |
e2e-cypress: | |
name: E2E Client Cypress | |
timeout-minutes: 60 | |
runs-on: buildjet-4vcpu-ubuntu-2204 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Setup Node.js environment | |
uses: buildjet/setup-node@v4 | |
with: | |
node-version: lts/* | |
cache: 'yarn' | |
- name: Setup Golang environment | |
uses: buildjet/setup-go@v5 | |
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: Install ffmpeg | |
run: | | |
curl -o ffmpeg.tar.xz https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-amd64-static.tar.xz | |
mkdir ~/bin | |
tar -C ~/bin --strip-components=1 -xf ffmpeg.tar.xz | |
ls ~/bin | |
- 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@v3 | |
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: | | |
export RUN_SESSION_SCREENSHOT_LAMBDA=false | |
if [[ "$REF" != "refs/heads/main" && "$REPO" == "highlight/highlight" ]]; then | |
export REACT_APP_COMMIT_SHA="${COMMIT_SHA}" | |
export RUN_SESSION_SCREENSHOT_LAMBDA=true | |
fi | |
# 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/apollo build >> /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 3 http://127.0.0.1:3000/index.html http://127.0.0.1:8082/health; | |
# run cypress tests | |
yarn cy:run; | |
# run python functional tests that ensure cypress session is correct | |
pushd ./e2e/tests | |
export HIGHLIGHT_OAUTH_CLIENT_ID=abc123 | |
export HIGHLIGHT_OAUTH_CLIENT_SECRET=def456 | |
poetry run pytest -k cypress . | |
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: Dump databases on failure | |
if: failure() | |
run: | | |
cd docker; | |
mkdir backups | |
docker compose exec postgres bash -c "mkdir /backups"; | |
docker compose exec postgres bash -c "pg_dump -h localhost -U postgres -d postgres > /backups/postgres.sql"; | |
docker compose exec postgres bash -c "psql -h localhost -U postgres -d postgres -c 'select * from sessions;' > /backups/sessions.sql"; | |
docker compose exec postgres bash -c "cat /backups/postgres.sql" > ./backups/postgres.sql 2>&1; | |
docker compose exec postgres bash -c "cat /backups/sessions.sql" > ./backups/sessions.sql 2>&1; | |
docker compose exec clickhouse bash -c "mkdir /backups && chmod -R 777 /backups"; | |
docker compose exec clickhouse clickhouse-client --host clickhouse --query "BACKUP DATABASE default TO File('/backups/clickhouse.zip')"; | |
docker compose exec clickhouse bash -c "cat /backups/clickhouse.zip" > ./backups/clickhouse.zip 2>&1; | |
- name: Save database artifacts | |
if: failure() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: db-dump | |
path: docker/backups/* | |
- name: Save videos | |
uses: actions/upload-artifact@v4 | |
if: failure() | |
with: | |
name: cypress-videos | |
path: cypress/videos | |
e2e-frontend-backend: | |
name: E2E Frontend / Backend | |
timeout-minutes: 60 | |
runs-on: buildjet-4vcpu-ubuntu-2204 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Setup Node.js environment | |
uses: buildjet/setup-node@v4 | |
with: | |
node-version: lts/* | |
cache: 'yarn' | |
- name: Setup Golang environment | |
uses: buildjet/setup-go@v5 | |
with: | |
go-version-file: 'backend/go.mod' | |
cache-dependency-path: '**/go.sum' | |
- name: Setup .NET environment | |
uses: actions/setup-dotnet@v4 | |
with: | |
dotnet-version: 8.x | |
- 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@v3 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: Start docker containers & run sdk e2e test | |
run: | | |
# 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; | |
yarn build:sdk >> /tmp/highlight.log 2>&1; | |
popd; | |
# run python backend functional tests | |
pushd ./e2e/tests | |
export HIGHLIGHT_OAUTH_CLIENT_ID=abc123 | |
export HIGHLIGHT_OAUTH_CLIENT_SECRET=def456 | |
poetry run pytest -k "not cypress" . | |
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 -f compose.yml -f compose.hobby.yml logs; | |
- name: Dump databases on failure | |
if: failure() | |
run: | | |
cd docker; | |
mkdir backups | |
docker compose exec postgres bash -c "mkdir /backups"; | |
docker compose exec postgres bash -c "pg_dump -h localhost -U postgres postgres > /backups/postgres.sql"; | |
docker compose exec postgres bash -c "cat /backups/postgres.sql" > ./backups/postgres.sql 2>&1; | |
docker compose exec clickhouse bash -c "mkdir /backups && chmod -R 777 /backups"; | |
docker compose exec clickhouse clickhouse-client --host clickhouse --query "BACKUP DATABASE default TO File('/backups/clickhouse.zip')"; | |
docker compose exec clickhouse bash -c "cat /backups/clickhouse.zip" > ./backups/clickhouse.zip 2>&1; | |
- name: Save database artifacts | |
if: failure() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: db-dump | |
path: docker/backups/* | |
e2e-docker: | |
name: E2E Dockerized Apps | |
timeout-minutes: 60 | |
runs-on: buildjet-4vcpu-ubuntu-2204 | |
strategy: | |
matrix: | |
app: ['dotnet', 'dotnet4', 'go', 'python', 'ruby'] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- 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@v3 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: Login to GitHub Docker | |
if: github.event.pull_request.head.repo.full_name == 'highlight/highlight' || github.ref == 'refs/heads/main' | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: Vadman97 | |
password: ${{ secrets.GH_DOCKER_TOKEN }} | |
- name: Start docker containers & run sdk e2e test | |
working-directory: ./e2e/tests/src | |
run: poetry run python app_runner.py ${{ matrix.app }} |