yacr (pronounced like yacker) is a tool designed to help GitHub repos self-host their own chart repos by adding Helm chart artifacts to GitHub Releases named for the chart version and then creating an `index.yaml` file for those releases that can be hosted on GitHub Pages (or elsewhere!).
This repo is for the cli tool itself. If you are looking for a GitHub Action to add this tool to your workflow, it can be found at stecky/yet-another-chart-releaser-action or on the GitHub Marketplace
Installation | Usage | Configuration | Goals
This repo is a clone of helm/chart-releaser. 99% of the credit for this project goes to their team for the great work they did on chart-releaser. I simply needed some additional functionality and decided to create my own clone of it. If you want to see a list of enhancements that I plan to make, check out the goals section of this readme.
Download your preferred asset from the releases page and install manually.
$ brew tap stecky/tap
$ brew install yet-another-chart-releaser
$ # clone repo to some directory outside GOPATH
$ git clone https://github.com/stecky/yet-another-chart-releaser
$ cd yet-another-chart-releaser
$ go mod download
$ go install ./...
Docker images are pushed to the stecky/yet-another-chart-releaser dockerhub registry. The Docker image is built on top of Alpine and its default entry-point is yacr
. See the Dockerfile for more details.
Currently, yacr
can create GitHub Releases from a set of charts packaged up into a directory and create an index.yaml
file for the chart repository from GitHub Releases.
$ yacr --help
Create Helm chart repositories on GitHub Pages by uploading Chart packages
and Chart metadata to GitHub Releases and creating a suitable index file
Usage:
yacr [command]
Available Commands:
help Help about any command
index Update Helm repo index.yaml for the given GitHub repo
upload Upload Helm chart packages to GitHub Releases
package Package Helm charts
version Print version information
Flags:
--config string Config file (default is $HOME/.yacr.yaml)
-h, --help help for yacr
Use "yacr [command] --help" for more information about a command.
Scans a path for Helm charts and creates packages.
$ yacr package --help
This command packages a chart into a versioned chart archive file. If a path
is given, this will look at that path for a chart (which must contain a
Chart.yaml file) and then package that directory.
If you wish to use advanced packaging options such as creating signed
packages or updating chart dependencies please use "helm package" instead.
Usage:
yacr package [CHART_PATH] [...] [flags]
Flags:
-h, --help help for package
--key string Name of the key to use when signing
--keyring string Location of a public keyring (default "/Users/steven.barnes/.gnupg/pubring.gpg")
-p, --package-path string Path to directory with chart packages (default ".yacr-release-packages")
--passphrase-file string Location of a file which contains the passphrase for the signing key. Use '-' in order to read from stdin
--sign Use a PGP private key to sign this package
Global Flags:
--config string Config file (default is $HOME/.yacr.yaml)
Scans a path for Helm chart packages and creates releases in the specified GitHub repo uploading the packages.
$ yacr upload --help
Upload Helm chart packages to GitHub Releases
Usage:
yacr upload [flags]
Flags:
-c, --commit string Target commit for release
-b, --git-base-url string GitHub Base URL (only needed for private GitHub) (default "https://api.github.com/")
-r, --git-repo string GitHub repository
-u, --git-upload-url string GitHub Upload URL (only needed for private GitHub) (default "https://uploads.github.com/")
-h, --help help for upload
-o, --owner string GitHub username or organization
-p, --package-path string Path to directory with chart packages (default ".yacr-release-packages")
--release-name-template string Go template for computing release names, using chart metadata (default "{{ .Name }}-{{ .Version }}")
-t, --token string GitHub Auth Token
Global Flags:
--config string Config file (default is $HOME/.yacr.yaml)
Once uploaded you can create an index.yaml
file that can be hosted on GitHub Pages (or elsewhere).
$ yacr index --help
Update a Helm chart repository index.yaml file based on a the
given GitHub repository's releases.
Usage:
yacr index [flags]
Flags:
-c, --charts-repo string The URL to the charts repository
-b, --git-base-url string GitHub Base URL (only needed for private GitHub) (default "https://api.github.com/")
-r, --git-repo string GitHub repository
-u, --git-upload-url string GitHub Upload URL (only needed for private GitHub) (default "https://uploads.github.com/")
-h, --help help for index
-i, --index-path string Path to index file (default ".yacr-index/index.yaml")
-o, --owner string GitHub username or organization
-p, --package-path string Path to directory with chart packages (default ".yacr-release-packages")
--release-name-template string Go template for computing release names, using chart metadata (default "{{ .Name }}-{{ .Version }}")
-t, --token string GitHub Auth Token (only needed for private repos)
--packages-with-index Save a copy of the package files to the GitHub pages branch and reference them in the index
Global Flags:
--config string Config file (default is $HOME/.yacr.yaml)
yacr
is a command-line application.
All command-line flags can also be set via environment variables or config file.
Environment variables must be prefixed with YACR_
.
Underscores must be used instead of hyphens.
CLI flags, environment variables, and a config file can be mixed. The following order of precedence applies:
- CLI flags
- Environment variables
- Config file
The following example show various ways of configuring the same thing:
yacr upload --owner myaccount --git-repo helm-charts --package-path .deploy --token 123456789
export YACR_OWNER=myaccount
export YACR_GIT_REPO=helm-charts
export YACR_PACKAGE_PATH=.deploy
export YACR_TOKEN="123456789"
export YACR_GIT_BASE_URL="https://api.github.com/"
export YACR_GIT_UPLOAD_URL="https://uploads.github.com/"
yacr upload
config.yaml
:
owner: myaccount
git-repo: helm-charts
package-path: .deploy
token: 123456789
git-base-url: https://api.github.com/
git-upload-url: https://uploads.github.com/
yacr upload --config config.yaml
yacr
supports any format Viper can read, i. e. JSON, TOML, YAML, HCL, and Java properties files.
Notice that if no config file is specified, yacr.yaml
(or any of the supported formats) is loaded from the current directory, $HOME/.yacr
, or /etc/yacr
, in that order, if found.
For Github Enterprise, yacr
users need to set git-base-url
and git-upload-url
correctly, but the correct values are not always obvious to endusers.
By default they are often along these lines:
https://ghe.example.com/api/v3/
https://ghe.example.com/api/uploads/
If you are trying to figure out what your upload_url
is try to use a curl command like this:
curl -u username:token https://example.com/api/v3/repos/org/repo/releases
and then look for upload_url
. You need the part of the URL that appears before repos/
in the path.
-
kubeval style schema validation
-
Only package a chart if it has changed
-
Add ability to update dependencies before packaging
-
Add option to insert release notes similar to buchanae/github-release-notes
-
Copyright © stecky