119625d8cSopenharmony_ciname: CI
219625d8cSopenharmony_cion:
319625d8cSopenharmony_ci  pull_request:
419625d8cSopenharmony_ci  push:
519625d8cSopenharmony_ci    branches: ["*master"]
619625d8cSopenharmony_ci  schedule:
719625d8cSopenharmony_ci  - cron: '3 3 3 * *'
819625d8cSopenharmony_cipermissions:
919625d8cSopenharmony_ci  contents: read
1019625d8cSopenharmony_ci
1119625d8cSopenharmony_cijobs:
1219625d8cSopenharmony_ci  ci:
1319625d8cSopenharmony_ci    permissions:
1419625d8cSopenharmony_ci      contents: none
1519625d8cSopenharmony_ci    name: CI
1619625d8cSopenharmony_ci    needs: [test, check, docs, rustfmt, clippy, cffconvert]
1719625d8cSopenharmony_ci    runs-on: ubuntu-latest
1819625d8cSopenharmony_ci    steps:
1919625d8cSopenharmony_ci      - name: Done
2019625d8cSopenharmony_ci        run: exit 0
2119625d8cSopenharmony_ci  test:
2219625d8cSopenharmony_ci    name: Test
2319625d8cSopenharmony_ci    strategy:
2419625d8cSopenharmony_ci      matrix:
2519625d8cSopenharmony_ci        build: [linux, windows, mac, minimal, default, next]
2619625d8cSopenharmony_ci        include:
2719625d8cSopenharmony_ci        - build: linux
2819625d8cSopenharmony_ci          os: ubuntu-latest
2919625d8cSopenharmony_ci          rust: "stable"
3019625d8cSopenharmony_ci          features: "full"
3119625d8cSopenharmony_ci        - build: windows
3219625d8cSopenharmony_ci          os: windows-latest
3319625d8cSopenharmony_ci          rust: "stable"
3419625d8cSopenharmony_ci          features: "full"
3519625d8cSopenharmony_ci        - build: mac
3619625d8cSopenharmony_ci          os: macos-latest
3719625d8cSopenharmony_ci          rust: "stable"
3819625d8cSopenharmony_ci          features: "full"
3919625d8cSopenharmony_ci        - build: minimal
4019625d8cSopenharmony_ci          os: ubuntu-latest
4119625d8cSopenharmony_ci          rust: "stable"
4219625d8cSopenharmony_ci          features: "minimal"
4319625d8cSopenharmony_ci        - build: default
4419625d8cSopenharmony_ci          os: ubuntu-latest
4519625d8cSopenharmony_ci          rust: "stable"
4619625d8cSopenharmony_ci          features: "default"
4719625d8cSopenharmony_ci        - build: next
4819625d8cSopenharmony_ci          os: ubuntu-latest
4919625d8cSopenharmony_ci          rust: "stable"
5019625d8cSopenharmony_ci          features: "next"
5119625d8cSopenharmony_ci    continue-on-error: ${{ matrix.rust != 'stable' }}
5219625d8cSopenharmony_ci    runs-on: ${{ matrix.os }}
5319625d8cSopenharmony_ci    steps:
5419625d8cSopenharmony_ci    - name: Checkout repository
5519625d8cSopenharmony_ci      uses: actions/checkout@v3
5619625d8cSopenharmony_ci    - name: Install Rust
5719625d8cSopenharmony_ci      uses: actions-rs/toolchain@v1
5819625d8cSopenharmony_ci      with:
5919625d8cSopenharmony_ci        toolchain: ${{ matrix.rust }}
6019625d8cSopenharmony_ci        profile: minimal
6119625d8cSopenharmony_ci        override: true
6219625d8cSopenharmony_ci    - uses: Swatinem/rust-cache@v2
6319625d8cSopenharmony_ci    - name: Build
6419625d8cSopenharmony_ci      run: make build-${{matrix.features}}
6519625d8cSopenharmony_ci    - name: Test
6619625d8cSopenharmony_ci      run: make test-${{matrix.features}}
6719625d8cSopenharmony_ci    - name: Test (benches)
6819625d8cSopenharmony_ci      run: make test-${{matrix.features}} ARGS='--workspace --benches'
6919625d8cSopenharmony_ci    - name: Test (ultra-minimal)
7019625d8cSopenharmony_ci      if: matrix.build == 'minimal'
7119625d8cSopenharmony_ci      run: make test-minimal ARGS='--manifest-path Cargo.toml'
7219625d8cSopenharmony_ci  check:
7319625d8cSopenharmony_ci    name: Check
7419625d8cSopenharmony_ci    runs-on: ubuntu-latest
7519625d8cSopenharmony_ci    strategy:
7619625d8cSopenharmony_ci      fail-fast: false
7719625d8cSopenharmony_ci      matrix:
7819625d8cSopenharmony_ci        build: [msrv, wasm, wasm-wasi, debug, release]
7919625d8cSopenharmony_ci        include:
8019625d8cSopenharmony_ci          - build: msrv
8119625d8cSopenharmony_ci            rust: 1.64.0  # MSRV
8219625d8cSopenharmony_ci            target: x86_64-unknown-linux-gnu
8319625d8cSopenharmony_ci            features: full
8419625d8cSopenharmony_ci          - build: wasm
8519625d8cSopenharmony_ci            rust: stable
8619625d8cSopenharmony_ci            target: wasm32-unknown-unknown
8719625d8cSopenharmony_ci            features: wasm
8819625d8cSopenharmony_ci          - build: wasm-wasi
8919625d8cSopenharmony_ci            rust: stable
9019625d8cSopenharmony_ci            target: wasm32-wasi
9119625d8cSopenharmony_ci            features: wasm
9219625d8cSopenharmony_ci          - build: debug
9319625d8cSopenharmony_ci            rust: stable
9419625d8cSopenharmony_ci            target: x86_64-unknown-linux-gnu
9519625d8cSopenharmony_ci            features: debug
9619625d8cSopenharmony_ci          - build: release
9719625d8cSopenharmony_ci            rust: stable
9819625d8cSopenharmony_ci            target: x86_64-unknown-linux-gnu
9919625d8cSopenharmony_ci            features: release
10019625d8cSopenharmony_ci    steps:
10119625d8cSopenharmony_ci      - name: Checkout repository
10219625d8cSopenharmony_ci        uses: actions/checkout@v3
10319625d8cSopenharmony_ci      - name: Install rust
10419625d8cSopenharmony_ci        uses: actions-rs/toolchain@v1
10519625d8cSopenharmony_ci        with:
10619625d8cSopenharmony_ci          toolchain: ${{ matrix.rust }}
10719625d8cSopenharmony_ci          target: ${{ matrix.target }}
10819625d8cSopenharmony_ci          override: true
10919625d8cSopenharmony_ci      - uses: Swatinem/rust-cache@v2
11019625d8cSopenharmony_ci      - name: Check
11119625d8cSopenharmony_ci        run: make check-${{ matrix.features }}
11219625d8cSopenharmony_ci        env:
11319625d8cSopenharmony_ci          TOOLCHAIN_TARGET: ${{ matrix.target }}
11419625d8cSopenharmony_ci  ui:
11519625d8cSopenharmony_ci    name: UI Tests
11619625d8cSopenharmony_ci    runs-on: ubuntu-latest
11719625d8cSopenharmony_ci    strategy:
11819625d8cSopenharmony_ci      fail-fast: false
11919625d8cSopenharmony_ci      matrix:
12019625d8cSopenharmony_ci        features: [default, next]
12119625d8cSopenharmony_ci    steps:
12219625d8cSopenharmony_ci    - name: Checkout repository
12319625d8cSopenharmony_ci      uses: actions/checkout@v3
12419625d8cSopenharmony_ci    - name: Install Rust
12519625d8cSopenharmony_ci      uses: actions-rs/toolchain@v1
12619625d8cSopenharmony_ci      with:
12719625d8cSopenharmony_ci        toolchain: 1.64.0  # MSRV
12819625d8cSopenharmony_ci        profile: minimal
12919625d8cSopenharmony_ci        override: true
13019625d8cSopenharmony_ci    - uses: Swatinem/rust-cache@v2
13119625d8cSopenharmony_ci    - name: UI Tests
13219625d8cSopenharmony_ci      run: make test-ui-${{ matrix.features }}
13319625d8cSopenharmony_ci  docs:
13419625d8cSopenharmony_ci    name: Docs
13519625d8cSopenharmony_ci    runs-on: ubuntu-latest
13619625d8cSopenharmony_ci    steps:
13719625d8cSopenharmony_ci    - name: Checkout repository
13819625d8cSopenharmony_ci      uses: actions/checkout@v3
13919625d8cSopenharmony_ci    - name: Install Rust
14019625d8cSopenharmony_ci      uses: actions-rs/toolchain@v1
14119625d8cSopenharmony_ci      with:
14219625d8cSopenharmony_ci        toolchain: 1.64.0  # MSRV
14319625d8cSopenharmony_ci        profile: minimal
14419625d8cSopenharmony_ci        override: true
14519625d8cSopenharmony_ci    - uses: Swatinem/rust-cache@v2
14619625d8cSopenharmony_ci    - name: Check documentation
14719625d8cSopenharmony_ci      env:
14819625d8cSopenharmony_ci        RUSTDOCFLAGS: -D warnings
14919625d8cSopenharmony_ci      run: make doc
15019625d8cSopenharmony_ci  rustfmt:
15119625d8cSopenharmony_ci    name: rustfmt
15219625d8cSopenharmony_ci    runs-on: ubuntu-latest
15319625d8cSopenharmony_ci    steps:
15419625d8cSopenharmony_ci    - name: Checkout repository
15519625d8cSopenharmony_ci      uses: actions/checkout@v3
15619625d8cSopenharmony_ci    - name: Install Rust
15719625d8cSopenharmony_ci      uses: actions-rs/toolchain@v1
15819625d8cSopenharmony_ci      with:
15919625d8cSopenharmony_ci        # Not MSRV because its harder to jump between versions and people are
16019625d8cSopenharmony_ci        # more likely to have stable
16119625d8cSopenharmony_ci        toolchain: stable
16219625d8cSopenharmony_ci        profile: minimal
16319625d8cSopenharmony_ci        override: true
16419625d8cSopenharmony_ci        components: rustfmt
16519625d8cSopenharmony_ci    - uses: Swatinem/rust-cache@v2
16619625d8cSopenharmony_ci    - name: Check formatting
16719625d8cSopenharmony_ci      run: cargo fmt --all -- --check
16819625d8cSopenharmony_ci  clippy:
16919625d8cSopenharmony_ci    name: clippy
17019625d8cSopenharmony_ci    runs-on: ubuntu-latest
17119625d8cSopenharmony_ci    steps:
17219625d8cSopenharmony_ci    - name: Checkout repository
17319625d8cSopenharmony_ci      uses: actions/checkout@v3
17419625d8cSopenharmony_ci    - name: Install Rust
17519625d8cSopenharmony_ci      uses: actions-rs/toolchain@v1
17619625d8cSopenharmony_ci      with:
17719625d8cSopenharmony_ci        toolchain: 1.64.0  # MSRV
17819625d8cSopenharmony_ci        profile: minimal
17919625d8cSopenharmony_ci        override: true
18019625d8cSopenharmony_ci        components: clippy
18119625d8cSopenharmony_ci    - uses: Swatinem/rust-cache@v2
18219625d8cSopenharmony_ci    - name: Lint (ultra-minimal)
18319625d8cSopenharmony_ci      run: make clippy-minimal ARGS='--manifest-path Cargo.toml'
18419625d8cSopenharmony_ci    - name: Lint (minimal)
18519625d8cSopenharmony_ci      run: make clippy-minimal
18619625d8cSopenharmony_ci    - name: Lint (all)
18719625d8cSopenharmony_ci      run: make clippy-full
18819625d8cSopenharmony_ci    - name: Lint (release)
18919625d8cSopenharmony_ci      run: make clippy-release
19019625d8cSopenharmony_ci  cffconvert:
19119625d8cSopenharmony_ci    name: cffconvert
19219625d8cSopenharmony_ci    runs-on: ubuntu-latest
19319625d8cSopenharmony_ci    steps:
19419625d8cSopenharmony_ci      - name: Checkout repository
19519625d8cSopenharmony_ci        uses: actions/checkout@v3
19619625d8cSopenharmony_ci        with:
19719625d8cSopenharmony_ci          persist-credentials: false
19819625d8cSopenharmony_ci      - name: CFF validation
19919625d8cSopenharmony_ci        uses: citation-file-format/cffconvert-github-action@2.0.0
20019625d8cSopenharmony_ci        with:
20119625d8cSopenharmony_ci          args: --validate
202