Skip to content

Add Docker backend, refactor plugin architecture, and fix process lifecycle bugs #506

Add Docker backend, refactor plugin architecture, and fix process lifecycle bugs

Add Docker backend, refactor plugin architecture, and fix process lifecycle bugs #506

Workflow file for this run

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