chore: add support for snapshot builds (#968)

This commit introduces a `RELEASE_TYPE` option to the Makefile, which
can be either `production` or `snapshot`. If its `production`, the
behaviour its same as it was before.

If `RELEASE_TYPE` is `snapshot`, the shorter version of the current
commit hash is appended to the version (replacing the
`APPLICATION_VERSION` in the Makefile, as well as the `package.json`
version inside the `.asar`), and the publish scripts get configured to
deploy to different "snapshot" locations.

This commit also reduces the size of the version tag in the bottom right
corner a bit so that it fits when the commit hash is appended to it.

Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
This commit is contained in:
Juan Cruz Viotti 2017-01-10 21:37:54 -04:00 committed by GitHub
parent 0b0b097620
commit 2c64f0da23
8 changed files with 153 additions and 55 deletions

View File

@ -22,12 +22,25 @@ ELECTRON_VERSION = $(shell jq -r '.devDependencies["electron-prebuilt"]' package
COMPANY_NAME = $(shell jq -r '.companyName' package.json)
APPLICATION_NAME = $(shell jq -r '.displayName' package.json)
APPLICATION_DESCRIPTION = $(shell jq -r '.description' package.json)
APPLICATION_VERSION = $(shell jq -r '.version' package.json)
APPLICATION_COPYRIGHT = $(shell jq -r '.copyright' package.json)
APPLICATION_CATEGORY = public.app-category.developer-tools
APPLICATION_BUNDLE_ID = io.resin.etcher
APPLICATION_FILES = lib,assets
# Add the current commit to the version if release type is "snapshot"
RELEASE_TYPE ?= snapshot
PACKAGE_JSON_VERSION = $(shell jq -r '.version' package.json)
ifeq ($(RELEASE_TYPE),production)
APPLICATION_VERSION = $(PACKAGE_JSON_VERSION)
endif
ifeq ($(RELEASE_TYPE),snapshot)
CURRENT_COMMIT_HASH = $(shell git log -1 --format="%h")
APPLICATION_VERSION = $(PACKAGE_JSON_VERSION)+$(CURRENT_COMMIT_HASH)
endif
ifndef APPLICATION_VERSION
$(error Invalid release type: $(RELEASE_TYPE))
endif
# ---------------------------------------------------------------------
# Operating system and architecture detection
# ---------------------------------------------------------------------
@ -127,6 +140,13 @@ ifeq ($(TARGET_ARCH),x64)
TARGET_ARCH_DEBIAN = amd64
endif
ifeq ($(RELEASE_TYPE),production)
PRODUCT_NAME = etcher
endif
ifeq ($(RELEASE_TYPE),snapshot)
PRODUCT_NAME = etcher-snapshots
endif
APPLICATION_NAME_LOWERCASE = $(shell echo $(APPLICATION_NAME) | tr A-Z a-z)
APPLICATION_VERSION_DEBIAN = $(shell echo $(APPLICATION_VERSION) | tr "-" "~")
@ -166,15 +186,17 @@ $(BUILD_DIRECTORY)/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-dependencies/bower
| $(BUILD_DIRECTORY)/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-dependencies
./scripts/build/dependencies-bower.sh -p -x $|
$(BUILD_DIRECTORY)/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-app: \
$(BUILD_DIRECTORY)/electron-$(TARGET_PLATFORM)-$(APPLICATION_VERSION)-$(TARGET_ARCH)-app: \
$(BUILD_DIRECTORY)/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-dependencies/node_modules \
$(BUILD_DIRECTORY)/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-dependencies/bower_components \
| $(BUILD_DIRECTORY)
./scripts/build/electron-create-resources-app.sh -s . -f "$(APPLICATION_FILES)" -o $@
./scripts/build/electron-create-resources-app.sh -s . -o $@ \
-v $(APPLICATION_VERSION) \
-f "$(APPLICATION_FILES)"
$(foreach prerequisite,$^,$(call execute-command,cp -rf $(prerequisite) $@))
$(BUILD_DIRECTORY)/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-app.asar: \
$(BUILD_DIRECTORY)/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-app \
$(BUILD_DIRECTORY)/electron-$(TARGET_PLATFORM)-$(APPLICATION_VERSION)-$(TARGET_ARCH)-app.asar: \
$(BUILD_DIRECTORY)/electron-$(TARGET_PLATFORM)-$(APPLICATION_VERSION)-$(TARGET_ARCH)-app \
| $(BUILD_DIRECTORY)
./scripts/build/electron-create-asar.sh -d $< -o $@
@ -186,8 +208,8 @@ $(BUILD_DIRECTORY)/electron-$(ELECTRON_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH
-s "$(TARGET_PLATFORM)" \
-o $@
$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-$(TARGET_PLATFORM)-$(TARGET_ARCH): \
$(BUILD_DIRECTORY)/electron-$(TARGET_PLATFORM)-$(TARGET_ARCH)-app.asar \
$(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 \
| $(BUILD_DIRECTORY)
ifeq ($(TARGET_PLATFORM),darwin)
@ -228,8 +250,8 @@ endif
endif
endif
$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-$(TARGET_PLATFORM)-$(TARGET_ARCH)-rw.dmg: \
$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-darwin-$(TARGET_ARCH) \
$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH)-rw.dmg: \
$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-darwin-$(TARGET_ARCH) \
| $(BUILD_DIRECTORY)
./scripts/build/electron-create-readwrite-dmg-darwin.sh -p $< -o $@ \
-n "$(APPLICATION_NAME)" \
@ -237,7 +259,7 @@ $(BUILD_DIRECTORY)/$(APPLICATION_NAME)-$(TARGET_PLATFORM)-$(TARGET_ARCH)-rw.dmg:
-b assets/osx/installer.png
$(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-darwin-$(TARGET_ARCH).zip: \
$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-darwin-$(TARGET_ARCH) \
$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-darwin-$(TARGET_ARCH) \
| $(BUILD_OUTPUT_DIRECTORY)
ifdef CODE_SIGN_IDENTITY
./scripts/build/electron-sign-app-darwin.sh -a $</$(APPLICATION_NAME).app -i "$(CODE_SIGN_IDENTITY)"
@ -245,7 +267,7 @@ endif
./scripts/build/electron-installer-app-zip-darwin.sh -a $</$(APPLICATION_NAME).app -o $@
$(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-darwin-$(TARGET_ARCH).dmg: \
$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-$(TARGET_PLATFORM)-$(TARGET_ARCH)-rw.dmg \
$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH)-rw.dmg \
| $(BUILD_OUTPUT_DIRECTORY)
ifdef CODE_SIGN_IDENTITY
./scripts/build/electron-sign-dmg-darwin.sh \
@ -255,8 +277,8 @@ ifdef CODE_SIGN_IDENTITY
endif
./scripts/build/electron-create-readonly-dmg-darwin.sh -d $< -o $@
$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-linux-$(TARGET_ARCH).AppDir: \
$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-linux-$(TARGET_ARCH) \
$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-linux-$(TARGET_ARCH).AppDir: \
$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-linux-$(TARGET_ARCH) \
| $(BUILD_DIRECTORY)
./scripts/build/electron-create-appdir.sh -p $< -o $@ \
-n "$(APPLICATION_NAME)" \
@ -265,20 +287,20 @@ $(BUILD_DIRECTORY)/$(APPLICATION_NAME)-linux-$(TARGET_ARCH).AppDir: \
-b "$(APPLICATION_NAME_LOWERCASE)" \
-i assets/icon.png
$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-linux-$(TARGET_ARCH).AppImage: \
$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-linux-$(TARGET_ARCH).AppDir \
$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-linux-$(TARGET_ARCH).AppImage: \
$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-linux-$(TARGET_ARCH).AppDir \
| $(BUILD_DIRECTORY) $(BUILD_TEMPORARY_DIRECTORY)
./scripts/build/electron-create-appimage-linux.sh -d $< -o $@ \
-r "$(TARGET_ARCH)" \
-w "$(BUILD_TEMPORARY_DIRECTORY)"
$(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-linux-$(TARGET_ARCH).zip: \
$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-linux-$(TARGET_ARCH).AppImage \
$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-linux-$(TARGET_ARCH).AppImage \
| $(BUILD_OUTPUT_DIRECTORY)
./scripts/build/electron-installer-appimage-zip.sh -i $< -o $@
$(BUILD_OUTPUT_DIRECTORY)/$(APPLICATION_NAME_LOWERCASE)-electron_$(APPLICATION_VERSION_DEBIAN)_$(TARGET_ARCH_DEBIAN).deb: \
$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-linux-$(TARGET_ARCH) \
$(BUILD_DIRECTORY)/$(APPLICATION_NAME)-$(APPLICATION_VERSION)-linux-$(TARGET_ARCH) \
| $(BUILD_OUTPUT_DIRECTORY)
./scripts/build/electron-installer-debian-linux.sh -p $< -r "$(TARGET_ARCH)" -o $| \
-c scripts/build/debian/config.json
@ -319,14 +341,23 @@ endif
ifdef PUBLISH_AWS_S3
publish-aws-s3: $(PUBLISH_AWS_S3)
$(foreach publishable,$^,$(call execute-command,./scripts/publish/aws-s3.sh $(publishable)))
$(foreach publishable,$^,$(call execute-command,./scripts/publish/aws-s3.sh \
-f $(publishable) \
-b $(S3_BUCKET) \
-v $(APPLICATION_VERSION) \
-p $(PRODUCT_NAME)))
TARGETS += publish-aws-s3
endif
ifdef PUBLISH_BINTRAY_DEBIAN
publish-bintray-debian: $(PUBLISH_BINTRAY_DEBIAN)
$(foreach publishable,$^,$(call execute-command,./scripts/publish/bintray-debian.sh $(publishable)))
$(foreach publishable,$^,$(call execute-command,./scripts/publish/bintray-debian.sh \
-f $(publishable) \
-v $(APPLICATION_VERSION_DEBIAN) \
-r $(TARGET_ARCH_DEBIAN) \
-c $(APPLICATION_NAME_LOWERCASE) \
-t $(RELEASE_TYPE)))
TARGETS += publish-bintray-debian
endif
@ -354,10 +385,12 @@ help:
@echo "Available targets: $(TARGETS)"
info:
@echo "Host platform : $(HOST_PLATFORM)"
@echo "Host arch : $(HOST_ARCH)"
@echo "Target platform : $(TARGET_PLATFORM)"
@echo "Target arch : $(TARGET_ARCH)"
@echo "Application version : $(APPLICATION_VERSION)"
@echo "Release type : $(RELEASE_TYPE)"
@echo "Host platform : $(HOST_PLATFORM)"
@echo "Host arch : $(HOST_ARCH)"
@echo "Target platform : $(TARGET_PLATFORM)"
@echo "Target arch : $(TARGET_ARCH)"
clean:
rm -rf $(BUILD_DIRECTORY)

View File

@ -75,7 +75,7 @@ Make sure you set the following environment variables:
Run the following command:
```sh
make publish-bintray-debian
make publish-bintray-debian RELEASE_TYPE=<production|snapshot>
```
Publishing to S3
@ -92,14 +92,14 @@ access resin.io's production downloads S3 bucket.
Run the following command to publish a specific file:
```sh
./scripts/publish/aws-s3.sh <file>
./scripts/publish/aws-s3.sh -f <file> -b <bucket> -v <version> -t <production|snapshot>
```
Or run the following command to publish all files for the current combination
of _platform_ and _arch_ (building them if necessary) :
```sh
make publish-aws-s3
make publish-aws-s3 RELEASE_TYPE=<production|snapshot>
```
Also add links to each AWS S3 file in [GitHub Releases][github-releases]. See

View File

@ -6673,6 +6673,7 @@ body {
.section-footer .caption[os-open-external]:hover, .section-footer .page-main [os-open-external].icon-caption:hover, .page-main .section-footer [os-open-external].icon-caption:hover {
color: #85898c; }
.section-footer .footer-right {
font-size: 10px;
position: absolute;
right: 0;
top: 50%; }

View File

@ -80,6 +80,7 @@ body {
}
.footer-right {
font-size: 10px;
position: absolute;
right: 0;
top: 50%;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

After

Width:  |  Height:  |  Size: 124 KiB

View File

@ -19,24 +19,29 @@
set -u
set -e
./scripts/build/check-dependency.sh jq
function usage() {
echo "Usage: $0"
echo ""
echo "Options"
echo ""
echo " -s <source directory>"
echo " -v <application version>"
echo " -f <extra files (comma separated)>"
echo " -o <output>"
exit 1
}
ARGV_SOURCE_DIRECTORY=""
ARGV_APPLICATION_VERSION=""
ARGV_FILES=""
ARGV_OUTPUT=""
while getopts ":s:f:o:" option; do
while getopts ":s:v:f:o:" option; do
case $option in
s) ARGV_SOURCE_DIRECTORY=$OPTARG ;;
v) ARGV_APPLICATION_VERSION=$OPTARG ;;
f) ARGV_FILES=$OPTARG ;;
o) ARGV_OUTPUT=$OPTARG ;;
*) usage ;;
@ -44,6 +49,7 @@ while getopts ":s:f:o:" option; do
done
if [ -z "$ARGV_SOURCE_DIRECTORY" ] ||
[ -z "$ARGV_APPLICATION_VERSION" ] || \
[ -z "$ARGV_FILES" ] || \
[ -z "$ARGV_OUTPUT" ]; then
usage
@ -51,7 +57,7 @@ fi
mkdir -p "$ARGV_OUTPUT"
cp "$ARGV_SOURCE_DIRECTORY/package.json" "$ARGV_OUTPUT"
jq ".version = \"$ARGV_APPLICATION_VERSION\"" "$ARGV_SOURCE_DIRECTORY/package.json" > "$ARGV_OUTPUT/package.json"
for file in $(echo "$ARGV_FILES" | sed "s/,/ /g"); do
cp -rf "$file" "$ARGV_OUTPUT"

View File

@ -22,16 +22,45 @@ set -e
./scripts/build/check-dependency.sh aws
if [ "$#" -ne 1 ]; then
echo "Usage: $0 <file>" 1>&2
function usage() {
echo "Usage: $0"
echo ""
echo "Options"
echo ""
echo " -f <file>"
echo " -b <s3 bucket>"
echo " -v <version>"
echo " -p <product name>"
exit 1
}
ARGV_FILE=""
ARGV_BUCKET=""
ARGV_VERSION=""
ARGV_PRODUCT_NAME=""
while getopts ":f:b:v:p" option; do
case $option in
f) ARGV_FILE="$OPTARG" ;;
b) ARGV_BUCKET="$OPTARG" ;;
v) ARGV_VERSION="$OPTARG" ;;
p) ARGV_PRODUCT_NAME="$OPTARG" ;;
*) usage ;;
esac
done
if [ -z "$ARGV_FILE" ] || \
[ -z "$ARGV_BUCKET" ] || \
[ -z "$ARGV_VERSION" ] || \
[ -z "$ARGV_PRODUCT_NAME" ]
then
usage
fi
ETCHER_VERSION=`node -e "console.log(require('./package.json').version)"`
S3_BUCKET="resin-production-downloads"
FILENAME=$(basename "$ARGV_FILE")
aws s3api put-object \
--bucket $S3_BUCKET \
--bucket "$ARGV_BUCKET" \
--acl public-read \
--key etcher/$ETCHER_VERSION/`basename $1` \
--body $1
--key "$ARGV_PRODUCT_NAME/$ARGV_VERSION/$FILENAME" \
--body "$ARGV_FILE"

View File

@ -22,9 +22,43 @@ set -e
./scripts/build/check-dependency.sh curl
if [ "$#" -ne 1 ]; then
echo "Usage: $0 <debfile>" 1>&2
function usage() {
echo "Usage: $0"
echo ""
echo "Options"
echo ""
echo " -f <file>"
echo " -v <debian-friendly version>"
echo " -r <architecture>"
echo " -c <component name>"
echo " -t <release type (production|snapshot)>"
exit 1
}
ARGV_FILE=""
ARGV_VERSION=""
ARGV_ARCHITECTURE=""
ARGV_COMPONENT_NAME=""
ARGV_RELEASE_TYPE=""
while getopts ":f:v:r:c:t" option; do
case $option in
f) ARGV_FILE="$OPTARG" ;;
v) ARGV_VERSION="$OPTARG" ;;
r) ARGV_ARCHITECTURE="$OPTARG" ;;
c) ARGV_COMPONENT_NAME="$OPTARG" ;;
t) ARGV_RELEASE_TYPE="$OPTARG" ;;
*) usage ;;
esac
done
if [ -z "$ARGV_FILE" ] || \
[ -z "$ARGV_VERSION" ] || \
[ -z "$ARGV_ARCHITECTURE" ] || \
[ -z "$ARGV_COMPONENT_NAME" ] || \
[ -z "$ARGV_RELEASE_TYPE" ]
then
usage
fi
set +u
@ -37,30 +71,24 @@ if [ -z "$BINTRAY_USER" ] || [ -z "$BINTRAY_API_KEY" ]; then
fi
set -u
ARGV_FILE=$1
PACKAGE_COMPONENT=etcher
PACKAGE_DISTRIBUTION=stable
if [ "$ARGV_RELEASE_TYPE" == "production" ]; then
PACKAGE_DISTRIBUTION=stable
elif [ "$ARGV_RELEASE_TYPE" == "snapshot" ]; then
PACKAGE_DISTRIBUTION=devel
else
echo "Invalid release type: $ARGV_RELEASE_TYPE" 1>&2
exit 1
fi
PACKAGE_FILE_NAME=$(basename $ARGV_FILE)
PACKAGE_NAME=${PACKAGE_FILE_NAME%.*}
PACKAGE_VERSION=$(echo $PACKAGE_NAME | cut -d_ -f2 | tr "~" "-")
PACKAGE_ARCH=$(echo $PACKAGE_NAME | cut -d_ -f3)
if [ -z $PACKAGE_VERSION ]; then
echo "Couldn't infer the version from the package file name" 1>&2
exit 1
fi
if [ -z $PACKAGE_ARCH ]; then
echo "Couldn't infer the architecture from the package file name" 1>&2
exit 1
fi
curl --upload-file $ARGV_FILE \
--user $BINTRAY_USER:$BINTRAY_API_KEY \
--header "X-Bintray-Debian-Distribution: $PACKAGE_DISTRIBUTION" \
--header "X-Bintray-Debian-Component: $PACKAGE_COMPONENT" \
--header "X-Bintray-Debian-Architecture: $PACKAGE_ARCH" \
--header "X-Bintray-Debian-Component: $ARGV_COMPONENT_NAME" \
--header "X-Bintray-Debian-Architecture: $ARGV_ARCHITECTURE" \
--header "X-Bintray-Publish: 1" \
https://api.bintray.com/content/resin-io/debian/$PACKAGE_COMPONENT/$PACKAGE_VERSION/$PACKAGE_FILE_NAME
https://api.bintray.com/content/resin-io/debian/$ARGV_COMPONENT_NAME/$ARGV_VERSION/$PACKAGE_FILE_NAME
echo "$ARGV_FILE has been uploaded successfully"