Skip to content
Open

up #30

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
207 changes: 207 additions & 0 deletions .github/workflows/build-lpac-compat-x64.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,207 @@
name: Build-Lpac-Compat-X64

# 从 lpac 官方源码编译兼容老版本 glibc (2.31) 的 x86_64 二进制。
# 产物上传到 GitHub Release (固定标签为 lpac),供安装脚本和后端一键修复功能使用。

on:
schedule:
# 每天凌晨 0:00 自动检查官方是否有更新
- cron: '0 0 5,20 * *'
workflow_dispatch:
inputs:
lpac_ref:
description: '手动指定官方构建的分支或 Tag (例如: v2.3.0, main)'
required: false
type: string
default: ''

permissions:
contents: write

jobs:
build-lpac-compat-x64:
name: Build lpac (glibc 2.31, x86_64)
runs-on: ubuntu-24.04

steps:
- name: Checkout SimAdmin (for workflow context)
uses: actions/checkout@v4

- name: Check for lpac updates
id: check
run: |
OFFICIAL_TAG=$(curl -s https://api.github.com/repos/estkme-group/lpac/releases/latest | jq -r .tag_name)
echo "Official latest lpac tag: $OFFICIAL_TAG"

MANUAL_REF="${{ github.event.inputs.lpac_ref }}"
if [ -n "$MANUAL_REF" ]; then
echo "Using manually specified ref: $MANUAL_REF"
echo "should_build=true" >> $GITHUB_OUTPUT
echo "lpac_ref=$MANUAL_REF" >> $GITHUB_OUTPUT
exit 0
fi

OUR_MANIFEST=$(curl -sL -f https://github.com/bbvv77/SimAdmin/releases/download/lpac/lpac-x64.json || echo "{}")
OUR_TAG=$(echo "$OUR_MANIFEST" | jq -r '.version // empty' || echo "")
echo "Our current compiled lpac tag: $OUR_TAG"

if [ "$OFFICIAL_TAG" = "$OUR_TAG" ] && [ -n "$OUR_TAG" ]; then
echo "No new updates found. Skipping build."
echo "should_build=false" >> $GITHUB_OUTPUT
else
echo "New version detected ($OFFICIAL_TAG) or our release is missing. Building..."
echo "should_build=true" >> $GITHUB_OUTPUT
echo "lpac_ref=$OFFICIAL_TAG" >> $GITHUB_OUTPUT
fi

- name: Build lpac inside Debian 11 container
if: steps.check.outputs.should_build == 'true'
run: |
mkdir -p release
docker run --rm \
--platform linux/amd64 \
-v "$GITHUB_WORKSPACE/release:/output" \
debian:11 bash -c '
set -eux

apt-get update
apt-get install -y --no-install-recommends \
build-essential cmake git ca-certificates zip \
pkg-config python3 python3-pip ninja-build \
libcurl4-openssl-dev libglib2.0-dev \
libpcsclite-dev libgudev-1.0-dev libglib2.0-doc \
libudev-dev udev

pip3 install meson

echo ">>> Building libqmi from source..."
git clone --depth 1 --branch 1.36.0 https://gitlab.freedesktop.org/mobile-broadband/libqmi.git /libqmi-src
cd /libqmi-src
meson setup build \
--prefix=/usr/local \
--libdir=lib \
--buildtype=release \
-Dcollection=full \
-Dmbim_qmux=false \
-Dqrtr=false \
-Dintrospection=false \
-Dman=false \
-Dbash_completion=false \
-Dqmi_username=root
ninja -C build
ninja -C build install
ldconfig
echo ">>> libqmi installed: $(pkg-config --modversion qmi-glib)"

echo ">>> Building lpac..."
git clone --depth 1 --branch "$0" https://github.com/estkme-group/lpac /lpac
cd /lpac

RESOLVED_VER=$(git describe --tags --always || git rev-parse --short HEAD || echo "$0")
echo "$RESOLVED_VER" > /output/resolved_version.txt

mkdir build && cd build
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DSTANDALONE_MODE=ON \
-DLPAC_WITH_APDU_PCSC=OFF \
-DLPAC_WITH_APDU_AT=ON \
-DLPAC_WITH_APDU_QMI=ON
make -j$(nproc)

DESTDIR=/tmp/lpac-install cmake --install .

BUNDLE_ROOT="/tmp/lpac-bundle"
mkdir -p "$BUNDLE_ROOT"

LPAC_BIN=$(find /tmp/lpac-install -name lpac -type f | head -1)
if [ -z "$LPAC_BIN" ] || [ ! -f "$LPAC_BIN" ]; then
echo "ERROR: lpac binary not found in /tmp/lpac-install"
ls -laR /tmp/lpac-install/ || true
exit 1
fi
cp "$LPAC_BIN" "$BUNDLE_ROOT/lpac"
chmod 755 "$BUNDLE_ROOT/lpac"

mkdir -p "$BUNDLE_ROOT/lib"
QMI_SO=$(find /usr/local/lib -name "libqmi-glib.so.*.*.*" -type f | head -1)
if [ -n "$QMI_SO" ]; then
cp -L "$QMI_SO" "$BUNDLE_ROOT/lib/"
QMI_BASENAME=$(basename "$QMI_SO")
ln -sf "$QMI_BASENAME" "$BUNDLE_ROOT/lib/libqmi-glib.so.5"
ln -sf "$QMI_BASENAME" "$BUNDLE_ROOT/lib/libqmi-glib.so"
fi

echo "=== Bundle contents ==="
ls -laR "$BUNDLE_ROOT"
ldd "$BUNDLE_ROOT/lpac" || true

cd "$BUNDLE_ROOT"
zip -r /output/lpac-linux-x86_64-glibc2.31.zip .

chmod -R 777 /output
echo "✅ Build complete"
' "${{ steps.check.outputs.lpac_ref }}"

- name: Verify output
if: steps.check.outputs.should_build == 'true'
run: |
ls -lh release/
file release/lpac-linux-x86_64-glibc2.31.zip

- name: Resolve version info
id: resolve_ver
if: steps.check.outputs.should_build == 'true'
run: |
LPAC_VER=$(cat release/resolved_version.txt)
echo "lpac_ver=$LPAC_VER" >> $GITHUB_OUTPUT

- name: Generate lpac-x64.json manifest
if: steps.check.outputs.should_build == 'true'
run: |
cat > release/lpac-x64.json << MANIFEST
{
"version": "${{ steps.resolve_ver.outputs.lpac_ver }}",
"assets": [
{
"name": "lpac-linux-x86_64-glibc2.31.zip",
"arch": "x86_64",
"glibc": "2.31",
"description": "lpac for x86_64 built against glibc 2.31 (Debian 11)"
}
]
}
MANIFEST

- name: Upload to SimAdmin Release
if: steps.check.outputs.should_build == 'true'
uses: softprops/action-gh-release@v2
with:
tag_name: lpac
name: eSIM lpac Compatibility Assets
body: |
eSIM lpac compatibility assets for legacy device environments:
* **lpac Source**: `estkme-group/lpac@${{ steps.resolve_ver.outputs.lpac_ver }}`
* **Glibc version**: `2.31` (Debian 11)
* **Architecture**: `aarch64` (ARM64) | `x86_64` (AMD64)
draft: false
prerelease: true
make_latest: false
files: |
release/lpac-linux-x86_64-glibc2.31.zip
release/lpac-x64.json
overwrite_files: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Summary
if: steps.check.outputs.should_build == 'true'
run: |
echo "## 🎉 lpac compat build complete (x86_64)" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "| Item | Value |" >> $GITHUB_STEP_SUMMARY
echo "|------|-------|" >> $GITHUB_STEP_SUMMARY
echo "| lpac source | estkme-group/lpac@${{ steps.resolve_ver.outputs.lpac_ver }} |" >> $GITHUB_STEP_SUMMARY
echo "| Target glibc | 2.31 (Debian 11) |" >> $GITHUB_STEP_SUMMARY
echo "| Architecture | x86_64 (AMD64) |" >> $GITHUB_STEP_SUMMARY
echo "| Attached to Release | lpac |" >> $GITHUB_STEP_SUMMARY
2 changes: 1 addition & 1 deletion .github/workflows/build-lpac-compat.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ jobs:
fi

# 3. 读取我们当前打包的版本 (从我们仓库 releases/download/lpac/lpac.json)
OUR_MANIFEST=$(curl -sL -f https://github.com/3899/SimAdmin/releases/download/lpac/lpac.json || echo "{}")
OUR_MANIFEST=$(curl -sL -f https://github.com/bbvv77/SimAdmin/releases/download/lpac/lpac.json || echo "{}")
OUR_TAG=$(echo "$OUR_MANIFEST" | jq -r '.version // empty' || echo "")
echo "Our current compiled lpac tag: $OUR_TAG"

Expand Down
Loading