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 <jviotti@openmailbox.org>
This commit is contained in:
Juan Cruz Viotti 2017-03-23 10:10:01 -04:00 committed by GitHub
parent 61f7c85060
commit 063fde1a02
12 changed files with 660 additions and 138 deletions

View File

@ -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 $</lib/cli/etcher.js -o $@
$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-cli-$(APPLICATION_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH): \
$(BUILD_DIRECTORY)/node-$(TARGET_PLATFORM)-$(TARGET_ARCH)-dependencies/node_modules \
$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-cli-$(TARGET_PLATFORM)-$(APPLICATION_VERSION)-$(TARGET_ARCH).js \
| $(BUILD_DIRECTORY) $(BUILD_TEMPORARY_DIRECTORY)
./scripts/build/node-package-cli.sh -o $@ -l $< \
-n $(APPLICATION_NAME) \
-e $(word 2,$^) \
-r $(TARGET_ARCH) \
-s $(TARGET_PLATFORM)
ifeq ($(TARGET_PLATFORM),win32)
./scripts/build/electron-brand-exe.sh \
-f $@/etcher.exe \
-n $(APPLICATION_NAME) \
-d "$(APPLICATION_DESCRIPTION)" \
-v "$(APPLICATION_VERSION)" \
-c "$(APPLICATION_COPYRIGHT)" \
-m "$(COMPANY_NAME)" \
-i assets/icon.ico \
-w $(BUILD_TEMPORARY_DIRECTORY)
endif
ifeq ($(TARGET_PLATFORM),darwin)
ifdef CODE_SIGN_IDENTITY
./scripts/build/electron-sign-file-darwin.sh -f $@/etcher -i "$(CODE_SIGN_IDENTITY)"
endif
endif
ifeq ($(TARGET_PLATFORM),win32)
ifdef CODE_SIGN_CERTIFICATE
ifdef CODE_SIGN_CERTIFICATE_PASSWORD
./scripts/build/electron-sign-exe-win32.sh -f $@/etcher.exe \
-d "$(APPLICATION_NAME) - $(APPLICATION_VERSION)" \
-c $(CODE_SIGN_CERTIFICATE) \
-p $(CODE_SIGN_CERTIFICATE_PASSWORD)
endif
endif
endif
$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH): \
$(BUILD_DIRECTORY)/electron-$(TARGET_PLATFORM)-$(APPLICATION_VERSION)-$(TARGET_ARCH)-app.asar \
$(BUILD_DIRECTORY)/electron-$(ELECTRON_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH).zip \
@ -216,6 +280,7 @@ ifeq ($(TARGET_PLATFORM),darwin)
-i assets/icon.icns \
-o $@
endif
ifeq ($(TARGET_PLATFORM),linux)
./scripts/build/electron-configure-package-linux.sh -p $(word 2,$^) -a $< \
-n "$(APPLICATION_NAME)" \
@ -223,6 +288,7 @@ ifeq ($(TARGET_PLATFORM),linux)
-l LICENSE \
-o $@
endif
ifeq ($(TARGET_PLATFORM),win32)
./scripts/build/electron-configure-package-win32.sh -p $(word 2,$^) -a $< \
-n "$(APPLICATION_NAME)" \
@ -308,6 +374,7 @@ $(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-win32-$(TAR
$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-win32-$(TARGET_ARCH) \
| $(BUILD_OUTPUT_DIRECTORY) $(BUILD_TEMPORARY_DIRECTORY)
./scripts/build/electron-installer-nsis-win32.sh -n $(APPLICATION_NAME) -a $< -t $(BUILD_TEMPORARY_DIRECTORY) -o $@
ifdef CODE_SIGN_CERTIFICATE
ifdef CODE_SIGN_CERTIFICATE_PASSWORD
./scripts/build/electron-sign-exe-win32.sh -f $@ \
@ -327,10 +394,13 @@ TARGETS = \
sanity-checks \
clean \
distclean \
package \
package-electron \
package-cli \
cli-develop \
electron-develop
package: $(BUILD_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH)
package-electron: $(BUILD_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH)
package-cli: $(BUILD_DIRECTORY)/$(APPLICATION_NAME)-cli-$(APPLICATION_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH)
ifeq ($(TARGET_PLATFORM),darwin)
electron-installer-app-zip: $(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH).zip
@ -401,7 +471,7 @@ endif
.PHONY: $(TARGETS)
electron-develop:
# Note that we need to remove `node_modules` every time.
# Since we use an `npm-shrinkwrap.json` file, if you pull changes
# that update a dependency and try to `npm install` directly, npm
# will complain that your `node_modules` tree is not equal to what
@ -410,6 +480,16 @@ electron-develop:
# The `node_modules` directory also needs to be wiped out if you're
# changing between target architectures, since compiled add-ons
# will not work otherwise.
cli-develop:
rm -rf node_modules
./scripts/build/dependencies-npm.sh \
-r "$(TARGET_ARCH)" \
-v "$(ELECTRON_VERSION)" \
-t node \
-s "$(TARGET_PLATFORM)"
electron-develop:
rm -rf node_modules
./scripts/build/dependencies-npm.sh \
-r "$(TARGET_ARCH)" \

View File

@ -0,0 +1,49 @@
#!/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
function usage() {
echo "Usage: $0"
echo ""
echo "Options"
echo ""
echo " -e <entry point (.js)>"
echo " -o <output>"
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"

View File

@ -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 <node_modules directory>"
echo " -o <output directory>"
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"

View File

@ -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 <file (.exe)>"
echo " -n <application name>"
echo " -d <application description>"
echo " -v <application version>"
echo " -c <application copyright>"
echo " -m <company name>"
echo " -i <application icon (.ico)>"
echo " -w <download directory>"
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"

View File

@ -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 <file (.exe)>"
echo " -n <application name>"
echo " -d <application description>"
echo " -v <application version>"
echo " -c <application copyright>"
echo " -m <company name>"
echo " -i <application icon (.ico)>"
echo " -w <download directory>"
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"

View File

@ -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"

View File

@ -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 \

View File

@ -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 <file>"
echo " -i <identity>"
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"

View File

@ -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 <file>"
echo " -i <identity>"
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"

View File

@ -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 <application name>"
echo " -e <application entry point (.js)>"
echo " -l <node_modules directory>"
echo " -r <architecture>"
echo " -s <operating system (linux|darwin|win32)>"
echo " -o <output directory>"
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"

View File

@ -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 <architecture>"
echo " -v <version>"
echo " -s <operating system>"
echo " -o <output directory>"
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"

View File

@ -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 <application name>"
echo " -e <application entry point (.js)>"
echo " -r <architecture>"
echo " -s <operating system (linux|darwin)>"
echo " -o <output directory>"
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"