diff --git a/.gitea/workflows/build-push-harbor.yml b/.gitea/workflows/build-push-harbor.yml index 9f73862..7adb6f7 100644 --- a/.gitea/workflows/build-push-harbor.yml +++ b/.gitea/workflows/build-push-harbor.yml @@ -10,17 +10,34 @@ on: workflow_dispatch: env: - IMAGE_NAME: st-1-example + GO_VERSION: "1.24" + NODE_VERSION: "22" jobs: docker-build-push: runs-on: ubuntu-latest - outputs: - image_tag: ${{ steps.vars.outputs.short_sha }} steps: - name: Checkout uses: actions/checkout@v4 + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version: ${{ env.GO_VERSION }} + + - name: Install dependencies + run: npm ci + + - name: Install goctl + run: | + go install github.com/zeromicro/go-zero/tools/goctl@latest + echo "$(go env GOPATH)/bin" >> "$GITHUB_PATH" + - name: Set image tags id: vars run: | @@ -35,79 +52,68 @@ jobs: run: | echo "$HARBOR_PASSWORD" | docker login "$HARBOR_REGISTRY" -u "$HARBOR_USERNAME" --password-stdin - - name: Build image + - name: Discover docker targets + id: targets + shell: bash + run: | + set -euo pipefail + : > docker-targets.txt + + while IFS= read -r service_dir; do + service_name="$(basename "$service_dir")" + + while IFS= read -r svc_dir; do + svc_type="$(basename "$svc_dir")" + if [[ "$svc_type" == "rpc" ]]; then + go_entry="$svc_dir/pb.go" + else + go_entry="$svc_dir/$service_name.go" + fi + + if [[ -f "$go_entry" ]]; then + echo "$go_entry" >> docker-targets.txt + fi + done < <(find "$service_dir" -mindepth 1 -maxdepth 1 -type d | sort) + + done < <(find app -mindepth 1 -maxdepth 1 -type d | sort) + + target_count="$(wc -l < docker-targets.txt | tr -d ' ')" + echo "count=$target_count" >> "$GITHUB_OUTPUT" + echo "Found $target_count docker targets" + cat docker-targets.txt + + - name: Generate Dockerfile, build and push images + if: steps.targets.outputs.count != '0' env: HARBOR_REGISTRY: ${{ secrets.HARBOR_REGISTRY }} HARBOR_PROJECT: ${{ secrets.HARBOR_PROJECT }} + SHORT_SHA: ${{ steps.vars.outputs.short_sha }} + DATE_TAG: ${{ steps.vars.outputs.date_tag }} + shell: bash run: | - IMAGE="$HARBOR_REGISTRY/$HARBOR_PROJECT/$IMAGE_NAME" - docker build -f Dockerfile -t "$IMAGE:${{ steps.vars.outputs.short_sha }}" -t "$IMAGE:${{ steps.vars.outputs.date_tag }}" -t "$IMAGE:latest" . + set -euo pipefail - - name: Push image - env: - HARBOR_REGISTRY: ${{ secrets.HARBOR_REGISTRY }} - HARBOR_PROJECT: ${{ secrets.HARBOR_PROJECT }} - run: | - IMAGE="$HARBOR_REGISTRY/$HARBOR_PROJECT/$IMAGE_NAME" - docker push "$IMAGE:${{ steps.vars.outputs.short_sha }}" - docker push "$IMAGE:${{ steps.vars.outputs.date_tag }}" - docker push "$IMAGE:latest" + while IFS= read -r target; do + [[ -z "$target" ]] && continue - deploy-server-docker: - runs-on: ubuntu-latest - needs: docker-build-push - if: github.ref_name == 'main' || github.ref_name == 'master' - steps: - - name: Checkout - uses: actions/checkout@v4 + service_name="$(echo "$target" | cut -d'/' -f2)" + svc_type="$(echo "$target" | cut -d'/' -f3)" + image_name="${service_name}-${svc_type}" + image_ref="$HARBOR_REGISTRY/$HARBOR_PROJECT/$image_name" - - name: Setup SSH key - env: - DEPLOY_SSH_KEY: ${{ secrets.DEPLOY_SSH_KEY }} - run: | - mkdir -p ~/.ssh - printf "%s" "$DEPLOY_SSH_KEY" > ~/.ssh/id_rsa - chmod 600 ~/.ssh/id_rsa + echo "==== Building $image_name from $target ====" + npx hereby -t docker -s "$target" - - name: Add server host key - env: - DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} - DEPLOY_PORT: ${{ secrets.DEPLOY_PORT }} - run: | - PORT="${DEPLOY_PORT:-22}" - ssh-keyscan -p "$PORT" "$DEPLOY_HOST" >> ~/.ssh/known_hosts + docker build \ + -f Dockerfile \ + -t "$image_ref:$SHORT_SHA" \ + -t "$image_ref:$DATE_TAG" \ + -t "$image_ref:latest" \ + . - - name: Upload compose file - env: - DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} - DEPLOY_USER: ${{ secrets.DEPLOY_USER }} - DEPLOY_PORT: ${{ secrets.DEPLOY_PORT }} - DEPLOY_PATH: ${{ secrets.DEPLOY_PATH }} - run: | - PORT="${DEPLOY_PORT:-22}" - TARGET_PATH="${DEPLOY_PATH:-/opt/st-1-example}" - ssh -p "$PORT" "$DEPLOY_USER@$DEPLOY_HOST" "mkdir -p $TARGET_PATH" - scp -P "$PORT" deploy/docker/docker-compose.yml "$DEPLOY_USER@$DEPLOY_HOST:$TARGET_PATH/docker-compose.yml" + docker push "$image_ref:$SHORT_SHA" + docker push "$image_ref:$DATE_TAG" + docker push "$image_ref:latest" - - name: Deploy on server - env: - DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} - DEPLOY_USER: ${{ secrets.DEPLOY_USER }} - DEPLOY_PORT: ${{ secrets.DEPLOY_PORT }} - DEPLOY_PATH: ${{ secrets.DEPLOY_PATH }} - HARBOR_REGISTRY: ${{ secrets.HARBOR_REGISTRY }} - HARBOR_PROJECT: ${{ secrets.HARBOR_PROJECT }} - HARBOR_USERNAME: ${{ secrets.HARBOR_USERNAME }} - HARBOR_PASSWORD: ${{ secrets.HARBOR_PASSWORD }} - run: | - PORT="${DEPLOY_PORT:-22}" - TARGET_PATH="${DEPLOY_PATH:-/opt/st-1-example}" - IMAGE_TAG="${{ needs.docker-build-push.outputs.image_tag }}" - ssh -p "$PORT" "$DEPLOY_USER@$DEPLOY_HOST" " - set -e; - cd $TARGET_PATH; - echo '$HARBOR_PASSWORD' | docker login '$HARBOR_REGISTRY' -u '$HARBOR_USERNAME' --password-stdin; - HARBOR_REGISTRY='$HARBOR_REGISTRY' HARBOR_PROJECT='$HARBOR_PROJECT' IMAGE_NAME='$IMAGE_NAME' IMAGE_TAG='$IMAGE_TAG' docker compose pull; - HARBOR_REGISTRY='$HARBOR_REGISTRY' HARBOR_PROJECT='$HARBOR_PROJECT' IMAGE_NAME='$IMAGE_NAME' IMAGE_TAG='$IMAGE_TAG' docker compose up -d; - docker image prune -f; - " + rm -f Dockerfile + done < docker-targets.txt diff --git a/app/order/api/etc/order-api.yaml b/app/order/api/etc/order-api.yaml index aec1927..758a998 100644 --- a/app/order/api/etc/order-api.yaml +++ b/app/order/api/etc/order-api.yaml @@ -16,4 +16,3 @@ PlayerRpcConf: ShopRpcConf: Target: k8s://juwan/shop-rpc-svc:8080 - diff --git a/app/order/api/internal/svc/serviceContext.go b/app/order/api/internal/svc/serviceContext.go index a8a519d..f84772a 100644 --- a/app/order/api/internal/svc/serviceContext.go +++ b/app/order/api/internal/svc/serviceContext.go @@ -4,10 +4,10 @@ package svc import ( + "juwan-backend/app/order/api/internal/config" "juwan-backend/app/order/rpc/orderservice" "juwan-backend/app/player/rpc/playerservice" "juwan-backend/app/shop/rpc/shopservice" - "juwan-backend/app/order/api/internal/config" "github.com/zeromicro/go-zero/zrpc" ) diff --git a/app/order/rpc/internal/logic/addOrdersLogic.go b/app/order/rpc/internal/logic/addOrdersLogic.go index c09d9ff..b509c8b 100644 --- a/app/order/rpc/internal/logic/addOrdersLogic.go +++ b/app/order/rpc/internal/logic/addOrdersLogic.go @@ -5,11 +5,12 @@ import ( "errors" "time" - "github.com/shopspring/decimal" "juwan-backend/app/order/rpc/internal/svc" "juwan-backend/app/order/rpc/pb" "juwan-backend/app/snowflake/rpc/snowflake" + "github.com/shopspring/decimal" + "github.com/zeromicro/go-zero/core/logx" ) diff --git a/app/order/rpc/internal/logic/common.go b/app/order/rpc/internal/logic/common.go index 7abafd9..a2ea950 100644 --- a/app/order/rpc/internal/logic/common.go +++ b/app/order/rpc/internal/logic/common.go @@ -5,9 +5,10 @@ import ( "errors" "time" - "github.com/shopspring/decimal" "juwan-backend/app/order/rpc/internal/models" "juwan-backend/app/order/rpc/pb" + + "github.com/shopspring/decimal" ) func parseDecimal(v string) (decimal.Decimal, error) { diff --git a/app/order/rpc/internal/logic/getOrderStateLogsByIdLogic.go b/app/order/rpc/internal/logic/getOrderStateLogsByIdLogic.go index 5fb7dcc..bf6db81 100644 --- a/app/order/rpc/internal/logic/getOrderStateLogsByIdLogic.go +++ b/app/order/rpc/internal/logic/getOrderStateLogsByIdLogic.go @@ -3,8 +3,8 @@ package logic import ( "context" - "juwan-backend/app/order/rpc/internal/svc" "juwan-backend/app/order/rpc/internal/models/orderstatelogs" + "juwan-backend/app/order/rpc/internal/svc" "juwan-backend/app/order/rpc/pb" "github.com/zeromicro/go-zero/core/logx" diff --git a/app/order/rpc/internal/logic/updateOrdersLogic.go b/app/order/rpc/internal/logic/updateOrdersLogic.go index 83a24b4..195db6a 100644 --- a/app/order/rpc/internal/logic/updateOrdersLogic.go +++ b/app/order/rpc/internal/logic/updateOrdersLogic.go @@ -4,10 +4,11 @@ import ( "context" "errors" - "github.com/shopspring/decimal" "juwan-backend/app/order/rpc/internal/svc" "juwan-backend/app/order/rpc/pb" + "github.com/shopspring/decimal" + "github.com/zeromicro/go-zero/core/logx" ) diff --git a/app/order/rpc/internal/models/schema/orders.go b/app/order/rpc/internal/models/schema/orders.go index 200cc0d..3df86c5 100644 --- a/app/order/rpc/internal/models/schema/orders.go +++ b/app/order/rpc/internal/models/schema/orders.go @@ -22,7 +22,7 @@ func (Orders) Annotations() []schema.Annotation { entsql.Annotation{ Table: "orders", Checks: map[string]string{ - "chk_order_status": "status IN ('pending_payment', 'pending_accept', 'in_progress', 'pending_close', 'pending_review', 'disputed', 'completed', 'cancelled')", + "chk_order_status": "status IN ('pending_payment', 'pending_accept', 'in_progress', 'pending_close', 'pending_review', 'disputed', 'completed', 'cancelled')", "chk_price_positive": "total_price > 0", }, }, diff --git a/app/order/rpc/internal/svc/serviceContext.go b/app/order/rpc/internal/svc/serviceContext.go index 4dff72f..a4f73cc 100644 --- a/app/order/rpc/internal/svc/serviceContext.go +++ b/app/order/rpc/internal/svc/serviceContext.go @@ -5,15 +5,16 @@ import ( "strings" "time" - "ariga.io/entcache" - "entgo.io/ent/dialect/sql" - "github.com/zeromicro/go-zero/core/logx" "juwan-backend/app/order/rpc/internal/config" "juwan-backend/app/order/rpc/internal/models" "juwan-backend/app/snowflake/rpc/snowflake" "juwan-backend/common/redisx" "juwan-backend/common/snowflakex" "juwan-backend/pkg/adapter" + + "ariga.io/entcache" + "entgo.io/ent/dialect/sql" + "github.com/zeromicro/go-zero/core/logx" ) type ServiceContext struct {