diff --git a/.gitea/actions/extract-chart-name-from-repo-name/action.yaml b/.gitea/actions/extract-chart-name-from-repo-name/action.yaml new file mode 100644 index 0000000..7e72d80 --- /dev/null +++ b/.gitea/actions/extract-chart-name-from-repo-name/action.yaml @@ -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- +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 diff --git a/README.md b/README.md index c59782e..1395b3e 100644 --- a/README.md +++ b/README.md @@ -36,8 +36,8 @@ jobs: ci: uses: ./.gitea/workflows/ci.yaml with: - k8s_dir: 'kubernetes/' - helmfile_path: 'helm/helmfile.yaml' + k8s_dir: "kubernetes/" + helmfile_path: "helm/helmfile.yaml" ``` ### Force Skip Helm Validation @@ -54,15 +54,16 @@ jobs: ## 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 | +| 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/ @@ -73,6 +74,7 @@ your-service/ ``` ### For Helm + Kubernetes services: + ``` your-service/ ├── k8s/ @@ -86,11 +88,13 @@ your-service/ ## 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 @@ -99,24 +103,60 @@ your-service/ 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