[ENG-1963] Filesystem actions upgrade #10197
This file contains 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: [pull_request, merge_group] | |
env: | |
SPACEDRIVE_CUSTOM_APT_FLAGS: --no-install-recommends | |
# From: https://github.com/rust-lang/rust-analyzer/blob/master/.github/workflows/ci.yaml | |
CARGO_INCREMENTAL: 0 | |
CARGO_NET_RETRY: 10 | |
RUST_BACKTRACE: short | |
RUSTUP_MAX_RETRIES: 10 | |
SD_AUTH: disabled | |
# Cancel previous runs of the same workflow on the same branch. | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
typescript: | |
name: Type and style check | |
runs-on: ubuntu-22.04 | |
timeout-minutes: 7 | |
permissions: {} | |
steps: | |
- name: 'PR commits + 1' | |
run: echo "PR_FETCH_DEPTH=$(( ${{ github.event.pull_request.commits }} + 1 ))" >> "${GITHUB_ENV}" | |
- name: 'Checkout PR branch and all PR commits' | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: ${{ env.PR_FETCH_DEPTH }} | |
- name: Setup Node.js, pnpm and dependencies | |
uses: ./.github/actions/setup-pnpm | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Perform typechecks | |
run: pnpm typecheck | |
- name: Perform style check | |
run: |- | |
set -eu | |
pnpm autoformat only-frontend >/dev/null | |
_files="$(git diff --name-only --cached)" | |
if [ -n "$_files" ]; then | |
printf "\e[31mThe following files are not correctly formatted:\e[0m\n" >&2 | |
while IFS= read -r _file || [ -n "$_file" ]; do | |
echo "::error file=${_file},title=Incorrectly formatted file::Please run 'pnpm autoformat' and commit the changes." | |
echo " - ${_file}" | |
done < <(printf '%s' "$_files") | |
printf "\e[31mPlease run 'pnpm autoformat' and commit the changes.\e[0m\n" >&2 | |
exit 1 | |
fi | |
eslint: | |
name: ESLint | |
runs-on: ubuntu-22.04 | |
permissions: {} | |
timeout-minutes: 5 | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Setup Node.js, pnpm and dependencies | |
uses: ./.github/actions/setup-pnpm | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Perform linting | |
run: pnpm lint | |
cypress: | |
name: Cypress | |
runs-on: macos-14 | |
timeout-minutes: 45 | |
permissions: {} | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Setup System and Rust | |
uses: ./.github/actions/setup-system | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
target: aarch64-apple-darwin | |
- name: Setup Node.js, pnpm and dependencies | |
uses: ./.github/actions/setup-pnpm | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Install Cypress | |
run: | | |
set -euxo pipefail | |
pnpm exec cypress install | |
rm -rf /Users/runner/.cache/Cypress | |
ln -sf /Users/runner/Library/Caches/Cypress /Users/runner/.cache/Cypress | |
- name: Setup Cypress | |
uses: cypress-io/github-action@v6 | |
with: | |
runTests: false | |
working-directory: . | |
- name: Download test data | |
run: pnpm test-data small | |
- name: E2E test | |
uses: cypress-io/github-action@v6 | |
with: | |
build: npx cypress info | |
install: false | |
command: env CI=true pnpm test:e2e | |
working-directory: apps/web | |
- name: Upload cypress screenshots | |
uses: actions/upload-artifact@v4 | |
if: always() | |
with: | |
name: cypress-screenshots | |
path: apps/web/cypress/screenshots | |
if-no-files-found: ignore | |
- name: Upload cypress video's | |
uses: actions/upload-artifact@v4 | |
if: always() | |
with: | |
name: cypress-videos | |
path: apps/web/cypress/videos | |
if-no-files-found: ignore | |
rustfmt: | |
name: Rust Formatting | |
runs-on: ubuntu-22.04 | |
timeout-minutes: 10 | |
permissions: | |
contents: read | |
steps: | |
- name: Maximize build space | |
if: ${{ runner.os == 'Linux' }} | |
uses: easimon/maximize-build-space@master | |
with: | |
swap-size-mb: 3072 | |
root-reserve-mb: 6144 | |
remove-dotnet: 'true' | |
remove-codeql: 'true' | |
remove-haskell: 'true' | |
remove-docker-images: 'true' | |
- name: Symlink target to C:\ | |
if: ${{ runner.os == 'Windows' }} | |
shell: powershell | |
run: | | |
New-Item -ItemType Directory -Force -Path C:\spacedrive_target | |
- name: Symlink target to C:\ | |
if: ${{ runner.os == 'Windows' }} | |
shell: powershell | |
run: | | |
New-Item -Path target -ItemType Junction -Value C:\spacedrive_target | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Check if files have changed | |
uses: dorny/paths-filter@v3 | |
continue-on-error: true | |
id: filter | |
with: | |
filters: | | |
changes: | |
- 'apps/cli/**' | |
- 'apps/desktop/crates/**' | |
- 'apps/desktop/src-tauri/**' | |
- 'apps/mobile/crates/**' | |
- 'apps/server/**' | |
- 'core/**' | |
- 'crates/**' | |
- 'extensions/**' | |
- 'Cargo.toml' | |
- 'Cargo.lock' | |
- '.github/workflows/ci.yml' | |
- '.github/actions/setup-rust/**' | |
- '.github/actions/setup-system/**' | |
- name: Setup Rust and Prisma | |
if: steps.filter.outcome != 'success' || steps.filter.outputs.changes == 'true' | |
uses: ./.github/actions/setup-rust | |
with: | |
restore-cache: 'false' | |
- name: Run rustfmt | |
if: steps.filter.outcome != 'success' || steps.filter.outputs.changes == 'true' | |
run: cargo fmt --all -- --check | |
clippy: | |
strategy: | |
fail-fast: true | |
matrix: | |
settings: | |
- host: macos-13 | |
target: x86_64-apple-darwin | |
- host: macos-14 | |
target: aarch64-apple-darwin | |
- host: windows-latest | |
target: x86_64-pc-windows-msvc | |
- host: ubuntu-22.04 | |
target: x86_64-unknown-linux-gnu | |
name: Clippy (${{ matrix.settings.host }}) | |
runs-on: ${{ matrix.settings.host }} | |
permissions: | |
contents: read | |
timeout-minutes: 45 | |
steps: | |
- name: Maximize build space | |
if: ${{ runner.os == 'Linux' }} | |
uses: easimon/maximize-build-space@master | |
with: | |
swap-size-mb: 3072 | |
root-reserve-mb: 6144 | |
remove-dotnet: 'true' | |
remove-codeql: 'true' | |
remove-haskell: 'true' | |
remove-docker-images: 'true' | |
- name: Symlink target to C:\ | |
if: ${{ runner.os == 'Windows' }} | |
shell: powershell | |
run: | | |
New-Item -ItemType Directory -Force -Path C:\spacedrive_target | |
New-Item -Path target -ItemType Junction -Value C:\spacedrive_target | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Find files that have changed | |
uses: dorny/paths-filter@v3 | |
continue-on-error: true | |
id: filter | |
with: | |
filters: | | |
changes: | |
- ${{ runner.os == 'Windows' && 'scripts/setup.ps1' || 'scripts/setup.sh' }} | |
- 'scripts/preprep.mjs' | |
- 'apps/cli/**' | |
- 'apps/desktop/crates/**' | |
- 'apps/desktop/src-tauri/**' | |
- 'apps/mobile/crates/**' | |
- 'apps/server/**' | |
- 'core/**' | |
- 'crates/**' | |
- 'extensions/**' | |
- 'Cargo.toml' | |
- 'Cargo.lock' | |
- '.github/workflows/ci.yml' | |
- '.github/actions/setup-rust/**' | |
- '.github/actions/setup-system/**' | |
- name: Setup System and Rust | |
if: steps.filter.outcome != 'success' || steps.filter.outputs.changes == 'true' | |
uses: ./.github/actions/setup-system | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Run Clippy | |
if: steps.filter.outcome != 'success' || steps.filter.outputs.changes == 'true' | |
uses: giraffate/clippy-action@v1 | |
with: | |
reporter: github-pr-review | |
tool_name: 'Clippy (${{ matrix.settings.host }})' | |
filter_mode: diff_context | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
clippy_flags: --workspace --all-features --locked | |
fail_on_error: true | |
# - name: Run tests | |
# if: steps.filter.outcome != 'success' || steps.filter.outputs.changes == 'true' | |
# run: cargo test --workspace --all-features --locked --target ${{ matrix.settings.target }} |