diff --git a/.azure-pipelines.yml b/.azure-pipelines.yml index 223f85518d..bf0315ad3e 100644 --- a/.azure-pipelines.yml +++ b/.azure-pipelines.yml @@ -16,8 +16,8 @@ jobs: vmImage: windows-2019 strategy: matrix: - node_12.x: - node_version: 12.x + node_14.x: + node_version: 14.x steps: - powershell: | $CI_BUILD_TAG = git describe --tags @@ -48,12 +48,6 @@ jobs: GH_TOKEN: $(LENS_IDE_GH_TOKEN) displayName: Customize config - - script: make node_modules - displayName: Install dependencies - - - script: make build-npm - displayName: Generate npm package - - script: make build condition: "and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))" env: @@ -69,8 +63,8 @@ jobs: vmImage: macOS-10.14 strategy: matrix: - node_12.x: - node_version: 12.x + 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/'))" @@ -99,15 +93,57 @@ jobs: GH_TOKEN: $(LENS_IDE_GH_TOKEN) displayName: Customize config - - script: make node_modules - displayName: Install dependencies + - script: make build + condition: "and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))" + env: + 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) + displayName: Build - - script: make build-npm - displayName: Generate npm package + - 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) @@ -122,8 +158,8 @@ jobs: vmImage: ubuntu-16.04 strategy: matrix: - node_12.x: - node_version: 12.x + 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/'))" @@ -152,23 +188,6 @@ jobs: GH_TOKEN: $(LENS_IDE_GH_TOKEN) displayName: Customize config - - script: make node_modules - displayName: Install dependencies - - - script: make build-npm - displayName: Generate npm package - - - bash: | - sudo chown root:root / - sudo apt-get update && sudo apt-get install -y snapd - sudo snap install snapcraft --classic - echo -n "${SNAP_LOGIN}" | base64 -i -d > snap_login - snapcraft login --with snap_login - condition: "and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))" - env: - SNAP_LOGIN: $(SNAP_LOGIN) - displayName: Setup snapcraft - - script: make build condition: "and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))" env: diff --git a/Makefile b/Makefile index 1a8baf0d37..75f6f55fa0 100644 --- a/Makefile +++ b/Makefile @@ -3,6 +3,7 @@ CMD_ARGS = $(filter-out $@,$(MAKECMDGOALS)) %: @: +BINARY_ARCH ?= x64 NPM_RELEASE_TAG ?= latest EXTENSIONS_DIR = ./extensions extensions = $(foreach dir, $(wildcard $(EXTENSIONS_DIR)/*), ${dir}) @@ -64,7 +65,7 @@ ifeq "$(DETECTED_OS)" "Windows" rm -rf node_modules/win-ca/pem yarn run electron-builder --publish onTag --x64 --ia32 else - yarn run electron-builder --publish onTag + yarn run electron-builder --publish onTag --$(BINARY_ARCH) endif $(extension_node_modules): node_modules diff --git a/build/download_kubectl.ts b/build/download_kubectl.ts index 4400a5f5d0..fefdb6ebb1 100644 --- a/build/download_kubectl.ts +++ b/build/download_kubectl.ts @@ -26,6 +26,7 @@ import requestPromise from "request-promise-native"; import { ensureDir, pathExists } from "fs-extra"; import path from "path"; import { noop } from "lodash"; +import { isLinux, isMac } from "../src/common/vars"; class KubectlDownloader { public kubectlVersion: string; @@ -115,15 +116,21 @@ class KubectlDownloader { }); } } - const downloadVersion = packageInfo.config.bundledKubectlVersion; const baseDir = path.join(__dirname, "..", "binaries", "client"); -const downloads = [ - { platform: "linux", arch: "amd64", target: path.join(baseDir, "linux", "x64", "kubectl") }, - { platform: "darwin", arch: "amd64", target: path.join(baseDir, "darwin", "x64", "kubectl") }, - { platform: "windows", arch: "amd64", target: path.join(baseDir, "windows", "x64", "kubectl.exe") }, - { platform: "windows", arch: "386", target: path.join(baseDir, "windows", "ia32", "kubectl.exe") } -]; +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") }); +} else if (isLinux) { + downloads.push({ platform: "linux", arch: binaryArch, target: path.join(baseDir, "linux", binaryTargetArch, "kubectl") }); +} else { + downloads.push({ platform: "windows", arch: "amd64", target: path.join(baseDir, "windows", binaryTargetArch, "kubectl.exe") }); + downloads.push({ platform: "windows", arch: "386", target: path.join(baseDir, "windows", "ia32", "kubectl.exe") }); +} downloads.forEach((dlOpts) => { console.log(dlOpts); diff --git a/integration/__tests__/app-preferences.tests.ts b/integration/__tests__/app-preferences.tests.ts index 4afa8cfd96..fe3817bf0c 100644 --- a/integration/__tests__/app-preferences.tests.ts +++ b/integration/__tests__/app-preferences.tests.ts @@ -63,7 +63,7 @@ describe("preferences page tests", () => { } }, 10*60*1000); - it("ensures helm repos", async () => { + utils.itIf(process.platform !== "win32")("ensures helm repos", async () => { await window.click("[data-testid=kubernetes-tab]"); await window.waitForSelector("[data-testid=repository-name]", { timeout: 100_000, diff --git a/package.json b/package.json index 764e5c7b50..f25adbf843 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,6 @@ "build:win": "yarn run compile && electron-builder --win --dir", "integration": "jest --runInBand --detectOpenHandles --forceExit integration", "dist": "yarn run compile && electron-builder --publish onTag", - "dist:win": "yarn run compile && electron-builder --publish onTag --x64 --ia32", "dist:dir": "yarn run dist --dir -c.compression=store -c.mac.identity=null", "download-bins": "concurrently yarn:download:*", "download:kubectl": "yarn run ts-node build/download_kubectl.ts", @@ -48,7 +47,7 @@ }, "config": { "bundledKubectlVersion": "1.21.2", - "bundledHelmVersion": "3.5.4", + "bundledHelmVersion": "3.6.3", "sentryDsn": "" }, "engines": { @@ -141,6 +140,10 @@ "from": "binaries/client/darwin/x64/kubectl", "to": "./x64/kubectl" }, + { + "from": "binaries/client/darwin/arm64/kubectl", + "to": "./arm64/kubectl" + }, { "from": "binaries/client/helm3/helm3", "to": "./helm3/helm3" diff --git a/src/main/lens-binary.ts b/src/main/lens-binary.ts index d5e9b943a7..2c52b05db5 100644 --- a/src/main/lens-binary.ts +++ b/src/main/lens-binary.ts @@ -60,13 +60,13 @@ export class LensBinary { this.logger = console; let arch = null; - if (process.arch == "x64") { + if (process.env.BINARY_ARCH) { + arch = process.env.BINARY_ARCH; + } else if (process.arch == "x64") { arch = "amd64"; - } - else if (process.arch == "x86" || process.arch == "ia32") { + } else if (process.arch == "x86" || process.arch == "ia32") { arch = "386"; - } - else { + } else { arch = process.arch; } this.arch = arch;