diff --git a/Makefile b/Makefile index f9198e2c..c9d33129 100644 --- a/Makefile +++ b/Makefile @@ -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 $ ``` 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 +./scripts/publish/aws-s3.sh -f -b -v -t ``` 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= ``` Also add links to each AWS S3 file in [GitHub Releases][github-releases]. See diff --git a/lib/gui/css/main.css b/lib/gui/css/main.css index 35c3438d..9bf83ad5 100644 --- a/lib/gui/css/main.css +++ b/lib/gui/css/main.css @@ -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%; } diff --git a/lib/gui/scss/main.scss b/lib/gui/scss/main.scss index 5dc335b6..807b7eb6 100644 --- a/lib/gui/scss/main.scss +++ b/lib/gui/scss/main.scss @@ -80,6 +80,7 @@ body { } .footer-right { + font-size: 10px; position: absolute; right: 0; top: 50%; diff --git a/screenshot.png b/screenshot.png index a84fdedf..0551a763 100644 Binary files a/screenshot.png and b/screenshot.png differ diff --git a/scripts/build/electron-create-resources-app.sh b/scripts/build/electron-create-resources-app.sh index 85344e3f..a736c8b2 100755 --- a/scripts/build/electron-create-resources-app.sh +++ b/scripts/build/electron-create-resources-app.sh @@ -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 " + echo " -v " echo " -f " echo " -o " 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" diff --git a/scripts/publish/aws-s3.sh b/scripts/publish/aws-s3.sh index ca149d99..4805cb44 100755 --- a/scripts/publish/aws-s3.sh +++ b/scripts/publish/aws-s3.sh @@ -22,16 +22,45 @@ set -e ./scripts/build/check-dependency.sh aws -if [ "$#" -ne 1 ]; then - echo "Usage: $0 " 1>&2 +function usage() { + echo "Usage: $0" + echo "" + echo "Options" + echo "" + echo " -f " + echo " -b " + echo " -v " + echo " -p " 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" diff --git a/scripts/publish/bintray-debian.sh b/scripts/publish/bintray-debian.sh index e8a311ff..41f218e6 100755 --- a/scripts/publish/bintray-debian.sh +++ b/scripts/publish/bintray-debian.sh @@ -22,9 +22,43 @@ set -e ./scripts/build/check-dependency.sh curl -if [ "$#" -ne 1 ]; then - echo "Usage: $0 " 1>&2 +function usage() { + echo "Usage: $0" + echo "" + echo "Options" + echo "" + echo " -f " + echo " -v " + echo " -r " + echo " -c " + echo " -t " 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"