From 063fde1a026482456bc9364b5e068ccd8089dddd Mon Sep 17 00:00:00 2001 From: Juan Cruz Viotti Date: Thu, 23 Mar 2017 10:10:01 -0400 Subject: [PATCH] chore: automatic CLI packaging (#1132) This commit introduces the phony `package-cli` target, used to package the Electron CLI in a directory. Other related changes: - The `package` target has been renamed to `package-electron` Signed-off-by: Juan Cruz Viotti --- Makefile | 86 +++++++++++++- scripts/build/concatenate-javascript.sh | 49 ++++++++ .../build/dependencies-npm-extract-addons.sh | 61 ++++++++++ scripts/build/electron-brand-exe-win32.sh | 90 +++++++++++++++ scripts/build/electron-brand-exe.sh | 90 +++++++++++++++ .../build/electron-configure-package-win32.sh | 27 ++--- scripts/build/electron-sign-app-darwin.sh | 14 +-- scripts/build/electron-sign-darwin.sh | 62 ++++++++++ scripts/build/electron-sign-file-darwin.sh | 56 +++++++++ scripts/build/node-package-cli.sh | 82 +++++++++++++ .../build/node-static-entry-point-download.sh | 72 ++++++++++++ scripts/build/package-cli.sh | 109 ------------------ 12 files changed, 660 insertions(+), 138 deletions(-) create mode 100755 scripts/build/concatenate-javascript.sh create mode 100755 scripts/build/dependencies-npm-extract-addons.sh create mode 100644 scripts/build/electron-brand-exe-win32.sh create mode 100755 scripts/build/electron-brand-exe.sh create mode 100755 scripts/build/electron-sign-darwin.sh create mode 100755 scripts/build/electron-sign-file-darwin.sh create mode 100755 scripts/build/node-package-cli.sh create mode 100755 scripts/build/node-static-entry-point-download.sh delete mode 100755 scripts/build/package-cli.sh diff --git a/Makefile b/Makefile index 6ac247f4..6539b48a 100644 --- a/Makefile +++ b/Makefile @@ -19,6 +19,7 @@ BUILD_OUTPUT_DIRECTORY = $(BUILD_DIRECTORY)/out # --------------------------------------------------------------------- ELECTRON_VERSION = $(shell jq -r '.devDependencies["electron-prebuilt"]' package.json) +NODE_VERSION = 6.1.0 COMPANY_NAME = $(shell jq -r '.companyName' package.json) APPLICATION_NAME = $(shell jq -r '.displayName' package.json) APPLICATION_DESCRIPTION = $(shell jq -r '.description' package.json) @@ -164,6 +165,9 @@ $(BUILD_TEMPORARY_DIRECTORY): | $(BUILD_DIRECTORY) $(BUILD_DIRECTORY)/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-dependencies: | $(BUILD_DIRECTORY) mkdir $@ +$(BUILD_DIRECTORY)/node-$(TARGET_PLATFORM)-$(TARGET_ARCH)-dependencies: | $(BUILD_DIRECTORY) + mkdir $@ + $(BUILD_OUTPUT_DIRECTORY): | $(BUILD_DIRECTORY) mkdir $@ @@ -176,6 +180,15 @@ $(BUILD_DIRECTORY)/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-dependencies/node_ -t electron \ -s "$(TARGET_PLATFORM)" +$(BUILD_DIRECTORY)/node-$(TARGET_PLATFORM)-$(TARGET_ARCH)-dependencies/node_modules: package.json npm-shrinkwrap.json \ + | $(BUILD_DIRECTORY)/node-$(TARGET_PLATFORM)-$(TARGET_ARCH)-dependencies + ./scripts/build/dependencies-npm.sh -p -f \ + -r "$(TARGET_ARCH)" \ + -v "$(NODE_VERSION)" \ + -x $| \ + -t node \ + -s "$(TARGET_PLATFORM)" + $(BUILD_DIRECTORY)/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-dependencies/bower_components: bower.json \ | $(BUILD_DIRECTORY)/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-dependencies ./scripts/build/dependencies-bower.sh -p -x $| @@ -202,6 +215,57 @@ $(BUILD_DIRECTORY)/electron-$(ELECTRON_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH -s "$(TARGET_PLATFORM)" \ -o $@ +$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-cli-$(TARGET_PLATFORM)-$(APPLICATION_VERSION)-$(TARGET_ARCH)-app: \ + package.json lib \ + $(BUILD_DIRECTORY)/node-$(TARGET_PLATFORM)-$(TARGET_ARCH)-dependencies/node_modules \ + | $(BUILD_DIRECTORY) + mkdir $@ + $(foreach prerequisite,$^,$(call execute-command,cp -rf $(prerequisite) $@)) + +$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-cli-$(TARGET_PLATFORM)-$(APPLICATION_VERSION)-$(TARGET_ARCH).js: \ + $(BUILD_DIRECTORY)/$(APPLICATION_NAME)-cli-$(TARGET_PLATFORM)-$(APPLICATION_VERSION)-$(TARGET_ARCH)-app \ + | $(BUILD_DIRECTORY) + ./scripts/build/concatenate-javascript.sh -e $" + echo " -o " + exit 1 +} + +ARGV_ENTRY_POINT="" +ARGV_OUTPUT="" + +while getopts ":e:o:" option; do + case $option in + e) ARGV_ENTRY_POINT=$OPTARG ;; + o) ARGV_OUTPUT=$OPTARG ;; + *) usage ;; + esac +done + +if [ -z "$ARGV_ENTRY_POINT" ] || [ -z "$ARGV_OUTPUT" ]; then + usage +fi + +browserify "$ARGV_ENTRY_POINT" --node --outfile "$ARGV_OUTPUT" diff --git a/scripts/build/dependencies-npm-extract-addons.sh b/scripts/build/dependencies-npm-extract-addons.sh new file mode 100755 index 00000000..831368a0 --- /dev/null +++ b/scripts/build/dependencies-npm-extract-addons.sh @@ -0,0 +1,61 @@ +#!/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 + +./scripts/build/check-dependency.sh rsync + +function usage() { + echo "Usage: $0" + echo "" + echo "Options" + echo "" + echo " -d " + echo " -o " + exit 1 +} + +ARGV_NODE_MODULES="" +ARGV_OUTPUT_DIRECTORY="" + +while getopts ":d:o:" option; do + case $option in + d) ARGV_NODE_MODULES=$OPTARG ;; + o) ARGV_OUTPUT_DIRECTORY=$OPTARG ;; + *) usage ;; + esac +done + +if [ -z "$ARGV_NODE_MODULES" ] || [ -z "$ARGV_OUTPUT_DIRECTORY" ]; then + usage +fi + +rsync \ + --archive \ + --prune-empty-dirs \ + --progress \ + --include='*.node' \ + --include='*/' \ + --exclude='*' \ + "$ARGV_NODE_MODULES" "$ARGV_OUTPUT_DIRECTORY" + +# rsync creates a `node_modules` directory +# inside the output directory +mv "$ARGV_OUTPUT_DIRECTORY"/node_modules/* "$ARGV_OUTPUT_DIRECTORY" +rmdir "$ARGV_OUTPUT_DIRECTORY/node_modules" diff --git a/scripts/build/electron-brand-exe-win32.sh b/scripts/build/electron-brand-exe-win32.sh new file mode 100644 index 00000000..dcccad73 --- /dev/null +++ b/scripts/build/electron-brand-exe-win32.sh @@ -0,0 +1,90 @@ +#!/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 + +function usage() { + echo "Usage: $0" + echo "" + echo "Options" + echo "" + echo " -f " + echo " -n " + echo " -d " + echo " -v " + echo " -c " + echo " -m " + echo " -i " + echo " -w " + exit 1 +} + +ARGV_FILE="" +ARGV_APPLICATION_NAME="" +ARGV_APPLICATION_DESCRIPTION="" +ARGV_VERSION="" +ARGV_COPYRIGHT="" +ARGV_COMPANY_NAME="" +ARGV_ICON="" +ARGV_DOWNLOAD_DIRECTORY="" + +while getopts ":f:n:d:v:c:m:i:w:" option; do + case $option in + f) ARGV_FILE="$OPTARG" ;; + n) ARGV_APPLICATION_NAME="$OPTARG" ;; + d) ARGV_APPLICATION_DESCRIPTION="$OPTARG" ;; + v) ARGV_VERSION="$OPTARG" ;; + c) ARGV_COPYRIGHT="$OPTARG" ;; + m) ARGV_COMPANY_NAME="$OPTARG" ;; + i) ARGV_ICON="$OPTARG" ;; + w) ARGV_DOWNLOAD_DIRECTORY="$OPTARG" ;; + *) usage ;; + esac +done + +if [ -z "$ARGV_FILE" ] \ + || [ -z "$ARGV_APPLICATION_NAME" ] \ + || [ -z "$ARGV_APPLICATION_DESCRIPTION" ] \ + || [ -z "$ARGV_VERSION" ] \ + || [ -z "$ARGV_COPYRIGHT" ] \ + || [ -z "$ARGV_COMPANY_NAME" ] \ + || [ -z "$ARGV_ICON" ] \ + || [ -z "$ARGV_DOWNLOAD_DIRECTORY" ] +then + usage +fi + +RCEDIT_VERSION=v0.7.0 +RCEDIT="$ARGV_DOWNLOAD_DIRECTORY/rcedit.exe" + +./scripts/build/download-tool.sh -x \ + -u "https://github.com/electron/node-rcedit/raw/$RCEDIT_VERSION/bin/rcedit.exe" \ + -c "42649d92e1bbb3af1186fb0ad063df9fcdc18e7b5f2ea82191ecc8fdfaffb0d8" \ + -o "$RCEDIT" + +"$RCEDIT" "$ARGV_FILE" \ + --set-version-string "FileDescription" "$ARGV_APPLICATION_NAME" \ + --set-version-string "InternalName" "$ARGV_APPLICATION_NAME" \ + --set-version-string "OriginalFilename" "$(basename "$ARGV_FILE")" \ + --set-version-string "ProductName" "$ARGV_APPLICATION_NAME - $ARGV_APPLICATION_DESCRIPTION" \ + --set-version-string "CompanyName" "$ARGV_COMPANY_NAME" \ + --set-version-string "LegalCopyright" "$ARGV_COPYRIGHT" \ + --set-file-version "$ARGV_VERSION" \ + --set-product-version "$ARGV_VERSION" \ + --set-icon "$ARGV_ICON" diff --git a/scripts/build/electron-brand-exe.sh b/scripts/build/electron-brand-exe.sh new file mode 100755 index 00000000..dcccad73 --- /dev/null +++ b/scripts/build/electron-brand-exe.sh @@ -0,0 +1,90 @@ +#!/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 + +function usage() { + echo "Usage: $0" + echo "" + echo "Options" + echo "" + echo " -f " + echo " -n " + echo " -d " + echo " -v " + echo " -c " + echo " -m " + echo " -i " + echo " -w " + exit 1 +} + +ARGV_FILE="" +ARGV_APPLICATION_NAME="" +ARGV_APPLICATION_DESCRIPTION="" +ARGV_VERSION="" +ARGV_COPYRIGHT="" +ARGV_COMPANY_NAME="" +ARGV_ICON="" +ARGV_DOWNLOAD_DIRECTORY="" + +while getopts ":f:n:d:v:c:m:i:w:" option; do + case $option in + f) ARGV_FILE="$OPTARG" ;; + n) ARGV_APPLICATION_NAME="$OPTARG" ;; + d) ARGV_APPLICATION_DESCRIPTION="$OPTARG" ;; + v) ARGV_VERSION="$OPTARG" ;; + c) ARGV_COPYRIGHT="$OPTARG" ;; + m) ARGV_COMPANY_NAME="$OPTARG" ;; + i) ARGV_ICON="$OPTARG" ;; + w) ARGV_DOWNLOAD_DIRECTORY="$OPTARG" ;; + *) usage ;; + esac +done + +if [ -z "$ARGV_FILE" ] \ + || [ -z "$ARGV_APPLICATION_NAME" ] \ + || [ -z "$ARGV_APPLICATION_DESCRIPTION" ] \ + || [ -z "$ARGV_VERSION" ] \ + || [ -z "$ARGV_COPYRIGHT" ] \ + || [ -z "$ARGV_COMPANY_NAME" ] \ + || [ -z "$ARGV_ICON" ] \ + || [ -z "$ARGV_DOWNLOAD_DIRECTORY" ] +then + usage +fi + +RCEDIT_VERSION=v0.7.0 +RCEDIT="$ARGV_DOWNLOAD_DIRECTORY/rcedit.exe" + +./scripts/build/download-tool.sh -x \ + -u "https://github.com/electron/node-rcedit/raw/$RCEDIT_VERSION/bin/rcedit.exe" \ + -c "42649d92e1bbb3af1186fb0ad063df9fcdc18e7b5f2ea82191ecc8fdfaffb0d8" \ + -o "$RCEDIT" + +"$RCEDIT" "$ARGV_FILE" \ + --set-version-string "FileDescription" "$ARGV_APPLICATION_NAME" \ + --set-version-string "InternalName" "$ARGV_APPLICATION_NAME" \ + --set-version-string "OriginalFilename" "$(basename "$ARGV_FILE")" \ + --set-version-string "ProductName" "$ARGV_APPLICATION_NAME - $ARGV_APPLICATION_DESCRIPTION" \ + --set-version-string "CompanyName" "$ARGV_COMPANY_NAME" \ + --set-version-string "LegalCopyright" "$ARGV_COPYRIGHT" \ + --set-file-version "$ARGV_VERSION" \ + --set-product-version "$ARGV_VERSION" \ + --set-icon "$ARGV_ICON" diff --git a/scripts/build/electron-configure-package-win32.sh b/scripts/build/electron-configure-package-win32.sh index 928dbe45..954e7b18 100755 --- a/scripts/build/electron-configure-package-win32.sh +++ b/scripts/build/electron-configure-package-win32.sh @@ -97,24 +97,15 @@ cp "$ARGV_LICENSE" "$ARGV_OUTPUT/LICENSE" echo "$ARGV_VERSION" > "$ARGV_OUTPUT/version" rm -f "$ARGV_OUTPUT/resources/default_app.asar" -RCEDIT_VERSION=v0.7.0 -RCEDIT="$ARGV_DOWNLOAD_DIRECTORY/rcedit.exe" - -./scripts/build/download-tool.sh -x \ - -u "https://github.com/electron/node-rcedit/raw/$RCEDIT_VERSION/bin/rcedit.exe" \ - -c "42649d92e1bbb3af1186fb0ad063df9fcdc18e7b5f2ea82191ecc8fdfaffb0d8" \ - -o "$RCEDIT" - -"$RCEDIT" "$ARGV_OUTPUT/$ARGV_APPLICATION_NAME.exe" \ - --set-version-string "FileDescription" "$ARGV_APPLICATION_NAME" \ - --set-version-string "InternalName" "$ARGV_APPLICATION_NAME" \ - --set-version-string "OriginalFilename" "$(basename "$ARGV_OUTPUT")" \ - --set-version-string "ProductName" "$ARGV_APPLICATION_NAME - $ARGV_APPLICATION_DESCRIPTION" \ - --set-version-string "CompanyName" "$ARGV_COMPANY_NAME" \ - --set-version-string "LegalCopyright" "$ARGV_COPYRIGHT" \ - --set-file-version "$ARGV_VERSION" \ - --set-product-version "$ARGV_VERSION" \ - --set-icon "$ARGV_ICON" +./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" diff --git a/scripts/build/electron-sign-app-darwin.sh b/scripts/build/electron-sign-app-darwin.sh index 4423056d..4b830812 100755 --- a/scripts/build/electron-sign-app-darwin.sh +++ b/scripts/build/electron-sign-app-darwin.sh @@ -55,7 +55,7 @@ fi function sign_file() { local file=$1 - codesign --sign "$ARGV_IDENTITY" -fv "$file" + ./scripts/build/electron-sign-file-darwin.sh -f "$file" -i "$ARGV_IDENTITY" } # Avoid issues with `for` loops on file names containing spaces @@ -87,13 +87,11 @@ IFS=$SAVEIFS # its components have been signed sign_file "$ARGV_APPLICATION" -# Verify signature -codesign \ - --verify \ - --deep \ - --display \ - --verbose=4 "$ARGV_APPLICATION" - +# spctl manages the security assessment policy subsystem. +# This subsystem maintains and evaluates rules that determine whether the system +# allows the installation, execution, and other operations on files on the system. +# We use this tool to simulate whether the OS would accept our code +# signature at the moment of installation / execution. spctl \ --ignore-cache \ --no-cache \ diff --git a/scripts/build/electron-sign-darwin.sh b/scripts/build/electron-sign-darwin.sh new file mode 100755 index 00000000..a0f39d08 --- /dev/null +++ b/scripts/build/electron-sign-darwin.sh @@ -0,0 +1,62 @@ +#!/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) +if [[ "$OS" != "Darwin" ]]; then + echo "This script is only meant to be run in OS X" 1>&2 + exit 1 +fi + +./scripts/build/check-dependency.sh codesign + +function usage() { + echo "Usage: $0" + echo "" + echo "Options" + echo "" + echo " -f " + echo " -i " + exit 1 +} + +ARGV_FILE="" +ARGV_IDENTITY="" + +while getopts ":f:i:" option; do + case $option in + f) ARGV_FILE="$OPTARG" ;; + i) ARGV_IDENTITY="$OPTARG" ;; + *) usage ;; + esac +done + +if [ -z "$ARGV_FILE" ] || [ -z "$ARGV_IDENTITY" ]; then + usage +fi + +codesign --sign "$ARGV_IDENTITY" -fv "$ARGV_FILE" + +# Verify signature +codesign \ + --verify \ + --deep \ + --display \ + --verbose=4 "$ARGV_FILE" diff --git a/scripts/build/electron-sign-file-darwin.sh b/scripts/build/electron-sign-file-darwin.sh new file mode 100755 index 00000000..089f1d7e --- /dev/null +++ b/scripts/build/electron-sign-file-darwin.sh @@ -0,0 +1,56 @@ +#!/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) +if [[ "$OS" != "Darwin" ]]; then + echo "This script is only meant to be run in OS X" 1>&2 + exit 1 +fi + +./scripts/build/check-dependency.sh codesign + +function usage() { + echo "Usage: $0" + echo "" + echo "Options" + echo "" + echo " -f " + echo " -i " + exit 1 +} + +ARGV_FILE="" +ARGV_IDENTITY="" + +while getopts ":f:i:" option; do + case $option in + f) ARGV_FILE="$OPTARG" ;; + i) ARGV_IDENTITY="$OPTARG" ;; + *) usage ;; + esac +done + +if [ -z "$ARGV_FILE" ] || [ -z "$ARGV_IDENTITY" ]; then + usage +fi + +codesign --sign "$ARGV_IDENTITY" -fv "$ARGV_FILE" +codesign --verify --deep --display "$ARGV_FILE" diff --git a/scripts/build/node-package-cli.sh b/scripts/build/node-package-cli.sh new file mode 100755 index 00000000..1f25499e --- /dev/null +++ b/scripts/build/node-package-cli.sh @@ -0,0 +1,82 @@ +#!/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 + +function usage() { + echo "Usage: $0" + echo "" + echo "Options" + echo "" + echo " -n " + echo " -e " + echo " -l " + echo " -r " + echo " -s " + echo " -o " + exit 1 +} + +ARGV_APPLICATION_NAME="" +ARGV_ENTRY_POINT="" +ARGV_NODE_MODULES="" +ARGV_ARCHITECTURE="" +ARGV_OPERATING_SYSTEM="" +ARGV_OUTPUT="" + +while getopts ":n:e:l:r:s:o:" option; do + case $option in + n) ARGV_APPLICATION_NAME="$OPTARG" ;; + e) ARGV_ENTRY_POINT="$OPTARG" ;; + l) ARGV_NODE_MODULES="$OPTARG" ;; + r) ARGV_ARCHITECTURE="$OPTARG" ;; + s) ARGV_OPERATING_SYSTEM="$OPTARG" ;; + o) ARGV_OUTPUT="$OPTARG" ;; + *) usage ;; + esac +done + +if [ -z "$ARGV_APPLICATION_NAME" ] \ + || [ -z "$ARGV_ENTRY_POINT" ] \ + || [ -z "$ARGV_NODE_MODULES" ] \ + || [ -z "$ARGV_ARCHITECTURE" ] \ + || [ -z "$ARGV_OPERATING_SYSTEM" ] \ + || [ -z "$ARGV_OUTPUT" ]; then + usage +fi + +mkdir "$ARGV_OUTPUT" +cp "$ARGV_ENTRY_POINT" "$ARGV_OUTPUT/index.js" + +./scripts/build/dependencies-npm-extract-addons.sh \ + -d "$ARGV_NODE_MODULES" \ + -o "$ARGV_OUTPUT/node_modules" + +APPLICATION_NAME_LOWERCASE="$(echo "$ARGV_APPLICATION_NAME" | tr '[:upper:]' '[:lower:]')" +BINARY_LOCATION="$ARGV_OUTPUT/$APPLICATION_NAME_LOWERCASE" +if [ "$ARGV_OPERATING_SYSTEM" == "win32" ]; then + BINARY_LOCATION="$BINARY_LOCATION.exe" +fi + +./scripts/build/node-static-entry-point-download.sh \ + -r "$ARGV_ARCHITECTURE" \ + -v "1.0.1" \ + -s "$ARGV_OPERATING_SYSTEM" \ + -o "$BINARY_LOCATION" +chmod +x "$BINARY_LOCATION" diff --git a/scripts/build/node-static-entry-point-download.sh b/scripts/build/node-static-entry-point-download.sh new file mode 100755 index 00000000..cc2e85ad --- /dev/null +++ b/scripts/build/node-static-entry-point-download.sh @@ -0,0 +1,72 @@ +#!/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 + +./scripts/build/check-dependency.sh wget + +function usage() { + echo "Usage: $0" + echo "" + echo "Options" + echo "" + echo " -r " + echo " -v " + echo " -s " + echo " -o " + exit 1 +} + +ARGV_ARCHITECTURE="" +ARGV_VERSION="" +ARGV_OPERATING_SYSTEM="" +ARGV_OUTPUT="" + +while getopts ":r:v:s:o:" option; do + case $option in + r) ARGV_ARCHITECTURE=$OPTARG ;; + v) ARGV_VERSION=$OPTARG ;; + s) ARGV_OPERATING_SYSTEM=$OPTARG ;; + o) ARGV_OUTPUT=$OPTARG ;; + *) usage ;; + esac +done + +if [ -z "$ARGV_ARCHITECTURE" ] \ + || [ -z "$ARGV_VERSION" ] \ + || [ -z "$ARGV_OPERATING_SYSTEM" ] \ + || [ -z "$ARGV_OUTPUT" ] +then + usage +fi + +GITHUB_REPOSITORY=https://github.com/resin-io-modules/node-static-entry-point +DOWNLOADS_BASEURL="$GITHUB_REPOSITORY/releases/download/v$ARGV_VERSION" + +FILENAME="node-$ARGV_OPERATING_SYSTEM-$ARGV_ARCHITECTURE" +if [ "$ARGV_OPERATING_SYSTEM" == "win32" ]; then + FILENAME="$FILENAME.exe" +fi + +CHECKSUM=$(wget --no-check-certificate -O - "$DOWNLOADS_BASEURL/SHASUMS256.txt" | grep "$FILENAME" | cut -d ' ' -f 1) + +./scripts/build/download-tool.sh \ + -u "$DOWNLOADS_BASEURL/$FILENAME" \ + -c "$CHECKSUM" \ + -o "$ARGV_OUTPUT" diff --git a/scripts/build/package-cli.sh b/scripts/build/package-cli.sh deleted file mode 100755 index a2989eb4..00000000 --- a/scripts/build/package-cli.sh +++ /dev/null @@ -1,109 +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 - -./scripts/build/check-dependency.sh browserify -./scripts/build/check-dependency.sh rsync - -function usage() { - echo "Usage: $0" - echo "" - echo "Options" - echo "" - echo " -n " - echo " -e " - echo " -r " - echo " -s " - echo " -o " - exit 1 -} - -ARGV_APPLICATION_NAME="" -ARGV_ENTRY_POINT="" -ARGV_ARCHITECTURE="" -ARGV_OPERATING_SYSTEM="" -ARGV_OUTPUT="" - -while getopts ":n:e:r:s:o:" option; do - case $option in - n) ARGV_APPLICATION_NAME="$OPTARG" ;; - e) ARGV_ENTRY_POINT="$OPTARG" ;; - r) ARGV_ARCHITECTURE="$OPTARG" ;; - s) ARGV_OPERATING_SYSTEM="$OPTARG" ;; - o) ARGV_OUTPUT="$OPTARG" ;; - *) usage ;; - esac -done - -if [ -z "$ARGV_APPLICATION_NAME" ] \ - || [ -z "$ARGV_ENTRY_POINT" ] \ - || [ -z "$ARGV_ARCHITECTURE" ] \ - || [ -z "$ARGV_OPERATING_SYSTEM" ] \ - || [ -z "$ARGV_OUTPUT" ]; then - usage -fi - -if [ ! -d "$PWD/node_modules" ]; then - echo "Looks like you forgot to install the dependencies first!" 1>&2 - exit 1 -fi - -NODE_STATIC_ENTRY_POINT_REPOSITORY=https://github.com/resin-io-modules/node-static-entry-point -NODE_STATIC_ENTRY_POINT_VERSION=v1.0.0 # NodeJS v6 -NODE_STATIC_ENTRY_POINT_FILENAME="node-$ARGV_OPERATING_SYSTEM-$ARGV_ARCHITECTURE" -NODE_STATIC_ENTRY_POINT_URL="$NODE_STATIC_ENTRY_POINT_REPOSITORY/releases/download/$NODE_STATIC_ENTRY_POINT_VERSION/$NODE_STATIC_ENTRY_POINT_FILENAME" - -if [ "$ARGV_OPERATING_SYSTEM" == "darwin" ]; then - NODE_STATIC_ENTRY_POINT_CHECKSUM=12509af741777a2c3688169272fbb01e66b5c0efae400a775770b71d7b62666c -elif [ "$ARGV_OPERATING_SYSTEM" == "linux" ]; then - if [ "$ARGV_ARCHITECTURE" == "x64" ]; then - NODE_STATIC_ENTRY_POINT_CHECKSUM=c1735694c1cef2bd26e4c8dcc7e67d5ad61b16b347f1b06588a52cf1aa4432fd - fi - if [ "$ARGV_ARCHITECTURE" == "x86" ]; then - NODE_STATIC_ENTRY_POINT_CHECKSUM=49eeacc086df04bb3370b7c25afcf36b6e45083889ca438747ece3dd96602b8d - fi -elif [ "$ARGV_OPERATING_SYSTEM" == "win32" ]; then - if [ "$ARGV_ARCHITECTURE" == "x64" ]; then - NODE_STATIC_ENTRY_POINT_CHECKSUM=60f167aa3389e86956c4ec3c44de7107b4dc9d634b26dbd5f08e14e85f32c2ea - fi - if [ "$ARGV_ARCHITECTURE" == "x86" ]; then - NODE_STATIC_ENTRY_POINT_CHECKSUM=19f07b2d89a727dc64dd4b4e74b7ee8f4464ddc908b63bd60506d471e2f9f602 - fi -else - echo "Unsupported operating system: $ARGV_OPERATING_SYSTEM" 1>&2 - exit 1 -fi - -browserify "$ARGV_ENTRY_POINT" --node --outfile "$ARGV_OUTPUT/index.js" -BINARY_LOCATION="$ARGV_OUTPUT/$ARGV_APPLICATION_NAME" -./scripts/build/download-tool.sh -x \ - -u "$NODE_STATIC_ENTRY_POINT_URL" \ - -c "$NODE_STATIC_ENTRY_POINT_CHECKSUM" \ - -o "$BINARY_LOCATION" - -rsync \ - --archive \ - --prune-empty-dirs \ - --progress \ - --include='*.node' \ - --include='*/' \ - --exclude='*' \ - node_modules \ - "$ARGV_OUTPUT/node_modules"