Skip to content

Install libatomic for Oracle Linux 9 release build #5

Install libatomic for Oracle Linux 9 release build

Install libatomic for Oracle Linux 9 release build #5

name: One-shot KeyDB 6.3.6 Oracle Linux 9 release
on:
workflow_dispatch:
push:
branches:
- main
paths:
- .github/workflows/one-shot-release-v6.3.6-oraclelinux9.yml
- .github/release-v6.3.6-oraclelinux9
permissions:
contents: write
concurrency:
group: keydb-v6.3.6-oraclelinux9-release
cancel-in-progress: false
jobs:
build-and-upload:
runs-on: ubuntu-22.04
timeout-minutes: 90
env:
SOURCE_COMMIT: e78a02c171d04f7221630cbfce977ec999134656
RELEASE_TAG: v6.3.6
PACKAGE_DIR: keydb-6.3.6-oraclelinux-9-x86_64
ARCHIVE: keydb-6.3.6-oraclelinux-9-x86_64.tar.gz
steps:
- name: Check out release source
uses: actions/checkout@v4
with:
ref: ${{ env.SOURCE_COMMIT }}
fetch-depth: 0
- name: Create READY notification listener
shell: bash
run: |
set -euo pipefail
cat > "$GITHUB_WORKSPACE/verify-systemd-ready.py" <<'PY'
import os
import socket
path = "/tmp/keydb-notify.sock"
try:
os.unlink(path)
except FileNotFoundError:
pass
sock = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
sock.bind(path)
sock.settimeout(30)
messages = []
while True:
data = sock.recv(65535).decode("utf-8", "replace")
messages.append(data)
if "READY=1" in data:
break
print("\n".join(messages))
PY
- name: Build and validate inside Oracle Linux 9
shell: bash
run: |
set -euo pipefail
docker run --rm \
-v "$GITHUB_WORKSPACE:/src" \
-w /src \
oraclelinux:9 \
bash -euxo pipefail -c '
dnf -y install \
gcc \
gcc-c++ \
libatomic \
make \
pkgconf-pkg-config \
openssl-devel \
systemd-devel \
zlib-devel \
bzip2-devel \
lz4-devel \
libzstd-devel \
libuuid-devel \
libcurl-devel \
python3 \
procps-ng \
findutils \
tar \
gzip \
which
rpm -q libatomic
test -e /usr/lib64/libatomic.so.1.2.0
ldconfig -p | grep libatomic
make distclean || true
make BUILD_TLS=yes USE_SYSTEMD=yes -j"$(nproc)"
src/keydb-server --version | tee /tmp/keydb-version.txt
grep -Eq "v=6\.3\.6([[:space:]]|$)" /tmp/keydb-version.txt
ldd src/keydb-server | tee /tmp/keydb-ldd.txt
grep -q "libsystemd.so.0" /tmp/keydb-ldd.txt
grep -q "libatomic.so.1" /tmp/keydb-ldd.txt
rm -f \
/tmp/keydb-notify.sock \
/tmp/keydb-notify.log \
/tmp/keydb-release.log \
/tmp/keydb-release.pid
python3 /src/verify-systemd-ready.py \
>/tmp/keydb-notify.log 2>&1 &
notify_pid=$!
for i in $(seq 1 100); do
test -S /tmp/keydb-notify.sock && break
sleep 0.05
done
test -S /tmp/keydb-notify.sock
NOTIFY_SOCKET=/tmp/keydb-notify.sock \
src/keydb-server \
--bind 127.0.0.1 \
--port 6399 \
--save "" \
--appendonly no \
--daemonize no \
--supervised systemd \
--dir /tmp \
--pidfile /tmp/keydb-release.pid \
--logfile /tmp/keydb-release.log &
server_pid=$!
if ! wait "$notify_pid"; then
cat /tmp/keydb-notify.log || true
cat /tmp/keydb-release.log || true
kill "$server_pid" 2>/dev/null || true
exit 1
fi
grep -q "READY=1" /tmp/keydb-notify.log
src/keydb-cli -h 127.0.0.1 -p 6399 PING | grep -qx PONG
src/keydb-cli -h 127.0.0.1 -p 6399 SHUTDOWN NOSAVE
wait "$server_pid" || true
mkdir -p /src/release-info
cat /etc/oracle-release > /src/release-info/oracle-release.txt
gcc --version > /src/release-info/gcc-version.txt
src/keydb-server --version > /src/release-info/keydb-version.txt
ldd src/keydb-server > /src/release-info/ldd-keydb-server.txt
'
sudo chown -R "$(id -u):$(id -g)" "$GITHUB_WORKSPACE"
- name: Package Oracle Linux 9 binaries
shell: bash
run: |
set -euo pipefail
rm -rf "$PACKAGE_DIR"
mkdir -p "$PACKAGE_DIR/bin"
install -m 0755 src/keydb-server "$PACKAGE_DIR/bin/keydb-server"
install -m 0755 src/keydb-cli "$PACKAGE_DIR/bin/keydb-cli"
install -m 0755 src/keydb-benchmark "$PACKAGE_DIR/bin/keydb-benchmark"
install -m 0755 src/keydb-check-aof "$PACKAGE_DIR/bin/keydb-check-aof"
install -m 0755 src/keydb-check-rdb "$PACKAGE_DIR/bin/keydb-check-rdb"
ln -s keydb-server "$PACKAGE_DIR/bin/keydb-sentinel"
cp README.md COPYING "$PACKAGE_DIR/"
cp release-info/oracle-release.txt "$PACKAGE_DIR/"
cp release-info/gcc-version.txt "$PACKAGE_DIR/"
cp release-info/keydb-version.txt "$PACKAGE_DIR/"
cp release-info/ldd-keydb-server.txt "$PACKAGE_DIR/"
cat > "$PACKAGE_DIR/BUILD-INFO.txt" <<EOF
KeyDB version: 6.3.6
Git commit: $SOURCE_COMMIT
Target OS: Oracle Linux 9
Architecture: x86_64
TLS: enabled
systemd support: enabled and READY=1 validated
Build workflow run: $GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID
EOF
tar -czf "$ARCHIVE" "$PACKAGE_DIR"
sha256sum "$ARCHIVE" > "$ARCHIVE.sha256"
cat "$ARCHIVE.sha256"
tar -tzf "$ARCHIVE"
- name: Upload assets to existing v6.3.6 release
env:
GH_TOKEN: ${{ github.token }}
shell: bash
run: |
set -euo pipefail
gh release view "$RELEASE_TAG"
gh release upload "$RELEASE_TAG" \
"$ARCHIVE" \
"$ARCHIVE.sha256" \
--clobber
- name: Remove one-shot workflow after successful release
if: success()
env:
GH_TOKEN: ${{ github.token }}
shell: bash
run: |
set -euo pipefail
sudo chown -R "$(id -u):$(id -g)" "$GITHUB_WORKSPACE"
git reset --hard
git clean -fdx
git fetch origin main
git checkout -B main origin/main
rm -f \
.github/workflows/one-shot-release-v6.3.6-oraclelinux9.yml \
.github/release-v6.3.6-oraclelinux9
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add -A
if git diff --cached --quiet; then
echo "Nothing to clean up"
exit 0
fi
git commit -m "Remove one-shot Oracle Linux 9 release workflow"
git push origin main