aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Henrik Tjäder <henrik@tjaders.com> 2020-05-31 10:12:29 +0000
committerGravatar Henrik Tjäder <henrik@tjaders.com> 2020-06-02 18:58:06 +0000
commit98110a01c31f2dc4b20022a5c22961a10df4394b (patch)
treec187734354930bea011cdf94ea92136777d796db
parent7406f77a4ec163165fa2f89e8e9351b792e305e3 (diff)
downloadrtic-98110a01c31f2dc4b20022a5c22961a10df4394b.tar.gz
rtic-98110a01c31f2dc4b20022a5c22961a10df4394b.tar.zst
rtic-98110a01c31f2dc4b20022a5c22961a10df4394b.zip
Testing GHA v0.1
Implementing previous Travis CI setup on Github Actions
-rw-r--r--.github/workflows/build.yml362
-rw-r--r--.github/workflows/docs.yml93
-rw-r--r--.github/workflows/properties/build.properties.json6
-rw-r--r--.github/workflows/properties/docs.properties.json6
-rw-r--r--.github/workflows/properties/publish.properties.json6
-rw-r--r--.github/workflows/publish.yml94
6 files changed, 567 insertions, 0 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 00000000..e6abe374
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,362 @@
+name: Build
+on:
+ push:
+ branches:
+ - master
+ - ghatest
+ pull_request:
+ branches:
+ - master
+ - ghatest
+
+env:
+ CARGO_TERM_COLOR: always
+
+jobs:
+ # Run cargo fmt --check, includes macros/
+ style:
+ name: Check Style with cargo fmt
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v1
+
+ - name: Install Rust
+ uses: actions-rs/toolchain@v1
+ with:
+ profile: minimal
+ toolchain: stable
+ override: true
+ components: rustfmt
+
+ - name: cargo fmt --check
+ uses: actions-rs/cargo@v1
+ with:
+ command: fmt
+ args: --all -- --check
+
+ # Compilation check
+ check:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ target:
+ - thumbv7m-none-eabi
+ - thumbv6m-none-eabi
+ - x86_64-unknown-linux-gnu
+ toolchain:
+ - stable
+ - 1.36.0
+ - nightly
+ 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: cargo check
+ uses: actions-rs/cargo@v1
+ with:
+ use-cross: false
+ command: check
+ args: --target=${{ matrix.target }}
+
+ # Verify all examples
+ checkexamples:
+ runs-on: ubuntu-latest
+ 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
+ - uses: actions-rs/cargo@v1
+ with:
+ use-cross: false
+ command: check
+ args: --examples --target=${{ matrix.target }}
+
+ - name: cargo check -p homogeneous
+ uses: actions-rs/cargo@v1
+ with:
+ use-cross: false
+ command: check
+ args: -p homogeneous --examples --target=${{ matrix.target }}
+
+ - name: Install QEMU
+ run: |
+ mkdir qemu
+ curl -L https://github.com/japaric/qemu-bin/raw/master/14.04/qemu-system-arm-2.12.0 > qemu/qemu-system-arm
+ chmod +x qemu/qemu-system-arm
+
+ - name: Setup arm-none-eabi-gcc
+ uses: fiam/arm-none-eabi-gcc@v1
+ with:
+ release: '9-2019-q4' # The arm-none-eabi-gcc release to use.
+
+ - name: Run-pass tests
+ run: |
+ # Add QEMU to the path
+ echo $PATH
+ PATH=$(pwd)/qemu:$PATH
+ arm_example() {
+ local COMMAND=$1
+ local EXAMPLE=$2
+ local BUILD_MODE=$3
+ local FEATURES=$4
+ local BUILD_NUM=$5
+
+ if [ $BUILD_MODE = "release" ]; then
+ local RELEASE_FLAG="--release"
+ else
+ local RELEASE_FLAG=""
+ fi
+
+ if [ -n "$FEATURES" ]; then
+ local FEATURES_FLAG="--features $FEATURES"
+ local FEATURES_STR=${FEATURES/,/_}_
+ else
+ local FEATURES_FLAG=""
+ local FEATURES_STR=""
+ fi
+ local CARGO_FLAGS="--example $EXAMPLE --target ${{ matrix.target }} $RELEASE_FLAG $FEATURES_FLAG"
+
+ if [ $COMMAND = "run" ]; then
+ cargo $COMMAND $CARGO_FLAGS | diff -u ci/expected/$EXAMPLE.run -
+ else
+ cargo $COMMAND $CARGO_FLAGS
+ fi
+ arm-none-eabi-objcopy -O ihex target/${{ matrix.target }}/$BUILD_MODE/examples/$EXAMPLE ci/builds/${EXAMPLE}_${FEATURES_STR}${BUILD_MODE}_${BUILD_NUM}.hex
+ }
+
+ mkdir -p ci/builds
+ exs=(
+ idle
+ init
+ hardware
+ preempt
+ binds
+
+ resource
+ lock
+ late
+ only-shared-access
+
+ task
+ message
+ capacity
+
+ types
+ not-send
+ not-sync
+ shared-with-init
+
+ generics
+ cfg
+ pool
+ ramfunc
+ )
+
+ for ex in ${exs[@]}; do
+ if [ $ex = pool ]; then
+ if [ ${{ matrix.target }} = thumbv6m-none-eabi ]; then
+ continue
+ fi
+
+ td=$(mktemp -d)
+
+ cargo run --example $ex --target ${{ matrix.target }} --features __v7 >\
+ $td/pool.run
+ grep 'foo(0x2' $td/pool.run
+ grep 'bar(0x2' $td/pool.run
+ arm-none-eabi-objcopy -O ihex target/${{ matrix.target }}/debug/examples/$ex \
+ ci/builds/${ex}___v7_debug_1.hex
+
+ cargo run --example $ex --target ${{ matrix.target }} --features __v7 --release >\
+ $td/pool.run
+ grep 'foo(0x2' $td/pool.run
+ grep 'bar(0x2' $td/pool.run
+ arm-none-eabi-objcopy -O ihex target/${{ matrix.target }}/release/examples/$ex \
+ ci/builds/${ex}___v7_release_1.hex
+
+ rm -rf $td
+
+ continue
+ fi
+
+ if [ $ex = types ]; then
+ if [ ${{ matrix.target }} = thumbv6m-none-eabi ]; then
+ continue
+ fi
+
+ arm_example "run" $ex "debug" "__v7" "1"
+ arm_example "run" $ex "release" "__v7" "1"
+
+ continue
+ fi
+
+ arm_example "run" $ex "debug" "" "1"
+ if [ $ex = types ]; then
+ arm_example "run" $ex "release" "" "1"
+ else
+ arm_example "build" $ex "release" "" "1"
+ fi
+ done
+
+ built=()
+ cargo clean
+ for ex in ${exs[@]}; do
+ if [ $ex = types ] || [ $ex = pool ]; then
+ if [ ${{ matrix.target }} = thumbv6m-none-eabi ]; then
+ continue
+ fi
+
+ arm_example "build" $ex "debug" "__v7" "2"
+ cmp ci/builds/${ex}___v7_debug_1.hex \
+ ci/builds/${ex}___v7_debug_2.hex
+ arm_example "build" $ex "release" "__v7" "2"
+ cmp ci/builds/${ex}___v7_release_1.hex \
+ ci/builds/${ex}___v7_release_2.hex
+ else
+ arm_example "build" $ex "debug" "" "2"
+ cmp ci/builds/${ex}_debug_1.hex \
+ ci/builds/${ex}_debug_2.hex
+ arm_example "build" $ex "release" "" "2"
+ cmp ci/builds/${ex}_release_1.hex \
+ ci/builds/${ex}_release_2.hex
+ fi
+
+ built+=( $ex )
+ done
+
+ ( cd target/${{ matrix.target }}/release/examples/ && size ${built[@]} )
+
+
+ # Check the correctness of macros/ crate
+ checkmacros:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ target:
+ - x86_64-unknown-linux-gnu
+ toolchain:
+ - stable
+ - 1.36.0
+ - nightly
+ 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: cargo check
+ uses: actions-rs/cargo@v1
+ with:
+ use-cross: false
+ command: check
+ args: --manifest-path macros/Cargo.toml --target=${{ matrix.target }}
+
+ # Run test suite for thumbv7m
+ testv7:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v2
+ - name: Install Rust
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: 1.36.0
+ target: thumbv7m-none-eabi
+ override: true
+ - uses: actions-rs/cargo@v1
+ with:
+ use-cross: false
+ command: test
+ args: --test single --features __v7
+
+ # Run test suite for thumbv6m
+ testv6:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v2
+ - name: Install Rust
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: 1.36.0
+ target: thumbv6m-none-eabi
+ override: true
+ - uses: actions-rs/cargo@v1
+ with:
+ use-cross: false
+ command: test
+ args: --test single
+
+ # Verify all multicore examples
+ checkmulticore:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ target:
+ - x86_64-unknown-linux-gnu
+ toolchain:
+ - nightly
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v2
+
+ - name: Install Rust ${{ matrix.toolchain }} with x86_64-unknown-linux-gnu
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: ${{ matrix.toolchain }}
+ target: x86_64-unknown-linux-gnu
+ override: true
+ - name: Install Rust ${{ matrix.toolchain }} with thumbv7m-none-eabi
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: ${{ matrix.toolchain }}
+ target: thumbv7m-none-eabi
+ override: true
+ - name: Install Rust ${{ matrix.toolchain }} with thumbv6m-none-eabi
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: ${{ matrix.toolchain }}
+ target: thumbv6m-none-eabi
+ override: true
+ - uses: actions-rs/cargo@v1
+ with:
+ command: install
+ args: microamp-tools --version 0.1.0-alpha.3
+
+ - name: Check multi-core examples
+ run: |
+ cd heterogeneous
+ exs=(
+ smallest
+ x-init-2
+ x-init
+ x-schedule
+ x-spawn
+ )
+ for ex in ${exs[@]}; do
+ cargo-microamp --example=$ex --target thumbv7m-none-eabi,thumbv6m-none-eabi --check
+ done
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
new file mode 100644
index 00000000..297bff06
--- /dev/null
+++ b/.github/workflows/docs.yml
@@ -0,0 +1,93 @@
+name: Docs
+
+on:
+ push:
+ branches:
+ - master
+ - ghatest
+ pull_request:
+ branches:
+ - master
+ - ghatest
+
+env:
+ CARGO_TERM_COLOR: always
+
+jobs:
+ docs:
+ runs-on: ubuntu-latest
+
+ 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: Remove cargo-config
+ run: rm -f .cargo/config
+
+ - name: Build docs
+ run: cargo doc
+
+ - name: Check links
+ run: |
+ td=$(mktemp -d)
+ cp -r target/doc $td/api
+ linkchecker $td/api/rtfm/
+ linkchecker $td/api/cortex_m_rtfm_macros/
+
+ mdbook:
+ runs-on: ubuntu-latest
+ 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.1.11
+ with:
+ mdbook-version: '0.3.1'
+
+ - name: Build book in English
+ run: cd book/en && mdbook build
+
+ - name: Build book in Russian
+ run: cd book/ru && mdbook build
+
+ - 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/
diff --git a/.github/workflows/properties/build.properties.json b/.github/workflows/properties/build.properties.json
new file mode 100644
index 00000000..e447a1ed
--- /dev/null
+++ b/.github/workflows/properties/build.properties.json
@@ -0,0 +1,6 @@
+{
+ "name": "Build",
+ "description": "Build and test a Rust project with Cargo.",
+ "iconName": "rust",
+ "categories": ["Rust"]
+}
diff --git a/.github/workflows/properties/docs.properties.json b/.github/workflows/properties/docs.properties.json
new file mode 100644
index 00000000..a9a052c4
--- /dev/null
+++ b/.github/workflows/properties/docs.properties.json
@@ -0,0 +1,6 @@
+{
+ "name": "Docs",
+ "description": "Build the books.",
+ "iconName": "rust",
+ "categories": ["Rust"]
+}
diff --git a/.github/workflows/properties/publish.properties.json b/.github/workflows/properties/publish.properties.json
new file mode 100644
index 00000000..fa9b8cda
--- /dev/null
+++ b/.github/workflows/properties/publish.properties.json
@@ -0,0 +1,6 @@
+{
+ "name": "Publish",
+ "description": "Publish the books and docs.",
+ "iconName": "rust",
+ "categories": ["Rust"]
+}
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
new file mode 100644
index 00000000..7436bf88
--- /dev/null
+++ b/.github/workflows/publish.yml
@@ -0,0 +1,94 @@
+name: Publish
+
+on:
+ push:
+ branches:
+ - master
+
+jobs:
+ deploy:
+ runs-on: ubuntu-latest
+ 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.1.11
+ with:
+ mdbook-version: '0.3.1'
+ # mdbook-version: 'latest'
+
+ - name: Remove cargo-config
+ run: rm -f .cargo/config
+
+ - name: Build docs
+ run: cargo doc
+
+ - name: Build books
+ run: |
+ langs=( en ru )
+ latest=0.5
+ vers=( 0.4.x )
+
+ # Create directories
+ td=$(mktemp -d)
+ mkdir -p $td/$latest/book/
+ cp -r target/doc $td/$latest/api
+
+ # sed fixes
+ sed 's|URL|rtfm/index.html|g' redirect.html > $td/$latest/api/index.html
+ sed 's|URL|0.5|g' redirect.html > $td/index.html
+ sed 's|URL|book/en|g' redirect.html > $td/$latest/index.html
+
+ # Build books
+ for lang in ${langs[@]}; do
+ ( cd book/$lang && mdbook build )
+ cp -r book/$lang/book $td/$latest/book/$lang
+ cp LICENSE-* $td/$latest/book/$lang/
+ done
+
+ # Build older versions
+ root=$(pwd)
+ for ver in ${vers[@]}; do
+ prefix=${ver%.*}
+
+ mkdir -p $td/$prefix/book
+ src=$(mktemp -d)
+ curl -L https://github.com/rtfm-rs/cortex-m-rtfm/archive/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|rtfm/index.html|g' $root/redirect.html > $td/$prefix/api/index.html
+ for lang in ${langs[@]}; do
+ ( cd book/$lang && mdbook build )
+ 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
+
+ # Forward CNAME file
+ cp CNAME $td/
+ mv $td/ bookstodeploy
+
+ - name: Deploy
+ uses: peaceiris/actions-gh-pages@v3
+ with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ publish_dir: ./bookstodeploy