chore(deps): bump content-disposition from 1.0.1 to 1.1.0 #243
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |