name: Test on: push: branches: ["**"] pull_request: branches: ["**"] concurrency: group: test-${{ gitea.ref }} cancel-in-progress: true env: NODE_VERSION: "20" # TODO: Remove after installing internal CA certificate on the runner GIT_SSL_NO_VERIFY: "true" NPM_CONFIG_FETCH_RETRIES: "5" NPM_CONFIG_FETCH_RETRY_MINTIMEOUT: "20000" NPM_CONFIG_FETCH_RETRY_MAXTIMEOUT: "120000" jobs: type-check: name: Type Check (all packages) runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} - run: corepack enable && corepack prepare npm@10.5.0 --activate - name: Install dependencies run: | if [ ! -f apps/api/package.json ] || [ ! -f packages/database/package.json ]; then echo "::error::Workspace packages missing from checkout (apps/api, packages/database)." ls -la apps packages 2>/dev/null || true exit 1 fi for attempt in 1 2 3; do npm ci --include=optional --workspaces && break if [ "$attempt" = "3" ]; then exit 1 fi npm cache verify || true sleep "$((attempt * 10))" done node -e "require('rollup/package.json')" || { echo "::error::npm ci did not install workspace deps (rollup missing). Confirm full package-lock.json was pushed." ls -1 node_modules | head -n 80 || true exit 1 } - name: Repair Rollup optional dependency on Linux ARM64 run: | ARCH="$(uname -m)" if [ "$ARCH" != "aarch64" ] && [ "$ARCH" != "arm64" ]; then exit 0 fi if node -e "require('@rollup/rollup-linux-arm64-gnu')" 2>/dev/null; then echo "Rollup ARM64 native binding already present." exit 0 fi ROLLUP_VERSION="$(node -p "require('./package-lock.json').packages['node_modules/rollup'].version")" if [ -z "$ROLLUP_VERSION" ] || [ "$ROLLUP_VERSION" = "undefined" ]; then echo "::error::rollup version not found in package-lock.json" exit 1 fi for attempt in 1 2 3; do npm install --no-save --include=optional "@rollup/rollup-linux-arm64-gnu@$ROLLUP_VERSION" && break if [ "$attempt" = "3" ]; then exit 1 fi npm cache verify || true sleep "$((attempt * 10))" done node -e "require('@rollup/rollup-linux-arm64-gnu')" - run: npm run db:generate - run: npm run type-check api-tests: name: API Unit Tests runs-on: ubuntu-latest needs: type-check steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} - run: corepack enable && corepack prepare npm@10.5.0 --activate - name: Install dependencies run: | if [ ! -f apps/api/package.json ] || [ ! -f packages/database/package.json ]; then echo "::error::Workspace packages missing from checkout (apps/api, packages/database)." ls -la apps packages 2>/dev/null || true exit 1 fi for attempt in 1 2 3; do npm ci --include=optional --workspaces && break if [ "$attempt" = "3" ]; then exit 1 fi npm cache verify || true sleep "$((attempt * 10))" done node -e "require('rollup/package.json')" || { echo "::error::npm ci did not install workspace deps (rollup missing). Confirm full package-lock.json was pushed." ls -1 node_modules | head -n 80 || true exit 1 } - name: Repair Rollup optional dependency on Linux ARM64 run: | ARCH="$(uname -m)" if [ "$ARCH" != "aarch64" ] && [ "$ARCH" != "arm64" ]; then exit 0 fi if node -e "require('@rollup/rollup-linux-arm64-gnu')" 2>/dev/null; then echo "Rollup ARM64 native binding already present." exit 0 fi ROLLUP_VERSION="$(node -p "require('./package-lock.json').packages['node_modules/rollup'].version")" if [ -z "$ROLLUP_VERSION" ] || [ "$ROLLUP_VERSION" = "undefined" ]; then echo "::error::rollup version not found in package-lock.json" exit 1 fi for attempt in 1 2 3; do npm install --no-save --include=optional "@rollup/rollup-linux-arm64-gnu@$ROLLUP_VERSION" && break if [ "$attempt" = "3" ]; then exit 1 fi npm cache verify || true sleep "$((attempt * 10))" done node -e "require('@rollup/rollup-linux-arm64-gnu')" - run: npm run db:generate - run: npm run test:api homepage-tests: name: Homepage Unit Tests runs-on: ubuntu-latest needs: type-check steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} - run: corepack enable && corepack prepare npm@10.5.0 --activate - name: Install dependencies run: | if [ ! -f apps/api/package.json ] || [ ! -f packages/database/package.json ]; then echo "::error::Workspace packages missing from checkout (apps/api, packages/database)." ls -la apps packages 2>/dev/null || true exit 1 fi for attempt in 1 2 3; do npm ci --include=optional --workspaces && break if [ "$attempt" = "3" ]; then exit 1 fi npm cache verify || true sleep "$((attempt * 10))" done node -e "require('rollup/package.json')" || { echo "::error::npm ci did not install workspace deps (rollup missing). Confirm full package-lock.json was pushed." ls -1 node_modules | head -n 80 || true exit 1 } - name: Repair Rollup optional dependency on Linux ARM64 run: | ARCH="$(uname -m)" if [ "$ARCH" != "aarch64" ] && [ "$ARCH" != "arm64" ]; then exit 0 fi if node -e "require('@rollup/rollup-linux-arm64-gnu')" 2>/dev/null; then echo "Rollup ARM64 native binding already present." exit 0 fi ROLLUP_VERSION="$(node -p "require('./package-lock.json').packages['node_modules/rollup'].version")" if [ -z "$ROLLUP_VERSION" ] || [ "$ROLLUP_VERSION" = "undefined" ]; then echo "::error::rollup version not found in package-lock.json" exit 1 fi for attempt in 1 2 3; do npm install --no-save --include=optional "@rollup/rollup-linux-arm64-gnu@$ROLLUP_VERSION" && break if [ "$attempt" = "3" ]; then exit 1 fi npm cache verify || true sleep "$((attempt * 10))" done node -e "require('@rollup/rollup-linux-arm64-gnu')" - run: npm run build --workspace @rentaldrivego/types - run: npm run test:homepage carplace-tests: name: Carplace Unit Tests runs-on: ubuntu-latest needs: type-check steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} - run: corepack enable && corepack prepare npm@10.5.0 --activate - name: Install dependencies run: | if [ ! -f apps/api/package.json ] || [ ! -f packages/database/package.json ]; then echo "::error::Workspace packages missing from checkout (apps/api, packages/database)." ls -la apps packages 2>/dev/null || true exit 1 fi for attempt in 1 2 3; do npm ci --include=optional --workspaces && break if [ "$attempt" = "3" ]; then exit 1 fi npm cache verify || true sleep "$((attempt * 10))" done node -e "require('rollup/package.json')" || { echo "::error::npm ci did not install workspace deps (rollup missing). Confirm full package-lock.json was pushed." ls -1 node_modules | head -n 80 || true exit 1 } - name: Repair Rollup optional dependency on Linux ARM64 run: | ARCH="$(uname -m)" if [ "$ARCH" != "aarch64" ] && [ "$ARCH" != "arm64" ]; then exit 0 fi if node -e "require('@rollup/rollup-linux-arm64-gnu')" 2>/dev/null; then echo "Rollup ARM64 native binding already present." exit 0 fi ROLLUP_VERSION="$(node -p "require('./package-lock.json').packages['node_modules/rollup'].version")" if [ -z "$ROLLUP_VERSION" ] || [ "$ROLLUP_VERSION" = "undefined" ]; then echo "::error::rollup version not found in package-lock.json" exit 1 fi for attempt in 1 2 3; do npm install --no-save --include=optional "@rollup/rollup-linux-arm64-gnu@$ROLLUP_VERSION" && break if [ "$attempt" = "3" ]; then exit 1 fi npm cache verify || true sleep "$((attempt * 10))" done node -e "require('@rollup/rollup-linux-arm64-gnu')" - run: npm run build --workspace @rentaldrivego/types - run: npm run test:carplace admin-tests: name: Admin Unit Tests runs-on: ubuntu-latest needs: type-check steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} - run: corepack enable && corepack prepare npm@10.5.0 --activate - name: Install dependencies run: | if [ ! -f apps/api/package.json ] || [ ! -f packages/database/package.json ]; then echo "::error::Workspace packages missing from checkout (apps/api, packages/database)." ls -la apps packages 2>/dev/null || true exit 1 fi for attempt in 1 2 3; do npm ci --include=optional --workspaces && break if [ "$attempt" = "3" ]; then exit 1 fi npm cache verify || true sleep "$((attempt * 10))" done node -e "require('rollup/package.json')" || { echo "::error::npm ci did not install workspace deps (rollup missing). Confirm full package-lock.json was pushed." ls -1 node_modules | head -n 80 || true exit 1 } - name: Repair Rollup optional dependency on Linux ARM64 run: | ARCH="$(uname -m)" if [ "$ARCH" != "aarch64" ] && [ "$ARCH" != "arm64" ]; then exit 0 fi if node -e "require('@rollup/rollup-linux-arm64-gnu')" 2>/dev/null; then echo "Rollup ARM64 native binding already present." exit 0 fi ROLLUP_VERSION="$(node -p "require('./package-lock.json').packages['node_modules/rollup'].version")" if [ -z "$ROLLUP_VERSION" ] || [ "$ROLLUP_VERSION" = "undefined" ]; then echo "::error::rollup version not found in package-lock.json" exit 1 fi for attempt in 1 2 3; do npm install --no-save --include=optional "@rollup/rollup-linux-arm64-gnu@$ROLLUP_VERSION" && break if [ "$attempt" = "3" ]; then exit 1 fi npm cache verify || true sleep "$((attempt * 10))" done node -e "require('@rollup/rollup-linux-arm64-gnu')" - run: npm run test:admin dashboard-tests: name: Dashboard Unit Tests runs-on: ubuntu-latest needs: type-check steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} - run: corepack enable && corepack prepare npm@10.5.0 --activate - name: Install dependencies run: | if [ ! -f apps/api/package.json ] || [ ! -f packages/database/package.json ]; then echo "::error::Workspace packages missing from checkout (apps/api, packages/database)." ls -la apps packages 2>/dev/null || true exit 1 fi for attempt in 1 2 3; do npm ci --include=optional --workspaces && break if [ "$attempt" = "3" ]; then exit 1 fi npm cache verify || true sleep "$((attempt * 10))" done node -e "require('rollup/package.json')" || { echo "::error::npm ci did not install workspace deps (rollup missing). Confirm full package-lock.json was pushed." ls -1 node_modules | head -n 80 || true exit 1 } - name: Repair Rollup optional dependency on Linux ARM64 run: | ARCH="$(uname -m)" if [ "$ARCH" != "aarch64" ] && [ "$ARCH" != "arm64" ]; then exit 0 fi if node -e "require('@rollup/rollup-linux-arm64-gnu')" 2>/dev/null; then echo "Rollup ARM64 native binding already present." exit 0 fi ROLLUP_VERSION="$(node -p "require('./package-lock.json').packages['node_modules/rollup'].version")" if [ -z "$ROLLUP_VERSION" ] || [ "$ROLLUP_VERSION" = "undefined" ]; then echo "::error::rollup version not found in package-lock.json" exit 1 fi for attempt in 1 2 3; do npm install --no-save --include=optional "@rollup/rollup-linux-arm64-gnu@$ROLLUP_VERSION" && break if [ "$attempt" = "3" ]; then exit 1 fi npm cache verify || true sleep "$((attempt * 10))" done node -e "require('@rollup/rollup-linux-arm64-gnu')" - run: npm run build --workspace @rentaldrivego/types - run: npm run test:dashboard integration-tests: name: API Integration Tests runs-on: ubuntu-latest needs: type-check services: postgres: image: postgres:16-alpine env: POSTGRES_DB: rentaldrivego_test POSTGRES_USER: postgres POSTGRES_PASSWORD: password options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 redis: image: redis:7-alpine options: >- --health-cmd "redis-cli ping" --health-interval 10s --health-timeout 5s --health-retries 5 env: DATABASE_URL: postgresql://postgres:password@postgres:5432/rentaldrivego_test REDIS_URL: redis://redis:6379 NODE_ENV: test JWT_SECRET: test-secret JWT_EXPIRY: 8h FILE_STORAGE_ROOT: /tmp/rentaldrivego-test-storage steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} - run: corepack enable && corepack prepare npm@10.5.0 --activate - name: Install dependencies run: | if [ ! -f apps/api/package.json ] || [ ! -f packages/database/package.json ]; then echo "::error::Workspace packages missing from checkout (apps/api, packages/database)." ls -la apps packages 2>/dev/null || true exit 1 fi for attempt in 1 2 3; do npm ci --include=optional --workspaces && break if [ "$attempt" = "3" ]; then exit 1 fi npm cache verify || true sleep "$((attempt * 10))" done node -e "require('rollup/package.json')" || { echo "::error::npm ci did not install workspace deps (rollup missing). Confirm full package-lock.json was pushed." ls -1 node_modules | head -n 80 || true exit 1 } - name: Repair Rollup optional dependency on Linux ARM64 run: | ARCH="$(uname -m)" if [ "$ARCH" != "aarch64" ] && [ "$ARCH" != "arm64" ]; then exit 0 fi if node -e "require('@rollup/rollup-linux-arm64-gnu')" 2>/dev/null; then echo "Rollup ARM64 native binding already present." exit 0 fi ROLLUP_VERSION="$(node -p "require('./package-lock.json').packages['node_modules/rollup'].version")" if [ -z "$ROLLUP_VERSION" ] || [ "$ROLLUP_VERSION" = "undefined" ]; then echo "::error::rollup version not found in package-lock.json" exit 1 fi for attempt in 1 2 3; do npm install --no-save --include=optional "@rollup/rollup-linux-arm64-gnu@$ROLLUP_VERSION" && break if [ "$attempt" = "3" ]; then exit 1 fi npm cache verify || true sleep "$((attempt * 10))" done node -e "require('@rollup/rollup-linux-arm64-gnu')" - run: npm run db:generate - run: npm run db:deploy - run: npx prisma db push --schema packages/database/prisma/schema.prisma - run: npm run test:api:integration