# Reusable CI/CD Workflows for k\_ Services This repository contains reusable CI and CD workflows that automatically detect Kubernetes service type (Kubernetes-only vs Helm + Kubernetes) and execute the relevant steps. ## Features - **Reusable CI and CD**: Separate reusable workflows for validation and deployment - **Automatic Detection**: Detects whether `helmfile.yaml` exists and whether `k8s/` exists - **Conditional Execution**: Runs Helm steps only when applicable - **Flexible Inputs**: Supports custom `k8s_dir` and `helmfile_path` ## Usage ### Basic CI Usage Call the reusable CI workflow: ```yaml jobs: ci: uses: https://gitea.t000-n.de/t.behrendt/k_deploy_workflows/.gitea/workflows/ci.yaml@main secrets: inherit ``` ### Basic CD Usage Call the reusable CD workflow: ```yaml jobs: deploy: uses: https://gitea.t000-n.de/t.behrendt/k_deploy_workflows/.gitea/workflows/cd.yaml@main secrets: inherit ``` ### Advanced Usage with Custom Paths and Flags ```yaml jobs: ci: uses: https://gitea.t000-n.de/t.behrendt/k_deploy_workflows/.gitea/workflows/ci.yaml@main with: k8s_dir: "kubernetes/" helmfile_path: "helm/helmfile.yaml" skip_helm_validation: true secrets: inherit ``` ## Inputs ### CI (`.gitea/workflows/ci.yaml`) | Parameter | Description | Default | Required | | ---------------------- | -------------------------------------------- | --------------- | -------- | | `k8s_dir` | Path to Kubernetes manifests directory | `k8s/` | No | | `helmfile_path` | Path to helmfile.yaml | `helmfile.yaml` | No | | `skip_helm_validation` | Skip Helm validation even if helmfile exists | `false` | No | | `helmfile_env` | JSON object string passed as env to helmfile | `{}` | No | ### CD (`.gitea/workflows/cd.yaml`) | Parameter | Description | Default | Required | | -------------------------------- | -------------------------------------------- | --------------- | -------- | | `k8s_dir` | Path to Kubernetes manifests directory | `k8s/` | No | | `helmfile_path` | Path to helmfile.yaml | `helmfile.yaml` | No | | `skip_helm_deployment` | Skip Helm deployment even if helmfile exists | `false` | No | | `skip_shared_secrets_deployment` | Skip shared secrets deployment | `false` | No | | `helmfile_env` | JSON object string passed as env to helmfile | `{}` | No | ## Directory Structure Requirements ### Full example structure (Helm + Kubernetes): ``` your-service/ ├── k8s/ │ ├── deployment.yaml │ ├── service.yaml │ └── ... ├── helmfile.yaml └── .gitea/workflows/your-workflow.yaml ```