name: CI # 分支推送只做校验和原生构建;tag 发布由 release.yml 独立处理。 on: push: branches: ["**"] env: DOCKER_BUILDKIT: "1" BUILDX_NO_DEFAULT_ATTESTATIONS: "1" BUILDKIT_PROGRESS: plain jobs: validate: runs-on: ubuntu-latest-amd64 steps: - uses: actions/checkout@v4 - name: 校验版本和脚本语法 run: | VERSION=$(tr -d '\r\n' < VERSION) [[ "${VERSION}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] bash -n script/*.sh debian/build-deb.sh sh -n debian/postinst debian/prerm debian/postrm sh -n debian/xxxig-enable-1gb-pages build: needs: validate runs-on: ${{ matrix.arch == 'amd64' && 'ubuntu-latest-amd64' || 'ubuntu-latest-arm64' }} strategy: fail-fast: false matrix: arch: [amd64, arm64] steps: - uses: actions/checkout@v4 - name: 准备原生 Buildx run: | BUILDER=$(docker buildx create --use \ --driver docker-container \ --driver-opt network=host) echo "BUILDER=${BUILDER}" >> "$GITHUB_ENV" docker buildx inspect --bootstrap - name: 构建 ${{ matrix.arch }} 二进制 run: | VERSION=$(tr -d '\r\n' < VERSION) docker buildx build --pull \ --platform "linux/${{ matrix.arch }}" \ --build-arg "XXXIG_VERSION=v${VERSION}" \ --output type=local,dest=./output \ -f docker/Dockerfile . - name: 冒烟测试 run: | DIR="./output/linux_${{ matrix.arch }}" test -x "${DIR}/xxxigDaemon" test -x "${DIR}/xxxig" test -x "${DIR}/xxxigServer" test -f "${DIR}/config.json" test -f "${DIR}/config_cc.json" "${DIR}/xxxigDaemon" --version - name: 验证 Debian 打包 run: | VERSION=$(tr -d '\r\n' < VERSION) TARGZ="xxxig-${{ matrix.arch }}-linux-static-${VERSION}.tar.gz" tar -czf "${TARGZ}" -C "./output/linux_${{ matrix.arch }}" . if ! command -v dpkg-deb >/dev/null; then sudo apt-get update sudo apt-get install -y dpkg-dev fi ./debian/build-deb.sh "${{ matrix.arch }}" "${VERSION}" "${TARGZ}" DEB="xxxig_${VERSION}_${{ matrix.arch }}.deb" CONTENTS=$(dpkg-deb --contents "${DEB}") grep -Fq 'usr/libexec/xxxig-enable-1gb-pages' <<<"${CONTENTS}" grep -Fq 'lib/systemd/system/xxxig-hugepages.service' <<<"${CONTENTS}" - name: 清理 Buildx if: always() run: docker buildx rm "${BUILDER}" || true