name: Node.js CI on: push: tags: - 'v*' # 匹配所有 tag(也可改为 v* 等更具体的匹配) jobs: build-and-test: runs-on: ubuntu-latest steps: - name: 检出代码 uses: actions/checkout@v3 - name: 设置 Node.js uses: actions/setup-node@v3 with: node-version: '22' - name: 缓存 npm 模块 uses: actions/cache@v4 with: path: ~/.npm key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-npm- - name: 安装依赖 run: npm install --force - name: 构建项目(可选) run: npm run build - name: 打包构建产物 run: | mkdir -p build-out cp -r dist build-out/ cp -r public build-out/ cp server.js index.html package.json build-out/ zip -r output.zip build-out - name: 设置 SSH 私钥 run: | mkdir -p ~/.ssh echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519 chmod 600 ~/.ssh/id_ed25519 echo "Host *" > ~/.ssh/config echo " StrictHostKeyChecking no" >> ~/.ssh/config echo " UserKnownHostsFile=/dev/null" >> ~/.ssh/config - name: 获取 Tag 名称 id: extract_tag run: echo "tag=${GITHUB_REF##*/}" >> $GITHUB_OUTPUT - name: 上传产物到远程服务器 run: | TAG=${{ steps.extract_tag.outputs.tag }} scp output.zip default@10.0.0.3:/srv/publish/ao3-mirror-ssr/${TAG}.zip ssh default@10.0.0.3 sh -c 'cd /srv/publish/ao3-mirror-ssr/; rm -f latest.zip; ln -s ${TAG}.zip latest.zip'