diff --git a/user/joplin/APKBUILD b/user/joplin/APKBUILD new file mode 100644 index 0000000..b62ef28 --- /dev/null +++ b/user/joplin/APKBUILD @@ -0,0 +1,210 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + +pkgname="joplin" +pkgver=2.9.17 +pkgrel=0 +install="joplin.install" +depends=" + electron + gtk3 + libexif + libgsf + libjpeg-turbo + libwebp + libxss + nodejs>=17.3 + nss + orc + rsync + libvips + libappindicator-gtk2 + " +arch="x86_64" +makedepends=" + npm + yarn + python3 + rsync + jq + yq + electron + libgsf + node-gyp>=8.4.1 + libvips + " +url="https://joplinapp.org/" +subpackages="$pkgname-desktop" +license="MIT" +source=" + joplin-${pkgver}.tar.gz::https://github.com/laurent22/joplin/archive/v${pkgver}.tar.gz + joplin.desktop + joplin-desktop.sh + joplin.sh + " + +# local npm cache directory +_yarn_cache="yarn-cache" + +## Sets up a local cache to prevent the redownloding the packages on rebuilds +_get_cache() { + if [[ "${_yarn_cache}" =~ ^/ ]]; then + printf "%s" "${_yarn_cache}" + else + printf "%s" "${srcdir}/${_yarn_cache}" + fi +} + +_get_yarn_bin() { + local yarn_bin=$(yq ".yarnPath" ${srcdir}/joplin-${pkgver}/.yarnrc.yml) + #Remove quotes + yarn_bin="${yarn_bin%\"}" + yarn_bin="${yarn_bin#\"}" + printf "%s" "${srcdir}/joplin-${pkgver}/${yarn_bin}" +} + +prepare() { + local cache=$(_get_cache) + local yarn_bin=$(_get_yarn_bin) + msg2 "Yarn cache directory: $cache" + msg2 "Yarn binary: ${yarn_bin}" + + msg2 "Disabling husky (git hooks)" + sed -i '/"husky": ".*"/d' "${srcdir}/joplin-${pkgver}/package.json" + + # There are so many people + msg2 "Checking Node PATH" + local w_node=$(which node) + if [[ $w_node != "/usr/bin/node" ]]; then + msg2 "WARNING: Using path ${w_node} beware its not the defualt path, check if you are using nvm or similar" + fi + + msg2 "Tweaking .yarnrc" + yq -i -y ".cacheFolder=(\"${cache}\")" "${srcdir}/joplin-${pkgver}/.yarnrc.yml" + + msg2 "Tweaking lerna.json" + local tmp_json="$(mktemp --tmpdir="$srcdir")" + local lerna_json="${srcdir}/joplin-${pkgver}/lerna.json" + + msg2 "Deleting app-mobile" + rm -r "${srcdir}/joplin-${pkgver}/packages/app-mobile" + rm -r "${srcdir}/joplin-${pkgver}/packages/app-clipper" + + if [[ ${pkgver} == 2.9.17 ]]; then + # Temporary fix for 2.9.17 + # Let yarn resolve version ^2.12.1 of nan package to 2.17.0 instead of 2.15.0 (https://github.com/nodejs/nan/pull/943) + local package_json=${srcdir}/joplin-${pkgver}/package.json + cp $package_json $package_json.bak + jq '. + {"resolutions": {"nan@^2.12.1": "2.17.0"}}' $package_json.bak > $package_json + fi +} + + +build() { + local cache=$(_get_cache) + local yarn_bin=$(_get_yarn_bin) + msg2 "Yarn cache directory: $cache" + cd "${srcdir}/joplin-${pkgver}" + + # Force Lang + # INFO: https://github.com/alfredopalhares/joplin-pkgbuild/issues/25 + export LANG=en_US.utf8 + + msg2 "Installing dependencies through Yarn 3..." + # FSevents is on the optinal dependencies and its Mac Only + eval $yarn_bin + + msg2 "Building the workspace" + $yarn_bin workspace @joplin/lib install + $yarn_bin workspace @joplin/renderer install + $yarn_bin workspace @joplin/app-desktop install + $yarn_bin workspace @joplin/app-desktop run electron-builder build --linux +} + +check() { + npm run test || exit 0 +} + +package() { + depends=('coreutils' 'libsecret' 'nodejs' 'python') + + local cache=$(_get_cache) + local yarn_bin=$(_get_yarn_bin) + msg2 "Yarn cache directory: $cache" + + msg2 "Packaging CLI with Repo Gulp" + cd "${srcdir}/joplin-${pkgver}/packages/app-cli/" + gulp_bin=$($yarn_bin bin gulp) + msg2 "Using gulp: ${gulp_bin}" + ${gulp_bin} build + $yarn_bin pack + + msg2 "Installing package" + mkdir -p "${pkgdir}/usr/share/joplin/" + mv package.tgz tt"${pkgdir}/usr/share/joplin/" + cd "${pkgdir}/usr/share/joplin/" + $yarn_bin init + # FIXME: The repo wran crashed + # You also need to pipe yes, for depeendy + yes | yarn add ./package.tgz + + msg2 "Fixing Directories Permissions" + # Non-deterministic race in npm gives 777 permissions to random directories. + # See https://github.com/npm/cli/issues/1103 for details. + find "${pkgdir}/usr" -type d -exec chmod 755 {} + + + msg2 "Removing References to \$pkgdir" + find "$pkgdir" -name package.json -print0 | xargs -0 sed -i "/_where/d" + + msg2 "Fixing Permissions set by npm" + # npm gives ownership of ALL FILES to build user + # https://bugs.archlinux.org/task/63396 + chown -R root:root "${pkgdir}" + + msg2 "Installing LICENSE" + install -Dm644 "${srcdir}/joplin-${pkgver}/LICENSE" -t "${pkgdir}/usr/share/licenses/${pkgname}/" + + msg2 "Installing Startup Script" + cd "${srcdir}" + install -Dm755 joplin.sh "${pkgdir}/usr/bin/joplin" +} + + +package_joplin-desktop() { + pkgdesc="A note taking and to-do application with synchronization capabilities - Desktop" + depends=('electron' 'gtk3' 'libexif' 'libgsf' 'libjpeg-turbo' 'libwebp' 'libxss' 'nodejs' + 'nss' 'orc') + optdepends=('libappindicator-gtk3: for tray icon') + conflicts=('joplin-desktop-electron') + + # ./generateSha512.js fails if AppImage is not built + mkdir -p "${srcdir}/joplin-${pkgver}/packages/app-desktop/dist/" + touch "${srcdir}/joplin-${pkgver}/packages/app-desktop/dist/AppImage" + + cd "${srcdir}/joplin-${pkgver}/packages/app-desktop/node_modules/@joplin/" + ln -sf "../../../fork-uslug" "." + + msg2 "Packaging the desktop..." + # TODO: Cleanup app.asar file + cd dist/linux-unpacked/ + mkdir -p "${pkgdir}/usr/share/joplin-desktop" + cp -R "." "${pkgdir}/usr/share/joplin-desktop" + msg2 "Installing LICENSE..." + cd "${srcdir}/joplin-${pkgver}/" + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" + + msg "Installing startup script and desktop file..." + cd "${srcdir}" + install -Dm755 ${srcdir}/joplin-desktop.sh "${pkgdir}/usr/bin/joplin-desktop" + install -Dm644 ${srcdir}/joplin.desktop -t "${pkgdir}/usr/share/applications" + + msg "Installing icons" + local -r src_icon_dir="${srcdir}/joplin-${pkgver}/packages/app-desktop/build/icons" + local -i size + for size in 16 22 24 32 36 48 64 72 96 128 192 256 512; do + [[ -f "${src_icon_dir}/${size}x${size}.png" ]] && install -Dm644 \ + "${src_icon_dir}/${size}x${size}.png" \ + "${pkgdir}/usr/share/icons/hicolor/${size}x${size}/apps/joplin.png" + done +} +