Skip to content

chore(deps): bump content-disposition from 1.0.1 to 1.1.0 #243

chore(deps): bump content-disposition from 1.0.1 to 1.1.0

chore(deps): bump content-disposition from 1.0.1 to 1.1.0 #243

Workflow file for this run

name: CI Tests
on:
push:
branches: [ main, dev ]
pull_request:
branches: [ main, dev ]
workflow_dispatch:
inputs:
run_full_suite:
description: 'Run full test suite (includes parity/integration tests)'
required: false
type: boolean
default: false
permissions:
contents: read
jobs:
# Fast unit tests - always runs
fast-tests:
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Checkout RuleHub
uses: actions/checkout@v6
with:
repository: ruleworld/rulehub
path: RuleHub
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: '22'
cache: 'npm'
- name: Install dependencies
run: npm install --legacy-peer-deps
- name: Run fast test suite
run: npm run test:fast
env:
NODE_ENV: test
RULEHUB_ROOT: ${{ github.workspace }}/RuleHub
- name: Upload coverage (if generated)
if: always()
uses: actions/upload-artifact@v7
with:
name: coverage-fast
path: coverage/
if-no-files-found: ignore
# Build verification
build-check:
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Checkout RuleHub
uses: actions/checkout@v6
with:
repository: ruleworld/rulehub
path: RuleHub
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: '22'
cache: 'npm'
- name: Install dependencies
run: npm install --legacy-peer-deps
- name: Type check
run: npm run type-check
- name: Build (quick)
run: npm run build:quick
- name: Check build output
run: |
if [ ! -d "dist" ]; then
echo "Build failed: dist directory not found"
exit 1
fi
echo "Build successful: dist directory exists"
ls -lah dist/ | head -20
# Full test suite - runs on main, manual trigger, or when workflow file changes
full-tests:
name: full-tests (shard ${{ matrix.shard }}/3)
runs-on: ubuntu-latest
timeout-minutes: 45
strategy:
fail-fast: false
matrix:
shard: [1, 2, 3]
if: |
github.event_name == 'workflow_dispatch' && github.event.inputs.run_full_suite == 'true' ||
github.ref == 'refs/heads/main' ||
contains(github.event.head_commit.message, '[full-tests]')
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Checkout RuleHub
uses: actions/checkout@v6
with:
repository: ruleworld/rulehub
path: RuleHub
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.11'
- name: Install BioNetGen (native binaries for parity tests)
run: |
pip install bionetgen
BNG_ROOT=$(python -c "import bionetgen; import os; print(os.path.join(os.path.dirname(bionetgen.__file__), 'bng-linux'))")
if [ ! -d "$BNG_ROOT" ]; then
echo "bng-linux not found, falling back to parent directory"
BNG_ROOT=$(python -c "import bionetgen; import os; print(os.path.dirname(bionetgen.__file__))")
fi
echo "BNG2_PATH=${BNG_ROOT}/BNG2.pl" >> $GITHUB_ENV
echo "BNGPATH=${BNG_ROOT}" >> $GITHUB_ENV
echo "NFSIM_PATH=${BNG_ROOT}/bin/NFsim" >> $GITHUB_ENV
# Verify binaries exist (don't fail here, tests will skip if not found)
ls -la "${BNG_ROOT}/BNG2.pl" || true
ls -la "${BNG_ROOT}/bin/NFsim" || true
- name: Build NFsim from source (ruleworld/nfsim HEAD)
run: |
git clone --depth 1 https://github.com/ruleworld/nfsim.git /tmp/nfsim-src
cd /tmp/nfsim-src
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j"$(nproc)"
cp /tmp/nfsim-src/build/NFsim "${BNGPATH}/bin/NFsim"
echo "NFSIM_PATH=${BNGPATH}/bin/NFsim" >> $GITHUB_ENV
"${BNGPATH}/bin/NFsim" -help >/dev/null || true
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: '22'
cache: 'npm'
- name: Install dependencies
run: npm install --legacy-peer-deps
- name: Run full test suite (sharded)
run: npx vitest run --config vitest.full.config.ts --shard=${{ matrix.shard }}/3
env:
NODE_ENV: test
RULEHUB_ROOT: ${{ github.workspace }}/RuleHub
BNG2_PATH: ${{ env.BNG2_PATH }}
BNGPATH: ${{ env.BNGPATH }}
NFSIM_PATH: ${{ env.NFSIM_PATH }}
- name: Upload coverage (if generated)
if: always()
uses: actions/upload-artifact@v7
with:
name: coverage-full-shard-${{ matrix.shard }}
path: coverage/
if-no-files-found: ignore
- name: Upload test results
if: always()
uses: actions/upload-artifact@v7
with:
name: test-results-full-shard-${{ matrix.shard }}
path: |
test-results/
artifacts/
if-no-files-found: ignore
# Reference parity suite (BioNetGen-style curated validation)
reference-tests:
runs-on: ubuntu-latest
timeout-minutes: 45
if: |
github.event_name == 'workflow_dispatch' && github.event.inputs.run_full_suite == 'true' ||
github.ref == 'refs/heads/main' ||
contains(github.event.head_commit.message, '[full-tests]')
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Checkout RuleHub
uses: actions/checkout@v6
with:
repository: ruleworld/rulehub
path: RuleHub
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.11'
- name: Install BioNetGen (native binaries for parity tests)
run: |
pip install bionetgen
BNG_ROOT=$(python -c "import bionetgen; import os; print(os.path.join(os.path.dirname(bionetgen.__file__), 'bng-linux'))")
if [ ! -d "$BNG_ROOT" ]; then
echo "bng-linux not found, falling back to parent directory"
BNG_ROOT=$(python -c "import bionetgen; import os; print(os.path.dirname(bionetgen.__file__))")
fi
echo "BNG2_PATH=${BNG_ROOT}/BNG2.pl" >> $GITHUB_ENV
echo "BNGPATH=${BNG_ROOT}" >> $GITHUB_ENV
echo "NFSIM_PATH=${BNG_ROOT}/bin/NFsim" >> $GITHUB_ENV
- name: Build NFsim from source (ruleworld/nfsim HEAD)
run: |
git clone --depth 1 https://github.com/ruleworld/nfsim.git /tmp/nfsim-src
cd /tmp/nfsim-src
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j"$(nproc)"
cp /tmp/nfsim-src/build/NFsim "${BNGPATH}/bin/NFsim"
echo "NFSIM_PATH=${BNGPATH}/bin/NFsim" >> $GITHUB_ENV
"${BNGPATH}/bin/NFsim" -help >/dev/null || true
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: '22'
cache: 'npm'
- name: Install dependencies
run: npm install --legacy-peer-deps
- name: Install Playwright browsers
run: npx playwright install chromium --with-deps
- name: Build application
run: npm run build
- name: Generate web output via Playwright
run: npm run generate:web-output
env:
NODE_ENV: test
RULEHUB_ROOT: ${{ github.workspace }}/RuleHub
- name: Generate BNG2 reference outputs
run: npm run generate:gdat
env:
NODE_ENV: test
RULEHUB_ROOT: ${{ github.workspace }}/RuleHub
BNG2_PATH: ${{ env.BNG2_PATH }}
BNG2_PL: ${{ env.BNG2_PATH }}
BNGPATH: ${{ env.BNGPATH }}
NFSIM_PATH: ${{ env.NFSIM_PATH }}
- name: Run reference validation suite
run: npm run test:reference
env:
BNG_OUTPUT_DIR: bng_test_output
NODE_ENV: test
RULEHUB_ROOT: ${{ github.workspace }}/RuleHub
BNG2_PATH: ${{ env.BNG2_PATH }}
BNGPATH: ${{ env.BNGPATH }}
NFSIM_PATH: ${{ env.NFSIM_PATH }}
- name: Upload reference test results
if: always()
uses: actions/upload-artifact@v7
with:
name: test-results-reference
path: |
test-results/
artifacts/
if-no-files-found: ignore
# Deterministic ODE parity (direct comparison against BNG2 fixtures using layered parity check)
deterministic-parity:
name: deterministic-parity (shard ${{ matrix.shard }}/3)
runs-on: ubuntu-latest
timeout-minutes: 60
strategy:
fail-fast: false
matrix:
shard: [1, 2, 3]
if: |
github.event_name == 'workflow_dispatch' && github.event.inputs.run_full_suite == 'true' ||
github.ref == 'refs/heads/main' ||
contains(github.event.head_commit.message, '[full-tests]')
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Checkout RuleHub
uses: actions/checkout@v6
with:
repository: ruleworld/rulehub
path: RuleHub
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.11'
- name: Install BioNetGen (native binaries for parity tests)
run: |
pip install bionetgen
BNG_ROOT=$(python -c "import bionetgen; import os; print(os.path.join(os.path.dirname(bionetgen.__file__), 'bng-linux'))")
if [ ! -d "$BNG_ROOT" ]; then
echo "bng-linux not found, falling back to parent directory"
BNG_ROOT=$(python -c "import bionetgen; import os; print(os.path.dirname(bionetgen.__file__))")
fi
echo "BNG2_PATH=${BNG_ROOT}/BNG2.pl" >> $GITHUB_ENV
echo "BNGPATH=${BNG_ROOT}" >> $GITHUB_ENV
echo "NFSIM_PATH=${BNG_ROOT}/bin/NFsim" >> $GITHUB_ENV
- name: Build NFsim from source (ruleworld/nfsim HEAD)
run: |
git clone --depth 1 https://github.com/ruleworld/nfsim.git /tmp/nfsim-src
cd /tmp/nfsim-src
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j"$(nproc)"
cp /tmp/nfsim-src/build/NFsim "${BNGPATH}/bin/NFsim"
echo "NFSIM_PATH=${BNGPATH}/bin/NFsim" >> $GITHUB_ENV
"${BNGPATH}/bin/NFsim" -help >/dev/null || true
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: '22'
cache: 'npm'
- name: Install dependencies
run: npm install --legacy-peer-deps
- name: Run deterministic parity shard
run: npm run test:deterministic:parity -- --shard ${{ matrix.shard }} --shards 3 --out artifacts/parity_layer_report.deterministic.shard-${{ matrix.shard }}.json --timeoutMs 180000
env:
NODE_ENV: test
RULEHUB_ROOT: ${{ github.workspace }}/RuleHub
BNG2_PATH: ${{ env.BNG2_PATH }}
BNGPATH: ${{ env.BNGPATH }}
NFSIM_PATH: ${{ env.NFSIM_PATH }}
- name: Upload deterministic parity reports
if: always()
uses: actions/upload-artifact@v7
with:
name: parity-deterministic-shard-${{ matrix.shard }}
path: artifacts/parity_layer_report.deterministic.shard-${{ matrix.shard }}.json
if-no-files-found: ignore