Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
180 changes: 21 additions & 159 deletions .github/workflows/dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -134,170 +134,32 @@ jobs:
working-directory: src/renderer
run: npm run build

- name: Clean up processes
if: always()
run: |
pkill -f node || true

cypress-tests:
runs-on: ubuntu-latest
needs: build

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup Volta
uses: volta-cli/action@v4

- name: Install Node.js 22 npm 12
run: |
volta install node@22
node --version
volta install npm@12
npm --version

- name: Clean up memory (kill any existing node processes)
run: |
pkill -f node || true

- name: Install root dependencies
run: npm ci

- name: Install renderer dependencies
# The --spec list in cy:run-ct-smoke is generated from the @smoke tags.
# Fail early if someone tagged a spec without regenerating it, otherwise
# the new spec silently never runs on PRs.
- name: Check smoke spec list matches @smoke tags
run: node env-config/smokeSpecs.cjs

# No Vite warm-up step: cypress/config/ct-optimize-deps.json declares
# every dep the suite touches, so Vite pre-bundles them all at dev-server
# start and never re-optimizes (and reloads the AUT) mid-run. This step
# used to run the entire suite to force that discovery, which doubled the
# job. If reload-related flake reappears, regenerate the list rather than
# reinstating a warm-up run — see env-config/ctOptimizeDeps.cjs.

# Pull requests run the @smoke subset (10 specs, ~2.5 min). Merges to
# develop/main and manual runs run everything (~14 min), so nothing loses
# coverage before it lands.
- name: Run Cypress smoke tests
if: github.event_name == 'pull_request'
working-directory: src/renderer
run: npm ci
run: npm run cy:run-ct-smoke

- name: Stamp build with date and time
run: npm run stamp

- name: Make Environment (.env.local)
working-directory: src/renderer
run: |
echo "VITE_DOMAIN=${{ env.DOMAIN }}" > .env.local
echo "VITE_CLIENTID=${{ env.CLIENT_ID }}" >> .env.local
echo "VITE_ENDPOINT=${{ env.APP }}" >> .env.local
echo "VITE_CALLBACK=${{ env.CALLBACK }}" >> .env.local
echo "VITE_HOST=${{ env.HOST }}" >> .env.local
echo "VITE_HELP=${{ env.HELP }}" >> .env.local
echo "VITE_COMMUNITY=${{ env.COMMUNITY }}" >> .env.local
echo "VITE_OPENNOTES=${{ env.OPEN_NOTES }}" >> .env.local
echo "VITE_RESOURCES=${{ env.RESOURCES }}" >> .env.local
echo "VITE_OPENCONTENT=${{ env.OPEN_CONTENT }}" >> .env.local
echo "VITE_COURSE=${{ env.COURSE }}" >> .env.local
echo "VITE_VIDEO_TRAINING=${{ env.VIDEOS }}" >> .env.local
echo "VITE_WALK_THRU=${{ env.WALK_THRU }}" >> .env.local
echo "VITE_AKUO=${{ env.AKUO }}" >> .env.local
echo "VITE_FLAT=${{ env.FLAT }}" >> .env.local
echo "VITE_HIERARCHICAL=${{ env.HIERARCHICAL }}" >> .env.local
echo "VITE_GEN_FLAT=${{ env.GEN_FLAT }}" >> .env.local
echo "VITE_GEN_HIERARCHICAL=${{ env.GEN_HIERARCHICAL }}" >> .env.local
echo "VITE_GOOGLE_SAMPLES=${{ env.GOOGLE_SAMPLES }}" >> .env.local
echo "VITE_SNAGID=${{ env.SNAG_ID }}" >> .env.local
echo "VITE_SIZELIMIT=${{ env.SIZELIMIT }}" >> .env.local
echo "VITE_SITE_TITLE=${{ env.NAME }}" >> .env.local

- name: Create auth0-variables.json
working-directory: src/renderer
run: |
echo '{"apiIdentifier":"${{ env.API_ID }}","auth0Domain":"${{ env.DOMAIN }}","webClientId":"${{ env.CLIENT_ID }}"}' > src/auth/auth0-variables.json

- name: Create index.html
run: |
echo "VITE_SITE_TITLE=${{ env.NAME }}" > .indexVar.json
echo "VITE_CALLBACK=${{ env.CALLBACK }}" >> .indexVar.json
echo "VITE_HOST=${{ env.HOST }}" >> .indexVar.json
echo "VITE_DOMAIN=${{ env.DOMAIN }}" >> .indexVar.json
echo "VITE_FILES=${{ env.FILES }}" >> .indexVar.json
node env-config/indexTemplate.cjs dev .indexVar.json

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Clean up disk space before tests
run: |
# Clean up system packages
sudo apt-get clean || true
sudo rm -rf /var/lib/apt/lists/* || true

# Clean up Docker aggressively
docker system prune -af --volumes || true
docker builder prune -af || true

# Remove cache directories to free up space
rm -rf node_modules/.cache || true
rm -rf src/renderer/node_modules/.cache || true

- name: Check disk space
run: |
df -h
docker system df

- name: Verify environment files exist
working-directory: src/renderer
run: |
echo "Checking for .env.local:"
ls -la .env.local || echo ".env.local not found!"
echo "Checking for auth0-variables.json:"
ls -la src/auth/auth0-variables.json || echo "auth0-variables.json not found!"

- name: Build Docker image and start container
env:
DOCKER_BUILDKIT: 1
run: |
docker build -t apm-vite-renderer -f src/renderer/Dockerfile .
docker run -d -p 3000:3000 --name apm-vite-renderer apm-vite-renderer
echo "Container status:"
docker ps -a | grep apm-vite-renderer || true
echo "Container logs after startup:"
docker logs apm-vite-renderer || true

- name: Wait for app to be ready
run: |
timeout=60
elapsed=0
while ! curl -f http://localhost:3000 > /dev/null 2>&1; do
if [ $elapsed -ge $timeout ]; then
echo "App failed to start within $timeout seconds"
echo "Container status:"
docker ps -a | grep apm-vite-renderer || true
echo "Container logs:"
docker logs apm-vite-renderer || true
exit 1
fi
# Check if container is still running
if ! docker ps | grep -q apm-vite-renderer; then
echo "Container has stopped!"
echo "Container logs:"
docker logs apm-vite-renderer || true
exit 1
fi
echo "Waiting for app to start... ($elapsed/$timeout seconds)"
sleep 2
elapsed=$((elapsed + 2))
done
echo "App is ready!"

- name: Warm up Vite for Cypress tests
working-directory: src/renderer
run: npm run cy:run-ct-fast || true

- name: Run Cypress tests
- name: Run full Cypress suite
if: github.event_name != 'pull_request'
working-directory: src/renderer
run: npm run cy:run-ct

- name: Clean up Docker containers
if: always()
run: |
docker stop apm-vite-renderer || true
docker rm apm-vite-renderer || true

- name: Clean up Docker system after tests
if: always()
run: |
docker system prune -af --volumes || true
docker builder prune -af || true

- name: Upload Cypress screenshots on failure
if: failure()
uses: actions/upload-artifact@v4
Expand Down
Loading
Loading