python-launcher 0.9.0

The Python launcher for UNIX
Documentation
name: CI

on: [pull_request, push]

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v1
    
    - name: Cache cargo registry
      uses: actions/cache@v1
      with:
        path: ~/.cargo/registry
        key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
    - name: Cache cargo index
      uses: actions/cache@v1
      with:
        path: ~/.cargo/git
        key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}
    - name: Cache cargo build
      uses: actions/cache@v1
      with:
        path: target
        key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }}

    - uses: actions/setup-python@v1
      with:
        python-version: '3.7'

    - name: Run unit and system tests
      run: cargo test --verbose

    - name: Install Python dependencies
      run: python -m pip install -r dev-requirements.txt

    - name: Run `main.rs` tests
      # Requires a debug build of `py` exists.
      run: python -m pytest test_main.py

  coverage:
    runs-on: ubuntu-latest
    needs: test
    
    env:
      CARGO_TARGET_DIR: target

    steps:
    - uses: actions/checkout@v1
        
    - name: Get cargo-tarpaulin index
      run: curl --output cargo-tarpaulin.index https://raw.githubusercontent.com/rust-lang/crates.io-index/master/ca/rg/cargo-tarpaulin
    
    - uses: actions/cache@v1
      name: Cache cargo build
      with:
        path: ${{ env.CARGO_TARGET_DIR }}
        key: ${{ runner.os }}-cargo-tarpaulin-${{ hashFiles('cargo-tarpaulin.index') }}
    # Going with the assumption that the registry and index can detect when they are outdated.
    - name: Cache cargo registry
      uses: actions/cache@v1
      with:
        path: ~/.cargo/registry
        key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
    - name: Cache cargo index
      uses: actions/cache@v1
      with:
        path: ~/.cargo/git
        key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}

    - name: Install tools
      run: cargo install cargo-tarpaulin

    - name: Run coverage
      run: cargo tarpaulin -v --out Xml

    - uses: codecov/codecov-action@v1
      with:
        token: ${{ secrets.CODECOV_TOKEN }}

  lint:
    runs-on: ubuntu-latest
    needs: test

    steps:
    - uses: actions/checkout@v1

    - name: Install tools
      run: rustup component add clippy

    - name: Run clippy
      run: cargo clippy --all-targets --all-features -- -D warnings


  format-check:
    runs-on: ubuntu-latest
    needs: test

    steps:
    - uses: actions/checkout@v1

    - uses: actions/setup-python@v1
      with:
        python-version: '3.7'

    - name: Install tools
      run: |
        rustup component add rustfmt
        python -m pip install black

    - name: Run rustfmt
      run: cargo fmt --all -- --check

    - name: Run Black
      run: python -m black --check --target-version py37 .

  security:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v1
    
    - name: Get cargo-audit index
      run: curl --output cargo-audit.index https://raw.githubusercontent.com/rust-lang/crates.io-index/master/ca/rg/cargo-audit
    
    - uses: actions/cache@v1
      name: Check cache for cargo-audit
      with:
        path: ~/.cargo/cargo-audit
        key: ${{ runner.os }}-cargo-audit-${{ hashFiles('cargo-audit.index') }}

    - name: Install cargo-audit
      shell: bash
      run: "[ -e ~/.cargo/cargo-audit/bin/cargo-audit ] || cargo install --root ~/.cargo/cargo-audit cargo-audit"

    - name: Audit
      run: ~/.cargo/cargo-audit/bin/cargo-audit audit --deny-warnings