mirror of
https://github.com/btouchard/ackify-ce.git
synced 2026-02-08 23:08:58 -06:00
The Go binary embeds static files from backend/cmd/community/web/dist via go:embed directive. The e2e-tests workflow was building the frontend in webapp/dist but not copying it to the embed location before compiling, resulting in an empty app (no Vue frontend loaded). This commit adds the missing copy step, matching the Dockerfile build process.
150 lines
4.4 KiB
YAML
150 lines
4.4 KiB
YAML
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
name: E2E Tests
|
|
|
|
on:
|
|
push:
|
|
branches: [main, develop]
|
|
pull_request:
|
|
branches: [main, develop]
|
|
|
|
jobs:
|
|
cypress-run:
|
|
runs-on: ubuntu-latest
|
|
|
|
services:
|
|
postgres:
|
|
image: postgres:16-alpine
|
|
env:
|
|
POSTGRES_USER: postgres
|
|
POSTGRES_PASSWORD: testpassword
|
|
POSTGRES_DB: ackify_test
|
|
options: >-
|
|
--health-cmd pg_isready
|
|
--health-interval 10s
|
|
--health-timeout 5s
|
|
--health-retries 5
|
|
ports:
|
|
- 5432:5432
|
|
|
|
mailhog:
|
|
image: mailhog/mailhog:latest
|
|
ports:
|
|
- 1025:1025
|
|
- 8025:8025
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup Go
|
|
uses: actions/setup-go@v5
|
|
with:
|
|
go-version: '1.24.5'
|
|
cache: true
|
|
|
|
- name: Setup Node.js
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version: '22'
|
|
cache: 'npm'
|
|
cache-dependency-path: webapp/package-lock.json
|
|
|
|
- name: Install frontend dependencies
|
|
working-directory: webapp
|
|
run: npm ci
|
|
|
|
- name: Build frontend
|
|
working-directory: webapp
|
|
run: npm run build
|
|
|
|
- name: Install backend dependencies
|
|
run: go mod download
|
|
|
|
- name: Run database migrations
|
|
env:
|
|
ACKIFY_DB_DSN: "postgres://postgres:testpassword@localhost:5432/ackify_test?sslmode=disable"
|
|
run: |
|
|
go run ./backend/cmd/migrate/main.go -migrations-path file://backend/migrations up
|
|
|
|
- name: Generate Ed25519 keys
|
|
run: |
|
|
go run ./backend/cmd/community/keygen.go > /tmp/ed25519.key || true
|
|
if [ ! -f /tmp/ed25519.key ]; then
|
|
echo "Generating Ed25519 key for testing"
|
|
# Generate a test key if keygen doesn't exist
|
|
echo "test_private_key_base64_encoded_here" > /tmp/ed25519.key
|
|
fi
|
|
|
|
- name: Copy locales and templates
|
|
run: |
|
|
cp -r backend/locales .
|
|
cp -r backend/templates .
|
|
|
|
- name: Copy frontend dist for embed
|
|
run: |
|
|
mkdir -p backend/cmd/community/web/dist
|
|
cp -r webapp/dist/* backend/cmd/community/web/dist/
|
|
|
|
- name: Start Ackify server
|
|
env:
|
|
ACKIFY_DB_DSN: "postgres://postgres:testpassword@localhost:5432/ackify_test?sslmode=disable"
|
|
ACKIFY_BASE_URL: "http://localhost:8080"
|
|
ACKIFY_ORGANISATION: "Ackify Test"
|
|
ACKIFY_OAUTH_PROVIDER: "github"
|
|
ACKIFY_OAUTH_CLIENT_ID: "test_client_id"
|
|
ACKIFY_OAUTH_CLIENT_SECRET: "test_client_secret"
|
|
ACKIFY_OAUTH_COOKIE_SECRET: "dGVzdF9jb29raWVfc2VjcmV0X2Zvcl90ZXN0aW5nXzEyMzQ1Njc4OTA="
|
|
ACKIFY_ED25519_PRIVATE_KEY: "kKjNo0cTUOdXcamyxYCcmGfUm7zXzeI8T2jaLEjvbcpA0IIO7HbR3ANBlUlqlWuV3D+RjDT+8p5o37n98+Wu5A=="
|
|
ACKIFY_LISTEN_ADDR: ":8080"
|
|
ACKIFY_ADMIN_EMAILS: "admin@test.com"
|
|
ACKIFY_MAIL_HOST: "localhost"
|
|
ACKIFY_MAIL_PORT: "1025"
|
|
ACKIFY_MAIL_TLS: "false"
|
|
ACKIFY_MAIL_STARTTLS: "false"
|
|
ACKIFY_MAIL_FROM: "noreply@ackify.test"
|
|
ACKIFY_MAIL_FROM_NAME: "Ackify Test"
|
|
ACKIFY_LOG_LEVEL: "debug"
|
|
run: |
|
|
go build -o ackify ./backend/cmd/community
|
|
./ackify &
|
|
echo $! > /tmp/ackify.pid
|
|
|
|
# Wait for server to be ready
|
|
timeout 30 bash -c 'until curl -s http://localhost:8080/api/v1/health > /dev/null; do sleep 1; done'
|
|
|
|
- name: Run Cypress tests
|
|
uses: cypress-io/github-action@v6
|
|
with:
|
|
working-directory: webapp
|
|
install: false
|
|
wait-on: 'http://localhost:8080/api/v1/health'
|
|
wait-on-timeout: 60
|
|
browser: chrome
|
|
headless: true
|
|
env:
|
|
CYPRESS_baseUrl: http://localhost:8080
|
|
CYPRESS_mailhogUrl: http://localhost:8025
|
|
|
|
- name: Upload Cypress screenshots
|
|
uses: actions/upload-artifact@v4
|
|
if: failure()
|
|
with:
|
|
name: cypress-screenshots
|
|
path: webapp/cypress/screenshots
|
|
retention-days: 7
|
|
|
|
- name: Upload Cypress videos
|
|
uses: actions/upload-artifact@v4
|
|
if: failure()
|
|
with:
|
|
name: cypress-videos
|
|
path: webapp/cypress/videos
|
|
retention-days: 7
|
|
|
|
- name: Stop Ackify server
|
|
if: always()
|
|
run: |
|
|
if [ -f /tmp/ackify.pid ]; then
|
|
kill $(cat /tmp/ackify.pid) || true
|
|
fi
|