set -e
-RUST_PLATFORM=$(rustc -Vv | awk '/host/ {print $2}')
-
export PATH="/opt/rust/bin:$PATH"
if [ -z "$LD_LIBRARY_PATH" ]; then
export LD_LIBRARY_PATH="/opt/rust/lib$LIBDIRSUFFIX"
else
export LD_LIBRARY_PATH="/opt/rust/lib$LIBDIRSUFFIX:$LD_LIBRARY_PATH"
fi
+
+BASE_TMP_DIR=$TMP/$PRGNAM-$VERSION
+export YARN_YARN_OFFLINE_MIRROR=$BASE_TMP_DIR/vendor
+export YARN_CACHE_FOLDER=$BASE_TMP_DIR/cache
+export npm_config_cache=$YARN_CACHE_FOLDER
+export npm_config_nodedir=/usr
+export XDG_CACHE_HOME=$BASE_TMP_DIR/electron-cache
+export CARGO_HOME=$BASE_TMP_DIR/cargo
export CFLAGS="$SLKCFLAGS"
export CXXFLAGS="$SLKCFLAGS"
-export npm_config_nodedir="/usr"
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
rm -rf $PRGNAM-$VERSION $WEBNAM-$VERSION
tar xvf $CWD/$PRGNAM-$VERSION.tar.gz
tar xvf $CWD/$WEBNAM-$VERSION.tar.gz
-tar xvf $CWD/$PRGNAM-$VERSION-vendored-sources.tar
+tar xvf $CWD/$PRGNAM-$VERSION-vendored-sources.tar.xz
cd $WEBNAM-$VERSION
chown -R root:root .
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
-o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
-YARN_CACHE_FOLDER="$(pwd)/cache" \
-YARN_YARN_OFFLINE_MIRROR="$(pwd)/vendor" \
-yarn install --frozen-lockfile --ignore-engines --no-fund --update-checksums --offline
+yarn install --frozen-lockfile \
+ --ignore-engines \
+ --no-fund \
+ --update-checksums \
+ --offline
sed -i 's|yarn |yarn --offline |g' package.json
VERSION=$VERSION \
-YARN_CACHE_FOLDER="$(pwd)/cache" \
-npm_config_cache="$(pwd)/cache"
yarn --offline build
+yarn --offline cache clean
cd ../$PRGNAM-$VERSION
chown -R root:root .
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
-o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
-export YARN_CACHE_FOLDER="$(pwd)/cache"
-export YARN_YARN_OFFLINE_MIRROR="$(pwd)/vendor"
-export npm_config_cache="$(pwd)/cache"
-export XDG_CACHE_HOME=$YARN_CACHE_FOLDER
+# fix autolaunch
# https://gitlab.archlinux.org/archlinux/packaging/packages/element.io/-/blob/main/autolaunch.patch
patch -p1 < $CWD/autolaunch.patch
+# use vendored hak
patch -p1 < $CWD/no-fetching-hak.patch
-sed -i 's|"target": "deb"|"target": "dir"|' package.json
+# disable autoupdate
sed -i 's|"https://packages.element.io/desktop/update/"|null|' element.io/release/config.json
+
mkdir -p deploys
mv ../$WEBNAM-$VERSION/webapp deploys/element-v$VERSION
-yarn install --frozen-lockfile --ignore-engines --no-fund --update-checksums --offline
+yarn install --frozen-lockfile \
+ --ignore-engines \
+ --no-fund \
+ --update-checksums \
+ --offline
sed -i 's|yarn |yarn --offline |g' package.json
-#sed -i 's|yarn \-\-offline run hak|yarn run hak|' package.json
yarn --offline run fetch --noverify --cfgdir ""
RUSTFLAGS="-C target-cpu=native" \
-CARGO_HOME="$TMP/$PRGNAM-$VERSION/.hak/matrix-seshat/$RUST_PLATFORM/build/.cargo" \
-YARN_YARN_OFFLINE_MIRROR="$TMP/$PRGNAM-$VERSION/.hak/matrix-seshat/$RUST_PLATFORM/build/yarn-vendor" \
yarn --offline run build:native
# electron-builder fails if it can't upload the artifact to GitHub for which it requires a GitHub Token
# all building is done by that point, so we just continue with packaging
| cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
install -Dm644 $CWD/element-desktop.desktop $PKG/usr/share/applications/io.element.Element.desktop
-install -Dm755 $CWD/element-desktop.sh $PKG/usr/bin/element-desktop
-sed -i "s|@LIBDIRSUFFIX@|$LIBDIRSUFFIX|" $PKG/usr/bin/element-desktop
+ln -s /usr/lib$LIBDIRSUFFIX/element-desktop/element-desktop $PKG/usr/bin/
# 32x32 icon is missing for some reason
magick build/icons/512x512.png -resize 32x32 build/icons/32x32.png
#!/bin/bash
+set -e
+
+if [ ! -x "$(which jq)" -o ! -x "$(which 7z)" ]; then
+ echo Please install jq and p7zip.
+ exit 1
+fi
+
source element-desktop.info
CWD=$(pwd)
TMP=$(mktemp -d)
-RUST_PLATFORM=$(rustc -Vv | awk '/host/ {print $2}')
-export npm_config_nodedir="/usr"
+
+export PATH="/opt/rust/bin:$PATH"
+if [ -z "$LD_LIBRARY_PATH" ]; then
+ export LD_LIBRARY_PATH="/opt/rust/lib64"
+else
+ export LD_LIBRARY_PATH="/opt/rust/lib64:$LD_LIBRARY_PATH"
+fi
cd $TMP
tar xf $CWD/element-desktop-$VERSION.tar.gz
tar xf $CWD/element-web-$VERSION.tar.gz
+BASE_TMP_DIR=$TMP/element-desktop-$VERSION
+export YARN_YARN_OFFLINE_MIRROR=$BASE_TMP_DIR/vendor
+export YARN_CACHE_FOLDER=$BASE_TMP_DIR/cache
+export npm_config_cache=$YARN_CACHE_FOLDER
+export npm_config_nodedir=/usr
+export XDG_CACHE_HOME=$BASE_TMP_DIR/electron-cache
+export CARGO_HOME=$BASE_TMP_DIR/cargo
+
+mkdir -p $YARN_YARN_OFFLINE_MIRROR
+
# element-web
cd element-web-$VERSION
-mkdir -p vendor
-YARN_YARN_OFFLINE_MIRROR=$(pwd)/vendor \
-YARN_CACHE_FOLDER=$(pwd)/cache \
yarn install --frozen-lockfile \
--ignore-engines \
--no-fund \
--update-checksums
+yarn cache clean
# element-desktop
cd ../element-desktop-$VERSION
## pre-built electron
EVERSION=$(jq --raw-output '.devDependencies.electron' < package.json)
-mkdir -p cache/electron{,-builder/fpm@2.0.1/fpm@2.0.1-fpm-1.16.0-ruby-3.4.3-linux-amd64}
-wget -P cache/electron https://github.com/electron/electron/releases/download/v$EVERSION/electron-v$EVERSION-linux-x64.zip
+mkdir -p $XDG_CACHE_HOME/electron{,-builder/fpm@2.0.1/fpm@2.0.1-fpm-1.16.0-ruby-3.4.3-linux-amd64}
+if [ -e $CWD/electron-v$EVERSION-linux-x64.zip ]; then
+ cp $CWD/electron-v$EVERSION-linux-x64.zip $XDG_CACHE_HOME/electron/
+else
+ wget --directory-prefix=$XDG_CACHE_HOME/electron --tries=0 --retry-on-http-error=503 https://github.com/electron/electron/releases/download/v$EVERSION/electron-v$EVERSION-linux-x64.zip
+fi
## pre-built ruby for electron-builder
-wget -P cache/electron-builder https://github.com/electron-userland/electron-builder-binaries/releases/download/fpm@2.0.1/fpm-1.16.0-ruby-3.4.3-linux-amd64.7z
-7z x -ocache/electron-builder/fpm@2.0.1/fpm@2.0.1-fpm-1.16.0-ruby-3.4.3-linux-amd64 cache/electron-builder/fpm-1.16.0-ruby-3.4.3-linux-amd64.7z
-rm cache/electron-builder/fpm-1.16.0-ruby-3.4.3-linux-amd64.7z
+if [ -e $CWD/fpm-1.16.0-ruby-3.4.3-linux-amd64.7z ]; then
+ cp $CWD/fpm-1.16.0-ruby-3.4.3-linux-amd64.7z $XDG_CACHE_HOME/electron-builder/
+else
+ wget --directory-prefix=$XDG_CACHE_HOME/electron-builder --tries=0 --retry-on-http-error=503 https://github.com/electron-userland/electron-builder-binaries/releases/download/fpm@2.0.1/fpm-1.16.0-ruby-3.4.3-linux-amd64.7z
+fi
+7z x -o$XDG_CACHE_HOME/electron-builder/fpm@2.0.1/fpm@2.0.1-fpm-1.16.0-ruby-3.4.3-linux-amd64 $XDG_CACHE_HOME/electron-builder/fpm-1.16.0-ruby-3.4.3-linux-amd64.7z
+rm $XDG_CACHE_HOME/electron-builder/fpm-1.16.0-ruby-3.4.3-linux-amd64.7z
## element-desktop itself
-mkdir -p vendor
-YARN_YARN_OFFLINE_MIRROR=$(pwd)/vendor \
-YARN_CACHE_FOLDER=$(pwd)/cache \
-npm_config_cache="$(pwd)/cache" \
-XDG_CACHE_HOME=$YARN_CACHE_FOLDER \
yarn install --frozen-lockfile \
--ignore-engines \
--no-fund \
--update-checksums
+yarn cache clean
+EDIR=$(find $XDG_CACHE_HOME/electron -type d -mindepth 1 -maxdepth 1)
+rm $EDIR/electron-v$EVERSION-linux-x64.zip
+ln -s ../electron-v$EVERSION-linux-x64.zip $EDIR/
## matrix-seshat
+RUST_PLATFORM=$(rustc -Vv | awk '/host/ {print $2}')
SESHATVERSION=$(jq --raw-output '.hakDependencies."matrix-seshat"' < package.json | tr -d '^')
-wget -P .hak https://github.com/matrix-org/seshat/archive/$SESHATVERSION/seshat-$SESHATVERSION.tar.gz
-tar xf .hak/seshat-$SESHATVERSION.tar.gz -C .hak seshat-$SESHATVERSION/seshat-node
mkdir -p .hak/hakModules .hak/matrix-seshat/$RUST_PLATFORM
+if [ -e $CWD/seshat-$SESHATVERSION.tar.gz ]; then
+ cp $CWD/seshat-$SESHATVERSION.tar.gz .hak/
+else
+ wget --directory-prefix=.hak --tries=0 --retry-on-http-error=503 https://github.com/matrix-org/seshat/archive/$SESHATVERSION/seshat-$SESHATVERSION.tar.gz
+fi
+tar xf .hak/seshat-$SESHATVERSION.tar.gz -C .hak seshat-$SESHATVERSION/seshat-node
mv .hak/seshat-$SESHATVERSION/seshat-node .hak/matrix-seshat/$RUST_PLATFORM/build
cp -R .hak/matrix-seshat/$RUST_PLATFORM/build .hak/hakModules/matrix-seshat
rm .hak/seshat-$SESHATVERSION.tar.gz
+
cd .hak/matrix-seshat/$RUST_PLATFORM/build
-mkdir -p yarn-vendor
-YARN_YARN_OFFLINE_MIRROR=$(pwd)/yarn-vendor \
-YARN_CACHE_FOLDER=$(pwd)/cache \
-CARGO_HOME=$(pwd)/cargo \
yarn install --frozen-lockfile \
--ignore-engines \
--no-fund \
--update-checksums
+yarn cache clean
## native extensions
cat << EOF >> Cargo.toml
[source.vendored-sources]
directory = 'vendor'
EOF
-rm -rf cache cargo
cd ../../../..
# vendor everything
cd ..
-tar cf $CWD/element-desktop-$VERSION-vendored-sources.tar \
- element-{desktop,web}-$VERSION/vendor \
+tar cfJ $CWD/element-desktop-$VERSION-vendored-sources.tar.xz \
+ element-desktop-$VERSION/vendor \
element-desktop-$VERSION/.hak/hakModules \
element-desktop-$VERSION/.hak/matrix-seshat/$RUST_PLATFORM/build \
- element-desktop-$VERSION/cache/electron{,-builder}
+ element-desktop-$VERSION/electron-cache/electron{,-builder}
rm -rf $TMP
cd $CWD