From 0f04cfa310bb34087c5cddb1d940740078cea425 Mon Sep 17 00:00:00 2001 From: ZuoZuo <68836346+Mrz-sakura@users.noreply.github.com> Date: Mon, 6 Apr 2026 17:08:47 +0800 Subject: [PATCH] deploy --- .gitea/workflows/upload-release.yml | 97 ++++++++++++++++++++++ config/prod.yaml | 6 ++ config/prod.yaml.example | 6 ++ deploy/systemd/chatapp-pay.service.example | 19 +++++ 4 files changed, 128 insertions(+) create mode 100644 .gitea/workflows/upload-release.yml create mode 100644 config/prod.yaml create mode 100644 config/prod.yaml.example create mode 100644 deploy/systemd/chatapp-pay.service.example diff --git a/.gitea/workflows/upload-release.yml b/.gitea/workflows/upload-release.yml new file mode 100644 index 0000000..658d336 --- /dev/null +++ b/.gitea/workflows/upload-release.yml @@ -0,0 +1,97 @@ +name: upload-release + +on: + workflow_dispatch: + inputs: + release_id: + description: "Shared release id, for example 20260406-abc1234" + required: true + +env: + SERVICE_NAME: "pay" + BINARY_NAME: "pay" + BUILD_TARGET: "./cmd/pay" + CONFIG_SOURCE: "config/prod.yaml" + COS_BUCKET: "app-release-1417798587" + COS_REGION: "me-saudi-arabia" + COS_PREFIX: "releases/prod" + +jobs: + build-and-upload: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version-file: go.mod + + - name: Test + run: go test ./... + + - name: Build package + shell: bash + run: | + set -Eeuo pipefail + test -f "${CONFIG_SOURCE}" + RELEASE_ID="${{ github.event.inputs.release_id }}" + ROOT="$(pwd)" + OUT_DIR="${ROOT}/dist/${SERVICE_NAME}" + PKG_DIR="${OUT_DIR}/package" + + rm -rf "${OUT_DIR}" + mkdir -p "${PKG_DIR}/bin" "${PKG_DIR}/config" + + CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \ + go build -trimpath -ldflags="-s -w" \ + -o "${PKG_DIR}/bin/${BINARY_NAME}" \ + "${BUILD_TARGET}" + + cp "${CONFIG_SOURCE}" "${PKG_DIR}/config/prod.yaml" + + tar -C "${PKG_DIR}" -czf "${OUT_DIR}/${SERVICE_NAME}.tgz" . + sha256sum "${OUT_DIR}/${SERVICE_NAME}.tgz" | awk '{print $1}' > "${OUT_DIR}/${SERVICE_NAME}.sha256" + + echo "RELEASE_ID=${RELEASE_ID}" >> "${GITHUB_ENV}" + echo "TGZ_PATH=${OUT_DIR}/${SERVICE_NAME}.tgz" >> "${GITHUB_ENV}" + echo "SHA_PATH=${OUT_DIR}/${SERVICE_NAME}.sha256" >> "${GITHUB_ENV}" + + - name: Upload to COS + env: + TENCENTCLOUD_SECRET_ID: ${{ secrets.TENCENTCLOUD_SECRET_ID }} + TENCENTCLOUD_SECRET_KEY: ${{ secrets.TENCENTCLOUD_SECRET_KEY }} + TENCENTCLOUD_SESSION_TOKEN: ${{ secrets.TENCENTCLOUD_SESSION_TOKEN }} + shell: bash + run: | + set -Eeuo pipefail + python3 -m pip install --upgrade pip >/dev/null + python3 -m pip install cos-python-sdk-v5 >/dev/null + python3 - <<'PY' + import os + from qcloud_cos import CosConfig, CosS3Client + + secret_id = os.environ["TENCENTCLOUD_SECRET_ID"] + secret_key = os.environ["TENCENTCLOUD_SECRET_KEY"] + token = os.getenv("TENCENTCLOUD_SESSION_TOKEN") + region = os.environ["COS_REGION"] + bucket = os.environ["COS_BUCKET"] + prefix = os.environ["COS_PREFIX"].strip("/") + release_id = os.environ["RELEASE_ID"] + service = os.environ["SERVICE_NAME"] + tgz_path = os.environ["TGZ_PATH"] + sha_path = os.environ["SHA_PATH"] + + cfg = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token, Scheme="https") + client = CosS3Client(cfg) + + def upload(local_path: str, remote_name: str) -> None: + key = f"{prefix}/{release_id}/{service}/{remote_name}" + with open(local_path, "rb") as fh: + client.put_object(Bucket=bucket, Body=fh, Key=key, EnableMD5=True) + print(f"uploaded: {key}") + + upload(tgz_path, f"{service}.tgz") + upload(sha_path, f"{service}.sha256") + PY diff --git a/config/prod.yaml b/config/prod.yaml new file mode 100644 index 0000000..5674905 --- /dev/null +++ b/config/prod.yaml @@ -0,0 +1,6 @@ +app: + name: chatapppay + env: prod + http_addr: ":8082" + grpc_addr: ":9002" + shutdown_timeout: 10s diff --git a/config/prod.yaml.example b/config/prod.yaml.example new file mode 100644 index 0000000..5674905 --- /dev/null +++ b/config/prod.yaml.example @@ -0,0 +1,6 @@ +app: + name: chatapppay + env: prod + http_addr: ":8082" + grpc_addr: ":9002" + shutdown_timeout: 10s diff --git a/deploy/systemd/chatapp-pay.service.example b/deploy/systemd/chatapp-pay.service.example new file mode 100644 index 0000000..f65eaa5 --- /dev/null +++ b/deploy/systemd/chatapp-pay.service.example @@ -0,0 +1,19 @@ +[Unit] +Description=ChatApp Pay Service +Wants=network-online.target +After=network-online.target + +[Service] +Type=simple +User=root +Group=root +WorkingDirectory=/opt/apps/pay/current +ExecStart=/opt/apps/pay/current/bin/pay -config /opt/apps/pay/current/config/prod.yaml +Restart=always +RestartSec=3 +KillSignal=SIGTERM +TimeoutStopSec=30 +LimitNOFILE=65535 + +[Install] +WantedBy=multi-user.target