From cb328b6478ada877edde55cfa73fe4d859ebc1c2 Mon Sep 17 00:00:00 2001 From: bin Date: Fri, 15 Jul 2022 13:01:44 +0800 Subject: [PATCH] ci: add ci for helm Signed-off-by: bin --- .github/workflows/check-helm.yaml | 28 +++++++++++++++ .github/workflows/release.yaml | 42 ++++++++++++++++++++++ .github/workflows/test-helm.yaml | 59 +++++++++++++++++++++++++++++++ 3 files changed, 129 insertions(+) create mode 100644 .github/workflows/check-helm.yaml create mode 100644 .github/workflows/release.yaml create mode 100644 .github/workflows/test-helm.yaml diff --git a/.github/workflows/check-helm.yaml b/.github/workflows/check-helm.yaml new file mode 100644 index 00000000..83f4505d --- /dev/null +++ b/.github/workflows/check-helm.yaml @@ -0,0 +1,28 @@ +name: Check helm version + +on: + push: + paths: + - deploy/charts/neuron/templates/** + pull_request: + paths: + - deploy/charts/neuron/templates/** + +jobs: + check-helm-version: + runs-on: ubuntu-latest + steps: + - run: minikube start + - uses: actions/checkout@v2 + - name: Update helm + run: | + helm repo add emqx https://repos.emqx.io/charts + helm repo update + - name: Check helm version + run: | + old=$(helm show chart emqx/neuron |egrep "^version" | sed -r 's|^version:[[:space:]]([0-9]+.[0-9]+.[0-9]+)$|\1|g') + now=$(egrep "^version" deploy/charts/neuron/Chart.yaml | sed -r 's|^version:[[:space:]]([0-9]+.[0-9]+.[0-9]+)$|\1|g') + if [ "$old" = "$now" ];then + echo "Need update version for Chart.yaml" + exit 1 + fi diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 00000000..151ad6f1 --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,42 @@ +name: Release neuron + +on: + push: + tags: + - "*" + +jobs: + release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Check appVersion for helm + run: | + appVersion=$(egrep "^appVersion" deploy/charts/neuron/Chart.yaml | sed -r 's|^appVersion:[[:space:]]([0-9]+.[0-9]+.[0-9]+)$|\1|g') + if [ "$appVersion" != "${GITHUB_REF##*/}" ]; then + echo "Need update appVersion for Chart.yaml" + exit 1 + fi + + helm: + runs-on: self-hosted + if: github.repository_owner == 'emqx' + needs: + - release + steps: + - uses: actions/checkout@v2 + - name: Check appVersion for helm + working-directory: deploy/charts/neuron + run: | + appVersion=$(egrep "^appVersion" Chart.yaml | sed -r 's|^appVersion:[[:space:]]([0-9]+.[0-9]+.[0-9]+)$|\1|g') + if [ "$appVersion" != "${GITHUB_REF##*/}" ]; then + echo "Need update appVersion for Chart.yaml" + exit 1 + fi + - name: Create helm package + working-directory: deploy/charts/neuron + run: helm package . + - name: Update helm repo + run: | + sudo mv $(find deploy/charts/neuron -name "*.tgz") /repos/charts + sudo helm repo index /repos/charts \ No newline at end of file diff --git a/.github/workflows/test-helm.yaml b/.github/workflows/test-helm.yaml new file mode 100644 index 00000000..d5260e6e --- /dev/null +++ b/.github/workflows/test-helm.yaml @@ -0,0 +1,59 @@ +name: Test helm +inputs: + repository: + description: "neuron image repository" + required: true + default: "emqx/neuron" + tag: + description: "neuron image tag" + required: true + default: "2.0.1" + +on: + push: + tags: + - "*" + pull_request: + +jobs: + test: + runs-on: ubuntu-latest + steps: + - run: minikube start --kubernetes-version="v1.23.0" + - uses: actions/checkout@v2 + - uses: actions/setup-go@v2 + with: + go-version: '1.18.3' + - name: install kubebuilder + run: | + OS=$(uname -s | tr '[:upper:]' '[:lower:]') + ARCH=$(uname -m | sed 's/x86_64/amd64/') + curl -fsL "https://storage.googleapis.com/kubebuilder-tools/kubebuilder-tools-1.16.4-${OS}-${ARCH}.tar.gz" -o kubebuilder-tools + tar -zxvf kubebuilder-tools + sudo mv kubebuilder/ /usr/local/kubebuilder + - run: make test + + deployment: + runs-on: ubuntu-latest + steps: + - run: minikube start --kubernetes-version="v1.23.0" + - uses: actions/checkout@v2 + - uses: actions/setup-go@v2 + with: + go-version: '1.18.3' + - name: Deploy neuron by helm + shell: bash + run: | + helm install neuron deploy/charts/neuron\ + --set image.repository=${{ inputs.repository }} \ + --set image.tag=${{ inputs.tag }} + - name: Check deployment + run: | + while [ "$(kubectl get Deployment -l app.kubernetes.io/name=neuron -o jsonpath='{.items[0].status.replicas}')" \ + != "$(kubectl get Deployment -l app.kubernetes.io/name=neuron -o jsonpath='{.items[0].status.readyReplicas}')" ]; do + echo "==============================" + kubectl get pods + echo "==============================" + echo "waiting neuron started" + sleep 10 + done