mirror of
https://github.com/rtic-rs/rtic.git
synced 2024-12-25 19:39:32 +01:00
567 lines
16 KiB
YAML
567 lines
16 KiB
YAML
name: Build
|
|
on:
|
|
pull_request:
|
|
push:
|
|
branches:
|
|
- master
|
|
- staging
|
|
- trying
|
|
- bors/staging
|
|
- bors/trying
|
|
|
|
env:
|
|
CARGO_TERM_COLOR: always
|
|
|
|
jobs:
|
|
# Run cargo fmt --check, includes macros/
|
|
style:
|
|
name: style
|
|
runs-on: ubuntu-20.04
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Install Rust
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
profile: minimal
|
|
toolchain: stable
|
|
override: true
|
|
components: rustfmt
|
|
|
|
- name: Fail on warnings
|
|
run: sed -i 's,//deny_warnings_placeholder_for_ci,#![deny(warnings)],' src/lib.rs macros/src/lib.rs
|
|
|
|
- name: cargo fmt --check
|
|
uses: actions-rs/cargo@v1
|
|
with:
|
|
command: fmt
|
|
args: --all -- --check
|
|
|
|
# Compilation check
|
|
check:
|
|
name: check
|
|
runs-on: ubuntu-20.04
|
|
strategy:
|
|
matrix:
|
|
target:
|
|
- thumbv7m-none-eabi
|
|
- thumbv6m-none-eabi
|
|
- x86_64-unknown-linux-gnu
|
|
toolchain:
|
|
- stable
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Install Rust ${{ matrix.toolchain }} with target (${{ matrix.target }})
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: ${{ matrix.toolchain }}
|
|
target: ${{ matrix.target }}
|
|
override: true
|
|
|
|
- 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 check
|
|
uses: actions-rs/cargo@v1
|
|
with:
|
|
use-cross: false
|
|
command: check
|
|
args: --target=${{ matrix.target }}
|
|
|
|
# Clippy
|
|
clippy:
|
|
name: Cargo clippy
|
|
runs-on: ubuntu-20.04
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Install Rust stable
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: stable
|
|
target: x86_64-unknown-linux-gnu
|
|
override: true
|
|
|
|
- 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
|
|
uses: actions-rs/cargo@v1
|
|
with:
|
|
use-cross: false
|
|
command: clippy
|
|
|
|
# Verify all examples, checks
|
|
checkexamples:
|
|
name: checkexamples
|
|
runs-on: ubuntu-20.04
|
|
strategy:
|
|
matrix:
|
|
target:
|
|
- thumbv7m-none-eabi
|
|
- thumbv6m-none-eabi
|
|
toolchain:
|
|
- stable
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Install Rust ${{ matrix.toolchain }} with target (${{ matrix.target }})
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: ${{ matrix.toolchain }}
|
|
target: ${{ matrix.target }}
|
|
override: true
|
|
components: llvm-tools-preview
|
|
|
|
- name: Cache Dependencies
|
|
uses: Swatinem/rust-cache@v1
|
|
|
|
- name: Check the examples
|
|
uses: actions-rs/cargo@v1
|
|
with:
|
|
use-cross: false
|
|
command: check
|
|
args: --examples --target=${{ matrix.target }}
|
|
|
|
# Verify the example output with run-pass tests
|
|
testexamples:
|
|
name: testexamples
|
|
runs-on: ubuntu-20.04
|
|
strategy:
|
|
matrix:
|
|
target:
|
|
- thumbv7m-none-eabi
|
|
- thumbv6m-none-eabi
|
|
toolchain:
|
|
- stable
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Install Rust ${{ matrix.toolchain }} with target (${{ matrix.target }})
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: ${{ matrix.toolchain }}
|
|
target: ${{ matrix.target }}
|
|
override: true
|
|
components: llvm-tools-preview
|
|
|
|
# Use precompiled binutils
|
|
- name: cargo install cargo-binutils
|
|
uses: actions-rs/install@v0.1
|
|
with:
|
|
crate: cargo-binutils
|
|
version: latest
|
|
|
|
- name: Cache Dependencies
|
|
uses: Swatinem/rust-cache@v1
|
|
|
|
- name: Install QEMU
|
|
run: |
|
|
sudo apt update
|
|
sudo apt install -y qemu-system-arm
|
|
|
|
- name: Fail on warnings
|
|
run: sed -i 's,//deny_warnings_placeholder_for_ci,#![deny(warnings)],' src/lib.rs macros/src/lib.rs
|
|
|
|
- name: Run-pass tests
|
|
run:
|
|
cargo xtask --target ${{ matrix.target }}
|
|
|
|
# Check the correctness of macros/ crate
|
|
checkmacros:
|
|
name: checkmacros
|
|
runs-on: ubuntu-20.04
|
|
strategy:
|
|
matrix:
|
|
target:
|
|
- x86_64-unknown-linux-gnu
|
|
toolchain:
|
|
- stable
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Install Rust ${{ matrix.toolchain }} with target (${{ matrix.target }})
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: ${{ matrix.toolchain }}
|
|
target: ${{ matrix.target }}
|
|
override: true
|
|
|
|
- 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
|
|
uses: actions-rs/cargo@v1
|
|
with:
|
|
use-cross: false
|
|
command: check
|
|
args: --manifest-path macros/Cargo.toml --target=${{ matrix.target }}
|
|
|
|
# Run the macros test-suite
|
|
testmacros:
|
|
name: testmacros
|
|
runs-on: ubuntu-20.04
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Install Rust
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: stable
|
|
target: x86_64-unknown-linux-gnu
|
|
override: true
|
|
|
|
- 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
|
|
uses: actions-rs/cargo@v1
|
|
with:
|
|
use-cross: false
|
|
command: test
|
|
args: --manifest-path macros/Cargo.toml
|
|
|
|
# Run test suite
|
|
tests:
|
|
name: tests
|
|
runs-on: ubuntu-20.04
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Install Rust
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: stable
|
|
target: x86_64-unknown-linux-gnu
|
|
override: true
|
|
|
|
- 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
|
|
|
|
- uses: actions-rs/cargo@v1
|
|
with:
|
|
use-cross: false
|
|
command: test
|
|
args: --test tests
|
|
|
|
# Build documentation, check links
|
|
docs:
|
|
name: docs
|
|
runs-on: ubuntu-20.04
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v2
|
|
|
|
- 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
|
|
runs-on: ubuntu-20.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
|
|
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/
|
|
|
|
# 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-20.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@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
|
|
runs-on: ubuntu-20.04
|
|
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
|
|
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
|
|
|
|
# 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
|
|
|
|
# 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
|
|
- clippy
|
|
- checkexamples
|
|
- testexamples
|
|
- checkmacros
|
|
- testmacros
|
|
- tests
|
|
- docs
|
|
- mdbook
|
|
runs-on: ubuntu-20.04
|
|
steps:
|
|
- name: Mark the job as a success
|
|
run: exit 0
|