133d722a9Sopenharmony_ciname: CI
233d722a9Sopenharmony_ci
333d722a9Sopenharmony_cion:
433d722a9Sopenharmony_ci  push:
533d722a9Sopenharmony_ci  pull_request:
633d722a9Sopenharmony_ci  workflow_dispatch:
733d722a9Sopenharmony_ci  schedule: [cron: "40 1 * * *"]
833d722a9Sopenharmony_ci
933d722a9Sopenharmony_cipermissions:
1033d722a9Sopenharmony_ci  contents: read
1133d722a9Sopenharmony_ci
1233d722a9Sopenharmony_cijobs:
1333d722a9Sopenharmony_ci  pre_ci:
1433d722a9Sopenharmony_ci    uses: dtolnay/.github/.github/workflows/pre_ci.yml@master
1533d722a9Sopenharmony_ci
1633d722a9Sopenharmony_ci  test:
1733d722a9Sopenharmony_ci    name: ${{matrix.name || format('Rust {0}', matrix.rust)}}
1833d722a9Sopenharmony_ci    needs: pre_ci
1933d722a9Sopenharmony_ci    if: needs.pre_ci.outputs.continue
2033d722a9Sopenharmony_ci    runs-on: ${{matrix.os || 'ubuntu'}}-latest
2133d722a9Sopenharmony_ci    strategy:
2233d722a9Sopenharmony_ci      fail-fast: false
2333d722a9Sopenharmony_ci      matrix:
2433d722a9Sopenharmony_ci        include:
2533d722a9Sopenharmony_ci          - rust: nightly
2633d722a9Sopenharmony_ci          - rust: beta
2733d722a9Sopenharmony_ci          - rust: stable
2833d722a9Sopenharmony_ci          - rust: 1.60.0
2933d722a9Sopenharmony_ci          - rust: 1.64.0
3033d722a9Sopenharmony_ci          - name: Cargo on macOS
3133d722a9Sopenharmony_ci            rust: nightly
3233d722a9Sopenharmony_ci            os: macos
3333d722a9Sopenharmony_ci          - name: Cargo on Windows (msvc)
3433d722a9Sopenharmony_ci            rust: nightly-x86_64-pc-windows-msvc
3533d722a9Sopenharmony_ci            os: windows
3633d722a9Sopenharmony_ci            flags: /EHsc
3733d722a9Sopenharmony_ci    env:
3833d722a9Sopenharmony_ci      CXXFLAGS: ${{matrix.flags}}
3933d722a9Sopenharmony_ci      RUSTFLAGS: --cfg deny_warnings -Dwarnings
4033d722a9Sopenharmony_ci    timeout-minutes: 45
4133d722a9Sopenharmony_ci    steps:
4233d722a9Sopenharmony_ci      - name: Enable symlinks (windows)
4333d722a9Sopenharmony_ci        if: matrix.os == 'windows'
4433d722a9Sopenharmony_ci        run: git config --global core.symlinks true
4533d722a9Sopenharmony_ci      - uses: actions/checkout@v3
4633d722a9Sopenharmony_ci      - uses: dtolnay/rust-toolchain@master
4733d722a9Sopenharmony_ci        with:
4833d722a9Sopenharmony_ci          toolchain: ${{matrix.rust}}
4933d722a9Sopenharmony_ci          components: rust-src
5033d722a9Sopenharmony_ci      - name: Determine test suite subset
5133d722a9Sopenharmony_ci        # Our Windows and macOS jobs are the longest running, so exclude the
5233d722a9Sopenharmony_ci        # relatively slow compiletest from them to speed up end-to-end CI time,
5333d722a9Sopenharmony_ci        # except during cron builds when no human is presumably waiting on the
5433d722a9Sopenharmony_ci        # build. The extra coverage is not particularly valuable and we can
5533d722a9Sopenharmony_ci        # still ensure the test is kept passing on the basis of the scheduled
5633d722a9Sopenharmony_ci        # builds.
5733d722a9Sopenharmony_ci        run: |
5833d722a9Sopenharmony_ci          echo RUSTFLAGS=$RUSTFLAGS >> $GITHUB_ENV
5933d722a9Sopenharmony_ci          echo exclude=--exclude cxx-test-suite ${{matrix.rust == '1.60.0' && '--exclude cxxbridge-cmd' || ''}} >> $GITHUB_OUTPUT
6033d722a9Sopenharmony_ci        env:
6133d722a9Sopenharmony_ci          RUSTFLAGS: ${{env.RUSTFLAGS}} ${{matrix.os && github.event_name != 'schedule' && '--cfg skip_ui_tests' || ''}}
6233d722a9Sopenharmony_ci        id: testsuite
6333d722a9Sopenharmony_ci        shell: bash
6433d722a9Sopenharmony_ci      - run: cargo run --manifest-path demo/Cargo.toml
6533d722a9Sopenharmony_ci      - run: cargo test --workspace ${{steps.testsuite.outputs.exclude}}
6633d722a9Sopenharmony_ci      - run: cargo check --no-default-features --features alloc
6733d722a9Sopenharmony_ci        env:
6833d722a9Sopenharmony_ci          RUSTFLAGS: --cfg compile_error_if_std ${{env.RUSTFLAGS}}
6933d722a9Sopenharmony_ci      - run: cargo check --no-default-features
7033d722a9Sopenharmony_ci        env:
7133d722a9Sopenharmony_ci          RUSTFLAGS: --cfg compile_error_if_alloc --cfg cxx_experimental_no_alloc ${{env.RUSTFLAGS}}
7233d722a9Sopenharmony_ci
7333d722a9Sopenharmony_ci  buck:
7433d722a9Sopenharmony_ci    name: Buck2 on ${{matrix.os == 'ubuntu' && 'Linux' || matrix.os == 'macos' && 'macOS' || matrix.os == 'windows' && 'Windows' || '???'}}
7533d722a9Sopenharmony_ci    runs-on: ${{matrix.os}}-latest
7633d722a9Sopenharmony_ci    if: github.event_name != 'pull_request'
7733d722a9Sopenharmony_ci    strategy:
7833d722a9Sopenharmony_ci      fail-fast: false
7933d722a9Sopenharmony_ci      matrix:
8033d722a9Sopenharmony_ci        os: [ubuntu, macos, windows]
8133d722a9Sopenharmony_ci    timeout-minutes: 45
8233d722a9Sopenharmony_ci    steps:
8333d722a9Sopenharmony_ci      - uses: actions/checkout@v3
8433d722a9Sopenharmony_ci        with:
8533d722a9Sopenharmony_ci          submodules: true
8633d722a9Sopenharmony_ci      - uses: dtolnay/rust-toolchain@stable
8733d722a9Sopenharmony_ci        with:
8833d722a9Sopenharmony_ci          components: rust-src
8933d722a9Sopenharmony_ci      - uses: dtolnay/install-buck2@latest
9033d722a9Sopenharmony_ci      - name: Install lld
9133d722a9Sopenharmony_ci        run: sudo apt-get install lld
9233d722a9Sopenharmony_ci        if: matrix.os == 'ubuntu'
9333d722a9Sopenharmony_ci      - run: buck2 run demo
9433d722a9Sopenharmony_ci      - run: buck2 build ...
9533d722a9Sopenharmony_ci      - run: buck2 test ...
9633d722a9Sopenharmony_ci      - uses: dtolnay/install@reindeer
9733d722a9Sopenharmony_ci        if: matrix.os == 'ubuntu'
9833d722a9Sopenharmony_ci      - run: reindeer buckify
9933d722a9Sopenharmony_ci        if: matrix.os == 'ubuntu'
10033d722a9Sopenharmony_ci        working-directory: third-party
10133d722a9Sopenharmony_ci      - name: Check reindeer-generated BUCK file up to date
10233d722a9Sopenharmony_ci        run: git diff --exit-code
10333d722a9Sopenharmony_ci        if: matrix.os == 'ubuntu'
10433d722a9Sopenharmony_ci
10533d722a9Sopenharmony_ci  bazel:
10633d722a9Sopenharmony_ci    name: Bazel on Linux
10733d722a9Sopenharmony_ci    runs-on: ubuntu-latest
10833d722a9Sopenharmony_ci    if: github.event_name != 'pull_request'
10933d722a9Sopenharmony_ci    timeout-minutes: 45
11033d722a9Sopenharmony_ci    steps:
11133d722a9Sopenharmony_ci      - uses: actions/checkout@v3
11233d722a9Sopenharmony_ci      - name: Install Bazel
11333d722a9Sopenharmony_ci        run: |
11433d722a9Sopenharmony_ci          wget -q -O install.sh https://github.com/bazelbuild/bazel/releases/download/6.0.0/bazel-6.0.0-installer-linux-x86_64.sh
11533d722a9Sopenharmony_ci          chmod +x install.sh
11633d722a9Sopenharmony_ci          ./install.sh --user
11733d722a9Sopenharmony_ci          echo $HOME/bin >> $GITHUB_PATH
11833d722a9Sopenharmony_ci      - name: Install lld
11933d722a9Sopenharmony_ci        run: sudo apt-get install lld
12033d722a9Sopenharmony_ci      - run: bazel run demo --verbose_failures --noshow_progress
12133d722a9Sopenharmony_ci      - run: bazel test ... --verbose_failures --noshow_progress
12233d722a9Sopenharmony_ci
12333d722a9Sopenharmony_ci  clippy:
12433d722a9Sopenharmony_ci    name: Clippy
12533d722a9Sopenharmony_ci    runs-on: ubuntu-latest
12633d722a9Sopenharmony_ci    if: github.event_name != 'pull_request'
12733d722a9Sopenharmony_ci    timeout-minutes: 45
12833d722a9Sopenharmony_ci    steps:
12933d722a9Sopenharmony_ci      - uses: actions/checkout@v3
13033d722a9Sopenharmony_ci      - uses: dtolnay/rust-toolchain@nightly
13133d722a9Sopenharmony_ci        with:
13233d722a9Sopenharmony_ci          components: clippy, rust-src
13333d722a9Sopenharmony_ci      - run: cargo clippy --workspace --tests -- -Dclippy::all
13433d722a9Sopenharmony_ci
13533d722a9Sopenharmony_ci  clang-tidy:
13633d722a9Sopenharmony_ci    name: Clang Tidy
13733d722a9Sopenharmony_ci    runs-on: ubuntu-latest
13833d722a9Sopenharmony_ci    if: github.event_name != 'pull_request'
13933d722a9Sopenharmony_ci    timeout-minutes: 45
14033d722a9Sopenharmony_ci    steps:
14133d722a9Sopenharmony_ci      - uses: actions/checkout@v3
14233d722a9Sopenharmony_ci      - name: Install clang-tidy
14333d722a9Sopenharmony_ci        run: sudo apt-get install clang-tidy-11
14433d722a9Sopenharmony_ci      - name: Run clang-tidy
14533d722a9Sopenharmony_ci        run: clang-tidy-11 src/cxx.cc --warnings-as-errors=*
14633d722a9Sopenharmony_ci
14733d722a9Sopenharmony_ci  outdated:
14833d722a9Sopenharmony_ci    name: Outdated
14933d722a9Sopenharmony_ci    runs-on: ubuntu-latest
15033d722a9Sopenharmony_ci    if: github.event_name != 'pull_request'
15133d722a9Sopenharmony_ci    timeout-minutes: 45
15233d722a9Sopenharmony_ci    steps:
15333d722a9Sopenharmony_ci      - uses: actions/checkout@v3
15433d722a9Sopenharmony_ci      - uses: dtolnay/install@cargo-outdated
15533d722a9Sopenharmony_ci      - run: cargo outdated --workspace --exit-code 1
156