fix(payment): 支付插件 - 修复跨平台构建与运行时缓存 (#402)
This commit is contained in:
@@ -2,21 +2,69 @@
|
||||
set -eu
|
||||
|
||||
root_dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
|
||||
repo_dir=$(CDPATH= cd -- "$root_dir/.." && pwd)
|
||||
payment_plugins="official-payment-wechat-native official-payment-alipay-page"
|
||||
payments_only=false
|
||||
|
||||
node "$root_dir/embed-documentation.mjs"
|
||||
if [ "${1:-}" = "--payments-only" ]; then
|
||||
payments_only=true
|
||||
shift
|
||||
fi
|
||||
if [ "$#" -ne 0 ]; then
|
||||
echo "usage: $0 [--payments-only]" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
if [ "$payments_only" = true ]; then
|
||||
node "$root_dir/embed-documentation.mjs" $payment_plugins
|
||||
else
|
||||
node "$root_dir/embed-documentation.mjs"
|
||||
fi
|
||||
|
||||
# Payment backends are executable plugin payloads. They are compiled outside
|
||||
# the host binary and then included under backend/provider in the package.
|
||||
repo_dir=$(CDPATH= cd -- "$root_dir/.." && pwd)
|
||||
for payment_plugin in official-payment-wechat-native official-payment-alipay-page; do
|
||||
mkdir -p "$root_dir/$payment_plugin/backend"
|
||||
done
|
||||
(cd "$repo_dir/backend" && go build -trimpath -ldflags='-s -w' -o "$root_dir/official-payment-wechat-native/backend/provider" ./cmd/payment-wechat)
|
||||
(cd "$repo_dir/backend" && go build -trimpath -ldflags='-s -w' -o "$root_dir/official-payment-alipay-page/backend/provider" ./cmd/payment-alipay)
|
||||
payment_goos=${PAYMENT_PLUGIN_GOOS:-$(go env GOOS)}
|
||||
payment_goarch=${PAYMENT_PLUGIN_GOARCH:-$(go env GOARCH)}
|
||||
payment_cgo=${PAYMENT_PLUGIN_CGO_ENABLED:-0}
|
||||
|
||||
for manifest in "$root_dir"/*/manifest.json; do
|
||||
package_dir=${manifest%/manifest.json}
|
||||
package_id=${package_dir##*/}
|
||||
case "$payment_cgo" in
|
||||
0|1) ;;
|
||||
*)
|
||||
echo "PAYMENT_PLUGIN_CGO_ENABLED must be 0 or 1" >&2
|
||||
exit 2
|
||||
;;
|
||||
esac
|
||||
|
||||
build_payment_provider() {
|
||||
package_id=$1
|
||||
command_path=$2
|
||||
output_file="$root_dir/$package_id/backend/provider"
|
||||
temporary_file="$output_file.tmp"
|
||||
|
||||
mkdir -p "$(dirname -- "$output_file")"
|
||||
rm -f "$temporary_file"
|
||||
(
|
||||
cd "$repo_dir/backend"
|
||||
CGO_ENABLED="$payment_cgo" \
|
||||
GOOS="$payment_goos" \
|
||||
GOARCH="$payment_goarch" \
|
||||
go build -trimpath -ldflags='-s -w' -o "$temporary_file" "$command_path"
|
||||
)
|
||||
mv "$temporary_file" "$output_file"
|
||||
chmod 0755 "$output_file"
|
||||
|
||||
build_info=$(go version -m "$output_file")
|
||||
printf '%s\n' "$build_info" | grep -F "GOOS=$payment_goos" >/dev/null
|
||||
printf '%s\n' "$build_info" | grep -F "GOARCH=$payment_goarch" >/dev/null
|
||||
printf '%s\n' "$build_info" | grep -F "CGO_ENABLED=$payment_cgo" >/dev/null
|
||||
}
|
||||
|
||||
build_payment_provider official-payment-wechat-native ./cmd/payment-wechat
|
||||
build_payment_provider official-payment-alipay-page ./cmd/payment-alipay
|
||||
|
||||
package_plugin() {
|
||||
package_id=$1
|
||||
package_dir="$root_dir/$package_id"
|
||||
output_file="$root_dir/$package_id.yingce-plugin"
|
||||
temporary_file="$root_dir/.$package_id.yingce-plugin.tmp"
|
||||
rm -f "$temporary_file"
|
||||
@@ -25,4 +73,21 @@ for manifest in "$root_dir"/*/manifest.json; do
|
||||
find manifest.json README.md docs assets web backend LICENSE -type f 2>/dev/null | LC_ALL=C sort | zip -X -q "$temporary_file" -@
|
||||
)
|
||||
mv "$temporary_file" "$output_file"
|
||||
}
|
||||
|
||||
if [ "$payments_only" = true ]; then
|
||||
for payment_plugin in $payment_plugins; do
|
||||
package_plugin "$payment_plugin"
|
||||
done
|
||||
exit 0
|
||||
fi
|
||||
|
||||
for payment_plugin in $payment_plugins; do
|
||||
mkdir -p "$root_dir/$payment_plugin/backend"
|
||||
done
|
||||
|
||||
for manifest in "$root_dir"/*/manifest.json; do
|
||||
package_dir=${manifest%/manifest.json}
|
||||
package_id=${package_dir##*/}
|
||||
package_plugin "$package_id"
|
||||
done
|
||||
|
||||
Reference in New Issue
Block a user