fix: Build botserver inside container to match glibc target
Some checks failed
BotServer CI/CD / build (push) Failing after 1s

The CI runner (host) has glibc 2.41 but the prod container has glibc 2.36.
Building on the host causes GLIBC_2.38/2.39 not found errors when running
inside the container.

This change makes the CI build inside the container where the binary will
actually run, ensuring glibc compatibility.
This commit is contained in:
Rodrigo Rodriguez (Pragmatismo) 2026-04-02 13:46:12 -03:00
parent 7b4753af0d
commit 3b8acde6fb

View file

@ -7,11 +7,8 @@ on:
branches: ["main"]
env:
CARGO_BUILD_JOBS: 8
CARGO_BUILD_JOBS: 4
CARGO_NET_RETRY: 10
WORKSPACE: /opt/gbo/ci/botserver
CARGO_TARGET_DIR: /opt/gbo/ci/botserver/target
PATH: /root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
jobs:
build:
@ -23,77 +20,86 @@ jobs:
git config --global http.sslVerify false
git config --global --add safe.directory "*"
- name: Setup Workspace
- name: Setup Workspace inside container
run: |
mkdir -p $WORKSPACE
cd $WORKSPACE
# Update or clone botlib
if [ -d botlib/.git ]; then
git -C botlib fetch --depth 1 origin main && git -C botlib checkout FETCH_HEAD
else
git clone --depth 1 --branch main https://alm.pragmatismo.com.br/GeneralBots/botlib.git botlib
fi
# Update or clone botserver
if [ -d botserver/.git ]; then
git -C botserver fetch --depth 1 origin main && git -C botserver checkout FETCH_HEAD
else
git clone --depth 1 --branch main https://alm.pragmatismo.com.br/GeneralBots/BotServer.git botserver
fi
# Get workspace Cargo.toml from gb and strip unused members
git clone --depth 1 --branch main https://alm.pragmatismo.com.br/GeneralBots/gb.git /tmp/gb-ws
cp /tmp/gb-ws/Cargo.toml Cargo.toml
for m in botapp botdevice bottest botui botbook botmodels botplugin bottemplates; do
grep -v "\"$m\"" Cargo.toml > /tmp/c.toml && mv /tmp/c.toml Cargo.toml
done
rm -rf /tmp/gb-ws
echo "=== Setting up workspace inside container ==="
ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 system "incus exec system -- bash -c '
mkdir -p /opt/gbo/ci/botserver
cd /opt/gbo/ci/botserver
# Clone botlib
if [ -d botlib/.git ]; then
git -C botlib fetch --depth 1 origin main && git -C botlib checkout FETCH_HEAD
else
git clone --depth 1 --branch main https://alm.pragmatismo.com.br/GeneralBots/botlib.git botlib
fi
# Clone botserver
if [ -d botserver/.git ]; then
git -C botserver fetch --depth 1 origin main && git -C botserver checkout FETCH_HEAD
else
git clone --depth 1 --branch main https://alm.pragmatismo.com.br/GeneralBots/BotServer.git botserver
fi
# Clone gb workspace and get Cargo.toml
git clone --depth 1 --branch main https://alm.pragmatismo.com.br/GeneralBots/gb.git /tmp/gb-ws
cp /tmp/gb-ws/Cargo.toml Cargo.toml
for m in botapp botdevice bottest botui botbook botmodels botplugin bottemplates; do
grep -v \"\\\"$m\\\"\" Cargo.toml > /tmp/c.toml && mv /tmp/c.toml Cargo.toml
done
rm -rf /tmp/gb-ws
echo \"Workspace setup complete\"
'"
- name: Install system dependencies
- name: Install system dependencies in container
run: |
PKGS="libpq-dev libssl-dev liblzma-dev pkg-config"
MISSING=""
for pkg in $PKGS; do
dpkg -s "$pkg" >/dev/null 2>&1 || MISSING="$MISSING $pkg"
done
if [ -n "$MISSING" ]; then
sudo apt-get update -qq -o Acquire::Retries=3 -o Acquire::http::Timeout=30
sudo apt-get install -y --no-install-recommends $MISSING
else
echo "All system dependencies already installed"
fi
ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 system "incus exec system -- bash -c '
PKGS=\"libpq-dev libssl-dev liblzma-dev pkg-config\"
MISSING=\"\"
for pkg in \$PKGS; do
dpkg -s \"\$pkg\" >/dev/null 2>&1 || MISSING=\"\$MISSING \$pkg\"
done
if [ -n \"\$MISSING\" ]; then
apt-get update -qq -o Acquire::Retries=3 -o Acquire::http::Timeout=30
apt-get install -y --no-install-recommends \$MISSING
else
echo \"All system dependencies already installed\"
fi
'"
- name: Build BotServer
working-directory: /opt/gbo/ci/botserver
- name: Build BotServer inside container
run: |
cargo build -p botserver --features chat -j 8 2>&1 | tee /tmp/build.log
ls -lh target/debug/botserver
echo "=== Building BotServer inside container ==="
ssh -o StrictHostKeyChecking=no -o ConnectTimeout=60 system "incus exec system -- bash -c '
cd /opt/gbo/ci/botserver
export CARGO_BUILD_JOBS=4
cargo build -p botserver --features chat 2>&1 | tee /tmp/build.log
ls -lh target/debug/botserver
'"
- name: Save build log
if: always()
run: sudo cp /tmp/build.log /tmp/botserver-$(date +%Y%m%d-%H%M%S).log || true
- name: Deploy via ssh tar gzip
run: |
set -e
ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 system "incus exec system -- cat /tmp/build.log > /tmp/botserver-build.log" || true
cat /tmp/botserver-build.log 2>/dev/null | tail -30 || echo "Build log not available"
- name: Deploy BotServer
run: |
echo "=== Deploy started ==="
echo "Step 1: Checking binary..."
ls -lh /opt/gbo/ci/botserver/target/debug/botserver
echo "Step 2: Killing old botserver..."
ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 system "pgrep -f botserver && killall botserver 2>/dev/null || echo 'No running botserver'"
echo "Step 3: Removing old binary..."
ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 system "rm -f /opt/gbo/bin/botserver && echo 'Old binary removed'"
echo "Step 4: Starting tar+gzip transfer..."
tar cf - -C /opt/gbo/ci/botserver/target/debug botserver | gzip -1 | ssh -o StrictHostKeyChecking=no -o ConnectTimeout=60 -o ServerAliveInterval=10 system "gzip -d | tar xf - -C /opt/gbo/bin && echo 'Transfer complete'"
echo "Step 5: Verifying transfer..."
ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 system "ls -lh /opt/gbo/bin/botserver"
echo "Step 6: Setting permissions..."
ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 system "chmod +x /opt/gbo/bin/botserver && chown gbuser:gbuser /opt/gbo/bin/botserver"
echo "=== Deploy completed ==="
ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 system "incus exec system -- bash -c '
echo \"Step 1: Killing old botserver...\"
pgrep -f botserver && killall botserver 2>/dev/null || echo \"No running botserver\"
sleep 2
echo \"Step 2: Removing old binary...\"
rm -f /opt/gbo/bin/botserver
echo \"Step 3: Copying new binary...\"
cp /opt/gbo/ci/botserver/target/debug/botserver /opt/gbo/bin/botserver
chmod +x /opt/gbo/bin/botserver
echo \"Step 4: Setting permissions...\"
chown gbuser:gbuser /opt/gbo/bin/botserver
ls -lh /opt/gbo/bin/botserver
echo \"=== Deploy completed ===\"
'"
- name: Verify botserver started
run: |
sleep 10
ssh -o StrictHostKeyChecking=no system "pgrep -f botserver && echo 'OK: botserver is running' || (echo 'ERROR: botserver not running' && cat /opt/gbo/logs/error.log | tail -20 && exit 1)"
- name: Save deploy log
if: always()
run: sudo cp /tmp/deploy.log /tmp/deploy-$(date +%Y%m%d-%H%M%S).log || true
ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 system "incus exec system -- bash -c '
pgrep -f botserver && echo \"OK: botserver is running\" || (echo \"ERROR: botserver not running\" && cat /opt/gbo/logs/error.log | tail -20 && exit 1)
'"