botserver/.forgejo/workflows/botserver.yaml
Rodrigo Rodriguez (Pragmatismo) 3b8acde6fb
Some checks failed
BotServer CI/CD / build (push) Failing after 1s
fix: Build botserver inside container to match glibc target
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.
2026-04-02 13:46:12 -03:00

105 lines
4.3 KiB
YAML

name: BotServer CI/CD
on:
push:
branches: ["main"]
pull_request:
branches: ["main"]
env:
CARGO_BUILD_JOBS: 4
CARGO_NET_RETRY: 10
jobs:
build:
runs-on: gbo
steps:
- name: Setup Git
run: |
git config --global http.sslVerify false
git config --global --add safe.directory "*"
- name: Setup Workspace inside container
run: |
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 in container
run: |
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 inside container
run: |
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
run: |
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 ==="
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 -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)
'"