Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Build and release amd64 & arm64 together (macOS) #3700

Merged
merged 2 commits into from
Aug 31, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 3 additions & 49 deletions .azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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
Expand Down
14 changes: 8 additions & 6 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -83,13 +83,15 @@ jobs:
if: runner.os == 'Linux'

- run: make integration
name: Run integration tests
name: Run macOS integration tests
shell: bash
if: runner.os != 'Linux'
env:
ELECTRON_BUILDER_EXTRA_ARGS: "--x64 --arm64"
if: runner.os == 'macOS'

- run: make build
name: Test build (arm64)
- run: make integration
name: Run Windows integration tests
shell: bash
env:
BINARY_ARCH: arm64
if: runner.os == 'macOS'
ELECTRON_BUILDER_EXTRA_ARGS: "--x64 --ia32"
if: runner.os == 'Windows'
6 changes: 2 additions & 4 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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
Expand Down
16 changes: 14 additions & 2 deletions build/download_helm.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
10 changes: 5 additions & 5 deletions build/download_kubectl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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") });
}

Expand Down
14 changes: 5 additions & 9 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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"
}
]
Expand Down
2 changes: 1 addition & 1 deletion src/main/helm/helm-cli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down