Skip to content

Expose per-queue delivered and acked totals in Prometheus metrics #7935

Expose per-queue delivered and acked totals in Prometheus metrics

Expose per-queue delivered and acked totals in Prometheus metrics #7935

Workflow file for this run

name: CI
on:
pull_request:
paths:
- Makefile
- 'src/**'
- 'spec/**'
- 'shard.*'
- 'static/**'
- 'views/**'
- '.github/workflows/ci.yml'
- 'build/build_docs_in_ci'
- 'openapi/**'
push:
branches:
- main
- 'v[0-9]+.[0-9]+.x'
paths:
- Makefile
- 'src/**'
- 'spec/**'
- 'shard.*'
- 'static/**'
- 'views/**'
- '.github/workflows/ci.yml'
- 'build/build_docs_in_ci'
- 'openapi/**'
workflow_dispatch:
jobs:
format:
name: Format check
runs-on: ubuntu-latest
continue-on-error: true
container: 84codes/crystal:latest-ubuntu-24.04
steps:
- uses: actions/checkout@v6
- run: crystal tool format --check
lint:
name: Lint check
runs-on: ubuntu-latest
continue-on-error: true
container: 84codes/crystal:latest-ubuntu-24.04
steps:
- name: Checkout
uses: actions/checkout@v6
- run: shards install
- run: make lint
lint-js:
name: Lint javascript
runs-on: ubuntu-latest
continue-on-error: true
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: latest
- name: Run standard
run: make lint-js
lint-openapi:
name: Lint OpenAPI
runs-on: ubuntu-latest
continue-on-error: true
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: latest
- name: Run spectral
run: make lint-openapi
spec:
name: Spec
runs-on: ubuntu-latest
container: 84codes/crystal:latest-ubuntu-24.04
timeout-minutes: 10
steps:
- name: Print Crystal version
run: crystal -v
- name: Install dependencies
run: apt-get update && apt-get install -y liblz4-dev etcd-server
- name: Checkout
uses: actions/checkout@v6
- name: Spec
run: make test
spec_osx:
name: Spec macOS
runs-on: macos-15-xlarge
timeout-minutes: 10
steps:
- name: Install dependencies
run: |
brew update
brew install crystal etcd
echo "/opt/homebrew/opt/etcd/bin" >> $GITHUB_PATH
env:
HOMEBREW_NO_AUTO_UPDATE: 1
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1
- run: crystal --version
- uses: actions/checkout@v6
- name: Spec
run: make test
compile:
name: Compile LavinMQ
runs-on: ubuntu-latest
container: 84codes/crystal:latest-ubuntu-24.04
steps:
- name: Install dependencies
run: apt-get update && apt-get install -y liblz4-dev
- name: Checkout
uses: actions/checkout@v6
- name: Build lavinmq
run: make -j bin/lavinmq bin/lavinmqctl DOCS= CRYSTAL_FLAGS="--error-on-warnings -Dbake_static"
- name: Print build info
run: bin/lavinmq --build-info
- name: Upload bin/
uses: actions/upload-artifact@v7
with:
name: bin
path: bin/
path_filter:
name: Filters for frontend specs
runs-on: ubuntu-latest
outputs:
frontend_changed: ${{ steps.changes.outputs.js == 'true' || steps.changes.outputs.views == 'true' }}
steps:
- name: Checkout
uses: actions/checkout@v6
- uses: dorny/paths-filter@v3
id: changes
with:
filters: |
views:
- '**/*.ecr'
js:
- '**/*.js'
spec_frontend:
name: Frontend specs
runs-on: ubuntu-24.04
needs: [compile, path_filter]
if: ${{ github.ref_name == 'main' || needs.path_filter.outputs.frontend_changed == 'true' }}
steps:
- name: Install LavinMQ dependencies
run: |
sudo apt-get update
sudo apt-get install -y make liblz4-1
- name: Download lavinmq
uses: actions/download-artifact@v8
with:
name: bin
path: bin
- name: Run LavinMQ in background
run: |
chmod +x bin/*
bin/lavinmq --data-dir=/tmp/amqp --bind=:: &
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: 24
- name: Install playwright
run: npm install @playwright/test
- name: Install browsers
run: npx playwright install --with-deps
- name: Run tests
run: npx playwright test --config ./spec/frontend/playwright.config.js --reporter list
- uses: actions/upload-artifact@v7
if: ${{ !cancelled() }}
with:
name: playwright-report
path: playwright-report/
retention-days: 10
java-client-test:
name: RabbitMQ java client test
runs-on: ubuntu-24.04
needs: compile
continue-on-error: true
steps:
- name: Install LavinMQ dependencies
run: |
sudo apt-get update
sudo apt-get install -y make openjdk-21-jre-headless liblz4-1
- uses: actions/download-artifact@v8
with:
name: bin
path: bin
- name: Run LavinMQ in background
run: |
chmod +x bin/*
bin/lavinmq --data-dir=/tmp/amqp --bind=:: &
- name: Clone java client
uses: actions/checkout@v6
with:
repository: rabbitmq/rabbitmq-java-client
ref: v5.25.0
path: rabbitmq-java-client
- name: Get patch file
uses: actions/checkout@v6
with:
repository: cloudamqp/lavinmq
path: lavinmq
# only checkout the lint rules
sparse-checkout: |
.github/rabbitmq-java-client.patch
sparse-checkout-cone-mode: false
- name: Patch tests
run: |
cd rabbitmq-java-client
git apply ../lavinmq/.github/rabbitmq-java-client.patch
- name: Run tests
id: test
continue-on-error: true
run: |
cd rabbitmq-java-client
make deps
./mvnw verify -Dtest-broker.A.nodename=lavin@testhost -Dit.test=ClientTestSuite,FunctionalTestSuite -Drabbitmqctl.bin=../bin/lavinmqctl
- name: >-
Test outcome: ${{ steps.test.outcome }}
run: echo NOOP
bunny-test:
name: Bunny client test
runs-on: ubuntu-24.04
needs: compile
steps:
- name: Install LavinMQ dependencies
run: |
sudo apt-get update
sudo apt-get install -y liblz4-1
- name: Checkout LavinMQ for bunny_definitions.json
uses: actions/checkout@v6
- uses: actions/download-artifact@v8
with:
name: bin
path: bin
- name: Run LavinMQ in background
run: |
chmod +x bin/lavinmq
bin/lavinmq --data-dir /tmp/amqp &
- name: Import definitions
run: |
chmod +x bin/lavinmqctl
bin/lavinmqctl import_definitions .github/bunny_definitions.json
- name: Clone Bunny
uses: actions/checkout@v6
with:
repository: ruby-amqp/bunny
path: bunny
fetch-depth: 0
ref: 55bb3d2accc293911120ea7dc7330cf06eda41c2
- name: Setup ruby
uses: ruby/setup-ruby@v1
with:
working-directory: bunny
ruby-version: ruby
- name: Run specs
run: |
cd bunny
sed -i /rabbitmq_http_api_client/d Gemfile
bundle add rabbitmq_http_api_client --version=">= 3" --group=test --require=rabbitmq/http/client
bundle install
sed -i '211,212d' spec/lower_level_api/integration/queue_declare_spec.rb
sed -i '112,146d' spec/lower_level_api/integration/queue_declare_spec.rb
bundle exec rspec \
--pattern "spec/*/integration/*_spec.rb, spec/issues/*_spec.rb" \
--exclude-pattern "**/*/tls_*, **/*/connection_recovery_*, **/*/default_queue_type*"
ruby-http-api-test:
name: RabbitMQ HTTP API Ruby client test
runs-on: ubuntu-24.04
needs: compile
continue-on-error: true
if: github.event.pull_request.head.repo.full_name == github.repository
steps:
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y liblz4-1
- uses: actions/download-artifact@v8
with:
name: bin
path: bin
- name: Run LavinMQ in background
run: |
chmod +x bin/lavinmq
bin/lavinmq --data-dir /tmp/amqp &
- name: Clone HTTP API client
uses: actions/checkout@v6
with:
repository: cloudamqp/rabbitmq_http_api_client
token: ${{ secrets.PRIVATE_REPO_ACCESS }}
path: rabbitmq_http_api_client
- name: Setup ruby
uses: ruby/setup-ruby@v1
with:
working-directory: rabbitmq_http_api_client
ruby-version: 2.7.1
bundler-cache: true
- name: Run specs
run: |
cd rabbitmq_http_api_client
bundle exec rspec
go-http-api-test:
name: RabbitMQ HTTP API Go client test
runs-on: ubuntu-24.04
needs: compile
continue-on-error: true
steps:
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y liblz4-1
- uses: actions/download-artifact@v8
with:
name: bin
path: bin
- name: Run LavinMQ in background
run: |
chmod +x bin/*
bin/lavinmq --data-dir /tmp/amqp &
- name: Install Go
uses: actions/setup-go@v6
with:
go-version: 1.22.3
- name: Clone http client
uses: actions/checkout@v6
with:
repository: michaelklishin/rabbit-hole
ref: 37defcefa36b528b024f0b377435b459eb8eb9fc
path: rabbit-hole
- name: Get patch file
uses: actions/checkout@v6
with:
repository: cloudamqp/lavinmq
path: lavinmq
# only checkout the lint rules
sparse-checkout: |
.github/rabbit-hole.patch
sparse-checkout-cone-mode: false
- name: Setup rabbit-hole
run: |
cd rabbit-hole
git apply ../lavinmq/.github/rabbit-hole.patch
bash bin/ci/before_build.sh
env:
RABBITHOLE_LAVINMQCTL: ../bin/lavinmqctl
- name: Run specs
run: |
cd rabbit-hole
go test -v ./...
release-mode-test:
name: Test in release mode
runs-on: ubuntu-24.04
needs: compile
continue-on-error: true
steps:
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y liblz4-1
- name: Checkout
uses: actions/checkout@v6
- uses: actions/download-artifact@v8
with:
name: bin
path: bin
- name: Run LavinMQ in background
run: |
chmod +x bin/lavinmq
bin/lavinmq --data-dir /tmp/amqp &
- name: Test the static HTTP controller
run: ./extras/static_requests.sh
freebsd-test:
if: false # Crystal is outdated in FreeBSD
name: Spec FreeBSD
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v6
- name: Spec
uses: vmactions/freebsd-vm@v1
with:
usesh: true
prepare: pkg install -y crystal shards security/openssl curl gmake coreos-etcd34
run: gmake test
continue-on-error: true