|
@@ -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"
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|