From ef10b48f96e6730d7ab2545fb32b344173ac3768 Mon Sep 17 00:00:00 2001 From: Nazar Mokrynskyi Date: Mon, 4 Dec 2023 16:35:05 +0200 Subject: [PATCH] CI workflow and `.gitignore` file --- .github/workflows/rust.yml | 207 +++++++++++++++++++++++++++++++++++++ .gitignore | 2 + 2 files changed, 209 insertions(+) create mode 100644 .github/workflows/rust.yml create mode 100644 .gitignore diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml new file mode 100644 index 00000000..4da1bf14 --- /dev/null +++ b/.github/workflows/rust.yml @@ -0,0 +1,207 @@ +name: Rust + +on: + push: + branches: + - main + paths-ignore: + - "**.md" + pull_request: + paths-ignore: + - "**.md" + workflow_dispatch: + merge_group: + +concurrency: + group: rust-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +env: + # Not needed in CI, should make things a bit faster + CARGO_INCREMENTAL: 0 + CARGO_TERM_COLOR: always + # TODO: AES flag is such that we have decent performance on ARMv8, remove once `aes` crate bumps MSRV to at least + # 1.61: https://github.com/RustCrypto/block-ciphers/issues/373 + RUSTFLAGS: --cfg aes_armv8 + # Remove unnecessary WASM build artefacts + WASM_BUILD_CLEAN_TARGET: 1 + +jobs: + cargo-fmt: + runs-on: ubuntu-22.04 + + steps: + - name: Checkout + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # @v3.1.0 + + - name: Install Protoc + uses: arduino/setup-protoc@9b1ee5b22b0a3f1feb8c2ff99b32c89b3c3191e9 # v2.0.0 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + + - name: Configure cache + uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84 # @v3.3.2 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }} + + - name: cargo fmt + uses: actions-rs/cargo@ae10961054e4aa8b4aa7dffede299aaf087aa33b # @v1.0.1 + with: + command: fmt + args: --all -- --check + + cargo-clippy: + strategy: + matrix: + os: + - ubuntu-22.04 + - macos-12 + - windows-2022 + + runs-on: ${{ matrix.os }} + + steps: + - name: Checkout + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # @v3.1.0 + + - name: Install GTK4 (Ubuntu) + run: sudo apt-get install --no-install-recommends -y libgtk-4-dev + if: runner.os == 'Linux' + + - name: Install GTK4 (macOS) + run: brew install gtk4 + if: runner.os == 'macOS' + + - name: Install GTK4 (Windows) + run: | + pipx install gvsbuild + gvsbuild build gtk4 + Add-Content $env:GITHUB_ENV "PKG_CONFIG_PATH=C:\gtk-build\gtk\x64\release\lib\pkgconfig" + Add-Content $env:GITHUB_PATH "C:\gtk-build\gtk\x64\release\bin" + if: runner.os == 'Windows' + + # On macOS, we need a proper Clang version, not Apple's custom version without wasm32 support + # TODO: on macOS, the consensus/domain runtime build is not compatible with LLVM 15.0.7 and + # LLVM 15.0.{3, 4, 5, 6} is not released for macOS thus install LLVM 15.0.2 explicitly as a + # temporary workaround, and remove once incompatible is fixed. + - name: Install LLVM and Clang for macOS + uses: KyleMayes/install-llvm-action@c135b3937686fd69c2651507aabc9925a8f9eee8 # v1.8.3 + with: + version: "15.0.2" + if: runner.os == 'macOS' + + # TODO: on Linux and Windows, the consensus/domain runtime build is not compatible with LLVM 16, + # thus install LLVM 15 explicitly as a temporary workaround, and remove once incompatible is fixed. + - name: Install LLVM and Clang for Linux and Windows + uses: KyleMayes/install-llvm-action@c135b3937686fd69c2651507aabc9925a8f9eee8 # v1.8.3 + with: + version: "15.0" + if: runner.os != 'macOS' + + - name: Install Protoc + uses: arduino/setup-protoc@9b1ee5b22b0a3f1feb8c2ff99b32c89b3c3191e9 # v2.0.0 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + + # Workaround to resolve link error with C:\msys64\mingw64\bin\libclang.dll + - name: Remove msys64 + run: Remove-Item -LiteralPath "C:\msys64\" -Force -Recurse + if: runner.os == 'Windows' + # Doesn't exist on self-hosted runners + continue-on-error: true + + - name: Configure cache + uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # @v3.3.2 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }} + + - name: cargo clippy + uses: actions-rs/clippy-check@b5b5f21f4797c02da247df37026fcd0a5024aa4d # @v1.0.7 + with: + token: ${{ secrets.GITHUB_TOKEN }} + args: --locked --all-targets -- -D warnings + + cargo-test: + strategy: + matrix: + os: + - ubuntu-22.04 + - macos-12 + - windows-2022 + + runs-on: ${{ matrix.os }} + + steps: + - name: Checkout + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # @v3.1.0 + + - name: Install GTK4 (Ubuntu) + run: sudo apt-get install --no-install-recommends -y libgtk-4-dev + if: runner.os == 'Linux' + + - name: Install GTK4 (macOS) + run: brew install gtk4 + if: runner.os == 'macOS' + + - name: Install GTK4 (Windows) + run: | + pipx install gvsbuild + gvsbuild build gtk4 + Add-Content $env:GITHUB_ENV "PKG_CONFIG_PATH=C:\gtk-build\gtk\x64\release\lib\pkgconfig" + Add-Content $env:GITHUB_PATH "C:\gtk-build\gtk\x64\release\bin" + if: runner.os == 'Windows' + + # On macOS, we need a proper Clang version, not Apple's custom version without wasm32 support + # TODO: on macOS, the consensus/domain runtime build is not compatible with LLVM 15.0.7 and + # LLVM 15.0.{3, 4, 5, 6} is not released for macOS thus install LLVM 15.0.2 explicitly as a + # temporary workaround, and remove once incompatible is fixed. + - name: Install LLVM and Clang for macOS + uses: KyleMayes/install-llvm-action@c135b3937686fd69c2651507aabc9925a8f9eee8 # v1.8.3 + with: + version: "15.0.2" + if: runner.os == 'macOS' + + # TODO: on Linux and Windows, the consensus/domain runtime build is not compatible with LLVM 16, + # thus install LLVM 15 explicitly as a temporary workaround, and remove once incompatible is fixed. + - name: Install LLVM and Clang for Linux and Windows + uses: KyleMayes/install-llvm-action@c135b3937686fd69c2651507aabc9925a8f9eee8 # v1.8.3 + with: + version: "15.0" + if: runner.os != 'macOS' + + - name: Install Protoc + uses: arduino/setup-protoc@9b1ee5b22b0a3f1feb8c2ff99b32c89b3c3191e9 # v2.0.0 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + + # Workaround to resolve link error with C:\msys64\mingw64\bin\libclang.dll + - name: Remove msys64 + run: Remove-Item -LiteralPath "C:\msys64\" -Force -Recurse + if: runner.os == 'Windows' + # Doesn't exist on self-hosted runners + continue-on-error: true + + - name: Install cargo-nextest + uses: taiki-e/cache-cargo-install-action@1b76958d032c4d048c599f9fdfa48abe804d6319 # v1.2.2 + with: + tool: cargo-nextest + + - name: Configure cache + uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # @v3.3.2 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }} + + - name: cargo nextest run --locked + uses: actions-rs/cargo@ae10961054e4aa8b4aa7dffede299aaf087aa33b # @v1.0.1 + with: + command: nextest + args: run --locked diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..f419dc7b --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/.idea +/target