refactor(hir): separate scopes from arena owners (#313) #912
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: [master] | |
| pull_request: | |
| types: [opened, synchronize, reopened] | |
| branches: ["**"] | |
| workflow_dispatch: | |
| permissions: | |
| actions: read | |
| contents: read | |
| pull-requests: read | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: ${{ github.ref != 'refs/heads/master' }} | |
| env: | |
| EMSDK_VERSION: 5.0.2 | |
| jobs: | |
| changes: | |
| name: Detect changes | |
| runs-on: ubuntu-latest | |
| outputs: | |
| plan: ${{ steps.plan.outputs.result }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Detect changed paths | |
| id: filter | |
| if: github.event_name != 'workflow_dispatch' | |
| uses: dorny/paths-filter@v4 | |
| with: | |
| filters: .github/ci-modules.yml | |
| - name: Plan CI jobs | |
| id: plan | |
| uses: actions/github-script@v9 | |
| env: | |
| FILTER_RUST: ${{ steps.filter.outputs.rust }} | |
| FILTER_VSCODE: ${{ steps.filter.outputs.vscode }} | |
| FILTER_PACKAGE: ${{ steps.filter.outputs.package }} | |
| with: | |
| retries: 3 | |
| result-encoding: string | |
| script: | | |
| const { pathToFileURL } = await import('node:url'); | |
| const scriptUrl = pathToFileURL(`${process.env.GITHUB_WORKSPACE}/.github/scripts/ci-plan.mjs`); | |
| const { planCi } = await import(scriptUrl.href); | |
| const plan = await planCi({ | |
| github, | |
| context, | |
| core, | |
| filters: { | |
| rust: process.env.FILTER_RUST === 'true', | |
| vscode: process.env.FILTER_VSCODE === 'true', | |
| package: process.env.FILTER_PACKAGE === 'true', | |
| }, | |
| }); | |
| return JSON.stringify(plan); | |
| rust-lint: | |
| name: Rust Linting | |
| needs: changes | |
| if: fromJSON(needs.changes.outputs.plan).run_rust_lint == true | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install Rust | |
| uses: ./.github/actions/setup-rust | |
| with: | |
| components: clippy, rustfmt | |
| - name: Setup sccache | |
| uses: ./.github/actions/setup-sccache | |
| with: | |
| cmake-launcher: "true" | |
| - name: Rust Cache | |
| uses: Swatinem/rust-cache@v2 | |
| continue-on-error: true | |
| with: | |
| shared-key: rust-${{ runner.os }} | |
| key: workspace-${{ hashFiles('Cargo.toml', 'Cargo.lock', 'build.rs', 'rust-toolchain.toml', 'src/**', 'crates/**', 'xtask/**') }} | |
| cache-workspace-crates: true | |
| cache-on-failure: true | |
| - name: Format Check | |
| run: cargo fmt --all -- --check | |
| - name: Config Artifact Check | |
| run: cargo xtask check-config-artifacts | |
| - name: Clippy | |
| run: cargo clippy --workspace --all-targets -- -D warnings | |
| rust-test: | |
| name: Rust Tests (${{ matrix.os }}) | |
| needs: changes | |
| if: fromJSON(needs.changes.outputs.plan).run_rust_test == true | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: ${{ fromJSON(needs.changes.outputs.plan).rust_test_matrix }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install Rust | |
| uses: ./.github/actions/setup-rust | |
| - name: Setup sccache | |
| uses: ./.github/actions/setup-sccache | |
| with: | |
| cmake-launcher: "true" | |
| - name: Rust Cache | |
| uses: Swatinem/rust-cache@v2 | |
| continue-on-error: true | |
| with: | |
| shared-key: rust-${{ runner.os }} | |
| key: workspace-${{ hashFiles('Cargo.toml', 'Cargo.lock', 'build.rs', 'rust-toolchain.toml', 'src/**', 'crates/**', 'xtask/**') }} | |
| cache-workspace-crates: true | |
| cache-on-failure: true | |
| - name: Test | |
| run: cargo test --workspace | |
| vscode-extension: | |
| name: VS Code Checks | |
| needs: changes | |
| if: fromJSON(needs.changes.outputs.plan).run_vscode_extension == true | |
| runs-on: ubuntu-latest | |
| defaults: | |
| run: | |
| working-directory: editors/vscode | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Setup Node | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| cache: npm | |
| cache-dependency-path: editors/vscode/package-lock.json | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Test extension | |
| run: npm test | |
| vscode-web-smoke: | |
| name: VS Code Web Smoke | |
| needs: changes | |
| if: fromJSON(needs.changes.outputs.plan).run_vscode_web_smoke == true | |
| runs-on: ubuntu-latest | |
| defaults: | |
| run: | |
| working-directory: editors/vscode | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Restore playground WASM cache | |
| id: playground-wasm-cache | |
| uses: actions/cache/restore@v4 | |
| with: | |
| path: website/playground/public/wasm | |
| key: playground-wasm-${{ runner.os }}-${{ env.EMSDK_VERSION }}-${{ hashFiles('Cargo.toml', 'Cargo.lock', 'build.rs', 'rust-toolchain.toml', 'src/**', 'crates/**', 'website/playground/scripts/build-vide-wasm.mjs', 'website/playground/scripts/script-utils.mjs', '.github/actions/setup-emscripten/**', '.github/actions/setup-rust/**') }} | |
| - name: Verify cached playground WASM | |
| if: steps.playground-wasm-cache.outputs.cache-hit == 'true' | |
| working-directory: . | |
| run: | | |
| test -s website/playground/public/wasm/vide-lsp.js | |
| test -s website/playground/public/wasm/vide-core.js | |
| test -s website/playground/public/wasm/vide-core.wasm | |
| - name: Install Rust | |
| if: steps.playground-wasm-cache.outputs.cache-hit != 'true' | |
| uses: ./.github/actions/setup-rust | |
| - name: Setup sccache | |
| if: steps.playground-wasm-cache.outputs.cache-hit != 'true' | |
| uses: ./.github/actions/setup-sccache | |
| with: | |
| cmake-launcher: "true" | |
| - name: Rust Cache | |
| if: steps.playground-wasm-cache.outputs.cache-hit != 'true' | |
| uses: Swatinem/rust-cache@v2 | |
| continue-on-error: true | |
| with: | |
| shared-key: vscode-web-wasm-${{ runner.os }}-${{ env.EMSDK_VERSION }} | |
| key: wasm-src-${{ hashFiles('Cargo.toml', 'Cargo.lock', 'build.rs', 'rust-toolchain.toml', 'src/**', 'crates/**', 'website/playground/scripts/build-vide-wasm.mjs', 'website/playground/scripts/script-utils.mjs', '.github/actions/setup-emscripten/**', '.github/actions/setup-rust/**') }} | |
| cache-workspace-crates: true | |
| cache-on-failure: true | |
| - name: Install Emscripten SDK | |
| if: steps.playground-wasm-cache.outputs.cache-hit != 'true' | |
| uses: ./.github/actions/setup-emscripten | |
| with: | |
| version: ${{ env.EMSDK_VERSION }} | |
| - name: Setup Node | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| cache: npm | |
| cache-dependency-path: | | |
| editors/vscode/package-lock.json | |
| editors/vscode/test-web/package-lock.json | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Install web smoke dependencies | |
| working-directory: editors/vscode/test-web | |
| run: npm ci | |
| - name: Build playground WASM | |
| if: steps.playground-wasm-cache.outputs.cache-hit != 'true' | |
| working-directory: website | |
| run: | | |
| source "${EMSDK}/emsdk_env.sh" | |
| npm --workspace playground run build:wasm | |
| - name: Save playground WASM cache | |
| if: steps.playground-wasm-cache.outputs.cache-hit != 'true' | |
| uses: actions/cache/save@v4 | |
| continue-on-error: true | |
| with: | |
| path: website/playground/public/wasm | |
| key: ${{ steps.playground-wasm-cache.outputs.cache-primary-key }} | |
| - name: Web smoke test | |
| run: npm run test:web | |
| dev-artifacts: | |
| name: Dev Artifacts | |
| needs: changes | |
| if: fromJSON(needs.changes.outputs.plan).run_dev_artifacts == true | |
| uses: ./.github/workflows/build-artifacts.yml | |
| with: | |
| plan: '{"announcement_is_prerelease":true}' | |
| build-kind: nightly | |
| cargo-profile: debug | |
| vsix-profile: debug |