Skip to content

rabbit_feature_flags: Protect concurrent reloads of the registry #13381

rabbit_feature_flags: Protect concurrent reloads of the registry

rabbit_feature_flags: Protect concurrent reloads of the registry #13381

name: Test Mixed Version Clusters
on:
push:
branches:
- main
- v3.12.x
- v3.11.x
- v3.10.x
- v3.9.x
- v3.8.x
- bump-otp-*
- bump-elixir-*
- bump-rbe-*
- bump-rules_erlang
paths:
- 'deps/**'
- 'scripts/**'
- Makefile
- plugins.mk
- rabbitmq-components.mk
- .bazelrc
- .bazelversion
- BUILD.*
- '*.bzl'
- '*.bazel'
- .github/workflows/test-mixed-versions.yaml
pull_request:
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
ensure-mixed-version-archive:
name: Prepare Artifacts
runs-on: ubuntu-20.04
steps:
- name: CHECKOUT REPOSITORY
uses: actions/checkout@v4
with:
path: primary-umbrella
#! - name: Setup tmate session
#! uses: mxschmitt/action-tmate@v3
- name: CHECK FOR ARCHIVE ON S3
id: check
working-directory: primary-umbrella
run: |
set -u
ARCHIVE_URL="$(grep -Eo 'https://rabbitmq-github-actions.s3.eu-west-1.amazonaws.com.*.tar.xz' bazel/bzlmod/secondary_umbrella.bzl)"
echo "ARCHIVE_URL: ${ARCHIVE_URL}"
curl -LO "${ARCHIVE_URL}"
if xzcat --test package-generic-unix-for-mixed-version-testing-v*.tar.xz; then
exists=true
else
exists=false
fi
echo "exists=${exists}" | tee $GITHUB_ENV
OTP_VERSION_ID=${ARCHIVE_URL#*secondary-umbrellas/rbe-}
OTP_VERSION_ID=${OTP_VERSION_ID%*/package-generic-unix-for-mixed-version-testing-v*.tar.xz}
echo "otp_version_id=${OTP_VERSION_ID}" | tee -a $GITHUB_OUTPUT
VERSION=${ARCHIVE_URL#*package-generic-unix-for-mixed-version-testing-v}
VERSION=${VERSION%*.tar.xz}
echo "version=${VERSION}" | tee -a $GITHUB_OUTPUT
- name: CHECKOUT REPOSITORY (MIXED VERSION)
if: env.exists != 'true'
uses: actions/checkout@v4
with:
ref: v${{ steps.check.outputs.version }}
path: secondary-umbrella
- name: MOUNT BAZEL CACHE
if: env.exists != 'true'
uses: actions/[email protected]
with:
path: "/home/runner/repo-cache/"
key: repo-cache-secondary-umbrella-${{ hashFiles('primary-umbrella/MODULE.bazel','primary-umbrella/WORKSPACE','primary-umbrella/bazel/bzlmod/secondary_umbrella.bzl') }}
restore-keys: |
repo-cache-secondary-umbrella-
- name: BUILD SECONDARY UMBRELLA ARCHIVE
if: env.exists != 'true'
working-directory: secondary-umbrella
run: |
if [ -n "${{ secrets.BUILDBUDDY_API_KEY }}" ]; then
cat << EOF >> user.bazelrc
build:buildbuddy --remote_header=x-buildbuddy-api-key=${{ secrets.BUILDBUDDY_API_KEY }}
EOF
fi
cat << EOF >> user.bazelrc
build:buildbuddy --build_metadata=ROLE=CI
build:buildbuddy --build_metadata=VISIBILITY=PRIVATE
build:buildbuddy --remote_instance_name=buildbuddy-io/buildbuddy/ci-secondary-umbrella
build:buildbuddy --repository_cache=/home/runner/repo-cache/
build:buildbuddy --color=yes
build:buildbuddy --disk_cache=
build:buildbuddy --remote_download_toplevel
EOF
sed -i"_orig" -E "/APP_VERSION/ s/3\.[0-9]+\.[0-9]+/${{ steps.check.outputs.version }}/" rabbitmq.bzl
bazelisk build :package-generic-unix \
--config=rbe-${{ steps.check.outputs.otp_version_id }} \
--test_build \
--verbose_failures
OUTPUT_DIR=${{ github.workspace }}/output
mkdir -p ${OUTPUT_DIR}/rbe-${{ steps.check.outputs.otp_version_id }}
cp \
bazel-bin/package-generic-unix.tar.xz \
${OUTPUT_DIR}/rbe-${{ steps.check.outputs.otp_version_id }}/package-generic-unix-for-mixed-version-testing-v${{ steps.check.outputs.version }}.tar.xz
- name: UPLOAD THE ARCHIVE TO S3
if: env.exists != 'true'
uses: jakejarvis/[email protected]
with:
args: --acl public-read --follow-symlinks
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY}}
AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
AWS_REGION: ${{ secrets.AWS_REGION }}
SOURCE_DIR: output
DEST_DIR: secondary-umbrellas
test-mixed-versions:
name: Test (Mixed Version Cluster)
runs-on: ubuntu-20.04
needs: ensure-mixed-version-archive
strategy:
fail-fast: false
matrix:
otp_version_id:
- "26_1"
metadata_store:
- mnesia
- khepri
timeout-minutes: 120
steps:
- name: CHECKOUT REPOSITORY
uses: actions/checkout@v4
- name: MOUNT BAZEL CACHE
uses: actions/[email protected]
with:
path: "/home/runner/repo-cache/"
key: ${{ runner.os }}-repo-cache-${{ hashFiles('MODULE.bazel','WORKSPACE','bazel/bzlmod/secondary_umbrella.bzl') }}
restore-keys: |
${{ runner.os }}-repo-cache-
- name: CONFIGURE BAZEL
run: |
if [ -n "${{ secrets.BUILDBUDDY_API_KEY }}" ]; then
cat << EOF >> user.bazelrc
build:buildbuddy --remote_header=x-buildbuddy-api-key=${{ secrets.BUILDBUDDY_API_KEY }}
EOF
fi
cat << EOF >> user.bazelrc
build:buildbuddy --build_metadata=ROLE=CI
build:buildbuddy --build_metadata=VISIBILITY=PUBLIC
build:buildbuddy --repository_cache=/home/runner/repo-cache/
build:buildbuddy --color=yes
build:buildbuddy --disk_cache=
EOF
#! - name: Setup tmate session
#! uses: mxschmitt/action-tmate@v3
- name: RUN TESTS
run: |
sudo sysctl -w net.ipv4.tcp_keepalive_time=60
sudo ethtool -K eth0 tso off gso off gro off tx off rx off lro off
bazelisk test //... \
--config=rbe-${{ matrix.otp_version_id }} \
--test_env RABBITMQ_METADATA_STORE=${{ matrix.metadata_store }} \
--test_tag_filters=mixed-version-cluster,-aws,-docker \
--build_tests_only \
--verbose_failures
summary-mixed-versions:
needs:
- test-mixed-versions
runs-on: ubuntu-latest
steps:
- name: SUMMARY
run: |
echo "SUCCESS"