Skip to content

Commit f1c7eb4

Browse files
committed
feat: Added RabbitMQ Server
1 parent 71535a8 commit f1c7eb4

8 files changed

Lines changed: 211 additions & 0 deletions

File tree

.github/workflows/test.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ jobs:
1616
- 1password
1717
- doppler
1818
- postgresql
19+
- rabbitmq-server
1920
- redis-server
2021
baseImage:
2122
- debian:latest
@@ -39,6 +40,7 @@ jobs:
3940
- 1password
4041
- doppler
4142
- postgresql
43+
- rabbitmq-server
4244
- redis-server
4345
steps:
4446
- uses: actions/checkout@v3
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
{
2+
"name": "RabbitMQ Server",
3+
"id": "rabbitmq-server",
4+
"version": "1.0.0",
5+
"description": "RabbitMQ is a feature rich, multi-protocol messaging and streaming broker.",
6+
"options": {
7+
"version": {
8+
"type": "string",
9+
"proposals": [
10+
"latest",
11+
"3"
12+
],
13+
"default": "latest",
14+
"description": "Select or enter a version of RabbitMQ."
15+
}
16+
},
17+
"mounts": [
18+
{
19+
"source": "dind-var-lib-rabbitmq-${devcontainerId}",
20+
"target": "/var/lib/rabbitmq",
21+
"type": "volume"
22+
}
23+
],
24+
"entrypoint": "/usr/local/share/rabbitmq-server-init.sh",
25+
"installsAfter": [
26+
"ghcr.io/devcontainers/features/common-utils"
27+
]
28+
}

src/rabbitmq-server/install.sh

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
#!/usr/bin/env bash
2+
3+
RABBITMQ_VERSION=${VERSION:-"latest"}
4+
RABBITMQ_ARCHIVE_ARCHITECTURES="amd64 arm64 i386 ppc64el"
5+
RABBITMQ_ARCHIVE_VERSION_CODENAMES="bookworm bullseye sid focal jammy lunar bionic"
6+
USERNAME="${USERNAME:-"${_REMOTE_USER:-"automatic"}"}"
7+
8+
# Default: Exit on any failure.
9+
set -e
10+
11+
# Clean up
12+
rm -rf /var/lib/apt/lists/*
13+
14+
# Setup STDERR.
15+
err() {
16+
echo "(!) $*" >&2
17+
}
18+
19+
if [ "$(id -u)" -ne 0 ]; then
20+
err 'Script must be run as root. Use sudo, su, or add "USER root" to your Dockerfile before running this script.'
21+
exit 1
22+
fi
23+
24+
# Determine the appropriate non-root user
25+
if [ "${USERNAME}" = "auto" ] || [ "${USERNAME}" = "automatic" ]; then
26+
USERNAME=""
27+
POSSIBLE_USERS=("vscode" "node" "codespace" "$(awk -v val=1000 -F ":" '$3==val{print $1}' /etc/passwd)")
28+
for CURRENT_USER in "${POSSIBLE_USERS[@]}"; do
29+
if id -u ${CURRENT_USER} > /dev/null 2>&1; then
30+
USERNAME=${CURRENT_USER}
31+
break
32+
fi
33+
done
34+
if [ "${USERNAME}" = "" ]; then
35+
USERNAME=root
36+
fi
37+
elif [ "${USERNAME}" = "none" ] || ! id -u ${USERNAME} > /dev/null 2>&1; then
38+
USERNAME=root
39+
fi
40+
41+
apt_get_update()
42+
{
43+
if [ "$(find /var/lib/apt/lists/* | wc -l)" = "0" ]; then
44+
echo "Running apt-get update..."
45+
apt-get update -y
46+
fi
47+
}
48+
49+
# Checks if packages are installed and installs them if not
50+
check_packages() {
51+
if ! dpkg -s "$@" > /dev/null 2>&1; then
52+
apt_get_update
53+
apt-get -y install --no-install-recommends "$@"
54+
fi
55+
}
56+
57+
setup_rabbitmq() {
58+
tee /usr/local/share/rabbitmq-server-init.sh << 'EOF'
59+
#!/bin/sh
60+
set -e
61+
62+
chown -fR rabbitmq:rabbitmq /var/lib/rabbitmq \
63+
&& chmod 1777 /var/lib/rabbitmq \
64+
&& sudo /etc/init.d/rabbitmq-server start
65+
66+
set +e
67+
68+
# Execute whatever commands were passed in (if any). This allows us
69+
# to set this script to ENTRYPOINT while still executing the default CMD.
70+
exec "$@"
71+
EOF
72+
chmod +x /usr/local/share/rabbitmq-server-init.sh \
73+
&& chown ${USERNAME}:root /usr/local/share/rabbitmq-server-init.sh
74+
}
75+
76+
install_using_apt() {
77+
# Install dependencies
78+
check_packages apt-transport-https curl ca-certificates gnupg2 sudo
79+
80+
# Import the repository signing key
81+
## Primary RabbitMQ signing key
82+
curl -1sLf "https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc" | gpg --dearmor | tee /usr/share/keyrings/com.github.rabbitmq.signing.gpg > /dev/null
83+
# Launchpad PPA signing key for apt
84+
curl -1sLf "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xf77f1eda57ebb1cc" | gpg --dearmor | tee /usr/share/keyrings/net.launchpad.ppa.rabbitmq.erlang.gpg > /dev/null
85+
86+
# Determine the OS and distribution
87+
RABBITMQ_OS=${ID}
88+
RABBITMQ_DISTRIBUTION=${VERSION_CODENAME}
89+
if [ "${VERSION_CODENAME}" = "lunar" ] || [ "${VERSION_CODENAME}" = "jammy" ]; then
90+
RABBITMQ_DISTRIBUTION=jammy
91+
elif [ "${VERSION_CODENAME}" = "focal" ]; then
92+
RABBITMQ_DISTRIBUTION=focal
93+
elif [ "${VERSION_CODENAME}" = "bionic" ]; then
94+
RABBITMQ_DISTRIBUTION=bionic
95+
elif [ "${RABBITMQ_OS}" = "debian" ] || [ "${ID_LIKE}" = "debian" ]; then
96+
RABBITMQ_DISTRIBUTION=bionic
97+
fi
98+
99+
# Create the file repository configuration
100+
sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
101+
deb [signed-by=/usr/share/keyrings/net.launchpad.ppa.rabbitmq.erlang.gpg] http://ppa.launchpad.net/rabbitmq/rabbitmq-erlang/ubuntu ${RABBITMQ_DISTRIBUTION} main
102+
deb-src [signed-by=/usr/share/keyrings/net.launchpad.ppa.rabbitmq.erlang.gpg] http://ppa.launchpad.net/rabbitmq/rabbitmq-erlang/ubuntu ${RABBITMQ_DISTRIBUTION} main
103+
EOF
104+
105+
# Update lists
106+
apt-get update -yq
107+
108+
# Soft version matching for CLI
109+
if [ "${RABBITMQ_VERSION}" = "latest" ] || [ "${RABBITMQ_VERSION}" = "lts" ] || [ "${RABBITMQ_VERSION}" = "stable" ]; then
110+
# Empty, meaning grab whatever "latest" is in apt repo
111+
version_major=""
112+
version_suffix=""
113+
else
114+
version_major="$(echo "${RABBITMQ_VERSION}" | grep -oE -m 1 "^([0-9]+)")"
115+
version_suffix="=$(apt-cache show rabbitmq-server | awk -F"Version: " '{print $2}' | grep -E -m 1 "^(${RABBITMQ_VERSION})(\.|$|\+.*|-.*)")"
116+
117+
if [ -z ${version_suffix} ] || [ ${version_suffix} = "=" ]; then
118+
echo "Provided RABBITMQ_VERSION (${RABBITMQ_VERSION}) was not found in the apt-cache for this package+distribution combo";
119+
return 1
120+
fi
121+
echo "version_major ${version_major}"
122+
echo "version_suffix ${version_suffix}"
123+
fi
124+
125+
(apt-get install -yq --fix-missing rabbitmq-server${version_suffix} \
126+
&& setup_rabbitmq) || return 1
127+
}
128+
129+
export DEBIAN_FRONTEND=noninteractive
130+
131+
# Source /etc/os-release to get OS info
132+
. /etc/os-release
133+
architecture="$(dpkg --print-architecture)"
134+
135+
if [[ "${RABBITMQ_ARCHIVE_ARCHITECTURES}" = *"${architecture}"* ]] && [[ "${RABBITMQ_ARCHIVE_VERSION_CODENAMES}" = *"${VERSION_CODENAME}"* ]]; then
136+
install_using_apt || use_zip="true"
137+
else
138+
use_zip="true"
139+
fi
140+
141+
# Clean up
142+
rm -rf /var/lib/apt/lists/*
143+
144+
echo "Done!"

test/_global/all_the_db.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ source dev-container-features-test-lib
88
# Definition specific tests
99
check "check for redis-server" redis-server --version
1010
check "check for psql" psql --version
11+
check "check for rabbitmqctl" rabbitmqctl --version
1112

1213
# Report result
1314
reportResults

test/_global/scenarios.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"image": "ubuntu:focal",
1111
"features": {
1212
"postgresql": {},
13+
"rabbitmq-server": {},
1314
"redis-server": {}
1415
}
1516
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"version_3": {
3+
"image": "mcr.microsoft.com/devcontainers/base:jammy",
4+
"user": "vscode",
5+
"features": {
6+
"rabbitmq-server": {
7+
"version": "3"
8+
}
9+
}
10+
}
11+
}

test/rabbitmq-server/test.sh

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
# Optional: Import test library
6+
source dev-container-features-test-lib
7+
8+
# Feature specific tests
9+
check "pq-init-exists" bash -c "ls /usr/local/share/rabbitmq-server-init.sh"
10+
11+
# Report result
12+
reportResults

test/rabbitmq-server/version_3.sh

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
# Optional: Import test library
6+
source dev-container-features-test-lib
7+
8+
# Definition specific tests
9+
check "cli" which rabbitmqctl
10+
11+
# Report result
12+
reportResults

0 commit comments

Comments
 (0)