Add Docker backend, refactor plugin architecture, and fix process lifecycle bugs #506
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: | |
| paths-ignore: | |
| - '**.md' | |
| - 'Makefile.toml' | |
| branches: | |
| - master | |
| pull_request: | |
| paths-ignore: | |
| - '**.md' | |
| - 'Makefile.toml' | |
| branches: | |
| - master | |
| jobs: | |
| clippy: | |
| name: "Lint with clippy (${{ matrix.os }})" | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - { os: windows-latest } | |
| - { os: ubuntu-latest } | |
| env: | |
| RUSTFLAGS: -Dwarnings --cfg ci | |
| steps: | |
| - name: Ensure windows git checkout keeps \n line ending | |
| run: | | |
| git config --system core.autocrlf false | |
| git config --system core.eol lf | |
| if: matrix.os == 'windows-latest' | |
| - uses: actions/checkout@v4 | |
| - name: Install Rust (clippy) | |
| uses: dtolnay/rust-toolchain@master | |
| with: | |
| toolchain: stable | |
| components: clippy | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: "ci-clippy-${{ matrix.os }}" | |
| - name: Check Cargo availability | |
| run: cargo --version | |
| - name: Run clippy (all features) | |
| run: cargo clippy --workspace --all-targets --verbose --all-features | |
| rustfmt: | |
| name: "Verify code formatting (${{ matrix.os }})" | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - { os: windows-latest } | |
| - { os: ubuntu-latest } | |
| steps: | |
| - name: Ensure windows git checkout keeps \n line ending | |
| run: | | |
| git config --system core.autocrlf false | |
| git config --system core.eol lf | |
| if: matrix.os == 'windows-latest' | |
| - uses: actions/checkout@v4 | |
| - name: Install Rust (rustfmt) | |
| uses: dtolnay/rust-toolchain@master | |
| with: | |
| toolchain: stable | |
| components: rustfmt | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: "ci-rustfmt-${{ matrix.os }}" | |
| - name: Check Cargo availability | |
| run: cargo --version | |
| - run: cargo fmt --all -- --check | |
| tests: | |
| name: "Test Rust ${{ matrix.rust }} on ${{ matrix.os }}" | |
| runs-on: ${{ matrix.os }} | |
| env: | |
| RUSTFLAGS: --cfg ci | |
| RUST_LOG: trace | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - { rust: stable, os: windows-latest, target: x86_64-pc-windows-msvc } | |
| - { rust: stable, os: macos-latest } | |
| - { rust: stable, os: ubuntu-latest } | |
| - { rust: 1.88.0, os: ubuntu-latest } | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install Rust ${{ matrix.rust }} | |
| uses: dtolnay/rust-toolchain@master | |
| with: | |
| toolchain: ${{ matrix.rust }} | |
| targets: ${{ matrix.target }} | |
| - uses: taiki-e/install-action@v2 | |
| with: | |
| tool: cargo-nextest@0.9 | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: "ci-tests-${{ matrix.os }}-${{ matrix.rust }}-${{ matrix.target }}" | |
| - name: Check Cargo availability | |
| run: cargo --version | |
| - name: Configure Windows for SSH testing | |
| if: matrix.os == 'windows-latest' | |
| shell: pwsh | |
| run: | | |
| # Windows Server 2025 has OpenSSH installed by default | |
| # We don't start the system sshd service as our tests spawn their own sshd instances | |
| # Ensure ssh-agent is available for key management | |
| Set-Service ssh-agent -StartupType Automatic | |
| Start-Service ssh-agent | |
| # Configure firewall for SSH tests on high ports used by tests | |
| New-NetFirewallRule -Name sshd-tests -DisplayName 'OpenSSH Tests (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 49152-65535 | |
| # Ensure we have proper permissions for file operations | |
| # Grant current user SeCreateSymbolicLinkPrivilege if needed for tests | |
| - name: Extend Windows retry count to be more resilient | |
| run: echo "NEXTEST_RETRIES=3" >> $GITHUB_ENV | |
| shell: bash | |
| if: matrix.os == 'windows-latest' | |
| - name: Set faster timeouts for Windows SSH debugging | |
| run: echo "NEXTEST_TEST_TIMEOUT=30s" >> $GITHUB_ENV | |
| shell: bash | |
| if: matrix.os == 'windows-latest' | |
| - name: Ensure /run/sshd exists on Unix | |
| run: sudo mkdir -p /run/sshd | |
| if: matrix.os == 'ubuntu-latest' | |
| - name: Pre-pull Docker test image (Linux) | |
| run: docker pull ubuntu:22.04 | |
| if: matrix.os == 'ubuntu-latest' | |
| - name: Pre-pull Docker test image (Windows) | |
| run: docker pull mcr.microsoft.com/windows/nanoserver:ltsc2025 | |
| if: matrix.os == 'windows-latest' | |
| - name: Run all workspace tests (all features) | |
| run: cargo nextest run --profile ci --release --all-features --workspace | |
| - name: Run all doc tests (all features) | |
| run: cargo test --release --all-features --workspace --doc |