name: CI on: push: branches: - main - master tags: - "v*" pull_request: branches: - main - master workflow_dispatch: env: UV_THREADPOOL_SIZE: 1 NODE_OPTIONS: "--max-old-space-size=1536" jobs: check: runs-on: ubuntu-latest steps: - name: Check out repository code uses: actions/checkout@v4 with: repository: ${{ gitea.repository }} token: ${{ gitea.token }} fetch-depth: 50 - name: Install pnpm run: | corepack enable corepack prepare pnpm@11.25.0 --activate pnpm --version - name: Typecheck, lint, and test run: | set -e echo "--- CI checks starten ---" node scripts/check-node-toolchain.mjs export SKIP_ENV_VALIDATION=1 export NODE_ENV=test export DATABASE_URL="mysql://test:test@localhost:3306/test?charset=utf8mb4" export REDIS_URL="redis://127.0.0.1:6379?connect_timeout=2" export AUTH_SECRET="ci-test-secret-key-that-is-long-enough" export BCRYPT_ROUNDS=4 pnpm install --frozen-lockfile --jobs 1 pnpm biome:lint --workers 1 pnpm typecheck pnpm test --maxWorkers=1 pnpm knip echo "--- CI checks passed ---" deploy: needs: check if: gitea.event_name == 'push' && (gitea.ref_name == 'main' || gitea.ref_name == 'master') runs-on: self-hosted steps: - name: Check out repository code for deploy uses: actions/checkout@v4 with: repository: ${{ gitea.repository }} token: ${{ gitea.token }} - name: Build and Deploy Container run: | set -e echo "--- Start Docker Build & Deploy ---" docker build --build-arg NODE_OPTIONS="--max-old-space-size=1536" -t epicnext-cms:latest . docker stop epicnext-cms-app 2>/dev/null || true docker rm epicnext-cms-app 2>/dev/null || true docker run -d \ --name epicnext-cms-app \ --restart always \ --net=host \ epicnext-cms:latest docker image prune -f echo "--- Wachten op health check ---" HEALTH_OK=0 for i in $(seq 1 30); do BODY="$(curl -sf --max-time 5 http://127.0.0.1:3002/api/health 2>/dev/null || true)" if echo "${BODY}" | grep -q '"database":true'; then echo "Health OK" HEALTH_OK=1 break fi echo "Health attempt ${i}/30 failed, retrying..." sleep 3 done if [ "${HEALTH_OK}" != "1" ]; then echo "ERROR: Health check failed!" >&2 docker logs epicnext-cms-app --tail 50 >&2 || true exit 1 fi echo "--- Deployment succesvol afgerond! ---"