name : rust_push
on :
workflow_call :
inputs :
manifest_path :
required : true
type : string
module_name :
required : true
type : string
commit_message :
required : true
type : string
with_smoke :
required : false
type : string
default : true
commiter_username:
type: string
default: true
required: false
concurrency :
group : standard_rust_push_${{ inputs.module_name }}_${{ github.ref }}_
${{ contains( inputs.commit_message, '+test' ) || inputs.commiter_username == 'web-flow' || startsWith( inputs.commit_message, 'merge' ) }}
cancel-in-progress : ${{ contains( inputs.commit_message, '+test' ) || inputs.commiter_username == 'web-flow' }}
env :
RUST_BACKTRACE : 1
CARGO_TERM_COLOR : always
WITH_SMOKE : ${{ inputs.with_smoke }}
jobs :
checkmate:
if : contains( inputs.commit_message, '+test' ) || inputs.commiter_username == 'web-flow' || startsWith( inputs.commit_message, 'merge' )
runs-on: ubuntu-latest
steps:
- name: Install latest nightly toolchain
uses: dtolnay/rust-toolchain@nightly
with:
components: clippy
- uses: actions/checkout@v4
- name: Install cargo-audit
run: cargo install cargo-audit
- name: Install cargo-udeps
run: cargo install cargo-udeps --locked
- name: Set MANIFEST_ROOT_PATH
id: rootpath
run: echo "path=$(dirname ${{ inputs.manifest_path }})" >> $GITHUB_OUTPUT
- name: Build module
run: cd ${{ steps.rootpath.outputs.path }} && cargo build && cd -
- name: Audit the modules
id: audit
run: make audit
continue-on-error: true
- name: Generate documentation for the modules
id: documentation
run: make doc open=no manifest_path=${{ inputs.manifest_path }}
continue-on-error: true
- name: Lint the modules
id: lint
run: make lint manifest_path=${{ inputs.manifest_path }} warnings=no
continue-on-error: true
- name: Check the modules
id: check
run: make check manifest_path=${{ inputs.manifest_path }}
continue-on-error: true
- name: Check the modules dependencies
id: udeps
run: cargo +nightly udeps --all-targets --manifest-path ${{ inputs.manifest_path }}
continue-on-error: true
- name: Check for errors
if: steps.audit.outcome != 'success' || steps.documentation.outcome != 'success' || steps.lint.outcome != 'success' || steps.check.outcome != 'success' || steps.udeps.outcome != 'success'
run: exit 1
will_test :
needs :
- checkmate
if : contains( inputs.commit_message, '+test' ) || inputs.commiter_username == 'web-flow' || startsWith( inputs.commit_message, 'merge' )
concurrency :
group : standard_rust_push_${{ inputs.module_name }}_${{ github.ref }}_${{ matrix.os }}
cancel-in-progress : true
strategy :
fail-fast : false
matrix :
os : [ ubuntu-latest, windows-latest, macos-latest ]
runs-on : ${{ matrix.os }}
steps :
- name : Install latest stable toolchain
uses : dtolnay/rust-toolchain@stable
- name : Install latest nightly toolchain
uses : dtolnay/rust-toolchain@nightly
- uses: actions/checkout@v4
- name: Install will
run: cargo +stable install willbe
- name: Set MANIFEST_ROOT_PATH
id: rootpath
run: echo "path=$(dirname ${{ inputs.manifest_path }})" >> $GITHUB_OUTPUT
- name: Run tests with each feature
run: will .test ${{ steps.rootpath.outputs.path }}/ dry:0 exclude:'' with_all_features:1 with_debug:1 with_nightly:1 with_none_features:1 with_release:1 with_stable:1