This is an automated email from the ASF dual-hosted git repository.

adoroszlai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ratis.git


The following commit(s) were added to refs/heads/master by this push:
     new 6fd8ae129 RATIS-2210. Reduce duplication in CI workflow (#1195)
6fd8ae129 is described below

commit 6fd8ae1293044973c2cd22ba4800cea35ebf9f34
Author: Doroszlai, Attila <[email protected]>
AuthorDate: Tue Dec 24 19:22:44 2024 +0100

    RATIS-2210. Reduce duplication in CI workflow (#1195)
---
 .github/workflows/check.yml       | 203 +++++++++++++++++++++++++++++
 .github/workflows/ci.yml          | 141 ++++++++++++++++++++
 .github/workflows/post-commit.yml | 261 ++------------------------------------
 dev-support/checks/compile.sh     |  31 +++++
 4 files changed, 385 insertions(+), 251 deletions(-)

diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml
new file mode 100644
index 000000000..b4498927a
--- /dev/null
+++ b/.github/workflows/check.yml
@@ -0,0 +1,203 @@
+# 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.
+
+# This reusable workflow executes a single check from `dev-support/checks/`.
+# Before and after the check, it performs various steps based on workflow 
inputs.
+
+name: ci-check
+
+on:
+  workflow_call:
+    inputs:
+      # REQUIRED
+      script:
+        type: string
+        description: "Test script to run from dev-support/checks, without .sh 
extension"
+        required: true
+
+      # OPTIONAL (ordered alphabetically)
+      java-version:
+        type: string
+        description: "Java version to set up (default: 8)"
+        default: '8'
+        required: false
+
+      needs-binary-tarball:
+        type: boolean
+        description: "Whether to download Ratis binary tarball created by 
build (default: no)"
+        default: false
+        required: false
+
+      needs-maven-repo:
+        type: boolean
+        description: "Whether to download Ratis jars created by build 
(default: no)"
+        default: false
+        required: false
+
+      needs-source-tarball:
+        type: boolean
+        description: "Whether to download Ratis source tarball created by 
build (default: no)"
+        default: false
+        required: false
+
+      runner:
+        type: string
+        description: "GitHub Actions runner to use"
+        default: 'ubuntu-20.04'
+        required: false
+
+      script-args:
+        type: string
+        description: "Arguments for the test script"
+        default: ''
+        required: false
+
+      split:
+        type: string
+        description: "Name of split for matrix jobs, only used in display name"
+        default: ''
+        required: false
+
+      timeout-minutes:
+        type: number
+        description: "Job timeout in minutes (default: 30)"
+        default: 30
+        required: false
+
+env:
+  MAVEN_ARGS: --batch-mode --show-version
+  MAVEN_OPTS: -Dhttp.keepAlive=false -Dmaven.wagon.http.pool=false 
-Dmaven.wagon.http.retryHandler.class=standard 
-Dmaven.wagon.http.retryHandler.count=3
+  WITH_COVERAGE: true
+
+jobs:
+  check:
+    name: ${{ (inputs.split && format('{0} ({1})', inputs.script, 
inputs.split)) || inputs.script }}
+    runs-on: ${{ inputs.runner }}
+    timeout-minutes: ${{ inputs.timeout-minutes }}
+    steps:
+      - name: Checkout project
+        if: ${{ !inputs.needs-source-tarball }}
+        uses: actions/checkout@v4
+
+      - name: Download source tarball
+        if: ${{ inputs.needs-source-tarball }}
+        uses: actions/download-artifact@v4
+        with:
+          name: ratis-src
+
+      - name: Extract source tarball
+        if: ${{ inputs.needs-source-tarball }}
+        run: |
+          tar --strip-components 1 -xzvf ratis*-src.tar.gz
+
+      - name: Create cache for Maven dependencies
+        if: ${{ inputs.script == 'build' }}
+        uses: actions/cache@v4
+        with:
+          path: |
+            ~/.m2/repository/*/*/*
+            !~/.m2/repository/org/apache/ratis
+          key: maven-repo-${{ hashFiles('**/pom.xml') }}
+          restore-keys: |
+            maven-repo-
+
+      - name: Restore cache for Maven dependencies
+        if: ${{ inputs.script != 'build' }}
+        uses: actions/cache/restore@v4
+        with:
+          path: |
+            ~/.m2/repository/*/*/*
+            !~/.m2/repository/org/apache/ratis
+          key: maven-repo-${{ hashFiles('**/pom.xml') }}
+          restore-keys: |
+            maven-repo-
+
+      - name: Download Maven repo
+        id: download-maven-repo
+        if: ${{ inputs.needs-maven-repo }}
+        uses: actions/download-artifact@v4
+        with:
+          name: maven-repo
+          path: |
+            ~/.m2/repository/org/apache/ratis
+
+      - name: Download binary tarball
+        if: ${{ inputs.needs-binary-tarball }}
+        uses: actions/download-artifact@v4
+        with:
+          name: ratis-bin
+
+      - name: Extract binary tarball
+        if: ${{ inputs.needs-binary-tarball }}
+        run: |
+          mkdir -p ratis-assembly/target
+          tar xzvf ratis-*-bin.tar.gz -C ratis-assembly/target
+
+      - name: Setup java ${{ inputs.java-version }}
+        if: ${{ inputs.java-version }}
+        uses: actions/setup-java@v4
+        with:
+          distribution: 'temurin'
+          java-version: ${{ inputs.java-version }}
+
+      - name: Execute tests
+        run: |
+          dev-support/checks/${{ inputs.script }}.sh ${{ inputs.script-args }}
+        env:
+          WITH_COVERAGE: ${{ inputs.with-coverage }}
+
+      - name: Summary of failures
+        if: ${{ failure() }}
+        run: |
+          if [[ -s "target/${{ inputs.script }}/summary.txt" ]]; then
+            cat target/${{ inputs.script }}/summary.txt
+          fi
+
+      - name: Archive build results
+        if: ${{ !cancelled() }}
+        uses: actions/upload-artifact@v4
+        with:
+          name: ${{ (inputs.split && format('{0}-{1}', inputs.script, 
inputs.split)) || inputs.script }}
+          path: target/${{ inputs.script }}
+        continue-on-error: true
+
+      # The following steps are hard-coded to be run only for 'build' check,
+      # to avoid the need for 3 more inputs.
+      - name: Store binaries for tests
+        if: ${{ inputs.script == 'build' && !cancelled() }}
+        uses: actions/upload-artifact@v4
+        with:
+          name: ratis-bin
+          path: |
+            ratis-assembly/target/ratis-assembly-*-bin.tar.gz
+          retention-days: 1
+
+      - name: Store source tarball for compilation
+        if: ${{ inputs.script == 'build' && !cancelled() }}
+        uses: actions/upload-artifact@v4
+        with:
+          name: ratis-src
+          path: |
+            ratis-assembly/target/ratis-assembly-*-src.tar.gz
+          retention-days: 1
+
+      - name: Store Maven repo for tests
+        if: ${{ inputs.script == 'build' && !cancelled() }}
+        uses: actions/upload-artifact@v4
+        with:
+          name: maven-repo
+          path: |
+            ~/.m2/repository/org/apache/ratis
+          retention-days: 1
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 000000000..11fb1bd51
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,141 @@
+# 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.
+
+name: CI
+
+on:
+  workflow_call:
+    inputs:
+      ref:
+        type: string
+        description: Ratis git ref (branch, tag or commit hash)
+        default: ''
+        required: false
+
+jobs:
+  build:
+    uses: ./.github/workflows/check.yml
+    with:
+      script: build
+      script-args: -Prelease
+      timeout-minutes: 30
+    secrets: inherit
+
+  compile:
+    needs:
+      - build
+    strategy:
+      matrix:
+        java: [ 11, 17, 21 ]
+      fail-fast: false
+    uses: ./.github/workflows/check.yml
+    with:
+      java-version: ${{ matrix.java }}
+      needs-source-tarball: true
+      script: compile
+      script-args: -Djavac.version=${{ matrix.java }}
+      split: ${{ matrix.java }}
+      timeout-minutes: 30
+    secrets: inherit
+
+  repro:
+    needs:
+      - build
+    uses: ./.github/workflows/check.yml
+    with:
+      needs-maven-repo: true
+      script: repro
+      script-args: -Prelease
+      timeout-minutes: 30
+    secrets: inherit
+
+  basic:
+    strategy:
+      matrix:
+        check:
+          - author
+          - checkstyle
+          - findbugs
+          - rat
+      fail-fast: false
+    uses: ./.github/workflows/check.yml
+    with:
+      script: ${{ matrix.check }}
+      timeout-minutes: 30
+    secrets: inherit
+
+  unit:
+    strategy:
+      matrix:
+        profile:
+          - grpc
+          - server
+          - misc
+      fail-fast: false
+    uses: ./.github/workflows/check.yml
+    with:
+      script: unit
+      script-args: -P${{ matrix.profile }}-tests
+      split: ${{ matrix.profile }}
+      timeout-minutes: 60
+    secrets: inherit
+
+  coverage:
+    needs:
+      - build
+      - unit
+    runs-on: ubuntu-20.04
+    timeout-minutes: 30
+    if: (github.repository == 'apache/ratis' || github.repository == 
'apache/incubator-ratis') && github.event_name != 'pull_request'
+    steps:
+        - name: Checkout project
+          uses: actions/checkout@v4
+          with:
+            fetch-depth: 0
+        - name: Cache for maven dependencies
+          uses: actions/cache/restore@v4
+          with:
+            path: |
+              ~/.m2/repository
+              !~/.m2/repository/org/apache/ratis
+            key: maven-repo-${{ hashFiles('**/pom.xml') }}
+            restore-keys: |
+              maven-repo-
+        - name: Setup java 17
+          uses: actions/setup-java@v4
+          with:
+            distribution: 'temurin'
+            java-version: 17
+        - name: Download artifacts
+          uses: actions/download-artifact@v4
+          with:
+            path: target/artifacts
+        - name: Untar binaries
+          run: |
+            mkdir -p ratis-assembly/target
+            tar xzvf target/artifacts/ratis-bin/ratis-assembly-*.tar.gz -C 
ratis-assembly/target
+        - name: Calculate combined coverage
+          run: ./dev-support/checks/coverage.sh
+        - name: Upload coverage to Sonar
+          run: ./dev-support/checks/sonar.sh
+          env:
+            SONAR_TOKEN: ${{ secrets.SONARCLOUD_TOKEN }}
+            GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+        - name: Archive build results
+          uses: actions/upload-artifact@v4
+          if: always()
+          with:
+            name: ${{ github.job }}
+            path: target/${{ github.job }}
diff --git a/.github/workflows/post-commit.yml 
b/.github/workflows/post-commit.yml
index 5fee9462a..9b0df4ce4 100644
--- a/.github/workflows/post-commit.yml
+++ b/.github/workflows/post-commit.yml
@@ -12,7 +12,9 @@
 # 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.
+
 name: build-branch
+
 on:
   push:
     branches-ignore:
@@ -20,255 +22,12 @@ on:
     tags:
       - '**'
   pull_request:
-env:
-  WITH_COVERAGE: true
+
+concurrency:
+  group: ci-${{ github.event.pull_request.number || github.sha }}
+  cancel-in-progress: ${{ github.event_name == 'pull_request' }}
+
 jobs:
-  build:
-    runs-on: ubuntu-20.04
-    timeout-minutes: 30
-    steps:
-      - name: Checkout project
-        uses: actions/checkout@v4
-      - name: Cache for maven dependencies
-        uses: actions/cache@v4
-        with:
-          path: |
-            ~/.m2/repository
-            !~/.m2/repository/org/apache/ratis
-          key: maven-repo-${{ hashFiles('**/pom.xml') }}
-          restore-keys: |
-            maven-repo-
-      - name: Setup java
-        uses: actions/setup-java@v4
-        with:
-          distribution: 'temurin'
-          java-version: 8
-      - name: Run a full build
-        run: ./dev-support/checks/build.sh -Prelease
-      - name: Store binaries for tests
-        uses: actions/upload-artifact@v4
-        with:
-          name: ratis-bin
-          path: |
-            ratis-assembly/target/ratis-assembly-*.tar.gz
-            !ratis-assembly/target/ratis-assembly-*-src.tar.gz
-          retention-days: 1
-      - name: Store source tarball for compilation
-        uses: actions/upload-artifact@v4
-        with:
-          name: ratis-src
-          path: ratis-assembly/target/ratis-assembly-*-src.tar.gz
-          retention-days: 1
-  compile:
-    needs:
-      - build
-    runs-on: ubuntu-20.04
-    timeout-minutes: 30
-    strategy:
-      matrix:
-        java: [ 11, 17, 21 ]
-      fail-fast: false
-    steps:
-      - name: Download source tarball
-        uses: actions/download-artifact@v4
-        with:
-          name: ratis-src
-      - name: Untar sources
-        run: |
-          tar --strip-components 1 -xzvf ratis-assembly-*-src.tar.gz
-      - name: Cache for maven dependencies
-        uses: actions/cache/restore@v4
-        with:
-          path: |
-            ~/.m2/repository
-            !~/.m2/repository/org/apache/ratis
-          key: maven-repo-${{ hashFiles('**/pom.xml') }}
-          restore-keys: |
-            maven-repo-
-      - name: Setup java
-        uses: actions/setup-java@v4
-        with:
-          distribution: 'temurin'
-          java-version: ${{ matrix.java }}
-      - name: Run a full build
-        run: ./dev-support/checks/build.sh -Djavac.version=${{ matrix.java }}
-      - name: Test reproducibility
-        run: ./dev-support/checks/repro.sh -Djavac.version=${{ matrix.java }}
-  rat:
-    name: rat
-    runs-on: ubuntu-20.04
-    timeout-minutes: 15
-    steps:
-        - name: Checkout project
-          uses: actions/checkout@v4
-        - name: Cache for maven dependencies
-          uses: actions/cache/restore@v4
-          with:
-            path: |
-              ~/.m2/repository
-              !~/.m2/repository/org/apache/ratis
-            key: maven-repo-${{ hashFiles('**/pom.xml') }}
-            restore-keys: |
-              maven-repo-
-        - name: Run tests
-          run: ./dev-support/checks/rat.sh
-        - name: Upload results
-          uses: actions/upload-artifact@v4
-          if: always()
-          with:
-            name: rat
-            path: target/rat
-  author:
-    name: author
-    runs-on: ubuntu-20.04
-    timeout-minutes: 15
-    steps:
-        - name: Checkout project
-          uses: actions/checkout@v4
-        - name: Run tests
-          run: ./dev-support/checks/author.sh
-        - name: Upload results
-          uses: actions/upload-artifact@v4
-          if: always()
-          with:
-            name: author
-            path: target/author
-  unit:
-    name: unit
-    runs-on: ubuntu-20.04
-    timeout-minutes: 60
-    strategy:
-      matrix:
-        profile:
-          - grpc
-          - server
-          - misc
-      fail-fast: false
-    steps:
-        - name: Checkout project
-          uses: actions/checkout@v4
-        - name: Cache for maven dependencies
-          uses: actions/cache/restore@v4
-          with:
-            path: |
-              ~/.m2/repository
-              !~/.m2/repository/org/apache/ratis
-            key: maven-repo-${{ hashFiles('**/pom.xml') }}
-            restore-keys: |
-              maven-repo-
-        - name: Setup java
-          uses: actions/setup-java@v4
-          with:
-            distribution: 'temurin'
-            java-version: 8
-        - name: Run tests
-          run: ./dev-support/checks/unit.sh -P${{ matrix.profile }}-tests
-        - name: Summary of failures
-          run: cat target/${{ github.job }}/summary.txt
-          if: ${{ !cancelled() }}
-        - name: Upload results
-          uses: actions/upload-artifact@v4
-          if: ${{ !cancelled() }}
-          with:
-            name: unit-${{ matrix.profile }}
-            path: target/unit
-  checkstyle:
-    name: checkstyle
-    runs-on: ubuntu-20.04
-    timeout-minutes: 15
-    steps:
-        - name: Checkout project
-          uses: actions/checkout@v4
-        - name: Cache for maven dependencies
-          uses: actions/cache/restore@v4
-          with:
-            path: |
-              ~/.m2/repository
-              !~/.m2/repository/org/apache/ratis
-            key: maven-repo-${{ hashFiles('**/pom.xml') }}
-            restore-keys: |
-              maven-repo-
-        - name: Run tests
-          run: ./dev-support/checks/checkstyle.sh
-        - name: Upload results
-          uses: actions/upload-artifact@v4
-          if: always()
-          with:
-            name: checkstyle
-            path: target/checkstyle
-  findbugs:
-    name: findbugs
-    runs-on: ubuntu-20.04
-    timeout-minutes: 30
-    steps:
-        - name: Setup java
-          uses: actions/setup-java@v4
-          with:
-            distribution: 'temurin'
-            java-version: 8
-        - name: Checkout project
-          uses: actions/checkout@v4
-        - name: Cache for maven dependencies
-          uses: actions/cache/restore@v4
-          with:
-            path: |
-              ~/.m2/repository
-              !~/.m2/repository/org/apache/ratis
-            key: maven-repo-${{ hashFiles('**/pom.xml') }}
-            restore-keys: |
-              maven-repo-
-        - name: Run tests
-          run: ./dev-support/checks/findbugs.sh
-        - name: Upload results
-          uses: actions/upload-artifact@v4
-          if: always()
-          with:
-            name: findbugs
-            path: target/findbugs
-  coverage:
-    needs:
-      - build
-      - unit
-    runs-on: ubuntu-20.04
-    timeout-minutes: 30
-    if: (github.repository == 'apache/ratis' || github.repository == 
'apache/incubator-ratis') && github.event_name != 'pull_request'
-    steps:
-        - name: Checkout project
-          uses: actions/checkout@v4
-          with:
-            fetch-depth: 0
-        - name: Cache for maven dependencies
-          uses: actions/cache/restore@v4
-          with:
-            path: |
-              ~/.m2/repository
-              !~/.m2/repository/org/apache/ratis
-            key: maven-repo-${{ hashFiles('**/pom.xml') }}
-            restore-keys: |
-              maven-repo-
-        - name: Setup java 17
-          uses: actions/setup-java@v4
-          with:
-            distribution: 'temurin'
-            java-version: 17
-        - name: Download artifacts
-          uses: actions/download-artifact@v4
-          with:
-            path: target/artifacts
-        - name: Untar binaries
-          run: |
-            mkdir -p ratis-assembly/target
-            tar xzvf target/artifacts/ratis-bin/ratis-assembly-*.tar.gz -C 
ratis-assembly/target
-        - name: Calculate combined coverage
-          run: ./dev-support/checks/coverage.sh
-        - name: Upload coverage to Sonar
-          run: ./dev-support/checks/sonar.sh
-          env:
-            SONAR_TOKEN: ${{ secrets.SONARCLOUD_TOKEN }}
-            GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-        - name: Archive build results
-          uses: actions/upload-artifact@v4
-          if: always()
-          with:
-            name: ${{ github.job }}
-            path: target/${{ github.job }}
+  CI:
+    uses: ./.github/workflows/ci.yml
+    secrets: inherit
diff --git a/dev-support/checks/compile.sh b/dev-support/checks/compile.sh
new file mode 100755
index 000000000..fba4394de
--- /dev/null
+++ b/dev-support/checks/compile.sh
@@ -0,0 +1,31 @@
+#!/usr/bin/env bash
+# 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.
+DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
+cd "$DIR/../.." || exit 1
+
+source "${DIR}/../find_maven.sh"
+
+: ${WITH_COVERAGE:="false"}
+
+MAVEN_OPTIONS='-V -B -Dmaven.javadoc.skip=true -DskipTests'
+
+if [[ "${WITH_COVERAGE}" != "true" ]]; then
+  MAVEN_OPTIONS="${MAVEN_OPTIONS} -Djacoco.skip"
+fi
+
+export MAVEN_OPTS="-Xmx4096m"
+${MVN} ${MAVEN_OPTIONS} clean verify "$@"
+exit $?

Reply via email to