diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index 74b1e1c..f9943eb 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -12,151 +12,145 @@ jobs: runs-on: gitea_act_runner container: image: node:24-alpine + env: + APP_NAME: jdt-mer-dev + APP_PORT: 8083 steps: - name: Checkout - uses: actions/checkout@v4 + uses: https://gitea.com/actions/checkout@v4 - - name: Setup pnpm - uses: pnpm/action-setup@v3 - with: - version: 8 + - name: Setup environment + run: | + sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories + apk add --no-cache curl + npm config set registry https://registry.npmmirror.com/ + corepack enable && corepack prepare pnpm@8 --activate - name: Install deps - run: | - npm config set registry https://registry.npmmirror.com/ - pnpm install + run: pnpm install --frozen-lockfile - - name: Build (test) + - name: Build run: pnpm build:test - name: Pack artifacts - run: | - rm -rf dist.tar - tar -zcvf dist.tar ./dist ./default.conf ./Dockerfile + run: tar -zcf dist.tar ./dist ./default.conf ./Dockerfile - - name: Upload artifacts to server - uses: appleboy/scp-action@v0.1.7 + - name: Upload to server + uses: https://gitea.com/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 + source: dist.tar + target: /www/builder - - name: Deploy over SSH - uses: appleboy/ssh-action@v1.0.3 + - name: Deploy + uses: https://gitea.com/appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.HOST_DEV }} username: ${{ secrets.USER_DEV }} password: ${{ secrets.PWD_DEV }} port: 22 + envs: APP_NAME,APP_PORT script: | set -e cd /www/builder - rm -rf jdt-mer-dev - mkdir -p jdt-mer-dev - tar -xzvf dist.tar -C /www/builder/jdt-mer-dev - rm -rf dist.tar - cd jdt-mer-dev - docker build -t jdt-mer-dev . - docker stop jdt-mer-dev || true - docker rm jdt-mer-dev || true - docker run -d -p 8083:80 --restart=always --name jdt-mer-dev jdt-mer-dev - cd .. - rm -rf jdt-mer-dev + rm -rf $APP_NAME && mkdir -p $APP_NAME + tar -xzf dist.tar -C $APP_NAME && rm -f dist.tar + cd $APP_NAME + docker build -t $APP_NAME . + docker rm -f $APP_NAME 2>/dev/null || true + docker run -d -p $APP_PORT:80 --restart=always --name $APP_NAME $APP_NAME + cd .. && rm -rf $APP_NAME - - name: Notify WeCom (Dev) + - name: Notify WeCom if: always() env: WEBHOOK_KEY: ${{ secrets.QYWX_WEBHOOK_KEY }} STATUS: ${{ job.status }} - REPO: ${{ gitea.repository }} - RUN_URL: ${{ gitea.server_url }}/${{ gitea.repository }}/actions/runs/${{ gitea.run_id }} - BRANCH: ${{ gitea.ref_name }} - COMMIT: ${{ gitea.sha }} - ACTOR: ${{ gitea.actor }} run: | - sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories || true - 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" "${{ gitea.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}" + MSG="${EMOJI}**${{ gitea.repository }}** (Run #${{ gitea.run_number }})\n" + MSG+=">**构建结果**: ${STATUS}\n" + MSG+=">**构建详情**: [点击查看](${{ gitea.server_url }}/${{ gitea.repository }}/actions/runs/${{ gitea.run_id }})\n" + MSG+=">**代码分支**: ${{ gitea.ref_name }}\n" + MSG+=">**提交标识**: ${{ gitea.sha }}\n" + MSG+=">**提交发起**: ${{ gitea.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: gitea.ref_name == 'master' runs-on: gitea_act_runner container: image: node:24-alpine + env: + APP_NAME: jdt-mer-prod + APP_PORT: 8083 steps: - name: Checkout - uses: actions/checkout@v4 + uses: https://gitea.com/actions/checkout@v4 - - name: Setup pnpm - uses: pnpm/action-setup@v3 - with: - version: 8 + - name: Setup environment + run: | + sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories + apk add --no-cache curl + npm config set registry https://registry.npmmirror.com/ + corepack enable && corepack prepare pnpm@8 --activate - name: Install deps - run: | - npm config set registry https://registry.npmmirror.com/ - pnpm install + run: pnpm install --frozen-lockfile - - name: Build (prod) + - name: Build run: pnpm build:prod - name: Pack artifacts - run: | - rm -rf dist.tar - tar -zcvf dist.tar ./dist ./default.conf ./Dockerfile + run: tar -zcf dist.tar ./dist ./default.conf ./Dockerfile - - name: Upload artifacts to server - uses: appleboy/scp-action@v0.1.7 + - name: Upload to server + uses: https://gitea.com/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 + source: dist.tar + target: /www/builder - - name: Deploy over SSH - uses: appleboy/ssh-action@v1.0.3 + - name: Deploy + uses: https://gitea.com/appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.HOST_PROD }} username: ${{ secrets.USER_PROD }} password: ${{ secrets.PWD_PROD }} port: 22 + envs: APP_NAME,APP_PORT script: | set -e cd /www/builder - rm -rf jdt-mer-prod - mkdir -p jdt-mer-prod - tar -xzvf dist.tar -C /www/builder/jdt-mer-prod - rm -rf dist.tar - cd jdt-mer-prod - docker build -t jdt-mer-prod . - docker stop jdt-mer-prod || true - docker rm jdt-mer-prod || true - docker run -d -p 8083:80 --restart=always --name jdt-mer-prod jdt-mer-prod - cd .. - rm -rf jdt-mer-prod + rm -rf $APP_NAME && mkdir -p $APP_NAME + tar -xzf dist.tar -C $APP_NAME && rm -f dist.tar + cd $APP_NAME + docker build -t $APP_NAME . + docker rm -f $APP_NAME 2>/dev/null || true + docker run -d -p $APP_PORT:80 --restart=always --name $APP_NAME $APP_NAME + cd .. && rm -rf $APP_NAME - - name: Notify WeCom (Prod) + - name: Notify WeCom if: always() env: WEBHOOK_KEY: ${{ secrets.QYWX_WEBHOOK_KEY }} STATUS: ${{ job.status }} - REPO: ${{ gitea.repository }} - RUN_URL: ${{ gitea.server_url }}/${{ gitea.repository }}/actions/runs/${{ gitea.run_id }} - BRANCH: ${{ gitea.ref_name }} - COMMIT: ${{ gitea.sha }} - ACTOR: ${{ gitea.actor }} run: | - sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories || true - 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" "${{ gitea.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}" + MSG="${EMOJI}**${{ gitea.repository }}** (Run #${{ gitea.run_number }})\n" + MSG+=">**构建结果**: ${STATUS}\n" + MSG+=">**构建详情**: [点击查看](${{ gitea.server_url }}/${{ gitea.repository }}/actions/runs/${{ gitea.run_id }})\n" + MSG+=">**代码分支**: ${{ gitea.ref_name }}\n" + MSG+=">**提交标识**: ${{ gitea.sha }}\n" + MSG+=">**提交发起**: ${{ gitea.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}"