aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/ci.yml
blob: 9b496ebff6d59f372da74f4e798a3dc3ae5d1593 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
name: CI

on:
  push:
  pull_request:
  workflow_dispatch:
  schedule: [cron: "40 1 * * *"]

permissions:
  contents: read

jobs:
  pre_ci:
    uses: dtolnay/.github/.github/workflows/pre_ci.yml@master

  test:
    name: ${{matrix.name || format('Rust {0}', matrix.rust)}}
    needs: pre_ci
    if: needs.pre_ci.outputs.continue
    runs-on: ${{matrix.os || 'ubuntu'}}-latest
    strategy:
      fail-fast: false
      matrix:
        include:
          - rust: nightly
          - rust: beta
          - rust: stable
          - rust: 1.60.0
          - rust: 1.64.0
          - name: macOS
            rust: nightly
            os: macos
          - name: Windows (msvc)
            rust: nightly-x86_64-pc-windows-msvc
            os: windows
            flags: /EHsc
    env:
      CXXFLAGS: ${{matrix.flags}}
      RUSTFLAGS: --cfg deny_warnings -Dwarnings
    timeout-minutes: 45
    steps:
      - name: Enable symlinks (windows)
        if: matrix.os == 'windows'
        run: git config --global core.symlinks true
      - uses: actions/checkout@v3
      - uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{matrix.rust}}
      - name: Determine test suite subset
        # Our Windows and macOS jobs are the longest running, so exclude the
        # relatively slow compiletest from them to speed up end-to-end CI time,
        # except during cron builds when no human is presumably waiting on the
        # build. The extra coverage is not particularly valuable and we can
        # still ensure the test is kept passing on the basis of the scheduled
        # builds.
        run: |
          echo RUSTFLAGS=$RUSTFLAGS >> $GITHUB_ENV
          echo exclude=--exclude cxx-test-suite ${{matrix.rust == '1.60.0' && '--exclude cxxbridge-cmd' || ''}} >> $GITHUB_OUTPUT
        env:
          RUSTFLAGS: ${{env.RUSTFLAGS}} ${{matrix.os && github.event_name != 'schedule' && '--cfg skip_ui_tests' || ''}}
        id: testsuite
        shell: bash
      - run: cargo run --manifest-path demo/Cargo.toml
      - run: cargo test --workspace ${{steps.testsuite.outputs.exclude}}
      - run: cargo check --no-default-features --features alloc
        env:
          RUSTFLAGS: --cfg compile_error_if_std ${{env.RUSTFLAGS}}
      - run: cargo check --no-default-features
        env:
          RUSTFLAGS: --cfg compile_error_if_alloc --cfg cxx_experimental_no_alloc ${{env.RUSTFLAGS}}

  buck:
    name: Buck
    runs-on: ubuntu-latest
    if: github.event_name != 'pull_request'
    timeout-minutes: 45
    steps:
      - uses: actions/checkout@v3
        with:
          submodules: true
      - uses: dtolnay/rust-toolchain@stable
      - uses: dtolnay/install@reindeer
      - uses: dtolnay/install@buck2
      - name: Install lld
        run: sudo apt-get install lld
      - run: cargo vendor --versioned-dirs --locked
        working-directory: third-party
      - run: reindeer buckify
        working-directory: third-party
      - name: Check reindeer-generated BUCK file up to date
        run: git diff --exit-code
      - run: buck2 run demo
      - run: buck2 build ...
      - run: buck2 test ...

  bazel:
    name: Bazel
    runs-on: ubuntu-latest
    if: github.event_name != 'pull_request'
    timeout-minutes: 45
    steps:
      - uses: actions/checkout@v3
      - name: Install Bazel
        run: |
          wget -q -O install.sh https://github.com/bazelbuild/bazel/releases/download/6.0.0/bazel-6.0.0-installer-linux-x86_64.sh
          chmod +x install.sh
          ./install.sh --user
          echo $HOME/bin >> $GITHUB_PATH
      - name: Install lld
        run: sudo apt-get install lld
      - run: bazel run demo --verbose_failures --noshow_progress
      - run: bazel test ... --verbose_failures --noshow_progress

  clippy:
    name: Clippy
    runs-on: ubuntu-latest
    if: github.event_name != 'pull_request'
    timeout-minutes: 45
    steps:
      - uses: actions/checkout@v3
      - uses: dtolnay/rust-toolchain@clippy
      - run: cargo clippy --workspace --tests -- -Dclippy::all

  clang-tidy:
    name: Clang Tidy
    runs-on: ubuntu-latest
    if: github.event_name != 'pull_request'
    timeout-minutes: 45
    steps:
      - uses: actions/checkout@v3
      - name: Install clang-tidy
        run: sudo apt-get install clang-tidy-11
      - name: Run clang-tidy
        run: clang-tidy-11 src/cxx.cc --warnings-as-errors=*

  outdated:
    name: Outdated
    runs-on: ubuntu-latest
    if: github.event_name != 'pull_request'
    timeout-minutes: 45
    steps:
      - uses: actions/checkout@v3
      - uses: dtolnay/install@cargo-outdated
      - run: cargo outdated --workspace --exit-code 1