Carson 2 months ago
parent
commit
6c30cca797
1 changed files with 170 additions and 0 deletions
  1. 170 0
      .github/workflows/deploy-prod.yml

+ 170 - 0
.github/workflows/deploy-prod.yml

@@ -0,0 +1,170 @@
+name: Deploy Prod
+
+on:
+  workflow_dispatch:
+    inputs:
+      ref:
+        description: "部署哪个ref, e.g.: main/61fas4/v1.0.0"
+        required: true
+        default: "main"
+
+concurrency:
+  group: ${{ github.workflow }}
+  cancel-in-progress: true
+
+jobs:
+  build:
+    runs-on: ubuntu-latest
+    name: Build and Deploy
+    permissions:
+      contents: write
+    outputs:
+      tag: ${{ steps.generate_release_tag.outputs.next_release_tag }}
+      release_url: ${{ steps.create_release.outputs.html_url }}
+
+    steps:
+      # - name: Generate release tag
+      #   id: generate_release_tag
+      #   uses: amitsingh-007/next-release-tag@v6.0.0
+      #   with:
+      #     github_token: ${{ secrets.GITHUB_TOKEN }}
+      #     tag_prefix: "v"
+      #     tag_template: "yyyy.mm.dd.i"
+
+      # - name: Create Release
+      #   id: create_release
+      #   uses: actions/create-release@v1
+      #   env:
+      #     GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+      #   with:
+      #     tag_name: ${{ steps.generate_release_tag.outputs.next_release_tag }}
+      #     release_name: Release ${{ steps.generate_release_tag.outputs.next_release_tag }}
+      #     draft: false
+      #     prerelease: false
+      #     commitish: ${{inputs.ref}}
+
+      # - uses: actions/checkout@v4
+      #   with:
+      #     ref: ${{ steps.generate_release_tag.outputs.next_release_tag }}
+
+      # - run: |
+      #     echo "deploying ref: ${{ inputs.ref }}"
+      #     echo "tag: ${{ steps.generate_release_tag.outputs.next_release_tag }}"
+      # # - run: git rev-parse --abbrev-ref HEAD
+      # - name: Use Node.js 20.x
+      #   uses: actions/setup-node@v4
+      #   with:
+      #     node-version: 20
+      #     cache: "npm"
+      # - run: npm i
+      # - run: npm run build
+
+      # - name: Archive production artifacts
+      #   run: |
+      #     mkdir -p release
+      #     cp -r dist/* release/
+      #     tar -czvf release.tar.gz release/
+
+      # - name: Upload Release Asset
+      #   uses: actions/upload-release-asset@v1
+      #   env:
+      #     GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+      #   with:
+      #     upload_url: ${{ steps.create_release.outputs.upload_url }}
+      #     asset_path: ./release.tar.gz
+      #     asset_name: release.tar.gz
+      #     asset_content_type: application/gzip
+
+      - name: executing remote ssh commands using ssh key
+        uses: appleboy/ssh-action@v1.0.3
+        with:
+          host: ${{ secrets.PROD_SSH_HOST }}
+          username: ${{ secrets.PROD_SSH_USER }}
+          key: ${{ secrets.PROD_SSH_KEY }}
+          port: ${{ secrets.PROD_SSH_PORT }}
+          script: |
+            whoami
+            cd ${{secrets.PROD_SSH_DIR}}
+            ls -l
+
+      # - name: Publish with rsync
+      #   uses: GuillaumeFalourd/setup-rsync@v1.2
+      #   id: rsync
+      #   with:
+      #     ssh_key: ${{ secrets.PROD_SSH_KEY }}
+      # - run: rsync -av -e 'ssh -i ${{ steps.rsync.outputs.ssh_key_path }} -p ${{secrets.PROD_SSH_PORT}} -o StrictHostKeyChecking=no -v' --delete ./dist/ ${{secrets.PROD_SSH_USER}}@${{secrets.PROD_SSH_HOST}}:${{ secrets.PROD_SSH_DIR }}
+
+  # notify:
+  #   runs-on: ubuntu-latest
+  #   name: Notify deploy status
+  #   needs: build
+  #   steps:
+      - name: Feishu notify deploy status
+        if: ${{needs.build.result == 'success' || needs.build.result == 'failure'}}
+        uses: wangsijie/feishu-bot@v1
+        with:
+          uuid: ${{secrets.FEISHU_CICD_BOT_ID}}
+          data: |
+            {
+              "msg_type": "interactive",
+              "card": {
+                "elements": [
+                  {
+                    "tag": "div",
+                    "text": {
+                      "content": "**项目**: 知识建构",
+                      "tag": "lark_md"
+                    }
+                  },
+                  {
+                    "tag": "div",
+                    "text": {
+                      "content": "**环境**: PROD",
+                      "tag": "lark_md"
+                    }
+                  },
+                  {
+                    "tag": "div",
+                    "text": {
+                      "content": "**结果**: ${{needs.build.result == 'failure' && '❌' || '✅'}}",
+                      "tag": "lark_md"
+                    }
+                  },
+                  {
+                    "tag": "div",
+                    "text": {
+                      "content": "**Tag**: ${{needs.build.outputs.tag}}",
+                      "tag": "lark_md"
+                    }
+                  },
+                  {
+                    "actions": [{
+                      "tag": "button",
+                      "text": {
+                        "content": "查看过程",
+                        "tag": "lark_md"
+                      },
+                      "url": "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}",
+                      "type": "default",
+                      "value": {}
+                    }, {
+                      "tag": "button",
+                      "text": {
+                        "content": "查看Release",
+                        "tag": "lark_md"
+                      },
+                      "url": "${{ needs.build.outputs.release_url }}",
+                      "type": "default",
+                      "value": {}
+                    }],
+                    "tag": "action"
+                  }
+                ],
+                "header": {
+                  "title": {
+                    "content": "部署结果通知",
+                    "tag": "plain_text"
+                  }
+                }
+              }
+            }