From 0c7cb490c895e32a9115e4f2bf42af64a557e6b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartosz=20Cie=C5=9Bla?= Date: Tue, 4 Mar 2025 21:12:05 +0100 Subject: [PATCH] chore(ci): add new CI workflows for PR validation and testing Add new set of GitHub workflow files for pull request validation with re-designed flow and added checks. For now it will run in parallel with existing flow for testing purposes. Change introduce .convco for scope regex for conventional commits validation. It adds ci-check-common.yml for commit message validation. Add ci-check-pr.yml as a main workflow to validate PRs with conditional jobs for Rust and shell changes. Include ci-check-rust.yml for Rust checks and ci-check-shell.yml for shell script validation. Rename and update compatibility and coverage workflows. Add optional Rust test workflow for aarch64-apple-darwin. Update performance script with shellcheck directives. Ensure all workflows are documented and are licensed under Apache License 2.0. --- .convco | 1 + .github/workflows/ci-check-common.yml | 82 ++++++++ .github/workflows/ci-check-pr.yml | 139 +++++++++++++ .github/workflows/ci-check-rust.yml | 189 ++++++++++++++++++ .github/workflows/ci-check-shell.yml | 41 ++++ ...tibility.yml => ci-compatibility-rust.yml} | 27 ++- .../{coverage.yml => ci-coverage-rust.yml} | 39 +++- .github/workflows/ci-test-rust-optional.yml | 66 ++++++ .github/workflows/ci-test-rust.yml | 109 ++++++++++ .github/workflows/test_pr.yml | 4 +- .../run-standard-performance-suite.sh | 2 + 11 files changed, 689 insertions(+), 10 deletions(-) create mode 100644 .convco create mode 100644 .github/workflows/ci-check-common.yml create mode 100644 .github/workflows/ci-check-pr.yml create mode 100644 .github/workflows/ci-check-rust.yml create mode 100644 .github/workflows/ci-check-shell.yml rename .github/workflows/{backwards_compatibility.yml => ci-compatibility-rust.yml} (82%) rename .github/workflows/{coverage.yml => ci-coverage-rust.yml} (53%) create mode 100644 .github/workflows/ci-test-rust-optional.yml create mode 100644 .github/workflows/ci-test-rust.yml diff --git a/.convco b/.convco new file mode 100644 index 000000000..994dec65c --- /dev/null +++ b/.convco @@ -0,0 +1 @@ +scopeRegex: "(ci|sdk|server|cli|bench|misc)(,(ci|sdk|server|cli|bench|misc))*" \ No newline at end of file diff --git a/.github/workflows/ci-check-common.yml b/.github/workflows/ci-check-common.yml new file mode 100644 index 000000000..efd232f8b --- /dev/null +++ b/.github/workflows/ci-check-common.yml @@ -0,0 +1,82 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# +# ------------------------------------------------------------- +# +# CI Check Common Workflow +# +# This workflow validates commit messages and checks for conventional commits. +# This workflow is mandatory and runs on pull request events. +# +name: ci-check-common + +on: + workflow_call: + inputs: + commits-from: + description: 'Lower end of the commit range to check' + required: true + default: HEAD~1 + type: string + commits-to: + description: 'Upper end of the commit range to check' + required: true + default: HEAD + type: string + +jobs: + check-commit-message: + name: commit messages + runs-on: ubuntu-latest + if: ${{ github.event_name == 'pull_request' }} + steps: + - name: Check subject line length + uses: gsactions/commit-message-checker@v2 + with: + excludeDescription: "false" # exclude description body of a pull request + excludeTitle: "false" # exclude the title of a pull request + checkAllCommitMessages: "false" # checks all commits associated with the pull request + accessToken: ${{ secrets.GITHUB_TOKEN }} # needed only when checkAllCommitMessages is true + pattern: '^.{0,80}(\n.*)*$' + error: "Subject of all commits in the PR and PR body/title has to be shorter than 80 characters." + + check-conventional-commits: + name: conventional commits + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Install rust toolchain + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + override: true + - name: Install convco + uses: taiki-e/install-action@v2 + with: + tool: convco + - name: Print commit range to check + run: | + echo "Checking commit range from ${{ inputs.commits-from }} to ${{ inputs.commits-to }}" + - name: Check commit messages + run: | + command -v convco + convco --version + git log ${{ inputs.commits-from }}..${{ inputs.commits-to }} + convco check ${{ inputs.commits-from }}..${{ inputs.commits-to }} diff --git a/.github/workflows/ci-check-pr.yml b/.github/workflows/ci-check-pr.yml new file mode 100644 index 000000000..63124d3b6 --- /dev/null +++ b/.github/workflows/ci-check-pr.yml @@ -0,0 +1,139 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# +# ------------------------------------------------------------- +# +# CI Check PR Workflow +# +# This workflow validates pull requests to the master branch by detecting changed files +# and running appropriate checks and tests. +# +# Flow: +# 1. pr-file-changes: Detects which file types were modified (mandatory) +# 2. ci-check-common: Validates commit message (mandatory) +# 3. Conditional jobs based on file changes: +# - For Rust changes: ci-check-rust → ci-test-rust → ci-test-rust-optional & ci-compatibility-rust +# - For shell changes: ci-check-shell +# 4. finalize-pr: Determines final PR status based on all job results (mandatory) +# +# Dependencies: +# - ci-check-rust depends on pr-file-changes (outputs.trigger-rust) +# - ci-test-rust and ci-compatibility-rust depend on ci-check-rust success +# - ci-check-shell depends on pr-file-changes (outputs.trigger-shell) +# - finalize-pr depends on all other jobs +# +# The workflow fails if any mandatory job fails. +# Workflow can be triggered manually or on pull request events. +# +name: ci-check-pr + +on: + workflow_dispatch: + pull_request: + branches: + - master + types: [ opened, synchronize, reopened ] + +jobs: + pr-file-changes: + name: pr-file-changes + runs-on: ubuntu-latest + outputs: + trigger-rust: ${{ steps.changed-files-yaml.outputs.rust_any_changed }} + trigger-shell: ${{ steps.changed-files-yaml.outputs.shell_any_changed }} + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Check changed files + id: changed-files-yaml + uses: tj-actions/changed-files@v45 + with: + files_yaml: | + rust: + - '**/*.rs' + - '**/Cargo.toml' + - Cargo.toml + - Cargo.lock + shell: + - 'scripts/**/*.sh' + - name: List all changed files + run: | + if [ "${{ steps.changed-files-yaml.outputs.rust_any_changed }}" == "true" ]; then + echo "One or more rust file(s) has changed." + echo "List all the files that have changed: ${{ steps.changed-files-yaml.outputs.rust_all_changed_files }}" + fi + if [ "${{ steps.changed-files-yaml.outputs.shell_any_changed }}" == "true" ]; then + echo "One or more shell file(s) has changed." + echo "List all the files that have changed: ${{ steps.changed-files-yaml.outputs.shell_all_changed_files }}" + fi + + ci-check-common: + name: ci-check-common + uses: ./.github/workflows/ci-check-common.yml + with: + commits-from: ${{ github.event_name == 'pull_request' && github.event.pull_request.base.sha || 'HEAD~1' }} + commits-to: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || 'HEAD' }} + + ci-check-rust: + name: ci-check-rust + needs: pr-file-changes + if: ${{ needs.pr-file-changes.outputs.trigger-rust == 'true' }} + uses: ./.github/workflows/ci-check-rust.yml + + ci-test-rust: + name: ci-test-rust + needs: ci-check-rust + if: ${{ needs.ci-check-rust.result == 'success' }} + uses: ./.github/workflows/ci-test-rust.yml + + ci-test-rust-optional: + name: ci-test-rust-optional + needs: ci-check-rust + if: ${{ needs.ci-check-rust.result == 'success' }} + uses: ./.github/workflows/ci-test-rust-optional.yml + + ci-compatibility-rust: + name: ci-compatibility-rust + needs: ci-check-rust + if: ${{ needs.ci-check-rust.result == 'success' }} + uses: ./.github/workflows/ci-compatibility-rust.yml + with: + pr_body: ${{ github.event.pull_request.body }} + + ci-check-shell: + name: ci-check-shell + needs: pr-file-changes + if: ${{ needs.pr-file-changes.outputs.trigger-shell == 'true' }} + uses: ./.github/workflows/ci-check-shell.yml + + finalize-pr: + runs-on: ubuntu-latest + needs: + - ci-check-common + - ci-check-rust + - ci-test-rust + - ci-compatibility-rust + - ci-check-shell + if: always() + steps: + - name: Everything is fine + if: ${{ !(contains(needs.*.result, 'failure')) }} + run: exit 0 + + - name: Some tests failed + if: ${{ contains(needs.*.result, 'failure') }} + run: exit 1 diff --git a/.github/workflows/ci-check-rust.yml b/.github/workflows/ci-check-rust.yml new file mode 100644 index 000000000..44e82b8ed --- /dev/null +++ b/.github/workflows/ci-check-rust.yml @@ -0,0 +1,189 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# +# ------------------------------------------------------------- +# +# CI Check Rust Workflow +# +# This workflow runs checks for Rust code using cargo commands. +# Checks include: +# - static analysis using `cargo check` +# - code formatting using `cargo fmt` +# - linting using `cargo clippy` +# - sorted dependencies check using `cargo sort` +# - documentation tests using `cargo test --doc` +# - unused dependencies check using `cargo machete` +# +# This workflow can be triggered manually or by other workflows. +# +name: ci-check-rust + +on: + workflow_dispatch: + workflow_call: + +env: + RUST_BACKTRACE: 1 + CARGO_TERM_COLOR: always + +jobs: + check: + name: cargo check + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Install toolchain + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + override: true + - name: Run cargo check + uses: actions-rs/cargo@v1 + with: + command: check + + fmt: + name: cargo fmt + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Install toolchain + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + override: true + - name: Run cargo fmt + uses: actions-rs/cargo@v1 + with: + command: fmt + args: --all -- --check + + clippy: + name: cargo clippy + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Install toolchain + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + override: true + - name: Run cargo clippy + uses: actions-rs/cargo@v1 + with: + command: clippy + args: --all-targets --all-features -- -D warnings + + clippy-macos: + name: cargo clippy macos + runs-on: macos-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Install toolchain + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + override: true + - name: Run cargo clippy (macos) + uses: actions-rs/cargo@v1 + with: + command: clippy + args: --all-targets --all-features -- -D warnings + + clippy-windows: + name: cargo clippy windows + runs-on: windows-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Install toolchain + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + override: true + - name: Run cargo clippy (windows/sdk) + uses: actions-rs/cargo@v1 + with: + command: clippy + args: --package iggy --all-features -- -D warnings + - name: Run cargo clippy (windows/cli) + uses: actions-rs/cargo@v1 + with: + command: clippy + args: --bin iggy --all-features -- -D warnings + + sort: + name: cargo sort + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Install toolchain + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + override: true + - name: Install cargo-sort + uses: taiki-e/install-action@v2 + with: + tool: cargo-sort + - name: Run cargo sort + uses: actions-rs/cargo@v1 + with: + command: sort + args: --check --workspace + + doctest: + name: cargo test docs + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Install toolchain + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + override: true + - name: Run cargo test (doc) + uses: actions-rs/cargo@v1 + with: + command: test + args: --doc + + unused_dependencies: + name: cargo machete + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Install toolchain + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + override: true + - name: Install cargo-machete + uses: taiki-e/install-action@v2 + with: + tool: cargo-machete + - name: Run cargo machete + uses: actions-rs/cargo@v1 + with: + command: machete diff --git a/.github/workflows/ci-check-shell.yml b/.github/workflows/ci-check-shell.yml new file mode 100644 index 000000000..baaf8df3a --- /dev/null +++ b/.github/workflows/ci-check-shell.yml @@ -0,0 +1,41 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# +# ------------------------------------------------------------- +# +# CI Check Shell Workflow +# +# This workflow runs shellcheck on shell scripts in the repository. +# This workflow can be triggered manually or by other workflows. +# +name: ci-check-shell +on: + workflow_dispatch: + workflow_call: + +jobs: + shellcheck: + name: shellcheck + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Install shellcheck on Linux + run: | + sudo apt-get update --yes && sudo apt-get install --yes shellcheck + - name: Check shell scripts + run: find scripts -type f -name "*.sh" -exec shellcheck {} + diff --git a/.github/workflows/backwards_compatibility.yml b/.github/workflows/ci-compatibility-rust.yml similarity index 82% rename from .github/workflows/backwards_compatibility.yml rename to .github/workflows/ci-compatibility-rust.yml index b3c5e32e4..5ed984073 100644 --- a/.github/workflows/backwards_compatibility.yml +++ b/.github/workflows/ci-compatibility-rust.yml @@ -1,4 +1,30 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# +# ------------------------------------------------------------- +# +# CI Compatibility Rust Workflow +# +# This workflow runs compatibility tests for Rust code on the master branch for pull requests. +# This workflow is triggered by the ci-check-pr workflow. It checks if BREAKING_CHANGE in the PR body +# and commit messages and skips the compatibility tests if found. +# name: backwards_compatibility + on: workflow_call: inputs: @@ -160,4 +186,3 @@ jobs: - name: Print server logs (PR) run: cat local_data/logs/iggy* - diff --git a/.github/workflows/coverage.yml b/.github/workflows/ci-coverage-rust.yml similarity index 53% rename from .github/workflows/coverage.yml rename to .github/workflows/ci-coverage-rust.yml index 0002b3f99..c5166a077 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/ci-coverage-rust.yml @@ -1,21 +1,46 @@ -name: coverage +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# +# ------------------------------------------------------------- +# +# CI Coverage Rust Workflow +# +# This workflow runs tests for Rust code and generates coverage report. +# This workflow can be triggered manually or by other workflows. +# +name: ci-coverage-rust on: workflow_dispatch: workflow_call: env: + RUST_BACKTRACE: 1 CARGO_TERM_COLOR: always + IGGY_CI_BUILD: true GITHUB_BOT_CONTEXT_STRING: "coveralls coverage reporting job" jobs: coverage: - name: Code coverage + name: coverage runs-on: ubuntu-latest - env: - CARGO_TERM_COLOR: always + timeout-minutes: 30 steps: - - name: Checkout + - name: Checkout code uses: actions/checkout@v4 - name: Cache cargo & target directories @@ -23,7 +48,7 @@ jobs: with: key: "coverage" - - name: Install gnome-keyring and keyutils on Linux + - name: Install gnome-keyring, keyutils and lcov run: | sudo apt-get update --yes && sudo apt-get install --yes gnome-keyring keyutils lcov rm -f $HOME/.local/share/keyrings/* @@ -48,7 +73,7 @@ jobs: - name: Upload code to Coveralls # Do not upload coverage for user triggered workflows - if: github.event_name == 'workflow_call' + if: ${{ github.event_name == 'workflow_call' }} uses: coverallsapp/github-action@v2 with: fail-on-error: false diff --git a/.github/workflows/ci-test-rust-optional.yml b/.github/workflows/ci-test-rust-optional.yml new file mode 100644 index 000000000..2b0443c89 --- /dev/null +++ b/.github/workflows/ci-test-rust-optional.yml @@ -0,0 +1,66 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# +# ------------------------------------------------------------- +# +# CI Test Rust Optional Workflow +# +# This workflow runs tests for Rust code on aarch64-apple-darwin target and generates coverage report. +# This workflow is optional and can be triggered manually or by other workflows. +# +name: ci-test-rust-optional + +on: + workflow_dispatch: + workflow_call: + +env: + RUST_BACKTRACE: 1 + CARGO_TERM_COLOR: always + IGGY_CI_BUILD: true + +jobs: + ci-coverage-rust: + name: ci-coverage-rust + uses: ./.github/workflows/ci-coverage-rust.yml + + aarch64-apple-darwin: + name: aarch64-apple-darwin + runs-on: macos-latest + timeout-minutes: 30 + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Cache cargo & target directories + uses: Swatinem/rust-cache@v2 + with: + key: "aarch64-apple-darwin" + - name: Prepare aarch64-apple-darwin toolchain + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + override: true + target: aarch64-apple-darwin + - name: Set verbose flag + shell: bash + run: echo "VERBOSE_FLAG=$([[ "${RUNNER_DEBUG}" = "1" ]] && echo "--verbose" || echo "")" >> $GITHUB_ENV + - name: Build binary + run: cargo build ${{ env.VERBOSE_FLAG }} --target aarch64-apple-darwin + - name: Run tests + run: cargo test ${{ env.VERBOSE_FLAG }} --target aarch64-apple-darwin + - name: Check if workspace is clean + run: git status | grep "working tree clean" || { git status ; exit 1; } diff --git a/.github/workflows/ci-test-rust.yml b/.github/workflows/ci-test-rust.yml new file mode 100644 index 000000000..b4d6956dd --- /dev/null +++ b/.github/workflows/ci-test-rust.yml @@ -0,0 +1,109 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# +# ------------------------------------------------------------- +# +# CI Test Rust Workflow +# +# This workflow runs tests for Rust code. +# All tests are run on multiple targets: +# - x86_64-unknown-linux-musl +# - x86_64-unknown-linux-gnu +# - x86_64-pc-windows-msvc +# +# This workflow can be triggered manually or by other workflows. +# +name: ci-test-rust + +on: + workflow_dispatch: + workflow_call: + +env: + RUST_BACKTRACE: 1 + CARGO_TERM_COLOR: always + IGGY_CI_BUILD: true + +jobs: + x86_64-unknown-linux: + name: ${{ matrix.target }} + runs-on: ubuntu-latest + timeout-minutes: 30 + strategy: + matrix: + target: [x86_64-unknown-linux-musl, x86_64-unknown-linux-gnu] + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Cache cargo & target directories + uses: Swatinem/rust-cache@v2 + with: + key: "${{ matrix.target }}" + - name: Install musl-tools, gnome-keyring and keyutils + run: | + sudo apt-get update --yes && sudo apt-get install --yes musl-tools gnome-keyring keyutils + rm -f $HOME/.local/share/keyrings/* + echo -n "test" | gnome-keyring-daemon --unlock + - name: Prepare ${{ matrix.target }} toolchain + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + override: true + target: ${{ matrix.target }} + - name: Set verbose flag + shell: bash + run: echo "VERBOSE_FLAG=$([[ "${RUNNER_DEBUG}" = "1" ]] && echo "--verbose" || echo "")" >> $GITHUB_ENV + - name: Build binary ${{ matrix.target }} + run: cargo build ${{ env.VERBOSE_FLAG }} --target ${{ matrix.target }} + - name: Run tests ${{ matrix.target }} + run: cargo test ${{ env.VERBOSE_FLAG }} --target ${{ matrix.target }} + - name: Check CLI examples from README + run: ./scripts/run-examples-from-readme.sh + - name: Check if workspace is clean + run: git status | grep "working tree clean" || { git status ; exit 1; } + + x86_64-pc-windows-msvc: + name: x86_64-pc-windows-msvc + runs-on: windows-latest + timeout-minutes: 30 + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Cache cargo & target directories + uses: Swatinem/rust-cache@v2 + with: + key: "x86_64-pc-windows-msvc" + - name: Prepare x86_64-pc-windows-msvc toolchain + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + override: true + target: x86_64-pc-windows-msvc + - name: Set verbose flag + shell: pwsh + run: | + if ($env:RUNNER_DEBUG -eq "1") { + echo "VERBOSE_FLAG=--verbose" >> $env:GITHUB_ENV + } else { + echo "VERBOSE_FLAG=" >> $env:GITHUB_ENV + } + - name: Build iggy package + run: cargo build ${{ env.VERBOSE_FLAG }} --target x86_64-pc-windows-msvc -p iggy + - name: Build iggy-cli binary + run: cargo build ${{ env.VERBOSE_FLAG }} --target x86_64-pc-windows-msvc --bin iggy + - name: Check if workspace is clean + run: git status | grep "working tree clean" || { git status ; exit 1; } diff --git a/.github/workflows/test_pr.yml b/.github/workflows/test_pr.yml index 01367fa50..bcd198248 100644 --- a/.github/workflows/test_pr.yml +++ b/.github/workflows/test_pr.yml @@ -42,12 +42,12 @@ jobs: (contains(github.event.head_commit.modified, '.rs') || contains(github.event.head_commit.modified, 'Cargo.toml') || contains(github.event.head_commit.modified, 'Cargo.lock'))) - uses: ./.github/workflows/coverage.yml + uses: ./.github/workflows/ci-coverage-rust.yml needs: sanity backwards_compatibility: name: Backwards compatibility - uses: ./.github/workflows/backwards_compatibility.yml + uses: ./.github/workflows/ci-compatibility-rust.yml needs: sanity with: pr_body: ${{ github.event.pull_request.body }} diff --git a/scripts/performance/run-standard-performance-suite.sh b/scripts/performance/run-standard-performance-suite.sh index 362953190..ff1088cbf 100755 --- a/scripts/performance/run-standard-performance-suite.sh +++ b/scripts/performance/run-standard-performance-suite.sh @@ -96,7 +96,9 @@ NORMAL_BATCH_NO_WAIT_ONLY_CACHE_PINNED_PRODUCER=$(construct_bench_command "$IGGY NORMAL_BATCH_NO_WAIT_ONLY_CACHE_PINNED_CONSUMER=$(construct_bench_command "$IGGY_BENCH_CMD" "pinned-consumer" 8 8 1000 1000 1000 tcp "send_no_wait_only_cache" "$IDENTIFIER") # 8GB data, 1KB messages, 1000 msgs/batch with no_wait config # Single actor tests with cache disabled +# shellcheck disable=SC2034 NO_CACHE_SINGLE_PINNED_PRODUCER=$(construct_bench_command "$IGGY_BENCH_CMD" "pinned-producer" 1 1 1000 1000 5000 tcp "1_producer_no_cache" "$IDENTIFIER") # 5GB data, 1KB messages, 100 msgs/batch with forced cache +# shellcheck disable=SC2034 NO_CACHE_SINGLE_PINNED_CONSUMER=$(construct_bench_command "$IGGY_BENCH_CMD" "pinned-consumer" 1 1 1000 1000 5000 tcp "1_consumer_no_cache" "$IDENTIFIER") # 5GB data, 1KB messages, 100 msgs/batch with forced cache # Consumer group tests with cache enabled