From 9d6bed8786d3db09d47c5f100b1ee6cd2cd065ac Mon Sep 17 00:00:00 2001 From: Jari Kolehmainen Date: Tue, 31 Aug 2021 11:00:27 +0300 Subject: [PATCH] Build and release amd64 & arm64 together (macOS) (#3700) * build and release amd64 & arm64 together Signed-off-by: Jari Kolehmainen * fixes Signed-off-by: Jari Kolehmainen --- .azure-pipelines.yml | 52 +++----------------------------------- .github/workflows/test.yml | 16 +++++++----- Makefile | 6 ++--- build/download_helm.ts | 16 ++++++++++-- build/download_kubectl.ts | 10 ++++---- package.json | 14 ++++------ src/main/helm/helm-cli.ts | 2 +- 7 files changed, 39 insertions(+), 77 deletions(-) diff --git a/.azure-pipelines.yml b/.azure-pipelines.yml index bf0315ad3e..3e1b43f875 100644 --- a/.azure-pipelines.yml +++ b/.azure-pipelines.yml @@ -56,11 +56,12 @@ jobs: AWS_ACCESS_KEY_ID: $(AWS_ACCESS_KEY_ID) AWS_SECRET_ACCESS_KEY: $(AWS_SECRET_ACCESS_KEY) BUILD_NUMBER: $(Build.BuildNumber) + ELECTRON_BUILDER_EXTRA_ARGS: "--x64 --ia32" displayName: Build - job: macOS pool: - vmImage: macOS-10.14 + vmImage: macOS-11 strategy: matrix: node_14.x: @@ -103,54 +104,7 @@ jobs: AWS_ACCESS_KEY_ID: $(AWS_ACCESS_KEY_ID) AWS_SECRET_ACCESS_KEY: $(AWS_SECRET_ACCESS_KEY) BUILD_NUMBER: $(Build.BuildNumber) - displayName: Build - - - job: macOS-arm64 - pool: - vmImage: macOS-10.14 - strategy: - matrix: - node_14.x: - node_version: 14.x - steps: - - script: CI_BUILD_TAG=`git describe --tags` && echo "##vso[task.setvariable variable=CI_BUILD_TAG]$CI_BUILD_TAG" - condition: "and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))" - displayName: Set the tag name as an environment variable - - - task: NodeTool@0 - inputs: - versionSpec: $(node_version) - displayName: Install Node.js - - - task: Cache@2 - inputs: - key: 'yarn | "$(Agent.OS)" | yarn.lock' - restoreKeys: | - yarn | "$(Agent.OS)" - path: $(YARN_CACHE_FOLDER) - displayName: Cache Yarn packages - - - bash: | - set -e - git clone "https://${GH_TOKEN}@github.com/lensapp/lens-ide.git" .lens-ide-overlay - rm -rf .lens-ide-overlay/.git - cp -r .lens-ide-overlay/* ./ - jq -s '.[0] * .[1]' package.json package.ide.json > package.custom.json && mv package.custom.json package.json - env: - GH_TOKEN: $(LENS_IDE_GH_TOKEN) - displayName: Customize config - - - script: make build - condition: "and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))" - env: - BINARY_ARCH: arm64 - APPLEID: $(APPLEID) - APPLEIDPASS: $(APPLEIDPASS) - CSC_LINK: $(CSC_LINK) - CSC_KEY_PASSWORD: $(CSC_KEY_PASSWORD) - AWS_ACCESS_KEY_ID: $(AWS_ACCESS_KEY_ID) - AWS_SECRET_ACCESS_KEY: $(AWS_SECRET_ACCESS_KEY) - BUILD_NUMBER: $(Build.BuildNumber) + ELECTRON_BUILDER_EXTRA_ARGS: "--x64 --arm64" displayName: Build - job: Linux diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 63d37871cd..b319c97770 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -83,13 +83,15 @@ jobs: if: runner.os == 'Linux' - run: make integration - name: Run integration tests - shell: bash - if: runner.os != 'Linux' - - - run: make build - name: Test build (arm64) + name: Run macOS integration tests shell: bash env: - BINARY_ARCH: arm64 + ELECTRON_BUILDER_EXTRA_ARGS: "--x64 --arm64" if: runner.os == 'macOS' + + - run: make integration + name: Run Windows integration tests + shell: bash + env: + ELECTRON_BUILDER_EXTRA_ARGS: "--x64 --ia32" + if: runner.os == 'Windows' diff --git a/Makefile b/Makefile index 75f6f55fa0..cf6f988af1 100644 --- a/Makefile +++ b/Makefile @@ -3,8 +3,8 @@ CMD_ARGS = $(filter-out $@,$(MAKECMDGOALS)) %: @: -BINARY_ARCH ?= x64 NPM_RELEASE_TAG ?= latest +ELECTRON_BUILDER_EXTRA_ARGS ?= EXTENSIONS_DIR = ./extensions extensions = $(foreach dir, $(wildcard $(EXTENSIONS_DIR)/*), ${dir}) extension_node_modules = $(foreach dir, $(wildcard $(EXTENSIONS_DIR)/*), ${dir}/node_modules) @@ -63,10 +63,8 @@ build: node_modules binaries/client ifeq "$(DETECTED_OS)" "Windows" # https://github.com/ukoloff/win-ca#clear-pem-folder-on-publish rm -rf node_modules/win-ca/pem - yarn run electron-builder --publish onTag --x64 --ia32 -else - yarn run electron-builder --publish onTag --$(BINARY_ARCH) endif + yarn run electron-builder --publish onTag $(ELECTRON_BUILDER_EXTRA_ARGS) $(extension_node_modules): node_modules cd $(@:/node_modules=) && ../../node_modules/.bin/npm install --no-audit --no-fund diff --git a/build/download_helm.ts b/build/download_helm.ts index 703684066b..6c606d06d5 100644 --- a/build/download_helm.ts +++ b/build/download_helm.ts @@ -18,6 +18,18 @@ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -import { helmCli } from "../src/main/helm/helm-cli"; +import packageInfo from "../package.json"; +import { isWindows } from "../src/common/vars"; +import { HelmCli } from "../src/main/helm/helm-cli"; +import * as path from "path"; -helmCli.ensureBinary(); +const helmVersion = packageInfo.config.bundledHelmVersion; + +if (!isWindows) { + Promise.all([ + new HelmCli(path.join(process.cwd(), "binaries", "client", "x64"), helmVersion).ensureBinary(), + new HelmCli(path.join(process.cwd(), "binaries", "client", "arm64"), helmVersion).ensureBinary() + ]); +} else { + new HelmCli(path.join(process.cwd(), "binaries", "client", "x64"), helmVersion).ensureBinary(); +} diff --git a/build/download_kubectl.ts b/build/download_kubectl.ts index fefdb6ebb1..e87534d24f 100644 --- a/build/download_kubectl.ts +++ b/build/download_kubectl.ts @@ -118,17 +118,17 @@ class KubectlDownloader { } const downloadVersion = packageInfo.config.bundledKubectlVersion; const baseDir = path.join(__dirname, "..", "binaries", "client"); -const binaryArch = process.env.BINARY_ARCH || "amd64"; -const binaryTargetArch = binaryArch === "amd64" ? "x64" : "arm64"; const downloads = []; if (isMac) { - downloads.push({ platform: "darwin", arch: binaryArch, target: path.join(baseDir, "darwin", binaryTargetArch, "kubectl") }); + downloads.push({ platform: "darwin", arch: "amd64", target: path.join(baseDir, "darwin", "x64", "kubectl") }); + downloads.push({ platform: "darwin", arch: "arm64", target: path.join(baseDir, "darwin", "arm64", "kubectl") }); } else if (isLinux) { - downloads.push({ platform: "linux", arch: binaryArch, target: path.join(baseDir, "linux", binaryTargetArch, "kubectl") }); + downloads.push({ platform: "linux", arch: "amd64", target: path.join(baseDir, "linux", "x64", "kubectl") }); + downloads.push({ platform: "linux", arch: "arm64", target: path.join(baseDir, "linux", "arm64", "kubectl") }); } else { - downloads.push({ platform: "windows", arch: "amd64", target: path.join(baseDir, "windows", binaryTargetArch, "kubectl.exe") }); + downloads.push({ platform: "windows", arch: "amd64", target: path.join(baseDir, "windows", "x64", "kubectl.exe") }); downloads.push({ platform: "windows", arch: "386", target: path.join(baseDir, "windows", "ia32", "kubectl.exe") }); } diff --git a/package.json b/package.json index 1650689e4f..4acccdd50c 100644 --- a/package.json +++ b/package.json @@ -121,8 +121,8 @@ ], "extraResources": [ { - "from": "binaries/client/linux/x64/kubectl", - "to": "./x64/kubectl" + "from": "binaries/client/linux/${arch}/kubectl", + "to": "./${arch}/kubectl" }, { "from": "binaries/client/helm3/helm3", @@ -137,15 +137,11 @@ "entitlementsInherit": "build/entitlements.mac.plist", "extraResources": [ { - "from": "binaries/client/darwin/x64/kubectl", - "to": "./x64/kubectl" + "from": "binaries/client/darwin/${arch}/kubectl", + "to": "./${arch}/kubectl" }, { - "from": "binaries/client/darwin/arm64/kubectl", - "to": "./arm64/kubectl" - }, - { - "from": "binaries/client/helm3/helm3", + "from": "binaries/client/${arch}/helm3/helm3", "to": "./helm3/helm3" } ] diff --git a/src/main/helm/helm-cli.ts b/src/main/helm/helm-cli.ts index 72d4acba29..2ce575ee4e 100644 --- a/src/main/helm/helm-cli.ts +++ b/src/main/helm/helm-cli.ts @@ -58,7 +58,7 @@ const helmVersion = packageInfo.config.bundledHelmVersion; let baseDir = process.resourcesPath; if (!isProduction) { - baseDir = path.join(process.cwd(), "binaries", "client"); + baseDir = path.join(process.cwd(), "binaries", "client", process.arch); } export const helmCli = new HelmCli(baseDir, helmVersion);