diff --git a/.github/workflows/backwards_compatibility.yml b/.github/workflows/backwards_compatibility.yml new file mode 100644 index 000000000..220a54e83 --- /dev/null +++ b/.github/workflows/backwards_compatibility.yml @@ -0,0 +1,102 @@ +name: backwards_compatibility +on: + pull_request: + branches: + - master + types: [opened, synchronize, reopened] + +jobs: + check_commit_message: + runs-on: ubuntu-latest + outputs: + should_skip: ${{ steps.check_commit.outputs.skip || steps.check_pr_body.outputs.skip }} + steps: + - uses: actions/checkout@v4 + + - name: Check for BREAKING_CHANGE in commit message + id: check_commit + run: | + COMMIT_MSG=$(git log --format=%B -n 1 HEAD) + echo "Commit message: $COMMIT_MSG" + if echo "$COMMIT_MSG" | grep -q "BREAKING_CHANGE"; then + echo "skip=true" >> $GITHUB_OUTPUT + else + echo "skip=false" >> $GITHUB_OUTPUT + fi + + - name: Check for BREAKING_CHANGE in pull request body + id: check_pr_body + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + PR_MSG_TITLE=$(jq -r .pull_request.title "$GITHUB_EVENT_PATH") + PR_MSG_BODY=$(jq -r .pull_request.body "$GITHUB_EVENT_PATH") + echo "Pull Request body: $PR_MSG_BODY" + if [[ "$PR_MSG_BODY" == *"BREAKING_CHANGE"* ]]; then + echo "skip=true" >> $GITHUB_OUTPUT + else + echo "skip=false" >> $GITHUB_OUTPUT + fi + + build_and_test: + runs-on: ubuntu-latest + needs: check_commit_message + if: ${{ needs.check_commit_message.outputs.should_skip != 'true' }} + steps: + - uses: actions/checkout + with: + ref: ${{ github.ref }} + fetch-depth: 0 + + - name: Cache cargo & target directories + uses: Swatinem/rust-cache@v2 + with: + key: "v2" + + - name: Build (PR) + run: cargo build + + - uses: JarvusInnovations/background-action@v1 + name: Run iggy-server in background (PR) + with: + run: | + target/debug/iggy-server & + wait-on: tcp:localhost:8090 + wait-for: 1m + tail: true + + - name: Run send bench (PR) + timeout-minutes: 1 + run: target/debug/iggy-bench --verbose send --message-batches 50 --messages-per-batch 50 tcp + + - name: Stop iggy-server + timeout-minutes: 1 + run: pkill iggy-server && while pgrep -l iggy-server; do sleep 1; done; + + - name: Reset to origin/master + run: git reset --hard origin/master + + - name: Build (origin/master) + run: cargo build + + - uses: JarvusInnovations/background-action@v1 + name: Run iggy-server in background (origin/master) + with: + run: | + target/debug/iggy-server & + wait-on: tcp:localhost:8090 + wait-for: 1m + tail: true + + - name: Run poll bench (origin/master) + timeout-minutes: 1 + run: target/debug/iggy-bench --verbose poll --message-batches 50 --messages-per-batch 50 tcp + + - name: Run send bench (origin/master) + timeout-minutes: 1 + run: target/debug/iggy-bench --verbose send --message-batches 50 --messages-per-batch 50 tcp + + - name: Stop iggy-server + timeout-minutes: 1 + run: pkill iggy-server && while pgrep -l iggy-server; do sleep 1; done; + diff --git a/.github/workflows/sanity.yml b/.github/workflows/sanity.yml index b1cfffb20..1bb87b0ac 100644 --- a/.github/workflows/sanity.yml +++ b/.github/workflows/sanity.yml @@ -64,18 +64,18 @@ jobs: check-commit-message: name: Validate commit messages runs-on: ubuntu-latest - # This action isn't working with workflow_dispatch, so we need to skip it + # This action isn't working with workflow_dispatch, skip it if: github.event_name != 'workflow_dispatch' steps: - name: Check subject line length uses: gsactions/commit-message-checker@v2 with: - excludeDescription: 'true' # exclude description body of a pull request - excludeTitle: 'true' # exclude the title of a pull request - checkAllCommitMessages: 'true' # checks all commits associated with the pull request + 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,90}(\n.*)*$' - error: 'Subject of all commits in the PR has to be shorter than 90 characters.' + pattern: '^.{0,80}(\n.*)*$' + error: 'Subject of all commits in the PR and PR body/title has to be shorter than 80 characters.' - name: Disallow specific prefixes in title uses: gsactions/commit-message-checker@v2