mirror of
https://github.com/Foundry376/Mailspring.git
synced 2026-03-27 10:53:18 +01:00
* Add ARM64 (aarch64) Linux build support
Add the infrastructure to build, package, and test Mailspring on ARM64
Linux, following the same pattern used for x64 Linux and Apple Silicon.
Build system changes:
- postinstall.js: Add linux-arm64 mailsync S3 download path
- package-task.js: Explicitly set Linux arch via process.arch
- installer-linux-task.js: Add arm64 -> arm64 Debian arch mapping
- mkdeb: Skip execstack (x86-only tool) on non-x86 architectures
- snapcraft.yaml: Add arm64 to supported platforms
CI/CD:
- Add build-linux-arm64.yaml workflow using GitHub's native
ubuntu-24.04-arm runners for building DEB, RPM, and Snap packages
- Include installation tests on Ubuntu, and Fedora arm64 containers
The RPM spec already handles ARM64 correctly since its %else branch
(64-bit library qualifiers) applies to both x86_64 and aarch64.
Prerequisite: ARM64 mailsync binaries must be built and uploaded to
S3 at mailspring-builds/mailsync/{hash}/linux-arm64/mailsync.tar.gz
https://claude.ai/code/session_019RpF8j6PpEQ4B1ME8x3Rbn
* Update .github/workflows/build-linux-arm64.yaml
Co-authored-by: indent-staging[bot] <246363610+indent-staging[bot]@users.noreply.github.com>
---------
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: indent-staging[bot] <246363610+indent-staging[bot]@users.noreply.github.com>
74 lines
2.5 KiB
Bash
Executable File
74 lines
2.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# mkdeb version arch control-file-path desktop-file-path icon-file-path sources-file-path deb-file-path
|
|
|
|
set -e
|
|
|
|
SCRIPT=`readlink -f "$0"`
|
|
ROOT=`readlink -f $(dirname $SCRIPT)/..`
|
|
cd $ROOT
|
|
|
|
VERSION="$1"
|
|
ARCH="$2"
|
|
ICON_FILE="$3"
|
|
LINUX_ASSETS_DIRECTORY="$4"
|
|
APP_CONTENTS_DIRECTORY="$5"
|
|
OUTPUT_PATH="$6"
|
|
|
|
FILE_MODE=755
|
|
|
|
TARGET_ROOT="`mktemp -d`"
|
|
chmod $FILE_MODE "$TARGET_ROOT"
|
|
TARGET="$TARGET_ROOT/mailspring-$VERSION-$ARCH"
|
|
|
|
mkdir -m $FILE_MODE -p "$TARGET/usr"
|
|
mkdir -m $FILE_MODE -p "$TARGET/usr/share"
|
|
cp -r "$APP_CONTENTS_DIRECTORY" "$TARGET/usr/share/mailspring"
|
|
chmod +rx "$TARGET/usr/share/mailspring"
|
|
|
|
mkdir -m $FILE_MODE -p "$TARGET/DEBIAN"
|
|
cp "$OUTPUT_PATH/control" "$TARGET/DEBIAN/control"
|
|
|
|
cp "$LINUX_ASSETS_DIRECTORY/debian/postinst" "$TARGET/DEBIAN/postinst"
|
|
cp "$LINUX_ASSETS_DIRECTORY/debian/postrm" "$TARGET/DEBIAN/postrm"
|
|
|
|
mkdir -m $FILE_MODE -p "$TARGET/usr/bin"
|
|
ln -s "../share/mailspring/mailspring" "$TARGET/usr/bin/mailspring"
|
|
chmod +x "$TARGET/usr/bin/mailspring"
|
|
|
|
mkdir -m $FILE_MODE -p "$TARGET/usr/share/applications"
|
|
cp "$OUTPUT_PATH/Mailspring.desktop" "$TARGET/usr/share/applications"
|
|
mkdir -m $FILE_MODE -p "$TARGET/usr/share/appdata"
|
|
cp "$OUTPUT_PATH/mailspring.appdata.xml" "$TARGET/usr/share/appdata"
|
|
|
|
mkdir -m $FILE_MODE -p "$TARGET/usr/share/pixmaps"
|
|
cp "$ICON_FILE" "$TARGET/usr/share/pixmaps/mailspring.png"
|
|
|
|
mkdir -m $FILE_MODE -p "$TARGET/usr/share/icons/hicolor"
|
|
for i in 256 128 64 32 16; do
|
|
mkdir -p "$TARGET/usr/share/icons/hicolor/${i}x${i}/apps"
|
|
cp "$LINUX_ASSETS_DIRECTORY/icons/${i}.png" "$TARGET/usr/share/icons/hicolor/${i}x${i}/apps/mailspring.png"
|
|
done
|
|
|
|
# Copy generated LICENSE.md to /usr/share/doc/mailspring/copyright
|
|
mkdir -m $FILE_MODE -p "$TARGET/usr/share/doc/mailspring"
|
|
cp "$TARGET/usr/share/mailspring/LICENSE" "$TARGET/usr/share/doc/mailspring/copyright"
|
|
|
|
# Add lintian overrides
|
|
mkdir -m $FILE_MODE -p "$TARGET/usr/share/lintian/overrides"
|
|
cp "$ROOT/build/resources/linux/debian/lintian-overrides" "$TARGET/usr/share/lintian/overrides/mailspring"
|
|
|
|
# Remove group write from all files
|
|
chmod -R g-w "$TARGET";
|
|
|
|
# Remove execstack bit from mailspring executable (execstack is x86-only, skip on other archs)
|
|
if command -v execstack &> /dev/null; then
|
|
execstack --clear-execstack "$TARGET/usr/share/mailspring/mailspring"
|
|
fi
|
|
|
|
# Remove executable bit from .node files
|
|
find "$TARGET" -type f -name "*.node" -exec chmod a-x {} \;
|
|
|
|
fakeroot dpkg-deb -b "$TARGET"
|
|
mv "$TARGET_ROOT/mailspring-$VERSION-$ARCH.deb" "$OUTPUT_PATH"
|
|
rm -rf "$TARGET_ROOT"
|