Skip to content

ci

ci #1031

Workflow file for this run

name: ci
on:
push:
branches:
- main
tags-ignore:
- v*
pull_request:
branches:
- main
schedule:
- cron: 0 4/12 * * *
workflow_dispatch:
inputs:
nightly:
description: use latest nightly
required: true
type: boolean
concurrency:
group: ${{github.workflow}}-${{github.head_ref || github.run_id}}
cancel-in-progress: true
jobs:
toolchain:
runs-on: ubuntu-latest
env:
nightly: ${{(github.event.inputs.nightly == 'true' || github.event_name == 'schedule') && 'true' || ''}}
outputs:
toolchain: ${{steps.set_toolchain.outputs.toolchain}}
nightly_toolchain: ${{steps.set_toolchain.outputs.nightly_toolchain}}
steps:
- uses: actions/checkout@v4
- name: Set toolchain
id: set_toolchain
env:
toolchain_toml: "rust-toolchain.toml"
run: |
if [[ -z $nightly ]] && [[ -f $toolchain_toml ]]; then
toolchain=$(grep channel $toolchain_toml | sed -r 's/channel = "(.*)"/\1/')
echo "using toolchain $toolchain from rust-toolchain.toml"
echo "toolchain=$toolchain" >> "$GITHUB_OUTPUT"
if [[ $toolchain =~ ^nightly.* ]]; then
echo "using nightly_toolchain $toolchain"
echo "nightly_toolchain=$toolchain" >> "$GITHUB_OUTPUT"
else
echo "using nightly_toolchain nightly"
echo "nightly_toolchain=nightly" >> "$GITHUB_OUTPUT"
fi
else
toolchain='nightly'
echo "using toolchain nightly"
echo "toolchain=nightly" >> "$GITHUB_OUTPUT"
echo "using nightly_toolchain nightly"
echo "nightly_toolchain=nightly" >> "$GITHUB_OUTPUT"
fi
check:
runs-on: ubuntu-latest
needs: toolchain
steps:
- uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{needs.toolchain.outputs.toolchain}}
- name: Install just
uses: taiki-e/install-action@v2
with:
tool: just
- name: Install protoc
uses: arduino/setup-protoc@v3
with:
repo-token: ${{secrets.GITHUB_TOKEN}}
- uses: Swatinem/rust-cache@v2
- name: just check
run: |
rustup override set ${{needs.toolchain.outputs.toolchain}}
just check
fmt-check:
runs-on: ubuntu-latest
needs: toolchain
steps:
- uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{needs.toolchain.outputs.nightly_toolchain}}
components: rustfmt
- name: Install just
uses: taiki-e/install-action@v2
with:
tool: just
- uses: Swatinem/rust-cache@v2
- name: just fmt-check
run: |
rustup override set ${{needs.toolchain.outputs.nightly_toolchain}}
just fmt-check ''
lint:
runs-on: ubuntu-latest
needs: [toolchain, check, fmt-check]
steps:
- uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
components: clippy
toolchain: ${{needs.toolchain.outputs.toolchain}}
- name: Install just
uses: taiki-e/install-action@v2
with:
tool: just
- name: Install protoc
uses: arduino/setup-protoc@v3
with:
repo-token: ${{secrets.GITHUB_TOKEN}}
- uses: Swatinem/rust-cache@v2
- name: just lint
run: |
rustup override set ${{needs.toolchain.outputs.toolchain}}
just lint
test:
runs-on: ubuntu-latest
needs: [toolchain, check, fmt-check]
steps:
- uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{needs.toolchain.outputs.toolchain}}
- name: Install just
uses: taiki-e/install-action@v2
with:
tool: just
- name: Install protoc
uses: arduino/setup-protoc@v3
with:
repo-token: ${{secrets.GITHUB_TOKEN}}
- uses: Swatinem/rust-cache@v2
- name: just test
run: |
rustup override set ${{needs.toolchain.outputs.toolchain}}
just test
doc:
runs-on: ubuntu-latest
needs: [toolchain, check, fmt-check]
steps:
- uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{needs.toolchain.outputs.nightly_toolchain}}
- name: Install just
uses: taiki-e/install-action@v2
with:
tool: just
- name: Install protoc
uses: arduino/setup-protoc@v3
with:
repo-token: ${{secrets.GITHUB_TOKEN}}
- uses: Swatinem/rust-cache@v2
- name: just doc
run: |
rustup override set ${{needs.toolchain.outputs.nightly_toolchain}}
just doc ''
dependabot:
runs-on: ubuntu-latest
needs: [doc, lint, test]
if: github.event_name == 'pull_request' && github.actor == 'dependabot[bot]'
permissions:
contents: write
pull-requests: write
steps:
- name: approve
run: gh pr review --approve "$PR_URL"
env:
PR_URL: ${{github.event.pull_request.html_url}}
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
- name: merge
run: gh pr merge --auto --squash "$PR_URL"
env:
PR_URL: ${{github.event.pull_request.html_url}}
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}