mirror of
https://github.com/btouchard/ackify-ce.git
synced 2026-02-08 23:08:58 -06:00
The e2e-tests workflow was failing because the application couldn't find the locales/en.json and templates files. These files are in backend/locales and backend/templates, but the standalone binary expects them at the root. This commit adds a step to copy these directories before starting the server.
145 lines
4.3 KiB
YAML
145 lines
4.3 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: 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
|