Skip to content
Merged
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
97 changes: 97 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -197,3 +197,100 @@ jobs:
# Skip Docker build in test setup since we already have the image
export SKIP_DOCKER_BUILD=true
bun run test

e2e:
runs-on: ubuntu-latest
needs: build
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Download build artifacts
uses: actions/download-artifact@v4
with:
name: dist
path: dist/

- name: Set up Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest

- name: Cache bun dependencies
uses: actions/cache@v4
with:
path: |
~/.bun/install/cache
node_modules
web/node_modules
key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lock', '**/package.json') }}
restore-keys: |
${{ runner.os }}-bun-

- name: Install dependencies
run: |
bun install
cd web && bun install

- name: Install Playwright browsers
run: cd web && bun x playwright install chromium --with-deps

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

- name: Log in to Container Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Check for Dockerfile changes
id: docker-changes
run: |
if [ "${{ github.event_name }}" = "pull_request" ]; then
BASE_SHA="${{ github.event.pull_request.base.sha }}"
else
BASE_SHA="${{ github.event.before }}"
fi

if git diff --name-only "$BASE_SHA" HEAD 2>/dev/null | grep -q "^perry/"; then
echo "changed=true" >> $GITHUB_OUTPUT
else
echo "changed=false" >> $GITHUB_OUTPUT
fi

- name: Build workspace image (with cache)
uses: docker/build-push-action@v6
with:
context: ./perry
load: true
tags: perry:latest
cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:buildcache-test
cache-to: ${{ steps.docker-changes.outputs.changed == 'true' && format('type=registry,ref={0}/{1}:buildcache-test,mode=max', env.REGISTRY, env.IMAGE_NAME) || '' }}

- name: Start agent
run: |
bun run src/index.ts agent run --port 7391 &
sleep 5
curl -s http://localhost:7391/health || (echo "Agent failed to start" && exit 1)

- name: Create test workspace
run: |
bun run src/index.ts start test
bun run src/index.ts list

- name: Run Playwright tests
run: |
cd web && bun run test:e2e --grep-invert "OpenCode"
env:
CI: true

- name: Upload Playwright report
uses: actions/upload-artifact@v4
if: ${{ !cancelled() }}
with:
name: playwright-report
path: web/playwright-report/
retention-days: 7