mirror of
https://github.com/OpenBazaar/openbazaar-desktop
synced 2025-10-06 00:22:47 +02:00
355 lines
17 KiB
Bash
Executable File
355 lines
17 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
## Version 2.0.0
|
|
##
|
|
## Usage
|
|
## ./build.sh
|
|
##
|
|
## OS supported:
|
|
## win32 win64 linux32 linux64 linuxarm osx
|
|
##
|
|
|
|
|
|
ELECTRONVER=1.8.7
|
|
NODEJSVER=5.1.1
|
|
|
|
OS="${1}"
|
|
if [ -z "${2}" ]; then
|
|
SERVERTAG='latest'
|
|
else
|
|
SERVERTAG=tags/${2}
|
|
fi
|
|
echo "Building with openbazaar-go/$SERVERTAG"
|
|
|
|
# Get Version
|
|
PACKAGE_VERSION=$(node -p 'require("./package").version')
|
|
echo "OpenBazaar Version: $PACKAGE_VERSION"
|
|
|
|
# Create temp build dirs
|
|
mkdir dist/
|
|
rm -rf dist/*
|
|
mkdir OPENBAZAAR_TEMP/
|
|
rm -rf OPENBAZAAR_TEMP/*
|
|
|
|
echo 'Preparing to build installers...'
|
|
|
|
echo 'Installing npm packages...'
|
|
npm i -g npm@5.2
|
|
npm install electron-packager -g --silent
|
|
npm install npm-run-all -g --silent
|
|
npm install grunt-cli -g --silent
|
|
npm install grunt --save-dev --silent
|
|
npm install grunt-electron-installer --save-dev --silent
|
|
npm install --silent
|
|
|
|
rvm reinstall ruby
|
|
|
|
echo 'Building OpenBazaar app...'
|
|
npm run build
|
|
|
|
echo 'Copying transpiled files into js folder...'
|
|
cp -rf prod/* js/
|
|
|
|
echo "We are building: ${BINARY}"
|
|
|
|
case "$TRAVIS_OS_NAME" in
|
|
"linux")
|
|
|
|
echo 'Linux builds'
|
|
echo 'Making dist directories'
|
|
mkdir dist/linux64
|
|
|
|
sudo apt-get install rpm
|
|
|
|
echo 'Install npm packages for Linux'
|
|
npm install -g --save-dev electron-installer-debian --silent
|
|
npm install -g --save-dev electron-installer-redhat@2.0.0 --silent
|
|
|
|
# Install libgconf2-4
|
|
sudo apt-get install libgconf2-4 libgconf-2-4
|
|
|
|
# Install rpmbuild
|
|
sudo apt-get --only-upgrade install rpm
|
|
|
|
# Ensure fakeroot is installed
|
|
sudo apt-get install fakeroot
|
|
|
|
# Retrieve Latest Server Binaries
|
|
sudo apt-get install jq
|
|
cd OPENBAZAAR_TEMP/
|
|
curl -u $GITHUB_USER:$GITHUB_TOKEN -s https://api.github.com/repos/OpenBazaar/openbazaar-go/releases/$SERVERTAG > release.txt
|
|
cat release.txt | jq -r ".assets[].browser_download_url" | xargs -n 1 curl -L -O
|
|
cd ..
|
|
|
|
APPNAME="openbazaar2"
|
|
|
|
echo 'Building Linux 64-bit Installer....'
|
|
|
|
echo "Packaging Electron application"
|
|
electron-packager . ${APPNAME} --platform=linux --arch=x64 --electronVersion=${ELECTRONVER} --overwrite --ignore="OPENBAZAAR_TEMP" --prune --out=dist
|
|
|
|
echo 'Move go server to electron app'
|
|
mkdir dist/${APPNAME}-linux-x64/resources/openbazaar-go/
|
|
cp -rf OPENBAZAAR_TEMP/openbazaar-go-linux-amd64 dist/${APPNAME}-linux-x64/resources/openbazaar-go
|
|
rm -rf OPENBAZAAR_TEMP/*
|
|
mv dist/${APPNAME}-linux-x64/resources/openbazaar-go/openbazaar-go-linux-amd64 dist/${APPNAME}-linux-x64/resources/openbazaar-go/openbazaard
|
|
rm -rf dist/${APPNAME}-linux-x64/resources/app/.travis
|
|
chmod +x dist/${APPNAME}-linux-x64/resources/openbazaar-go/openbazaard
|
|
|
|
echo 'Create debian archive'
|
|
electron-installer-debian --config .travis/config_amd64.json
|
|
|
|
echo 'Create RPM archive'
|
|
electron-installer-redhat --config .travis/config_x86_64.json
|
|
|
|
APPNAME="openbazaar2client"
|
|
|
|
echo 'Building Linux 64-bit Installer....'
|
|
|
|
echo "Packaging Electron application"
|
|
electron-packager . ${APPNAME} --platform=linux --arch=x64 --ignore="OPENBAZAAR_TEMP" --electronVersion=${ELECTRONVER} --overwrite --prune --out=dist
|
|
|
|
echo 'Create debian archive'
|
|
electron-installer-debian --config .travis/config_amd64.client.json
|
|
|
|
echo 'Create RPM archive'
|
|
electron-installer-redhat --config .travis/config_x86_64.client.json
|
|
|
|
;;
|
|
|
|
"osx")
|
|
|
|
brew update
|
|
brew remove jq
|
|
brew link oniguruma
|
|
brew install jq
|
|
brew link --overwrite fontconfig gd gnutls jasper libgphoto2 libicns libtasn1 libusb libusb-compat little-cms2 nettle openssl sane-backends webp wine git-lfs gnu-tar dpkg xz
|
|
brew install freetype graphicsmagick
|
|
brew link xz
|
|
brew remove openssl
|
|
brew install openssl
|
|
brew link freetype graphicsmagick mono
|
|
|
|
# Retrieve Latest Server Binaries
|
|
cd OPENBAZAAR_TEMP/
|
|
curl -u $GITHUB_USER:$GITHUB_TOKEN -s https://api.github.com/repos/OpenBazaar/openbazaar-go/releases/$SERVERTAG > release.txt
|
|
cat release.txt | jq -r ".assets[].browser_download_url" | xargs -n 1 curl -L -O
|
|
cd ..
|
|
|
|
if [[ $BINARY == 'win' ]]; then
|
|
|
|
brew link --overwrite fontconfig gd gnutls jasper libgphoto2 libicns libtasn1 libusb libusb-compat little-cms2 nettle openssl sane-backends webp wine git-lfs gnu-tar dpkg xz
|
|
brew link libgsf glib pcre
|
|
brew remove osslsigncode
|
|
brew install mono osslsigncode
|
|
brew reinstall openssl@1.1
|
|
|
|
brew install homebrew/cask-versions/wine-devel
|
|
|
|
# WINDOWS 64
|
|
echo 'Building Windows 64-bit Installer...'
|
|
mkdir dist/win64
|
|
|
|
export WINEARCH=win64
|
|
|
|
npm i electron-packager
|
|
|
|
cd node_modules/electron-packager
|
|
npm install rcedit
|
|
cd ../..
|
|
|
|
echo 'Running Electron Packager...'
|
|
node_modules/electron-packager/bin/electron-packager.js . OpenBazaar2 --asar --out=dist --protocol-name=OpenBazaar --ignore="OPENBAZAAR_TEMP" --win32metadata.ProductName="OpenBazaar2" --win32metadata.CompanyName="OpenBazaar" --win32metadata.FileDescription='Decentralized p2p marketplace for Bitcoin' --win32metadata.OriginalFilename=OpenBazaar2.exe --protocol=ob --platform=win32 --arch=x64 --icon=imgs/openbazaar2.ico --electron-version=${ELECTRONVER} --overwrite
|
|
|
|
echo 'Copying server binary into application folder...'
|
|
cp -rf OPENBAZAAR_TEMP/openbazaar-go-windows-4.0-amd64.exe dist/OpenBazaar2-win32-x64/resources/
|
|
cp -rf OPENBAZAAR_TEMP/libwinpthread-1.win64.dll dist/OpenBazaar2-win32-x64/resources/libwinpthread-1.dll
|
|
mkdir dist/OpenBazaar2-win32-x64/resources/openbazaar-go
|
|
mv dist/OpenBazaar2-win32-x64/resources/openbazaar-go-windows-4.0-amd64.exe dist/OpenBazaar2-win32-x64/resources/openbazaar-go/openbazaard.exe
|
|
mv dist/OpenBazaar2-win32-x64/resources/libwinpthread-1.dll dist/OpenBazaar2-win32-x64/resources/openbazaar-go/libwinpthread-1.dll
|
|
|
|
echo 'Building Installer...'
|
|
grunt -v create-windows-installer --appname=OpenBazaar2 --obversion=$PACKAGE_VERSION --appdir=dist/OpenBazaar2-win32-x64 --outdir=dist/win64
|
|
mv dist/win64/OpenBazaar2Setup.exe dist/win64/OpenBazaar2-$PACKAGE_VERSION-Setup-64.exe
|
|
mv dist/win64/RELEASES dist/win64/RELEASES-x64
|
|
|
|
#### CLIENT ONLY
|
|
echo 'Running Electron Packager...'
|
|
electron-packager . OpenBazaar2Client --asar --out=dist --protocol-name=OpenBazaar --ignore="OPENBAZAAR_TEMP" --win32metadata.ProductName="OpenBazaar2Client" --win32metadata.CompanyName="OpenBazaar" --win32metadata.FileDescription='Decentralized p2p marketplace for Bitcoin' --win32metadata.OriginalFilename=OpenBazaar2Client.exe --protocol=ob --platform=win32 --arch=x64 --icon=imgs/openbazaar2.ico --electron-version=${ELECTRONVER} --overwrite
|
|
|
|
echo 'Building Installer...'
|
|
grunt -v create-windows-installer --appname=OpenBazaar2Client --obversion=$PACKAGE_VERSION --appdir=dist/OpenBazaar2Client-win32-x64 --outdir=dist/win64
|
|
mv dist/win64/OpenBazaar2ClientSetup.exe dist/win64/OpenBazaar2Client-$PACKAGE_VERSION-Setup-64.exe
|
|
|
|
echo 'Sign the installer'
|
|
osslsigncode sign -t http://timestamp.digicert.com -h sha1 -key .travis/ob1.pvk -pass "$OB1_SECRET" -certs .travis/ob1.spc -in dist/win64/OpenBazaar2-$PACKAGE_VERSION-Setup-64.exe -out dist/win64/OpenBazaar2-$PACKAGE_VERSION-Setup-64.exe
|
|
osslsigncode sign -t http://timestamp.digicert.com -h sha1 -key .travis/ob1.pvk -pass "$OB1_SECRET" -certs .travis/ob1.spc -in dist/win64/OpenBazaar2Client-$PACKAGE_VERSION-Setup-64.exe -out dist/win64/OpenBazaar2Client-$PACKAGE_VERSION-Setup-64.exe
|
|
|
|
mv dist/win64/RELEASES-x64 dist/win64/RELEASES
|
|
|
|
else
|
|
|
|
# OSX
|
|
echo 'Building OSX Installer'
|
|
mkdir dist/osx
|
|
|
|
# Install the DMG packager
|
|
echo 'Installing electron-installer-dmg'
|
|
npm install -g electron-installer-dmg
|
|
|
|
# Sign openbazaar-go binary
|
|
echo 'Signing Go binary'
|
|
mv OPENBAZAAR_TEMP/openbazaar-go-darwin-10.6-amd64 dist/osx/openbazaard
|
|
rm -rf OPENBAZAAR_TEMP/*
|
|
codesign --force --sign "$SIGNING_IDENTITY2" --timestamp --options runtime dist/osx/openbazaard
|
|
|
|
# Notarize the zip files
|
|
UPLOAD_INFO_PLIST="uploadinfo.plist"
|
|
REQUEST_INFO_PLIST="request.plist"
|
|
touch ${UPLOAD_INFO_PLIST}
|
|
|
|
wait_for_notarization() {
|
|
while true; do \
|
|
|
|
echo "Checking Apple for notarization status..."; \
|
|
/usr/bin/xcrun altool --notarization-info `/usr/libexec/PlistBuddy -c "Print :notarization-upload:RequestUUID" $UPLOAD_INFO_PLIST` -u $APPLE_ID -p $APPLE_PASS --output-format xml > "$REQUEST_INFO_PLIST" ;\
|
|
|
|
cat $REQUEST_INFO_PLIST
|
|
|
|
if [[ `/usr/libexec/PlistBuddy -c "Print :notarization-info:Status" ${REQUEST_INFO_PLIST}` != "in progress" ]] || [[ "$requestUUID" == "" ]] ; then \
|
|
|
|
# check if it has been uploaded already and get the RequestUUID from the error message
|
|
echo "Checking if binary has already been uploaded..."; \
|
|
message=`/usr/libexec/PlistBuddy -c "Print :product-errors:0:message" $UPLOAD_INFO_PLIST`;\
|
|
if [[ ${message} =~ ^ERROR\ ITMS-90732* ]]; then \
|
|
prefix="ERROR ITMS-90732: \"The software asset has already been uploaded. The upload ID is "; \
|
|
suffix="\" at SoftwareAssets\/EnigmaSoftwareAsset"; \
|
|
requestUUID=`echo "${message}" | sed -e "s/^$prefix//" -e "s/$suffix$//"`; \
|
|
|
|
echo "Binary has already been uploaded. Checking Apple status for request ${requestUUID}..."; \
|
|
/usr/bin/xcrun altool --notarization-info ${requestUUID} -u $APPLE_ID -p $APPLE_PASS --output-format xml > "$REQUEST_INFO_PLIST" ;\
|
|
fi ;\
|
|
|
|
if [[ `/usr/libexec/PlistBuddy -c "Print :notarization-info:Status" ${REQUEST_INFO_PLIST}` == "success" ]]; then \
|
|
echo "Binary has been notarized"; \
|
|
break; \
|
|
fi; \
|
|
fi ;\
|
|
echo "Waiting 30 seconds to check status again..."; \
|
|
sleep 30 ;\
|
|
done
|
|
}
|
|
|
|
extract_app() {
|
|
|
|
# use process redirection to capture the mount point and dev entry
|
|
IFS=$'\n' read -rd '\n' mount_point dev_entry < <(
|
|
# mount the diskimage; leave out -readonly if making changes to the filesystem
|
|
hdiutil attach -readonly -plist "$1" | \
|
|
|
|
# convert output plist to json
|
|
plutil -convert json - -o - | \
|
|
|
|
# extract mount point and dev entry
|
|
jq -r '
|
|
.[] | .[] |
|
|
select(."volume-kind" == "hfs") |
|
|
."mount-point" + "\n" + ."dev-entry"
|
|
'
|
|
)
|
|
|
|
# work with the zip file
|
|
cp -rf "${mount_point}/${2}.app" dist/osx
|
|
|
|
# unmount the disk image
|
|
hdiutil detach "$dev_entry"
|
|
|
|
}
|
|
|
|
if [[ ${BINARY} == 'osx' ]]; then
|
|
|
|
echo 'Running Electron Packager...'
|
|
electron-packager . OpenBazaar2 --out=dist -app-category-type=public.app-category.business --protocol-name=OpenBazaar --ignore="OPENBAZAAR_TEMP" --protocol=ob --platform=darwin --arch=x64 --icon=imgs/openbazaar2.icns --electron-version=${ELECTRONVER} --overwrite --app-version=$PACKAGE_VERSION
|
|
|
|
echo 'Creating openbazaar-go folder in the OS X .app'
|
|
mkdir dist/OpenBazaar2-darwin-x64/OpenBazaar2.app/Contents/Resources/openbazaar-go
|
|
|
|
echo 'Moving binary to correct folder'
|
|
mv dist/osx/openbazaard dist/OpenBazaar2-darwin-x64/OpenBazaar2.app/Contents/Resources/openbazaar-go/openbazaard
|
|
chmod +x dist/OpenBazaar2-darwin-x64/OpenBazaar2.app/Contents/Resources/openbazaar-go/openbazaard
|
|
|
|
echo 'Codesign the .app'
|
|
codesign -s "$SIGNING_IDENTITY2" dist/OpenBazaar2-darwin-x64/OpenBazaar2.app/Contents/Frameworks/Electron\ Framework.framework/Versions/A/Libraries/libffmpeg.dylib
|
|
codesign -s "$SIGNING_IDENTITY2" dist/OpenBazaar2-darwin-x64/OpenBazaar2.app/Contents/Frameworks/Electron\ Framework.framework/Versions/A/Libraries/libnode.dylib
|
|
codesign --force --options runtime --deep --sign "$SIGNING_IDENTITY2" "dist/OpenBazaar2-darwin-x64/OpenBazaar2.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/crashpad_handler"
|
|
codesign --force --options runtime --deep --sign "$SIGNING_IDENTITY2" "dist/OpenBazaar2-darwin-x64/OpenBazaar2.app/Contents/Frameworks/Squirrel.framework/Versions/A/Resources/ShipIt"
|
|
|
|
codesign --force --deep --sign "$SIGNING_IDENTITY2" --timestamp --options runtime --entitlements openbazaar.entitlements dist/OpenBazaar2-darwin-x64/OpenBazaar2.app
|
|
electron-installer-dmg dist/OpenBazaar2-darwin-x64/OpenBazaar2.app OpenBazaar2-$PACKAGE_VERSION --icon ./imgs/openbazaar2.icns --out=dist/OpenBazaar2-darwin-x64 --overwrite --background=./imgs/osx-finder_background.png --debug
|
|
|
|
echo 'Codesign the DMG and zip'
|
|
codesign --force --sign "$SIGNING_IDENTITY2" --timestamp --options runtime --entitlements openbazaar.entitlements dist/OpenBazaar2-darwin-x64/OpenBazaar2-$PACKAGE_VERSION.dmg
|
|
cd dist/OpenBazaar2-darwin-x64/
|
|
zip -q -r OpenBazaar2-mac-$PACKAGE_VERSION.zip OpenBazaar2.app
|
|
cp -r OpenBazaar2.app ../osx/
|
|
cp OpenBazaar2-mac-$PACKAGE_VERSION.zip ../osx/
|
|
cp OpenBazaar2-$PACKAGE_VERSION.dmg ../osx/
|
|
|
|
cd ../..
|
|
|
|
zip -q -r dist/osx/OpenBazaar2.zip dist/OpenBazaar2-darwin-x64/OpenBazaar2-$PACKAGE_VERSION.dmg
|
|
|
|
# Upload to apple and notarize
|
|
echo "Uploading binary to Apple Notarization server for package ${PACKAGE_VERSION}..."
|
|
xcrun altool --notarize-app --primary-bundle-id "org.openbazaar.desktop-${PACKAGE_VERSION}" --username "$APPLE_ID" --password "$APPLE_PASS" --file dist/osx/OpenBazaar2.zip --output-format xml > ${UPLOAD_INFO_PLIST}
|
|
wait_for_notarization
|
|
|
|
echo "Stapling ticket to the DMG..."
|
|
xcrun stapler staple dist/osx/OpenBazaar2-$PACKAGE_VERSION.dmg
|
|
|
|
extract_app "dist/osx/OpenBazaar2-$PACKAGE_VERSION.dmg" "OpenBazaar2"
|
|
|
|
zip -q -r dist/osx/OpenBazaar2-mac-$PACKAGE_VERSION.zip dist/osx/OpenBazaar2.app
|
|
|
|
else
|
|
|
|
# Client Only
|
|
electron-packager . OpenBazaar2Client --out=dist -app-category-type=public.app-category.business --protocol-name=OpenBazaar --ignore="OPENBAZAAR_TEMP" --protocol=ob --platform=darwin --arch=x64 --icon=imgs/openbazaar2.icns --electron-version=${ELECTRONVER} --overwrite --app-version=$PACKAGE_VERSION
|
|
|
|
codesign -s "$SIGNING_IDENTITY2" dist/OpenBazaar2Client-darwin-x64/OpenBazaar2Client.app/Contents/Frameworks/Electron\ Framework.framework/Versions/A/Libraries/libffmpeg.dylib
|
|
codesign -s "$SIGNING_IDENTITY2" dist/OpenBazaar2Client-darwin-x64/OpenBazaar2Client.app/Contents/Frameworks/Electron\ Framework.framework/Versions/A/Libraries/libnode.dylib
|
|
codesign --force --options runtime --deep --sign "$SIGNING_IDENTITY2" "dist/OpenBazaar2Client-darwin-x64/OpenBazaar2Client.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/crashpad_handler"
|
|
codesign --force --options runtime --deep --sign "$SIGNING_IDENTITY2" "dist/OpenBazaar2Client-darwin-x64/OpenBazaar2Client.app/Contents/Frameworks/Squirrel.framework/Versions/A/Resources/ShipIt"
|
|
|
|
codesign --force --deep --sign "$SIGNING_IDENTITY2" --timestamp --options runtime --entitlements openbazaar.entitlements dist/OpenBazaar2Client-darwin-x64/OpenBazaar2Client.app
|
|
electron-installer-dmg dist/OpenBazaar2Client-darwin-x64/OpenBazaar2Client.app OpenBazaar2Client-$PACKAGE_VERSION --icon ./imgs/openbazaar2.icns --out=dist/OpenBazaar2Client-darwin-x64 --overwrite --background=./imgs/osx-finder_background.png --debug
|
|
|
|
# Client Only
|
|
codesign --force --sign "$SIGNING_IDENTITY2" --timestamp --options runtime --entitlements openbazaar.entitlements dist/OpenBazaar2Client-darwin-x64/OpenBazaar2Client-$PACKAGE_VERSION.dmg
|
|
cd dist/OpenBazaar2Client-darwin-x64/
|
|
zip -q -r OpenBazaar2Client-mac-$PACKAGE_VERSION.zip OpenBazaar2Client.app
|
|
cp -r OpenBazaar2Client.app ../osx/
|
|
cp OpenBazaar2Client-mac-$PACKAGE_VERSION.zip ../osx/
|
|
cp OpenBazaar2Client-$PACKAGE_VERSION.dmg ../osx/
|
|
|
|
cd ../..
|
|
|
|
zip -q -r dist/osx/OpenBazaar2Client.zip dist/OpenBazaar2Client-darwin-x64/OpenBazaar2Client-$PACKAGE_VERSION.dmg
|
|
|
|
echo "Uploading client only binary to Apple Notarization server..."
|
|
xcrun altool --notarize-app --primary-bundle-id "org.openbazaar.desktopclient-$PACKAGE_VERSION" --username "$APPLE_ID" --password "$APPLE_PASS" --file dist/osx/OpenBazaar2Client.zip --output-format xml > $UPLOAD_INFO_PLIST
|
|
wait_for_notarization
|
|
|
|
echo "Stapling ticket to the DMG..."
|
|
xcrun stapler staple dist/osx/OpenBazaar2Client-$PACKAGE_VERSION.dmg
|
|
|
|
extract_app "dist/osx/OpenBazaar2Client-$PACKAGE_VERSION.dmg" "OpenBazaar2Client"
|
|
|
|
zip -q -r dist/osx/OpenBazaar2Client-mac-$PACKAGE_VERSION.zip dist/osx/OpenBazaar2Client.app
|
|
fi
|
|
|
|
fi
|
|
|
|
;;
|
|
esac
|