Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add CI via GitHub Actions #80

Merged
merged 3 commits into from
Jun 17, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 57 additions & 0 deletions .github/workflows/chart-rebuild.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
name: Rebuild index.yaml manually
on:
workflow_dispatch:

jobs:
rebuild:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
with:
ref: 'gh-pages'
fetch-depth: 0

- name: Set up Helm
uses: azure/setup-helm@v1
with:
version: v3.6.3

- name: Rebuild index.yaml
env:
version: v1.4.0
run: |
if [[ ! -d "$RUNNER_TOOL_CACHE" ]]; then
echo "Cache directory '$RUNNER_TOOL_CACHE' does not exist" >&2
exit 1
fi

arch=$(uname -m)
cache_dir="$RUNNER_TOOL_CACHE/ct/$version/$arch"

if [[ ! -d "$cache_dir" ]]; then
mkdir -p "$cache_dir"

echo "Installing chart-releaser..."
curl -sSLo cr.tar.gz "https://github.com/helm/chart-releaser/releases/download/$version/chart-releaser_${version#v}_linux_amd64.tar.gz"
tar -xzf cr.tar.gz -C "$cache_dir"
rm -f cr.tar.gz

echo 'Adding cr directory to PATH...'
export PATH="$cache_dir:$PATH"
fi

echo "Rebuilding index.yaml"
scripts/rebuild.sh

- name: Create Pull Request
id: cpr
uses: peter-evans/create-pull-request@v3
with:
commit-message: Rebuild index.yaml
title: Rebuild index.yaml

- name: Check outputs
run: |
echo "Created Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}"
echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}"
33 changes: 33 additions & 0 deletions .github/workflows/chart-releaser.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: Release Charts

on:
push:
branches:
- main

jobs:
release:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0

- name: Configure Git
run: |
git config user.name "$GITHUB_ACTOR"
git config user.email "[email protected]"

- name: Install Helm
uses: azure/setup-helm@v1
with:
version: v3.6.3

- name: Run chart-releaser
uses: helm/[email protected]
with:
charts_dir: .
charts_repo_url: https://apache.github.io/couchdb-helm
env:
CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
80 changes: 80 additions & 0 deletions .github/workflows/chart-test.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
name: Lint and Test Charts

on:
push:
branches:
- main
pull_request:

jobs:
lint:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0

- name: Set up Helm
uses: azure/setup-helm@v1
with:
version: v3.6.3

- name: Set up chart-testing
uses: helm/[email protected]

- name: Run chart-testing (list-changed)
id: list-changed
run: |
changed=$(ct list-changed --target-branch main --chart-dirs .)
if [[ -n "$changed" ]]; then
echo "::set-output name=changed::true"
fi

- name: Run chart-testing (lint changed)
if: ${{ github.ref != 'refs/heads/main' }}
run: ct lint --target-branch main --chart-dirs .

- name: Run chart-testing (lint all)
if: ${{ github.ref == 'refs/heads/main' }}
run: ct lint --target-branch main --all --chart-dirs .

install:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0

- name: Set up Helm
uses: azure/setup-helm@v1
with:
version: v3.6.3

- name: Set up chart-testing
uses: helm/[email protected]

- name: Run chart-testing (list-changed)
id: list-changed
run: |
changed=$(ct list-changed --target-branch main --chart-dirs .)
if [[ -n "$changed" ]]; then
echo "::set-output name=changed::true"
fi

- name: Create kind cluster
uses: helm/[email protected]
if: ( steps.list-changed.outputs.changed == 'true' ) || ${{ github.ref == 'refs/heads/main' }}

# no allow-failure until https://github.com/actions/toolkit/issues/399
- name: Run chart-testing (install changed)
if: ${{ github.ref != 'refs/heads/main' }}
run: ct install --target-branch main --chart-dirs --upgrade .
continue-on-error: true

# no allow-failure until https://github.com/actions/toolkit/issues/399
- name: Run chart-testing (install all)
if: ${{ github.ref == 'refs/heads/main' }}
run: ct install --target-branch main --all --chart-dirs --upgrade .
continue-on-error: true
20 changes: 20 additions & 0 deletions scripts/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Rebuilding Index

The Helm `index.yaml` is hosted on the `gh-pages` branch of this repo. If this
index becomes out-of-sync with the releases, you can rebuild it by using a
GitHub Actions Workflow.

## Prerequisites

- To use the `rebuild.sh` script with our workflow, the `rebuild.sh`
script must be checked in to the `gh-pages` branch. If you make any changes
to the script in this directory, make sure you also commit the same changes
to the `gh-pages` branch.
- You must have permission to run GitHub Actions Workflows for this repo.

## Running the Action

- Navigate to the GitHub Actions UI.
- Use the `Run Workflow` button to run the workflow.
- Review the Pull Request created by the workflow.
- When approved, merge the Pull Request into the `gh-pages` branch.
56 changes: 56 additions & 0 deletions scripts/rebuild.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
#!/usr/bin/env bash

# Run this script from the root of the helm repo, e.g.,
# ./scripts/rebuild.sh. You must have curl and cr installed. See
# https://github.com/helm/chart-releaser#installation.

# Set this to a valid URL *without* an index.yaml if you want to regenerate
# a new index.html. If you want to append to an existing one, you can
# use a real address like `https://apache.github.io/couchdb-helm`. If an existing
# index.yaml is found at this URL, then any packages we generate will
# be appended, which can result in duplicates.
HELM_REPO=${HELM_REPO:-https://apache.github.io}

# Create a temporary directory and clean it up when we're done.
TMP_DIR=$(mktemp -d)
function cleanup()
{
echo "Removing temporary directory ${TMP_DIR}."
rm -rf $TMP_DIR
}
trap cleanup EXIT

# Optional variables you can define in your env
PACKAGE_DIR=${PACKAGE_DIR:-${TMP_DIR}}
CHARTS_DIR=${CHARTS_DIR:-charts}
INDEX=${INDEX:-index.yaml}
GITHUB_OWNER=${GITHUB_OWNER:-apache}
GITHUB_REPO=${GITHUB_REPO:-couchdb-helm}

# Calculated variables
DOWNLOADS_BASE="https://github.com/${GITHUB_OWNER}/${GITHUB_REPO}/releases/download"

# List all tags oldest to newest, followed by the 'main' branch.
tags="$(git tag -l --sort=creatordate) main"

# Clean the packages release directory that `cr` uses.
mkdir -p ${PACKAGE_DIR}
rm -rf ${PACKAGE_DIR}/*

# Download existing assets from Github
for tag in $tags; do
dl_url="${DOWNLOADS_BASE}/${tag}/${tag}.tgz"
cd ${PACKAGE_DIR}
curl -LOs --fail ${dl_url}
result=$?
if [[ ${result} -eq 0 ]]; then
echo "Downloaded $dl_url".
else
echo "Could not download $dl_url".
fi
cd -
done

echo "Writing index to ${INDEX}"
rm ${INDEX}
cr index --owner ${GITHUB_OWNER} --git-repo ${GITHUB_REPO} --charts-repo ${HELM_REPO} -p ${PACKAGE_DIR} -i ${INDEX}