mirror of
https://github.com/narrrl/proton-drive-linux.git
synced 2026-11-04 00:47:00 +01:00
148 lines
4.2 KiB
YAML
148 lines
4.2 KiB
YAML
name: CI
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
pull_request:
|
|
workflow_dispatch:
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
rust:
|
|
runs-on: ubuntu-24.04
|
|
steps:
|
|
- uses: actions/checkout@v7
|
|
|
|
- name: Install native dependencies
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y \
|
|
pkg-config \
|
|
libfuse3-dev \
|
|
libgtk-4-dev \
|
|
libadwaita-1-dev \
|
|
libwebkitgtk-6.0-dev \
|
|
libsecret-1-dev \
|
|
libdbus-1-dev
|
|
|
|
- name: Install minimum supported Rust
|
|
uses: actions-rust-lang/setup-rust-toolchain@v1
|
|
with:
|
|
toolchain: '1.96'
|
|
components: rustfmt, clippy
|
|
cache: false
|
|
|
|
# Tags can only restore caches saved on main, so only main saves one. The
|
|
# release workflow restores this key for its quality gates.
|
|
- uses: swatinem/rust-cache@v2
|
|
with:
|
|
shared-key: debug
|
|
save-if: ${{ github.ref == 'refs/heads/main' }}
|
|
|
|
- name: Formatting
|
|
run: cargo fmt --all -- --check
|
|
|
|
- name: Lints
|
|
run: cargo clippy --workspace --all-targets --locked -- -D warnings
|
|
|
|
- name: Unit tests
|
|
run: cargo test --workspace --locked
|
|
|
|
- name: Account-free filesystem acceptance
|
|
run: scripts/fuse-acceptance.sh --offline-only
|
|
|
|
- name: Acceptance runner safety guard
|
|
run: |
|
|
if scripts/fuse-acceptance.sh /tmp >acceptance.out 2>&1; then
|
|
echo "runner unexpectedly accepted a non-FUSE path"
|
|
exit 1
|
|
fi
|
|
grep -q "refusing primary non-FUSE path" acceptance.out
|
|
|
|
# Real Proton credentials and /dev/fuse deliberately do not run on pull
|
|
# requests. Follow docs/TESTING.md on a dedicated test-account runner.
|
|
|
|
# The seeded simulation runs (docs/TESTING.md): real FUSE
|
|
# daemons against an in-memory Drive, so they need /dev/fuse but no account.
|
|
# They run on pull requests too: most data-loss fixes are only exercised
|
|
# here, and a change that breaks one should not reach main first.
|
|
simulation:
|
|
runs-on: ubuntu-24.04
|
|
timeout-minutes: 30
|
|
|
|
steps:
|
|
- uses: actions/checkout@v7
|
|
|
|
- name: Install native dependencies
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y \
|
|
pkg-config \
|
|
fuse3 \
|
|
libfuse3-dev \
|
|
libgtk-4-dev \
|
|
libadwaita-1-dev \
|
|
libwebkitgtk-6.0-dev \
|
|
libsecret-1-dev \
|
|
libdbus-1-dev
|
|
|
|
- name: Install minimum supported Rust
|
|
uses: actions-rust-lang/setup-rust-toolchain@v1
|
|
with:
|
|
toolchain: '1.96'
|
|
cache: false
|
|
|
|
- uses: swatinem/rust-cache@v2
|
|
with:
|
|
shared-key: debug
|
|
save-if: false
|
|
|
|
- name: Simulation runs
|
|
run: 'cargo test -p pdfs-fuse --lib --locked sim:: -- --ignored --test-threads=1'
|
|
|
|
# A hung step writes every daemon thread's stack next to the run's
|
|
# state; without them a hang that does not replay cannot be told apart.
|
|
- name: Keep the stacks of a hung run
|
|
if: failure()
|
|
uses: actions/upload-artifact@v7
|
|
with:
|
|
name: simulation-stacks
|
|
path: /tmp/pdfs-sim-*/stacks.txt
|
|
if-no-files-found: ignore
|
|
|
|
# Keeps the release-profile dependencies cached on main, where the release
|
|
# workflow can restore them; a tag cannot reuse the caches of earlier tags.
|
|
release-cache:
|
|
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
runs-on: ubuntu-24.04
|
|
|
|
steps:
|
|
- uses: actions/checkout@v7
|
|
|
|
- name: Install native dependencies
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y \
|
|
pkg-config \
|
|
libfuse3-dev \
|
|
libgtk-4-dev \
|
|
libadwaita-1-dev \
|
|
libwebkitgtk-6.0-dev \
|
|
libsecret-1-dev \
|
|
libdbus-1-dev
|
|
|
|
- name: Install minimum supported Rust
|
|
uses: actions-rust-lang/setup-rust-toolchain@v1
|
|
with:
|
|
toolchain: '1.96'
|
|
cache: false
|
|
|
|
- uses: swatinem/rust-cache@v2
|
|
with:
|
|
shared-key: release
|
|
|
|
- name: Release build
|
|
run: cargo build --release --locked
|