docs: prepare release notes for v3.9.3 (#920) #3231
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 | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| concurrency: | |
| group: ci-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| lint: | |
| runs-on: ubuntu-latest | |
| name: Lint | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: 22 | |
| - name: Install dependencies | |
| shell: bash | |
| run: | | |
| for attempt in 1 2 3; do | |
| npm install && break | |
| if [ "$attempt" -lt 3 ]; then | |
| echo "::warning::npm install attempt $attempt failed, retrying in 15s..." | |
| sleep 15 | |
| else | |
| echo "::error::npm install failed after 3 attempts" | |
| exit 1 | |
| fi | |
| done | |
| - name: Run Biome | |
| run: npx @biomejs/biome check src/ tests/ | |
| test: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-latest, macos-latest, windows-latest] | |
| node-version: [22] | |
| runs-on: ${{ matrix.os }} | |
| name: Test Node ${{ matrix.node-version }} (${{ matrix.os }}) | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: ${{ matrix.node-version }} | |
| - name: Install dependencies | |
| shell: bash | |
| run: | | |
| for attempt in 1 2 3; do | |
| npm install && break | |
| if [ "$attempt" -lt 3 ]; then | |
| echo "::warning::npm install attempt $attempt failed, retrying in 15s..." | |
| sleep 15 | |
| else | |
| echo "::error::npm install failed after 3 attempts" | |
| exit 1 | |
| fi | |
| done | |
| - name: Run tests | |
| run: npm test | |
| typecheck: | |
| runs-on: ubuntu-latest | |
| name: TypeScript type check | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: 22 | |
| - name: Install dependencies | |
| shell: bash | |
| run: | | |
| for attempt in 1 2 3; do | |
| npm install && break | |
| if [ "$attempt" -lt 3 ]; then | |
| echo "::warning::npm install attempt $attempt failed, retrying in 15s..." | |
| sleep 15 | |
| else | |
| echo "::error::npm install failed after 3 attempts" | |
| exit 1 | |
| fi | |
| done | |
| - name: Type check | |
| run: npm run typecheck | |
| audit: | |
| runs-on: ubuntu-latest | |
| name: Security audit | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: 22 | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Audit production dependencies | |
| run: npm audit --omit=dev --audit-level=high | |
| verify-imports: | |
| runs-on: ubuntu-latest | |
| name: Verify dynamic imports | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: 22 | |
| - name: Verify all dynamic imports resolve | |
| run: | | |
| STRIP_FLAG=$(node -e "const [M]=process.versions.node.split('.').map(Number); console.log(M>=23?'--strip-types':'--experimental-strip-types')") | |
| node $STRIP_FLAG scripts/verify-imports.ts | |
| parity: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-latest, macos-latest, windows-latest] | |
| runs-on: ${{ matrix.os }} | |
| name: Engine parity (${{ matrix.os }}) | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: 22 | |
| - name: Install dependencies | |
| shell: bash | |
| run: | | |
| for attempt in 1 2 3; do | |
| npm install && break | |
| if [ "$attempt" -lt 3 ]; then | |
| echo "::warning::npm install attempt $attempt failed, retrying in 15s..." | |
| sleep 15 | |
| else | |
| echo "::error::npm install failed after 3 attempts" | |
| exit 1 | |
| fi | |
| done | |
| - name: Verify native addon is available | |
| shell: bash | |
| run: | | |
| node -e " | |
| const { createRequire } = require('node:module'); | |
| const r = createRequire(require.resolve('./package.json')); | |
| const os = require('os'); | |
| const fs = require('fs'); | |
| const plat = os.platform(); | |
| const arch = os.arch(); | |
| let libc = ''; | |
| if (plat === 'linux') { | |
| try { | |
| const files = fs.readdirSync('/lib'); | |
| libc = files.some(f => f.startsWith('ld-musl-') && f.endsWith('.so.1')) ? 'musl' : 'gnu'; | |
| } catch { libc = 'gnu'; } | |
| } | |
| const pkgs = { | |
| 'linux-x64-gnu': '@optave/codegraph-linux-x64-gnu', | |
| 'linux-x64-musl': '@optave/codegraph-linux-x64-musl', | |
| 'linux-arm64-gnu': '@optave/codegraph-linux-arm64-gnu', | |
| 'linux-arm64-musl': '@optave/codegraph-linux-arm64-musl', | |
| 'darwin-arm64': '@optave/codegraph-darwin-arm64', | |
| 'darwin-x64': '@optave/codegraph-darwin-x64', | |
| 'win32-x64': '@optave/codegraph-win32-x64-msvc', | |
| }; | |
| const key = libc ? plat + '-' + arch + '-' + libc : plat + '-' + arch; | |
| const pkg = pkgs[key]; | |
| if (!pkg) { console.error('No native package for ' + key); process.exit(1); } | |
| try { r(pkg); console.log('Native addon loaded: ' + pkg); } | |
| catch (e) { console.error('Failed to load ' + pkg + ': ' + e.message); process.exit(1); } | |
| " | |
| - name: Run parity tests | |
| shell: bash | |
| env: | |
| CODEGRAPH_PARITY: '1' | |
| run: npx vitest run tests/engines/ tests/integration/build-parity.test.ts --reporter=verbose | |
| rust-check: | |
| runs-on: ubuntu-latest | |
| name: Rust compile check | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Setup Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Rust cache | |
| uses: Swatinem/rust-cache@v2 | |
| with: | |
| workspaces: crates/codegraph-core | |
| - name: Check compilation | |
| run: cargo check --workspace | |
| ci-pipeline: | |
| if: always() | |
| needs: [lint, test, typecheck, audit, verify-imports, rust-check, parity] | |
| runs-on: ubuntu-latest | |
| name: CI Testing Pipeline | |
| steps: | |
| - name: Check results | |
| run: | | |
| if [[ "${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}" == "true" ]]; then | |
| echo "One or more CI jobs failed or were cancelled." | |
| exit 1 | |
| fi |