Add Helm publish action

This commit is contained in:
stefanprodan
2020-05-27 16:26:08 +03:00
parent 55e7178dad
commit b2ca15b8af
5 changed files with 149 additions and 7 deletions
+8
View File
@@ -0,0 +1,8 @@
FROM stefanprodan/alpine-base:latest
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
RUN apk --no-cache add git
ENTRYPOINT ["/entrypoint.sh"]
+35
View File
@@ -0,0 +1,35 @@
name: 'helm-gh-pages'
description: 'A GitHub Action to publish helm charts to Github Pages'
author: 'Stefan Prodan'
branding:
icon: 'command'
color: 'blue'
inputs:
token:
description: "GitHub token"
required: true
charts_dir:
description: "The charts directory, defaults to `charts`"
required: false
charts_url:
description: "The GitHub Pages URL, default to `https://<USER>.github.io/<REPOSITORY>`"
required: false
user:
description: "The GitHub user that owns this repository"
required: false
repository:
description: "The GitHub repository name"
required: false
branch:
description: "The branch to publish charts, default to `gh-pages`"
required: false
runs:
using: 'docker'
image: 'Dockerfile'
args:
- ${{ inputs.token }}
- ${{ inputs.charts_dir }}
- ${{ inputs.charts_url }}
- ${{ inputs.user }}
- ${{ inputs.repository }}
- ${{ inputs.branch }}
@@ -0,0 +1,87 @@
#!/usr/bin/env bash
set -o errexit
set -o pipefail
GITHUB_TOKEN=$1
CHARTS_DIR=$2
CHARTS_URL=$3
USER=$4
REPOSITORY=$5
BRANCH=$6
HELM_VERSION=3.2.1
CHARTS_TMP_DIR=$(mktemp -d)
REPO_ROOT=$(git rev-parse --show-toplevel)
main() {
if [[ -z "$CHARTS_DIR" ]]; then
CHARTS_DIR="charts"
fi
if [[ -z "$USER" ]]; then
USER=$(cut -d '/' -f 1 <<< "$GITHUB_REPOSITORY")
fi
if [[ -z "$REPOSITORY" ]]; then
REPOSITORY=$(cut -d '/' -f 2 <<< "$GITHUB_REPOSITORY")
fi
if [[ -z "$BRANCH" ]]; then
BRANCH="gh-pages"
fi
if [[ -z "$CHARTS_URL" ]]; then
CHARTS_URL="https://${USER}.github.io/${REPOSITORY}"
fi
download
lint
package
upload
}
download() {
tmpDir=$(mktemp -d)
pushd $tmpDir >& /dev/null
curl -sSL https://get.helm.sh/helm-v${HELM_VERSION}-linux-amd64.tar.gz | tar xz
cp linux-amd64/helm /usr/local/bin/helm
popd >& /dev/null
rm -rf $tmpDir
}
lint() {
helm lint ${REPO_ROOT}/${CHARTS_DIR}/*
}
package() {
helm package ${REPO_ROOT}/${CHARTS_DIR}/* --destination ${CHARTS_TMP_DIR}
}
upload() {
tmpDir=$(mktemp -d)
pushd $tmpDir >& /dev/null
repo_url="https://x-access-token:${GITHUB_TOKEN}@github.com/${USER}/${REPOSITORY}"
git clone ${repo_url}
cd ${REPOSITORY}
git config user.name "$GITHUB_ACTOR"
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
git remote set-url origin ${repo_url}
git checkout gh-pages
mv -f ${CHARTS_TMP_DIR}/*.tgz .
helm repo index . --url ${CHARTS_URL}
git add .
git commit -m "Publish Helm charts"
git push origin gh-pages
popd >& /dev/null
rm -rf $tmpDir
}
main
+6 -3
View File
@@ -1,14 +1,15 @@
#!/usr/bin/env bash
set -o errexit
set -o nounset
set -o pipefail
HELM_VERSION=3.2.1
BIN_DIR=/home/runner/bin
BIN_DIR="$GITHUB_WORKSPACE/bin"
main() {
mkdir -p ${BIN_DIR}
cp /helm-publish.sh ${BIN_DIR}/helm-publish
tmpDir=$(mktemp -d)
pushd $tmpDir >& /dev/null
@@ -20,4 +21,6 @@ main() {
rm -rf $tmpDir
}
main
main
echo "::add-path::$BIN_DIR"
echo "::add-path::$RUNNER_WORKSPACE/$(basename $GITHUB_REPOSITORY)/bin"
+13 -4
View File
@@ -12,6 +12,10 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Publish Helm charts
uses: ./.github/actions/helm-gh-pages
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Restore Go cache
uses: actions/cache@v1
with:
@@ -27,7 +31,12 @@ jobs:
uses: ./.github/actions/helm
- name: Setup Kubernetes
uses: engineerd/setup-kind@v0.4.0
- name: Test
- name: Debug
run: |
which kubectl
ls -la $HOME
ls -la $GITHUB_WORKSPACE
- name: Run unit tests
run: make test
- name: Check if working tree is dirty
run: |
@@ -35,7 +44,7 @@ jobs:
echo 'run make test and commit changes'
exit 1
fi
- name: Build
- name: Build container image
run: |
GIT_COMMIT=$(git rev-list -1 HEAD) && \
docker build -t test/podinfo:latest --build-arg "REVISION=${GIT_COMMIT}" .
@@ -46,10 +55,10 @@ jobs:
--set image.repository=test/podinfo \
--set image.tag=latest \
--namespace=default
- name: Integration test
- name: Run integration tests
run: |
kubectl rollout status deployment/podinfo --timeout=1m
helm test podinfo --logs
helm test podinfo
- name: Debug failure
if: failure()
run: |