name: Continuous integration
on:
schedule:
- cron: '30 5,17 * * *'
push:
branches:
- "*"
- '!main'
pull_request:
branches:
- "main"
- "alpha"
- "beta"
workflow_dispatch:
concurrency:
group: CI
env:
GIST_KEY: "ffc7577cb1032996417a2c97f8715009" RUST_BACKTRACE: 1
MINIMUM_WAIT: 3
MAXIMUM_WAIT: 10
jobs:
windows-ci:
runs-on: ${{ matrix.os }}-latest
strategy:
matrix:
rust:
- stable
- beta
- nightly
- 1.64.0 os:
- windows
include:
- os: windows
logo: windows
- rust: 1.64.0
label: msrv
- rust: nightly
label: nightly
- rust: beta
label: beta
- rust: stable
label: stable
steps:
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c with:
fetch-depth: 0
- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.rust }}
components: rustfmt, clippy
- name: Cache dependencies
uses: Swatinem/rust-cache@6fd3edff6979b79f87531400ad694fb7f2c84b1f
- name: Cargo Build
run: cargo build --verbose
- name: Cargo Test
run: cargo test
- name: Cargo Format
run: cargo fmt --all -- --check
- name: Cargo Lint
run: cargo clippy -- -D warnings
- name: Random Wait
uses: AliSajid/random-wait-action@v1.1.0
with:
minimum: ${{ env.MINIMUM_WAIT }}
maximum: ${{ env.MAXIMUM_WAIT }}
- name: Create Awesome Badge - Success
uses: schneegans/dynamic-badges-action@5d424ad4060f866e4d1dab8f8da0456e6b1c4f56 if: success()
with:
auth: ${{ secrets.GIST_SECRET }}
gistID: ${{ env.GIST_KEY }}
filename: ${{matrix.os}}-${{matrix.label}}.json
label: Build
namedLogo: ${{matrix.logo}}
message: Succeeded
color: green
- name: Create Awesome Badge - Failure
uses: schneegans/dynamic-badges-action@5d424ad4060f866e4d1dab8f8da0456e6b1c4f56 if: failure()
with:
auth: ${{ secrets.GIST_SECRET }}
gistID: ${{ env.GIST_KEY }}
filename: ${{matrix.os}}-${{matrix.label}}.json
namedLogo: ${{matrix.logo}}
label: Build
message: Failed
isError: true
- name: Set Result
if: always()
run: echo "result=${{ job.status }}" >> $GITHUB_OUTPUT
ubuntu-ci:
runs-on: ${{ matrix.os }}-latest
strategy:
matrix:
rust:
- stable
- beta
- nightly
- 1.64.0 os:
- ubuntu
include:
- os: ubuntu
logo: ubuntu
- rust: 1.64.0
label: msrv
- rust: nightly
label: nightly
- rust: beta
label: beta
- rust: stable
label: stable
steps:
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c
- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.rust }}
components: rustfmt, clippy
- name: Cache dependencies
uses: Swatinem/rust-cache@6fd3edff6979b79f87531400ad694fb7f2c84b1f
- name: Cargo Build
run: cargo build --verbose
- name: Cargo Test
run: cargo test
- name: Cargo Format
run: cargo fmt --all -- --check
- name: Cargo Lint
run: cargo clippy -- -D warnings
- name: Random Wait
uses: AliSajid/random-wait-action@v1.1.0
with:
minimum: ${{ env.MINIMUM_WAIT }}
maximum: ${{ env.MAXIMUM_WAIT }}
- name: Create Awesome Badge - Success
uses: schneegans/dynamic-badges-action@5d424ad4060f866e4d1dab8f8da0456e6b1c4f56 if: success()
with:
auth: ${{ secrets.GIST_SECRET }}
gistID: ${{ env.GIST_KEY }}
filename: ${{matrix.os}}-${{matrix.label}}.json
label: Build
namedLogo: ${{matrix.logo}}
message: Succeeded
color: green
- name: Create Awesome Badge - Failure
uses: schneegans/dynamic-badges-action@5d424ad4060f866e4d1dab8f8da0456e6b1c4f56 if: failure()
with:
auth: ${{ secrets.GIST_SECRET }}
gistID: ${{ env.GIST_KEY }}
filename: ${{matrix.os}}-${{matrix.label}}.json
namedLogo: ${{matrix.logo}}
label: Build
message: Failed
isError: true
- name: Set Result
if: always()
run: echo "result=${{ job.status }}" >> $GITHUB_OUTPUT
macos-ci:
runs-on: ${{ matrix.os }}-latest
strategy:
matrix:
rust:
- stable
- beta
- nightly
- 1.64.0 os:
- macos
include:
- os: macos
logo: apple
- rust: 1.64.0
label: msrv
- rust: nightly
label: nightly
- rust: beta
label: beta
- rust: stable
label: stable
steps:
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c
- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.rust }}
components: rustfmt, clippy
- name: Cache dependencies
uses: Swatinem/rust-cache@6fd3edff6979b79f87531400ad694fb7f2c84b1f
- name: Cargo Build
run: cargo build --verbose
- name: Cargo Test
run: cargo test
- name: Cargo Format
run: cargo fmt --all -- --check
- name: Cargo Lint
run: cargo clippy -- -D warnings
- name: Random Wait
uses: AliSajid/random-wait-action@v1.1.0
with:
minimum: ${{ env.MINIMUM_WAIT }}
maximum: ${{ env.MAXIMUM_WAIT }}
- name: Create Awesome Badge - Success
uses: schneegans/dynamic-badges-action@5d424ad4060f866e4d1dab8f8da0456e6b1c4f56 if: success()
with:
auth: ${{ secrets.GIST_SECRET }}
gistID: ${{ env.GIST_KEY }}
filename: ${{matrix.os}}-${{matrix.label}}.json
label: Build
namedLogo: ${{matrix.logo}}
message: Succeeded
color: green
- name: Create Awesome Badge - Failure
uses: schneegans/dynamic-badges-action@5d424ad4060f866e4d1dab8f8da0456e6b1c4f56 if: failure()
with:
auth: ${{ secrets.GIST_SECRET }}
gistID: ${{ env.GIST_KEY }}
filename: ${{matrix.os}}-${{matrix.label}}.json
namedLogo: ${{matrix.logo}}
label: Build
message: Failed
isError: true
- name: Set Result
if: always()
run: echo "result=${{ job.status }}" >> $GITHUB_OUTPUT
semantic-release:
needs: [macos-ci, windows-ci, ubuntu-ci]
uses: ./.github/workflows/release.yaml
secrets: inherit
upload-release-artifacts:
needs: [semantic-release]
if: needs.semantic-release.outputs.new_release_published == 'true'
uses: ./.github/workflows/release_upload.yaml
secrets: inherit with:
new_version: ${{ needs.semantic-release.outputs.new_version }}
new_release_published: ${{ needs.semantic-release.outputs.new_release_published }}
new_release_notes: ${{ needs.semantic-release.outputs.new_release_notes }}
new_release_channel: ${{ needs.semantic-release.outputs.new_release_channel }}