Преглед на файлове

[ci]新增多个 GitHub Actions 工作流,支持在不同分支上发布和同步相关的包,简化 CI/CD 流程。

dufu1991 преди 1 година
родител
ревизия
0de77f215a

+ 45 - 0
.github/workflows/publish-create.yml

@@ -0,0 +1,45 @@
+# 当分支 main 有 push 事件并且此次 push 包含了 packages/create-stdf/package.json 文件时,执行以下任务
+
+name: PUBLISH CREATE
+
+on:
+    push:
+        branches:
+            - main
+        paths:
+            - 'packages/create-stdf/package.json'
+
+jobs:
+    publish:
+        runs-on: ubuntu-latest
+        permissions:
+            id-token: write
+            contents: write
+
+        steps:
+            - name: Checkout
+              uses: actions/checkout@v4
+
+            - name: Setup Node.js environment
+              uses: actions/setup-node@v3
+              with:
+                  node-version: 20.x
+
+            # 将 LICENSE 复制到 packages/create-stdf 目录下
+            # cd packages/create-stdf 目录下
+            # 安装依赖 npm install
+            # 打包 npm run build
+            # 执行 npm run update
+            # 发布 create-stdf 到 npm
+            - name: Publish
+              run: |
+                  cp LICENSE packages/create-stdf/LICENSE
+                  cd packages/create-stdf
+                  npm install
+                  npm run build
+                  npm run update
+                  npm config set //registry.npmjs.org/:_authToken=$NODE_AUTH_TOKEN
+                  npm publish --provenance
+              env:
+                  CI: true
+                  NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

+ 43 - 0
.github/workflows/publish-icon-0.x.yml

@@ -0,0 +1,43 @@
+# 当分支 0.x 有 push 事件并且此次 push 包含了 packages/rollup-plugin-stdf-icon/package.json 文件时,执行以下任务
+
+name: PUBLISH ICON 0.x
+
+on:
+    push:
+        branches:
+            - 0.x
+        paths:
+            - 'packages/rollup-plugin-stdf-icon/package.json'
+
+jobs:
+    publish:
+        runs-on: ubuntu-latest
+        permissions:
+            id-token: write
+            contents: write
+
+        steps:
+            - name: Checkout
+              uses: actions/checkout@v4
+
+            - name: Setup Node.js environment
+              uses: actions/setup-node@v3
+              with:
+                  node-version: 20.x
+
+            # 将 LICENSE 复制到 packages/rollup-plugin-stdf-icon 目录下
+            # cd packages/rollup-plugin-stdf-icon 目录下
+            # 安装依赖 npm install
+            # 打包 npm run build
+            # 发布 rollup-plugin-stdf-icon 到 npm
+            - name: Publish
+              run: |
+                  cp LICENSE packages/rollup-plugin-stdf-icon/LICENSE
+                  cd packages/rollup-plugin-stdf-icon
+                  npm install
+                  npm run build 
+                  npm config set //registry.npmjs.org/:_authToken=$NODE_AUTH_TOKEN
+                  npm publish --provenance
+              env:
+                  CI: true
+                  NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

+ 43 - 0
.github/workflows/publish-icon.yml

@@ -0,0 +1,43 @@
+# 当分支 main 有 push 事件并且此次 push 包含了 packages/rollup-plugin-stdf-icon/package.json 文件时,执行以下任务
+
+name: PUBLISH ICON
+
+on:
+    push:
+        branches:
+            - main
+        paths:
+            - 'packages/rollup-plugin-stdf-icon/package.json'
+
+jobs:
+    publish:
+        runs-on: ubuntu-latest
+        permissions:
+            id-token: write
+            contents: write
+
+        steps:
+            - name: Checkout
+              uses: actions/checkout@v4
+
+            - name: Setup Node.js environment
+              uses: actions/setup-node@v3
+              with:
+                  node-version: 20.x
+
+            # 将 LICENSE 复制到 packages/rollup-plugin-stdf-icon 目录下
+            # cd packages/rollup-plugin-stdf-icon 目录下
+            # 安装依赖 npm install
+            # 打包 npm run build
+            # 发布 rollup-plugin-stdf-icon 到 npm
+            - name: Publish
+              run: |
+                  cp LICENSE packages/rollup-plugin-stdf-icon/LICENSE
+                  cd packages/rollup-plugin-stdf-icon
+                  npm install
+                  npm run build 
+                  npm config set //registry.npmjs.org/:_authToken=$NODE_AUTH_TOKEN
+                  npm publish --provenance
+              env:
+                  CI: true
+                  NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

+ 43 - 0
.github/workflows/publish-md-0.x.yml

@@ -0,0 +1,43 @@
+# 当分支 0.x 有 push 事件并且此次 push 包含了 packages/rollup-plugin-md-ts/package.json 文件时,执行以下任务
+
+name: PUBLISH MD 0.x
+
+on:
+    push:
+        branches:
+            - 0.x
+        paths:
+            - 'packages/rollup-plugin-md-ts/package.json'
+
+jobs:
+    publish:
+        runs-on: ubuntu-latest
+        permissions:
+            id-token: write
+            contents: write
+
+        steps:
+            - name: Checkout
+              uses: actions/checkout@v4
+
+            - name: Setup Node.js environment
+              uses: actions/setup-node@v3
+              with:
+                  node-version: 20.x
+
+            # 将 LICENSE 复制到 packages/rollup-plugin-md-ts 目录下
+            # cd packages/rollup-plugin-md-ts 目录下
+            # 安装依赖 npm install
+            # 打包 npm run build
+            # 发布 rollup-plugin-md-ts 到 npm
+            - name: Publish
+              run: |
+                  cp LICENSE packages/rollup-plugin-md-ts/LICENSE
+                  cd packages/rollup-plugin-md-ts
+                  npm install
+                  npm run build 
+                  npm config set //registry.npmjs.org/:_authToken=$NODE_AUTH_TOKEN
+                  npm publish --tag=0.x --provenance
+              env:
+                  CI: true
+                  NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

+ 43 - 0
.github/workflows/publish-md.yml

@@ -0,0 +1,43 @@
+# 当分支 main 有 push 事件并且此次 push 包含了 packages/rollup-plugin-md-ts/package.json 文件时,执行以下任务
+
+name: PUBLISH MD
+
+on:
+    push:
+        branches:
+            - main
+        paths:
+            - 'packages/rollup-plugin-md-ts/package.json'
+
+jobs:
+    publish:
+        runs-on: ubuntu-latest
+        permissions:
+            id-token: write
+            contents: write
+
+        steps:
+            - name: Checkout
+              uses: actions/checkout@v4
+
+            - name: Setup Node.js environment
+              uses: actions/setup-node@v3
+              with:
+                  node-version: 20.x
+
+            # 将 LICENSE 复制到 packages/rollup-plugin-md-ts 目录下
+            # cd packages/rollup-plugin-md-ts 目录下
+            # 安装依赖 npm install
+            # 打包 npm run build
+            # 发布 rollup-plugin-md-ts 到 npm
+            - name: Publish
+              run: |
+                  cp LICENSE packages/rollup-plugin-md-ts/LICENSE
+                  cd packages/rollup-plugin-md-ts
+                  npm install
+                  npm run build 
+                  npm config set //registry.npmjs.org/:_authToken=$NODE_AUTH_TOKEN
+                  npm publish --provenance
+              env:
+                  CI: true
+                  NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

+ 43 - 0
.github/workflows/publish-stdf-0.x.yml

@@ -0,0 +1,43 @@
+# 当分支 0.x 有 push 事件并且此次 push 包含了 packages/stdf/package.json 文件时,执行以下任务
+
+name: PUBLISH STDF 0.x
+
+on:
+    push:
+        branches:
+            - 0.x
+        paths:
+            - 'packages/stdf/package.json'
+
+jobs:
+    publish:
+        runs-on: ubuntu-latest
+        permissions:
+            id-token: write
+            contents: write
+
+        steps:
+            - name: Checkout
+              uses: actions/checkout@v4
+
+            - name: Setup Node.js environment
+              uses: actions/setup-node@v3
+              with:
+                  node-version: 20.x
+
+            # 将 README.md 和 LICENSE 复制到 packages/stdf 目录下
+            - name: Copy Files
+              run: |
+                  cp README.md packages/stdf/README.md
+                  cp LICENSE packages/stdf/LICENSE
+
+            # cd packages/stdf 目录下
+            # 发布 stdf 到 npm
+            - name: Publish
+              run: |
+                  cd packages/stdf
+                  npm config set //registry.npmjs.org/:_authToken=$NODE_AUTH_TOKEN
+                  npm publish --tag=0.x --provenance
+              env:
+                  CI: true
+                  NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

+ 53 - 0
.github/workflows/publish-stdf.yml

@@ -0,0 +1,53 @@
+# 当分支 main 有 push 事件并且此次 push 包含了 packages/stdf/package.json 文件时,执行以下任务
+
+name: PUBLISH STDF
+
+on:
+    push:
+        branches:
+            - main
+        paths:
+            - 'packages/stdf/package.json'
+
+jobs:
+    publish:
+        runs-on: ubuntu-latest
+        permissions:
+            id-token: write
+            contents: write
+
+        steps:
+            - name: Checkout
+              uses: actions/checkout@v4
+
+            - name: Setup Node.js environment
+              uses: actions/setup-node@v3
+              with:
+                  node-version: 20.x
+
+            # 将 README.md 和 LICENSE 复制到 packages/stdf 目录下
+            - name: Copy Files
+              run: |
+                  cp README.md packages/stdf/README.md
+                  cp LICENSE packages/stdf/LICENSE
+
+            # 打包 packages/rollup-plugin-stdf-icon 并构建
+            - name: Build rollup-plugin-stdf-icon
+              run: |
+                  cd packages/rollup-plugin-stdf-icon
+                  npm install
+                  npm run build
+                  cd ../../
+
+            # cd packages/stdf 目录下
+            # 发布 stdf 到 npm
+            - name: Publish
+              run: |
+                  cd packages/stdf
+                  npm install
+                  npm run package
+                  npm config set //registry.npmjs.org/:_authToken=$NODE_AUTH_TOKEN
+                  npm publish --provenance
+              env:
+                  CI: true
+                  NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

+ 34 - 0
.github/workflows/publish-vscode-0.x.yml

@@ -0,0 +1,34 @@
+# 当分支 0.x 有 push 事件并且此次 push 包含了 packages/vscode-extension/package.json 文件时,执行以下任务
+
+name: PUBLISH VSCODE 0.x
+
+on:
+    push:
+        branches:
+            - 0.x
+        paths:
+            - 'packages/vscode-extension/package.json'
+
+jobs:
+    publish:
+        runs-on: ubuntu-latest
+
+        steps:
+            - name: Checkout
+              uses: actions/checkout@v4
+
+            - name: Setup Node.js environment
+              uses: actions/setup-node@v3
+              with:
+                  node-version: 20.x
+
+            # cd 到 packages/vscode-extension 目录
+            # 执行 files
+            # 安装依赖
+            - name: Publish
+              run: |
+                  cd packages/vscode-extension
+                  npm run files
+                  npm install
+                  npm install -g @vscode/vsce
+                  vsce publish -p ${{ secrets.VSCE_TOKEN }}

+ 34 - 0
.github/workflows/publish-vscode.yml

@@ -0,0 +1,34 @@
+# 当分支 main 有 push 事件并且此次 push 包含了 packages/vscode-extension/package.json 文件时,执行以下任务
+
+name: PUBLISH VSCODE
+
+on:
+    push:
+        branches:
+            - main
+        paths:
+            - 'packages/vscode-extension/package.json'
+
+jobs:
+    publish:
+        runs-on: ubuntu-latest
+
+        steps:
+            - name: Checkout
+              uses: actions/checkout@v4
+
+            - name: Setup Node.js environment
+              uses: actions/setup-node@v3
+              with:
+                  node-version: 20.x
+
+            # cd 到 packages/vscode-extension 目录
+            # 执行 files
+            # 安装依赖
+            - name: Publish
+              run: |
+                  cd packages/vscode-extension
+                  npm run files
+                  npm install
+                  npm install -g @vscode/vsce
+                  vsce publish -p ${{ secrets.VSCE_TOKEN }}

+ 79 - 0
.github/workflows/releases-0.x.yml

@@ -0,0 +1,79 @@
+# 当分支 0.x 有 push 事件,并且此次 push 包含了 packages/stdf/package.json 文件时,执行以下任务
+
+name: RELEASES 0.x
+
+on:
+    push:
+        branches:
+            - 0.x
+        paths:
+            - 'packages/stdf/package.json'
+
+jobs:
+    releases:
+        runs-on: ubuntu-latest
+
+        steps:
+            - name: Checkout
+              uses: actions/checkout@v4
+
+            # 1. 读取 packages/stdf/package.json 中的 version 字段,作为 Releases tag 和 Releases title
+            - name: Get version
+              id: version
+              run: |
+                  echo version=$(cat packages/stdf/package.json | grep version | head -1 | awk -F: '{ print $2 }' | sed 's/[",]//g' | tr -d '[[:space:]]') >> $GITHUB_OUTPUT
+
+            # 2. 读取 doc/guide/changelog.md 的第一行内容中 ‘##’ 与 ‘<font’ 之间的内容,再去除空格
+            - name: Get md_version
+              id: md_version
+              run: |
+                  echo md_version=$(cat doc/guide/changelog.md | head -1 | sed 's/## //g' | sed 's/<font.*>//g' | tr -d '[[:space:]]') >> $GITHUB_OUTPUT
+
+            # 3. 读取 doc/guide/changelog_en.md 的第一行内容中 ‘##’ 与 ‘<font’ 之间的内容,再去除空格
+            - name: Get md_version_en
+              id: md_version_en
+              run: |
+                  echo md_version_en=$(cat doc/guide/changelog_en.md | head -1 | sed 's/## //g' | sed 's/<font.*>//g' | tr -d '[[:space:]]') >> $GITHUB_OUTPUT
+
+            # 4. 比较 Get version 与 Get md_version 和 Get md_version_en 三者的输出内容,如果不相同则此次不需要发布 Release,退出
+            - name: Check version
+              run: |
+                  if [[ ${{ steps.version.outputs.version }} != ${{ steps.md_version.outputs.md_version }} ]]; then
+                      echo "This is not a tag push. Skipping."
+                      exit 78
+                  fi
+                  if [[ ${{ steps.version.outputs.version }} != ${{ steps.md_version_en.outputs.md_version_en }} ]]; then
+                      echo "This is not a tag push. Skipping."
+                      exit 78
+                  fi
+
+            # 5. 读取 doc/guide/changelog.md 中前两个二级标题之间的内容,包含换行和空格
+            - name: Get changelog
+              id: changelog
+              run: |
+                  echo 'changelog<<EOF' >> $GITHUB_OUTPUT
+                  sed -n '1,/##/{/##/!p;}' doc/guide/changelog.md | sed '/^$/d' >> $GITHUB_OUTPUT
+                  echo 'EOF' >> $GITHUB_OUTPUT
+
+            # 6. 读取 doc/guide/changelog_en.md 中第一个二级标题与第二个二级标题之间的内容,包含换行和空格
+            - name: Get changelog_en
+              id: changelog_en
+              run: |
+                  echo 'changelog_en<<EOF' >> $GITHUB_OUTPUT
+                  sed -n '1,/##/{/##/!p;}' doc/guide/changelog_en.md | sed '/^$/d' >> $GITHUB_OUTPUT
+                  echo 'EOF' >> $GITHUB_OUTPUT
+
+            # 7. 作为 latest release 发布本次 Release,body 为 changelog 和 changelog_en 的合并内容,中间使用 --- 分隔
+            - name: Release
+              uses: actions/create-release@v1
+              env:
+                  GITHUB_TOKEN: ${{ secrets.STDF_GITHUB_TOKEN }}
+              with:
+                  tag_name: v${{ steps.version.outputs.version }}
+                  release_name: v${{ steps.version.outputs.version }}
+                  body: |
+                      ${{ steps.changelog.outputs.changelog }}
+                      ---
+                      ${{ steps.changelog_en.outputs.changelog_en }}
+                  draft: false
+                  prerelease: false

+ 70 - 0
.github/workflows/releases-site.yml

@@ -0,0 +1,70 @@
+# 将静态内容部署到 GitHub Pages 的简易工作流程
+name: RELEASES SITE
+
+on:
+    # 仅在推送到默认分支且 docs 文件夹有变动时触发工作流
+    push:
+        branches:
+            - main
+        paths:
+            - 'docs/**'
+    # 这个选项可以使你手动在 Action tab 页面触发工作流
+    workflow_dispatch:
+
+# 设置 GITHUB_TOKEN 的权限,以允许部署到 GitHub Pages。
+permissions:
+    contents: read
+    pages: write
+    id-token: write
+
+# 允许一个并发的部署
+concurrency:
+    group: 'pages'
+    cancel-in-progress: true
+
+jobs:
+    # 单次部署的工作描述
+    deploy:
+        environment:
+            name: github-pages
+            url: ${{ steps.deployment.outputs.page_url }}
+        runs-on: ubuntu-latest
+        steps:
+            - name: Checkout
+              uses: actions/checkout@v4
+
+            - name: Set up Bun
+              uses: oven-sh/setup-bun@v2
+              with:
+                  bun-version: 'latest'
+
+            - name: Build rollup-plugin-stdf-icon & stdf & rollup-plugin-md-ts
+              run: |
+                  cd packages/rollup-plugin-stdf-icon
+                  bun i
+                  bun run build
+                  cd ../stdf
+                  bun i
+                  bun run package
+                  cd ../rollup-plugin-md-ts
+                  bun i
+                  bun run build
+                  cd ../../
+
+            - name: Install dependencies and build
+              run: |
+                  cd docs/site
+                  bun i
+                  bun run build
+
+            - name: Setup Pages
+              uses: actions/configure-pages@v4
+
+            - name: Upload artifact
+              uses: actions/upload-pages-artifact@v3
+              with:
+                  path: './docs/site/build'
+
+            - name: Deploy to GitHub Pages
+              id: deployment
+              uses: actions/deploy-pages@v4

+ 79 - 0
.github/workflows/releases-stdf.yml

@@ -0,0 +1,79 @@
+# 当分支 main 有 push 事件,并且此次 push 包含了 packages/stdf/package.json 文件时,执行以下任务
+
+name: RELEASES STDF
+
+on:
+    push:
+        branches:
+            - main
+        paths:
+            - 'packages/stdf/package.json'
+
+jobs:
+    releases:
+        runs-on: ubuntu-latest
+
+        steps:
+            - name: Checkout
+              uses: actions/checkout@v4
+
+            # 1. 读取 packages/stdf/package.json 中的 version 字段,作为 Releases tag 和 Releases title
+            - name: Get version
+              id: version
+              run: |
+                  echo version=$(cat packages/stdf/package.json | grep version | head -1 | awk -F: '{ print $2 }' | sed 's/[",]//g' | tr -d '[[:space:]]') >> $GITHUB_OUTPUT
+
+            # 2. 读取 docs/mds/guide/changelog.md 的第一行内容中‘##’与‘<font’之间的内容,再去除空格
+            - name: Get md_version
+              id: md_version
+              run: |
+                  echo md_version=$(cat docs/mds/guide/changelog.md | head -1 | sed 's/## //g' | sed 's/<font.*>//g' | tr -d '[[:space:]]') >> $GITHUB_OUTPUT
+
+            # 3. 读取 docs/mds/guide/changelog_en.md 的第一行内容中‘##’与‘<font’之间的内容,再去除空格
+            - name: Get md_version_en
+              id: md_version_en
+              run: |
+                  echo md_version_en=$(cat docs/mds/guide/changelog_en.md | head -1 | sed 's/## //g' | sed 's/<font.*>//g' | tr -d '[[:space:]]') >> $GITHUB_OUTPUT
+
+            # 4. 比较 Get version 与 Get md_version 和 Get md_version_en 三者的输出内容,如果不相同则此次不需要发布 Release,退出
+            - name: Check version
+              run: |
+                  if [[ ${{ steps.version.outputs.version }} != ${{ steps.md_version.outputs.md_version }} ]]; then
+                      echo "This is not a tag push. Skipping."
+                      exit 78
+                  fi
+                  if [[ ${{ steps.version.outputs.version }} != ${{ steps.md_version_en.outputs.md_version_en }} ]]; then
+                      echo "This is not a tag push. Skipping."
+                      exit 78
+                  fi
+
+            # 5. 读取 docs/mds/guide/changelog.md 中前两个二级标题之间的内容,包含换行和空格
+            - name: Get changelog
+              id: changelog
+              run: |
+                  echo 'changelog<<EOF' >> $GITHUB_OUTPUT
+                  sed -n '1,/##/{/##/!p;}' docs/mds/guide/changelog.md | sed '/^$/d' >> $GITHUB_OUTPUT
+                  echo 'EOF' >> $GITHUB_OUTPUT
+
+            # 6. 读取 docs/mds/guide/changelog_en.md 中第一个二级标题与第二个二级标题之间的内容,包含换行和空格
+            - name: Get changelog_en
+              id: changelog_en
+              run: |
+                  echo 'changelog_en<<EOF' >> $GITHUB_OUTPUT
+                  sed -n '1,/##/{/##/!p;}' docs/mds/guide/changelog_en.md | sed '/^$/d' >> $GITHUB_OUTPUT
+                  echo 'EOF' >> $GITHUB_OUTPUT
+
+            # 7. 作为 latest release 发布本次 Release,body 为 changelog 和 changelog_en 的合并内容,中间使用 --- 分隔
+            - name: Release
+              uses: actions/create-release@v1
+              env:
+                  GITHUB_TOKEN: ${{ secrets.STDF_GITHUB_TOKEN }}
+              with:
+                  tag_name: v${{ steps.version.outputs.version }}
+                  release_name: v${{ steps.version.outputs.version }}
+                  body: |
+                      ${{ steps.changelog.outputs.changelog }}
+                      ---
+                      ${{ steps.changelog_en.outputs.changelog_en }}
+                  draft: false
+                  prerelease: false

+ 88 - 0
.github/workflows/sync-demo-0.x.yml

@@ -0,0 +1,88 @@
+# 当分支 0.x 有 push 事件,并且此次 push 包含了 demo 目录下的文件时触发,使用 GitHub Actions 执行
+
+name: SYNC DEMO 0.x
+
+on:
+    workflow_dispatch:
+    push:
+        branches:
+            - 0.x
+        paths:
+            - 'demo/**'
+jobs:
+    sync:
+        runs-on: ubuntu-latest
+        steps:
+            - name: Checkout
+              uses: actions/checkout@v4
+
+            # clone 仓库 github.com/any-tdf/stdf
+            - name: Clone stdf
+              uses: actions/checkout@v4
+              with:
+                  repository: any-tdf/stdf
+                  token: ${{ secrets.STDF_GITHUB_TOKEN }}
+                  path: stdf
+
+            # 切换到 0.x 分支
+            - name: Checkout 0.x
+              run: |
+                  git checkout 0.x
+
+            # 读取 packages/stdf/package.json 中的 version 字段,作为 stdf 的最新版本
+            - name: Get version
+              id: version
+              run: |
+                  echo version=$(cat packages/stdf/package.json | grep version | head -1 | awk -F: '{ print $2 }' | sed 's/[",]//g' | tr -d '[[:space:]]') >> $GITHUB_OUTPUT
+
+            # 读取 packages/rollup-plugin-stdf-icon/package.json 中的 version 字段,作为 rollup-plugin-stdf-icon 的最新版本
+            - name: Get rollup-plugin-stdf-icon version
+              id: rollup-plugin-stdf-icon-version
+              run: |
+                  echo rollup-plugin-stdf-icon-version=$(cat packages/rollup-plugin-stdf-icon/package.json | grep version | head -1 | awk -F: '{ print $2 }' | sed 's/[",]//g' | tr -d '[[:space:]]') >> $GITHUB_OUTPUT
+
+            # 将 stdf/LICENSE 复制到 stdf/demo 目录下
+            # cd 到 stdf/demo 文件内,初始化本地仓库
+            # 将 demo/package.json 内的 "svelte" 前面增加一行 "stdf": "^${{ steps.version.outputs.version }}",
+            # 将 demo/package.json 内的 file:../packages/rollup-plugin-stdf-icon 替换为 ^${{ steps.rollup-plugin-stdf-icon-version.outputs.rollup-plugin-stdf-icon-version }}
+            # 将 demo/src/routes/+layout.svelte 内的 "'../../../packages/stdf/components'"  替换为 "'stdf'"
+            # 将 demo/src/routes/+layout.svelte 内的 "'../../../packages/stdf/lang/zh_CN'"  替换为 "'stdf/lang/zh_CN'"
+            # 将 demo/src/routes/+layout.svelte 内的 "'../../../packages/stdf/lang/en_US'"  替换为 "'stdf/lang/en_US'"
+            # 将 demo/src/routes/+page.svelte 内的 "'../../../packages/stdf/components'"  替换为 "'stdf/lang/en_US'"
+            # 将 demo/src/routes/en_US/**/*.svelte 内的 "'../../../../../packages/stdf/components'"  替换为 "'stdf'"
+            # 将 demo/src/routes/zh_CN/**/*.svelte 内的 "'../../../../../packages/stdf/components'"  替换为 "'stdf'"
+            # 将 demo/src/routes/components/ThemeSwitch.svelte 内的 "'../../../../packages/stdf/theme'" 替换为 "'stdf/theme'"
+            # 讲 demo/src/data/themes/index.js 内的 "'../../../../packages/stdf/theme'" 替换为 "'stdf/theme'"
+            # 将 demo/tailwind.config.js 内的 "'../packages/stdf/**/*.svelte'"  替换为 "./node_modules/stdf/**/*.svelte'",注意其中特殊符号的转义
+            # 将 demo 目录下的所有文件提交到本地仓库,提交信息为 Github Actions auto commit: update demo from stdf.
+            - name: Init stdf demo
+              run: |
+                  cp stdf/LICENSE stdf/demo/LICENSE
+                  cd stdf/demo
+                  git init
+                  git config --global user.name 'GitHub Actions'
+                  git config --global user.email 'GitHub Actions'
+                  sed -i 's/"svelte"/"stdf": "^${{ steps.version.outputs.version }}",\n"svelte"/' package.json
+                  sed -i 's/"svelte"/\t\t"svelte"/' package.json
+                  sed -i 's#file:../packages/rollup-plugin-stdf-icon#^${{ steps.rollup-plugin-stdf-icon-version.outputs.rollup-plugin-stdf-icon-version }}#' package.json
+                  sed -i 's#../../../packages/stdf/components#stdf#' src/routes/+layout.svelte
+                  sed -i 's#../../../packages/stdf/lang/zh_CN#stdf/lang/zh_CN#' src/routes/+layout.svelte
+                  sed -i 's#../../../packages/stdf/lang/en_US#stdf/lang/en_US#' src/routes/+layout.svelte
+                  sed -i 's#../../../packages/stdf/components#stdf#' src/routes/+page.svelte
+                  sed -i 's#../../../../../packages/stdf/components#stdf#' src/routes/en_US/**/*.svelte
+                  sed -i 's#../../../../../packages/stdf/components#stdf#' src/routes/zh_CN/**/*.svelte
+                  sed -i 's#../../../../packages/stdf/theme#stdf/theme#' src/routes/components/ThemeSwitch.svelte
+                  sed -i 's#../../../../packages/stdf/theme#stdf/theme#' src/data/themes/index.js
+                  sed -i 's|'\''../packages/stdf/\*\*/\*.svelte'\''|'\''.\/node_modules\/stdf\/\*\*\/\*.svelte'\''|g' tailwind.config.js
+                  git add .
+                  git commit -m "Github Actions auto commit: update demo from stdf."
+
+            # 将修改内容推送到 git@github.com:any-tdf/0.x-demo-stdf.git 的 0.x 分支
+            - name: Push to 0.x-demo-stdf
+              uses: ad-m/github-push-action@master
+              with:
+                  github_token: ${{ secrets.STDF_GITHUB_TOKEN }}
+                  branch: 0.x
+                  force: true
+                  directory: stdf/demo
+                  repository: any-tdf/0.x-demo-stdf

+ 58 - 0
.github/workflows/sync-demo.yml

@@ -0,0 +1,58 @@
+# 当分支 main 分支有 push 事件,并且此次 push 包含了 packages/stdf 目录下的文件时触发,使用 GitHub Actions 执行
+
+name: SYNC DEMO
+
+on:
+    push:
+        branches:
+            - main
+        paths:
+            - 'packages/stdf/**'
+
+jobs:
+    sync:
+        runs-on: ubuntu-latest
+        steps:
+            - name: Checkout
+              uses: actions/checkout@v4
+
+            # clone 仓库 github.com/any-tdf/stdf
+            - name: Clone stdf
+              uses: actions/checkout@v4
+              with:
+                  repository: any-tdf/stdf
+                  token: ${{ secrets.STDF_GITHUB_TOKEN }}
+                  path: stdf
+
+            # 读取 packages/rollup-plugin-stdf-icon 中的 package.json 文件,获取 version 的值并存储到 version 变量中
+            - name: Read Icon version
+              run: |
+                  version=$(cat packages/rollup-plugin-stdf-icon/package.json | grep -E '"version":' | awk -F'"' '{print $4}')
+                  echo "version: $version"
+                  echo "version=${version}" >> $GITHUB_ENV
+            # 初始化 stdf demo 仓库
+            # 将 stdf/LICENSE 复制到 stdf/packages/stdf/LICENSE
+            # 将 stdf/README.md 复制到 stdf/packages/stdf/README.md
+            # 将上一步获取的 version 字段前面增加 ^ 号,将 packages/stdf/package.json 中的 file:../rollup-plugin-stdf-icon 替换为 ^version
+            - name: Init stdf demo
+              run: |
+                  cp stdf/LICENSE stdf/packages/stdf/LICENSE
+                  cp stdf/README.md stdf/packages/stdf/README.md
+                  sed -i "s|file:../rollup-plugin-stdf-icon|^${version}|g" stdf/packages/stdf/package.json
+                  cd stdf/packages/stdf
+                  git init
+                  git config --global user.name 'GitHub Actions'
+                  git config --global user.email 'GitHub Actions'
+
+                  git add .
+                  git commit -m "Github Actions auto commit: update demo from stdf."
+
+            # 将修改内容推送到 git@github.com:any-tdf/demo-stdf.git 的 main 分支
+            - name: Push to demo-stdf
+              uses: ad-m/github-push-action@master
+              with:
+                  github_token: ${{ secrets.STDF_GITHUB_TOKEN }}
+                  branch: main
+                  force: true
+                  directory: stdf/packages/stdf
+                  repository: any-tdf/demo-stdf

+ 20 - 0
.github/workflows/sync-gitee.yml

@@ -0,0 +1,20 @@
+# 每天 3 点自动将 GitHub 仓库同步到 Gitee
+
+name: SYNC GITEE
+
+on:
+  schedule:
+    - cron: '0 3 * * *'
+
+jobs:
+  sync:
+    runs-on: ubuntu-latest
+    steps:
+      - name: Black list
+        uses: Yikun/hub-mirror-action@master
+        with:
+          src: github/any-tdf
+          dst: gitee/dufu1991
+          dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
+          dst_token: ${{ secrets.GITEE_TOKEN }}
+          static_list: 'stdf'