> [!WARNING] > Repo is currently not in use and not tested. > We are waiting for proper shared workflow UI support in gitea. Otherwise errors are hard to identify. > Follow https://github.com/go-gitea/gitea/issues/24604 # Reusable CI Workflow for Kubernetes Services This directory contains a reusable CI workflow that automatically detects and validates your Kubernetes services, whether they use Helm + Kubernetes or just Kubernetes manifests. ## Features - **Automatic Detection**: Automatically detects if your service uses Helm (helmfile.yaml) or just Kubernetes manifests - **Conditional Validation**: Only runs Helm validation when helmfile.yaml exists - **Flexible Paths**: Configurable paths for k8s directory and helmfile - **Comprehensive Validation**: Validates both Kubernetes manifests and Helm charts - **CI Summary**: Provides a clear summary of what was validated ## Usage ### Basic Usage (Recommended) Simply call the workflow without any parameters - it will automatically detect your service type: ```yaml jobs: ci: uses: ./.gitea/workflows/ci.yaml ``` ### Advanced Usage with Custom Paths If your service uses non-standard directory names: ```yaml jobs: ci: uses: ./.gitea/workflows/ci.yaml with: k8s_dir: "kubernetes/" helmfile_path: "helm/helmfile.yaml" ``` ### Force Skip Helm Validation If you want to skip Helm validation even when helmfile.yaml exists: ```yaml jobs: ci: uses: ./.gitea/workflows/ci.yaml with: skip_helm_validation: true ``` ## Input Parameters | 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 | ## Directory Structure Requirements ### For Kubernetes-only services: ``` your-service/ ├── k8s/ │ ├── deployment.yaml │ ├── service.yaml │ └── ... └── .gitea/workflows/your-workflow.yaml ``` ### For Helm + Kubernetes services: ``` your-service/ ├── k8s/ │ ├── deployment.yaml │ ├── service.yaml │ └── ... ├── helmfile.yaml └── .gitea/workflows/your-workflow.yaml ``` ## What Gets Validated ### Always (if k8s/ directory exists): - Kubernetes manifest validation using `kubectl --dry-run` - Namespace extraction from repository name - Basic Kubernetes syntax and schema validation ### Conditionally (if helmfile.yaml exists and Helm validation not skipped): - Helm chart validation using `helmfile diff` - Kubernetes manifests in Helm context - Helm-specific configurations and values ## Example Workflows See `example-usage.yaml` for complete examples of how to use this workflow in different scenarios. ## Available Actions ### Extract Chart Name from Repository Name The `extract-chart-name-from-repo-name` action extracts the chart name from repository names following the `helm-` convention. #### Usage ```yaml - name: Extract chart name uses: ./.gitea/actions/extract-chart-name-from-repo-name with: repo: ${{ github.repository_name }} # e.g., "helm-my-service" ``` #### Inputs | Parameter | Description | Required | | --------- | ------------------------------------------------ | -------- | | `repo` | The full repository name (e.g., "helm-my-chart") | Yes | #### Outputs | Output | Description | | ------------ | ---------------------------------------------------------------- | | `chart-name` | The extracted chart name (e.g., "my-chart" from "helm-my-chart") | #### Example For a repository named `helm-user-service`, this action will extract `user-service` as the chart name. ## Dependencies This workflow requires: - `./.gitea/actions/extract-namespace-from-repo-name` action - `./.gitea/actions/extract-chart-name-from-repo-name` action - `KUBECONFIG` secret configured in your repository - Access to your Kubernetes cluster ## Troubleshooting ### Helm validation skipped unexpectedly - Check if `helmfile.yaml` exists in the expected location - Verify the `skip_helm_validation` parameter is not set to `true` - Ensure the file path is correct if using custom paths ### Kubernetes validation skipped - Verify the `k8s/` directory (or custom path) exists - Check the directory contains valid Kubernetes manifests ### Permission issues - Ensure the `KUBECONFIG` secret is properly configured - Verify the workflow has access to your Kubernetes cluster