2020-10-04 06:53:13 -05:00
|
|
|
name: CI
|
|
|
|
|
|
|
|
on:
|
|
|
|
push:
|
|
|
|
# Run in PRs and for bors, but not on master.
|
|
|
|
branches:
|
|
|
|
- 'auto'
|
|
|
|
- 'try'
|
|
|
|
pull_request:
|
|
|
|
branches:
|
|
|
|
- 'master'
|
|
|
|
schedule:
|
|
|
|
# Use <https://crontab.guru> to conveniently edit cron schedule.
|
2020-10-04 10:01:10 -05:00
|
|
|
- cron: '0 7 * * *' # At 07:00 UTC every day.
|
2020-10-04 06:53:13 -05:00
|
|
|
|
|
|
|
jobs:
|
|
|
|
build:
|
|
|
|
runs-on: ${{ matrix.os }}
|
|
|
|
env:
|
|
|
|
RUST_BACKTRACE: 1
|
2020-10-04 10:01:10 -05:00
|
|
|
HOST_TARGET: ${{ matrix.host_target }}
|
2020-10-04 06:53:13 -05:00
|
|
|
strategy:
|
|
|
|
matrix:
|
|
|
|
build: [linux64, macos, win32]
|
|
|
|
include:
|
|
|
|
- build: linux64
|
|
|
|
os: ubuntu-latest
|
|
|
|
host_target: x86_64-unknown-linux-gnu
|
|
|
|
- build: macos
|
|
|
|
os: macos-latest
|
|
|
|
host_target: x86_64-apple-darwin
|
|
|
|
- build: win32
|
|
|
|
os: windows-latest
|
|
|
|
host_target: i686-pc-windows-msvc
|
|
|
|
steps:
|
|
|
|
- uses: actions/checkout@v2
|
2020-10-06 04:11:14 -05:00
|
|
|
|
2020-10-04 10:01:10 -05:00
|
|
|
# We install gnu-tar because BSD tar is buggy on macOS builders of GHA.
|
|
|
|
# See <https://github.com/actions/cache/issues/403>.
|
|
|
|
- name: Install GNU tar
|
|
|
|
if: runner.os == 'macOS'
|
|
|
|
run: |
|
|
|
|
brew install gnu-tar
|
|
|
|
echo "/usr/local/opt/gnu-tar/libexec/gnubin" >> $GITHUB_PATH
|
|
|
|
|
|
|
|
# Cache the global cargo directory, but NOT the local `target` directory which
|
|
|
|
# we cannot reuse anyway when the nightly changes (and it grows quite large
|
|
|
|
# over time).
|
|
|
|
- name: Add cache for cargo
|
|
|
|
uses: actions/cache@v2
|
|
|
|
with:
|
|
|
|
path: |
|
|
|
|
# Taken from <https://doc.rust-lang.org/nightly/cargo/guide/cargo-home.html#caching-the-cargo-home-in-ci>.
|
|
|
|
~/.cargo/bin
|
|
|
|
~/.cargo/registry/index
|
|
|
|
~/.cargo/registry/cache
|
|
|
|
~/.cargo/git/db
|
|
|
|
# contains package information of crates installed via `cargo install`.
|
|
|
|
~/.cargo/.crates.toml
|
|
|
|
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
|
|
|
|
restore-keys: ${{ runner.os }}-cargo
|
|
|
|
|
|
|
|
- name: Install rustup-toolchain-install-master and xargo
|
2021-01-10 12:12:11 -06:00
|
|
|
shell: bash
|
2020-10-04 10:01:10 -05:00
|
|
|
run: |
|
|
|
|
cargo install rustup-toolchain-install-master
|
|
|
|
cargo install xargo
|
|
|
|
|
|
|
|
- name: Install "master" toolchain
|
2021-01-10 12:12:11 -06:00
|
|
|
shell: bash
|
2020-10-04 10:01:10 -05:00
|
|
|
run: |
|
|
|
|
if [[ ${{ github.event_name }} == 'schedule' ]]; then
|
|
|
|
RUSTC_HASH=$(git ls-remote https://github.com/rust-lang/rust.git master | awk '{print $1}')
|
2021-01-10 12:12:11 -06:00
|
|
|
exit 1 # just to test cron notifications
|
2020-10-04 10:01:10 -05:00
|
|
|
else
|
|
|
|
RUSTC_HASH=$(< rust-version)
|
|
|
|
fi
|
|
|
|
rustup-toolchain-install-master \
|
|
|
|
-f \
|
|
|
|
-n master "$RUSTC_HASH" \
|
|
|
|
-c rust-src \
|
|
|
|
-c rustc-dev \
|
|
|
|
-c llvm-tools \
|
|
|
|
--host ${{ matrix.host_target }}
|
|
|
|
rustup default master
|
|
|
|
|
|
|
|
- name: Show Rust version
|
|
|
|
run: |
|
|
|
|
rustup show
|
|
|
|
rustc -Vv
|
|
|
|
cargo -V
|
|
|
|
|
|
|
|
- name: Test
|
|
|
|
run: bash ./ci.sh
|
|
|
|
|
2020-10-06 04:11:14 -05:00
|
|
|
# These jobs doesn't actually test anything, but they're only used to tell
|
|
|
|
# bors the build completed, as there is no practical way to detect when a
|
|
|
|
# workflow is successful listening to webhooks only.
|
|
|
|
#
|
|
|
|
# ALL THE PREVIOUS JOBS NEED TO BE ADDED TO THE `needs` SECTION OF THIS JOB!
|
|
|
|
end-success:
|
|
|
|
name: bors build finished
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
needs: [build]
|
|
|
|
if: github.event.pusher.name == 'bors' && success()
|
|
|
|
steps:
|
|
|
|
- name: mark the job as a success
|
|
|
|
run: exit 0
|
|
|
|
end-failure:
|
|
|
|
name: bors build finished
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
needs: [build]
|
|
|
|
if: github.event.pusher.name == 'bors' && (failure() || cancelled())
|
|
|
|
steps:
|
|
|
|
- name: mark the job as a failure
|
|
|
|
run: exit 1
|
2021-01-10 12:12:11 -06:00
|
|
|
|
|
|
|
# Send a Zulip notification when a cron job fails
|
|
|
|
cron-fail-notify:
|
|
|
|
name: cronjob failure notification
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
needs: [build]
|
|
|
|
if: github.event_name == 'schedule' && (failure() || cancelled())
|
|
|
|
steps:
|
|
|
|
- name: Install zulip-send
|
|
|
|
run: pip3 install zulip
|
|
|
|
- name: Send Zulip notification
|
|
|
|
shell: bash
|
|
|
|
env:
|
|
|
|
ZULIP_BOT_EMAIL: ${{ secrets.ZULIP_BOT_EMAIL }}
|
|
|
|
ZULIP_API_TOKEN: ${{ secrets.ZULIP_API_TOKEN }}
|
|
|
|
run: |
|
2021-01-11 05:09:55 -06:00
|
|
|
~/.local/bin/zulip-send --stream miri --subject "Cron Job Failure" \
|
2021-01-10 12:12:11 -06:00
|
|
|
--message '@**RalfJ** @**oli** the Miri cron job build failed. Please investigate!' \
|
|
|
|
--user $ZULIP_BOT_EMAIL --api-key $ZULIP_API_TOKEN
|