11#! /usr/bin/env bash
2- # Binary install script for the OSS release layout (see packages/core/src/install/cdn.ts).
2+ # Binary install script for the OSS release
33#
4- # curl -fsSL https://bailian-wiki.oss-cn-hangzhou.aliyuncs. com/release /install.sh | bash
5- # BAILIAN_CHANNEL=latest bash install.sh
6- # BAILIAN_CHANNEL=sync-release bash install.sh
7- # BAILIAN_VERSION=1.10.1 bash install.sh
4+ # curl -fsSL https://bailian.aliyun. com/install.sh | bash
5+ # bash install.sh --channel sync-release # local / channel verify
6+ # bash install.sh --version 1.10.1
7+ # curl -fsSL …/ install.sh | bash -s -- --channel sync-release
88#
9- # Layout:
10- # {CDN}/{channel}.json —— rolling manifest (version + assets)
11- # {CDN}/v{version}/{file}.zip —— per-platform zip
129set -euo pipefail
1310
1411CDN_BASE=" ${BAILIAN_CLI_CDN:- https:// bailian-wiki.oss-cn-hangzhou.aliyuncs.com/ release} "
1512CDN_BASE=" ${CDN_BASE%/ } "
16- CHANNEL=" ${BAILIAN_CHANNEL:- latest } "
13+ CHANNEL=" ${BAILIAN_CHANNEL:- } "
1714VERSION=" ${BAILIAN_VERSION:- } "
1815BIN_DIR=" ${BAILIAN_BIN_DIR:- ${HOME} / .local/ bin} "
1916SHARE_DIR=" ${BAILIAN_SHARE_DIR:- ${HOME} / .local/ share/ bailian-cli} "
@@ -22,10 +19,61 @@ CONFIG_DIR="${BAILIAN_CONFIG_DIR:-${HOME}/.bailian}"
2219ZIP_FILE=" "
2320ZIP_SHA256=" "
2421INNER_NAME=" "
22+ MANIFEST_LABEL=" manifest.json"
2523
2624log () { printf ' %s\n' " $* " >&2 ; }
2725die () { log " error: $* " ; exit 1; }
2826
27+ usage () {
28+ cat >&2 << 'EOF '
29+ Usage: install.sh [--channel <name>] [--version <ver>] [--cdn <url>] [--help]
30+
31+ --channel <name> Install from {CDN}/{name}.json (default: manifest.json)
32+ --version <ver> Pin a release version (checksum via SHA256SUMS if needed)
33+ --cdn <url> Override CDN base (default / BAILIAN_CLI_CDN)
34+ --help Show this help
35+
36+ Env fallbacks: BAILIAN_CHANNEL, BAILIAN_VERSION, BAILIAN_CLI_CDN,
37+ BAILIAN_BIN_DIR, BAILIAN_SHARE_DIR, BAILIAN_CONFIG_DIR
38+ EOF
39+ }
40+
41+ parse_args () {
42+ while [[ $# -gt 0 ]]; do
43+ case " $1 " in
44+ --channel|-c)
45+ [[ $# -ge 2 ]] || die " $1 requires a value"
46+ CHANNEL=" $2 "
47+ shift 2
48+ ;;
49+ --version)
50+ [[ $# -ge 2 ]] || die " $1 requires a value"
51+ VERSION=" $2 "
52+ shift 2
53+ ;;
54+ --cdn)
55+ [[ $# -ge 2 ]] || die " $1 requires a value"
56+ CDN_BASE=" ${2%/ } "
57+ shift 2
58+ ;;
59+ --help|-h)
60+ usage
61+ exit 0
62+ ;;
63+ --)
64+ shift
65+ break
66+ ;;
67+ -* )
68+ die " unknown option: $1 (try --help)"
69+ ;;
70+ * )
71+ die " unexpected argument: $1 (try --help)"
72+ ;;
73+ esac
74+ done
75+ }
76+
2977need_cmd () {
3078 command -v " $1 " > /dev/null 2>&1 || die " required command not found: $1 "
3179}
@@ -141,7 +189,13 @@ resolve_asset() {
141189 need_cmd curl
142190 local manifest_path parsed manifest_url
143191 manifest_path=" $( mktemp) "
144- manifest_url=" ${CDN_BASE} /${CHANNEL} .json"
192+ if [[ -n " ${CHANNEL} " && " ${CHANNEL} " != " latest" && " ${CHANNEL} " != " stable" ]]; then
193+ MANIFEST_LABEL=" ${CHANNEL} .json"
194+ manifest_url=" ${CDN_BASE} /${CHANNEL} .json"
195+ else
196+ MANIFEST_LABEL=" manifest.json"
197+ manifest_url=" ${CDN_BASE} /manifest.json"
198+ fi
145199 log " Fetching ${manifest_url} "
146200 if ! curl -fsSL " ${manifest_url} " -o " ${manifest_path} " ; then
147201 rm -f " ${manifest_path} "
@@ -150,7 +204,7 @@ resolve_asset() {
150204
151205 if ! parsed=" $( parse_manifest_asset " ${manifest_path} " " ${PLATFORM_KEY} " " ${VERSION} " ) " ; then
152206 rm -f " ${manifest_path} "
153- die " failed to parse asset metadata from ${CHANNEL} .json for ${PLATFORM_KEY} "
207+ die " failed to parse asset metadata from ${MANIFEST_LABEL} for ${PLATFORM_KEY} "
154208 fi
155209 rm -f " ${manifest_path} "
156210
@@ -160,7 +214,7 @@ resolve_asset() {
160214 INNER_NAME=" $( printf ' %s\n' " ${parsed} " | cut -f4) "
161215
162216 [[ -n " ${VERSION} " && -n " ${ZIP_FILE} " && -n " ${INNER_NAME} " ]] \
163- || die " incomplete asset metadata from ${CHANNEL} .json "
217+ || die " incomplete asset metadata from ${MANIFEST_LABEL} "
164218}
165219
166220sha256_file () {
@@ -253,11 +307,12 @@ warn_npm_conflict() {
253307}
254308
255309main () {
310+ parse_args " $@ "
256311 need_cmd curl
257312 need_cmd uname
258313 detect_os_arch
259314 resolve_asset
260- log " Installing bailian-cli ${VERSION} (${PLATFORM_KEY} ) from ${CDN_BASE} [${CHANNEL } ]"
315+ log " Installing bailian-cli ${VERSION} (${PLATFORM_KEY} ) from ${CDN_BASE} [${MANIFEST_LABEL } ]"
261316 download_and_install
262317 warn_npm_conflict
263318 warn_path
0 commit comments