mirror of
https://github.com/chatmail/core.git
synced 2026-05-09 01:46:30 +03:00
ci: build deltachat-rpc-server with nix
This commit is contained in:
106
.github/workflows/deltachat-rpc-server.yml
vendored
106
.github/workflows/deltachat-rpc-server.yml
vendored
@@ -21,24 +21,27 @@ jobs:
|
|||||||
# Build a version statically linked against musl libc
|
# Build a version statically linked against musl libc
|
||||||
# to avoid problems with glibc version incompatibility.
|
# to avoid problems with glibc version incompatibility.
|
||||||
build_linux:
|
build_linux:
|
||||||
name: Cross-compile deltachat-rpc-server for x86_64, i686, aarch64 and armv7 Linux
|
name: Build deltachat-rpc-server for Linux
|
||||||
runs-on: ubuntu-22.04
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
arch: [aarch64, armv7l, armv6l, i686, x86_64]
|
||||||
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
show-progress: false
|
show-progress: false
|
||||||
|
- uses: DeterminateSystems/nix-installer-action@main
|
||||||
- name: Install ziglang
|
- uses: DeterminateSystems/magic-nix-cache-action@main
|
||||||
run: pip install wheel ziglang==0.11.0
|
|
||||||
|
|
||||||
- name: Build deltachat-rpc-server binaries
|
- name: Build deltachat-rpc-server binaries
|
||||||
run: sh scripts/zig-rpc-server.sh
|
run: nix build .#deltachat-rpc-server-${{ matrix.arch }}-linux
|
||||||
|
|
||||||
- name: Upload dist directory with Linux binaries
|
- name: Upload binary
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: linux
|
name: deltachat-rpc-server-${{ matrix.arch }}-linux
|
||||||
path: dist/
|
path: result/bin/deltachat-rpc-server
|
||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
|
|
||||||
build_windows:
|
build_windows:
|
||||||
@@ -46,34 +49,23 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
arch: [win32, win64]
|
||||||
- os: windows-latest
|
runs-on: ubuntu-latest
|
||||||
artifact: win32.exe
|
|
||||||
path: deltachat-rpc-server.exe
|
|
||||||
target: i686-pc-windows-msvc
|
|
||||||
|
|
||||||
- os: windows-latest
|
|
||||||
artifact: win64.exe
|
|
||||||
path: deltachat-rpc-server.exe
|
|
||||||
target: x86_64-pc-windows-msvc
|
|
||||||
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
show-progress: false
|
show-progress: false
|
||||||
|
- uses: DeterminateSystems/nix-installer-action@main
|
||||||
|
- uses: DeterminateSystems/magic-nix-cache-action@main
|
||||||
|
|
||||||
- name: Setup rust target
|
- name: Build deltachat-rpc-server binaries
|
||||||
run: rustup target add ${{ matrix.target }}
|
run: nix build .#deltachat-rpc-server-${{ matrix.arch }}
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: cargo build --release --package deltachat-rpc-server --target ${{ matrix.target }} --features vendored
|
|
||||||
|
|
||||||
- name: Upload binary
|
- name: Upload binary
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: deltachat-rpc-server-${{ matrix.artifact }}
|
name: deltachat-rpc-server-${{ matrix.arch }}
|
||||||
path: target/${{ matrix.target}}/release/${{ matrix.path }}
|
path: result/bin/deltachat-rpc-server.exe
|
||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
|
|
||||||
build_macos:
|
build_macos:
|
||||||
@@ -81,9 +73,7 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
arch: [x86_64, aarch64]
|
||||||
- arch: x86_64
|
|
||||||
- arch: aarch64
|
|
||||||
|
|
||||||
runs-on: macos-latest
|
runs-on: macos-latest
|
||||||
steps:
|
steps:
|
||||||
@@ -106,7 +96,7 @@ jobs:
|
|||||||
|
|
||||||
publish:
|
publish:
|
||||||
name: Build wheels and upload binaries to the release
|
name: Build wheels and upload binaries to the release
|
||||||
needs: ["build_linux", "build_windows", "build_macos"]
|
needs: ["build_linux", "build_macos"]
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
runs-on: "ubuntu-latest"
|
runs-on: "ubuntu-latest"
|
||||||
@@ -115,23 +105,47 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
show-progress: false
|
show-progress: false
|
||||||
|
|
||||||
- name: Download Linux binaries
|
- name: Download Linux aarch64 binary
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: linux
|
name: deltachat-rpc-server-aarch64-linux
|
||||||
path: dist/
|
path: deltachat-rpc-server-aarch64-linux.d
|
||||||
|
|
||||||
- name: Download win32 binary
|
- name: Download Linux armv7l binary
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: deltachat-rpc-server-win32.exe
|
name: deltachat-rpc-server-armv7l-linux
|
||||||
path: deltachat-rpc-server-win32.exe.d
|
path: deltachat-rpc-server-armv7l-linux.d
|
||||||
|
|
||||||
- name: Download win64 binary
|
- name: Download Linux armv6l binary
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: deltachat-rpc-server-win64.exe
|
name: deltachat-rpc-server-armv6l-linux
|
||||||
path: deltachat-rpc-server-win64.exe.d
|
path: deltachat-rpc-server-armv6l-linux.d
|
||||||
|
|
||||||
|
- name: Download Linux i686 binary
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: deltachat-rpc-server-i686-linux
|
||||||
|
path: deltachat-rpc-server-i686-linux.d
|
||||||
|
|
||||||
|
- name: Download Linux x86_64 binary
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: deltachat-rpc-server-x86_64-linux
|
||||||
|
path: deltachat-rpc-server-x86_64-linux.d
|
||||||
|
|
||||||
|
- name: Download Win32 binary
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: deltachat-rpc-server-win32
|
||||||
|
path: deltachat-rpc-server-win32.d
|
||||||
|
|
||||||
|
- name: Download Win64 binary
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: deltachat-rpc-server-win64
|
||||||
|
path: deltachat-rpc-server-win64.d
|
||||||
|
|
||||||
- name: Download macOS binary for x86_64
|
- name: Download macOS binary for x86_64
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v4
|
||||||
@@ -147,8 +161,14 @@ jobs:
|
|||||||
|
|
||||||
- name: Flatten dist/ directory
|
- name: Flatten dist/ directory
|
||||||
run: |
|
run: |
|
||||||
mv deltachat-rpc-server-win32.exe.d/deltachat-rpc-server.exe dist/deltachat-rpc-server-win32.exe
|
mkdir -p dist
|
||||||
mv deltachat-rpc-server-win64.exe.d/deltachat-rpc-server.exe dist/deltachat-rpc-server-win64.exe
|
mv deltachat-rpc-server-aarch64-linux.d/deltachat-rpc-server dist/deltachat-rpc-server-aarch64-linux
|
||||||
|
mv deltachat-rpc-server-armv7l-linux.d/deltachat-rpc-server dist/deltachat-rpc-server-armv7l-linux
|
||||||
|
mv deltachat-rpc-server-armv6l-linux.d/deltachat-rpc-server dist/deltachat-rpc-server-armv6l-linux
|
||||||
|
mv deltachat-rpc-server-i686-linux.d/deltachat-rpc-server dist/deltachat-rpc-server-i686-linux
|
||||||
|
mv deltachat-rpc-server-x86_64-linux.d/deltachat-rpc-server dist/deltachat-rpc-server-x86_64-linux
|
||||||
|
mv deltachat-rpc-server-win32.d/deltachat-rpc-server.exe dist/deltachat-rpc-server-win32.exe
|
||||||
|
mv deltachat-rpc-server-win64.d/deltachat-rpc-server.exe dist/deltachat-rpc-server-win64.exe
|
||||||
mv deltachat-rpc-server-x86_64-macos.d/deltachat-rpc-server dist/deltachat-rpc-server-x86_64-macos
|
mv deltachat-rpc-server-x86_64-macos.d/deltachat-rpc-server dist/deltachat-rpc-server-x86_64-macos
|
||||||
mv deltachat-rpc-server-aarch64-macos.d/deltachat-rpc-server dist/deltachat-rpc-server-aarch64-macos
|
mv deltachat-rpc-server-aarch64-macos.d/deltachat-rpc-server dist/deltachat-rpc-server-aarch64-macos
|
||||||
|
|
||||||
|
|||||||
@@ -35,8 +35,6 @@ and an own build machine.
|
|||||||
|
|
||||||
- `run_all.sh` builds Python wheels
|
- `run_all.sh` builds Python wheels
|
||||||
|
|
||||||
- `zig-rpc-server.sh` compiles binaries of `deltachat-rpc-server` using Zig toolchain statically linked against musl libc.
|
|
||||||
|
|
||||||
- `android-rpc-server.sh` compiles binaries of `deltachat-rpc-server` using Android NDK.
|
- `android-rpc-server.sh` compiles binaries of `deltachat-rpc-server` using Android NDK.
|
||||||
|
|
||||||
- `build-python-docs.sh` builds Python documentation into `dist/html/`.
|
- `build-python-docs.sh` builds Python documentation into `dist/html/`.
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
"""Build Python wheels for deltachat-rpc-server.
|
"""Build Python wheels for deltachat-rpc-server."""
|
||||||
Run scripts/zig-rpc-server.sh first."""
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from wheel.wheelfile import WheelFile
|
from wheel.wheelfile import WheelFile
|
||||||
import tomllib
|
import tomllib
|
||||||
@@ -157,9 +156,14 @@ def main():
|
|||||||
)
|
)
|
||||||
build_wheel(
|
build_wheel(
|
||||||
version,
|
version,
|
||||||
"dist/deltachat-rpc-server-armv7-linux",
|
"dist/deltachat-rpc-server-armv7l-linux",
|
||||||
"py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.musllinux_1_1_armv7l",
|
"py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.musllinux_1_1_armv7l",
|
||||||
)
|
)
|
||||||
|
build_wheel(
|
||||||
|
version,
|
||||||
|
"dist/deltachat-rpc-server-armv6l-linux",
|
||||||
|
"py3-none-manylinux_2_17_armv6l.manylinux2014_armv6l.musllinux_1_1_armv6l",
|
||||||
|
)
|
||||||
build_wheel(
|
build_wheel(
|
||||||
version,
|
version,
|
||||||
"dist/deltachat-rpc-server-aarch64-linux",
|
"dist/deltachat-rpc-server-aarch64-linux",
|
||||||
|
|||||||
@@ -1,57 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
# /// pyproject
|
|
||||||
# [run]
|
|
||||||
# dependencies = [
|
|
||||||
# "ziglang==0.11.0"
|
|
||||||
# ]
|
|
||||||
# ///
|
|
||||||
import os
|
|
||||||
import subprocess
|
|
||||||
import sys
|
|
||||||
|
|
||||||
|
|
||||||
def flag_filter(flag: str) -> bool:
|
|
||||||
# Workaround for <https://github.com/sfackler/rust-openssl/issues/2043>.
|
|
||||||
if flag == "-latomic":
|
|
||||||
return False
|
|
||||||
|
|
||||||
if flag == "-lc":
|
|
||||||
return False
|
|
||||||
if flag == "-Wl,-melf_i386":
|
|
||||||
return False
|
|
||||||
if "self-contained" in flag and "crt" in flag:
|
|
||||||
return False
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
args = [flag for flag in sys.argv[1:] if flag_filter(flag)]
|
|
||||||
zig_target = os.environ["ZIG_TARGET"]
|
|
||||||
zig_cpu = os.environ.get("ZIG_CPU")
|
|
||||||
if zig_cpu:
|
|
||||||
zig_cpu_args = ["-mcpu=" + zig_cpu]
|
|
||||||
args = [x for x in args if not x.startswith("-march")]
|
|
||||||
else:
|
|
||||||
zig_cpu_args = []
|
|
||||||
|
|
||||||
# Disable atomics and use locks instead in OpenSSL.
|
|
||||||
# Zig toolchains do not provide atomics.
|
|
||||||
# This is a workaround for <https://github.com/deltachat/deltachat-core-rust/issues/4799>
|
|
||||||
args += ["-DBROKEN_CLANG_ATOMICS"]
|
|
||||||
|
|
||||||
subprocess.run(
|
|
||||||
[
|
|
||||||
sys.executable,
|
|
||||||
"-m",
|
|
||||||
"ziglang",
|
|
||||||
"cc",
|
|
||||||
"-target",
|
|
||||||
zig_target,
|
|
||||||
*zig_cpu_args,
|
|
||||||
*args,
|
|
||||||
],
|
|
||||||
check=True,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
main()
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
#
|
|
||||||
# Build statically linked deltachat-rpc-server using zig.
|
|
||||||
|
|
||||||
set -x
|
|
||||||
set -e
|
|
||||||
|
|
||||||
unset RUSTFLAGS
|
|
||||||
|
|
||||||
# Pin Rust version to avoid uncontrolled changes in the compiler and linker flags.
|
|
||||||
export RUSTUP_TOOLCHAIN=1.72.0
|
|
||||||
|
|
||||||
rustup target add i686-unknown-linux-musl
|
|
||||||
CC="$PWD/scripts/zig-cc" \
|
|
||||||
TARGET_CC="$PWD/scripts/zig-cc" \
|
|
||||||
CARGO_TARGET_I686_UNKNOWN_LINUX_MUSL_LINKER="$PWD/scripts/zig-cc" \
|
|
||||||
LD="$PWD/scripts/zig-cc" \
|
|
||||||
ZIG_TARGET="x86-linux-musl" \
|
|
||||||
cargo build --release --target i686-unknown-linux-musl -p deltachat-rpc-server --features vendored
|
|
||||||
|
|
||||||
rustup target add armv7-unknown-linux-musleabihf
|
|
||||||
CC="$PWD/scripts/zig-cc" \
|
|
||||||
TARGET_CC="$PWD/scripts/zig-cc" \
|
|
||||||
CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABIHF_LINKER="$PWD/scripts/zig-cc" \
|
|
||||||
LD="$PWD/scripts/zig-cc" \
|
|
||||||
ZIG_TARGET="arm-linux-musleabihf" \
|
|
||||||
ZIG_CPU="generic+v7a+vfp3-d32+thumb2-neon" \
|
|
||||||
cargo build --release --target armv7-unknown-linux-musleabihf -p deltachat-rpc-server --features vendored
|
|
||||||
|
|
||||||
rustup target add x86_64-unknown-linux-musl
|
|
||||||
CC="$PWD/scripts/zig-cc" \
|
|
||||||
TARGET_CC="$PWD/scripts/zig-cc" \
|
|
||||||
CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_LINKER="$PWD/scripts/zig-cc" \
|
|
||||||
LD="$PWD/scripts/zig-cc" \
|
|
||||||
ZIG_TARGET="x86_64-linux-musl" \
|
|
||||||
cargo build --release --target x86_64-unknown-linux-musl -p deltachat-rpc-server --features vendored
|
|
||||||
|
|
||||||
rustup target add aarch64-unknown-linux-musl
|
|
||||||
CC="$PWD/scripts/zig-cc" \
|
|
||||||
TARGET_CC="$PWD/scripts/zig-cc" \
|
|
||||||
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER="$PWD/scripts/zig-cc" \
|
|
||||||
LD="$PWD/scripts/zig-cc" \
|
|
||||||
ZIG_TARGET="aarch64-linux-musl" \
|
|
||||||
cargo build --release --target aarch64-unknown-linux-musl -p deltachat-rpc-server --features vendored
|
|
||||||
|
|
||||||
mkdir -p dist
|
|
||||||
cp target/x86_64-unknown-linux-musl/release/deltachat-rpc-server dist/deltachat-rpc-server-x86_64-linux
|
|
||||||
cp target/i686-unknown-linux-musl/release/deltachat-rpc-server dist/deltachat-rpc-server-i686-linux
|
|
||||||
cp target/aarch64-unknown-linux-musl/release/deltachat-rpc-server dist/deltachat-rpc-server-aarch64-linux
|
|
||||||
cp target/armv7-unknown-linux-musleabihf/release/deltachat-rpc-server dist/deltachat-rpc-server-armv7-linux
|
|
||||||
Reference in New Issue
Block a user