0
0
mirror of https://github.com/OpenBazaar/openbazaar-desktop synced 2025-10-06 00:22:47 +02:00
Files
openbazaar-desktop/build.sh
Brian Hoffman f89b6bc978 Brew Wine
2020-12-29 16:02:58 -05:00

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