From 02a8b5880bc66f497ee4015702383a8143267cac Mon Sep 17 00:00:00 2001 From: zzw <1464003642@qq.com> Date: Mon, 31 Aug 2026 11:27:18 +0800 Subject: [PATCH] feat: ci add wecom --- .gitea/workflows/ci.yml | 298 +++++------------------- README.md | 10 +- services/wecom/internal/logic/helper.go | 1 + 3 files changed, 65 insertions(+), 244 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index eeda492..3e73b26 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -6,20 +6,8 @@ on: - develop paths: - "bff/**" - - "services/product/**" - - "services/admin/**" - - "services/user/**" - - "services/ad/**" - - "services/chore/**" - - "services/express/**" - - "services/sale/**" - - "rpc/product/**" - - "rpc/admin/**" - - "rpc/user/**" - - "rpc/ad/**" - - "rpc/chore/**" - - "rpc/express/**" - - "rpc/sale/**" + - "services/**" + - "rpc/**" - "pkg/**" - ".gitea/workflows/ci.yml" workflow_dispatch: @@ -28,14 +16,7 @@ jobs: changes: runs-on: runner outputs: - bff: ${{ steps.filter.outputs.bff }} - product: ${{ steps.filter.outputs.product }} - admin: ${{ steps.filter.outputs.admin }} - user: ${{ steps.filter.outputs.user }} - ad: ${{ steps.filter.outputs.ad }} - chore: ${{ steps.filter.outputs.chore }} - express: ${{ steps.filter.outputs.express }} - sale: ${{ steps.filter.outputs.sale }} + matrix: ${{ steps.filter.outputs.matrix }} steps: - name: Checkout uses: https://git.ailuowan.com/deploy/checkout@v4 @@ -45,24 +26,25 @@ jobs: - name: Detect changes id: filter run: | - bff=false - product=false - admin=false - user=false - ad=false - chore=false - express=false - sale=false + SERVICES="bff product admin user ad chore express sale wecom" + dockerfile_for() { + case "$1" in + bff) echo "bff/Dockerfile" ;; + *) echo "services/$1/Dockerfile" ;; + esac + } + + pattern_for() { + case "$1" in + bff) echo '^(bff|pkg|rpc)/|^\.gitea/workflows/ci\.yml$' ;; + *) echo "^(services/$1|rpc/$1|pkg)/|^\\.gitea/workflows/ci\\.yml$" ;; + esac + } + + build_all=false if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then - bff=true - product=true - admin=true - user=true - ad=true - chore=true - express=true - sale=true + build_all=true else before="${{ github.event.before }}" if [ -z "$before" ] || [ "$before" = "0000000000000000000000000000000000000000" ]; then @@ -70,36 +52,48 @@ jobs: else changed=$(git diff --name-only "$before" "${{ github.sha }}") fi - echo "changed files:" echo "$changed" - - echo "$changed" | grep -qE '^(bff|pkg|rpc)/|^\.gitea/workflows/ci\.yml$' && bff=true || true - echo "$changed" | grep -qE '^(services/product|rpc/product|pkg)/|^\.gitea/workflows/ci\.yml$' && product=true || true - echo "$changed" | grep -qE '^(services/admin|rpc/admin|pkg)/|^\.gitea/workflows/ci\.yml$' && admin=true || true - echo "$changed" | grep -qE '^(services/user|rpc/user|pkg)/|^\.gitea/workflows/ci\.yml$' && user=true || true - echo "$changed" | grep -qE '^(services/ad|rpc/ad|pkg)/|^\.gitea/workflows/ci\.yml$' && ad=true || true - echo "$changed" | grep -qE '^(services/chore|rpc/chore|pkg)/|^\.gitea/workflows/ci\.yml$' && chore=true || true - echo "$changed" | grep -qE '^(services/express|rpc/express|pkg)/|^\.gitea/workflows/ci\.yml$' && express=true || true - echo "$changed" | grep -qE '^(services/sale|rpc/sale|pkg)/|^\.gitea/workflows/ci\.yml$' && sale=true || true fi - echo "bff=$bff" >> "$GITHUB_OUTPUT" - echo "product=$product" >> "$GITHUB_OUTPUT" - echo "admin=$admin" >> "$GITHUB_OUTPUT" - echo "user=$user" >> "$GITHUB_OUTPUT" - echo "ad=$ad" >> "$GITHUB_OUTPUT" - echo "chore=$chore" >> "$GITHUB_OUTPUT" - echo "express=$express" >> "$GITHUB_OUTPUT" - echo "sale=$sale" >> "$GITHUB_OUTPUT" - echo "bff=$bff product=$product admin=$admin user=$user ad=$ad chore=$chore express=$express sale=$sale" + matrix="[" + first=true + for svc in $SERVICES; do + should_build=false + if [ "$build_all" = true ]; then + should_build=true + elif echo "$changed" | grep -qE "$(pattern_for "$svc")"; then + should_build=true + fi - docker-bff: + if [ "$should_build" = true ]; then + df=$(dockerfile_for "$svc") + if [ "$first" = true ]; then + first=false + else + matrix="$matrix," + fi + matrix="$matrix{\"name\":\"$svc\",\"dockerfile\":\"$df\"}" + echo "$svc=true" + else + echo "$svc=false" + fi + done + matrix="$matrix]" + + echo "matrix=$matrix" >> "$GITHUB_OUTPUT" + echo "matrix=$matrix" + + docker: needs: changes - if: needs.changes.outputs.bff == 'true' + if: needs.changes.outputs.matrix != '[]' runs-on: runner + strategy: + fail-fast: false + matrix: + include: ${{ fromJSON(needs.changes.outputs.matrix) }} env: - NAME: lone/bff + NAME: lone/${{ matrix.name }} steps: - name: Checkout uses: https://git.ailuowan.com/deploy/checkout@v4 @@ -112,192 +106,10 @@ jobs: run: | docker buildx use default docker buildx build --builder default --load \ - -f bff/Dockerfile \ + -f ${{ matrix.dockerfile }} \ -t ${{ vars.REGISTRY }}/$NAME:latest \ . - name: Docker push run: | docker push ${{ vars.REGISTRY }}/$NAME:latest - - docker-product: - needs: changes - if: needs.changes.outputs.product == 'true' - runs-on: runner - env: - NAME: lone/product - steps: - - name: Checkout - uses: https://git.ailuowan.com/deploy/checkout@v4 - - - name: Login Registry - run: | - echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login ${{ vars.REGISTRY }} -u "${{ vars.REGISTRY_USERNAME }}" --password-stdin - - - name: Docker build - run: | - docker buildx use default - docker buildx build --builder default --load \ - -f services/product/Dockerfile \ - -t ${{ vars.REGISTRY }}/$NAME:latest \ - . - - - name: Docker push - run: | - docker push ${{ vars.REGISTRY }}/$NAME:latest - - docker-admin: - needs: changes - if: needs.changes.outputs.admin == 'true' - runs-on: runner - env: - NAME: lone/admin - steps: - - name: Checkout - uses: https://git.ailuowan.com/deploy/checkout@v4 - - - name: Login Registry - run: | - echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login ${{ vars.REGISTRY }} -u "${{ vars.REGISTRY_USERNAME }}" --password-stdin - - - name: Docker build - run: | - docker buildx use default - docker buildx build --builder default --load \ - -f services/admin/Dockerfile \ - -t ${{ vars.REGISTRY }}/$NAME:latest \ - . - - - name: Docker push - run: | - docker push ${{ vars.REGISTRY }}/$NAME:latest - - docker-user: - needs: changes - if: needs.changes.outputs.user == 'true' - runs-on: runner - env: - NAME: lone/user - steps: - - name: Checkout - uses: https://git.ailuowan.com/deploy/checkout@v4 - - - name: Login Registry - run: | - echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login ${{ vars.REGISTRY }} -u "${{ vars.REGISTRY_USERNAME }}" --password-stdin - - - name: Docker build - run: | - docker buildx use default - docker buildx build --builder default --load \ - -f services/user/Dockerfile \ - -t ${{ vars.REGISTRY }}/$NAME:latest \ - . - - - name: Docker push - run: | - docker push ${{ vars.REGISTRY }}/$NAME:latest - - docker-ad: - needs: changes - if: needs.changes.outputs.ad == 'true' - runs-on: runner - env: - NAME: lone/ad - steps: - - name: Checkout - uses: https://git.ailuowan.com/deploy/checkout@v4 - - - name: Login Registry - run: | - echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login ${{ vars.REGISTRY }} -u "${{ vars.REGISTRY_USERNAME }}" --password-stdin - - - name: Docker build - run: | - docker buildx use default - docker buildx build --builder default --load \ - -f services/ad/Dockerfile \ - -t ${{ vars.REGISTRY }}/$NAME:latest \ - . - - - name: Docker push - run: | - docker push ${{ vars.REGISTRY }}/$NAME:latest - - docker-chore: - needs: changes - if: needs.changes.outputs.chore == 'true' - runs-on: runner - env: - NAME: lone/chore - steps: - - name: Checkout - uses: https://git.ailuowan.com/deploy/checkout@v4 - - - name: Login Registry - run: | - echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login ${{ vars.REGISTRY }} -u "${{ vars.REGISTRY_USERNAME }}" --password-stdin - - - name: Docker build - run: | - docker buildx use default - docker buildx build --builder default --load \ - -f services/chore/Dockerfile \ - -t ${{ vars.REGISTRY }}/$NAME:latest \ - . - - - name: Docker push - run: | - docker push ${{ vars.REGISTRY }}/$NAME:latest - - docker-express: - needs: changes - if: needs.changes.outputs.express == 'true' - runs-on: runner - env: - NAME: lone/express - steps: - - name: Checkout - uses: https://git.ailuowan.com/deploy/checkout@v4 - - - name: Login Registry - run: | - echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login ${{ vars.REGISTRY }} -u "${{ vars.REGISTRY_USERNAME }}" --password-stdin - - - name: Docker build - run: | - docker buildx use default - docker buildx build --builder default --load \ - -f services/express/Dockerfile \ - -t ${{ vars.REGISTRY }}/$NAME:latest \ - . - - - name: Docker push - run: | - docker push ${{ vars.REGISTRY }}/$NAME:latest - - docker-sale: - needs: changes - if: needs.changes.outputs.sale == 'true' - runs-on: runner - env: - NAME: lone/sale - steps: - - name: Checkout - uses: https://git.ailuowan.com/deploy/checkout@v4 - - - name: Login Registry - run: | - echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login ${{ vars.REGISTRY }} -u "${{ vars.REGISTRY_USERNAME }}" --password-stdin - - - name: Docker build - run: | - docker buildx use default - docker buildx build --builder default --load \ - -f services/sale/Dockerfile \ - -t ${{ vars.REGISTRY }}/$NAME:latest \ - . - - - name: Docker push - run: | - docker push ${{ vars.REGISTRY }}/$NAME:latest \ No newline at end of file diff --git a/README.md b/README.md index aab12ee..8388bf7 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,15 @@ D:\Git\bin\bash.exe rpc/scripts/gen-rpc.sh order rpc/scripts/gen-rpc.sh order ``` -加一个服务需要在bff/etc/bff.yaml 加 Upstreams ,docker.compose.prod.yaml 加服务,nacos 加配置,增加 etc/order.yaml 配置文件,Dockerfile 文件 +```bash +1.加一个服务需要在bff/etc/bff.yaml 加 Upstreams +2.docker.compose.prod.yaml 加服务 +3.nacos 加配置 +4.增加 etc/order.yaml 配置文件 +5.Dockerfile 文件 +6.gitea 配置,修改这行。SERVICES="bff product admin user ad chore express sale wecom" + +``` ## 如何加一个新服务 diff --git a/services/wecom/internal/logic/helper.go b/services/wecom/internal/logic/helper.go index b64d07a..1a2fbc9 100644 --- a/services/wecom/internal/logic/helper.go +++ b/services/wecom/internal/logic/helper.go @@ -20,6 +20,7 @@ func statusEnable(status uint8) int { return utils.NumberOne } +// build func typeText(t uint8) string { switch t { case dao.UserTypeAdmin: