mirror of
https://github.com/balena-io/etcher.git
synced 2025-04-24 15:27:17 +00:00
chore: generate single-binary portable installers on Windows (#1518)
We currently support portable builds that are basically ZIPs containing the main Etcher executable and all its related libraries. Turns out `electron-builder` supports NSIS-based portable builds that can create a single executable that has everything it needs to run, including any external assets. This commit makes use of this new portable Windows installer functionality, replacing the old ZIP approach. Change-Type: patch Changelog-Entry: Generate single-binary portable installers on Windows. Signed-off-by: Juan Cruz Viotti <jv@jviotti.com>
This commit is contained in:
parent
0f600c3cc2
commit
a8f6275763
50
Makefile
50
Makefile
@ -337,27 +337,6 @@ ifeq ($(TARGET_PLATFORM),linux)
|
||||
-o $@
|
||||
endif
|
||||
|
||||
ifeq ($(TARGET_PLATFORM),win32)
|
||||
./scripts/build/electron-configure-package-win32.sh -p $(word 2,$^) -a $< \
|
||||
-n "$(APPLICATION_NAME)" \
|
||||
-d "$(APPLICATION_DESCRIPTION)" \
|
||||
-v "$(APPLICATION_VERSION)" \
|
||||
-l LICENSE \
|
||||
-c "$(APPLICATION_COPYRIGHT)" \
|
||||
-m "$(COMPANY_NAME)" \
|
||||
-i assets/icon.ico \
|
||||
-w $(BUILD_TEMPORARY_DIRECTORY) \
|
||||
-o $@
|
||||
ifdef CODE_SIGN_CERTIFICATE
|
||||
ifdef CODE_SIGN_CERTIFICATE_PASSWORD
|
||||
./scripts/build/electron-sign-exe-win32.sh -f $@/$(APPLICATION_NAME).exe \
|
||||
-d "$(APPLICATION_NAME) - $(APPLICATION_VERSION)" \
|
||||
-c $(CODE_SIGN_CERTIFICATE) \
|
||||
-p $(CODE_SIGN_CERTIFICATE_PASSWORD)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
assets/osx/installer.tiff: assets/osx/installer.png assets/osx/installer@2x.png
|
||||
tiffutil -cathidpicheck $^ -out $@
|
||||
|
||||
@ -407,25 +386,18 @@ $(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME_LOWERCASE)-electron_$(APPLICATION_V
|
||||
./scripts/build/electron-installer-redhat-linux.sh -p $< -r "$(TARGET_ARCH)" -o $| \
|
||||
-c scripts/build/redhat/config.json
|
||||
|
||||
$(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-win32-$(TARGET_ARCH).zip: \
|
||||
$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-win32-$(TARGET_ARCH) \
|
||||
$(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-win32-$(TARGET_ARCH)-portable.exe: \
|
||||
| $(BUILD_OUTPUT_DIRECTORY)
|
||||
./scripts/build/zip-file.sh -f $< -s $(TARGET_PLATFORM) -o $@
|
||||
CSC_LINK=$(CODE_SIGN_CERTIFICATE) CSC_KEY_PASSWORD=$(CODE_SIGN_CERTIFICATE_PASSWORD) TARGET_ARCH=$(TARGET_ARCH) \
|
||||
$(NPX) build --win portable $(ELECTRON_BUILDER_OPTIONS)
|
||||
mv $(BUILD_DIRECTORY)/$(notdir $@) $@
|
||||
|
||||
$(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-win32-$(TARGET_ARCH).exe: \
|
||||
| $(BUILD_OUTPUT_DIRECTORY)
|
||||
TARGET_ARCH=$(TARGET_ARCH) $(NPX) build --win nsis $(ELECTRON_BUILDER_OPTIONS)
|
||||
CSC_LINK=$(CODE_SIGN_CERTIFICATE) CSC_KEY_PASSWORD=$(CODE_SIGN_CERTIFICATE_PASSWORD) TARGET_ARCH=$(TARGET_ARCH) \
|
||||
$(NPX) build --win nsis $(ELECTRON_BUILDER_OPTIONS)
|
||||
mv $(BUILD_DIRECTORY)/$(notdir $@) $@
|
||||
|
||||
ifdef CODE_SIGN_CERTIFICATE
|
||||
ifdef CODE_SIGN_CERTIFICATE_PASSWORD
|
||||
./scripts/build/electron-sign-exe-win32.sh -f $@ \
|
||||
-d "$(APPLICATION_NAME) - $(APPLICATION_VERSION)" \
|
||||
-c $(CODE_SIGN_CERTIFICATE) \
|
||||
-p $(CODE_SIGN_CERTIFICATE_PASSWORD)
|
||||
endif
|
||||
endif
|
||||
|
||||
$(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME)-cli-$(APPLICATION_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH).zip: \
|
||||
$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-cli-$(APPLICATION_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH) \
|
||||
| $(BUILD_OUTPUT_DIRECTORY)
|
||||
@ -498,16 +470,16 @@ PUBLISH_BINTRAY_REDHAT += \
|
||||
endif
|
||||
|
||||
ifeq ($(TARGET_PLATFORM),win32)
|
||||
electron-installer-zip: $(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH).zip
|
||||
electron-installer-nsis: $(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-win32-$(TARGET_ARCH).exe
|
||||
electron-installer-portable: $(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH)-portable.exe
|
||||
electron-installer-nsis: $(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH).exe
|
||||
cli-installer-zip: $(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME)-cli-$(APPLICATION_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH).zip
|
||||
TARGETS += \
|
||||
electron-installer-zip \
|
||||
electron-installer-portable \
|
||||
electron-installer-nsis \
|
||||
cli-installer-zip
|
||||
PUBLISH_AWS_S3 += \
|
||||
$(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH).zip \
|
||||
$(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-win32-$(TARGET_ARCH).exe \
|
||||
$(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH)-portable.exe \
|
||||
$(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH).exe \
|
||||
$(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME)-cli-$(APPLICATION_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH).zip
|
||||
endif
|
||||
|
||||
|
@ -72,6 +72,10 @@
|
||||
"deleteAppDataOnUninstall": true,
|
||||
"license": "LICENSE",
|
||||
"artifactName": "${productName}-${version}-win32-${env.TARGET_ARCH}.${ext}"
|
||||
},
|
||||
"portable": {
|
||||
"artifactName": "${productName}-${version}-win32-${env.TARGET_ARCH}-portable.${ext}",
|
||||
"requestExecutionLevel": "user"
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
|
@ -1,114 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
###
|
||||
# Copyright 2016 resin.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.
|
||||
###
|
||||
|
||||
set -u
|
||||
set -e
|
||||
|
||||
OS=$(uname -o 2>/dev/null || true)
|
||||
if [[ "$OS" != "Msys" ]]; then
|
||||
echo "This script is only meant to be run in Windows" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
./scripts/build/check-dependency.sh unzip
|
||||
|
||||
function usage() {
|
||||
echo "Usage: $0"
|
||||
echo ""
|
||||
echo "Options"
|
||||
echo ""
|
||||
echo " -p <electron package>"
|
||||
echo " -n <application name>"
|
||||
echo " -d <application description>"
|
||||
echo " -v <application version>"
|
||||
echo " -c <application copyright>"
|
||||
echo " -l <application license file>"
|
||||
echo " -m <company name>"
|
||||
echo " -a <application asar (.asar)>"
|
||||
echo " -i <application icon (.ico)>"
|
||||
echo " -w <download directory>"
|
||||
echo " -o <output directory>"
|
||||
exit 1
|
||||
}
|
||||
|
||||
ARGV_ELECTRON_PACKAGE=""
|
||||
ARGV_APPLICATION_NAME=""
|
||||
ARGV_APPLICATION_DESCRIPTION=""
|
||||
ARGV_VERSION=""
|
||||
ARGV_COPYRIGHT=""
|
||||
ARGV_LICENSE=""
|
||||
ARGV_COMPANY_NAME=""
|
||||
ARGV_ASAR=""
|
||||
ARGV_ICON=""
|
||||
ARGV_DOWNLOAD_DIRECTORY=""
|
||||
ARGV_OUTPUT=""
|
||||
|
||||
while getopts ":p:n:d:v:c:l:m:a:i:w:o:" option; do
|
||||
case $option in
|
||||
p) ARGV_ELECTRON_PACKAGE="$OPTARG" ;;
|
||||
n) ARGV_APPLICATION_NAME="$OPTARG" ;;
|
||||
d) ARGV_APPLICATION_DESCRIPTION="$OPTARG" ;;
|
||||
v) ARGV_VERSION="$OPTARG" ;;
|
||||
c) ARGV_COPYRIGHT="$OPTARG" ;;
|
||||
l) ARGV_LICENSE="$OPTARG" ;;
|
||||
m) ARGV_COMPANY_NAME="$OPTARG" ;;
|
||||
a) ARGV_ASAR="$OPTARG" ;;
|
||||
i) ARGV_ICON="$OPTARG" ;;
|
||||
w) ARGV_DOWNLOAD_DIRECTORY="$OPTARG" ;;
|
||||
o) ARGV_OUTPUT="$OPTARG" ;;
|
||||
*) usage ;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ -z "$ARGV_ELECTRON_PACKAGE" ] \
|
||||
|| [ -z "$ARGV_APPLICATION_NAME" ] \
|
||||
|| [ -z "$ARGV_APPLICATION_DESCRIPTION" ] \
|
||||
|| [ -z "$ARGV_VERSION" ] \
|
||||
|| [ -z "$ARGV_COPYRIGHT" ] \
|
||||
|| [ -z "$ARGV_LICENSE" ] \
|
||||
|| [ -z "$ARGV_COMPANY_NAME" ] \
|
||||
|| [ -z "$ARGV_ASAR" ] \
|
||||
|| [ -z "$ARGV_ICON" ] \
|
||||
|| [ -z "$ARGV_DOWNLOAD_DIRECTORY" ] \
|
||||
|| [ -z "$ARGV_OUTPUT" ]
|
||||
then
|
||||
usage
|
||||
fi
|
||||
|
||||
unzip "$ARGV_ELECTRON_PACKAGE" -d "$ARGV_OUTPUT"
|
||||
|
||||
mv "$ARGV_OUTPUT/electron.exe" "$ARGV_OUTPUT/$ARGV_APPLICATION_NAME.exe"
|
||||
cp "$ARGV_LICENSE" "$ARGV_OUTPUT/LICENSE"
|
||||
echo "$ARGV_VERSION" > "$ARGV_OUTPUT/version"
|
||||
rm -f "$ARGV_OUTPUT/resources/default_app.asar"
|
||||
|
||||
./scripts/build/electron-brand-exe.sh \
|
||||
-f "$ARGV_OUTPUT/$ARGV_APPLICATION_NAME.exe" \
|
||||
-n "$ARGV_APPLICATION_NAME" \
|
||||
-d "$ARGV_APPLICATION_DESCRIPTION" \
|
||||
-v "$ARGV_VERSION" \
|
||||
-c "$ARGV_COPYRIGHT" \
|
||||
-m "$ARGV_COMPANY_NAME" \
|
||||
-i "$ARGV_ICON" \
|
||||
-w "$ARGV_DOWNLOAD_DIRECTORY"
|
||||
|
||||
cp "$ARGV_ASAR" "$ARGV_OUTPUT/resources/app.asar"
|
||||
|
||||
if [ -d "$ARGV_ASAR.unpacked" ]; then
|
||||
cp -rf "$ARGV_ASAR.unpacked" "$ARGV_OUTPUT/resources/app.asar.unpacked"
|
||||
fi
|
Loading…
x
Reference in New Issue
Block a user