From 3deb2e19dd002d221e91abd6e4b9a4ee00e4a0e7 Mon Sep 17 00:00:00 2001 From: skeris Date: Tue, 3 Jun 2025 23:57:07 +0300 Subject: [PATCH] ci: add db migration and config validation to pipeline --- .gitea/workflows/deployStaging.yml | 25 +++++++++++++++++++++++- Dockerfile | 2 ++ deployments/staging/config.env | 22 +++++++++++++++++++++ deployments/staging/docker-compose.yaml | 26 ++++--------------------- deployments/staging/validate_config.yml | 6 ++++++ go.mod | 4 ++-- go.sum | 17 ++++------------ 7 files changed, 64 insertions(+), 38 deletions(-) create mode 100644 deployments/staging/config.env create mode 100644 deployments/staging/validate_config.yml diff --git a/.gitea/workflows/deployStaging.yml b/.gitea/workflows/deployStaging.yml index d497c68..c2a37b6 100644 --- a/.gitea/workflows/deployStaging.yml +++ b/.gitea/workflows/deployStaging.yml @@ -15,9 +15,32 @@ jobs: secrets: REGISTRY_USER: ${{ secrets.REGISTRY_USER }} REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }} + ValidateConfig: + runs-on: [squizstaging] + uses: https://gitea.pena/PenaDevops/actions.git/.gitea/workflows/validate_config.yml@v1.2.1 + needs: CreateImage + with: + runner: hubstaging + secrets: + REGISTRY_USER: ${{ secrets.REGISTRY_USER }} + REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }} + Migrate: + runs-on: [squizstaging] + container: + image: gitea.pena/penadevops/container-images/node-golint:main + steps: + - name: Check out repository code + uses: https://gitea.pena/PenaDevops/actions.git/checkout@v1 + - name: download packs + run: | + go mod download + go list -f '{{.Dir}}' -m gitea.pena/SQuiz/common + ls $(go list -f '{{.Dir}}' -m gitea.pena/SQuiz/common) + - name: migrate + run: ./tools/migrate -verbose -source "file:/$(go list -f '{{.Dir}}' -m gitea.pena/SQuiz/common | sed 's|^/workspace/SQuiz/core||')/dal/schema/" -database "$(grep -E '^POSTGRES_URL=' "./deployments/${{ inputs.branch_name }}/config.env" | cut -d '=' -f2- | sed -E 's~host=([^ ]+) port=([^ ]+) user=([^ ]+) password=([^ ]+) dbname=([^ ]+) sslmode=([^ ]+)~postgresql://\3:\4@\1:\2/\5?sslmode=\6~' | sed 's~\"~~g')" up DeployService: runs-on: [squizstaging] - needs: CreateImage + needs: MigrateDatabase uses: http://gitea.pena/PenaDevops/actions.git/.gitea/workflows/deploy.yml@v1.1.4-p7 with: runner: squizstaging diff --git a/Dockerfile b/Dockerfile index cb1e87a..8e9cf91 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,9 @@ WORKDIR /app COPY . . RUN go mod download RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o wrkr ./cmd/main.go +RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o validator ./cmd/validator/main.go FROM gitea.pena/penadevops/container-images/alpine:main as prod +COPY --from=build /app/validator . COPY --from=build /app/wrkr . CMD ["/wrkr"] diff --git a/deployments/staging/config.env b/deployments/staging/config.env new file mode 100644 index 0000000..53b0077 --- /dev/null +++ b/deployments/staging/config.env @@ -0,0 +1,22 @@ +IS_PROD_LOG="false" +IS_PROD='false' +POSTGRES_URL='host=10.7.0.10 port=5432 user=squiz password=Redalert2 dbname=squiz sslmode=disable' +KAFKA_BROKERS= '10.7.0.6:9092' +KAFKA_TOPIC= 'tariffs' +QUIZ_ID=quizCnt +AMOUNT=10 +UNLIM_ID=quizUnlimTime +REDIS_HOST='10.7.0.10:6379' +REDIS_PASSWORD='Redalert2' +REDIS_DB=2 +MAIL_SENDER='noreply@mailing.pena.digital' +MAIL_API_KEY='P0YsjUB137upXrr1NiJefHmXVKW1hmBWlpev' +CUSTOMER_MICROSERVICE_RPC_URL='10.7.0.6:9060' +S3_ENDPOINT=s3.timeweb.cloud +S3_ACCESS_KEY=5CV77KVDUU9H0II9R24M +S3_SECRET_KEY=0W0m8DyvdAKRJnsAy6mB5zndQ7RouJBLhqhtThcu +KAFKA_TOPIC_GIGA_CHAT=gigachat +KAFKA_GROUP_GIGA_CHAT="" +GIGA_CHAT_API_AUTH_KEY=Y2MzZWUxZDMtZGE5MC00ZTFjLWI5YzItM2ViMTZmMDM0YTkwOmY1NTlkOGM3LWUyNmQtNGUwMC1hODE0LTJlYjQ5NDA5ODdjMQ== +GIGA_CHAT_API_BASE_URL="https://gigachat.devices.sberbank.ru/api/v1" +TELEGRAM_TOKEN=6112841016:AAH2nO1c6mqfMewBvHwdXCDp5PCclOuc99 diff --git a/deployments/staging/docker-compose.yaml b/deployments/staging/docker-compose.yaml index 6b2a3e5..2263b2b 100644 --- a/deployments/staging/docker-compose.yaml +++ b/deployments/staging/docker-compose.yaml @@ -4,25 +4,7 @@ services: container_name: squiz-workerv1.0.0 image: gitea.pena/squiz/worker/staging:$GITHUB_RUN_NUMBER tty: true - environment: - IS_PROD_LOG: 'false' - IS_PROD: 'false' - POSTGRES_URL: 'host=10.7.0.10 port=5432 user=squiz password=Redalert2 dbname=squiz sslmode=disable' - KAFKA_BROKERS: '10.7.0.6:9092' - KAFKA_TOPIC: 'tariffs' - QUIZ_ID: quizCnt - AMOUNT: 10 - UNLIM_ID: quizUnlimTime - REDIS_HOST: '10.7.0.10:6379' - REDIS_PASSWORD: 'Redalert2' - REDIS_DB: 2 - MAIL_SENDER: 'noreply@mailing.pena.digital' - MAIL_API_KEY: 'P0YsjUB137upXrr1NiJefHmXVKW1hmBWlpev' - CUSTOMER_MICROSERVICE_RPC_URL: '10.7.0.6:9060' - S3_ENDPOINT: s3.timeweb.cloud - S3_ACCESS_KEY: 5CV77KVDUU9H0II9R24M - S3_SECRET_KEY: 0W0m8DyvdAKRJnsAy6mB5zndQ7RouJBLhqhtThcu - KAFKA_TOPIC_GIGA_CHAT: gigachat - KAFKA_GROUP_GIGA_CHAT: "" - GIGA_CHAT_API_AUTH_KEY: Y2MzZWUxZDMtZGE5MC00ZTFjLWI5YzItM2ViMTZmMDM0YTkwOmY1NTlkOGM3LWUyNmQtNGUwMC1hODE0LTJlYjQ5NDA5ODdjMQ== - GIGA_CHAT_API_BASE_URL: "https://gigachat.devices.sberbank.ru/api/v1" + env_file: config.env + ports: + - 10.7.0.10:2347:2345 + command: dlv --listen=:2345 --continue --headless=true --log=true --log-output=debugger,debuglineerr,gdbwire,lldbout,rpc --accept-multiclient --api-version=2 exec /wrkr diff --git a/deployments/staging/validate_config.yml b/deployments/staging/validate_config.yml new file mode 100644 index 0000000..6c53be9 --- /dev/null +++ b/deployments/staging/validate_config.yml @@ -0,0 +1,6 @@ +services: + validator: + tty: true + command: ./validator + image: gitea.pena/squiz/worker/staging:$GITHUB_RUN_NUMBER + env_file: config.env diff --git a/go.mod b/go.mod index 33e9577..4a2ccd1 100644 --- a/go.mod +++ b/go.mod @@ -5,10 +5,10 @@ go 1.23.2 toolchain go1.23.4 require ( - gitea.pena/PenaSide/common v0.0.0-20250103085335-91ea31fee517 + gitea.pena/PenaSide/common v0.0.0-20250421103113-7e4b3ae9e1e0 gitea.pena/PenaSide/customer v0.0.0-20250407185330-82e95e8da043 gitea.pena/PenaSide/hlog v0.0.0-20241125221102-a54c29c002a9 - gitea.pena/SQuiz/common v0.0.0-20250514124515-870e52266ca5 + gitea.pena/SQuiz/common v0.0.0-20250601205720-77c1b6362226 github.com/caarlos0/env/v8 v8.0.0 github.com/go-redis/redis/v8 v8.11.5 github.com/go-resty/resty/v2 v2.16.5 diff --git a/go.sum b/go.sum index b64dafe..a007418 100644 --- a/go.sum +++ b/go.sum @@ -1,22 +1,13 @@ -gitea.pena/PenaSide/common v0.0.0-20250103085335-91ea31fee517 h1:EgBe8VcdPwmxbSzYLndncP+NmR73uYuXxkTeDlEttEE= -gitea.pena/PenaSide/common v0.0.0-20250103085335-91ea31fee517/go.mod h1:91EuBCgcqgJ6mG36n2pds8sPwwfaJytLWOzY3h2YFKU= +gitea.pena/PenaSide/common v0.0.0-20250421103113-7e4b3ae9e1e0 h1:+gvpAPo1+1WtCpA+QaCWNy4R9/cIERBBzrVSYrx7hNo= +gitea.pena/PenaSide/common v0.0.0-20250421103113-7e4b3ae9e1e0/go.mod h1:91EuBCgcqgJ6mG36n2pds8sPwwfaJytLWOzY3h2YFKU= gitea.pena/PenaSide/customer v0.0.0-20250407185330-82e95e8da043 h1:a/89TC0bRdWRjS875EIE1c1ZPgmRcDaKMcQoUv+sg+I= gitea.pena/PenaSide/customer v0.0.0-20250407185330-82e95e8da043/go.mod h1:DDg6CQDhU+aSSTv8R/LbkNGegdCx+Q++DcgPfE2LbZU= gitea.pena/PenaSide/hlog v0.0.0-20241125221102-a54c29c002a9 h1:tBkXWNIt8icmkMMnq8MA421RWkUy4OZh5P7C3q8uCu4= gitea.pena/PenaSide/hlog v0.0.0-20241125221102-a54c29c002a9/go.mod h1:sanhSL8aEsfcq21P+eItYiAnKAre+B67nGJmDfk2cf0= -gitea.pena/PenaSide/linters-golang v0.0.0-20241119212350-2759fa93724a h1:UySqMgaOKNsR42Y6GQXoM2wn/waYNc9cakMUSvbEEAg= -gitea.pena/PenaSide/linters-golang v0.0.0-20241119212350-2759fa93724a/go.mod h1:gdd+vOT6up9STkEbxa2qESLIMZFjCmRbkcheFQCVgZU= -gitea.pena/PenaSide/linters-golang v0.0.0-20241207122018-933207374735 h1:jDVeUhGBTXBibmW5dmtJg2m2+z5z2Rf6J4G0LpjVoJ0= -gitea.pena/PenaSide/linters-golang v0.0.0-20241207122018-933207374735/go.mod h1:gdd+vOT6up9STkEbxa2qESLIMZFjCmRbkcheFQCVgZU= -gitea.pena/PenaSide/trashlog v0.0.0-20250222101337-a43552caae6f h1:KbZU49A8tGnqWZiDwerKx2LVT7LD69Y13bwHkuyIjrM= -gitea.pena/PenaSide/trashlog v0.0.0-20250222101337-a43552caae6f/go.mod h1:GRfWJerTUlgy82CiYAxE4tVYSVV54zEJJQy17Fx46E4= -gitea.pena/SQuiz/common v0.0.0-20250221135056-f98c45e04909 h1:iCiqaJ6a7rGESAEUgtVA9IqhVn0oKiwRk7bryTWPV5w= -gitea.pena/SQuiz/common v0.0.0-20250221135056-f98c45e04909/go.mod h1:rQRjqLlLyM71FZcvbM95Nv3ciq44F9DFtUHPZmDK3T8= gitea.pena/SQuiz/common v0.0.0-20250514124515-870e52266ca5 h1:C+iCsGMSUJonOTNNk8wWYOfzZ0Jjw+2IQ5FaEGwRVT0= gitea.pena/SQuiz/common v0.0.0-20250514124515-870e52266ca5/go.mod h1:zCrUwDh0APpztKk6NUqTZv+zhjVbWpGBJiJ5z9dAH0U= -gitea.pena/SQuiz/common v0.0.0-20250519111841-b15aacb1ad58 h1:MJmBqdHoX0A6+gC/2d6veoU5vKgY5JAX9F+G7CK4z4A= -gitea.pena/SQuiz/common v0.0.0-20250519111841-b15aacb1ad58/go.mod h1:rQRjqLlLyM71FZcvbM95Nv3ciq44F9DFtUHPZmDK3T8= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +gitea.pena/SQuiz/common v0.0.0-20250601205720-77c1b6362226 h1:gozqNSI34OZn0ymLt1Hv3wb3zk+OzKpGYQnSpt6jJcA= +gitea.pena/SQuiz/common v0.0.0-20250601205720-77c1b6362226/go.mod h1:zCrUwDh0APpztKk6NUqTZv+zhjVbWpGBJiJ5z9dAH0U= github.com/ClickHouse/clickhouse-go v1.5.4 h1:cKjXeYLNWVJIx2J1K6H2CqyRmfwVJVY1OV1coaaFcI0= github.com/ClickHouse/clickhouse-go v1.5.4/go.mod h1:EaI/sW7Azgz9UATzd5ZdZHRUhHgv5+JMS9NSr2smCJI= github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA=