feat: add helm-chart name extraction action (#4)
Reviewed-on: #4 Co-authored-by: Timo Behrendt <t.behrendt@t00n.de> Co-committed-by: Timo Behrendt <t.behrendt@t00n.de>
This commit was merged in pull request #4.
This commit is contained in:
19
.gitea/actions/extract-chart-name-from-repo-name/action.yaml
Normal file
19
.gitea/actions/extract-chart-name-from-repo-name/action.yaml
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
name: Extract chart name from repo name
|
||||||
|
description: Extracts the chart name from the repo name, based on the convention of helm-<chart-name>
|
||||||
|
inputs:
|
||||||
|
repo:
|
||||||
|
description: The full repository name (e.g., "helm-my-chart")
|
||||||
|
required: true
|
||||||
|
outputs:
|
||||||
|
chart-name:
|
||||||
|
description: The extracted chart name
|
||||||
|
value: ${{ steps.extract.outputs.suffix }}
|
||||||
|
runs:
|
||||||
|
using: "composite"
|
||||||
|
steps:
|
||||||
|
- id: extract
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
full_repo="${{ inputs.repo }}"
|
||||||
|
suffix="${full_repo##*helm-}"
|
||||||
|
echo "suffix=$suffix" >> $GITHUB_OUTPUT
|
||||||
54
README.md
54
README.md
@@ -36,8 +36,8 @@ jobs:
|
|||||||
ci:
|
ci:
|
||||||
uses: ./.gitea/workflows/ci.yaml
|
uses: ./.gitea/workflows/ci.yaml
|
||||||
with:
|
with:
|
||||||
k8s_dir: 'kubernetes/'
|
k8s_dir: "kubernetes/"
|
||||||
helmfile_path: 'helm/helmfile.yaml'
|
helmfile_path: "helm/helmfile.yaml"
|
||||||
```
|
```
|
||||||
|
|
||||||
### Force Skip Helm Validation
|
### Force Skip Helm Validation
|
||||||
@@ -54,15 +54,16 @@ jobs:
|
|||||||
|
|
||||||
## Input Parameters
|
## Input Parameters
|
||||||
|
|
||||||
| Parameter | Description | Default | Required |
|
| Parameter | Description | Default | Required |
|
||||||
|-----------|-------------|---------|----------|
|
| ---------------------- | -------------------------------------------- | --------------- | -------- |
|
||||||
| `k8s_dir` | Path to Kubernetes manifests directory | `k8s/` | No |
|
| `k8s_dir` | Path to Kubernetes manifests directory | `k8s/` | No |
|
||||||
| `helmfile_path` | Path to helmfile.yaml | `helmfile.yaml` | No |
|
| `helmfile_path` | Path to helmfile.yaml | `helmfile.yaml` | No |
|
||||||
| `skip_helm_validation` | Skip Helm validation even if helmfile exists | `false` | No |
|
| `skip_helm_validation` | Skip Helm validation even if helmfile exists | `false` | No |
|
||||||
|
|
||||||
## Directory Structure Requirements
|
## Directory Structure Requirements
|
||||||
|
|
||||||
### For Kubernetes-only services:
|
### For Kubernetes-only services:
|
||||||
|
|
||||||
```
|
```
|
||||||
your-service/
|
your-service/
|
||||||
├── k8s/
|
├── k8s/
|
||||||
@@ -73,6 +74,7 @@ your-service/
|
|||||||
```
|
```
|
||||||
|
|
||||||
### For Helm + Kubernetes services:
|
### For Helm + Kubernetes services:
|
||||||
|
|
||||||
```
|
```
|
||||||
your-service/
|
your-service/
|
||||||
├── k8s/
|
├── k8s/
|
||||||
@@ -86,11 +88,13 @@ your-service/
|
|||||||
## What Gets Validated
|
## What Gets Validated
|
||||||
|
|
||||||
### Always (if k8s/ directory exists):
|
### Always (if k8s/ directory exists):
|
||||||
|
|
||||||
- Kubernetes manifest validation using `kubectl --dry-run`
|
- Kubernetes manifest validation using `kubectl --dry-run`
|
||||||
- Namespace extraction from repository name
|
- Namespace extraction from repository name
|
||||||
- Basic Kubernetes syntax and schema validation
|
- Basic Kubernetes syntax and schema validation
|
||||||
|
|
||||||
### Conditionally (if helmfile.yaml exists and Helm validation not skipped):
|
### Conditionally (if helmfile.yaml exists and Helm validation not skipped):
|
||||||
|
|
||||||
- Helm chart validation using `helmfile diff`
|
- Helm chart validation using `helmfile diff`
|
||||||
- Kubernetes manifests in Helm context
|
- Kubernetes manifests in Helm context
|
||||||
- Helm-specific configurations and values
|
- Helm-specific configurations and values
|
||||||
@@ -99,24 +103,60 @@ your-service/
|
|||||||
|
|
||||||
See `example-usage.yaml` for complete examples of how to use this workflow in different scenarios.
|
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
|
## Dependencies
|
||||||
|
|
||||||
This workflow requires:
|
This workflow requires:
|
||||||
|
|
||||||
- `./.gitea/actions/extract-namespace-from-repo-name` action
|
- `./.gitea/actions/extract-namespace-from-repo-name` action
|
||||||
|
- `./.gitea/actions/extract-chart-name-from-repo-name` action
|
||||||
- `KUBECONFIG` secret configured in your repository
|
- `KUBECONFIG` secret configured in your repository
|
||||||
- Access to your Kubernetes cluster
|
- Access to your Kubernetes cluster
|
||||||
|
|
||||||
## Troubleshooting
|
## Troubleshooting
|
||||||
|
|
||||||
### Helm validation skipped unexpectedly
|
### Helm validation skipped unexpectedly
|
||||||
|
|
||||||
- Check if `helmfile.yaml` exists in the expected location
|
- Check if `helmfile.yaml` exists in the expected location
|
||||||
- Verify the `skip_helm_validation` parameter is not set to `true`
|
- Verify the `skip_helm_validation` parameter is not set to `true`
|
||||||
- Ensure the file path is correct if using custom paths
|
- Ensure the file path is correct if using custom paths
|
||||||
|
|
||||||
### Kubernetes validation skipped
|
### Kubernetes validation skipped
|
||||||
|
|
||||||
- Verify the `k8s/` directory (or custom path) exists
|
- Verify the `k8s/` directory (or custom path) exists
|
||||||
- Check the directory contains valid Kubernetes manifests
|
- Check the directory contains valid Kubernetes manifests
|
||||||
|
|
||||||
### Permission issues
|
### Permission issues
|
||||||
|
|
||||||
- Ensure the `KUBECONFIG` secret is properly configured
|
- Ensure the `KUBECONFIG` secret is properly configured
|
||||||
- Verify the workflow has access to your Kubernetes cluster
|
- Verify the workflow has access to your Kubernetes cluster
|
||||||
|
|||||||
Reference in New Issue
Block a user