diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index efe1230..4fc0a6e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,7 +7,7 @@ on: pull_request: push: branches: - - master + - master env: RUST_BACKTRACE: 1 @@ -19,7 +19,7 @@ jobs: permissions: contents: none name: CI - needs: [test, msrv, docs, rustfmt, clippy] + needs: [ test, msrv, docs, rustfmt, clippy ] runs-on: ubuntu-latest steps: - name: Done @@ -28,115 +28,115 @@ jobs: name: Test strategy: matrix: - os: ["ubuntu-latest", "windows-latest", "macos-latest"] - rust: ["stable"] + os: [ "ubuntu-latest", "windows-latest", "macos-latest" ] + rust: [ "stable" ] continue-on-error: ${{ matrix.rust != 'stable' }} runs-on: ${{ matrix.os }} steps: - - name: Checkout repository - uses: actions/checkout@v4 - - name: Install Rust - uses: dtolnay/rust-toolchain@stable - with: - toolchain: ${{ matrix.rust }} - - uses: Swatinem/rust-cache@v2 - - name: Build Debug - run: cargo test --no-run - - name: Test Debug - run: cargo test - - name: Build Release - run: cargo test --no-run --release - - name: Test Release - run: cargo test --release + - name: Checkout repository + uses: actions/checkout@v4 + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + with: + toolchain: ${{ matrix.rust }} + - uses: Swatinem/rust-cache@v2 + - name: Build Debug + run: cargo test --no-run + - name: Test Debug + run: cargo test + - name: Build Release + run: cargo test --no-run --release --workspace + - name: Test Release + run: cargo test --release --workspace msrv: name: "Check MSRV: 1.72" runs-on: ubuntu-latest steps: - - name: Checkout repository - uses: actions/checkout@v4 - - name: Install Rust - uses: dtolnay/rust-toolchain@stable - with: - toolchain: "1.72" # MSRV - - uses: Swatinem/rust-cache@v2 - - name: Default features - run: cargo check --workspace --all-targets - - name: No-default features - run: cargo check --workspace --all-targets --no-default-features - - name: Release - run: cargo check --workspace --all-targets --release + - name: Checkout repository + uses: actions/checkout@v4 + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + with: + toolchain: "1.72" # MSRV + - uses: Swatinem/rust-cache@v2 + - name: Default features + run: cargo check --workspace --all-targets + - name: No-default features + run: cargo check --workspace --all-targets --no-default-features + - name: Release + run: cargo check --workspace --all-targets --release lockfile: runs-on: ubuntu-latest steps: - - name: Checkout repository - uses: actions/checkout@v4 - - name: Install Rust - uses: dtolnay/rust-toolchain@stable - with: - toolchain: stable - - uses: Swatinem/rust-cache@v2 - - name: "Is lockfile updated?" - run: cargo fetch --locked + - name: Checkout repository + uses: actions/checkout@v4 + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + with: + toolchain: stable + - uses: Swatinem/rust-cache@v2 + - name: "Is lockfile updated?" + run: cargo fetch --locked docs: name: Docs runs-on: ubuntu-latest steps: - - name: Checkout repository - uses: actions/checkout@v4 - - name: Install Rust - uses: dtolnay/rust-toolchain@stable - with: - toolchain: stable - - uses: Swatinem/rust-cache@v2 - - name: Check documentation - env: - RUSTDOCFLAGS: -D warnings - run: cargo doc --workspace --no-deps --document-private-items + - name: Checkout repository + uses: actions/checkout@v4 + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + with: + toolchain: stable + - uses: Swatinem/rust-cache@v2 + - name: Check documentation + env: + RUSTDOCFLAGS: -D warnings + run: cargo doc --workspace --no-deps --document-private-items rustfmt: name: rustfmt runs-on: ubuntu-latest steps: - - name: Checkout repository - uses: actions/checkout@v4 - - name: Install Rust - uses: dtolnay/rust-toolchain@stable - with: - # Not MSRV because its harder to jump between versions and people are - # more likely to have stable - toolchain: stable - components: rustfmt - - uses: Swatinem/rust-cache@v2 - - name: Check formatting - run: cargo fmt --all -- --check + - name: Checkout repository + uses: actions/checkout@v4 + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + with: + # Not MSRV because its harder to jump between versions and people are + # more likely to have stable + toolchain: stable + components: rustfmt + - uses: Swatinem/rust-cache@v2 + - name: Check formatting + run: cargo fmt --all -- --check clippy: name: clippy runs-on: ubuntu-latest permissions: security-events: write # to upload sarif results steps: - - name: Checkout repository - uses: actions/checkout@v4 - - name: Install Rust - uses: dtolnay/rust-toolchain@stable - with: - toolchain: "1.72" # MSRV - components: clippy - - uses: Swatinem/rust-cache@v2 - - name: Install SARIF tools - run: cargo install clippy-sarif --version 0.3.4 --locked # Held back due to msrv - - name: Install SARIF tools - run: cargo install sarif-fmt --version 0.3.4 --locked # Held back due to msrv - - name: Check - run: > - cargo clippy --workspace --all-targets --message-format=json -- -D warnings --allow deprecated - | clippy-sarif - | tee clippy-results.sarif - | sarif-fmt - continue-on-error: true - - name: Upload - uses: github/codeql-action/upload-sarif@v3 - with: - sarif_file: clippy-results.sarif - wait-for-processing: true - - name: Report status - run: cargo clippy --workspace --all-targets -- -D warnings --allow deprecated + - name: Checkout repository + uses: actions/checkout@v4 + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + with: + toolchain: "1.72" # MSRV + components: clippy + - uses: Swatinem/rust-cache@v2 + - name: Install SARIF tools + run: cargo install clippy-sarif --version 0.3.4 --locked # Held back due to msrv + - name: Install SARIF tools + run: cargo install sarif-fmt --version 0.3.4 --locked # Held back due to msrv + - name: Check + run: > + cargo clippy --workspace --all-targets --message-format=json -- -D warnings --allow deprecated + | clippy-sarif + | tee clippy-results.sarif + | sarif-fmt + continue-on-error: true + - name: Upload + uses: github/codeql-action/upload-sarif@v3 + with: + sarif_file: clippy-results.sarif + wait-for-processing: true + - name: Report status + run: cargo clippy --workspace --all-targets -- -D warnings --allow deprecated diff --git a/src/lib.rs b/src/lib.rs index a98544c..055bbd9 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -64,6 +64,8 @@ pub struct Metadata { pub authors: Cow<'static, str>, /// The URL of the crate's website pub homepage: Cow<'static, str>, + /// The support information + pub supports: Cow<'static, str>, } /// Initialize [`Metadata`] @@ -75,6 +77,7 @@ macro_rules! metadata { name: env!("CARGO_PKG_NAME").into(), authors: env!("CARGO_PKG_AUTHORS").replace(":", ", ").into(), homepage: env!("CARGO_PKG_HOMEPAGE").into(), + supports: Default::default(), } }}; } @@ -98,7 +101,8 @@ macro_rules! metadata { /// name: env!("CARGO_PKG_NAME").into(), /// version: env!("CARGO_PKG_VERSION").into(), /// authors: "My Company Support ".into(), -/// homepage: "support.mycompany.com".into(), +/// homepage: "www.mycompany.com".into(), +/// supports: "- Open a support request by email to support@mycompany.com".into(), /// }); /// ``` #[macro_export] @@ -180,8 +184,13 @@ fn write_msg>( file_path: Option

, meta: &Metadata, ) -> IoResult<()> { - let (_version, name, authors, homepage) = - (&meta.version, &meta.name, &meta.authors, &meta.homepage); + let Metadata { + name, + authors, + homepage, + supports, + .. + } = meta; writeln!(buffer, "Well, this is embarrassing.\n")?; writeln!( @@ -207,6 +216,9 @@ fn write_msg>( if !authors.is_empty() { writeln!(buffer, "- Authors: {authors}")?; } + if !supports.is_empty() { + writeln!(buffer, "\nTo submit the crash report:\n\n{supports}")?; + } writeln!( buffer, "\nWe take privacy seriously, and do not perform any \ diff --git a/tests/custom-panic/src/main.rs b/tests/custom-panic/src/main.rs index ad7843e..fc5a471 100644 --- a/tests/custom-panic/src/main.rs +++ b/tests/custom-panic/src/main.rs @@ -5,7 +5,8 @@ fn main() { name: env!("CARGO_PKG_NAME").into(), version: env!("CARGO_PKG_VERSION").into(), authors: "My Company Support