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"]
|
||||
|
||||
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)
|
||||
'"
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue