From b4acc1f228e42e8582bc66787c558214315f708d Mon Sep 17 00:00:00 2001 From: "Rodrigo Rodriguez (Pragmatismo)" Date: Thu, 2 Apr 2026 15:25:19 -0300 Subject: [PATCH] fix: Use musl target for static linking (glibc 2.36 compatible) --- .forgejo/workflows/botserver.yaml | 101 +++++++++++++----------------- 1 file changed, 44 insertions(+), 57 deletions(-) diff --git a/.forgejo/workflows/botserver.yaml b/.forgejo/workflows/botserver.yaml index 46f43d6c..28c2e0fa 100644 --- a/.forgejo/workflows/botserver.yaml +++ b/.forgejo/workflows/botserver.yaml @@ -7,8 +7,10 @@ on: branches: ["main"] env: - CARGO_BUILD_JOBS: 4 + CARGO_BUILD_JOBS: 8 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: @@ -21,10 +23,14 @@ jobs: git config --global http.sslVerify false git config --global --add safe.directory "*" - - name: Setup Workspace on host + - name: Install musl target run: | - mkdir -p /opt/gbo/ci/botserver - cd /opt/gbo/ci/botserver + rustup target add x86_64-unknown-linux-musl + + - name: Setup Workspace + run: | + mkdir -p $WORKSPACE + cd $WORKSPACE if [ -d botlib/.git ]; then git -C botlib fetch --depth 1 origin main && git -C botlib checkout FETCH_HEAD else @@ -42,73 +48,54 @@ jobs: done rm -rf /tmp/gb-ws - - name: Transfer source to system container + - name: Install system dependencies run: | - echo "=== Transferring source to container ===" - ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 system "mkdir -p /opt/gbo/ci/botserver" - tar cf - -C /opt/gbo/ci/botserver botlib botserver Cargo.toml | \ - ssh -o StrictHostKeyChecking=no -o ConnectTimeout=120 -o ServerAliveInterval=10 system "tar xf - -C /opt/gbo/ci/botserver && echo 'Transfer complete'" + PKGS="libpq-dev libssl-dev liblzma-dev pkg-config musl-tools" + 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 - - name: Install system dependencies in container + - name: Build BotServer (musl static) + working-directory: /opt/gbo/ci/botserver run: | - ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 system " - 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: Install Rust in container - run: | - ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 system " - export PATH=/root/.cargo/bin:\$PATH - if ! command -v rustup &>/dev/null || [ \$(rustc --version | grep -oP '\d+\.\d+' | head -1 | cut -d. -f1) -lt 1 ]; then - curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y - fi - rustc --version - cargo --version - " - - - name: Build BotServer inside container - run: | - echo "=== Building inside container ===" - ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 system " - export PATH=/root/.cargo/bin:\$PATH - export CARGO_BUILD_JOBS=4 - cd /opt/gbo/ci/botserver - cargo build -p botserver --features chat 2>&1 | tee /tmp/build.log - ls -lh target/debug/botserver - " + cargo build -p botserver --features chat --target x86_64-unknown-linux-musl -j 8 2>&1 | tee /tmp/build.log + ls -lh target/x86_64-unknown-linux-musl/debug/botserver + file target/x86_64-unknown-linux-musl/debug/botserver - name: Save build log if: always() - run: | - ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 system "cat /tmp/build.log" > /tmp/build.log 2>/dev/null || true - sudo cp /tmp/build.log /tmp/botserver-$(date +%Y%m%d-%H%M%S).log || true + run: sudo cp /tmp/build.log /tmp/botserver-$(date +%Y%m%d-%H%M%S).log || true - - name: Deploy BotServer + - name: Deploy via ssh tar gzip run: | set -e echo "=== Deploy started ===" - echo "Step 1: Killing old botserver..." + echo "Step 1: Checking binary..." + ls -lh /opt/gbo/ci/botserver/target/x86_64-unknown-linux-musl/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 2: Copying binary inside container..." - ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 system " - cp /opt/gbo/ci/botserver/target/debug/botserver /opt/gbo/bin/botserver - chmod +x /opt/gbo/bin/botserver - chown gbuser:gbuser /opt/gbo/bin/botserver - ls -lh /opt/gbo/bin/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/x86_64-unknown-linux-musl/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 ===" - 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