Add TestMatrix
functionality to qtest
#8977
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 Build and Test | |
on: | |
pull_request: | |
branches: | |
- main | |
- 'feature/**' | |
- 'release/**' | |
merge_group: | |
workflow_dispatch: | |
# Cancel in-progress run when a pull request is updated | |
# Code taken from: | |
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#example-using-a-fallback-value | |
concurrency: | |
group: ${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
env: | |
CARGO_TERM_COLOR: always | |
NODE_VERSION: "18.17.1" | |
PYTHON_VERSION: "3.11" | |
RUST_TOOLCHAIN_VERSION: "1.82" | |
RUST_TOOLCHAIN_COMPONENTS: rustfmt clippy | |
jobs: | |
format: | |
name: Format | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: "true" | |
- name: Setup rust toolchain | |
uses: ./.github/actions/toolchains/rust | |
with: | |
toolchain: ${{ env.RUST_TOOLCHAIN_VERSION }} | |
components: ${{ env.RUST_TOOLCHAIN_COMPONENTS }} | |
- name: Check Formatting | |
run: cargo fmt --all -- --check | |
clippy: | |
name: Clippy | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: "true" | |
- name: Setup rust toolchain | |
uses: ./.github/actions/toolchains/rust | |
with: | |
toolchain: ${{ env.RUST_TOOLCHAIN_VERSION }} | |
components: ${{ env.RUST_TOOLCHAIN_COMPONENTS }} | |
- uses: Swatinem/rust-cache@v2 | |
- name: Clippy Lints | |
run: cargo clippy --all-targets --all-features -- -D warnings | |
format-qsc: | |
name: Format Q# Files | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: "true" | |
- name: Setup rust toolchain | |
uses: ./.github/actions/toolchains/rust | |
with: | |
toolchain: ${{ env.RUST_TOOLCHAIN_VERSION }} | |
components: ${{ env.RUST_TOOLCHAIN_COMPONENTS }} | |
- name: Check Formatting for Libraries and Samples | |
run: cargo run --release --bin qsc_formatter -- ./library/ ./samples/ -r | |
web-check: | |
name: Check web files | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: "true" | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: ${{ env.NODE_VERSION }} | |
- name: npm install | |
run: npm install | |
- name: npm check | |
run: npm run check | |
build: | |
name: Build and test | |
strategy: | |
matrix: | |
os: [windows-latest, ubuntu-latest, macos-14] | |
runs-on: ${{matrix.os}} | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: "true" | |
- name: Setup rust toolchain | |
uses: ./.github/actions/toolchains/rust | |
with: | |
toolchain: ${{ env.RUST_TOOLCHAIN_VERSION }} | |
components: ${{ env.RUST_TOOLCHAIN_COMPONENTS }} | |
- name: Add additional Rust targets | |
run: | | |
rustup target add x86_64-apple-darwin | |
if: matrix.os == 'macos-14' | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ env.PYTHON_VERSION }} | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: ${{ env.NODE_VERSION }} | |
- uses: Swatinem/rust-cache@v2 | |
- name: Prereqs | |
run: python ./prereqs.py --install | |
- name: Build and Test | |
run: python ./build.py --no-check --wasm --npm --vscode --play --pip --widgets --jupyterlab | |
unit-tests: | |
name: Rust Unit tests | |
strategy: | |
matrix: | |
os: [windows-latest, ubuntu-latest, macos-14] | |
runs-on: ${{matrix.os}} | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: "true" | |
- name: Setup rust toolchain | |
uses: ./.github/actions/toolchains/rust | |
with: | |
toolchain: ${{ env.RUST_TOOLCHAIN_VERSION }} | |
components: ${{ env.RUST_TOOLCHAIN_COMPONENTS }} | |
- name: Add additional Rust targets | |
run: | | |
rustup target add x86_64-apple-darwin | |
if: matrix.os == 'macos-14' | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ env.PYTHON_VERSION }} | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: ${{ env.NODE_VERSION }} | |
- uses: Swatinem/rust-cache@v2 | |
- name: Prereqs | |
run: python ./prereqs.py --install | |
- name: Build and Test | |
run: python ./build.py --no-check --cli | |
integration-tests: | |
name: Integration tests | |
timeout-minutes: 15 | |
strategy: | |
matrix: | |
os: [windows-latest, ubuntu-latest, macos-14] | |
runs-on: ${{matrix.os}} | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: "true" | |
- name: Setup rust toolchain | |
uses: ./.github/actions/toolchains/rust | |
with: | |
toolchain: ${{ env.RUST_TOOLCHAIN_VERSION }} | |
components: ${{ env.RUST_TOOLCHAIN_COMPONENTS }} | |
- name: Add additional Rust targets | |
run: | | |
rustup target add x86_64-apple-darwin | |
if: matrix.os == 'macos-14' | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ env.PYTHON_VERSION }} | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: ${{ env.NODE_VERSION }} | |
- uses: Swatinem/rust-cache@v2 | |
- name: Prereqs | |
run: python ./prereqs.py --install | |
- name: Run integration tests | |
run: python ./build.py --no-check --no-test --wasm --npm --vscode --pip --widgets --integration-tests | |
status-check: | |
name: Status Check | |
needs: [format, clippy, web-check, build, unit-tests, format-qsc, integration-tests] | |
runs-on: ubuntu-latest | |
if: failure() | |
steps: | |
- run: | | |
echo "::error Build failed" | |
exit 1 |