From cb9b7f75ce11c091a68bd1974deb92fb2184ccba Mon Sep 17 00:00:00 2001 From: Martin McKeaveney Date: Wed, 8 Dec 2021 16:27:33 +0000 Subject: [PATCH] completely automate helm chart incrementing and semver --- .github/workflows/release-selfhost.yml | 1 + docs/budibase-0.2.3.tgz | Bin 43033 -> 0 bytes docs/index.yaml | 22 +++++----- hosting/kubernetes/budibase/Chart.yaml | 39 +++++------------- .../templates/app-service-deployment.yaml | 2 +- .../templates/worker-service-deployment.yaml | 2 +- package.json | 3 +- scripts/releaseHelmChart.js | 39 ++++++++++++++++++ scripts/release_helm_chart.sh | 3 -- yarn.lock | 12 ++++++ 10 files changed, 78 insertions(+), 45 deletions(-) delete mode 100644 docs/budibase-0.2.3.tgz create mode 100755 scripts/releaseHelmChart.js delete mode 100755 scripts/release_helm_chart.sh diff --git a/.github/workflows/release-selfhost.yml b/.github/workflows/release-selfhost.yml index ad0941709c..444071fa7b 100644 --- a/.github/workflows/release-selfhost.yml +++ b/.github/workflows/release-selfhost.yml @@ -53,5 +53,6 @@ jobs: uses: helm/chart-releaser-action@v1.1.0 with: charts_dir: docs + branch: helm-repo env: CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}" diff --git a/docs/budibase-0.2.3.tgz b/docs/budibase-0.2.3.tgz deleted file mode 100644 index b7207376a131ead28492f3a9f6330788396b7ee2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43033 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 + Budibase is an open source low-code platform, helping thousands of teams build + apps for their workplace in minutes. keywords: -- low-code -- database -- cluster + - low-code + - database + - cluster sources: -- https://github.com/Budibase/budibase -- https://budibase.com - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. + - https://github.com/Budibase/budibase + - https://budibase.com type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.2.3 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "1.0.6" - +version: 0.2.4 +appVersion: 2.0.0 dependencies: - name: couchdb version: 3.3.4 repository: https://apache.github.io/couchdb-helm condition: services.couchdb.enabled - name: ingress-nginx - version: 3.35.0 + version: 3.35.0 repository: https://github.com/kubernetes/ingress-nginx condition: ingress.nginx diff --git a/hosting/kubernetes/budibase/templates/app-service-deployment.yaml b/hosting/kubernetes/budibase/templates/app-service-deployment.yaml index 5e45474c8a..e75f84e779 100644 --- a/hosting/kubernetes/budibase/templates/app-service-deployment.yaml +++ b/hosting/kubernetes/budibase/templates/app-service-deployment.yaml @@ -106,7 +106,7 @@ spec: value: {{ .Values.globals.accountPortalApiKey | quote }} - name: COOKIE_DOMAIN value: {{ .Values.globals.cookieDomain | quote }} - image: budibase/apps:{{ .Values.services.budibaseVersion }} + image: budibase/apps:{{ .Chart.appVersion }} imagePullPolicy: Always name: bbapps ports: diff --git a/hosting/kubernetes/budibase/templates/worker-service-deployment.yaml b/hosting/kubernetes/budibase/templates/worker-service-deployment.yaml index 70249123d0..d71fc80578 100644 --- a/hosting/kubernetes/budibase/templates/worker-service-deployment.yaml +++ b/hosting/kubernetes/budibase/templates/worker-service-deployment.yaml @@ -111,7 +111,7 @@ spec: value: {{ .Values.globals.smtp.from | quote }} - name: APPS_URL value: http://app-service:{{ .Values.services.apps.port }} - image: budibase/worker:{{ .Values.services.budibaseVersion }} + image: budibase/worker:{{ .Chart.appVersion }} imagePullPolicy: Always name: bbworker ports: diff --git a/package.json b/package.json index 4be3fe1401..63de8251d4 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "eslint-plugin-cypress": "^2.11.3", "eslint-plugin-svelte3": "^3.2.0", "husky": "^7.0.1", + "js-yaml": "^4.1.0", "kill-port": "^1.6.1", "lerna": "3.14.1", "prettier": "^2.3.1", @@ -49,7 +50,7 @@ "build:docker:airgap": "node hosting/scripts/airgapped/airgappedDockerBuild", "build:digitalocean": "cd hosting/digitalocean && ./build.sh && cd -", "build:docs": "lerna run build:docs", - "release:helm": "./scripts/release_helm_chart.sh", + "release:helm": "node scripts/releaseHelmChart", "env:multi:enable": "lerna run env:multi:enable", "env:multi:disable": "lerna run env:multi:disable", "env:selfhost:enable": "lerna run env:selfhost:enable", diff --git a/scripts/releaseHelmChart.js b/scripts/releaseHelmChart.js new file mode 100755 index 0000000000..4c022c9a0c --- /dev/null +++ b/scripts/releaseHelmChart.js @@ -0,0 +1,39 @@ +const yaml = require("js-yaml") +const { execSync } = require("child_process") +const fs = require("fs") +const path = require("path") + +const UpgradeTypes = { + MAJOR: "major", + MINOR: "minor", + PATCH: "patch" +} + +const CHART_PATH = path.join(__dirname, "../", "hosting", "kubernetes", "budibase", "Chart.yaml") +const UPGRADE_VERSION = process.env.BUDIBASE_RELEASE_VERSION +const UPGRADE_TYPE = process.env.HELM_CHART_UPGRADE_TYPE || UpgradeTypes.PATCH + +if (!UPGRADE_VERSION) { + throw new Error("BUDIBASE_RELEASE_VERSION env var must be set.") +} + +try { + const chartFile = fs.readFileSync(CHART_PATH, "utf-8") + const chart = yaml.load(chartFile) + + // Upgrade app version in chart to match budibase release version + chart.appVersion = UPGRADE_VERSION + + // semantically version the chart + const [major, minor, patch] = chart.version.split(".") + const newPatch = parseInt(patch) + 1 + chart.version = [major, minor, newPatch].join(".") + const updatedChartYaml = yaml.dump(chart) + fs.writeFileSync(CHART_PATH, updatedChartYaml) + + execSync(`helm package hosting/kubernetes/budibase --destination docs`) + execSync(`helm repo index docs --url https://budibase.github.io/budibase`) +} catch (err) { + console.error("Error releasing helm chart") + throw err +} diff --git a/scripts/release_helm_chart.sh b/scripts/release_helm_chart.sh deleted file mode 100755 index b1594cca91..0000000000 --- a/scripts/release_helm_chart.sh +++ /dev/null @@ -1,3 +0,0 @@ -cd docs -helm package ../hosting/kubernetes/budibase -helm repo index . --url https://budibase.github.io/budibase \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index aa02ce87f5..628e48bd0c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1082,6 +1082,11 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" @@ -3260,6 +3265,13 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"