Repository navigation
fix: finalize and recover recordings stored on exFAT drives #9431
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" | |
| on: | |
| push: | |
| branches: | |
| - main | |
| pull_request: | |
| workflow_dispatch: | |
| concurrency: | |
| group: ${{ github.head_ref || github.ref_name }} | |
| cancel-in-progress: true | |
| env: | |
| BRANCH_NAME: ${{ github.head_ref || github.ref_name }} | |
| jobs: | |
| changes: | |
| name: Detect Changes | |
| runs-on: ubuntu-latest | |
| outputs: | |
| desktop: ${{ steps.filter.outputs.desktop }} | |
| rust: ${{ steps.filter.outputs.rust }} | |
| tauri-plugins: ${{ steps.filter.outputs.tauri-plugins }} | |
| branch: ${{ steps.branch.outputs.branch }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Check for changes | |
| uses: dorny/paths-filter@v2 | |
| id: filter | |
| with: | |
| filters: | | |
| desktop: | |
| - '.gitattributes' | |
| - '.github/actions/install-desktop-deps/**' | |
| - '.github/actions/setup-js/**' | |
| - '.github/workflows/ci.yml' | |
| - 'apps/cli/**' | |
| - 'apps/desktop/**' | |
| - 'apps/desktop-gpui/**' | |
| - 'crates/**' | |
| - 'packages/database/**' | |
| - 'packages/ui-solid/**' | |
| - 'packages/utils/**' | |
| - 'packages/web-api-contract/**' | |
| - 'scripts/build-desktop-binaries*' | |
| - 'scripts/build-gpui-binary.sh' | |
| - 'scripts/build-linux-packages.mjs' | |
| - 'scripts/build-macos-packages*' | |
| - 'scripts/bundle-gpui*' | |
| - 'scripts/finalize-linux-*' | |
| - 'scripts/finalize-macos-*' | |
| - 'scripts/linux-bundle-config*' | |
| - 'scripts/prepare-gpui-dependency*' | |
| - 'scripts/run-gpui-build*' | |
| - 'scripts/sync-desktop-versions.mjs' | |
| - 'scripts/verify-gpui-release-inputs.mjs' | |
| - 'Cargo.toml' | |
| - 'Cargo.lock' | |
| - 'bun.lock' | |
| - 'bunfig.toml' | |
| - 'package.json' | |
| rust: | |
| - '.cargo/**' | |
| - '.github/**' | |
| - 'apps/cli/**' | |
| - 'apps/desktop-gpui/**' | |
| - 'crates/**' | |
| - 'apps/desktop/src-tauri/**' | |
| - 'Cargo.toml' | |
| - 'Cargo.lock' | |
| tauri-plugins: | |
| - 'Cargo.lock' | |
| - 'bun.lock' | |
| - 'scripts/check-tauri-plugin-versions*' | |
| - 'apps/desktop/package.json' | |
| - name: Output branch name | |
| id: branch | |
| run: | | |
| echo "branch=${{ env.BRANCH_NAME }}" >> $GITHUB_OUTPUT | |
| typecheck: | |
| name: Typecheck | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - uses: ./.github/actions/setup-js | |
| - run: bun run --cwd apps/web next typegen | |
| - name: Check MCP card bundle | |
| run: bun run --cwd apps/web mcp-card:check | |
| - name: Test workspace tooling | |
| run: node --test scripts/bun-scripts.test.mjs scripts/check-tauri-plugin-versions.test.mjs | |
| - name: Test Loops profile sync | |
| run: | | |
| bun test scripts/loops/profile.test.ts scripts/loops/lifecycle.test.ts | |
| bun run tsc --noEmit --strict --jsx react-jsx --allowImportingTsExtensions --target ESNext --module ESNext --moduleResolution bundler --resolveJsonModule --types bun --skipLibCheck scripts/loops/*.ts | |
| - name: Test render farm orchestration | |
| run: | | |
| bun test apps/render-farm | |
| bun run --cwd apps/render-farm typecheck | |
| - name: Test web React compatibility | |
| run: >- | |
| bun run --cwd apps/web test | |
| __tests__/unit/embed-video-playback-chrome.test.ts | |
| __tests__/unit/homepage-demo-accessibility.test.ts | |
| __tests__/unit/linkified-text.test.ts | |
| __tests__/unit/loom-import-ui.test.ts | |
| __tests__/unit/media-player-store-refs.test.ts | |
| __tests__/unit/seo-demo-videos.test.ts | |
| __tests__/unit/signed-baa-card.test.ts | |
| __tests__/unit/summary-editor.test.ts | |
| __tests__/unit/sso-login-pages.test.ts | |
| - name: Typecheck | |
| run: bun run typecheck | |
| mobile: | |
| name: Mobile | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - uses: ./.github/actions/setup-js | |
| - name: Check Expo dependencies | |
| env: | |
| EXPO_OFFLINE: "1" | |
| run: bun run --cwd apps/mobile expo install --check | |
| - name: Run Expo Doctor | |
| env: | |
| EXPO_OFFLINE: "1" | |
| working-directory: apps/mobile | |
| run: bunx expo-doctor@1.20.1 | |
| - name: Typecheck | |
| run: bun run --cwd apps/mobile typecheck | |
| - name: Test | |
| run: bun run --cwd apps/mobile test | |
| format-biome: | |
| name: Format (Biome) | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup Biome | |
| uses: biomejs/setup-biome@v2 | |
| with: | |
| # Don't use `latest` as Biome throws an error when it doesn't match the | |
| # schema version in the config file. | |
| version: 2.2.0 | |
| - name: Run Biome | |
| run: biome ci . --linter-enabled=false | |
| format-rust: | |
| name: Format (Cargo) | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@1.88.0 | |
| with: | |
| components: rustfmt | |
| - name: Check formatting | |
| run: cargo fmt --check | |
| clippy: | |
| name: Clippy | |
| needs: changes | |
| if: needs.changes.outputs.rust == 'true' | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| settings: | |
| - target: aarch64-apple-darwin | |
| runner: macos-latest | |
| - target: x86_64-pc-windows-msvc | |
| runner: windows-2022 | |
| runs-on: ${{ matrix.settings.runner }} | |
| permissions: | |
| contents: read | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Rust setup | |
| uses: dtolnay/rust-toolchain@1.88.0 | |
| with: | |
| targets: ${{ matrix.settings.target }} | |
| components: clippy | |
| - uses: ./.github/actions/setup-rust-cache | |
| with: | |
| target: ${{ matrix.settings.target }} | |
| - name: Create .env file in root | |
| run: | | |
| echo "VITE_ENVIRONMENT=production" >> .env | |
| echo "CAP_DESKTOP_SENTRY_URL=https://6a3b6a09e6ae976c2ad6fff710e88748@o4506859771527168.ingest.us.sentry.io/4508330917101568" >> .env | |
| echo "NEXT_PUBLIC_WEB_URL=${{ secrets.NEXT_PUBLIC_WEB_URL }}" >> .env | |
| echo 'NEXTAUTH_URL=${{ secrets.NEXT_PUBLIC_WEB_URL }}' >> .env | |
| echo 'VITE_OPENPANEL_CLIENT_ID=${{ secrets.VITE_OPENPANEL_CLIENT_ID }}' >> .env | |
| echo 'VITE_OPENPANEL_API_URL=${{ secrets.VITE_OPENPANEL_API_URL }}' >> .env | |
| echo 'VITE_SERVER_URL=${{ secrets.NEXT_PUBLIC_WEB_URL }}' >> .env | |
| cat .env >> $GITHUB_ENV | |
| - name: Run setup | |
| shell: bash | |
| run: node scripts/setup.js | |
| - name: Test desktop installation and storage helpers | |
| shell: bash | |
| run: cargo test --locked -p cap-utils -p cap-cli-install --lib | |
| - name: Build desktop binaries | |
| shell: bash | |
| run: ./scripts/build-desktop-binaries.sh ${{ matrix.settings.target }} | |
| - name: Run Clippy | |
| run: cargo clippy --workspace --all-features --locked -- -D warnings | |
| lint-biome: | |
| name: Lint (Biome) | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup Biome | |
| uses: biomejs/setup-biome@v2 | |
| with: | |
| version: latest | |
| - name: Run Biome | |
| run: biome ci . || true | |
| build-desktop: | |
| name: Build Desktop | |
| needs: changes | |
| if: needs.changes.outputs.desktop == 'true' | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| settings: | |
| - target: aarch64-apple-darwin | |
| runner: macos-latest | |
| - target: x86_64-pc-windows-msvc | |
| runner: windows-2022 | |
| - target: x86_64-unknown-linux-gnu | |
| runner: ubuntu-24.04 | |
| runs-on: ${{ matrix.settings.runner }} | |
| env: | |
| TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} | |
| TURBO_TEAM: ${{ secrets.TURBO_TEAM }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Test desktop build preparation | |
| run: node --test scripts/prepare-gpui-dependency.test.mjs scripts/build-macos-packages.test.mjs scripts/bundle-gpui.test.mjs scripts/finalize-macos-packages.test.mjs | |
| - name: Install Linux desktop dependencies | |
| if: ${{ runner.os == 'Linux' }} | |
| uses: ./.github/actions/install-desktop-deps | |
| - name: Rust setup | |
| uses: dtolnay/rust-toolchain@1.88.0 | |
| with: | |
| targets: ${{ matrix.settings.target }} | |
| - uses: ./.github/actions/setup-rust-cache | |
| with: | |
| target: ${{ matrix.settings.target }} | |
| - uses: ./.github/actions/setup-js | |
| - name: Create .env file in root | |
| run: | | |
| echo "VITE_ENVIRONMENT=production" >> .env | |
| echo "CAP_DESKTOP_SENTRY_URL=https://6a3b6a09e6ae976c2ad6fff710e88748@o4506859771527168.ingest.us.sentry.io/4508330917101568" >> .env | |
| echo "NEXT_PUBLIC_WEB_URL=${{ secrets.NEXT_PUBLIC_WEB_URL }}" >> .env | |
| echo 'NEXTAUTH_URL=${{ secrets.NEXT_PUBLIC_WEB_URL }}' >> .env | |
| echo 'VITE_OPENPANEL_CLIENT_ID=${{ secrets.VITE_OPENPANEL_CLIENT_ID }}' >> .env | |
| echo 'VITE_OPENPANEL_API_URL=${{ secrets.VITE_OPENPANEL_API_URL }}' >> .env | |
| echo 'VITE_SERVER_URL=${{ secrets.NEXT_PUBLIC_WEB_URL }}' >> .env | |
| - name: Copy .env to apps/desktop | |
| run: cp .env apps/desktop/.env | |
| - name: Output .env file | |
| run: cat apps/desktop/.env | |
| - name: Run cap-setup | |
| shell: bash | |
| run: bun run cap-setup | |
| env: | |
| RUST_TARGET_TRIPLE: ${{ matrix.settings.target }} | |
| - name: Build desktop binaries | |
| shell: bash | |
| run: ./scripts/build-desktop-binaries.sh ${{ matrix.settings.target }} | |
| - name: Test Windows startup logging regressions | |
| if: runner.os == 'Windows' | |
| shell: bash | |
| run: | | |
| export PATH="$(cygpath "$GITHUB_WORKSPACE/target/debug"):$PATH" | |
| cargo test --locked -p cap-desktop --target ${{ matrix.settings.target }} --bin cap-desktop logging_tests | |
| cargo test --locked -p cap-desktop --target ${{ matrix.settings.target }} --test crash_sentinel | |
| - name: Test Linux desktop regressions | |
| if: ${{ runner.os == 'Linux' }} | |
| shell: bash | |
| run: | | |
| node --test scripts/linux-bundle-config.test.mjs scripts/finalize-linux-appimage.test.mjs scripts/finalize-linux-gpui-packages.test.mjs | |
| bun run --cwd apps/desktop vitest run scripts/prepare.test.js | |
| cargo test --locked -p cap-utils -p cap-cli-install --lib | |
| cargo test --locked -p cap --bin cap record::tests | |
| cargo test --locked -p cap-recording --lib -- --test-threads=1 | |
| cargo test --locked -p cap-enc-ffmpeg | |
| cargo test --locked -p cap-desktop --lib render_frame_event | |
| env: | |
| LD_LIBRARY_PATH: ${{ format('{0}/target/native-deps/lib:{0}/target/debug:{0}/target/{1}/debug', github.workspace, matrix.settings.target) }} | |
| - name: Test export estimate request lifecycle | |
| shell: bash | |
| run: | | |
| if [[ "$RUNNER_OS" == "Windows" ]]; then | |
| export PATH="$(cygpath "$GITHUB_WORKSPACE/target/debug"):$PATH" | |
| elif [[ "$RUNNER_OS" == "Linux" ]]; then | |
| export LD_LIBRARY_PATH="$GITHUB_WORKSPACE/target/native-deps/lib:$GITHUB_WORKSPACE/target/debug:$GITHUB_WORKSPACE/target/${{ matrix.settings.target }}/debug${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" | |
| fi | |
| cargo test --locked -p cap-desktop --test export_estimate_request | |
| - name: Build GPUI desktop | |
| shell: bash | |
| run: ./scripts/build-gpui-binary.sh debug ${{ matrix.settings.target }} | |
| - name: Test export preview device-loss handling | |
| shell: bash | |
| run: cargo test --locked -p cap-desktop --test gpu_device_health | |
| - name: Test GPUI desktop | |
| shell: bash | |
| run: | | |
| if [[ "$RUNNER_OS" == "Windows" ]]; then | |
| export PATH="$(cygpath "$GITHUB_WORKSPACE/target/debug"):$PATH" | |
| elif [[ "$RUNNER_OS" == "macOS" ]]; then | |
| frameworks="$GITHUB_WORKSPACE/apps/desktop-gpui/target/${{ matrix.settings.target }}/debug/Frameworks" | |
| mkdir -p "$frameworks" | |
| ln -sfn "$GITHUB_WORKSPACE/target/Frameworks/Spacedrive.framework" "$frameworks/Spacedrive.framework" | |
| elif [[ "$RUNNER_OS" == "Linux" ]]; then | |
| export LD_LIBRARY_PATH="$GITHUB_WORKSPACE/target/native-deps/lib:$GITHUB_WORKSPACE/target/debug:$GITHUB_WORKSPACE/target/${{ matrix.settings.target }}/debug${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" | |
| fi | |
| if [[ "$RUNNER_OS" == "Linux" ]]; then | |
| xvfb-run -a --server-args="-screen 0 1920x1080x24 -noreset" \ | |
| cargo +1.95.0 test --manifest-path apps/desktop-gpui/Cargo.toml --locked --target ${{ matrix.settings.target }} --bin cap-gpui | |
| else | |
| cargo +1.95.0 test --manifest-path apps/desktop-gpui/Cargo.toml --locked --target ${{ matrix.settings.target }} --bin cap-gpui | |
| fi | |
| cargo +1.95.0 test --manifest-path apps/desktop-gpui/Cargo.toml --locked --target ${{ matrix.settings.target }} -p cap-gpui-kernels | |
| - name: Build app | |
| working-directory: apps/desktop | |
| run: bun run tauri build --debug --target ${{ matrix.settings.target }} --no-bundle | |
| env: | |
| LD_LIBRARY_PATH: ${{ runner.os == 'Linux' && format('{0}/target/native-deps/lib:{0}/target/debug:{0}/target/{1}/debug', github.workspace, matrix.settings.target) || '' }} | |
| RUST_TARGET_TRIPLE: ${{ matrix.settings.target }} | |
| tauri-plugins: | |
| name: Verify Tauri plugin versions | |
| runs-on: ubuntu-latest | |
| needs: changes | |
| if: needs.changes.outputs.tauri-plugins == 'true' | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - uses: ./.github/actions/setup-js | |
| - name: Run verify | |
| shell: bash | |
| run: node scripts/check-tauri-plugin-versions.js | |
| rust-cache: | |
| name: Rust cache | |
| needs: changes | |
| if: needs.changes.outputs.branch == 'main' | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| settings: | |
| - target: x86_64-apple-darwin | |
| runner: macos-latest | |
| - target: aarch64-apple-darwin | |
| runner: macos-latest | |
| - target: x86_64-pc-windows-msvc | |
| runner: windows-2022 | |
| runs-on: ${{ matrix.settings.runner }} | |
| env: | |
| RUST_TARGET_TRIPLE: ${{ matrix.settings.target }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Rust setup | |
| uses: dtolnay/rust-toolchain@1.88.0 | |
| with: | |
| targets: ${{ matrix.settings.target }} | |
| components: clippy | |
| - uses: ./.github/actions/setup-rust-cache | |
| with: | |
| target: ${{ matrix.settings.target }} | |
| save-cache: true | |
| - name: Setup node | |
| uses: actions/setup-node@v3 | |
| with: | |
| node-version: 24 | |
| - run: node scripts/setup.js | |
| - name: Build desktop binaries | |
| shell: bash | |
| run: ./scripts/build-desktop-binaries.sh ${{ matrix.settings.target }} | |
| - name: Build debug | |
| run: cargo build --all --target ${{ matrix.settings.target }} | |
| - name: Build release | |
| run: cargo check --all --release --target ${{ matrix.settings.target }} | |
| - name: Run Clippy | |
| if: ${{ matrix.settings.target == 'aarch64-apple-darwin' || matrix.settings.target == 'x86_64-pc-windows-msvc' }} | |
| run: cargo clippy --workspace --all-features --locked --target ${{ matrix.settings.target }} -- -D warnings |