deploy
This commit is contained in:
parent
9109dff287
commit
0f04cfa310
97
.gitea/workflows/upload-release.yml
Normal file
97
.gitea/workflows/upload-release.yml
Normal file
@ -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
|
||||
6
config/prod.yaml
Normal file
6
config/prod.yaml
Normal file
@ -0,0 +1,6 @@
|
||||
app:
|
||||
name: chatapppay
|
||||
env: prod
|
||||
http_addr: ":8082"
|
||||
grpc_addr: ":9002"
|
||||
shutdown_timeout: 10s
|
||||
6
config/prod.yaml.example
Normal file
6
config/prod.yaml.example
Normal file
@ -0,0 +1,6 @@
|
||||
app:
|
||||
name: chatapppay
|
||||
env: prod
|
||||
http_addr: ":8082"
|
||||
grpc_addr: ":9002"
|
||||
shutdown_timeout: 10s
|
||||
19
deploy/systemd/chatapp-pay.service.example
Normal file
19
deploy/systemd/chatapp-pay.service.example
Normal file
@ -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
|
||||
Loading…
x
Reference in New Issue
Block a user