CI #638
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
push: | |
branches: [master] | |
pull_request: | |
branches: [master] | |
schedule: | |
- cron: '00 01 */4 * *' | |
env: | |
RUST_BACKTRACE: 1 | |
RUSTUP_MAX_RETRIES: 10 | |
CARGO_NET_RETRY: 10 | |
SCCACHE_VER: "v0.3.0" | |
jobs: | |
test: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: true | |
matrix: | |
include: | |
- name: i686-pc-windows-msvc (stable) | |
os: windows-2019 | |
rust: stable | |
target: i686-pc-windows-msvc | |
platform: x86 | |
- name: x86_64-pc-windows-msvc (stable) | |
os: windows-2019 | |
rust: stable | |
target: x86_64-pc-windows-msvc | |
platform: x64 | |
- name: x86_64-pc-windows-msvc (beta) | |
os: windows-2019 | |
rust: beta | |
target: x86_64-pc-windows-msvc | |
platform: x64 | |
- name: x86_64-unknown-linux-gnu (stable) | |
os: ubuntu-20.04 | |
rust: stable | |
target: x86_64-unknown-linux-gnu | |
- name: x86_64-unknown-linux-gnu (beta) | |
os: ubuntu-20.04 | |
rust: beta | |
target: x86_64-unknown-linux-gnu | |
- name: x86_64-apple-darwin (stable) | |
os: macos-latest | |
rust: stable | |
target: x86_64-apple-darwin | |
- name: x86_64-apple-darwin (beta) | |
os: macos-latest | |
rust: beta | |
target: x86_64-apple-darwin | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: 'recursive' | |
# We need to disable the existing toolchain to avoid updating rust-docs | |
# which takes a long time. The fastest way to do this is to rename the | |
# existing folder, as deleting it takes about as much time as not doing | |
# anything and just updating rust-docs. | |
- name: Rename existing rust toolchain (Windows) | |
if: matrix.os == 'windows-2019' | |
run: Rename-Item C:\Users\runneradmin\.rustup\toolchains\stable-x86_64-pc-windows-msvc C:\Users\runneradmin\.rustup\toolchains\stable-x86_64-pc-windows-msvc.old | |
- name: Install Rust toolchain | |
uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: ${{ matrix.rust }} | |
profile: minimal | |
target: ${{ matrix.target }} | |
override: true | |
components: rustfmt | |
default: true | |
- uses: actions/setup-python@v2 | |
with: | |
python-version: '3.7.8' | |
architecture: ${{ matrix.platform || 'x64' }} | |
- uses: jwlawson/actions-setup-cmake@v1.4 | |
if: matrix.os != 'windows-2019' | |
with: | |
cmake-version: '3.9.6' | |
github-api-token: ${{ secrets.GITHUB_TOKEN }} | |
# visual studio 16 2019 not supported until cmake 3.14 | |
- uses: jwlawson/actions-setup-cmake@v1.4 | |
if: matrix.os == 'windows-2019' | |
with: | |
cmake-version: '3.14.7' | |
github-api-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Choose boost version (not ubuntu) | |
if: matrix.os != 'ubuntu-20.04' | |
run: | | |
echo 'BOOST_VER=1.66.0' >> $GITHUB_ENV | |
shell: bash | |
# gcc (ubuntu) + boost has problem with may be uninitialized field in optional | |
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80635 | |
# use the lastest boost to work around this bug | |
- name: Choose boost version (ubuntu) | |
if: matrix.os == 'ubuntu-20.04' | |
run: | | |
echo 'BOOST_VER=1.73.0' >> $GITHUB_ENV | |
shell: bash | |
- name: Install boost | |
run: | | |
set -e | |
export BOOST_VER_NAME=`echo $BOOST_VER | sed 's/\./_/g'` | |
export TAR="boost_$BOOST_VER_NAME.tar.gz" | |
curl -L -o $TAR https://boostorg.jfrog.io/artifactory/main/release/$BOOST_VER/source/$TAR | |
tar --exclude more --exclude tools --exclude doc --exclude html --exclude test -xzvf $TAR | |
echo "BOOST_ROOT=$PWD/boost_$BOOST_VER_NAME" >> $GITHUB_ENV | |
shell: bash | |
- name: Install valgrind for linux | |
if: matrix.os == 'ubuntu-20.04' | |
run: sudo apt-get -y update && sudo apt-get install -y valgrind | |
- name: Install llvm tools on Windows | |
if: matrix.os == 'windows-2019' | |
run: | | |
set -e | |
curl https://releases.llvm.org/5.0.2/LLVM-5.0.2-win64.exe -o llvm-installer.exe | |
7z x llvm-installer.exe -oc:\\llvm-binary | |
echo "LIBCLANG_PATH=C:\\llvm-binary\\bin" >> $GITHUB_ENV | |
echo "c:\\llvm-binary\\bin" >> $GITHUB_PATH | |
shell: bash | |
- name: install sccache (macos) | |
if: matrix.os == 'macos-latest' | |
run: | | |
set -e | |
brew install sccache | |
echo "SCCACHE_BUCKET=flapigenamd64macos" >> $GITHUB_ENV | |
shell: bash | |
- name: install sccache (windows 64bit) | |
if: matrix.os == 'windows-2019' | |
run: | | |
set -e | |
curl -L https://github.com/mozilla/sccache/releases/download/$SCCACHE_VER/sccache-$SCCACHE_VER-x86_64-pc-windows-msvc.tar.gz -o sccache.tar.gz | |
7z x sccache.tar.gz | |
7z x sccache.tar | |
echo "`pwd`/sccache-$SCCACHE_VER-x86_64-pc-windows-msvc" >> $GITHUB_PATH | |
echo "SCCACHE_BUCKET=flapigenamd64win" >> $GITHUB_ENV | |
shell: bash | |
- name: install sccache (linux) | |
if: matrix.os == 'ubuntu-20.04' | |
run: | | |
set -e | |
curl -L https://github.com/mozilla/sccache/releases/download/$SCCACHE_VER/sccache-$SCCACHE_VER-x86_64-unknown-linux-musl.tar.gz -o sccache.tar.gz | |
tar -xzvf sccache.tar.gz | |
chmod 755 "./sccache-$SCCACHE_VER-x86_64-unknown-linux-musl/sccache" | |
echo "`pwd`/sccache-$SCCACHE_VER-x86_64-unknown-linux-musl" >> $GITHUB_PATH | |
echo "SCCACHE_BUCKET=flapigenamd64ubuntu" >> $GITHUB_ENV | |
shell: bash | |
- name: Setup platform variable (for windows build) | |
run: | | |
echo "platform=$platform" >> $GITHUB_ENV | |
shell: bash | |
env: | |
platform: ${{ matrix.platform }} | |
- name: install JDK for 32bit | |
if: matrix.target == 'i686-pc-windows-msvc' | |
uses: actions/setup-java@v1 | |
with: | |
java-version: '8' | |
java-package: jdk | |
architecture: x86 | |
- name: Check versions | |
run: | | |
set -e | |
rustc --print cfg | |
clang --version | |
rustc --version | |
cargo --version | |
cmake --version | |
javac -version | |
python --version | |
sccache --version | |
echo "end of versions checking" | |
shell: bash | |
- name: Run tests | |
run: | | |
set -e | |
cd $GITHUB_WORKSPACE | |
cp workspace.Cargo.toml Cargo.toml | |
python -c "fin = open('Cargo.toml', 'r'); res = fin.read().replace('debug = true', '').replace('incremental = true', ''); fin.close(); fout = open('Cargo.toml', 'w'); fout.write(res + '\n'); fout.close();" | |
test -z "$SCCACHE_ENDPOINT" || export RUSTC_WRAPPER=`which sccache` | |
echo "SCCACHE_BUCKET: $SCCACHE_BUCKET" | |
test -z "$SCCACHE_ENDPOINT" || sccache --start-server | |
python ci_build_and_test.py --skip-android-tests | |
test -z "$SCCACHE_ENDPOINT" || sccache -s | |
shell: bash | |
env: | |
AWS_ACCESS_KEY_ID: ${{ secrets.S_AWS_ACCESS_KEY_ID }} | |
AWS_SECRET_ACCESS_KEY: ${{ secrets.S_AWS_SECRET_ACCESS_KEY }} | |
SCCACHE_ENDPOINT: ${{ secrets.S_SCCACHE_ENDPOINT }} | |
CARGO_BUILD_TARGET: ${{ matrix.target }} | |
doc_tests: | |
name: Docs (Detect cases where documentation links don't resolve and such) | |
runs-on: ubuntu-20.04 | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions-rs/toolchain@v1 | |
with: | |
profile: minimal | |
# Docs.rs uses nightly, which allows for easier syntax for linking to functions. | |
toolchain: nightly | |
override: true | |
- name: cargo rustdoc | |
run: | | |
set -e | |
rustc --version | |
cargo --version | |
cd $GITHUB_WORKSPACE/macroslib | |
# Need to use `cargo rustdoc` to actually get it to respect -D | |
# warnings... Note: this also requires nightly. | |
cargo rustdoc -- -D warnings | |
echo "doc testing done" |