name: ci concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true on: pull_request: push: schedule: - cron: '0 1 * * *' env: BUNDLE_RETRY: 6 BUNDLE_JOBS: 4 jobs: diffend: runs-on: ubuntu-latest strategy: fail-fast: false steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: ruby-version: 3.3 bundler-cache: true - name: Install Diffend plugin run: bundle plugin install diffend - name: Bundle Secure run: bundle secure karafka-checksum: runs-on: ubuntu-latest strategy: fail-fast: false steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Run Karafka license checksum verification env: KARAFKA_PRO_USERNAME: ${{ secrets.KARAFKA_PRO_USERNAME }} KARAFKA_PRO_PASSWORD: ${{ secrets.KARAFKA_PRO_PASSWORD }} KARAFKA_PRO_VERSION: ${{ secrets.KARAFKA_PRO_VERSION }} KARAFKA_PRO_LICENSE_CHECKSUM: ${{ secrets.KARAFKA_PRO_LICENSE_CHECKSUM }} run: bin/verify_license_integrity coditsu: runs-on: ubuntu-latest strategy: fail-fast: false steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Run Coditsu run: \curl -sSL https://api.coditsu.io/run/ci | bash # We do not split RSpec specs to OSS and Pro like integrations because they do not overload # Kafka heavily, compute total coverage for specs and are fast enough specs: timeout-minutes: 10 runs-on: ubuntu-latest needs: diffend strategy: fail-fast: false matrix: ruby: - '3.4.0-preview1' - '3.3' - '3.2' - '3.1' include: - ruby: '3.3' coverage: 'true' steps: - uses: actions/checkout@v4 - name: Install package dependencies run: "[ -e $APT_DEPS ] || sudo apt-get install -y --no-install-recommends $APT_DEPS" - name: Start Kafka with docker compose run: | docker compose up -d || (sleep 5 && docker compose up -d) # Newer versions of ActiveSupport and Rails do not work with Ruby 3.1 anymore. # While we use newer by default we do want to resolve older and test, thus we remove # Gemfile.lock and let it resolve to the most compatible version possible - name: Remove Gemfile.lock if Ruby 3.1 if: matrix.ruby == '3.1' run: rm -f Gemfile.lock - name: Set up Ruby uses: ruby/setup-ruby@v1 with: ruby-version: ${{matrix.ruby}} bundler-cache: true bundler: 'latest' - name: Wait for Kafka run: | bundle exec bin/wait_for_kafka - name: Run all specs env: GITHUB_COVERAGE: ${{matrix.coverage}} run: bin/rspecs integrations_oss: timeout-minutes: 20 runs-on: ubuntu-latest needs: diffend strategy: fail-fast: false matrix: ruby: - '3.4.0-preview1' - '3.3' - '3.2' - '3.1' steps: - uses: actions/checkout@v4 - name: Install package dependencies run: "[ -e $APT_DEPS ] || sudo apt-get install -y --no-install-recommends $APT_DEPS" - name: Remove libzstd-dev to check no supported compressions run: sudo apt-get -y remove libzstd-dev - name: Start Kafka with docker compose run: | docker compose up -d || (sleep 5 && docker compose up -d) - name: Set up Ruby uses: ruby/setup-ruby@v1 with: # Do not use cache here as we run bundle install also later in some of the integration # tests and we need to be able to run it without cache # # We also want to check that librdkafka is compiling as expected on all versions of Ruby ruby-version: ${{matrix.ruby}} bundler: 'latest' - name: Install latest Bundler run: | gem install bundler --no-document gem update --system --no-document bundle config set without 'tools benchmarks docs' - name: Fix directory permissions for Bundler run: | chmod -R o-w /opt/hostedtoolcache/Ruby/3*/x64/lib/ruby/gems/3*/gems chmod +t /opt/hostedtoolcache/Ruby/3*/x64/lib/ruby/gems/3*/gems - name: Bundle install run: | bundle config set without development bundle install --jobs 4 --retry 3 - name: Wait for Kafka run: | bundle exec bin/wait_for_kafka - name: Run OSS integration tests run: bin/integrations --exclude '/pro' integrations_pro: timeout-minutes: 45 runs-on: ubuntu-latest needs: diffend strategy: fail-fast: false matrix: ruby: - '3.4.0-preview1' - '3.3' - '3.2' - '3.1' steps: - uses: actions/checkout@v4 - name: Install package dependencies run: "[ -e $APT_DEPS ] || sudo apt-get install -y --no-install-recommends $APT_DEPS" - name: Start Kafka with docker compose run: | docker compose up -d || (sleep 5 && docker compose up -d) - name: Set up Ruby uses: ruby/setup-ruby@v1 with: ruby-version: ${{matrix.ruby}} bundler: 'latest' - name: Install latest Bundler run: | gem install bundler --no-document gem update --system --no-document bundle config set without 'tools benchmarks docs' - name: Bundle install run: | bundle config set without development bundle install --jobs 4 --retry 3 - name: Wait for Kafka run: | bundle exec bin/wait_for_kafka - name: Run Pro integration tests env: KARAFKA_PRO_LICENSE_TOKEN: ${{ secrets.KARAFKA_PRO_LICENSE_TOKEN }} KARAFKA_PRO_USERNAME: ${{ secrets.KARAFKA_PRO_USERNAME }} KARAFKA_PRO_PASSWORD: ${{ secrets.KARAFKA_PRO_PASSWORD }} KARAFKA_PRO_VERSION: ${{ secrets.KARAFKA_PRO_VERSION }} KARAFKA_PRO_LICENSE_CHECKSUM: ${{ secrets.KARAFKA_PRO_LICENSE_CHECKSUM }} run: bin/integrations '/pro'