Skip to content

Commit

Permalink
add skip-packaging option (#109)
Browse files Browse the repository at this point in the history
Signed-off-by: Gary Morse <gmorse81@gmail.com>

Signed-off-by: Gary Morse <gmorse81@gmail.com>
  • Loading branch information
gmorse81 authored Nov 23, 2022
1 parent 98bccfd commit 38cfeac
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 26 deletions.
8 changes: 5 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# *chart-releaser* Action
# _chart-releaser_ Action

A GitHub action to turn a GitHub project into a self-hosted Helm chart repo, using [helm/chart-releaser](https://github.com/helm/chart-releaser) CLI tool.

Expand All @@ -7,18 +7,19 @@ A GitHub action to turn a GitHub project into a self-hosted Helm chart repo, usi
### Pre-requisites

1. A GitHub repo containing a directory with your Helm charts (default is a folder named `/charts`, if you want to
maintain your charts in a different directory, you must include a `charts_dir` input in the workflow).
maintain your charts in a different directory, you must include a `charts_dir` input in the workflow).
1. A GitHub branch called `gh-pages` to store the published charts. See `charts_repo_url` for alternatives.
1. In your repo, go to Settings/Pages. Change the `Source` `Branch` to `gh-pages`.
1. Create a workflow `.yml` file in your `.github/workflows` directory. An [example workflow](#example-workflow) is available below.
For more information, reference the GitHub Help Documentation for [Creating a workflow file](https://help.github.com/en/articles/configuring-a-workflow#creating-a-workflow-file)
For more information, reference the GitHub Help Documentation for [Creating a workflow file](https://help.github.com/en/articles/configuring-a-workflow#creating-a-workflow-file)

### Inputs

- `version`: The chart-releaser version to use (default: v1.4.1)
- `config`: Optional config file for chart-releaser. For more information on the config file, see the [documentation](https://github.com/helm/chart-releaser#config-file)
- `charts_dir`: The charts directory
- `charts_repo_url`: The GitHub Pages URL to the charts repo (default: `https://<owner>.github.io/<project>`)
- `skip_packaging`: This option, when populated, will skip the packaging step. This allows you to do more advanced packaging of your charts (for example, with the `helm package` command) before this action runs. This action will only handle the indexing and publishing steps.

### Environment variables

Expand Down Expand Up @@ -73,6 +74,7 @@ It does this – during every push to `main` – by checking each chart in your
#### Example using custom config

`workflow.yml`:

```yaml
- name: Run chart-releaser
uses: helm/chart-releaser-action@v1.4.1
Expand Down
11 changes: 9 additions & 2 deletions action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,13 @@ inputs:
description: "The GitHub Pages URL to the charts repo (default: https://<owner>.github.io/<repo>)"
required: false
install_dir:
description: 'Where to install the cr tool'
description: "Where to install the cr tool"
required: false
install_only:
description: 'Just install cr tool'
description: "Just install cr tool"
required: false
skip_packaging:
description: "skip the packaging option (do your custom packaging before running this action"
required: false

runs:
Expand Down Expand Up @@ -61,5 +64,9 @@ runs:
args+=(--install-only "${{ inputs.install_only }}")
fi
if [[ -n "${{ inputs.skip_packaging }}" ]]; then
args+=(--skip-packaging "${{ inputs.skip_packaging }}")
fi
"$GITHUB_ACTION_PATH/cr.sh" "${args[@]}"
shell: bash
58 changes: 37 additions & 21 deletions cr.sh
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ Usage: $(basename "$0") <options>
-r, --repo The repo name
-n, --install-dir The Path to install the cr tool
-i, --install-only Just install the cr tool
-s, --skip-packaging Skip the packaging step (run your own packaging before using the releaser)
EOF
}

Expand All @@ -45,6 +46,7 @@ main() {
local charts_repo_url=
local install_dir=
local install_only=
local skip_packaging=

parse_command_line "$@"

Expand All @@ -54,35 +56,43 @@ main() {
repo_root=$(git rev-parse --show-toplevel)
pushd "$repo_root" > /dev/null

echo 'Looking up latest tag...'
local latest_tag
latest_tag=$(lookup_latest_tag)
if ! [[ -n "$skip_packaging" ]]; then
echo 'Looking up latest tag...'
local latest_tag
latest_tag=$(lookup_latest_tag)

echo "Discovering changed charts since '$latest_tag'..."
local changed_charts=()
readarray -t changed_charts <<< "$(lookup_changed_charts "$latest_tag")"
echo "Discovering changed charts since '$latest_tag'..."
local changed_charts=()
readarray -t changed_charts <<< "$(lookup_changed_charts "$latest_tag")"

if [[ -n "${changed_charts[*]}" ]]; then
install_chart_releaser
if [[ -n "${changed_charts[*]}" ]]; then
install_chart_releaser

rm -rf .cr-release-packages
mkdir -p .cr-release-packages
rm -rf .cr-release-packages
mkdir -p .cr-release-packages

rm -rf .cr-index
mkdir -p .cr-index
rm -rf .cr-index
mkdir -p .cr-index

for chart in "${changed_charts[@]}"; do
if [[ -d "$chart" ]]; then
package_chart "$chart"
else
echo "Chart '$chart' no longer exists in repo. Skipping it..."
fi
done
for chart in "${changed_charts[@]}"; do
if [[ -d "$chart" ]]; then
package_chart "$chart"
else
echo "Chart '$chart' no longer exists in repo. Skipping it..."
fi
done

release_charts
update_index
else
echo "Nothing to do. No chart changes detected."
fi
else
install_chart_releaser
rm -rf .cr-index
mkdir -p .cr-index
release_charts
update_index
else
echo "Nothing to do. No chart changes detected."
fi

popd > /dev/null
Expand Down Expand Up @@ -167,6 +177,12 @@ parse_command_line() {
shift
fi
;;
-s|--skip-packaging)
if [[ -n "${2:-}" ]]; then
skip_packaging="$2"
shift
fi
;;
*)
break
;;
Expand Down

0 comments on commit 38cfeac

Please sign in to comment.