Reviewed-on: #4 Co-authored-by: Timo Behrendt <t.behrendt@t00n.de> Co-committed-by: Timo Behrendt <t.behrendt@t00n.de>
163 lines
4.8 KiB
Markdown
163 lines
4.8 KiB
Markdown
> [!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-<chart-name>` 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
|