@@ -285,8 +285,6 @@ jobs:
285285 cp "${tmp_dir}/arm64/plugins/linux/arm64/proxy-pool.so" "${context_dir}/plugins/linux/arm64/proxy-pool.so"
286286 cp "${tmp_dir}/amd64/plugins/linux/amd64/oauth-model-policy.so" "${context_dir}/plugins/linux/amd64/oauth-model-policy.so"
287287 cp "${tmp_dir}/arm64/plugins/linux/arm64/oauth-model-policy.so" "${context_dir}/plugins/linux/arm64/oauth-model-policy.so"
288- cp "${tmp_dir}/amd64/plugins/linux/amd64/pro-observability.so" "${context_dir}/plugins/linux/amd64/pro-observability.so"
289- cp "${tmp_dir}/arm64/plugins/linux/arm64/pro-observability.so" "${context_dir}/plugins/linux/arm64/pro-observability.so"
290288 cp "${tmp_dir}/amd64/config.example.yaml" "${context_dir}/config.example.yaml"
291289 cp customizations-repo/cliproxyapi-pro-core/entrypoint.sh "${context_dir}/entrypoint.sh"
292290 cp customizations-repo/cliproxyapi-pro-core/Dockerfile.runtime "${context_dir}/Dockerfile.runtime"
@@ -300,9 +298,7 @@ jobs:
300298 "${context_dir}/plugins/linux/amd64/proxy-pool.so" \
301299 "${context_dir}/plugins/linux/arm64/proxy-pool.so" \
302300 "${context_dir}/plugins/linux/amd64/oauth-model-policy.so" \
303- "${context_dir}/plugins/linux/arm64/oauth-model-policy.so" \
304- "${context_dir}/plugins/linux/amd64/pro-observability.so" \
305- "${context_dir}/plugins/linux/arm64/pro-observability.so"
301+ "${context_dir}/plugins/linux/arm64/oauth-model-policy.so"
306302
307303 - name : Set up QEMU
308304 uses : docker/setup-qemu-action@96fe6ef7f33517b61c61be40b68a1882f3264fb8 # v4.2.0
@@ -367,6 +363,14 @@ jobs:
367363 asset_arch : amd64
368364 archive_format : zip
369365 asset_suffix : " "
366+ - target : windows-arm64-no-plugin
367+ kind : no-plugin
368+ runner : windows-11-arm
369+ goos : windows
370+ goarch : arm64
371+ asset_arch : aarch64
372+ archive_format : zip
373+ asset_suffix : _no-plugin
370374 - target : linux-amd64
371375 kind : linux-glibc-plugin
372376 runner : ubuntu-latest
@@ -385,6 +389,46 @@ jobs:
385389 archive_format : tar.gz
386390 asset_suffix : " "
387391 manylinux_image : quay.io/pypa/manylinux2014_aarch64@sha256:ae34a6ceeefe0b535c525b2e96f297311c8f1e01cfd8b9be5f647eece5b5c60b
392+ - target : linux-amd64-no-plugin
393+ kind : no-plugin
394+ runner : ubuntu-latest
395+ goos : linux
396+ goarch : amd64
397+ asset_arch : amd64
398+ archive_format : tar.gz
399+ asset_suffix : _no-plugin
400+ - target : linux-arm64-no-plugin
401+ kind : no-plugin
402+ runner : ubuntu-latest
403+ goos : linux
404+ goarch : arm64
405+ asset_arch : aarch64
406+ archive_format : tar.gz
407+ asset_suffix : _no-plugin
408+ - target : freebsd-amd64
409+ kind : freebsd-plugin
410+ runner : ubuntu-latest
411+ goos : freebsd
412+ goarch : amd64
413+ asset_arch : amd64
414+ archive_format : tar.gz
415+ asset_suffix : " "
416+ - target : freebsd-amd64-no-plugin
417+ kind : no-plugin
418+ runner : ubuntu-latest
419+ goos : freebsd
420+ goarch : amd64
421+ asset_arch : amd64
422+ archive_format : tar.gz
423+ asset_suffix : _no-plugin
424+ - target : freebsd-arm64-no-plugin
425+ kind : no-plugin
426+ runner : ubuntu-latest
427+ goos : freebsd
428+ goarch : arm64
429+ asset_arch : aarch64
430+ archive_format : tar.gz
431+ asset_suffix : _no-plugin
388432
389433 permissions :
390434 contents : read
@@ -486,7 +530,7 @@ jobs:
486530 if [ "${GOOS}" = "windows" ]; then plugin_extension="dll"; fi
487531 mkdir -p "${archive_dir}/plugins/${GOOS}/${GOARCH}"
488532 plugin_relatives=()
489- for plugin_name in proxy-pool oauth-model-policy pro-observability ; do
533+ for plugin_name in proxy-pool oauth-model-policy; do
490534 plugin_relative="plugins/${GOOS}/${GOARCH}/${plugin_name}.${plugin_extension}"
491535 plugin_source=".${plugin_name}-build"
492536 rm -rf "${plugin_source}"
@@ -524,7 +568,7 @@ jobs:
524568 archive_name="CLIProxyAPI_${RELEASE_TAG#v}_linux_${ASSET_ARCH}.tar.gz"
525569 rm -rf "dist/linux-${GOARCH}"
526570 mkdir -p "${archive_dir}"
527- for plugin_name in proxy-pool oauth-model-policy pro-observability ; do
571+ for plugin_name in proxy-pool oauth-model-policy; do
528572 rm -rf ".${plugin_name}-build"
529573 cp -R "../customizations-repo/cliproxyapi-pro-plugins/${plugin_name}" ".${plugin_name}-build"
530574 done
@@ -562,7 +606,7 @@ jobs:
562606 -o "'"${archive_dir}"'/cli-proxy-api" ./cmd/server/
563607
564608 mkdir -p "'"${archive_dir}"'/plugins/linux/${GOARCH}"
565- for plugin_name in proxy-pool oauth-model-policy pro-observability ; do
609+ for plugin_name in proxy-pool oauth-model-policy; do
566610 go -C ".${plugin_name}-build" mod edit -replace github.com/router-for-me/CLIProxyAPI/v7=/src
567611 CGO_ENABLED=1 GOOS=linux GOARCH="${GOARCH}" go -C ".${plugin_name}-build" build \
568612 -buildvcs=false -trimpath -buildmode=c-shared \
@@ -588,8 +632,110 @@ jobs:
588632 --source-date-epoch "${SOURCE_DATE_EPOCH}" \
589633 cli-proxy-api LICENSE README.md README_EN.md config.example.yaml \
590634 "plugins/linux/${GOARCH}/proxy-pool.so" \
591- "plugins/linux/${GOARCH}/oauth-model-policy.so" \
592- "plugins/linux/${GOARCH}/pro-observability.so"
635+ "plugins/linux/${GOARCH}/oauth-model-policy.so"
636+
637+ - name : Install FreeBSD plugin build dependencies
638+ if : matrix.kind == 'freebsd-plugin'
639+ run : |
640+ set -euo pipefail
641+ sudo apt-get update
642+ sudo apt-get install -y clang lld wget
643+
644+ - name : Prepare workspace git metadata for FreeBSD plugin build
645+ if : matrix.kind == 'freebsd-plugin'
646+ env :
647+ BUILD_DATE : ${{ steps.prepare-core.outputs.build_date }}
648+ run : |
649+ set -euo pipefail
650+ git init .
651+ git config user.name "github-actions[bot]"
652+ git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
653+ GIT_AUTHOR_DATE="${BUILD_DATE}" GIT_COMMITTER_DATE="${BUILD_DATE}" git commit --allow-empty -m "Prepare workspace metadata for cgo action"
654+
655+ - name : Build FreeBSD plugin-capable binary
656+ if : matrix.kind == 'freebsd-plugin'
657+ uses : go-cross/cgo-actions@d0b8f2f2d67923ce9a42d92a7ef0ed1ebd905f0a # v1
658+ env :
659+ GOFLAGS : -buildvcs=false -trimpath
660+ with :
661+ dir : upstream-core
662+ packages : ./cmd/server/
663+ targets : ${{ matrix.goos }}-${{ matrix.goarch }}
664+ out-dir : upstream-core/dist/${{ matrix.target }}/bin
665+ output : cli-proxy-api
666+ flags : -ldflags=-s -w
667+ x-flags : |
668+ main.Version=${{ needs.check-version.outputs.release_tag }}
669+ main.Commit=release-${{ needs.check-version.outputs.core_tag }}
670+ main.BuildDate=${{ steps.prepare-core.outputs.build_date }}
671+
672+ - name : Package FreeBSD plugin-capable archive
673+ if : matrix.kind == 'freebsd-plugin'
674+ env :
675+ RELEASE_TAG : ${{ needs.check-version.outputs.release_tag }}
676+ GOOS : ${{ matrix.goos }}
677+ ASSET_ARCH : ${{ matrix.asset_arch }}
678+ SOURCE_DATE_EPOCH : ${{ steps.prepare-core.outputs.source_date_epoch }}
679+ run : |
680+ set -euo pipefail
681+ cd upstream-core
682+
683+ archive_dir="dist/${{ matrix.target }}/archive"
684+ archive_name="CLIProxyAPI_${RELEASE_TAG#v}_${GOOS}_${ASSET_ARCH}.tar.gz"
685+ mkdir -p "${archive_dir}"
686+ cp "dist/${{ matrix.target }}/bin/cli-proxy-api" "${archive_dir}/cli-proxy-api"
687+ cp LICENSE README.md README_EN.md config.example.yaml "${archive_dir}/"
688+ python ../customizations-repo/scripts/build/create_reproducible_archive.py \
689+ --format tar.gz \
690+ --output "dist/${archive_name}" \
691+ --root "${archive_dir}" \
692+ --source-date-epoch "${SOURCE_DATE_EPOCH}" \
693+ cli-proxy-api LICENSE README.md README_EN.md config.example.yaml
694+
695+ - name : Build no-plugin archive
696+ if : matrix.kind == 'no-plugin'
697+ shell : bash
698+ env :
699+ RELEASE_TAG : ${{ needs.check-version.outputs.release_tag }}
700+ CORE_TAG : ${{ needs.check-version.outputs.core_tag }}
701+ GOOS : ${{ matrix.goos }}
702+ GOARCH : ${{ matrix.goarch }}
703+ ASSET_ARCH : ${{ matrix.asset_arch }}
704+ ARCHIVE_FORMAT : ${{ matrix.archive_format }}
705+ ASSET_SUFFIX : ${{ matrix.asset_suffix }}
706+ BUILD_DATE : ${{ steps.prepare-core.outputs.build_date }}
707+ SOURCE_DATE_EPOCH : ${{ steps.prepare-core.outputs.source_date_epoch }}
708+ run : |
709+ set -euo pipefail
710+ cd upstream-core
711+
712+ binary_name="cli-proxy-api"
713+ if [ "${GOOS}" = "windows" ]; then
714+ binary_name="cli-proxy-api.exe"
715+ fi
716+
717+ archive_dir="dist/${GOOS}-${GOARCH}${ASSET_SUFFIX}/archive"
718+ archive_name="CLIProxyAPI_${RELEASE_TAG#v}_${GOOS}_${ASSET_ARCH}${ASSET_SUFFIX}.${ARCHIVE_FORMAT}"
719+ rm -rf "dist/${GOOS}-${GOARCH}${ASSET_SUFFIX}"
720+ mkdir -p "${archive_dir}"
721+
722+ CGO_ENABLED=0 GOOS="${GOOS}" GOARCH="${GOARCH}" go build -buildvcs=false -trimpath \
723+ -ldflags="-s -w -X main.Version=${RELEASE_TAG} -X main.Commit=release-${CORE_TAG} -X main.BuildDate=${BUILD_DATE}" \
724+ -o "${archive_dir}/${binary_name}" ./cmd/server/
725+
726+ if [ "${GOOS}" = "linux" ] && readelf -l "${archive_dir}/${binary_name}" | grep -q 'Requesting program interpreter'; then
727+ readelf -l "${archive_dir}/${binary_name}" >&2
728+ echo "no-plugin linux binary must not require a dynamic interpreter" >&2
729+ exit 1
730+ fi
731+
732+ cp LICENSE README.md README_EN.md config.example.yaml "${archive_dir}/"
733+ python ../customizations-repo/scripts/build/create_reproducible_archive.py \
734+ --format "${ARCHIVE_FORMAT}" \
735+ --output "dist/${archive_name}" \
736+ --root "${archive_dir}" \
737+ --source-date-epoch "${SOURCE_DATE_EPOCH}" \
738+ "${binary_name}" LICENSE README.md README_EN.md config.example.yaml
593739
594740 - name : Upload core binary assets
595741 uses : actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
@@ -823,7 +969,7 @@ jobs:
823969 echo "## Assets"
824970 echo
825971 echo "- Pro core default desktop/Linux binaries are built with CGO enabled and support dynamic library plugins when the target platform supports them."
826- echo "- Pro core release assets require dynamic plugin support because usage persistence is owned by \`pro-observability\` ."
972+ echo "- Pro core \`_no-plugin\` binaries are CGO-free portable builds for static or constrained environments ."
827973 echo "- Pro Docker images follow upstream with CGO-enabled Debian builds and dynamic library plugin support."
828974 echo "- Pro management panel is published as management.html for automatic panel updates."
829975 echo
0 commit comments