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

Add darwin arm64 #326

Draft
wants to merge 2 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 1 commit
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
5 changes: 3 additions & 2 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ workflows:
name: package-<< matrix.arch >>
matrix:
parameters:
arch: [linux-x64-glibc, darwin-x64-unknown, win32-x64-unknown]
arch: [linux-x64-glibc, darwin-x64-unknown, darwin-arm64-unknown, win32-x64-unknown]
- package:
filters: *filter-only-master
requires:
Expand All @@ -234,6 +234,7 @@ workflows:
- build
- package-linux-x64-glibc
- package-darwin-x64-unknown
- package-darwin-arm64-unknown
- package-win32-x64-unknown
- package-linux-x64-glibc-no-chromium
filters: *filter-only-master
Expand All @@ -260,7 +261,7 @@ workflows:
name: package-<< matrix.arch >>
matrix:
parameters:
arch: [linux-x64-glibc, darwin-x64-unknown, win32-x64-unknown]
arch: [linux-x64-glibc, darwin-x64-unknown, darwin-arm64-unknown, win32-x64-unknown]
skip_signing_errors: [true]

- package:
Expand Down
17 changes: 16 additions & 1 deletion scripts/download_chromium.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ const path = require('path');
const child_process = require('child_process');
const Puppeteer = require('puppeteer');
const { PUPPETEER_REVISIONS } = require('puppeteer/lib/cjs/puppeteer/revisions')
const fs = require('fs')

const archArg = process.argv[2];
let [
Expand Down Expand Up @@ -37,7 +38,21 @@ browserFetcher

let execPath = parts.join(path.sep);

child_process.execSync(`cp -RP ${execPath} ${outputPath}`);
if (platform === 'mac' && arch === 'arm64') {
// follow symlinks, dereference symlinks and copy them as files
child_process.execSync(`cp -LR ${execPath} ${outputPath}`);

const dsStore = '.DS_Store'
Copy link
Contributor Author

@ArturWierzbicki ArturWierzbicki Mar 15, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the problem with .DS_Store files (https://en.wikipedia.org/wiki/.DS_Store) is the last one we need to solve before we can add the darwin-arm64 target.

Lets say we are packaging a plugin with the following structure in CI:

- bestImageRendererPlugin
   - executable
   - someFile.jpg
   - folder/
      - someFile.png

During the build, we are creating a manifest file with the list of all files & their checksums. However, when the built package is installed on an M1 Mac, the OS automagically adds .DS_Store files in every folder:

- bestImageRendererPlugin
   - .DS_Store
   - executable
   - someFile.jpg
   - folder/
      - .DS_Store 
      - someFile.png

I tried creating empty DS_Store files in all the right places in the CI in hopes that the OS wouldn't replace them, but that did not work - they were replaced and the checksum verification failed.

I don't know why this problem occurs only on M1 macs, nor how to deal with it except for explicitly ignoring DS_Store files when creating & verifying the manifest. cc @AgnesToulet

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

After solving the problem described above with this grafana PR I ran into another one - binary signing requirement
image

Looks like we will need to spin up a mac 😅

const dsStorePaths = [`${outputPath}/${dsStore}`, `${outputPath}/${parts[parts.length - 1]}/.DS_Store`]
for (const path of dsStorePaths) {
if (!fs.existsSync(path)) {
child_process.execSync(`touch ${path}`)
}
}
} else {
// follow symlinks, copy them as symlinks
child_process.execSync(`cp -RP ${execPath} ${outputPath}`);
}

console.log(`Chromium moved from ${execPath} to ${outputPath}/`);
process.exit(0);
Expand Down