Add Nix flake #359
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: | |
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 |