name: CI on: schedule: - cron: '0 2 * * *' # run at 2 AM UTC push: branches: [ '*' ] pull_request: branches: [ master ] env: CARGO_TERM_COLOR: always jobs: build: strategy: fail-fast: false matrix: os: [ubuntu-latest, macos-latest, windows-latest] rust: [nightly, stable, '1.65'] runs-on: ${{ matrix.os }} continue-on-error: ${{ matrix.rust == 'nightly' }} steps: - uses: actions/checkout@v2 - name: Restore cargo cache uses: actions/cache@v2 env: cache-name: ci with: path: | ~/.cargo/registry ~/.cargo/git ~/.cargo/bin target key: ${{ matrix.os }}-${{ env.cache-name }}-${{ matrix.rust }}-${{ hashFiles('Cargo.lock') }} - name: MacOS Workaround if: matrix.os == 'macos-latest' run: cargo clean -p serde_derive -p thiserror - name: Install Rust uses: actions-rs/toolchain@v1 with: toolchain: ${{ matrix.rust }} default: true override: true profile: minimal components: clippy - name: Build Debug run: | cargo build - name: Run tests run: make test - name: Run clippy run: | make clippy - name: Build Release run: make build-release - name: Test Install run: cargo install --path "." --force - name: Binary Size (unix) if: matrix.os != 'windows-latest' run: | ls -l ./target/release/gitui - name: Binary Size (win) if: matrix.os == 'windows-latest' run: | ls -l ./target/release/gitui.exe - name: Binary dependencies (mac) if: matrix.os == 'macos-latest' run: | otool -L ./target/release/gitui - name: Build MSI (windows) if: matrix.os == 'windows-latest' run: | cargo install cargo-wix --version 0.3.3 cargo wix --version cargo wix -p gitui --no-build --nocapture --output ./target/wix/gitui.msi ls -l ./target/wix/gitui.msi build-linux-musl: runs-on: ubuntu-latest strategy: fail-fast: false matrix: rust: [nightly, stable, '1.65'] continue-on-error: ${{ matrix.rust == 'nightly' }} steps: - uses: actions/checkout@master - name: Install Rust uses: actions-rs/toolchain@v1 with: toolchain: ${{ matrix.rust }} profile: minimal default: true override: true target: x86_64-unknown-linux-musl - name: Setup MUSL run: | sudo apt-get -qq install musl-tools - name: Build Debug run: | make build-linux-musl-debug ./target/x86_64-unknown-linux-musl/debug/gitui --version - name: Build Release run: | make build-linux-musl-release ./target/x86_64-unknown-linux-musl/release/gitui --version ls -l ./target/x86_64-unknown-linux-musl/release/gitui - name: Test run: | make test-linux-musl - name: Test Install run: cargo install --path "." --force build-linux-arm: runs-on: ubuntu-latest strategy: fail-fast: false matrix: rust: [nightly, stable, '1.65'] continue-on-error: ${{ matrix.rust == 'nightly' }} steps: - uses: actions/checkout@master - name: Install Rust uses: actions-rs/toolchain@v1 with: toolchain: ${{ matrix.rust }} profile: minimal default: true override: true - name: Setup ARM toolchain run: | rustup target add aarch64-unknown-linux-gnu rustup target add armv7-unknown-linux-gnueabihf rustup target add arm-unknown-linux-gnueabihf curl -o $GITHUB_WORKSPACE/aarch64.tar.xz https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-a/8.2-2018.08/gcc-arm-8.2-2018.08-x86_64-aarch64-linux-gnu.tar.xz curl -o $GITHUB_WORKSPACE/arm.tar.xz https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-a/8.2-2018.08/gcc-arm-8.2-2018.08-x86_64-arm-linux-gnueabihf.tar.xz tar xf $GITHUB_WORKSPACE/aarch64.tar.xz tar xf $GITHUB_WORKSPACE/arm.tar.xz echo "$GITHUB_WORKSPACE/gcc-arm-8.2-2018.08-x86_64-aarch64-linux-gnu/bin" >> $GITHUB_PATH echo "$GITHUB_WORKSPACE/gcc-arm-8.2-2018.08-x86_64-arm-linux-gnueabihf/bin" >> $GITHUB_PATH - name: Build Debug run: | make build-linux-arm-debug - name: Build Release run: | make build-linux-arm-release ls -l ./target/aarch64-unknown-linux-gnu/release/gitui || ls -l ./target/armv7-unknown-linux-gnueabihf/release/gitui || ls -l ./target/arm-unknown-linux-gnueabihf/release/gitui linting: name: Lints runs-on: ubuntu-latest steps: - uses: actions/checkout@master - name: Install Rust uses: actions-rs/toolchain@v1 with: toolchain: stable override: true components: rustfmt - run: cargo fmt -- --check - name: cargo-sort run: | cargo install cargo-sort --force cargo sort -c -w - name: cargo-deny install run: | cargo install --locked cargo-deny - name: cargo-deny licenses run: | cargo deny check licenses - name: cargo-deny bans run: | cargo deny check bans udeps: name: udeps runs-on: ubuntu-latest steps: - uses: actions/checkout@master - name: Install Rust uses: actions-rs/toolchain@v1 with: toolchain: nightly override: true - name: cargo-udeps run: | # cargo install --locked cargo-udeps cargo install --git https://github.com/est31/cargo-udeps --locked cargo +nightly udeps --all-targets sec: name: Security audit runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions-rs/audit-check@v1 with: token: ${{ secrets.GITHUB_TOKEN }} log-test: name: Changelog Test runs-on: ubuntu-latest steps: - uses: actions/checkout@master - name: Extract release notes id: extract_release_notes uses: ffurrer2/extract-release-notes@v1 with: release_notes_file: ./release-notes.txt - uses: actions/upload-artifact@v1 with: name: release-notes.txt path: ./release-notes.txt