agmission/.gitea/workflows/run-tests.yaml
Devin Major 7b63f9164d
Some checks failed
Server Tests / Jest – Integration Tests (push) Failing after 19s
Server Tests / Mocha – Unit & Utility Tests (push) Successful in 47s
fix for missing libssl1.1 package (required by mongodb 4.4)
2026-04-29 13:18:06 -04:00

185 lines
6.8 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Gitea Actions Server Tests
#
# Two jobs run on every push to any branch:
# 1. jest-integration Jest integration tests using an in-memory MongoDB
# instance (mongodb-memory-server). No external database
# or repository secrets are required.
# 2. mocha-unit Existing Mocha/Chai unit tests in tests/ and tests/utils/
#
# Optional repository secret:
# TOKEN_SECRET JWT secret used by the server's auth helpers.
# A safe default is used automatically when absent.
name: Server Tests
on:
push:
branches:
- '**'
# ─────────────────────────────────────────────────────────────────────────────
jobs:
# ══════════════════════════════════════════════════════════════════════════
# Job 1: Jest integration tests (in-memory MongoDB via mongodb-memory-server)
# ══════════════════════════════════════════════════════════════════════════
jest-integration:
name: Jest Integration Tests
runs-on: self-hosted
defaults:
run:
working-directory: Development/server
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '18'
cache: 'npm'
cache-dependency-path: Development/server/package-lock.json
- name: Install MongoDB runtime compatibility libraries
run: |
set -e
if command -v ldconfig >/dev/null 2>&1 && ldconfig -p | grep -q 'libcrypto.so.1.1'; then
echo "OpenSSL 1.1 compatibility already present"
exit 0
fi
if ! command -v apt-get >/dev/null 2>&1; then
echo "apt-get is not available on this runner; cannot install libssl1.1 automatically"
exit 1
fi
if command -v sudo >/dev/null 2>&1; then
SUDO=sudo
else
SUDO=
fi
. /etc/os-release
if [ "${ID:-}" = "ubuntu" ]; then
echo "deb http://security.ubuntu.com/ubuntu focal-security main" | $SUDO tee /etc/apt/sources.list.d/focal-security.list >/dev/null
elif [ "${ID:-}" = "debian" ]; then
echo "deb http://deb.debian.org/debian bullseye main" | $SUDO tee /etc/apt/sources.list.d/bullseye.list >/dev/null
else
echo "Unsupported distro for automatic libssl1.1 install: ${ID:-unknown}"
exit 1
fi
$SUDO apt-get update
$SUDO apt-get install -y libssl1.1
- name: Install dependencies
env:
NPM_CONFIG_CACHE: /tmp/npm-cache
run: npm ci --prefer-offline
- name: Write test environment file
run: |
cat > environment.test.env <<'EOF'
NODE_ENV=test
TOKEN_SECRET=${{ secrets.TOKEN_SECRET || 'ci-test-secret-not-for-production' }}
PRODUCTION=false
NO_EMAIL_MODE=true
ENABLE_SUBSCRIPTION=false
INV_IMG_VIR_DIR=/tmp/inv-img
INV_UPLOAD_DIR=/tmp/inv-upload
INV_MAX_UPLOAD_SIZE_MB=5
PAGINATION_DEFAULT_LIMIT=1000
PAGINATION_MAX_LIMIT=14000
STRIPE_SEC_KEY=sk_test_placeholder
STRIPE_API_VERSION=2022-11-15
EOF
- name: Enforce controller integration contract
env:
TEST_ENV_FILE: ./environment.test.env
NODE_ENV: test
MONGOMS_VERSION: 4.4.28
run: npm run test:integration:contract
- name: Run Jest integration tests
env:
TEST_ENV_FILE: ./environment.test.env
NODE_ENV: test
MONGOMS_VERSION: 4.4.28
run: npm run test:integration:jest -- --ci
- name: Upload Jest results
if: always()
uses: actions/upload-artifact@v4
with:
name: jest-integration-results
# ══════════════════════════════════════════════════════════════════════════
# Job 2: Mocha/Chai tests tests/ and tests/utils/
# These tests are self-contained unit tests that do not require MongoDB.
# ══════════════════════════════════════════════════════════════════════════
mocha-unit:
name: Mocha Unit & Utility Tests
runs-on: self-hosted
defaults:
run:
working-directory: Development/server
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '18'
# Redirect the npm cache away from /root/.npm (root-owned on this runner)
# to a writable temp directory. Also clears any stale node_modules left
# by a previous run that the root-owned cache could not clean up.
- name: Fix npm cache permissions
run: |
mkdir -p /tmp/npm-cache
rm -rf node_modules || true
- name: Install dependencies
env:
NPM_CONFIG_CACHE: /tmp/npm-cache
run: npm ci
# Write a minimal env file so dotenv does not error on startup.
# These tests do not hit the database; DB_* values are placeholders.
- name: Write test environment file
run: |
cat > environment.env <<'EOF'
NODE_ENV=test
DB_HOSTS=127.0.0.1:27017
DB_NAME=agmission_test
DB_USR=
DB_PWD=
TOKEN_SECRET=${{ secrets.TOKEN_SECRET || 'ci-test-secret-not-for-production' }}
PRODUCTION=false
NO_EMAIL_MODE=true
ENABLE_SUBSCRIPTION=false
STRIPE_SEC_KEY=sk_test_placeholder
STRIPE_API_VERSION=2022-11-15
EOF
# Run all top-level test_*.js files (skips integration/ and satloc/ sub-dirs
# which are covered by the jest-integration job or need live connections).
- name: Run Mocha unit tests (tests/)
run: |
npx mocha --exit --timeout 120000 \
--require tests/setup.js \
'tests/test_*.js'
continue-on-error: false
# Run Mocha tests in tests/utils/
- name: Run Mocha utility tests (tests/utils/)
run: npm run test:utils
continue-on-error: false