fix: abs path on windows #1004
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 | |
| with: | |
| submodules: recursive | |
| - 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 | |
| with: | |
| submodules: recursive | |
| - 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: 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 | |
| with: | |
| submodules: recursive | |
| - 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 | |
| with: | |
| submodules: recursive | |
| - 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 | |
| with: | |
| submodules: recursive | |
| - name: Restore Vide LSP WASM cache | |
| id: vide-lsp-wasm-cache | |
| uses: actions/cache/restore@v4 | |
| with: | |
| path: crates/vide-lsp-wasm/dist | |
| key: vide-lsp-wasm-${{ runner.os }}-${{ env.EMSDK_VERSION }}-${{ hashFiles('Cargo.toml', 'Cargo.lock', 'build.rs', 'rust-toolchain.toml', 'src/**', 'crates/**', '.github/actions/setup-emscripten/**', '.github/actions/setup-rust/**') }} | |
| - name: Verify cached Vide LSP WASM | |
| if: steps.vide-lsp-wasm-cache.outputs.cache-hit == 'true' | |
| working-directory: ${{ github.workspace }} | |
| run: | | |
| test -s crates/vide-lsp-wasm/dist/vide-lsp.js | |
| test -s crates/vide-lsp-wasm/dist/vide-core.js | |
| test -s crates/vide-lsp-wasm/dist/vide-core.wasm | |
| - name: Install Rust | |
| if: steps.vide-lsp-wasm-cache.outputs.cache-hit != 'true' | |
| uses: ./.github/actions/setup-rust | |
| - name: Setup sccache | |
| if: steps.vide-lsp-wasm-cache.outputs.cache-hit != 'true' | |
| uses: ./.github/actions/setup-sccache | |
| with: | |
| cmake-launcher: "true" | |
| - name: Rust Cache | |
| if: steps.vide-lsp-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/**', '.github/actions/setup-emscripten/**', '.github/actions/setup-rust/**') }} | |
| cache-workspace-crates: true | |
| cache-on-failure: true | |
| - name: Install Emscripten SDK | |
| if: steps.vide-lsp-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: Read VS Code Web version | |
| id: vscode-web-version | |
| working-directory: editors/vscode/test-web | |
| shell: bash | |
| run: | | |
| vscode_commit="$(node -p "require('./package.json').config.vscodeWebCommit")" | |
| if [[ ! "${vscode_commit}" =~ ^[0-9a-f]{40}$ ]]; then | |
| echo "::error::test-web/package.json config.vscodeWebCommit must be a 40-character lowercase Git commit" | |
| exit 1 | |
| fi | |
| echo "commit=${vscode_commit}" >> "${GITHUB_OUTPUT}" | |
| echo "folder=vscode-web-stable-${vscode_commit}" >> "${GITHUB_OUTPUT}" | |
| - name: Restore VS Code Web cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: editors/vscode/test-web/.vscode-test-web | |
| key: ${{ steps.vscode-web-version.outputs.folder }} | |
| - name: Download VS Code Web | |
| working-directory: editors/vscode/test-web | |
| env: | |
| VSCODE_WEB_COMMIT: ${{ steps.vscode-web-version.outputs.commit }} | |
| VSCODE_WEB_FOLDER: ${{ steps.vscode-web-version.outputs.folder }} | |
| run: | | |
| vscode_dir=".vscode-test-web/${VSCODE_WEB_FOLDER}" | |
| if [ ! -f "${vscode_dir}/version" ]; then | |
| archive="${RUNNER_TEMP}/vscode-web.tar.gz" | |
| curl --fail --location --retry 10 --retry-all-errors \ | |
| --output "${archive}" \ | |
| "https://vscode.download.prss.microsoft.com/dbazure/download/stable/${VSCODE_WEB_COMMIT}/vscode-web.tar.gz" | |
| rm -rf "${vscode_dir}" | |
| mkdir -p "${vscode_dir}" | |
| tar -xzf "${archive}" --strip-components=1 -C "${vscode_dir}" | |
| printf '%s' "${VSCODE_WEB_FOLDER}" > "${vscode_dir}/version" | |
| fi | |
| - name: Build Vide LSP WASM | |
| if: steps.vide-lsp-wasm-cache.outputs.cache-hit != 'true' | |
| working-directory: ${{ github.workspace }} | |
| run: | | |
| source "${EMSDK}/emsdk_env.sh" | |
| node crates/vide-lsp-wasm/scripts/build.mjs | |
| - name: Save Vide LSP WASM cache | |
| if: steps.vide-lsp-wasm-cache.outputs.cache-hit != 'true' | |
| uses: actions/cache/save@v4 | |
| continue-on-error: true | |
| with: | |
| path: crates/vide-lsp-wasm/dist | |
| key: ${{ steps.vide-lsp-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 |