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]
