fix: Build botserver inside container to match glibc target
Some checks failed
BotServer CI/CD / build (push) Failing after 1s
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:
parent
7b4753af0d
commit
3b8acde6fb
1 changed files with 71 additions and 65 deletions
|
|
@ -7,11 +7,8 @@ on:
|
||||||
branches: ["main"]
|
branches: ["main"]
|
||||||
|
|
||||||
env:
|
env:
|
||||||
CARGO_BUILD_JOBS: 8
|
CARGO_BUILD_JOBS: 4
|
||||||
CARGO_NET_RETRY: 10
|
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:
|
jobs:
|
||||||
build:
|
build:
|
||||||
|
|
@ -23,77 +20,86 @@ jobs:
|
||||||
git config --global http.sslVerify false
|
git config --global http.sslVerify false
|
||||||
git config --global --add safe.directory "*"
|
git config --global --add safe.directory "*"
|
||||||
|
|
||||||
- name: Setup Workspace
|
- name: Setup Workspace inside container
|
||||||
run: |
|
run: |
|
||||||
mkdir -p $WORKSPACE
|
echo "=== Setting up workspace inside container ==="
|
||||||
cd $WORKSPACE
|
ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 system "incus exec system -- bash -c '
|
||||||
# Update or clone botlib
|
mkdir -p /opt/gbo/ci/botserver
|
||||||
if [ -d botlib/.git ]; then
|
cd /opt/gbo/ci/botserver
|
||||||
git -C botlib fetch --depth 1 origin main && git -C botlib checkout FETCH_HEAD
|
# Clone botlib
|
||||||
else
|
if [ -d botlib/.git ]; then
|
||||||
git clone --depth 1 --branch main https://alm.pragmatismo.com.br/GeneralBots/botlib.git botlib
|
git -C botlib fetch --depth 1 origin main && git -C botlib checkout FETCH_HEAD
|
||||||
fi
|
else
|
||||||
# Update or clone botserver
|
git clone --depth 1 --branch main https://alm.pragmatismo.com.br/GeneralBots/botlib.git botlib
|
||||||
if [ -d botserver/.git ]; then
|
fi
|
||||||
git -C botserver fetch --depth 1 origin main && git -C botserver checkout FETCH_HEAD
|
# Clone botserver
|
||||||
else
|
if [ -d botserver/.git ]; then
|
||||||
git clone --depth 1 --branch main https://alm.pragmatismo.com.br/GeneralBots/BotServer.git botserver
|
git -C botserver fetch --depth 1 origin main && git -C botserver checkout FETCH_HEAD
|
||||||
fi
|
else
|
||||||
# Get workspace Cargo.toml from gb and strip unused members
|
git clone --depth 1 --branch main https://alm.pragmatismo.com.br/GeneralBots/BotServer.git botserver
|
||||||
git clone --depth 1 --branch main https://alm.pragmatismo.com.br/GeneralBots/gb.git /tmp/gb-ws
|
fi
|
||||||
cp /tmp/gb-ws/Cargo.toml Cargo.toml
|
# Clone gb workspace and get Cargo.toml
|
||||||
for m in botapp botdevice bottest botui botbook botmodels botplugin bottemplates; do
|
git clone --depth 1 --branch main https://alm.pragmatismo.com.br/GeneralBots/gb.git /tmp/gb-ws
|
||||||
grep -v "\"$m\"" Cargo.toml > /tmp/c.toml && mv /tmp/c.toml Cargo.toml
|
cp /tmp/gb-ws/Cargo.toml Cargo.toml
|
||||||
done
|
for m in botapp botdevice bottest botui botbook botmodels botplugin bottemplates; do
|
||||||
rm -rf /tmp/gb-ws
|
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: |
|
run: |
|
||||||
PKGS="libpq-dev libssl-dev liblzma-dev pkg-config"
|
ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 system "incus exec system -- bash -c '
|
||||||
MISSING=""
|
PKGS=\"libpq-dev libssl-dev liblzma-dev pkg-config\"
|
||||||
for pkg in $PKGS; do
|
MISSING=\"\"
|
||||||
dpkg -s "$pkg" >/dev/null 2>&1 || MISSING="$MISSING $pkg"
|
for pkg in \$PKGS; do
|
||||||
done
|
dpkg -s \"\$pkg\" >/dev/null 2>&1 || MISSING=\"\$MISSING \$pkg\"
|
||||||
if [ -n "$MISSING" ]; then
|
done
|
||||||
sudo apt-get update -qq -o Acquire::Retries=3 -o Acquire::http::Timeout=30
|
if [ -n \"\$MISSING\" ]; then
|
||||||
sudo apt-get install -y --no-install-recommends $MISSING
|
apt-get update -qq -o Acquire::Retries=3 -o Acquire::http::Timeout=30
|
||||||
else
|
apt-get install -y --no-install-recommends \$MISSING
|
||||||
echo "All system dependencies already installed"
|
else
|
||||||
fi
|
echo \"All system dependencies already installed\"
|
||||||
|
fi
|
||||||
|
'"
|
||||||
|
|
||||||
- name: Build BotServer
|
- name: Build BotServer inside container
|
||||||
working-directory: /opt/gbo/ci/botserver
|
|
||||||
run: |
|
run: |
|
||||||
cargo build -p botserver --features chat -j 8 2>&1 | tee /tmp/build.log
|
echo "=== Building BotServer inside container ==="
|
||||||
ls -lh target/debug/botserver
|
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
|
- 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: |
|
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 "=== Deploy started ==="
|
||||||
echo "Step 1: Checking binary..."
|
ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 system "incus exec system -- bash -c '
|
||||||
ls -lh /opt/gbo/ci/botserver/target/debug/botserver
|
echo \"Step 1: Killing old botserver...\"
|
||||||
echo "Step 2: Killing old botserver..."
|
pgrep -f botserver && killall botserver 2>/dev/null || echo \"No running botserver\"
|
||||||
ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 system "pgrep -f botserver && killall botserver 2>/dev/null || echo 'No running botserver'"
|
sleep 2
|
||||||
echo "Step 3: Removing old binary..."
|
echo \"Step 2: Removing old binary...\"
|
||||||
ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 system "rm -f /opt/gbo/bin/botserver && echo 'Old binary removed'"
|
rm -f /opt/gbo/bin/botserver
|
||||||
echo "Step 4: Starting tar+gzip transfer..."
|
echo \"Step 3: Copying new binary...\"
|
||||||
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'"
|
cp /opt/gbo/ci/botserver/target/debug/botserver /opt/gbo/bin/botserver
|
||||||
echo "Step 5: Verifying transfer..."
|
chmod +x /opt/gbo/bin/botserver
|
||||||
ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 system "ls -lh /opt/gbo/bin/botserver"
|
echo \"Step 4: Setting permissions...\"
|
||||||
echo "Step 6: Setting permissions..."
|
chown gbuser:gbuser /opt/gbo/bin/botserver
|
||||||
ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 system "chmod +x /opt/gbo/bin/botserver && chown gbuser:gbuser /opt/gbo/bin/botserver"
|
ls -lh /opt/gbo/bin/botserver
|
||||||
echo "=== Deploy completed ==="
|
echo \"=== Deploy completed ===\"
|
||||||
|
'"
|
||||||
|
|
||||||
- name: Verify botserver started
|
- name: Verify botserver started
|
||||||
run: |
|
run: |
|
||||||
sleep 10
|
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)"
|
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)
|
||||||
- name: Save deploy log
|
'"
|
||||||
if: always()
|
|
||||||
run: sudo cp /tmp/deploy.log /tmp/deploy-$(date +%Y%m%d-%H%M%S).log || true
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue