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

rustyrazorblade pushed a commit to branch ghci
in repository https://gitbox.apache.org/repos/asf/cassandra-sidecar.git

commit cceb3a58694e945c21e92cdd0e0a675d8c52f112
Author: Jon Haddad <[email protected]>
AuthorDate: Tue Nov 11 10:22:27 2025 -0800

    Added GitHub CI and dependabot
---
 .github/dependabot.yml   |  35 +++++
 .github/workflows/ci.yml | 357 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 392 insertions(+)

diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 00000000..21924f0f
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,35 @@
+version: 2
+updates:
+  # Gradle dependencies
+  - package-ecosystem: "gradle"
+    directory: "/"
+    schedule:
+      interval: "weekly"
+      day: "monday"
+      time: "09:00"
+    open-pull-requests-limit: 10
+    groups:
+      gradle-dependencies:
+        patterns:
+          - "*"
+    labels:
+      - "dependencies"
+      - "gradle"
+    commit-message:
+      prefix: "chore"
+      include: "scope"
+
+  # GitHub Actions versions
+  - package-ecosystem: "github-actions"
+    directory: "/"
+    schedule:
+      interval: "weekly"
+      day: "monday"
+      time: "09:00"
+    open-pull-requests-limit: 5
+    labels:
+      - "dependencies"
+      - "github-actions"
+    commit-message:
+      prefix: "chore"
+      include: "scope"
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 00000000..124ca9bb
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,357 @@
+name: CI
+
+on:
+  pull_request:
+    branches: [trunk]
+  push:
+    branches: [trunk]
+
+# Cancel in-progress runs for PRs when new commits are pushed
+concurrency:
+  group: ${{ github.workflow }}-${{ github.ref }}
+  cancel-in-progress: ${{ github.event_name == 'pull_request' }}
+
+permissions:
+  contents: read
+
+jobs:
+  # Build Cassandra dtest jars once for all test jobs to reuse
+  build-dtest-jars:
+    name: Build dtest jars
+    runs-on: ubuntu-latest
+    permissions:
+      contents: read
+
+    steps:
+      - name: Checkout repository
+        uses: actions/checkout@v5
+
+      - name: Setup Java 11
+        uses: actions/setup-java@v5
+        with:
+          java-version: '11'
+          distribution: 'temurin'
+          cache: 'gradle'
+
+      - name: Install prerequisites
+        run: |
+          sudo apt-get update
+          sudo apt-get install -y ant
+
+      - name: Setup network aliases for multi-node tests
+        run: |
+          for i in {2..20}; do
+            sudo ip addr add 127.0.0.$i/8 dev lo
+          done
+
+      - name: Build dtest jars
+        run: |
+          ./scripts/build-dtest-jars.sh
+
+      - name: Upload dtest jars artifact
+        uses: actions/upload-artifact@v5
+        with:
+          name: dtest-jars
+          path: dtest-jars/
+          retention-days: 90
+
+  # Run unit tests with static analysis on all Java versions
+  unit-tests:
+    name: Unit tests (Java ${{ matrix.java }})
+    runs-on: ubuntu-latest
+    needs: build-dtest-jars
+    permissions:
+      contents: read
+      checks: write
+    strategy:
+      fail-fast: false
+      matrix:
+        java: ['11', '17', '21']
+
+    steps:
+      - name: Checkout repository
+        uses: actions/checkout@v5
+
+      - name: Setup Java ${{ matrix.java }}
+        uses: actions/setup-java@v5
+        with:
+          java-version: ${{ matrix.java }}
+          distribution: 'temurin'
+          cache: 'gradle'
+
+      - name: Setup Gradle
+        uses: gradle/actions/setup-gradle@v5
+        with:
+          cache-read-only: ${{ github.ref != 'refs/heads/trunk' }}
+
+      - name: Download dtest jars
+        uses: actions/download-artifact@v5
+        with:
+          name: dtest-jars
+          path: dtest-jars/
+
+      - name: Run build with static analysis
+        run: |
+          ./gradlew build -x integrationTest --stacktrace
+        env:
+          CASSANDRA_DEP_DIR: ${{ github.workspace }}/dtest-jars
+
+      - name: Upload test results
+        if: always()
+        uses: actions/upload-artifact@v5
+        with:
+          name: unit-test-results-java-${{ matrix.java }}
+          path: |
+            **/build/test-results/test/*.xml
+            **/build/reports/tests/
+          retention-days: 30
+
+      - name: Upload static analysis reports
+        if: always()
+        uses: actions/upload-artifact@v5
+        with:
+          name: static-analysis-reports-java-${{ matrix.java }}
+          path: |
+            **/build/reports/spotbugs/
+            **/build/reports/checkstyle/
+            **/build/reports/rat/
+            **/build/reports/jacoco/
+          retention-days: 30
+
+  # Run lightweight integration tests on full matrix
+  integration-tests-lightweight:
+    name: Integration tests lightweight (Java ${{ matrix.java }}, C* ${{ 
matrix.cassandra }})
+    runs-on: ubuntu-latest
+    needs: [build-dtest-jars, unit-tests]
+    permissions:
+      contents: read
+      checks: write
+    strategy:
+      fail-fast: false
+      matrix:
+        java: ['11', '17', '21']
+        cassandra: ['4.0', '4.1', '5.0', '5.1']
+        include:
+          - cassandra: '4.0'
+            dtestVersion: '4.0.16'
+          - cassandra: '4.1'
+            dtestVersion: '4.1.6'
+          - cassandra: '5.0'
+            dtestVersion: '5.0.3'
+          - cassandra: '5.1'
+            dtestVersion: '5.1'
+
+    steps:
+      - name: Checkout repository
+        uses: actions/checkout@v5
+
+      - name: Setup Java ${{ matrix.java }}
+        uses: actions/setup-java@v5
+        with:
+          java-version: ${{ matrix.java }}
+          distribution: 'temurin'
+          cache: 'gradle'
+
+      - name: Setup Gradle
+        uses: gradle/actions/setup-gradle@v5
+        with:
+          cache-read-only: ${{ github.ref != 'refs/heads/trunk' }}
+
+      - name: Install prerequisites
+        run: |
+          sudo apt-get update
+          sudo apt-get install -y ant
+
+      - name: Setup network aliases for multi-node tests
+        run: |
+          for i in {2..20}; do
+            sudo ip addr add 127.0.0.$i/8 dev lo
+          done
+
+      - name: Download dtest jars
+        uses: actions/download-artifact@v5
+        with:
+          name: dtest-jars
+          path: dtest-jars/
+
+      - name: Install dtest jars to local Maven
+        run: |
+          ./scripts/install-shaded-dtest-jar-local.sh
+        env:
+          CASSANDRA_DEP_DIR: ${{ github.workspace }}/dtest-jars
+
+      - name: Run lightweight integration tests
+        run: |
+          ./gradlew --no-daemon \
+            -PdtestVersion=${{ matrix.dtestVersion }} \
+            -Dcassandra.sidecar.versions_to_test="${{ matrix.cassandra }}" \
+            checkstyleIntegrationTest integrationTestLightWeight \
+            --stacktrace
+        env:
+          CASSANDRA_DEP_DIR: ${{ github.workspace }}/dtest-jars
+          INTEGRATION_MAX_PARALLEL_FORKS: 3
+          INTEGRATION_MAX_HEAP_SIZE: 2500M
+
+      - name: Upload test results
+        if: always()
+        uses: actions/upload-artifact@v5
+        with:
+          name: integration-lightweight-results-java-${{ matrix.java 
}}-cassandra-${{ matrix.cassandra }}
+          path: |
+            **/build/test-results/integrationTest*/*.xml
+            **/build/reports/tests/integrationTest*/
+          retention-days: 30
+
+  # Run heavyweight integration tests on full matrix
+  integration-tests-heavyweight:
+    name: Integration tests heavyweight (Java ${{ matrix.java }}, C* ${{ 
matrix.cassandra }})
+    runs-on: ubuntu-latest
+    needs: [build-dtest-jars, unit-tests]
+    permissions:
+      contents: read
+      checks: write
+    strategy:
+      fail-fast: false
+      matrix:
+        java: ['11', '17', '21']
+        cassandra: ['4.0', '4.1', '5.0', '5.1']
+        include:
+          - cassandra: '4.0'
+            dtestVersion: '4.0.16'
+          - cassandra: '4.1'
+            dtestVersion: '4.1.6'
+          - cassandra: '5.0'
+            dtestVersion: '5.0.3'
+          - cassandra: '5.1'
+            dtestVersion: '5.1'
+
+    steps:
+      - name: Checkout repository
+        uses: actions/checkout@v5
+
+      - name: Setup Java ${{ matrix.java }}
+        uses: actions/setup-java@v5
+        with:
+          java-version: ${{ matrix.java }}
+          distribution: 'temurin'
+          cache: 'gradle'
+
+      - name: Setup Gradle
+        uses: gradle/actions/setup-gradle@v5
+        with:
+          cache-read-only: ${{ github.ref != 'refs/heads/trunk' }}
+
+      - name: Install prerequisites
+        run: |
+          sudo apt-get update
+          sudo apt-get install -y ant
+
+      - name: Setup network aliases for multi-node tests
+        run: |
+          for i in {2..20}; do
+            sudo ip addr add 127.0.0.$i/8 dev lo
+          done
+
+      - name: Download dtest jars
+        uses: actions/download-artifact@v5
+        with:
+          name: dtest-jars
+          path: dtest-jars/
+
+      - name: Install dtest jars to local Maven
+        run: |
+          ./scripts/install-shaded-dtest-jar-local.sh
+        env:
+          CASSANDRA_DEP_DIR: ${{ github.workspace }}/dtest-jars
+
+      - name: Run heavyweight integration tests
+        run: |
+          ./gradlew --no-daemon \
+            -PdtestVersion=${{ matrix.dtestVersion }} \
+            -Dcassandra.sidecar.versions_to_test="${{ matrix.cassandra }}" \
+            integrationTestHeavyWeight \
+            --stacktrace
+        env:
+          CASSANDRA_DEP_DIR: ${{ github.workspace }}/dtest-jars
+          INTEGRATION_MAX_PARALLEL_FORKS: 3
+          INTEGRATION_MAX_HEAP_SIZE: 3600M
+
+      - name: Upload test results
+        if: always()
+        uses: actions/upload-artifact@v5
+        with:
+          name: integration-heavyweight-results-java-${{ matrix.java 
}}-cassandra-${{ matrix.cassandra }}
+          path: |
+            **/build/test-results/integrationTest*/*.xml
+            **/build/reports/tests/integrationTest*/
+          retention-days: 30
+
+  # Publish Docker image to GHCR (trunk only)
+  publish-docker:
+    name: Publish Docker image
+    runs-on: ubuntu-latest
+    if: github.ref == 'refs/heads/trunk' && github.event_name == 'push'
+    needs: [unit-tests, integration-tests-lightweight, 
integration-tests-heavyweight]
+    permissions:
+      contents: read
+      packages: write
+
+    steps:
+      - name: Checkout repository
+        uses: actions/checkout@v5
+
+      - name: Setup Java 11
+        uses: actions/setup-java@v5
+        with:
+          java-version: '11'
+          distribution: 'temurin'
+          cache: 'gradle'
+
+      - name: Setup Gradle
+        uses: gradle/actions/setup-gradle@v5
+
+      - name: Build and push Docker image via Jib
+        run: |
+          ./gradlew :server:jib \
+            -Djib.to.image=ghcr.io/apache/cassandra-sidecar:latest \
+            -Djib.to.auth.username=${{ github.actor }} \
+            -Djib.to.auth.password=${{ secrets.GITHUB_TOKEN }} \
+            --stacktrace
+        env:
+          SKIP_SIGNING: true
+
+  # Publish distTar artifact (trunk only)
+  publish-disttar:
+    name: Publish distribution tarball
+    runs-on: ubuntu-latest
+    if: github.ref == 'refs/heads/trunk' && github.event_name == 'push'
+    needs: [unit-tests, integration-tests-lightweight, 
integration-tests-heavyweight]
+    permissions:
+      contents: read
+
+    steps:
+      - name: Checkout repository
+        uses: actions/checkout@v5
+
+      - name: Setup Java 11
+        uses: actions/setup-java@v5
+        with:
+          java-version: '11'
+          distribution: 'temurin'
+          cache: 'gradle'
+
+      - name: Setup Gradle
+        uses: gradle/actions/setup-gradle@v5
+
+      - name: Build distribution tarball
+        run: |
+          ./gradlew distTar --stacktrace
+        env:
+          SKIP_SIGNING: true
+
+      - name: Upload distribution artifact
+        uses: actions/upload-artifact@v5
+        with:
+          name: apache-cassandra-sidecar-dist-${{ github.sha }}
+          path: build/distributions/*.tar.gz
+          retention-days: 90


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to