diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml new file mode 100644 index 0000000..20337f7 --- /dev/null +++ b/.gitea/workflows/ci.yml @@ -0,0 +1,160 @@ +name: CI Build & Deploy + +on: + push: + branches: + - test + - main + +jobs: + build-and-deploy-dev: + if: github.ref_name == 'test' + runs-on: docker + container: + image: node:24-alpine + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup pnpm + uses: pnpm/action-setup@v3 + with: + version: 8 + + - name: Install deps + run: | + npm config set registry https://registry.npmmirror.com/ + pnpm install + + - name: Build (test) + run: pnpm build:test + + - name: Pack artifacts + run: | + rm -rf dist.tar + tar -zcvf dist.tar ./dist ./default.conf ./Dockerfile + + - name: Upload artifacts to server + uses: appleboy/scp-action@v0.1.7 + with: + host: ${{ secrets.HOST_DEV }} + username: ${{ secrets.USER_DEV }} + password: ${{ secrets.PWD_DEV }} + port: 22 + source: 'dist.tar' + target: '/www/builder' + strip_components: 0 + + - name: Deploy over SSH + uses: appleboy/ssh-action@v1.0.3 + with: + host: ${{ secrets.HOST_DEV }} + username: ${{ secrets.USER_DEV }} + password: ${{ secrets.PWD_DEV }} + port: 22 + script: | + set -e + cd /www/builder + rm -rf jdt-admin-dev + mkdir -p jdt-admin-dev + tar -xzvf dist.tar -C /www/builder/jdt-admin-dev + rm -rf dist.tar + cd jdt-admin-dev + docker build -t jdt-admin-dev . + docker stop jdt-admin-dev || true + docker rm jdt-admin-dev || true + docker run -d -p 8085:80 --restart=always --name jdt-admin-dev jdt-admin-dev + cd .. + rm -rf jdt-admin-dev + + - name: Notify WeCom (Dev) + if: always() + env: + WEBHOOK_KEY: ${{ secrets.QYWX_WEBHOOK_KEY }} + STATUS: ${{ job.status }} + REPO: ${{ github.repository }} + RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} + BRANCH: ${{ github.ref_name }} + COMMIT: ${{ github.sha }} + ACTOR: ${{ github.actor }} + run: | + apk add --no-cache curl jq + EMOJI=$( [ "$STATUS" = "success" ] && echo "✅" || echo "❌" ) + MSG="$(printf "%s**%s** (Run #%s)\n>**构建结果**: %s\n>**构建详情**: [点击查看](%s)\n>**代码分支**: %s\n>**提交标识**: %s\n>**提交发起**: %s\n" "$EMOJI" "$REPO" "${{ github.run_number }}" "$STATUS" "$RUN_URL" "$BRANCH" "$COMMIT" "$ACTOR")" + curl -sS -H 'Content-Type: application/json' -d "{\"msgtype\":\"markdown\",\"markdown\":{\"content\":\"$MSG\"}}" "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=${WEBHOOK_KEY}" + + build-and-deploy-prod: + if: github.ref_name == 'main' + runs-on: docker + container: + image: node:24-alpine + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup pnpm + uses: pnpm/action-setup@v3 + with: + version: 8 + + - name: Install deps + run: | + npm config set registry https://registry.npmmirror.com/ + pnpm install + + - name: Build (prod) + run: pnpm build:prod + + - name: Pack artifacts + run: | + rm -rf dist.tar + tar -zcvf dist.tar ./dist ./default.conf ./Dockerfile + + - name: Upload artifacts to server + uses: appleboy/scp-action@v0.1.7 + with: + host: ${{ secrets.HOST_PROD }} + username: ${{ secrets.USER_PROD }} + password: ${{ secrets.PWD_PROD }} + port: 22 + source: 'dist.tar' + target: '/www/builder' + strip_components: 0 + + - name: Deploy over SSH + uses: appleboy/ssh-action@v1.0.3 + with: + host: ${{ secrets.HOST_PROD }} + username: ${{ secrets.USER_PROD }} + password: ${{ secrets.PWD_PROD }} + port: 22 + script: | + set -e + cd /www/builder + rm -rf jdt-admin-prod + mkdir -p jdt-admin-prod + tar -xzvf dist.tar -C /www/builder/jdt-admin-prod + rm -rf dist.tar + cd jdt-admin-prod + docker build -t jdt-admin-prod . + docker stop jdt-admin-prod || true + docker rm jdt-admin-prod || true + docker run -d -p 8085:80 --restart=always --name jdt-admin-prod jdt-admin-prod + cd .. + rm -rf jdt-admin-prod + + - name: Notify WeCom (Prod) + if: always() + env: + WEBHOOK_KEY: ${{ secrets.QYWX_WEBHOOK_KEY }} + STATUS: ${{ job.status }} + REPO: ${{ github.repository }} + RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} + BRANCH: ${{ github.ref_name }} + COMMIT: ${{ github.sha }} + ACTOR: ${{ github.actor }} + run: | + apk add --no-cache curl jq + EMOJI=$( [ "$STATUS" = "success" ] && echo "✅" || echo "❌" ) + MSG="$(printf "%s**%s** (Run #%s)\n>**构建结果**: %s\n>**构建详情**: [点击查看](%s)\n>**代码分支**: %s\n>**提交标识**: %s\n>**提交发起**: %s\n" "$EMOJI" "$REPO" "${{ github.run_number }}" "$STATUS" "$RUN_URL" "$BRANCH" "$COMMIT" "$ACTOR")" + curl -sS -H 'Content-Type: application/json' -d "{\"msgtype\":\"markdown\",\"markdown\":{\"content\":\"$MSG\"}}" "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=${WEBHOOK_KEY}"