rtic/.github/workflows/build.yml

916 lines
26 KiB
YAML
Raw Permalink Normal View History

name: Build
on:
2023-06-30 01:24:11 +02:00
merge_group:
pull_request:
2020-06-11 21:00:32 +02:00
push:
branches:
- master
env:
CARGO_TERM_COLOR: always
2023-03-04 00:10:08 +01:00
DEV_VERSION: 2
2023-05-28 10:03:57 +02:00
STABLE_VERSION: 2
OLDSTABLE_VERSION: 1
OLDOLDSTABLE_VERSION: 0.5
OLDOLDOLDSTABLE_VERSION: 0.4
QEMU_VERSION: 8.2.0
QEMU_URL: https://download.qemu.org/qemu-8.2.0.tar.xz
QEMU_ESP: qemu_esp
QEMU_ESP_URL: https://github.com/espressif/qemu/releases/download/esp-develop-8.2.0-20240122/qemu-riscv32-softmmu-esp_develop_8.2.0_20240122-x86_64-linux-gnu.tar.xz
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
uses: actions/checkout@v4
2023-02-24 02:27:12 +01:00
- name: Cache Dependencies
uses: Swatinem/rust-cache@v2
2023-04-15 14:43:40 +02:00
- name: cargo xtask fmt
run: cargo xtask --verbose fmt -c
2023-01-28 11:42:24 +01:00
# Compilation check (lm3s6965)
checklm3s6965:
name: check (lm3s6965)
2022-12-15 22:03:55 +01:00
runs-on: ubuntu-22.04
strategy:
matrix:
backend:
- thumbv7
- thumbv6
- thumbv8-base
- thumbv8-main
toolchain:
- stable
steps:
- name: Checkout
uses: actions/checkout@v4
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: Cache Dependencies
uses: Swatinem/rust-cache@v2
- run: cargo xtask --deny-warnings --platform lm3s6965 --backend ${{ matrix.backend }} check
2023-02-28 23:55:02 +01:00
# Compilation check (hifive1) TODO
# checkhifive1:
# Clippy (lm3s6965)
clippylm3s6965:
name: clippy (lm3s6965)
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:
- stable
2022-02-09 18:45:49 +01:00
steps:
- name: Checkout
uses: actions/checkout@v4
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: Cache Dependencies
uses: Swatinem/rust-cache@v2
- run: cargo xtask --deny-warnings --platform lm3s6965 --backend ${{ matrix.backend }} clippy
# Clippy (hifive1) TODO
# clippyhifive1:
# Platform lm3s6965: verify all examples, checks
checkexampleslm3s6965:
name: check examples (lm3s6965)
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:
- stable
steps:
- name: Checkout
uses: actions/checkout@v4
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' }}
run: cargo xtask --platform lm3s6965 --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' }}
run: cargo xtask --platform lm3s6965 --backend ${{ matrix.backend }} example-check
# Platform hifive1: verify all examples, checks
checkexampleshifive1:
name: check examples (hifive1)
2023-04-15 19:40:21 +02:00
runs-on: ubuntu-22.04
strategy:
matrix:
backend:
- riscv32-imc-clint
- riscv32-imac-clint
2023-04-15 19:40:21 +02:00
toolchain:
- stable
2023-04-15 19:40:21 +02:00
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install Rust ${{ matrix.toolchain }}
2023-04-15 19:40:21 +02:00
run: |
rustup override set ${{ matrix.toolchain }}
- name: Configure Rust target
2023-04-15 19:40:21 +02:00
run: |
rustup target add riscv32imac-unknown-none-elf
rustup target add riscv32imc-unknown-none-elf
2023-04-15 19:40:21 +02:00
- name: Cache Dependencies
uses: Swatinem/rust-cache@v2
- name: Check the examples
if: ${{ matrix.backend == 'riscv32-imc-clint' }}
run: cargo xtask --platform hifive1 --backend ${{ matrix.backend }} --exampleexclude static example-check
2023-04-15 19:40:21 +02:00
- name: Check the examples
if: ${{ matrix.backend != 'riscv32-imc-clint' }}
run: cargo xtask --platform hifive1 --backend ${{ matrix.backend }} example-check
2023-04-15 19:40:21 +02:00
# Platform esp32c3: verify all examples, checks
checkexamplesesp32c3:
name: check examples (esp32c3)
runs-on: ubuntu-22.04
strategy:
matrix:
backend:
- riscv-esp32-c3
toolchain:
- nightly
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install Rust ${{ matrix.toolchain }}
run: |
rustup toolchain install nightly-2023-11-14 --component rust-src --target riscv32imc-unknown-none-elf
- name: Configure Rust target
run: |
rustup target add riscv32imc-unknown-none-elf
- name: Cache Dependencies
uses: Swatinem/rust-cache@v2
- name: Check the examples
run: cargo xtask --platform esp32-c3 --backend ${{ matrix.backend }} example-check
buildqemu:
name: Get modern QEMU, build and store
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Cache QEMU build
id: cache-qemu
uses: actions/cache@v4
with:
path: qemu-${{ env.QEMU_VERSION }}/build
key: ${{ runner.OS }}-qemu-${{ env.QEMU_VERSION }}
restore-keys: |
${{ runner.OS }}-qemu-${{ env.QEMU_VERSION }}
${{ runner.OS }}-qemu-
- name: Install QEMU to get dependencies
run: |
sudo apt update
sudo apt install -y qemu-system-arm qemu-system-riscv32
sudo apt install -y git libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev ninja-build
- if: ${{ steps.cache-qemu.outputs.cache-hit != 'true' }}
name: Download QEMU
run: wget "${{ env.QEMU_URL }}"
- if: ${{ steps.cache-qemu.outputs.cache-hit != 'true' }}
name: Extract QEMU
run: tar xvJf qemu-${{ env.QEMU_VERSION }}.tar.xz
- if: ${{ steps.cache-qemu.outputs.cache-hit != 'true' }}
name: Configure QEMU
run: |
cd qemu-${{ env.QEMU_VERSION }}
./configure --target-list=arm-softmmu,riscv32-softmmu
- if: ${{ steps.cache-qemu.outputs.cache-hit != 'true' }}
name: Build QEMU
run: |
cd qemu-${{ env.QEMU_VERSION }}
ninja -C build
- name: Download ESP32 QEMU
run: wget "${{ env.QEMU_ESP_URL }}" --output-document=${{ env.QEMU_ESP}}.tar.xz
- name: Extract ESP32 QEMU
run: |
mkdir -p qemu-${{ env.QEMU_VERSION }}/build/esp32
tar --strip-components=1 -xvJf ${{ env.QEMU_ESP }}.tar.xz -C qemu-${{ env.QEMU_VERSION }}/build/esp32 qemu
- name: Archive QEMU build
run: |
cd qemu-${{ env.QEMU_VERSION }}/build
tar -cf $GITHUB_WORKSPACE/qemu.tar *
- name: Store QEMU build
uses: actions/upload-artifact@v4
with:
name: qemu
path: qemu.tar
# Platform lm3s6965: verify the example output with run-pass tests
testexampleslm3s6965:
name: QEMU run (lm3s6965)
needs: buildqemu
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:
- stable
steps:
- name: Checkout
uses: actions/checkout@v4
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
2023-02-24 21:08:00 +01:00
- name: Install cargo-binutils
2023-02-24 21:19:11 +01:00
uses: taiki-e/install-action@v2
with:
tool: 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 to get dependencies
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: Download built QEMU
uses: actions/download-artifact@v4
with:
name: qemu
- name: Extract QEMU into local path
run: tar -xf qemu.tar -C /usr/local/bin
- name: Check which QEMU is used
run: |
which qemu-system-arm
which qemu-system-riscv32
2021-08-26 10:58:59 +02:00
- name: Run-pass tests
run: cargo xtask --deny-warnings --platform lm3s6965 --backend ${{ matrix.backend }} qemu
# Platform hifive1: verify the example output with run-pass tests
testexampleshifive1:
name: QEMU run (hifive1)
needs: buildqemu
runs-on: ubuntu-22.04
strategy:
matrix:
backend:
- riscv32-imc-clint
- riscv32-imac-clint
toolchain:
- stable
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install Rust ${{ matrix.toolchain }}
run: |
rustup set profile minimal
rustup override set ${{ matrix.toolchain }}
- name: Configure Rust target
run: |
rustup target add riscv32imac-unknown-none-elf
rustup target add riscv32imc-unknown-none-elf
- name: Add Rust component llvm-tools-preview
run: rustup component add llvm-tools-preview
# Use precompiled binutils
- name: Install cargo-binutils
uses: taiki-e/install-action@v2
with:
tool: cargo-binutils
- name: Cache Dependencies
uses: Swatinem/rust-cache@v2
- name: Install QEMU to get dependencies
run: |
sudo apt update
sudo apt install -y qemu-system-riscv32
- name: Download built QEMU
uses: actions/download-artifact@v4
with:
name: qemu
- name: Extract QEMU into local path
run: tar -xf qemu.tar -C /usr/local/bin
- name: Check which QEMU is used
run: |
which qemu-system-arm
which qemu-system-riscv32
- name: Run-pass tests
if: ${{ matrix.backend == 'riscv32-imc-clint' }}
run: cargo xtask --deny-warnings --platform hifive1 --backend ${{ matrix.backend }} --exampleexclude static qemu
- name: Run-pass tests
if: ${{ matrix.backend != 'riscv32-imc-clint' }}
run: cargo xtask --deny-warnings --platform hifive1 --backend ${{ matrix.backend }} qemu
# Platform esp32c3: verify the example output with run-pass tests
testexamplesesp32c3:
name: QEMU run (esp32c3)
needs: buildqemu
runs-on: ubuntu-22.04
strategy:
matrix:
toolchain:
- stable
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install Rust ${{ matrix.toolchain }}
run: |
rustup set profile minimal
rustup override set ${{ matrix.toolchain }}
- name: Configure Rust target
run: |
rustup target add riscv32imac-unknown-none-elf
rustup target add riscv32imc-unknown-none-elf
- name: Add Rust component llvm-tools-preview
run: rustup component add llvm-tools-preview
- name: Install libudev espflash dependency
run: |
sudo apt update
sudo apt install -y libudev-dev
# Use precompiled binutils
- name: Install cargo-binutils
uses: taiki-e/install-action@v2
with:
tool: cargo-binutils
# Use precompiled if possible
2024-08-07 20:37:18 +02:00
- name: Install espflash
run: cargo install espflash --version 3.1.0 --force
# uses: taiki-e/install-action@v2
# with:
# tool: espflash
- name: Install esptool.py
run: pip install esptool
- name: Cache Dependencies
uses: Swatinem/rust-cache@v2
- name: Install QEMU to get dependencies
run: |
sudo apt update
sudo apt install -y qemu-system-riscv32
- name: Download built QEMU
uses: actions/download-artifact@v4
with:
name: qemu
- name: Extract ESP32 QEMU into local path
run: sudo tar --strip-components=1 -xf qemu.tar -C /usr/local/ esp32/
- name: Check which QEMU is used
run: |
which qemu-system-riscv32
- name: Run-pass tests
run: cargo xtask -v --platform esp32-c3 qemu
# Run test suite
2023-02-28 23:55:02 +01:00
tests:
name: tests
2022-12-15 22:03:55 +01:00
runs-on: ubuntu-22.04
2023-02-24 01:54:22 +01:00
strategy:
2023-03-01 00:46:00 +01:00
fail-fast: false
2023-02-24 01:54:22 +01:00
matrix:
backend:
2023-03-01 00:40:50 +01:00
- thumbv7
- thumbv6
- thumbv8-base
- thumbv8-main
2023-02-28 23:55:02 +01:00
package:
- rtic
- rtic-common
- rtic-macros
- rtic-monotonics
2023-03-02 19:58:04 +01:00
- rtic-sync
2023-02-28 23:55:02 +01:00
- rtic-time
2023-02-24 01:54:22 +01:00
steps:
- name: Checkout
uses: actions/checkout@v4
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
2023-02-28 23:55:02 +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
2023-01-28 14:02:54 +01:00
- name: Run cargo test
2023-04-16 12:51:11 +02:00
run: cargo xtask --deny-warnings --backend ${{ matrix.backend }} test ${{ matrix.package }}
2023-01-28 14:02:54 +01:00
# Build documentation, check links
docs:
2023-02-24 21:08:00 +01:00
name: build docs
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v4
2023-02-24 20:37:22 +01:00
- name: Install lychee
2023-02-24 21:19:11 +01:00
uses: taiki-e/install-action@v2
with:
tool: lychee
- name: Build docs
run: cargo xtask doc
- name: Check links
run: |
td=$(mktemp -d)
cp -r target/doc $td/api
echo rtic
lychee --offline --format detailed $td/api/rtic/
echo rtic_common
lychee --offline --format detailed $td/api/rtic_common/
echo rtic_macros
lychee --offline --format detailed $td/api/rtic_macros/
echo rtic_monotonics
lychee --offline --format detailed $td/api/rtic_monotonics/
2023-03-02 20:09:39 +01:00
echo rtic_sync
lychee --offline --format detailed $td/api/rtic_sync/
echo rtic_time
lychee --offline --format detailed $td/api/rtic_time/
2023-02-24 21:58:26 +01:00
- name: Archive the API docs
run: |
cp -r target/doc apidocs
tar -cf apidocs.tar apidocs
- name: Store the API docs
uses: actions/upload-artifact@v4
2023-02-24 21:58:26 +01:00
with:
name: apidocs
path: apidocs.tar
# Build the books
mdbook:
2023-02-24 20:37:22 +01:00
name: build mdbook
2023-02-24 21:58:26 +01:00
needs: docs
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v4
2023-02-24 20:37:22 +01:00
- name: Install lychee
2023-02-24 21:19:11 +01:00
uses: taiki-e/install-action@v2
with:
tool: lychee
2023-03-04 00:10:08 +01:00
- name: Install mdbook
2023-02-24 21:19:11 +01:00
uses: taiki-e/install-action@v2
with:
2023-03-04 00:10:08 +01:00
tool: mdbook
2023-01-30 22:15:43 +01:00
2023-03-04 00:10:08 +01:00
- name: Install mdbook-mermaid
uses: taiki-e/install-action@v2
with:
2023-03-04 00:10:08 +01:00
tool: mdbook-mermaid
- name: Build book in English
2023-03-04 00:10:08 +01:00
run: cargo xtask book
2023-02-24 21:58:26 +01:00
- name: Download built API docs
uses: actions/download-artifact@v4
2023-02-24 21:58:26 +01:00
with:
name: apidocs
- name: Extract the API docs
run: tar -xf apidocs.tar
2023-02-24 21:58:26 +01:00
- name: Check links
run: |
td=$(mktemp -d)
mkdir $td/book
cp -r book/en/book $td/book/en
cp LICENSE-* $td/book/en
2023-02-24 21:58:26 +01:00
cp -r apidocs/ $td/api
lychee --offline --format detailed $td/book/en/
2023-03-04 00:54:53 +01:00
mv $td bookroot
2023-03-04 00:10:08 +01:00
- name: Archive the book + API docs
run: |
tar -cf book.tar bookroot
- name: Store the Book + API docs
uses: actions/upload-artifact@v4
2023-03-04 00:10:08 +01:00
with:
name: book
path: book.tar
mdbookold:
name: build docs and mdbook for older releases
2023-06-05 23:21:14 +02:00
needs: pushtostablebranch
2023-03-04 00:10:08 +01:00
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v4
2023-03-04 00:10:08 +01:00
2023-03-04 20:48:33 +01:00
- name: Install mdbook
uses: taiki-e/install-action@v2
with:
tool: mdbook
- name: Install mdbook-mermaid
uses: taiki-e/install-action@v2
with:
tool: mdbook-mermaid
2023-03-04 00:10:08 +01:00
- name: Remove cargo-config
run: rm -f .cargo/config
- name: Prepare output folder
run: mkdir -p mdbookold
- name: Fetch and build books for older versions
run: |
# The latest stable must be the first element in the array
vers=( "${{ env.STABLE_VERSION }}" "${{ env.OLDSTABLE_VERSION }}" )
langs=( en )
root=$(pwd)
webroot=$(pwd)/mdbookold
for ver in ${vers[@]}; do
2023-03-04 20:43:29 +01:00
mkdir -p src/$ver
src=$root/src/$ver
2023-03-04 00:10:08 +01:00
curl -L https://github.com/rtic-rs/rtic/archive/release/v${ver}.tar.gz | tar xz --strip-components 1 -C $src
pushd $src
rm -f .cargo/config
2023-05-31 21:21:29 +02:00
# Version 1 and below uses cargo doc directly
if [[ $ver -gt 1 ]]
then
# Version 2 and above
cargo xtask doc
else
cargo doc || cargo doc --features timer-queue
fi
mkdir -p $webroot/$ver/book
2023-03-04 00:10:08 +01:00
cp -r target/doc $webroot/$ver/api
2023-03-04 20:43:29 +01:00
2023-03-04 00:58:54 +01:00
sed 's|URL|rtic/index.html|g' $root/redirect.html > $webroot/$ver/api/index.html
2023-03-04 00:10:08 +01:00
popd
for lang in ${langs[@]}; do
cargo xtask book build $src/book/$lang
2023-03-04 20:43:29 +01:00
cp -r $src/book/$lang/book $webroot/$ver/book/$lang
2023-03-04 00:10:08 +01:00
cp LICENSE-* $webroot/$ver/book/$lang/
done
2023-03-04 20:43:29 +01:00
# using master branch redirect file
2023-03-04 00:58:54 +01:00
sed 's|URL|book/en|g' $root/redirect.html > $webroot/$ver/index.html
2023-03-04 00:10:08 +01:00
rm -rf $src
done
- name: Archive the old books
run: |
tar -cf mdbookold.tar mdbookold
- name: Store the old API docs
uses: actions/upload-artifact@v4
2023-03-04 00:10:08 +01:00
with:
name: mdbookold
path: mdbookold.tar
parseversion:
2023-03-04 00:23:13 +01:00
name: Parse the master branch RTIC version
runs-on: ubuntu-22.04
2023-05-31 21:53:36 +02:00
outputs:
branch: ${{ steps.parseversion.outputs.branch }}
versionmajor: ${{ steps.parseversion.outputs.versionmajor }}
version: ${{ steps.parseversion.outputs.version }}
2023-03-04 00:10:08 +01:00
steps:
- uses: actions/checkout@v4
2023-03-04 00:10:08 +01:00
- name: Get crate version and print output branch release/vX
2023-05-31 21:53:36 +02:00
id: parseversion
2023-03-04 00:10:08 +01:00
# Parse metadata for version number, extract the Semver Major
run: |
VERSION=$(cargo metadata --format-version 1 --no-deps --offline | jq -r '.packages[] | select(.name =="rtic") | .version')
VERSIONMAJOR=${VERSION%.*.*}
2023-05-31 21:53:36 +02:00
echo "branch=release/v$VERSIONMAJOR" >> "$GITHUB_OUTPUT"
echo "versionmajor=$VERSIONMAJOR" >> "$GITHUB_OUTPUT"
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
2023-03-04 00:10:08 +01:00
# Update stable branch
#
# This is only valid when current stable resides in
# master branch.
# As master moves on to development, the work on the
# stable version will happen in release/v"stable_version".
# Thus, no need to push changes
2023-03-04 00:10:08 +01:00
#
# This needs to run before book is built, as bookbuilding fetches from the branch
2023-06-05 23:21:14 +02:00
pushtostablebranch:
name: Also push branch into release/vX when pushing to master
2023-03-04 00:10:08 +01:00
runs-on: ubuntu-22.04
needs:
2023-03-04 00:24:45 +01:00
- ci-success
2023-03-04 00:10:08 +01:00
- parseversion
2023-05-31 22:15:39 +02:00
env:
branch: ${{ needs.parseversion.outputs.branch }}
2023-05-31 22:41:42 +02:00
versionmajor: ${{ needs.parseversion.outputs.versionmajor }}
2023-05-31 22:15:39 +02:00
version: ${{ needs.parseversion.outputs.version }}
2023-03-04 00:10:08 +01:00
# Only run this when pushing to master branch
if: github.ref == 'refs/heads/master'
steps:
- uses: actions/checkout@v4
2023-03-04 00:10:08 +01:00
- name: Push to stable release branch if master contains stable version
if: ${{ env.versionmajor == env.STABLE_VERSION }}
run: |
# Get the full history of the branch leading up to current commit
git fetch --unshallow
# Make git aware of the release branch
git fetch -u origin ${{ env.branch }}
# Push the full history into the release branch
git push -u origin master:${{ env.branch }}
2023-03-04 00:10:08 +01:00
2023-06-07 18:15:32 +02:00
- name: Else case, master did not contain the stable version
if: ${{ env.versionmajor != env.STABLE_VERSION }}
run: echo "Master branch contains a development release, no git push performed"
2023-03-04 00:10:08 +01:00
# Only runs when pushing to master branch
# If all tests pass, then deploy stage is run
deploy:
name: deploy
runs-on: ubuntu-22.04
needs:
2023-06-05 23:21:14 +02:00
- pushtostablebranch
- docs
- mdbookold
2023-03-04 00:10:08 +01:00
- mdbook
# Only run this when pushing to master branch
if: github.ref == 'refs/heads/master'
steps:
- uses: actions/checkout@v4
2023-03-04 00:10:08 +01:00
- name: Install lychee
uses: taiki-e/install-action@v2
with:
tool: lychee
- name: Install mdbook-mermaid
uses: taiki-e/install-action@v2
with:
tool: mdbook-mermaid
2023-03-04 00:10:08 +01:00
- name: mdBook Action
uses: peaceiris/actions-mdbook@v2
2023-03-04 00:10:08 +01:00
with:
mdbook-version: 'latest'
- name: Remove cargo-config
run: rm -f .cargo/config
- name: Download built dev-ver book and API docs
uses: actions/download-artifact@v4
2023-03-04 00:10:08 +01:00
with:
name: book
- name: Extract the dev-version book and API docs
run: |
tar -xf book.tar
2023-03-04 00:10:08 +01:00
- name: Download built old versions of books and API docs
uses: actions/download-artifact@v4
2023-03-04 00:10:08 +01:00
with:
name: mdbookold
- name: Extract the old version books and API docs
run: |
tar -xf mdbookold.tar
2023-03-04 00:10:08 +01:00
- name: Prepare books
shell: 'script --return --quiet --command "bash {0}"'
run: |
langs=( en )
devver=( dev )
# The latest stable must be the first element in the array
vers=( "${{ env.STABLE_VERSION }}" "${{ env.OLDSTABLE_VERSION }}" )
# 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/
cp -r bookroot/* $td/$devver/
# 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
# This makes sense, preferable to have doc/book updates going live directly to rtic.rs
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
# Package older versions, including stable
# Copy the stable book to the stable alias
cp -r mdbookold/${{ env.STABLE_VERSION }} $td/stable
# Copy the stable book to the webroot
cp -r mdbookold/${{ env.STABLE_VERSION }} $td/
# Copy the old stable book to the webroot
cp -r mdbookold/${{ env.OLDSTABLE_VERSION }} $td/
# Forward CNAME file
cp CNAME $td/
mv $td/ bookstodeploy
- name: Archive the webroot
run: |
tar -cf bookstodeploy.tar bookstodeploy
- name: Store the books
uses: actions/upload-artifact@v4
with:
name: bookstodeploy
path: bookstodeploy.tar
ghapages:
name: Publish rtic.rs
runs-on: ubuntu-22.04
needs:
- deploy
steps:
- name: Download books
uses: actions/download-artifact@v4
with:
name: bookstodeploy
- name: Extract the books
run: |
tar -xf bookstodeploy.tar
2023-03-04 00:10:08 +01:00
- name: Deploy to GH-pages
uses: peaceiris/actions-gh-pages@v4
2023-03-04 00:10:08 +01:00
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./bookstodeploy
force_orphan: true
2020-06-11 21:00:32 +02:00
# 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
- checklm3s6965
# checkhifive1 TODO
- clippylm3s6965
# clippyhifive1 TODO
- checkexampleslm3s6965
- checkexampleshifive1
- checkexamplesesp32c3
- testexampleslm3s6965
- testexampleshifive1
- testexamplesesp32c3
2023-02-28 23:55:02 +01: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