Skip to content

feat: no cpu defense #10

feat: no cpu defense

feat: no cpu defense #10

Workflow file for this run

name: Build VPM Repository Listing
on:
push:
branches: [master]
workflow_dispatch:
permissions:
contents: write
pages: write
id-token: write
concurrency:
group: 'pages'
cancel-in-progress: false
env:
GITHUB_OWNER: ${{ github.repository_owner }}
GITHUB_REPO: ${{ github.event.repository.name }}
jobs:
build-listing:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Build VPM Listing
run: |
set -e
# GitHub Pages URL 全部小写
OWNER_LOWER=$(echo "${GITHUB_OWNER}" | tr '[:upper:]' '[:lower:]')
REPO_URL="https://${OWNER_LOWER}.github.io/${GITHUB_REPO}"
# 定义所有包的目录(相对于仓库根)
PACKAGE_DIRS=(
"Assets/UnityBox/AdvancedCostumeController"
"Assets/UnityBox/BlendshapeControllerGenerator"
"Assets/UnityBox/AvatarColliderMonitor"
"Assets/UnityBox/BuildPipelineLogger"
"Assets/UnityBox/AvatarSecuritySystem"
)
mkdir -p _site
# 获取当前 tag(如有),否则使用 package.json 中的 version
GIT_TAG="${GITHUB_REF_NAME}"
# 构建每个包的 zip
PACKAGES_JSON="{"
FIRST_PKG=true
for pkg_dir in "${PACKAGE_DIRS[@]}"; do
if [ ! -f "${pkg_dir}/package.json" ]; then
echo "跳过 ${pkg_dir}:未找到 package.json"
continue
fi
PKG_NAME=$(jq -r '.name' "${pkg_dir}/package.json")
PKG_VERSION=$(jq -r '.version' "${pkg_dir}/package.json")
PKG_DISPLAY_NAME=$(jq -r '.displayName' "${pkg_dir}/package.json")
# 如果是 tag 推送,用 tag 作为版本号(去掉前缀 v)
if [[ "${GITHUB_REF}" == refs/tags/* ]]; then
TAG_VERSION="${GIT_TAG#v}"
# 更新 package.json 中的版本号
jq --arg v "$TAG_VERSION" '.version = $v' "${pkg_dir}/package.json" > "${pkg_dir}/package.json.tmp"
mv "${pkg_dir}/package.json.tmp" "${pkg_dir}/package.json"
PKG_VERSION="$TAG_VERSION"
fi
echo "打包: ${PKG_NAME} v${PKG_VERSION}"
# 创建 zip 包
ZIP_NAME="${PKG_NAME}-${PKG_VERSION}.zip"
(cd "${pkg_dir}" && zip -r "../../../_site/${ZIP_NAME}" . -x "*.meta" -x "*/Generated/*")
ZIP_URL="${REPO_URL}/${ZIP_NAME}"
ZIP_SHA256=$(sha256sum "_site/${ZIP_NAME}" | cut -d' ' -f1)
# 读取完整的 package.json 并添加 zipSHA256 和 url
PKG_JSON=$(jq --arg url "$ZIP_URL" --arg sha "$ZIP_SHA256" \
'. + {"zipSHA256": $sha, "url": $url}' "${pkg_dir}/package.json")
# 构建 packages 对象
if [ "$FIRST_PKG" = true ]; then
FIRST_PKG=false
else
PACKAGES_JSON="${PACKAGES_JSON},"
fi
PACKAGES_JSON="${PACKAGES_JSON}\"${PKG_NAME}\":{\"versions\":{\"${PKG_VERSION}\":${PKG_JSON}}}"
done
PACKAGES_JSON="${PACKAGES_JSON}}"
# 构建最终的 VPM listing vpm.json
printf '{\n "name": "UnityBox",\n "id": "top.sealoong.unitybox.listing",\n "url": "%s/vpm.json",\n "author": "SeaLoong",\n "packages": %s\n}' "${REPO_URL}" "${PACKAGES_JSON}" > _site/vpm.json
# 使用 jq 格式化
jq '.' _site/vpm.json > _site/vpm.json.tmp && mv _site/vpm.json.tmp _site/vpm.json
echo "VPM listing 已构建完成"
cat _site/vpm.json
# 生成 index.html 跳转页面,用于绕过 GitHub Markdown 对自定义协议的过滤
VCC_URL="vcc://vpm/addRepo?url=${REPO_URL}/vpm.json"
cat > _site/index.html << 'PAGE_EOF'
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>UnityBox VPM Repository</title>
<style>
body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; display: flex; justify-content: center; align-items: center; min-height: 100vh; margin: 0; background: #f6f8fa; }
.card { background: white; border-radius: 12px; padding: 40px; box-shadow: 0 2px 12px rgba(0,0,0,0.1); text-align: center; max-width: 480px; }
h1 { margin: 0 0 16px; font-size: 24px; color: #24292f; }
p { color: #57606a; margin: 0 0 24px; line-height: 1.6; }
.btn { display: inline-block; padding: 12px 32px; background: #2ea44f; color: white; text-decoration: none; border-radius: 8px; font-size: 16px; font-weight: 600; transition: background 0.2s; }
.btn:hover { background: #2c974b; }
.manual { margin-top: 24px; padding-top: 20px; border-top: 1px solid #d0d7de; }
code { background: #f6f8fa; padding: 4px 8px; border-radius: 4px; font-size: 14px; color: #0969da; word-break: break-all; }
</style>
</head>
<body>
<div class="card">
<h1>UnityBox VPM Repository</h1>
<p>点击下方按钮将 UnityBox 仓库添加到 VCC / ALCOM</p>
PAGE_EOF
# 动态插入带有实际 URL 的按钮和手动添加部分
cat >> _site/index.html << PAGE_EOF
<a class="btn" href="${VCC_URL}">添加到 VCC</a>
<div class="manual">
<p>或手动添加 VPM 源地址:</p>
<code>${REPO_URL}/vpm.json</code>
</div>
</div>
</body>
</html>
PAGE_EOF
echo "index.html 跳转页面已生成"
- name: Upload Pages artifact
uses: actions/upload-pages-artifact@v3
with:
path: _site
deploy:
needs: build-listing
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4