rtic/.github/workflows/build.yml

521 lines
15 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:
# Run cargo fmt --check, includes macros/
style:
2020-06-11 21:00:32 +02:00
name: style
2022-12-15 22:03:55 +01:00
runs-on: ubuntu-22.04
steps:
- name: Checkout
2022-02-09 18:44:57 +01:00
uses: actions/checkout@v2
- name: Fail on warnings
run: sed -i 's,//deny_warnings_placeholder_for_ci,#![deny(warnings)],' src/lib.rs macros/src/lib.rs
2022-12-15 23:56:01 +01:00
- name: Add Rust component
run: rustup component add rustfmt
- name: cargo fmt --check
2022-12-15 23:56:01 +01:00
run: cargo fmt --all -- --check
# Compilation check
check:
2020-06-11 21:00:32 +02:00
name: check
2022-12-15 22:03:55 +01:00
runs-on: ubuntu-22.04
strategy:
matrix:
target:
- thumbv7m-none-eabi
- thumbv6m-none-eabi
- x86_64-unknown-linux-gnu
toolchain:
- stable
steps:
- name: Checkout
uses: actions/checkout@v2
2022-12-15 23:56:01 +01:00
- name: Install Rust ${{ matrix.toolchain }}
run: |
rustup set profile minimal
rustup override set ${{ matrix.toolchain }}
- name: Configure Rust target (${{ matrix.target }})
run: rustup target add ${{ matrix.target }}
- name: Fail on warnings
run: sed -i 's,//deny_warnings_placeholder_for_ci,#![deny(warnings)],' src/lib.rs macros/src/lib.rs
2022-02-09 18:44:57 +01:00
- name: Cache Dependencies
uses: Swatinem/rust-cache@v1
- name: cargo check
2022-12-15 23:56:01 +01:00
run: cargo check --target=${{ matrix.target }}
2022-02-09 18:45:49 +01:00
# Clippy
clippy:
name: Cargo clippy
2022-12-15 22:03:55 +01:00
runs-on: ubuntu-22.04
2022-02-09 18:45:49 +01:00
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Fail on warnings
run: sed -i 's,//deny_warnings_placeholder_for_ci,#![deny(warnings)],' src/lib.rs macros/src/lib.rs
- name: Cache Dependencies
uses: Swatinem/rust-cache@v1
- name: cargo clippy
2022-12-15 23:56:01 +01:00
run: clippy
2022-02-09 18:45:49 +01:00
# Verify all examples, checks
checkexamples:
2020-06-11 21:00:32 +02:00
name: checkexamples
2022-12-15 22:03:55 +01:00
runs-on: ubuntu-22.04
strategy:
matrix:
target:
- thumbv7m-none-eabi
- thumbv6m-none-eabi
toolchain:
- stable
steps:
- name: Checkout
uses: actions/checkout@v2
2022-12-15 23:56:01 +01:00
- name: Install Rust ${{ matrix.toolchain }}
run: |
rustup set profile minimal
rustup override set ${{ matrix.toolchain }}
- name: Configure Rust target (${{ matrix.target }})
run: rustup target add ${{ matrix.target }}
- name: Add Rust component llvm-tools-preview
run: rustup component add llvm-tools-preview
2020-09-23 15:51:07 +02:00
2022-02-09 18:44:57 +01:00
- name: Cache Dependencies
uses: Swatinem/rust-cache@v1
2020-09-23 15:51:07 +02:00
- name: Check the examples
2022-12-15 23:56:01 +01:00
run: cargo check --examples --target=${{ matrix.target }}
# Verify the example output with run-pass tests
testexamples:
name: testexamples
2022-12-15 22:03:55 +01:00
runs-on: ubuntu-22.04
strategy:
matrix:
target:
- thumbv7m-none-eabi
- thumbv6m-none-eabi
toolchain:
- stable
steps:
- name: Checkout
uses: actions/checkout@v2
2022-12-15 23:56:01 +01:00
- name: Install Rust ${{ matrix.toolchain }}
run: |
rustup set profile minimal
rustup override set ${{ matrix.toolchain }}
- name: Configure Rust target (${{ matrix.target }})
run: rustup target add ${{ matrix.target }}
- 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
uses: Swatinem/rust-cache@v1
- 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
run: sed -i 's,//deny_warnings_placeholder_for_ci,#![deny(warnings)],' src/lib.rs macros/src/lib.rs
2021-08-26 10:58:59 +02:00
- name: Run-pass tests
2022-12-15 23:56:01 +01:00
run: cargo xtask --target ${{ matrix.target }}
# Check the correctness of macros/ crate
checkmacros:
2020-06-11 21:00:32 +02:00
name: checkmacros
2022-12-15 22:03:55 +01:00
runs-on: ubuntu-22.04
strategy:
matrix:
target:
- x86_64-unknown-linux-gnu
toolchain:
- stable
steps:
- name: Checkout
uses: actions/checkout@v2
2020-06-16 08:56:51 +02:00
2022-12-15 23:56:01 +01:00
- name: Install Rust ${{ matrix.toolchain }}
run: |
rustup set profile minimal
rustup override set ${{ matrix.toolchain }}
- name: Configure Rust target (${{ matrix.target }})
run: rustup target add ${{ matrix.target }}
2022-02-09 18:44:57 +01:00
- name: Cache Dependencies
uses: Swatinem/rust-cache@v1
- name: Fail on warnings
run: sed -i 's,//deny_warnings_placeholder_for_ci,#![deny(warnings)],' src/lib.rs macros/src/lib.rs
- name: cargo check
2022-12-15 23:56:01 +01:00
run: cargo check --manifest-path macros/Cargo.toml --target=${{ matrix.target }}
2020-10-05 20:37:21 +02:00
# Run the macros test-suite
testmacros:
name: testmacros
2022-12-15 22:03:55 +01:00
runs-on: ubuntu-22.04
2020-10-05 20:37:21 +02:00
steps:
- name: Checkout
uses: actions/checkout@v2
2022-02-09 18:44:57 +01:00
- name: Cache Dependencies
uses: Swatinem/rust-cache@v1
- name: Fail on warnings
run: sed -i 's,//deny_warnings_placeholder_for_ci,#![deny(warnings)],' src/lib.rs macros/src/lib.rs
2020-10-05 20:37:21 +02:00
- name: cargo check
2022-12-15 23:56:01 +01:00
run: cargo test --manifest-path macros/Cargo.toml
2020-10-05 20:37:21 +02:00
2022-02-09 18:45:31 +01:00
# Run test suite
2021-09-22 13:22:45 +02:00
tests:
name: tests
2022-12-15 22:03:55 +01:00
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v2
2020-06-16 08:56:51 +02:00
2022-02-09 18:44:57 +01:00
- name: Cache Dependencies
uses: Swatinem/rust-cache@v1
- name: Fail on warnings
run: sed -i 's,//deny_warnings_placeholder_for_ci,#![deny(warnings)],' src/lib.rs macros/src/lib.rs
2022-12-15 23:56:01 +01:00
- name: Run cargo test
run: cargo test --test tests
# Build documentation, check links
docs:
name: docs
2022-12-15 22:03:55 +01:00
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v2
2020-06-16 08:56:51 +02:00
- name: Cache pip installed linkchecker
uses: actions/cache@v2
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip
restore-keys: |
${{ runner.os }}-pip-
- name: Set up Python 3.x
uses: actions/setup-python@v2
with:
# Semantic version range syntax or exact version of a Python version
python-version: '3.x'
# Optional - x64 or x86 architecture, defaults to x64
architecture: 'x64'
# 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: Fail on warnings
run: sed -i 's,//deny_warnings_placeholder_for_ci,#![deny(warnings)],' src/lib.rs macros/src/lib.rs
- name: Build docs
run: cargo doc
- name: Check links
run: |
td=$(mktemp -d)
cp -r target/doc $td/api
linkchecker $td/api/rtic/
linkchecker $td/api/cortex_m_rtic_macros/
# Build the books
mdbook:
name: mdbook
2022-12-15 22:03:55 +01:00
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Set up Python 3.x
uses: actions/setup-python@v2
with:
# Semantic version range syntax or exact version of a Python version
python-version: '3.x'
# Optional - x64 or x86 architecture, defaults to x64
architecture: 'x64'
# 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: mdBook Action
2022-02-09 18:44:57 +01:00
uses: peaceiris/actions-mdbook@v1
with:
2020-10-01 18:29:55 +02:00
mdbook-version: 'latest'
- name: Build book in English
2022-02-09 17:01:01 +01:00
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
2022-02-09 17:01:01 +01:00
shell: 'script --return --quiet --command "bash {0}"'
2022-02-09 17:59:00 +01:00
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/
2022-02-09 21:03:57 +01:00
# Update stable branch
#
# This needs to run before book is built
mergetostablebranch:
name: If CI passes, merge master branch into release/vX
2022-12-15 22:03:55 +01:00
runs-on: ubuntu-22.04
needs:
- style
- check
2022-02-09 19:23:26 +01:00
- clippy
- checkexamples
2020-10-05 20:37:21 +02:00
- testexamples
- checkmacros
2020-10-05 20:37:21 +02:00
- testmacros
2021-09-22 13:22:45 +02:00
- tests
- docs
- mdbook
2022-02-09 21:03:57 +01:00
# Only run this when pushing to master branch
if: github.ref == 'refs/heads/master'
steps:
- uses: actions/checkout@v2
- 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.2
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
2022-12-15 22:03:55 +01:00
runs-on: ubuntu-22.04
2022-02-09 21:03:57 +01:00
needs:
mergetostablebranch
# Only run this when pushing to master branch
if: github.ref == 'refs/heads/master'
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.x
uses: actions/setup-python@v2
with:
# Semantic version range syntax or exact version of a Python version
python-version: '3.x'
# Optional - x64 or x86 architecture, defaults to x64
architecture: 'x64'
# You can test your matrix by printing the current Python version
- name: Display Python version
run: python -c "import sys; print(sys.version)"
- name: mdBook Action
2022-02-09 18:44:57 +01:00
uses: peaceiris/actions-mdbook@v1
with:
2020-10-05 12:48:20 +02:00
mdbook-version: 'latest'
2022-02-09 21:03:57 +01:00
- 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
2022-02-09 17:01:01 +01:00
shell: 'script --return --quiet --command "bash {0}"'
run: |
langs=( en ru )
2020-10-05 11:19:43 +02:00
devver=( dev )
2020-10-05 12:44:57 +02:00
# The latest stable must be the first element in the array
2022-02-09 21:03:57 +01:00
vers=( "1" "0.5" "0.4" )
2020-10-05 12:44:57 +02:00
# All releases start with "v"
# followed by MAJOR.MINOR.PATCH, see semver.org
2022-02-09 21:03:57 +01:00
# Store first in array as stable
stable=${vers}
2022-02-10 10:40:49 +01:00
crateversion={{ env.versionmajor }}
2020-10-05 12:44:57 +02:00
2022-02-10 10:40:49 +01:00
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
# 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.
2022-02-10 10:40:49 +01:00
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
2022-02-09 17:01:01 +01:00
( 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
2022-02-09 21:03:57 +01:00
prefix=${ver}
mkdir -p $td/$prefix/book
src=$(mktemp -d)
2022-02-09 21:03:57 +01:00
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
2022-02-09 17:01:01 +01:00
( 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
2021-04-13 19:28:55 +02:00
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()
needs:
- style
- check
2022-02-09 18:45:49 +01:00
- clippy
2020-06-11 21:00:32 +02:00
- checkexamples
- testexamples
2020-06-11 21:00:32 +02:00
- checkmacros
2020-10-05 20:37:21 +02:00
- testmacros
2021-09-22 13:22:45 +02:00
- tests
- 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