Compare commits

...

25 Commits

Author SHA1 Message Date
Edwin Joassart
ec7e0b745e patch: send sourcemap to sentry at build 2023-01-12 17:46:00 +01:00
balenaCI
d5ba1ea5e1 v1.13.4 2023-01-12 15:10:51 +00:00
Balena CI
54d3636a22 Merge pull request #3890 from balena-io/wolvi-lataniere/adding-serial-number-etcher-pro
Adding EtcherPro device serial number to the Settings modal
2023-01-12 17:09:11 +02:00
Aurelien VALADE
45f6ee667d Cleaning-up EtcherPro specific code 2023-01-12 14:52:08 +01:00
Aurelien VALADE
d25eda9a7d Adding EtcherPro device serial number to the Settings modal
Change-type: patch
2023-01-12 12:12:10 +01:00
balenaCI
7420283249 v1.13.3 2023-01-11 14:30:46 +00:00
Balena CI
453952440f Merge pull request #3971 from balena-io/mcraa/win-cm4
patch: progress cm4 to second stage
2023-01-11 16:28:49 +02:00
Peter Makra
2475d576c7 patch: progress cm4 to second stage 2023-01-11 13:36:11 +01:00
balenaCI
8cd6da1260 v1.13.2 2023-01-02 20:55:59 +00:00
Balena CI
82dd4fc1d1 Merge pull request #3964 from balena-io/fix-winget-releaser
patch: fixed winget parameter name
2023-01-02 15:54:20 -05:00
mcraa
33fe4b2c1a patch: fixed winget parameter name 2023-01-02 21:17:55 +01:00
balenaCI
b1c1188107 v1.13.1 2023-01-02 17:26:57 +00:00
Balena CI
63b45aefae Merge pull request #3959 from balena-io/update-copyright
patch: update copyright in electron-builder
2023-01-02 12:25:24 -05:00
Peter Makra
f79cb0fac5 patch: updated sdk to fix bz2 issue 2023-01-02 17:44:42 +01:00
JOASSART Edwin
ec42892c7c patch: update copyright in electron-builder 2023-01-02 12:45:42 +01:00
balenaCI
371716fe6a v1.13.0 2022-12-28 16:48:14 +00:00
Balena CI
d5fb6bec15 Merge pull request #3945 from balena-io/update-sdk-for-cm4
Patch: update etcher-sdk version to fix CM4 issues
2022-12-28 11:46:52 -05:00
Peter Makra
c5e7bf26d7 bump electron deps 2022-12-23 21:32:30 +01:00
Peter Makra
e3072ac416 minor: electron version bump 2022-12-23 21:32:30 +01:00
Peter Makra
dfaf06e4cf sdk version bump 2022-12-23 21:32:29 +01:00
Peter Makra
6e24d25576 fixed ext2fs regex 2022-12-23 21:32:29 +01:00
Peter Makra
b59b171e43 patch: handle ext2fs with webpack 2022-12-23 21:32:29 +01:00
Peter Makra
28726584c2 prerelease etcher-compat etcher-sdk 2022-12-23 21:32:29 +01:00
Peter Makra
00b151311a alignerd webpack to ext2fs 2022-12-23 21:32:28 +01:00
builder555
36c813714b Patch: update etcher-sdk version to fix CM4 issues
Change-type: patch
2022-12-23 21:32:28 +01:00
10 changed files with 853 additions and 787 deletions

View File

@@ -72,10 +72,7 @@ runs:
chmod +x "$(dirname "$(which node)")/resinci-deploy" && which resinci-deploy
fi
# FIXME: store sentry workflow is not documented
# https://github.com/product-os/resinci-deploy/blob/master/lib/sentry.ts
# https://github.com/getsentry/sentry-cli
# https://docs.sentry.io/api/projects/create-a-new-client-key/
# Upload sourcemaps to sentry
- name: Generate Sentry DSN
id: sentry
shell: bash --noprofile --norc -eo pipefail -x {0}
@@ -206,6 +203,16 @@ runs:
-name "latest*.yml" \
-exec yq -i e .stagingPercentage=\"$percentage\" {} \;
- name: Upload sourcemap to Sentry
shell: bash --noprofile --norc -eo pipefail -x {0}
run: |
VERSION=${{ steps.package_release.outputs.version }} npm run uploadSourcemap
env:
SENTRY_AUTH_TOKEN: ${{ fromJSON(inputs.secrets).SENTRY_AUTH_TOKEN }}
npm_config_SENTRY_ORG: balenaEtcher
npm_config_SENTRY_PROJECT: balenaetcher
npm_config_SENTRY_VERSION: ${{ steps.package_release.outputs.version }}
- name: Upload artifacts
uses: actions/upload-artifact@v3
with:

View File

@@ -9,5 +9,5 @@ jobs:
- uses: vedantmgoyal2009/winget-releaser@v1
with:
identifier: Balena.Etcher
installer-regex: 'balenaEtcher-Setup.*.exe$'
installers-regex: 'balenaEtcher-Setup.*.exe$'
token: ${{ secrets.WINGET_PAT }}

View File

@@ -1,3 +1,75 @@
- commits:
- subject: Adding EtcherPro device serial number to the Settings modal
hash: d25eda9a7d6bf89284b630b2d55cbb0a7e3a9432
body: ""
footer:
Change-type: patch
change-type: patch
author: Aurelien VALADE
nested: []
version: 1.13.4
title: ""
date: 2023-01-12T15:10:50.328Z
- commits:
- subject: "patch: progress cm4 to second stage"
hash: 2475d576c7d9ecb46507c47c4143bdbfbdb44e45
body: ""
footer: {}
author: Peter Makra
nested: []
version: 1.13.3
title: ""
date: 2023-01-11T14:30:45.116Z
- commits:
- subject: "patch: fixed winget parameter name"
hash: 33fe4b2c1abcb7f71f42a4b682f174422cb72a00
body: ""
footer: {}
author: mcraa
nested: []
version: 1.13.2
title: ""
date: 2023-01-02T20:55:58.179Z
- commits:
- subject: "patch: updated sdk to fix bz2 issue"
hash: f79cb0fac56f6ec86f3a6f9be7035fbf59102253
body: ""
footer: {}
author: Peter Makra
nested: []
- subject: "patch: update copyright in electron-builder"
hash: ec42892c7cf1d22f4bb2968733ba9dc85e3552c6
body: ""
footer: {}
author: JOASSART Edwin
nested: []
version: 1.13.1
title: ""
date: 2023-01-02T17:26:55.602Z
- commits:
- subject: "minor: electron version bump"
hash: e3072ac416470cd161309935c2622cc5a3d8d242
body: ""
footer: {}
author: Peter Makra
nested: []
- subject: "patch: handle ext2fs with webpack"
hash: b59b171e43a170c0ccf84d36ab4ba2db403e25c5
body: ""
footer: {}
author: Peter Makra
nested: []
- subject: "Patch: update etcher-sdk version to fix CM4 issues"
hash: 36c813714b3ce60e5e85f1889c9bc7eeadb524b4
body: ""
footer:
Change-type: patch
change-type: patch
author: builder555
nested: []
version: 1.13.0
title: ""
date: 2022-12-28T16:48:12.506Z
- commits:
- subject: Update dependency i18next to 21.10.0
hash: b068b847c7ae6456ebd16a5d641ff61d8d074015

View File

@@ -3,6 +3,34 @@
All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/).
# v1.13.4
## (2023-01-12)
* Adding EtcherPro device serial number to the Settings modal [Aurelien VALADE]
# v1.13.3
## (2023-01-11)
* patch: progress cm4 to second stage [Peter Makra]
# v1.13.2
## (2023-01-02)
* patch: fixed winget parameter name [mcraa]
# v1.13.1
## (2023-01-02)
* patch: updated sdk to fix bz2 issue [Peter Makra]
* patch: update copyright in electron-builder [JOASSART Edwin]
# v1.13.0
## (2022-12-28)
* minor: electron version bump [Peter Makra]
* patch: handle ext2fs with webpack [Peter Makra]
* Patch: update etcher-sdk version to fix CM4 issues [builder555]
# v1.12.7
## (2022-12-20)

View File

@@ -1,6 +1,6 @@
# https://www.electron.build/configuration/configuration
appId: io.balena.etcher
copyright: Copyright 2016-2021 Balena Ltd
copyright: Copyright 2016-2023 Balena Ltd
productName: balenaEtcher
afterPack: ./afterPack.js
afterSign: ./afterSignHook.js

View File

@@ -25,6 +25,7 @@ import * as analytics from '../../modules/analytics';
import { open as openExternal } from '../../os/open-external/services/open-external';
import { Modal } from '../../styled-components';
import * as i18next from 'i18next';
import { etcherProInfo } from '../../utils/etcher-pro-specific';
interface Setting {
name: string;
@@ -55,7 +56,7 @@ interface SettingsModalProps {
toggleModal: (value: boolean) => void;
}
const UUID = process.env.BALENA_DEVICE_UUID;
const EPInfo = etcherProInfo();
const InfoBox = (props: any) => (
<Box fontSize={14}>
@@ -117,10 +118,14 @@ export function SettingsModal({ toggleModal }: SettingsModalProps) {
</Flex>
);
})}
{UUID !== undefined && (
{EPInfo !== undefined && (
<Flex flexDirection="column">
<Txt fontSize={24}>{i18next.t('settings.systemInformation')}</Txt>
<InfoBox label="UUID" value={UUID.substr(0, 7)} />
{EPInfo.get_serial() === undefined ? (
<InfoBox label="UUID" value={EPInfo.uuid} />
) : (
<InfoBox label="Serial" value={EPInfo.get_serial()} />
)}
</Flex>
)}
<Flex

View File

@@ -0,0 +1,73 @@
/*
* Copyright 2022 balena.io
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Dictionary } from 'lodash';
type BalenaTag = {
id: number,
name: string,
value: string
}
export class EtcherPro {
private supervisorAddr: string;
private supervisorKey: string;
private tags: Dictionary<string> | undefined;
public uuid: string;
constructor(supervisorAddr: string, supervisorKey: string) {
this.supervisorAddr = supervisorAddr;
this.supervisorKey = supervisorKey;
this.uuid = (process.env.BALENA_DEVICE_UUID ?? 'NO-UUID').substring(0, 7);
this.tags = undefined;
this.get_tags().then((tags) => (this.tags = tags));
}
async get_tags(): Promise<Dictionary<string>> {
const result = await fetch(
this.supervisorAddr + '/v2/device/tags?apikey=' + this.supervisorKey,
);
const parsed = await result.json();
if (parsed['status'] === 'success') {
return Object.assign(
{},
...parsed['tags'].map((tag: BalenaTag) => {
return { [tag.name]: tag.value };
}),
);
} else {
return {};
}
}
public get_serial(): string | undefined {
if (this.tags) {
return this.tags['Serial'];
} else {
return undefined;
}
}
}
export function etcherProInfo(): EtcherPro | undefined {
const BALENA_SUPERVISOR_ADDRESS = process.env.BALENA_SUPERVISOR_ADDRESS;
const BALENA_SUPERVISOR_API_KEY = process.env.BALENA_SUPERVISOR_API_KEY;
if (BALENA_SUPERVISOR_ADDRESS && BALENA_SUPERVISOR_API_KEY) {
return new EtcherPro(BALENA_SUPERVISOR_ADDRESS, BALENA_SUPERVISOR_API_KEY);
}
return undefined;
}

1361
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -2,7 +2,7 @@
"name": "balena-etcher",
"private": true,
"displayName": "balenaEtcher",
"version": "1.12.7",
"version": "1.13.4",
"packageType": "local",
"main": "generated/etcher.js",
"description": "Flash OS images to SD cards and USB drives, safely and easily.",
@@ -31,6 +31,7 @@
"test-spectron": "mocha --recursive --reporter spec --require ts-node/register/transpile-only --require-main tests/gui/allow-renderer-process-reuse.ts tests/spectron/runner.spec.ts",
"test-windows": "npm run lint && npm run test-gui && npm run test-shared && npm run test-spectron && npm run sanity-checks",
"test": "echo npm run test-{linux,windows,macos}",
"uploadSourcemap": "sentry-cli releases files $npm_config_SENTRY_VERSION upload-sourcemaps ./generated/*.js.map --org $npm_config_SENTRY_ORG --project $npm_config_SENTRY_PROJECT",
"watch": "webpack serve --no-optimization-minimize --config ./webpack.dev.config.ts",
"webpack": "webpack"
},
@@ -53,6 +54,7 @@
"@balena/lint": "5.4.2",
"@balena/sudo-prompt": "9.2.1-workaround-windows-amperstand-in-username-0849e215b947987a643fe5763902aea201255534",
"@fortawesome/fontawesome-free": "5.15.4",
"@sentry/cli": "^2.11.0",
"@svgr/webpack": "5.5.0",
"@types/chai": "4.3.4",
"@types/copy-webpack-plugin": "6.4.3",
@@ -74,14 +76,14 @@
"css-loader": "5.2.7",
"d3": "4.13.0",
"debug": "4.3.4",
"electron": "12.2.3",
"electron-builder": "22.14.13",
"electron": "^13.5.0",
"electron-builder": "^23.0.9",
"electron-mocha": "9.3.3",
"electron-notarize": "1.2.2",
"electron-rebuild": "3.2.9",
"electron-updater": "4.6.5",
"electron-updater": "5.3.0",
"esbuild-loader": "2.20.0",
"etcher-sdk": "7.4.0",
"etcher-sdk": "^7.4.7",
"file-loader": "6.2.0",
"husky": "4.3.8",
"i18next": "21.10.0",
@@ -106,7 +108,7 @@
"semver": "7.3.8",
"simple-progress-webpack-plugin": "1.1.2",
"sinon": "9.2.4",
"spectron": "14.0.0",
"spectron": "15.0.0",
"string-replace-loader": "3.1.0",
"style-loader": "2.0.0",
"styled-components": "5.3.6",
@@ -126,6 +128,6 @@
"node": ">=14 < 16"
},
"versionist": {
"publishedAt": "2022-12-20T19:35:12.134Z"
"publishedAt": "2023-01-12T15:10:50.986Z"
}
}

View File

@@ -15,7 +15,7 @@
*/
import * as CopyPlugin from 'copy-webpack-plugin';
import { readdirSync } from 'fs';
import { readdirSync, existsSync } from 'fs';
import * as _ from 'lodash';
import * as os from 'os';
import outdent from 'outdent';
@@ -77,25 +77,45 @@ function renameNodeModules(resourcePath: string) {
);
}
function findExt2fsFolder(): string {
const ext2fs = 'node_modules/ext2fs';
const biFsExt2fs = 'node_modules/balena-image-fs/node_modules/ext2fs';
if (existsSync(ext2fs)) {
return ext2fs;
} else if (existsSync(biFsExt2fs)) {
return biFsExt2fs;
} else {
throw Error('ext2fs not found');
}
}
function makeExt2FsRegex(): RegExp {
const folder = findExt2fsFolder();
const libpath = '/lib/libext2fs\\.js$';
return new RegExp(folder.concat(libpath));
}
function findUsbPrebuild(): string[] {
const usbPrebuildsFolder = path.join('node_modules', 'usb', 'prebuilds')
const usbPrebuildsFolder = path.join('node_modules', 'usb', 'prebuilds');
const prebuildFolders = readdirSync(usbPrebuildsFolder);
let bindingFile: string | undefined = 'node.napi.node';
const platformFolder = prebuildFolders.find(
(f) =>
f.startsWith(os.platform()) &&
f.indexOf(os.arch()) > -1,
(f) => f.startsWith(os.platform()) && f.indexOf(os.arch()) > -1,
);
if (platformFolder === undefined) {
throw new Error('Could not find usb prebuild. Should try fallback to node-gyp and use /build/Release instead of /prebuilds');
throw new Error(
'Could not find usb prebuild. Should try fallback to node-gyp and use /build/Release instead of /prebuilds',
);
}
const bindingFiles = readdirSync(
path.join(usbPrebuildsFolder, platformFolder)
)
path.join(usbPrebuildsFolder, platformFolder),
);
if (!bindingFiles.length) {
throw new Error('Could not find usb prebuild for platform')
throw new Error('Could not find usb prebuild for platform');
}
if (bindingFiles.length === 1) {
@@ -107,25 +127,22 @@ function findUsbPrebuild(): string[] {
if (bindingFiles.length > 1) {
bindingFile = bindingFiles.find((file) => {
if (bindingFiles.indexOf('arm') > -1) {
const process = require('process')
return file.indexOf(process.config.variables.arm_version) > -1
const process = require('process');
return file.indexOf(process.config.variables.arm_version) > -1;
} else {
return file.indexOf('glibc') > -1
return file.indexOf('glibc') > -1;
}
})
});
}
if (bindingFile === undefined) {
throw new Error('Could not find usb prebuild for platform')
throw new Error('Could not find usb prebuild for platform');
}
return [platformFolder, bindingFile];
}
const [
USB_BINDINGS_FOLDER,
USB_BINDINGS_FILE,
] = findUsbPrebuild();
const [USB_BINDINGS_FOLDER, USB_BINDINGS_FILE] = findUsbPrebuild();
function findLzmaNativeBindingsFolder(): string {
const files = readdirSync(
@@ -325,8 +342,8 @@ const commonConfig = {
// Use the libext2fs.wasm file in the generated folder
// The way to find the app directory depends on whether we run in the renderer or in the child-writer
// We use __dirname in the child-writer and electron.remote.app.getAppPath() in the renderer
replace(/node_modules\/ext2fs\/lib\/libext2fs\.js$/, {
search: 'scriptDirectory=__dirname+"/"',
replace(makeExt2FsRegex(), {
search: 'scriptDirectory = __dirname + "/";',
replace: fetchWasm('ext2fs', 'lib'),
}),
// Same for node-crc-utils
@@ -388,7 +405,7 @@ const guiConfigCopyPatterns = [
to: 'modules/node-raspberrypi-usbboot/blobs',
},
{
from: 'node_modules/ext2fs/lib/libext2fs.wasm',
from: `${findExt2fsFolder()}/lib/libext2fs.wasm`,
to: 'modules/ext2fs/lib/libext2fs.wasm',
},
{
@@ -438,6 +455,7 @@ const guiConfig = {
const mainConfig = {
...commonConfig,
target: 'electron-main',
devtool: 'source-map',
node: {
__dirname: false,
__filename: true,