++ aaahhh

This commit is contained in:
gitlab-pusher 2026-07-17 11:08:54 +00:00
parent ae63a51323
commit 50c8430733
2 changed files with 75 additions and 126 deletions

View File

@ -13,6 +13,7 @@ name: Terraform Terragrunt (contour)
on: on:
pull_request: pull_request:
workflow_dispatch:
branches: [contour] branches: [contour]
paths: paths:
- "live/**" - "live/**"

View File

@ -1,133 +1,81 @@
name: Terraform Terragrunt (contour) stages:
- generate
- trigger
- deploy
# One workflow for ALL closed contours. Per-contour differentiation is done via
# repository variables/secrets in each contour's Gitea — this is the downstream
# runner contract:
# vars: INFRA_ENV, RUNNER_LABEL, RUNNER_IMAGE
# secrets: TF_STATE_S3_ENDPOINT, TF_STATE_S3_BUCKET, S3_ACCESS_KEY, S3_SECRET_KEY,
# VAULT_ADDR, VAULT_TOKEN, SOPS_AGE_KEY, KUBECONFIG_B64 (external runner
# only), KUBE_CONTEXT (external runner only)
# Infra-service admin creds are NOT passed as secrets — they are read from Vault
# at run time (see the "Run ... stacks" step) so the single source of truth stays
# in the contour Vault.
on:
workflow_dispatch: generate-pipeline:
pull_request: stage: generate
branches: [contour] image: alpine:latest
before_script:
- apk add --no-cache bash findutils
script:
- echo "=== DEBUG INFO ==="
- echo "CI_PIPELINE_SOURCE=$CI_PIPELINE_SOURCE"
- echo "CI_COMMIT_BRANCH=$CI_COMMIT_BRANCH"
- echo "CI_MERGE_REQUEST_SOURCE_BRANCH_NAME=$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME"
- pwd && ls -la
- echo "=== Finding terragrunt files ==="
- find live -name "terragrunt.hcl" -not -path "*/.terragrunt-cache/*" | head -20 || echo "No files found"
- echo "=== Generating pipeline ==="
- chmod +x ./scripts/generate-pipeline.sh
- ./scripts/generate-pipeline.sh
- echo "=== Generated pipeline content ==="
- cat .gitlab-ci.generated.yml
artifacts:
paths: paths:
- "live/**" - .gitlab-ci.generated.yml
- "modules/**" expire_in: 1 hour
- "infrastructure.yaml" rules:
- "infrastructure-secrets.yaml" - if: '$CI_PIPELINE_SOURCE == "pipeline"'
- "scripts/**" - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- ".gitea/workflows/**" - if: '$CI_COMMIT_BRANCH == "stage"'
push: - if: '$CI_COMMIT_BRANCH == "master"'
branches: [contour] - if: '$CI_COMMIT_BRANCH =~ /^feature\/.*/'
paths:
- "live/**"
- "modules/**"
- "infrastructure.yaml"
- "infrastructure-secrets.yaml"
- "scripts/**"
- ".gitea/workflows/**"
env:
TF_STATE_S3_REGION: ru-central1
INFRA_ENV: ${{ vars.INFRA_ENV }}
jobs: # Prod environment
validate: trigger-downstream-prod:
runs-on: ${{ vars.RUNNER_LABEL || 'ubuntu-latest' }} stage: trigger
container: needs:
image: ${{ vars.RUNNER_IMAGE || 'cr.yandex/crp3ccidau046kdj8g9q/terraform/terragrunt:v9.11' }} - generate-pipeline
env: trigger:
TF_STATE_S3_ENDPOINT: ${{ secrets.TF_STATE_S3_ENDPOINT }} include:
TF_STATE_S3_BUCKET: ${{ secrets.TF_STATE_S3_BUCKET }} - artifact: .gitlab-ci.generated.yml
S3_ACCESS_KEY: ${{ secrets.S3_ACCESS_KEY }} job: generate-pipeline
S3_SECRET_KEY: ${{ secrets.S3_SECRET_KEY }} strategy: depend
VAULT_ADDR: ${{ secrets.VAULT_ADDR }} forward:
VAULT_TOKEN: ${{ secrets.VAULT_TOKEN }} pipeline_variables: true
SOPS_AGE_KEY: ${{ secrets.SOPS_AGE_KEY }} yaml_variables: true
KUBE_CONTEXT: ${{ secrets.KUBE_CONTEXT }} variables:
KUBECONFIG_B64: ${{ secrets.KUBECONFIG_B64 }} TERRAFORM_IMAGE_NAME: cr.yandex/crp3ccidau046kdj8g9q/terraform/terragrunt:v9.11
KUBECONFIG: /workspace/.kube/config YC_SERVICE_ACCOUNT_KEY_FILE: ${YC_PROD_SERVICE_ACCOUNT_KEY_FILE}
GIT_AUTH_TOKEN: ${{ github.token }} YC_CLOUD_ID: ${YC_CLOUD_ID}
steps: YC_STAGE_FOLDER_ID: ${YC_STAGE_FOLDER_ID}
- uses: actions/checkout@v4 YC_PROD_FOLDER_ID: ${YC_PROD_FOLDER_ID}
- name: Prepare kubeconfig YC_PREPROD_FOLDER_ID: ${YC_PREPROD_FOLDER_ID}
run: | S3_ACCESS_KEY: ${S3_PROD_ACCESS_KEY}
if [ -n "${KUBECONFIG_B64:-}" ]; then S3_SECRET_KEY: ${S3_PROD_SECRET_KEY}
mkdir -p /workspace/.kube S3_STATE_BUCKET: ${S3_PROD_STATE_BUCKET}
echo "$KUBECONFIG_B64" | base64 -d > /workspace/.kube/config AWS_ACCESS_KEY_ID: ${S3_PROD_ACCESS_KEY}
chmod 600 /workspace/.kube/config AWS_SECRET_ACCESS_KEY: ${S3_PROD_SECRET_KEY}
else TARGET_ENV: "prod"
echo "No KUBECONFIG_B64 — in-cluster runner: kubernetes/vault providers use the pod ServiceAccount kubeconfig or in-cluster config." rules:
fi - if: '$CI_PIPELINE_SOURCE == "pipeline"'
- name: Run validate for all stacks - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
run: | - if: '$CI_COMMIT_BRANCH == "master"'
. ./scripts/load_admin_creds.sh - if: '$CI_COMMIT_BRANCH =~ /^feature\/.*/'
./scripts/run_all_stacks.sh validate
plan:
needs: [validate]
runs-on: ${{ vars.RUNNER_LABEL || 'ubuntu-latest' }}
container:
image: ${{ vars.RUNNER_IMAGE || 'cr.yandex/crp3ccidau046kdj8g9q/terraform/terragrunt:v9.11' }}
env:
TF_STATE_S3_ENDPOINT: ${{ secrets.TF_STATE_S3_ENDPOINT }}
TF_STATE_S3_BUCKET: ${{ secrets.TF_STATE_S3_BUCKET }}
S3_ACCESS_KEY: ${{ secrets.S3_ACCESS_KEY }}
S3_SECRET_KEY: ${{ secrets.S3_SECRET_KEY }}
VAULT_ADDR: ${{ secrets.VAULT_ADDR }}
VAULT_TOKEN: ${{ secrets.VAULT_TOKEN }}
SOPS_AGE_KEY: ${{ secrets.SOPS_AGE_KEY }}
KUBE_CONTEXT: ${{ secrets.KUBE_CONTEXT }}
KUBECONFIG_B64: ${{ secrets.KUBECONFIG_B64 }}
KUBECONFIG: /workspace/.kube/config
GIT_AUTH_TOKEN: ${{ github.token }}
steps:
- uses: actions/checkout@v4
- name: Prepare kubeconfig
run: |
if [ -n "${KUBECONFIG_B64:-}" ]; then
mkdir -p /workspace/.kube
echo "$KUBECONFIG_B64" | base64 -d > /workspace/.kube/config
chmod 600 /workspace/.kube/config
fi
- name: Run plan for all stacks
run: |
. ./scripts/load_admin_creds.sh
./scripts/run_all_stacks.sh plan
apply: mirror-contour:
needs: [plan] stage: deploy
if: github.event_name == 'push' image: alpine:3.21
runs-on: ${{ vars.RUNNER_LABEL || 'ubuntu-latest' }} variables:
container: GIT_DEPTH: "0"
image: ${{ vars.RUNNER_IMAGE || 'cr.yandex/crp3ccidau046kdj8g9q/terraform/terragrunt:v9.11' }} before_script:
env: - apk add --no-cache git ca-certificates
TF_STATE_S3_ENDPOINT: ${{ secrets.TF_STATE_S3_ENDPOINT }} script:
TF_STATE_S3_BUCKET: ${{ secrets.TF_STATE_S3_BUCKET }} - git push --force "$CONTOUR_MIRROR_PUSH_URL" "$CI_COMMIT_SHA:refs/heads/contour"
S3_ACCESS_KEY: ${{ secrets.S3_ACCESS_KEY }} rules:
S3_SECRET_KEY: ${{ secrets.S3_SECRET_KEY }} - if: '$CI_COMMIT_BRANCH == "contour" && $CI_PIPELINE_SOURCE == "push"'
VAULT_ADDR: ${{ secrets.VAULT_ADDR }}
VAULT_TOKEN: ${{ secrets.VAULT_TOKEN }}
SOPS_AGE_KEY: ${{ secrets.SOPS_AGE_KEY }}
KUBE_CONTEXT: ${{ secrets.KUBE_CONTEXT }}
KUBECONFIG_B64: ${{ secrets.KUBECONFIG_B64 }}
KUBECONFIG: /workspace/.kube/config
GIT_AUTH_TOKEN: ${{ github.token }}
steps:
- uses: actions/checkout@v4
- name: Prepare kubeconfig
run: |
if [ -n "${KUBECONFIG_B64:-}" ]; then
mkdir -p /workspace/.kube
echo "$KUBECONFIG_B64" | base64 -d > /workspace/.kube/config
chmod 600 /workspace/.kube/config
fi
- name: Run apply for all stacks
run: |
. ./scripts/load_admin_creds.sh
./scripts/run_all_stacks.sh apply