+ version bump
Some checks failed
ci/woodpecker/push/db Pipeline was successful
ci/woodpecker/push/bff Pipeline failed
ci/woodpecker/push/billing_fees Pipeline failed
ci/woodpecker/push/chain_gateway Pipeline failed
ci/woodpecker/push/fx_ingestor Pipeline failed
ci/woodpecker/push/fx_oracle Pipeline failed
ci/woodpecker/push/ledger Pipeline failed
ci/woodpecker/push/nats Pipeline was successful
ci/woodpecker/push/notification Pipeline failed
ci/woodpecker/push/payments_orchestrator Pipeline failed
ci/woodpecker/push/bump_version unknown status
Some checks failed
ci/woodpecker/push/db Pipeline was successful
ci/woodpecker/push/bff Pipeline failed
ci/woodpecker/push/billing_fees Pipeline failed
ci/woodpecker/push/chain_gateway Pipeline failed
ci/woodpecker/push/fx_ingestor Pipeline failed
ci/woodpecker/push/fx_oracle Pipeline failed
ci/woodpecker/push/ledger Pipeline failed
ci/woodpecker/push/nats Pipeline was successful
ci/woodpecker/push/notification Pipeline failed
ci/woodpecker/push/payments_orchestrator Pipeline failed
ci/woodpecker/push/bump_version unknown status
This commit is contained in:
6
.vscode/settings.json
vendored
6
.vscode/settings.json
vendored
@@ -1,5 +1,9 @@
|
|||||||
{
|
{
|
||||||
"yaml.schemas": {
|
"yaml.schemas": {
|
||||||
"https://raw.githubusercontent.com/woodpecker-ci/woodpecker/main/pipeline/frontend/yaml/linter/schema/schema.json": "file:///Users/stephan/Documents/Projects/sendico/.woodpecker/chain_gateway.yml"
|
"https://raw.githubusercontent.com/woodpecker-ci/woodpecker/main/pipeline/frontend/yaml/linter/schema/schema.json": [
|
||||||
|
".woodpecker/*.yml",
|
||||||
|
".woodpecker.yml",
|
||||||
|
"woodpecker.yml"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,10 +1,13 @@
|
|||||||
matrix:
|
kind: pipeline
|
||||||
include:
|
type: docker
|
||||||
- BFF_IMAGE_PATH: bff/service
|
name: bff
|
||||||
BFF_DOCKERFILE: ci/prod/compose/bff.dockerfile
|
|
||||||
BFF_MONGO_SECRET_PATH: sendico/db
|
environment:
|
||||||
BFF_API_SECRET_PATH: sendico/api/endpoint
|
BFF_IMAGE_PATH: bff/service
|
||||||
BFF_ENV: prod
|
BFF_DOCKERFILE: ci/prod/compose/bff.dockerfile
|
||||||
|
BFF_MONGO_SECRET_PATH: sendico/db
|
||||||
|
BFF_API_SECRET_PATH: sendico/api/endpoint
|
||||||
|
BFF_ENV: prod
|
||||||
|
|
||||||
when:
|
when:
|
||||||
- event: push
|
- event: push
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
matrix:
|
kind: pipeline
|
||||||
include:
|
type: docker
|
||||||
- FEES_IMAGE_PATH: billing/fees
|
name: billing_fees
|
||||||
FEES_DOCKERFILE: ci/prod/compose/billing_fees.dockerfile
|
|
||||||
FEES_MONGO_SECRET_PATH: sendico/db
|
environment:
|
||||||
FEES_ENV: prod
|
FEES_IMAGE_PATH: billing/fees
|
||||||
|
FEES_DOCKERFILE: ci/prod/compose/billing_fees.dockerfile
|
||||||
|
FEES_MONGO_SECRET_PATH: sendico/db
|
||||||
|
FEES_ENV: prod
|
||||||
|
|
||||||
when:
|
when:
|
||||||
- event: push
|
- event: push
|
||||||
|
|||||||
29
.woodpecker/bump_version.yml
Normal file
29
.woodpecker/bump_version.yml
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
kind: pipeline
|
||||||
|
type: docker
|
||||||
|
name: bump_version
|
||||||
|
depends_on:
|
||||||
|
- bff
|
||||||
|
- billing_fees
|
||||||
|
- chain_gateway
|
||||||
|
- db
|
||||||
|
- fx_ingestor
|
||||||
|
- fx_oracle
|
||||||
|
- ledger
|
||||||
|
- nats
|
||||||
|
- notification
|
||||||
|
- payments_orchestrator
|
||||||
|
|
||||||
|
when:
|
||||||
|
- event: push
|
||||||
|
branch: main
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: bump-version
|
||||||
|
image: alpine:latest
|
||||||
|
environment:
|
||||||
|
GIT_AUTHOR_NAME: woodpecker
|
||||||
|
GIT_AUTHOR_EMAIL: ci@sendico.io
|
||||||
|
commands:
|
||||||
|
- set -euo pipefail
|
||||||
|
- apk add --no-cache git
|
||||||
|
- sh ci/scripts/common/bump_version.sh
|
||||||
@@ -1,12 +1,15 @@
|
|||||||
matrix:
|
kind: pipeline
|
||||||
include:
|
type: docker
|
||||||
- CHAIN_GATEWAY_IMAGE_PATH: chain/gateway
|
name: chain_gateway
|
||||||
CHAIN_GATEWAY_DOCKERFILE: ci/prod/compose/chain_gateway.dockerfile
|
|
||||||
CHAIN_GATEWAY_MONGO_SECRET_PATH: sendico/db
|
environment:
|
||||||
CHAIN_GATEWAY_RPC_SECRET_PATH: sendico/chain/gateway
|
CHAIN_GATEWAY_IMAGE_PATH: chain/gateway
|
||||||
CHAIN_GATEWAY_WALLET_SECRET_PATH: sendico/chain/gateway/wallet
|
CHAIN_GATEWAY_DOCKERFILE: ci/prod/compose/chain_gateway.dockerfile
|
||||||
CHAIN_GATEWAY_VAULT_SECRET_PATH: sendico/chain/gateway/vault
|
CHAIN_GATEWAY_MONGO_SECRET_PATH: sendico/db
|
||||||
CHAIN_GATEWAY_ENV: prod
|
CHAIN_GATEWAY_RPC_SECRET_PATH: sendico/chain/gateway
|
||||||
|
CHAIN_GATEWAY_WALLET_SECRET_PATH: sendico/chain/gateway/wallet
|
||||||
|
CHAIN_GATEWAY_VAULT_SECRET_PATH: sendico/chain/gateway/vault
|
||||||
|
CHAIN_GATEWAY_ENV: prod
|
||||||
|
|
||||||
when:
|
when:
|
||||||
- event: push
|
- event: push
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
kind: pipeline
|
||||||
|
type: docker
|
||||||
|
name: db
|
||||||
|
|
||||||
when:
|
when:
|
||||||
- event: push
|
- event: push
|
||||||
branch: main
|
branch: main
|
||||||
|
|||||||
@@ -1,19 +1,15 @@
|
|||||||
matrix:
|
kind: pipeline
|
||||||
include:
|
type: docker
|
||||||
- FX_PIPELINE: fx_ingestor
|
name: fx_ingestor
|
||||||
FX_IMAGE_PATH: fx/ingestor
|
|
||||||
FX_DOCKERFILE: ci/prod/compose/fx_ingestor.dockerfile
|
environment:
|
||||||
FX_DEPLOY_TARGET: ingestor
|
FX_PIPELINE: fx_ingestor
|
||||||
FX_MONGO_SECRET_PATH: sendico/db
|
FX_IMAGE_PATH: fx/ingestor
|
||||||
FX_NEEDS_NATS: "false"
|
FX_DOCKERFILE: ci/prod/compose/fx_ingestor.dockerfile
|
||||||
FX_ENV: prod
|
FX_DEPLOY_TARGET: ingestor
|
||||||
- FX_PIPELINE: fx_oracle
|
FX_MONGO_SECRET_PATH: sendico/db
|
||||||
FX_IMAGE_PATH: fx/oracle
|
FX_NEEDS_NATS: "false"
|
||||||
FX_DOCKERFILE: ci/prod/compose/fx_oracle.dockerfile
|
FX_ENV: prod
|
||||||
FX_DEPLOY_TARGET: oracle
|
|
||||||
FX_MONGO_SECRET_PATH: sendico/db
|
|
||||||
FX_NEEDS_NATS: "true"
|
|
||||||
FX_ENV: prod
|
|
||||||
|
|
||||||
when:
|
when:
|
||||||
- event: push
|
- event: push
|
||||||
80
.woodpecker/fx_oracle.yml
Normal file
80
.woodpecker/fx_oracle.yml
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
kind: pipeline
|
||||||
|
type: docker
|
||||||
|
name: fx_oracle
|
||||||
|
|
||||||
|
environment:
|
||||||
|
FX_PIPELINE: fx_oracle
|
||||||
|
FX_IMAGE_PATH: fx/oracle
|
||||||
|
FX_DOCKERFILE: ci/prod/compose/fx_oracle.dockerfile
|
||||||
|
FX_DEPLOY_TARGET: oracle
|
||||||
|
FX_MONGO_SECRET_PATH: sendico/db
|
||||||
|
FX_NEEDS_NATS: "true"
|
||||||
|
FX_ENV: prod
|
||||||
|
|
||||||
|
when:
|
||||||
|
- event: push
|
||||||
|
branch: main
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: version
|
||||||
|
image: alpine:latest
|
||||||
|
commands:
|
||||||
|
- set -euo pipefail 2>/dev/null || set -eu
|
||||||
|
- apk add --no-cache git
|
||||||
|
- GIT_REV="$(git rev-parse --short HEAD)"
|
||||||
|
- BUILD_BRANCH="$(git rev-parse --abbrev-ref HEAD)"
|
||||||
|
- APP_V="$(cat version)"
|
||||||
|
- BUILD_DATE="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
||||||
|
- BUILD_USER="${WOODPECKER_MACHINE:-woodpecker}"
|
||||||
|
- printf "GIT_REV=%s\nBUILD_BRANCH=%s\nAPP_V=%s\nBUILD_DATE=%s\nBUILD_USER=%s\n" \
|
||||||
|
"$GIT_REV" "$BUILD_BRANCH" "$APP_V" "$BUILD_DATE" "$BUILD_USER" | tee .env.version
|
||||||
|
|
||||||
|
- name: proto
|
||||||
|
image: golang:alpine
|
||||||
|
depends_on: [ version ]
|
||||||
|
commands:
|
||||||
|
- set -eu
|
||||||
|
# protoc + headers; protobuf runtime pkg is not needed for codegen
|
||||||
|
- apk add --no-cache bash git build-base protoc protobuf-dev
|
||||||
|
- go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
|
||||||
|
- go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
|
||||||
|
- export PATH="$(go env GOPATH)/bin:$PATH"
|
||||||
|
- bash ci/scripts/proto/generate.sh
|
||||||
|
|
||||||
|
- name: secrets
|
||||||
|
image: alpine:latest
|
||||||
|
depends_on: [ version ]
|
||||||
|
environment:
|
||||||
|
VAULT_ADDR: { from_secret: VAULT_ADDR }
|
||||||
|
VAULT_ROLE_ID: { from_secret: VAULT_APP_ROLE }
|
||||||
|
VAULT_SECRET_ID: { from_secret: VAULT_SECRET_ID }
|
||||||
|
commands:
|
||||||
|
- set -euo pipefail
|
||||||
|
- apk add --no-cache bash coreutils openssh-keygen curl sed python3
|
||||||
|
- mkdir -p secrets
|
||||||
|
- ./ci/vlt kv_to_file kv ops/deploy/ssh_key private_b64 secrets/SSH_KEY.b64 600
|
||||||
|
- base64 -d secrets/SSH_KEY.b64 > secrets/SSH_KEY
|
||||||
|
- chmod 600 secrets/SSH_KEY
|
||||||
|
- ssh-keygen -y -f secrets/SSH_KEY >/dev/null
|
||||||
|
- ./ci/vlt kv_get kv registry user > secrets/REGISTRY_USER
|
||||||
|
- ./ci/vlt kv_get kv registry password > secrets/REGISTRY_PASSWORD
|
||||||
|
|
||||||
|
- name: build-image
|
||||||
|
image: gcr.io/kaniko-project/executor:debug
|
||||||
|
depends_on: [ proto, secrets ]
|
||||||
|
commands:
|
||||||
|
- sh ci/scripts/fx/build-image.sh
|
||||||
|
|
||||||
|
- name: deploy
|
||||||
|
image: alpine:latest
|
||||||
|
depends_on: [ secrets, build-image ]
|
||||||
|
environment:
|
||||||
|
VAULT_ADDR: { from_secret: VAULT_ADDR }
|
||||||
|
VAULT_ROLE_ID: { from_secret: VAULT_APP_ROLE }
|
||||||
|
VAULT_SECRET_ID: { from_secret: VAULT_SECRET_ID }
|
||||||
|
commands:
|
||||||
|
- set -euo pipefail
|
||||||
|
- apk add --no-cache bash openssh-client rsync coreutils curl sed python3
|
||||||
|
- mkdir -p /root/.ssh
|
||||||
|
- install -m 600 secrets/SSH_KEY /root/.ssh/id_rsa
|
||||||
|
- sh ci/scripts/fx/deploy.sh
|
||||||
@@ -1,9 +1,12 @@
|
|||||||
matrix:
|
kind: pipeline
|
||||||
include:
|
type: docker
|
||||||
- LEDGER_IMAGE_PATH: ledger/service
|
name: ledger
|
||||||
LEDGER_DOCKERFILE: ci/prod/compose/ledger.dockerfile
|
|
||||||
LEDGER_MONGO_SECRET_PATH: sendico/db
|
environment:
|
||||||
LEDGER_ENV: prod
|
LEDGER_IMAGE_PATH: ledger/service
|
||||||
|
LEDGER_DOCKERFILE: ci/prod/compose/ledger.dockerfile
|
||||||
|
LEDGER_MONGO_SECRET_PATH: sendico/db
|
||||||
|
LEDGER_ENV: prod
|
||||||
|
|
||||||
when:
|
when:
|
||||||
- event: push
|
- event: push
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
kind: pipeline
|
||||||
|
type: docker
|
||||||
|
name: nats
|
||||||
|
|
||||||
when:
|
when:
|
||||||
- event: push
|
- event: push
|
||||||
branch: main
|
branch: main
|
||||||
|
|||||||
@@ -1,11 +1,14 @@
|
|||||||
matrix:
|
kind: pipeline
|
||||||
include:
|
type: docker
|
||||||
- NOTIFICATION_IMAGE_PATH: notification/service
|
name: notification
|
||||||
NOTIFICATION_DOCKERFILE: ci/prod/compose/notification.dockerfile
|
|
||||||
NOTIFICATION_MONGO_SECRET_PATH: sendico/db
|
environment:
|
||||||
NOTIFICATION_MAIL_SECRET_PATH: sendico/notification/mail
|
NOTIFICATION_IMAGE_PATH: notification/service
|
||||||
NOTIFICATION_API_SECRET_PATH: sendico/api/endpoint
|
NOTIFICATION_DOCKERFILE: ci/prod/compose/notification.dockerfile
|
||||||
NOTIFICATION_ENV: prod
|
NOTIFICATION_MONGO_SECRET_PATH: sendico/db
|
||||||
|
NOTIFICATION_MAIL_SECRET_PATH: sendico/notification/mail
|
||||||
|
NOTIFICATION_API_SECRET_PATH: sendico/api/endpoint
|
||||||
|
NOTIFICATION_ENV: prod
|
||||||
|
|
||||||
when:
|
when:
|
||||||
- event: push
|
- event: push
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
matrix:
|
kind: pipeline
|
||||||
include:
|
type: docker
|
||||||
- PAYMENTS_IMAGE_PATH: payments/orchestrator
|
name: payments_orchestrator
|
||||||
PAYMENTS_DOCKERFILE: ci/prod/compose/payments_orchestrator.dockerfile
|
|
||||||
PAYMENTS_MONGO_SECRET_PATH: sendico/db
|
environment:
|
||||||
PAYMENTS_ENV: prod
|
PAYMENTS_IMAGE_PATH: payments/orchestrator
|
||||||
|
PAYMENTS_DOCKERFILE: ci/prod/compose/payments_orchestrator.dockerfile
|
||||||
|
PAYMENTS_MONGO_SECRET_PATH: sendico/db
|
||||||
|
PAYMENTS_ENV: prod
|
||||||
|
|
||||||
when:
|
when:
|
||||||
- event: push
|
- event: push
|
||||||
|
|||||||
42
ci/scripts/common/bump_version.sh
Executable file
42
ci/scripts/common/bump_version.sh
Executable file
@@ -0,0 +1,42 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
REPO_ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
||||||
|
cd "${REPO_ROOT}"
|
||||||
|
|
||||||
|
VERSION_FILE="./version"
|
||||||
|
if [ ! -f "${VERSION_FILE}" ]; then
|
||||||
|
echo "[bump-version] version file not found: ${VERSION_FILE}" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
CURRENT_VERSION="$(cat "${VERSION_FILE}")"
|
||||||
|
NEXT_VERSION="$(printf '%s' "${CURRENT_VERSION}" | awk -F. -v OFS=. '
|
||||||
|
NF==1 { print ++$NF; next }
|
||||||
|
{
|
||||||
|
$NF=sprintf("%0*d", length($NF), ($NF+1))
|
||||||
|
print
|
||||||
|
}')"
|
||||||
|
|
||||||
|
printf '%s\n' "${NEXT_VERSION}" > "${VERSION_FILE}"
|
||||||
|
echo "[bump-version] ${CURRENT_VERSION} -> ${NEXT_VERSION}"
|
||||||
|
|
||||||
|
git add "${VERSION_FILE}"
|
||||||
|
if git diff --cached --quiet; then
|
||||||
|
echo "[bump-version] no changes staged, skipping commit"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
AUTHOR_NAME="${GIT_AUTHOR_NAME:-woodpecker}"
|
||||||
|
AUTHOR_EMAIL="${GIT_AUTHOR_EMAIL:-ci@sendico.io}"
|
||||||
|
git config user.name "${AUTHOR_NAME}"
|
||||||
|
git config user.email "${AUTHOR_EMAIL}"
|
||||||
|
|
||||||
|
git commit -m "chore(ci): bump version to ${NEXT_VERSION}"
|
||||||
|
|
||||||
|
BRANCH="${WOODPECKER_BRANCH:-}"
|
||||||
|
if [ -z "${BRANCH}" ] || [ "${BRANCH}" = "HEAD" ]; then
|
||||||
|
BRANCH="$(git rev-parse --abbrev-ref HEAD)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
git push origin "HEAD:${BRANCH}"
|
||||||
83
infra/mail/docker-compose.yml
Normal file
83
infra/mail/docker-compose.yml
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
services:
|
||||||
|
mail:
|
||||||
|
image: ghcr.io/docker-mailserver/docker-mailserver:latest
|
||||||
|
hostname: mail.sendico.io
|
||||||
|
environment:
|
||||||
|
- MAIL_DOMAIN=sendico.io
|
||||||
|
- MAIL_HOSTNAME=mail
|
||||||
|
- MAIL_FQDN=mail.sendico.io
|
||||||
|
- SSL_TYPE=letsencrypt
|
||||||
|
env_file: .env
|
||||||
|
volumes:
|
||||||
|
- /srv/infra/compose/mail/data:/var/mail
|
||||||
|
- /srv/infra/compose/mail/state:/var/mail-state
|
||||||
|
- /srv/infra/compose/mail/logs:/var/log/mail
|
||||||
|
- /srv/infra/compose/mail/config:/tmp/docker-mailserver
|
||||||
|
- traefik_letsencrypt:/etc/letsencrypt:ro # 👈 общие сертификаты Traefik
|
||||||
|
ports:
|
||||||
|
- target: 25
|
||||||
|
published: 25
|
||||||
|
protocol: tcp
|
||||||
|
mode: host
|
||||||
|
- target: 465
|
||||||
|
published: 465
|
||||||
|
protocol: tcp
|
||||||
|
mode: host
|
||||||
|
- target: 587
|
||||||
|
published: 587
|
||||||
|
protocol: tcp
|
||||||
|
mode: host
|
||||||
|
- target: 993
|
||||||
|
published: 993
|
||||||
|
protocol: tcp
|
||||||
|
mode: host
|
||||||
|
cap_add:
|
||||||
|
- NET_ADMIN
|
||||||
|
- SYS_PTRACE
|
||||||
|
deploy:
|
||||||
|
restart_policy:
|
||||||
|
condition: on-failure
|
||||||
|
placement:
|
||||||
|
constraints:
|
||||||
|
- node.hostname == infra
|
||||||
|
stop_grace_period: 1m
|
||||||
|
networks:
|
||||||
|
- cicd
|
||||||
|
|
||||||
|
webmail:
|
||||||
|
image: djmaze/snappymail:latest
|
||||||
|
depends_on:
|
||||||
|
- mail
|
||||||
|
environment:
|
||||||
|
SNAPPYMAIL_DEFAULT_HOST: mail.sendico.io
|
||||||
|
SNAPPYMAIL_DEFAULT_PORT: 993
|
||||||
|
SNAPPYMAIL_SMTP_SERVER: mail.sendico.io
|
||||||
|
SNAPPYMAIL_SMTP_PORT: 587
|
||||||
|
SNAPPYMAIL_SMTP_SECURE: "STARTTLS"
|
||||||
|
volumes:
|
||||||
|
- webmail_data:/var/lib/snappymail
|
||||||
|
networks:
|
||||||
|
- cicd
|
||||||
|
ports:
|
||||||
|
- "8088:80"
|
||||||
|
deploy:
|
||||||
|
restart_policy:
|
||||||
|
condition: on-failure
|
||||||
|
placement:
|
||||||
|
constraints:
|
||||||
|
- node.hostname == infra
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.webmail.rule=Host(`webmail.sendico.io`)"
|
||||||
|
- "traefik.http.routers.webmail.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.webmail.tls.certresolver=letsencrypt"
|
||||||
|
- "traefik.http.services.webmail.loadbalancer.server.port=8888"
|
||||||
|
|
||||||
|
networks:
|
||||||
|
cicd:
|
||||||
|
external: true
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
webmail_data:
|
||||||
|
traefik_letsencrypt:
|
||||||
|
external: true
|
||||||
Reference in New Issue
Block a user