#!/bin/bash ############################################################################### # fmode-brightdata-api CDN上传脚本 # # 功能: # 1. 上传打包后的文件到七牛云CDN # 2. 支持上传指定版本或最新版本 # # 使用方法: # chmod +x upload.sh # ./upload.sh # 上传最新版本 # ./upload.sh 1.0.0 # 上传指定版本 # # 前置条件: # 需要安装并配置 qshell 工具 # 参考: https://developer.qiniu.com/kodo/tools/1302/qshell ############################################################################### # 设置错误时退出 set -e # 颜色输出 GREEN='\033[0;32m' YELLOW='\033[1;33m' RED='\033[0;31m' BLUE='\033[0;34m' NC='\033[0m' # No Color echo -e "${GREEN}==================================================${NC}" echo -e "${GREEN} fmode-brightdata-api CDN上传脚本${NC}" echo -e "${GREEN}==================================================${NC}" # 检查qshell是否安装 if ! command -v qshell &> /dev/null; then echo -e "${RED}错误: qshell 未安装${NC}" echo -e "${YELLOW}请先安装 qshell: https://developer.qiniu.com/kodo/tools/1302/qshell${NC}" exit 1 fi # 检查是否在正确的目录 if [ ! -f "package.json" ]; then echo -e "${RED}错误: package.json 不存在${NC}" echo -e "${YELLOW}请确保在 fmode-brightdata-api 目录下运行此脚本${NC}" exit 1 fi # 获取版本号(从参数或package.json) if [ -n "$1" ]; then VERSION="$1" echo -e "${YELLOW}使用指定版本: ${VERSION}${NC}" else VERSION=$(node -p "require('./package.json').version" 2>/dev/null || echo "1.0.0") echo -e "${YELLOW}使用package.json版本: ${VERSION}${NC}" fi # 检查dist目录是否存在 DIST_DIR="dist/${VERSION}" if [ ! -d "${DIST_DIR}" ]; then echo -e "${RED}错误: ${DIST_DIR} 目录不存在${NC}" echo -e "${YELLOW}请先运行 ./build.sh 构建项目${NC}" exit 1 fi # CDN配置 BUCKET="nova-repos" CDN_PREFIX="x/fmode-brightdata-api/${VERSION}" echo "" echo -e "${BLUE}上传配置:${NC}" echo -e " Bucket: ${BUCKET}" echo -e " CDN路径: ${CDN_PREFIX}" echo -e " 本地目录: ${DIST_DIR}" echo "" # 确认上传 read -p "确认上传到CDN?(y/N) " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then echo -e "${YELLOW}取消上传${NC}" exit 0 fi echo "" echo -e "${YELLOW}开始上传文件...${NC}" # 上传文件列表 FILES=( "fmode-brightdata-api.js" "fmode-brightdata-api.js.map" "fmode-brightdata-api.min.js" "fmode-brightdata-api.min.js.map" "fmode-brightdata-api.cjs" "fmode-brightdata-api.cjs.map" "fmode-brightdata-api.min.cjs" "fmode-brightdata-api.min.cjs.map" ) UPLOAD_COUNT=0 FAILED_COUNT=0 # 上传每个文件 for FILE in "${FILES[@]}"; do LOCAL_FILE="${DIST_DIR}/${FILE}" if [ ! -f "${LOCAL_FILE}" ]; then echo -e "${YELLOW}⊘ 跳过: ${FILE} (文件不存在)${NC}" continue fi CDN_KEY="${CDN_PREFIX}/${FILE}" echo -e "${BLUE}↑ 上传: ${FILE}${NC}" if qshell rput "${BUCKET}" "${CDN_KEY}" "${LOCAL_FILE}" --overwrite; then echo -e "${GREEN}✓ 成功: ${FILE}${NC}" UPLOAD_COUNT=$((UPLOAD_COUNT + 1)) else echo -e "${RED}✗ 失败: ${FILE}${NC}" FAILED_COUNT=$((FAILED_COUNT + 1)) fi echo "" done # 显示结果 echo -e "${GREEN}==================================================${NC}" if [ $FAILED_COUNT -eq 0 ]; then echo -e "${GREEN} 上传完成!${NC}" else echo -e "${YELLOW} 上传完成(有${FAILED_COUNT}个文件失败)${NC}" fi echo -e "${GREEN}==================================================${NC}" echo "" echo -e "${BLUE}上传统计:${NC}" echo -e " 成功: ${UPLOAD_COUNT} 个文件" echo -e " 失败: ${FAILED_COUNT} 个文件" echo "" echo -e "${YELLOW}CDN访问地址:${NC}" echo -e " ${GREEN}# ESM (生产环境)${NC}" echo -e " https://repos.fmode.cn/${CDN_PREFIX}/fmode-brightdata-api.min.js" echo "" echo -e " ${GREEN}# ESM (开发环境)${NC}" echo -e " https://repos.fmode.cn/${CDN_PREFIX}/fmode-brightdata-api.js" echo "" echo -e " ${GREEN}# CJS (生产环境)${NC}" echo -e " https://repos.fmode.cn/${CDN_PREFIX}/fmode-brightdata-api.min.cjs" echo "" echo -e "${YELLOW}使用示例:${NC}" echo -e " ${GREEN}# Deno / Node.js ESM${NC}" echo -e " import { createPinterestRouter } from 'https://repos.fmode.cn/${CDN_PREFIX}/fmode-brightdata-api.min.js?code=xxxxxxx';" echo "" echo -e " ${GREEN}# Node.js CJS${NC}" echo -e " const { createPinterestRouter } = require('https://repos.fmode.cn/${CDN_PREFIX}/fmode-brightdata-api.min.cjs?code=xxxxxxx');" echo "" if [ $FAILED_COUNT -eq 0 ]; then exit 0 else exit 1 fi