summaryrefslogtreecommitdiff
path: root/bin/build-distribution-archives
diff options
context:
space:
mode:
Diffstat (limited to 'bin/build-distribution-archives')
-rwxr-xr-xbin/build-distribution-archives159
1 files changed, 140 insertions, 19 deletions
diff --git a/bin/build-distribution-archives b/bin/build-distribution-archives
index 6402122b..c7973022 100755
--- a/bin/build-distribution-archives
+++ b/bin/build-distribution-archives
@@ -1,34 +1,155 @@
-#!/bin/bash
-
VERSION="$(echo ${GITHUB_REF} | sed -e 's|refs/heads/||' -e 's|refs/tags/||' -e 's|/|-|g')"
OS="${BUILD:-$(uname)}"
ARCH="$(uname -m)"
+mkdir artifacts
if [ "$BUILD" = "osx" ]; then
- cp -a images/examples palettes symbols fonts LICENSE VERSION dist/inkstitch.app/Contents
- cp -a icons locales print dist/inkstitch.app/Contents/MacOS
- cp -a electron/build/mac dist/inkstitch.app/Contents/electron
+ cp -a icons locales print LICENSE VERSION images/examples palettes symbols fonts inx dist/inkstitch.app/Contents/Resources
+ # adding version to Info.plist
+ sed -i '' 's/0.0.0/'${VERSION}'/' dist/inkstitch.app/Contents/Info.plist
rm -rf dist/inkstitch/
+ # Install location for pkgbuild
+ PKG_INSTALL_PATH="/tmp/inkstitch/"
+ # Checking arch of macos and setting path of electron for arm64 or intel
+ echo "Checking for macOS arch."
+ if [ "${ARCH}" = "arm64" ]; then
+ ELECTRON_BUILD_PATH="electron/build/mac-arm64"
+ echo "found arm64"
+ else
+ ELECTRON_BUILD_PATH="electron/build/mac"
+ echo "found intel"
+ fi
+ # inside the scripts folder are:
+ # - preinstaller (checks for previously installed inkstitch and deletes it, Inkscape check with error message) and
+ # - postinstaller (moves inkstitch folder from /tmp to user Inkscape extensions folder in $HOME)
+ # The postinstaller is a workaround for a proper way to install in user $HOME space
+
+ # Build on GitHub will be handled differently from local builds.
+ # Local builds will not be signed nor notarized. They are run to produce releases for legacy versions of macOS.
+ # Notarization for development branches can be forced with this variable set to true
+ NOTARIZE_DEVELOPMENT_BUILDS=false
+
+ if [[ ! -z "${GITHUB_REF}" ]]; then
+ # This code signs and notarize the inkstitch.app
+ DEV_IDENT="Developer ID Application: Lex Neva (929A568N58)"
+ echo "Signing of inkstitch.app"
+ # Coyping inkstitch-gui.app into inkstitch
+ ditto "${ELECTRON_BUILD_PATH}" dist/inkstitch.app/Contents/MacOS/electron
+ # signing the binary may fix notary issue
+ /usr/bin/codesign -s "${DEV_IDENT}" \
+ --deep \
+ --force \
+ --entitlements installer_scripts/entitlements.plist \
+ -o runtime \
+ --timestamp \
+ dist/inkstitch.app/Contents/MacOS/inkstitch -v
+ # last signing before packaging
+ /usr/bin/codesign -s "${DEV_IDENT}" \
+ --deep \
+ --force \
+ --entitlements installer_scripts/entitlements.plist \
+ -o runtime \
+ --timestamp \
+ dist/inkstitch.app -v
+ echo "Running pkgbuild"
+ INSTALLER_IDENT="Developer ID Installer: Lex Neva (929A568N58)"
+ /usr/bin/pkgbuild --root dist/inkstitch.app \
+ -s "${INSTALLER_IDENT}" \
+ --component-plist installer_scripts/inkstitch.plist \
+ --ownership recommended \
+ --identifier org.inkstitch.installer \
+ --version ${VERSION} \
+ --scripts installer_scripts/scripts \
+ --install-location ${PKG_INSTALL_PATH}inkstitch.app \
+ artifacts/inkstitch-${VERSION}-${OS}.pkg
+ if [[ "${GITHUB_REF}" =~ ^refs/tags/v[0-9.]+$ || $NOTARIZE_DEVELOPMENT_BUILDS == true ]]; then
+ echo "Notary starting"
+ bash bin/notarize-app "929A568N58" \
+ "${NOTARY_ACCOUNT}" \
+ "${NOTARY_PASSWORD}" \
+ "org.inkstitch.app" \
+ artifacts/inkstitch-${VERSION}-${OS}.pkg
+ fi
+ else
+ # local builds will not be signed or notarized
+ cp -a "${ELECTRON_BUILD_PATH}" dist/inkstitch.app/Contents/MacOS/electron
+ pkgbuild --root dist/inkstitch.app \
+ --component-plist installer_scripts/inkstitch.plist \
+ --ownership recommended \
+ --identifier org.inkstitch.installer \
+ --version ${VERSION} \
+ --scripts installer_scripts/scripts \
+ --install-location ${PKG_INSTALL_PATH}inkstitch.app \
+ artifacts/inkstitch-${VERSION}-${OS}.pkg
+ fi
+ # Creating the zip for Drag n' Drop install
+ cd dist
+ python -m zipfile -c ../artifacts/inkstitch-${VERSION}-${OS}.zip *
+ cd ..
else
- cp -a images/examples palettes symbols fonts LICENSE VERSION dist/inkstitch
+ cp -a images/examples palettes symbols fonts inx LICENSE VERSION dist/inkstitch
cp -a icons locales print dist/inkstitch/bin
cp -a electron/build/*-unpacked dist/inkstitch/electron
+
fi
-mkdir artifacts
+if [ "$BUILD" = "windows" ]; then
+ # build the installer locally
+ # remotely it will be called through build.yml after signing
+ if [[ -z "${GITHUB_REF}" ]]; then
+ bash bin/build-windows-installer
+ fi
+fi
-for d in inx/*; do
- lang=${d%.*}
- lang=${lang#*/}
- cp $d/*.inx dist
+if [ "$BUILD" = "linux" ]; then
+ gem install fpm
- cd dist
- if [ "$BUILD" = "windows" ]; then
- # The python zipfile command line utility can't handle directories
- # containing files with UTF-8 names on Windows, so we use 7-zip instead.
- 7z a ../artifacts/inkstitch-${VERSION}-${OS}-${lang}.zip *
+ if [[ "$VERSION" =~ ^v[0-9][.0-9]+$ ]]; then
+ VERSION=${VERSION#v}
else
- python -m zipfile -c ../artifacts/inkstitch-${VERSION}-${OS}-${lang}.zip *
+ # dpkg requires versions to start with a number, so we have to add
+ # 0.0.1 for development builds
+ VERSION="0.0.1-${VERSION}"
fi
- cd ..
-done
+
+ echo -n "$INKSTITCH_GPG_KEY" | base64 -d | gpg --import
+ cat <<EOF > $HOME/.rpmmacros
+%_gpg_name EA93BCE2CCD0FB2E77B2CC29E8120E50709E5C44
+%_signature gpg
+EOF
+
+ deb_version="$(sed -E 's/[^a-zA-Z0-9.+]/./g' <<< "$VERSION")"
+ fpm -s dir \
+ -t deb \
+ -n inkstitch \
+ -v "$deb_version" \
+ -d "inkscape >= 1.0.0" \
+ --license "GPL-3.0" \
+ --description "An open-source machine embroidery design platform based on Inkscape" \
+ --url "https://inkstitch.org" \
+ --maintainer "maintainer@inkstitch.org" \
+ --after-install bin/after-install \
+ --before-remove bin/before-remove \
+ --verbose \
+ dist/inkstitch=/opt
+
+ fpm -s dir \
+ -t rpm \
+ -n inkstitch \
+ -v "$VERSION" \
+ -d "inkscape >= 1.0.0" \
+ --license "GPL-3.0" \
+ --description "An open-source machine embroidery design platform based on Inkscape" \
+ --url "https://inkstitch.org" \
+ --maintainer "maintainer@inkstitch.org" \
+ --after-install bin/after-install \
+ --before-remove bin/before-remove \
+ --verbose \
+ dist/inkstitch=/opt
+
+ rpmsign --addsign inkstitch*.rpm
+ mv inkstitch*.deb inkstitch*.rpm artifacts/
+
+ tar -C dist -Jcf artifacts/inkstitch-${VERSION}-${OS}.tar.xz inkstitch
+ cat "$(dirname "$0")/linux-sh-installer" artifacts/inkstitch-${VERSION}-${OS}.tar.xz > artifacts/inkstitch-${VERSION}-${OS}.sh
+fi