diff --git a/scripts/build/linux.sh b/scripts/build/linux.sh index 9bd54f6c..cd567db3 100755 --- a/scripts/build/linux.sh +++ b/scripts/build/linux.sh @@ -75,10 +75,18 @@ if [ "$COMMAND" == "install" ] || [ "$COMMAND" == "all" ]; then fi if [ "$COMMAND" == "package" ] || [ "$COMMAND" == "all" ]; then + ./scripts/unix/dependencies.sh \ + -r "$ARCH" \ + -v "$ELECTRON_VERSION" \ + -t electron \ + -p + ./scripts/linux/package.sh \ -n "$APPLICATION_NAME" \ -r "$ARCH" \ -v "$APPLICATION_VERSION" \ + -l LICENSE \ + -f "package.json,lib,node_modules,bower_components,build,assets" \ -e "$ELECTRON_VERSION" \ -o etcher-release/$APPLICATION_NAME-linux-$ARCH fi diff --git a/scripts/linux/package.sh b/scripts/linux/package.sh index 8aa5463b..3bd57678 100755 --- a/scripts/linux/package.sh +++ b/scripts/linux/package.sh @@ -18,6 +18,7 @@ set -u set -e +set -x OS=$(uname) if [[ "$OS" != "Linux" ]]; then @@ -25,6 +26,16 @@ if [[ "$OS" != "Linux" ]]; then exit 1 fi +if ! command -v asar 2>/dev/null 1>&2; then + echo "Dependency missing: asar" 1>&2 + exit 1 +fi + +if ! command -v wget 2>/dev/null 1>&2; then + echo "Dependency missing: wget" 1>&2 + exit 1 +fi + function usage() { echo "Usage: $0" echo "" @@ -33,6 +44,8 @@ function usage() { echo " -n " echo " -r " echo " -v " + echo " -l " + echo " -f " echo " -e " echo " -o " exit 0 @@ -41,14 +54,18 @@ function usage() { ARGV_APPLICATION_NAME="" ARGV_ARCHITECTURE="" ARGV_VERSION="" +ARGV_LICENSE="" +ARGV_FILES="" ARGV_ELECTRON_VERSION="" ARGV_OUTPUT="" -while getopts ":n:r:v:e:o:" option; do +while getopts ":n:r:v:l:f:e:o:" option; do case $option in n) ARGV_APPLICATION_NAME="$OPTARG" ;; r) ARGV_ARCHITECTURE="$OPTARG" ;; v) ARGV_VERSION="$OPTARG" ;; + l) ARGV_LICENSE="$OPTARG" ;; + f) ARGV_FILES="$OPTARG" ;; e) ARGV_ELECTRON_VERSION="$OPTARG" ;; o) ARGV_OUTPUT="$OPTARG" ;; *) usage ;; @@ -58,50 +75,41 @@ done if [ -z "$ARGV_APPLICATION_NAME" ] \ || [ -z "$ARGV_ARCHITECTURE" ] \ || [ -z "$ARGV_VERSION" ] \ + || [ -z "$ARGV_LICENSE" ] \ + || [ -z "$ARGV_FILES" ] \ || [ -z "$ARGV_ELECTRON_VERSION" ] \ || [ -z "$ARGV_OUTPUT" ] then usage fi -ELECTRON_PACKAGER=./node_modules/.bin/electron-packager - -if [ ! -x $ELECTRON_PACKAGER ]; then - echo "Couldn't find $ELECTRON_PACKAGER" 1>&2 - echo "Have you installed the dependencies first?" 1>&2 - exit 1 -fi - OUTPUT_DIRNAME=$(dirname "$ARGV_OUTPUT") - mkdir -p "$OUTPUT_DIRNAME" -ELECTRON_PACKAGER_ARCH=$ARGV_ARCHITECTURE -if [ "$ELECTRON_PACKAGER_ARCH" == "x86" ]; then - ELECTRON_PACKAGER_ARCH="ia32" +ELECTRON_ARCHITECTURE=$ARGV_ARCHITECTURE +if [ "$ELECTRON_ARCHITECTURE" == "x86" ]; then + ELECTRON_ARCHITECTURE="ia32" fi ELECTRON_PACKAGE_OUTPUT=$OUTPUT_DIRNAME/$ARGV_APPLICATION_NAME-linux-$ARGV_ARCHITECTURE +ELECTRON_GITHUB_REPOSITORY=https://github.com/electron/electron +ELECTRON_FILENAME=electron-v$ARGV_ELECTRON_VERSION-linux-$ELECTRON_ARCHITECTURE.zip -rm -rf "$ELECTRON_PACKAGE_OUTPUT" +pushd $OUTPUT_DIRNAME +wget $ELECTRON_GITHUB_REPOSITORY/releases/download/v$ARGV_ELECTRON_VERSION/$ELECTRON_FILENAME +popd -$ELECTRON_PACKAGER . "$ARGV_APPLICATION_NAME" \ - --platform=linux \ - --arch="$ELECTRON_PACKAGER_ARCH" \ - --version="$ARGV_ELECTRON_VERSION" \ - --ignore="$(node scripts/packageignore.js)" \ - --asar \ - --app-version="$ARGV_VERSION" \ - --build-version="$ARGV_VERSION" \ - --overwrite \ - --out="$OUTPUT_DIRNAME" +unzip $OUTPUT_DIRNAME/$ELECTRON_FILENAME -d $ARGV_OUTPUT +rm $OUTPUT_DIRNAME/$ELECTRON_FILENAME +mv $ARGV_OUTPUT/electron $ARGV_OUTPUT/$(echo "$ARGV_APPLICATION_NAME" | tr '[:upper:]' '[:lower:]') +cp $ARGV_LICENSE $ARGV_OUTPUT/LICENSE +echo "$ARGV_VERSION" > $ARGV_OUTPUT/version +rm $ARGV_OUTPUT/resources/default_app.asar +mkdir -p $ARGV_OUTPUT/resources/app -if [ "$ELECTRON_PACKAGE_OUTPUT" != "$ARGV_OUTPUT" ]; then - mv "$ELECTRON_PACKAGE_OUTPUT" "$ARGV_OUTPUT" -fi +for file in $(echo $ARGV_FILES | sed "s/,/ /g"); do + cp -rf "$file" $ARGV_OUTPUT/resources/app +done -# Transform binary to lowercase -FINAL_BINARY_FILENAME=$(echo "$ARGV_APPLICATION_NAME" | tr '[:upper:]' '[:lower:]') -mv "$ARGV_OUTPUT/$ARGV_APPLICATION_NAME" "$ARGV_OUTPUT/$FINAL_BINARY_FILENAME" - -chmod a+x "$ARGV_OUTPUT"/*.so* +asar pack $ARGV_OUTPUT/resources/app $ARGV_OUTPUT/resources/app.asar --unpack *.node +rm -rf $ARGV_OUTPUT/resources/app