summarylogtreecommitdiffstats
path: root/PKGBUILD
blob: dd5c0a878450dea31cbbed11bcb3993c282facbb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
# Maintainer: Alfredo Palhares <alfredo at palhares dot me>
# Contributor: Mark Wagie <mark dot wagie at tutanota dot com>
# Contributor: Matteo Parolari
# Contributor: gardar <aur@gardar.net>

# Please contribute to:
# https://github.com/alfredopalhares/arch-pkgbuilds

pkgbase="joplin"
pkgname=('joplin' 'joplin-desktop')
pkgver=2.14.20
groups=('joplin')
pkgrel=1
install="joplin.install"
depends=('electron' 'gtk3' 'libexif' 'libgsf' 'libjpeg-turbo' 'libwebp' 'libxss' 'nodejs>=17.3'
'nss' 'orc' 'rsync' 'libvips')
optdepends=('libappindicator-gtk3: for tray icon')
arch=('x86_64' 'i686')
makedepends=('git' 'npm' 'yarn' 'python' 'rsync' 'jq' 'yq' 'electron' 'libgsf' 'node-gyp>=8.4.1' 'libvips')
url="https://joplinapp.org/"
license=('MIT')
source=("joplin.desktop" "joplin-desktop.sh" "joplin.sh"
"joplin-${pkgver}.tar.gz::https://github.com/laurent22/joplin/archive/v${pkgver}.tar.gz")
sha256sums=('c7c5d8b0ff9edb810ed901ea21352c9830bfa286f3c18b1292deca5b2f8febd2'
    'a450284fe66d89aa463d129ce8fff3a0a1a783a64209e4227ee47449d5737be8'
    'b6a8361cbc59e7dbc33bcc427274efb945d8d654bf013b12c7021be681f568e2'
'919e9300e66bc6c24a282cbf93c43c228cdfe3227bdb1eaa50fdadef4734901b')

# 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}"
}

_set_env() {
    export ELECTRON_SKIP_BINARY_DOWNLOAD=1
    export SHARP_IGNORE_GLOBAL_LIBVIPS=1
}

prepare() {
    local cache=$(_get_cache)
    local yarn_bin=$(_get_yarn_bin)
    _set_env
    msg2 "Yarn cache directoaary: $cache"
    msg2 "Yarn binary: ${yarn_bin}"
    $yarn_bin --version

    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 default path, check if you are using nvm or similar"
    # fi

    msg2 "Removing yarm version lock"
    # jq "del(.packageManager)" "${srcdir}/joplin-${pkgver}/package.json" > "${srcdir}/joplin-${pkgver}/package_new.json"
    # mv "${srcdir}/joplin-${pkgver}/package_new.json" "${srcdir}/joplin-${pkgver}/package.json"

    msg2 "Disabling Optional Dependencias"
    # find "${srcdir}/joplin-${pkgver}/" -type f -name "package.json" -exec sed -i 's_"optionalDependencies":_"UNUSED":_' {} \;

    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 Unnecessary Packages"
    rm -r "${srcdir}/joplin-${pkgver}/packages/app-mobile"
    rm -r "${srcdir}/joplin-${pkgver}/packages/app-clipper"
    rm -r "${srcdir}/joplin-${pkgver}/packages/server"
}


build() {
    local cache=$(_get_cache)
    local yarn_bin=$(_get_yarn_bin)
    _set_env

    msg2 "Yarn binary: ${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..."
    eval $yarn_bin

    msg2 "Building the workspace"
    $yarn_bin install
    echo "hello"
    $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
}

#FIXME: These checks fail on some machines, even with the exit 0
# Something related with the number of allowed processes I guess
check() {
    cd "${srcdir}/joplin-${pkgver}"
    msg2 "Not Running any tests for now"
    #npm run test || exit 0
}

package_joplin() {
    pkgdesc="A note taking and to-do application with synchronization capabilities - CLI App"
    depends=('coreutils' 'libsecret' 'nodejs' 'python' 'libvips')

    local cache=$(_get_cache)
    local yarn_bin=$(_get_yarn_bin)
    _set_env
    msg2 "Yarn cache directory: $cache"

    msg2 "Packaging CLI with Repo Gulp"
    cd "${srcdir}/joplin-${pkgver}/packages/app-cli/"
    # npx gulp build
    gulp_bin=$($yarn_bin bin gulp)
    msg2 "Using gulp: ${gulp_bin}"
    ${gulp_bin} build
    $yarn_bin pack

    msg2 "Installing package"
    export SKIP_YARN_COREPACK_CHECK=0
    mkdir -p "${pkgdir}/usr/share/joplin/"
    mv package.tgz "${pkgdir}/usr/share/joplin/"
    cd "${pkgdir}/usr/share/joplin/"
    yes | $yarn_bin init
    # FIXME: The repo the actually install does not work
    # You also need to pipe yes, for depeendy
    # $yarn_bin add ./package.tgz
    npm install -g --prefix "${pkgdir}/usr" ./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 "Building Desktop with packaged Electron..."
    cd "${srcdir}/joplin-${pkgver}/packages/app-desktop/"
    #electron_dir="/usr/lib/electron"
    #electron_version=$(cat /usr/lib/electron/version)
    #msg2 "Using Electron Version ${electron_version}"
    ## Current version of electron does not work
    ##USE_HARD_LINKS=false yarn run dist -- --publish=never  --linux  --x64 \
        #sed -i "s/const forceAbiArgs = '--force-abi 89';/const forceAbiArgs = ''/" tools/electronRebuild.js
    #gulp electronRebuild
    ##DEBUG="electron-rebuild" USE_HARD_LINKS=false yarn run dist -- --publish=never \
        ##  --dir="dist/"
    # # --dir="dist/" -c.electronDist=$electron_dir -c.electronVersion=$electron_version
    #    # FIXME: Using packaged electron breaks the interface

    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}"

    msg2 "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"

    msg2 "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
}