A GitHub Actions-powered solution for automatically publishing and maintaining your own Helm chart repository. This project makes it easy to set up a fully automated Helm chart repository with GitHub Pages hosting.
- Features
- Quick Start
- Setup Instructions
- Configuration
- Usage
- Workflow Templates
- Examples
- Troubleshooting
- Automated Chart Updates: Fetch and update charts from Git repositories or Helm repositories
- Chart Customization: Override chart metadata and values
- GitHub Pages Integration: Automatically publish charts to GitHub Pages
- GitHub Actions Workflow: Automated publishing with scheduled updates
- Version Management: Support for specific versions, tags, or commit hashes
- Makefile Interface: Simple command-line interface for all operations
- Fork or copy this repository
- Set up GitHub Pages (see setup instructions below)
- Configure your charts in the
sources/directory - Copy the workflow templates to
.github/workflows/ - Push to main branch to trigger your first publish
-
Fork this repository or create a new repository and copy the files
-
Enable GitHub Pages:
- Go to your repository Settings → Pages
- Set Source to "GitHub Actions"
- This will allow the workflows to deploy your charts
The workflow files are provided as templates to avoid conflicts with your own CI. Copy them to your repository:
# Copy the workflow templates to your .github/workflows directory
cp -r templates/.github/workflows/* .github/workflows/Important: The templates are located in templates/.github/workflows/ and need to be copied to .github/workflows/ in your repository.
Edit the Makefile to set your repository details:
# Update these values in the Makefile
GITHUB_USERNAME := YOUR_GITHUB_USERNAME
REPO_NAME := YOUR_REPO_NAME
REPO_URL := https://$(GITHUB_USERNAME).github.io/$(REPO_NAME)Replace:
YOUR_GITHUB_USERNAMEwith your actual GitHub usernameYOUR_REPO_NAMEwith your repository name
Important: The repository name should match your actual GitHub repository name.
Create chart configuration files in the sources/ directory. See the examples in sources/ for reference.
Each chart is configured in a YAML file in the sources/ directory. There are two types of sources:
# sources/my-chart.yaml
repo_url: https://github.com/example/my-chart
chart_path: helm/
ref: main # branch, tag, or commit hash
# Optional: Override chart metadata
chart_overrides:
description: "My custom chart description"
keywords:
- my-app
- kubernetes
maintainers:
- name: "Your Name"
email: "[email protected]"
# Optional: Override default values
values_overrides:
replicaCount: 2
image:
repository: myapp
tag: "latest"# sources/nginx-ingress.yaml
repo_url: https://kubernetes.github.io/ingress-nginx
version: 4.7.1 # specific version to fetch
# Optional: Override chart metadata
chart_overrides:
description: "NGINX Ingress Controller"
keywords:
- ingress
- nginx
- kubernetes
maintainers:
- name: "Your Name"
email: "[email protected]"
# Optional: Override default values
values_overrides:
controller:
replicaCount: 2repo_url: Git repository URLchart_path: Path to chart within the repositoryref: Git reference (branch, tag, commit hash)
repo_url: Helm repository URLversion: Specific version to fetch
chart_overrides: Custom chart metadatavalues_overrides: Custom default values
The repository automatically publishes charts on:
- Push to main branch
- Weekly schedule (Sundays at 2 AM UTC)
- Manual trigger via GitHub Actions
To update a specific chart:
- Go to Actions → "Update Specific Chart"
- Click "Run workflow"
- Enter the chart name and optional version
- Click "Run workflow"
- Create a new YAML file in
sources/directory - Configure the chart source and options
- Push to main branch or trigger manual update
The project includes two workflow templates:
- Publishes all charts automatically
- Runs on push to main, weekly schedule, and manual trigger
- Updates repository index and deploys to GitHub Pages
- Updates a specific chart
- Manual trigger with chart name and optional version input
- Useful for testing or updating individual charts
# From your repository root
mkdir -p .github/workflows
cp templates/.github/workflows/* .github/workflows/# sources/nginx-ingress.yaml
repo_url: https://kubernetes.github.io/ingress-nginx
version: 4.7.1
chart_overrides:
description: "NGINX Ingress Controller for Kubernetes"
keywords:
- ingress
- nginx
- kubernetes# sources/my-app.yaml
repo_url: https://github.com/myorg/my-app
chart_path: charts/my-app
ref: v1.2.0
values_overrides:
replicaCount: 3
image:
repository: myorg/my-app
tag: "v1.2.0"
resources:
limits:
memory: "512Mi"
cpu: "500m"# sources/ingress-nginx.yaml
repo_url: https://github.com/kubernetes/ingress-nginx
chart_path: charts/ingress-nginx
ref: helm-chart-4.31.1
chart_overrides:
description: "NGINX Ingress Controller from Git Repository"
keywords:
- ingress
- nginx
- kubernetes
- git-repo-
GitHub Pages not working:
- Ensure GitHub Pages is enabled in repository settings
- Check that the workflow has proper permissions
-
Charts not updating:
- Verify chart source configuration in
sources/files - Check workflow logs for errors
- Verify chart source configuration in
-
Permission errors:
- Ensure workflows have
contents: writeandpages: writepermissions
- Ensure workflows have
- Check GitHub Actions logs for detailed error messages
- Use the manual "Update Specific Chart" workflow for testing
- Verify chart source URLs and references are correct
- Fork the repository
- Create a feature branch
- Make your changes
- Test with the CI workflow
- Submit a pull request
This project is licensed under the MIT License - see the LICENSE file for details.