1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Support MacOS arm64 build (#3682)

Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>

Co-authored-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>
Co-authored-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Jari Kolehmainen 2021-08-26 21:46:46 +03:00 committed by GitHub
parent 32e0293b08
commit 56bd8cd0b1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 79 additions and 49 deletions

View File

@ -16,8 +16,8 @@ jobs:
vmImage: windows-2019 vmImage: windows-2019
strategy: strategy:
matrix: matrix:
node_12.x: node_14.x:
node_version: 12.x node_version: 14.x
steps: steps:
- powershell: | - powershell: |
$CI_BUILD_TAG = git describe --tags $CI_BUILD_TAG = git describe --tags
@ -48,12 +48,6 @@ jobs:
GH_TOKEN: $(LENS_IDE_GH_TOKEN) GH_TOKEN: $(LENS_IDE_GH_TOKEN)
displayName: Customize config displayName: Customize config
- script: make node_modules
displayName: Install dependencies
- script: make build-npm
displayName: Generate npm package
- script: make build - script: make build
condition: "and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))" condition: "and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))"
env: env:
@ -69,8 +63,8 @@ jobs:
vmImage: macOS-10.14 vmImage: macOS-10.14
strategy: strategy:
matrix: matrix:
node_12.x: node_14.x:
node_version: 12.x node_version: 14.x
steps: steps:
- script: CI_BUILD_TAG=`git describe --tags` && echo "##vso[task.setvariable variable=CI_BUILD_TAG]$CI_BUILD_TAG" - 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/'))" condition: "and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))"
@ -99,15 +93,57 @@ jobs:
GH_TOKEN: $(LENS_IDE_GH_TOKEN) GH_TOKEN: $(LENS_IDE_GH_TOKEN)
displayName: Customize config displayName: Customize config
- script: make node_modules - script: make build
displayName: Install dependencies 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 - job: macOS-arm64
displayName: Generate npm package 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 - script: make build
condition: "and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))" condition: "and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))"
env: env:
BINARY_ARCH: arm64
APPLEID: $(APPLEID) APPLEID: $(APPLEID)
APPLEIDPASS: $(APPLEIDPASS) APPLEIDPASS: $(APPLEIDPASS)
CSC_LINK: $(CSC_LINK) CSC_LINK: $(CSC_LINK)
@ -122,8 +158,8 @@ jobs:
vmImage: ubuntu-16.04 vmImage: ubuntu-16.04
strategy: strategy:
matrix: matrix:
node_12.x: node_14.x:
node_version: 12.x node_version: 14.x
steps: steps:
- script: CI_BUILD_TAG=`git describe --tags` && echo "##vso[task.setvariable variable=CI_BUILD_TAG]$CI_BUILD_TAG" - 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/'))" condition: "and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))"
@ -152,23 +188,6 @@ jobs:
GH_TOKEN: $(LENS_IDE_GH_TOKEN) GH_TOKEN: $(LENS_IDE_GH_TOKEN)
displayName: Customize config 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 - script: make build
condition: "and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))" condition: "and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))"
env: env:

View File

@ -3,6 +3,7 @@ CMD_ARGS = $(filter-out $@,$(MAKECMDGOALS))
%: %:
@: @:
BINARY_ARCH ?= x64
NPM_RELEASE_TAG ?= latest NPM_RELEASE_TAG ?= latest
EXTENSIONS_DIR = ./extensions EXTENSIONS_DIR = ./extensions
extensions = $(foreach dir, $(wildcard $(EXTENSIONS_DIR)/*), ${dir}) extensions = $(foreach dir, $(wildcard $(EXTENSIONS_DIR)/*), ${dir})
@ -64,7 +65,7 @@ ifeq "$(DETECTED_OS)" "Windows"
rm -rf node_modules/win-ca/pem rm -rf node_modules/win-ca/pem
yarn run electron-builder --publish onTag --x64 --ia32 yarn run electron-builder --publish onTag --x64 --ia32
else else
yarn run electron-builder --publish onTag yarn run electron-builder --publish onTag --$(BINARY_ARCH)
endif endif
$(extension_node_modules): node_modules $(extension_node_modules): node_modules

View File

@ -26,6 +26,7 @@ import requestPromise from "request-promise-native";
import { ensureDir, pathExists } from "fs-extra"; import { ensureDir, pathExists } from "fs-extra";
import path from "path"; import path from "path";
import { noop } from "lodash"; import { noop } from "lodash";
import { isLinux, isMac } from "../src/common/vars";
class KubectlDownloader { class KubectlDownloader {
public kubectlVersion: string; public kubectlVersion: string;
@ -115,15 +116,21 @@ class KubectlDownloader {
}); });
} }
} }
const downloadVersion = packageInfo.config.bundledKubectlVersion; const downloadVersion = packageInfo.config.bundledKubectlVersion;
const baseDir = path.join(__dirname, "..", "binaries", "client"); const baseDir = path.join(__dirname, "..", "binaries", "client");
const downloads = [ const binaryArch = process.env.BINARY_ARCH || "amd64";
{ platform: "linux", arch: "amd64", target: path.join(baseDir, "linux", "x64", "kubectl") }, const binaryTargetArch = binaryArch === "amd64" ? "x64" : "arm64";
{ platform: "darwin", arch: "amd64", target: path.join(baseDir, "darwin", "x64", "kubectl") },
{ platform: "windows", arch: "amd64", target: path.join(baseDir, "windows", "x64", "kubectl.exe") }, const downloads = [];
{ platform: "windows", arch: "386", target: path.join(baseDir, "windows", "ia32", "kubectl.exe") }
]; 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) => { downloads.forEach((dlOpts) => {
console.log(dlOpts); console.log(dlOpts);

View File

@ -63,7 +63,7 @@ describe("preferences page tests", () => {
} }
}, 10*60*1000); }, 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.click("[data-testid=kubernetes-tab]");
await window.waitForSelector("[data-testid=repository-name]", { await window.waitForSelector("[data-testid=repository-name]", {
timeout: 100_000, timeout: 100_000,

View File

@ -30,7 +30,6 @@
"build:win": "yarn run compile && electron-builder --win --dir", "build:win": "yarn run compile && electron-builder --win --dir",
"integration": "jest --runInBand --detectOpenHandles --forceExit integration", "integration": "jest --runInBand --detectOpenHandles --forceExit integration",
"dist": "yarn run compile && electron-builder --publish onTag", "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", "dist:dir": "yarn run dist --dir -c.compression=store -c.mac.identity=null",
"download-bins": "concurrently yarn:download:*", "download-bins": "concurrently yarn:download:*",
"download:kubectl": "yarn run ts-node build/download_kubectl.ts", "download:kubectl": "yarn run ts-node build/download_kubectl.ts",
@ -48,7 +47,7 @@
}, },
"config": { "config": {
"bundledKubectlVersion": "1.21.2", "bundledKubectlVersion": "1.21.2",
"bundledHelmVersion": "3.5.4", "bundledHelmVersion": "3.6.3",
"sentryDsn": "" "sentryDsn": ""
}, },
"engines": { "engines": {
@ -141,6 +140,10 @@
"from": "binaries/client/darwin/x64/kubectl", "from": "binaries/client/darwin/x64/kubectl",
"to": "./x64/kubectl" "to": "./x64/kubectl"
}, },
{
"from": "binaries/client/darwin/arm64/kubectl",
"to": "./arm64/kubectl"
},
{ {
"from": "binaries/client/helm3/helm3", "from": "binaries/client/helm3/helm3",
"to": "./helm3/helm3" "to": "./helm3/helm3"

View File

@ -60,13 +60,13 @@ export class LensBinary {
this.logger = console; this.logger = console;
let arch = null; let arch = null;
if (process.arch == "x64") { if (process.env.BINARY_ARCH) {
arch = process.env.BINARY_ARCH;
} else if (process.arch == "x64") {
arch = "amd64"; arch = "amd64";
} } else if (process.arch == "x86" || process.arch == "ia32") {
else if (process.arch == "x86" || process.arch == "ia32") {
arch = "386"; arch = "386";
} } else {
else {
arch = process.arch; arch = process.arch;
} }
this.arch = arch; this.arch = arch;