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 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@v3 - name: Install Rust (clippy) uses: actions-rs/toolchain@v1 with: profile: minimal 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@v3 - name: Install Rust (rustfmt) uses: actions-rs/toolchain@v1 with: profile: minimal 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.70.0, os: ubuntu-latest } steps: - uses: actions/checkout@v3 - name: Install Rust ${{ matrix.rust }} uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: ${{ matrix.rust }} target: ${{ matrix.target }} - uses: taiki-e/install-action@v1 with: tool: cargo-nextest@0.9.45 - uses: Swatinem/rust-cache@v2 with: key: "ci-tests-${{ matrix.os }}-${{ matrix.rust }}-${{ matrix.target }}" - name: Check Cargo availability run: cargo --version - uses: nick-fields/retry@v2 name: Install OpenSSH on Windows if: matrix.os == 'windows-latest' with: timeout_minutes: 10 max_attempts: 3 shell: pwsh command: | # From https://gist.github.com/inevity/a0d7b9f1c5ba5a813917b92736122797 Add-Type -AssemblyName System.IO.Compression.FileSystem function Unzip { param([string]$zipfile, [string]$outpath) [System.IO.Compression.ZipFile]::ExtractToDirectory($zipfile, $outpath) } $url = 'https://github.com/PowerShell/Win32-OpenSSH/releases/latest/' $request = [System.Net.WebRequest]::Create($url) $request.AllowAutoRedirect=$false $response=$request.GetResponse() $file = $([String]$response.GetResponseHeader("Location")).Replace('tag','download') + '/OpenSSH-Win64.zip' $client = new-object system.Net.Webclient; $client.DownloadFile($file ,"c:\\OpenSSH-Win64.zip") Unzip "c:\\OpenSSH-Win64.zip" "C:\Program Files\" mv "c:\\Program Files\OpenSSH-Win64" "C:\Program Files\OpenSSH\" powershell.exe -ExecutionPolicy Bypass -File "C:\Program Files\OpenSSH\install-sshd.ps1" New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22,49152-65535 net start sshd Set-Service sshd -StartupType Automatic Set-Service ssh-agent -StartupType Automatic cd "C:\Program Files\OpenSSH\" Powershell.exe -ExecutionPolicy Bypass -Command '. .\FixHostFilePermissions.ps1 -Confirm:$false' $registryPath = "HKLM:\SOFTWARE\OpenSSH\" $Name = "DefaultShell" $value = "C:\windows\System32\WindowsPowerShell\v1.0\powershell.exe" IF(!(Test-Path $registryPath)) { New-Item -Path $registryPath -Force New-ItemProperty -Path $registryPath -Name $name -Value $value -PropertyType String -Force } ELSE { New-ItemProperty -Path $registryPath -Name $name -Value $value -PropertyType String -Force } - name: Extend Windows retry count to be more resilient run: echo "NEXTEST_RETRIES=9" >> $GITHUB_ENV shell: bash if: matrix.os == 'windows-latest' - name: Ensure /run/sshd exists on Unix run: mkdir -p /run/sshd if: matrix.os == 'ubuntu-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