rtic/.github/workflows/build.yml

627 lines
19 KiB
YAML
Raw Normal View History

name: Build
on:
pull_request:
2020-06-11 21:00:32 +02:00
push:
branches:
- master
2020-06-11 21:00:32 +02:00
- staging
2020-06-11 21:10:03 +02:00
- trying
2022-02-10 09:26:46 +01:00
- bors/staging
- bors/trying
env:
CARGO_TERM_COLOR: always
jobs:
2023-02-24 00:10:20 +01:00
# Run cargo xtask format-check
formatcheck:
name: cargo fmt
2022-12-15 22:03:55 +01:00
runs-on: ubuntu-22.04
steps:
- name: Checkout
2022-12-21 20:55:30 +01:00
uses: actions/checkout@v3
- name: Fail on warnings
run: find . -type f -name lib.rs -execdir sed -i 's,//deny_warnings_placeholder_for_ci,#![deny(warnings)],' {} +
2023-02-24 02:27:12 +01:00
- name: Cache Dependencies
uses: Swatinem/rust-cache@v2
2023-02-24 00:10:20 +01:00
- name: cargo xtask format-check
run: cargo xtask format-check
2023-01-28 11:42:24 +01:00
# Compilation check
2023-02-06 13:35:05 +01:00
check:
2023-02-06 13:42:32 +01:00
name: check
2022-12-15 22:03:55 +01:00
runs-on: ubuntu-22.04
strategy:
matrix:
backend:
- thumbv7
- thumbv6
- thumbv8-base
- thumbv8-main
toolchain:
2023-01-08 21:33:44 +01:00
- nightly
steps:
- name: Checkout
2022-12-21 20:55:30 +01:00
uses: actions/checkout@v3
2022-12-15 23:56:01 +01:00
- name: Install Rust ${{ matrix.toolchain }}
run: |
rustup override set ${{ matrix.toolchain }}
- name: Configure Rust target (v6, v7, v8.b v8.m)
run: |
rustup target add thumbv7m-none-eabi
rustup target add thumbv6m-none-eabi
rustup target add thumbv8m.base-none-eabi
rustup target add thumbv8m.main-none-eabi
- name: Fail on warnings
run: find . -type f -name lib.rs -execdir sed -i 's,//deny_warnings_placeholder_for_ci,#![deny(warnings)],' {} +
- name: Cache Dependencies
uses: Swatinem/rust-cache@v2
- run: cargo xtask --verbose --backend ${{ matrix.backend }} check
2022-02-09 18:45:49 +01:00
# Clippy
2023-02-08 19:44:46 +01:00
clippy:
name: clippy
2022-12-15 22:03:55 +01:00
runs-on: ubuntu-22.04
2023-02-08 19:44:46 +01:00
strategy:
matrix:
2023-02-24 01:54:22 +01:00
backend:
- thumbv7
- thumbv6
- thumbv8-base
- thumbv8-main
2023-02-08 19:44:46 +01:00
toolchain:
- nightly
2022-02-09 18:45:49 +01:00
steps:
- name: Checkout
2022-12-21 20:55:30 +01:00
uses: actions/checkout@v3
2022-02-09 18:45:49 +01:00
2023-02-08 19:44:46 +01:00
- name: Install Rust ${{ matrix.toolchain }}
run: |
rustup override set ${{ matrix.toolchain }}
2023-02-08 19:44:46 +01:00
- name: Configure Rust target (v6, v7, v8.b v8.m)
run: |
rustup target add thumbv7m-none-eabi
rustup target add thumbv6m-none-eabi
rustup target add thumbv8m.base-none-eabi
rustup target add thumbv8m.main-none-eabi
- name: Add Rust component clippy
run: rustup component add clippy
- name: Fail on warnings
run: find . -type f -name lib.rs -execdir sed -i 's,//deny_warnings_placeholder_for_ci,#![deny(warnings)],' {} +
- name: Cache Dependencies
uses: Swatinem/rust-cache@v2
- run: cargo xtask --verbose --backend ${{ matrix.backend }} clippy
# Verify all examples, checks
checkexamples:
2023-02-08 20:05:06 +01:00
name: check examples
2022-12-15 22:03:55 +01:00
runs-on: ubuntu-22.04
strategy:
matrix:
2023-02-23 23:07:06 +01:00
backend:
- thumbv7
- thumbv6
- thumbv8-base
- thumbv8-main
toolchain:
2023-01-08 21:33:44 +01:00
- nightly
steps:
- name: Checkout
2022-12-21 20:55:30 +01:00
uses: actions/checkout@v3
2022-12-15 23:56:01 +01:00
- name: Install Rust ${{ matrix.toolchain }}
run: |
rustup override set ${{ matrix.toolchain }}
2023-02-23 23:07:06 +01:00
- name: Configure Rust target (v6, v7, v8.b v8.m)
run: |
rustup target add thumbv7m-none-eabi
rustup target add thumbv6m-none-eabi
rustup target add thumbv8m.base-none-eabi
rustup target add thumbv8m.main-none-eabi
2022-12-15 23:56:01 +01:00
2022-02-09 18:44:57 +01:00
- name: Cache Dependencies
2022-12-16 00:25:46 +01:00
uses: Swatinem/rust-cache@v2
2022-02-09 18:44:57 +01:00
2020-09-23 15:51:07 +02:00
- name: Check the examples
2023-02-24 01:54:22 +01:00
if: ${{ matrix.backend == 'thumbv8-base' }}
2023-02-23 23:07:06 +01:00
run: cargo xtask --verbose --backend ${{ matrix.backend }} --exampleexclude pool example-check
2023-02-08 20:05:06 +01:00
- name: Check the examples
2023-02-24 01:54:22 +01:00
if: ${{ matrix.backend != 'thumbv8-base' }}
2023-02-23 23:07:06 +01:00
run: cargo xtask --verbose --backend ${{ matrix.backend }} example-check
# Verify the example output with run-pass tests
testexamples:
name: QEMU run
2022-12-15 22:03:55 +01:00
runs-on: ubuntu-22.04
strategy:
matrix:
2023-02-23 23:07:06 +01:00
backend:
- thumbv7
- thumbv6
toolchain:
2023-01-08 21:33:44 +01:00
- nightly
steps:
- name: Checkout
2022-12-21 20:55:30 +01:00
uses: actions/checkout@v3
2022-12-15 23:56:01 +01:00
- name: Install Rust ${{ matrix.toolchain }}
run: |
rustup set profile minimal
rustup override set ${{ matrix.toolchain }}
2023-02-23 23:07:06 +01:00
- name: Configure Rust target (v6, v7)
run: |
rustup target add thumbv7m-none-eabi
rustup target add thumbv6m-none-eabi
2022-12-15 23:56:01 +01:00
- name: Add Rust component llvm-tools-preview
run: rustup component add llvm-tools-preview
2020-07-26 00:37:08 +02:00
# Use precompiled binutils
2020-07-23 18:56:41 +02:00
- name: cargo install cargo-binutils
2022-12-15 23:56:01 +01:00
run: cargo install cargo-binutils
2020-07-23 18:56:41 +02:00
2022-02-09 18:44:57 +01:00
- name: Cache Dependencies
2022-12-16 00:25:46 +01:00
uses: Swatinem/rust-cache@v2
2022-02-09 18:44:57 +01:00
- name: Install QEMU
run: |
2020-08-24 13:57:53 +02:00
sudo apt update
sudo apt install -y qemu-system-arm
2020-06-16 08:56:51 +02:00
- name: Fail on warnings
2023-01-23 20:14:50 +01:00
working-directory: ./rtic
run: sed -i 's,//deny_warnings_placeholder_for_ci,#![deny(warnings)],' src/lib.rs
2021-08-26 10:58:59 +02:00
- name: Run-pass tests
2023-02-23 23:07:06 +01:00
run: cargo xtask --verbose --backend ${{ matrix.backend }} qemu
# Run test suite
testsrtic:
name: tests rtic
2022-12-15 22:03:55 +01:00
runs-on: ubuntu-22.04
2023-02-24 01:54:22 +01:00
strategy:
matrix:
backend:
- thumbv7-backend
- thumbv6-backend
- thumbv8base-backend
- thumbv8main-backend
2023-02-24 01:54:22 +01:00
steps:
- name: Checkout
2022-12-21 20:55:30 +01:00
uses: actions/checkout@v3
2020-06-16 08:56:51 +02:00
2022-02-09 18:44:57 +01:00
- name: Cache Dependencies
2022-12-16 00:25:46 +01:00
uses: Swatinem/rust-cache@v2
2022-02-09 18:44:57 +01:00
- name: Fail on warnings
2023-01-23 20:14:50 +01:00
working-directory: ./rtic
run: sed -i 's,//deny_warnings_placeholder_for_ci,#![deny(warnings)],' src/lib.rs
- name: Run cargo test
2023-01-23 20:14:50 +01:00
working-directory: ./rtic
2023-02-24 01:54:22 +01:00
run: cargo test --features ${{ matrix.backend }} --test ui
2023-02-24 01:54:22 +01:00
# Run the macros test-suite
2023-02-06 13:37:33 +01:00
testsmacros:
name: tests rtic-macros
2022-12-15 22:03:55 +01:00
runs-on: ubuntu-22.04
2023-02-24 01:54:22 +01:00
strategy:
matrix:
backend:
- cortex-m-source-masking
- cortex-m-basepri
2020-10-05 20:37:21 +02:00
steps:
- name: Checkout
2022-12-21 20:55:30 +01:00
uses: actions/checkout@v3
2020-10-05 20:37:21 +02:00
2022-02-09 18:44:57 +01:00
- name: Cache Dependencies
2022-12-16 00:25:46 +01:00
uses: Swatinem/rust-cache@v2
2022-02-09 18:44:57 +01:00
- name: Fail on warnings
working-directory: ./rtic-macros
run: sed -i 's,//deny_warnings_placeholder_for_ci,#![deny(warnings)],' src/lib.rs
2020-10-05 20:37:21 +02:00
- name: cargo check
working-directory: ./rtic-macros
2023-02-24 01:54:22 +01:00
run: cargo test --features ${{ matrix.backend }}
2023-01-30 21:24:12 +01:00
# Run test suite
testsarbiter:
name: tests rtic-arbiter
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Cache Dependencies
uses: Swatinem/rust-cache@v2
- name: Fail on warnings
working-directory: ./rtic-arbiter
run: sed -i 's,//deny_warnings_placeholder_for_ci,#![deny(warnings)],' src/lib.rs
- name: Run cargo test
working-directory: ./rtic-arbiter
run: cargo test --features testing
2023-01-28 14:02:54 +01:00
# Run test suite
testschannel:
name: tests rtic-channel
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Cache Dependencies
uses: Swatinem/rust-cache@v2
- name: Fail on warnings
working-directory: ./rtic-channel
run: sed -i 's,//deny_warnings_placeholder_for_ci,#![deny(warnings)],' src/lib.rs
- name: Run cargo test
working-directory: ./rtic-channel
2023-01-28 20:54:34 +01:00
run: cargo test --features testing
2023-01-28 14:02:54 +01:00
# Run test suite
testsmonotonics:
name: tests rtic-monotonics
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Cache Dependencies
uses: Swatinem/rust-cache@v2
- name: Fail on warnings
working-directory: ./rtic-monotonics
run: sed -i 's,//deny_warnings_placeholder_for_ci,#![deny(warnings)],' src/lib.rs
- name: Run cargo test
working-directory: ./rtic-monotonics
run: cargo test --test tests
# Run test suite
teststime:
name: tests rtic-time
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Cache Dependencies
uses: Swatinem/rust-cache@v2
- name: Fail on warnings
working-directory: ./rtic-time
run: sed -i 's,//deny_warnings_placeholder_for_ci,#![deny(warnings)],' src/lib.rs
- name: Run cargo test
working-directory: ./rtic-time
2023-02-24 01:54:22 +01:00
run: cargo test
2023-01-28 14:02:54 +01:00
# Build documentation, check links
docs:
name: Cargo docs, check links
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Cache pip installed linkchecker
uses: actions/cache@v3
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip
restore-keys: |
${{ runner.os }}-pip-
- name: Set up Python 3.x
uses: actions/setup-python@v4
with:
# Semantic version range syntax or exact version of a Python version
python-version: '3.x'
# You can test your matrix by printing the current Python version
- name: Display Python version
run: python -c "import sys; print(sys.version)"
- name: Install dependencies
run: pip install git+https://github.com/linkchecker/linkchecker.git
- name: Remove cargo-config
run: rm -f .cargo/config
- name: Build docs
2023-02-24 01:24:43 +01:00
# TODO: Any difference between backends?
run: cargo doc --features thumbv7-backend
- name: Check links
run: |
td=$(mktemp -d)
cp -r target/doc $td/api
2023-02-08 20:09:37 +01:00
linkchecker $td/api/rtic/
linkchecker $td/api/rtic_macros/
2023-02-08 20:09:37 +01:00
linkchecker $td/api/rtic_arbiter/
linkchecker $td/api/rtic_channel/
linkchecker $td/api/rtic_common/
linkchecker $td/api/rtic_macros/
linkchecker $td/api/rtic_monotonics/
linkchecker $td/api/rtic_time/
# Build the books
mdbook:
name: mdbook, check links
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up Python 3.x
uses: actions/setup-python@v4
with:
# Semantic version range syntax or exact version of a Python version
python-version: '3.x'
# You can test your matrix by printing the current Python version
- name: Display Python version
run: python -c "import sys; print(sys.version)"
- name: Install dependencies
run: pip install git+https://github.com/linkchecker/linkchecker.git
2023-01-30 22:15:43 +01:00
- name: Install mdbook-mermaid
run: cargo install mdbook-mermaid
- name: mdBook Action
uses: peaceiris/actions-mdbook@v1
with:
mdbook-version: 'latest'
- name: Build book in English
shell: 'script --return --quiet --command "bash {0}"'
run: cd book/en && if mdbook build |& tee /dev/tty | grep "\[ERROR\]"; then exit 1; else exit 0; fi
- name: Build book in Russian
shell: 'script --return --quiet --command "bash {0}"'
run: cd book/ru && if mdbook build |& tee /dev/tty | grep "\[ERROR\]"; then echo "Russian book needs updating!"; else exit 0; fi
- name: Check links
run: |
td=$(mktemp -d)
mkdir $td/book
cp -r book/en/book $td/book/en
cp -r book/ru/book $td/book/ru
cp LICENSE-* $td/book/en
cp LICENSE-* $td/book/ru
linkchecker $td/book/en/
linkchecker $td/book/ru/
2023-01-08 21:33:44 +01:00
# # Update stable branch
# #
# # This needs to run before book is built
# mergetostablebranch:
# name: If CI passes, merge master branch into release/vX
# runs-on: ubuntu-22.04
# needs:
# - style
# - check
# - clippy
# - checkexamples
# - testexamples
# - checkmacros
# - testmacros
# - tests
# - docs
# - mdbook
#
# # Only run this when pushing to master branch
# if: github.ref == 'refs/heads/master'
# steps:
# - uses: actions/checkout@v3
#
# - name: Get crate version and print output branch release/vX
# id: crateversionbranch
# # Parse metadata for version number, extract the Semver Major
# run: |
# VERSION=$(cargo metadata --format-version 1 --no-deps --offline | jq -r '.packages[] | select(.name =="cortex-m-rtic") | .version')
# VERSIONMAJOR=${VERSION%.*.*}
# echo "branch=release/v$VERSIONMAJOR" >> $GITHUB_ENV
# echo "versionmajor=$VERSIONMAJOR" >> $GITHUB_ENV
# echo "version=$VERSION" >> $GITHUB_ENV
#
# - uses: everlytic/branch-merge@1.1.5
# with:
# github_token: ${{ github.token }}
# source_ref: 'master'
# target_branch: ${{ env.branch }}
# commit_message_template: '[Bors] Merged {source_ref} into target {target_branch}'
#
# # Only runs when pushing to master branch
# # Bors run CI against staging branch,
# # if that succeeds Borst tries against master branch
# # If all tests pass, then deploy stage is run
# deploy:
# name: deploy
# runs-on: ubuntu-22.04
# needs:
# mergetostablebranch
#
# # Only run this when pushing to master branch
# if: github.ref == 'refs/heads/master'
# steps:
# - uses: actions/checkout@v3
#
# - name: Set up Python 3.x
# uses: actions/setup-python@v4
# with:
# # Semantic version range syntax or exact version of a Python version
# python-version: '3.x'
#
# # You can test your matrix by printing the current Python version
# - name: Display Python version
# run: python -c "import sys; print(sys.version)"
#
2023-01-30 22:15:43 +01:00
# - name: Install mdbook-mermaid
# run: cargo install mdbook-mermaid
#
2023-01-08 21:33:44 +01:00
# - name: mdBook Action
# uses: peaceiris/actions-mdbook@v1
# with:
# mdbook-version: 'latest'
#
# - name: Get crate version
# id: crateversion
# # Parse metadata for version number, extract the Semver Major
# run: |
# VERSION=$(cargo metadata --format-version 1 --no-deps --offline | jq -r '.packages[] | select(.name =="cortex-m-rtic") | .version')
# VERSIONMAJOR=${VERSION%.*.*}
# echo "branch=release/v$VERSIONMAJOR" >> $GITHUB_ENV
# echo "versionmajor=$VERSIONMAJOR" >> $GITHUB_ENV
# echo "version=$VERSION" >> $GITHUB_ENV
#
# - name: Remove cargo-config
# run: rm -f .cargo/config
#
# - name: Build docs
# run: cargo doc
#
# - name: Build books
# shell: 'script --return --quiet --command "bash {0}"'
# run: |
# langs=( en ru )
# devver=( dev )
# # The latest stable must be the first element in the array
# vers=( "1" "0.5" "0.4" )
#
# # All releases start with "v"
# # followed by MAJOR.MINOR.PATCH, see semver.org
# # Store first in array as stable
# stable=${vers}
# crateversion={{ env.versionmajor }}
#
# echo "Latest stable version: $stable"
# echo "Current crate version: $crateversion"
#
# # Create directories
# td=$(mktemp -d)
# mkdir -p $td/$devver/book/
# cp -r target/doc $td/$devver/api
#
# # Redirect rtic.rs/meeting/index.html to hackmd
# mkdir $td/meeting
# sed "s|URL|https://hackmd.io/c_mFUZL-Q2C6614MlrrxOg|g" redirect.html > $td/meeting/index.html
# sed -i "s|Page Redirection|RTIC Meeting|" $td/meeting/index.html
# sed -i "s|If you|Redirecting to RTIC HackMD. If you|" $td/meeting/index.html
#
# # Redirect the main site to the stable release
# sed "s|URL|$stable|g" redirect.html > $td/index.html
#
# # Create the redirects for dev-version
# # If the current stable and the version being built differ,
# # then there is a dev-version and the links should point to it.
# if [[ "$stable" != "$crateversion" ]];
# then
# sed 's|URL|rtic/index.html|g' redirect.html > $td/$devver/api/index.html
# sed 's|URL|book/en|g' redirect.html > $td/$devver/index.html
# else
# # If the current stable and the "dev" version in master branch
# # share the same major version, redirect dev/ to stable book
# sed 's|URL|rtic.rs/$stable/api/rtic|g' redirect.html > $td/$devver/api/index.html
# sed 's|URL|rtic.rs/$stable|g' redirect.html > $td/$devver/index.html
# fi
#
# # Build books
# for lang in ${langs[@]}; do
# ( cd book/$lang &&
# if mdbook build |& tee /dev/tty | grep "\[ERROR\]"; then exit 1; else exit 0; fi
# )
# cp -r book/$lang/book $td/$devver/book/$lang
# cp LICENSE-* $td/$devver/book/$lang/
# done
#
# # Build older versions, including stable
# root=$(pwd)
# for ver in ${vers[@]}; do
# prefix=${ver}
#
# mkdir -p $td/$prefix/book
# src=$(mktemp -d)
# curl -L https://github.com/rtic-rs/cortex-m-rtic/archive/release/v${ver}.tar.gz | tar xz --strip-components 1 -C $src
#
# pushd $src
# rm -f .cargo/config
# cargo doc || cargo doc --features timer-queue
# cp -r target/doc $td/$prefix/api
# sed 's|URL|rtic/index.html|g' $root/redirect.html > $td/$prefix/api/index.html
# for lang in ${langs[@]}; do
# ( cd book/$lang &&
# if mdbook build |& tee /dev/tty | grep "\[ERROR\]"; then exit 1; else exit 0; fi
# )
# cp -r book/$lang/book $td/$prefix/book/$lang
# cp LICENSE-* $td/$prefix/book/$lang/
# done
# sed 's|URL|book/en|g' $root/redirect.html > $td/$prefix/index.html
# popd
#
# rm -rf $src
# done
#
# # Copy the stable book to the stable alias
# cp -r $td/$stable $td/stable
#
# # Forward CNAME file
# cp CNAME $td/
# mv $td/ bookstodeploy
#
# - name: Deploy to GH-pages
# uses: peaceiris/actions-gh-pages@v3
# with:
# github_token: ${{ secrets.GITHUB_TOKEN }}
# publish_dir: ./bookstodeploy
# force_orphan: true
2020-06-11 21:00:32 +02:00
# Refs: https://github.com/rust-lang/crater/blob/9ab6f9697c901c4a44025cf0a39b73ad5b37d198/.github/workflows/bors.yml#L125-L149
#
# ALL THE PREVIOUS JOBS NEEDS TO BE ADDED TO THE `needs` SECTION OF THIS JOB!
ci-success:
name: ci
if: github.event_name == 'push' && success()
2023-02-01 22:52:03 +01:00
needs:
2023-02-24 00:10:20 +01:00
- formatcheck
2023-02-06 13:35:05 +01:00
- check
2023-02-08 19:44:46 +01:00
- clippy
2020-06-11 21:00:32 +02:00
- checkexamples
- testexamples
- testsrtic
2023-02-06 13:37:33 +01:00
- testsmacros
- testsarbiter
- testschannel
- testsmonotonics
- teststime
- docs
- mdbook
2022-12-15 22:03:55 +01:00
runs-on: ubuntu-22.04
2020-06-11 21:00:32 +02:00
steps:
- name: Mark the job as a success
run: exit 0