Release 0.5.0: linux-riscv64 tarball, version bump (#165)
- release.yml: new linux-riscv64 job, cross-compiled on ubuntu-24.04 against ports.ubuntu.com riscv64 libs (the linux job's -dev packages incl. libasound2-dev:riscv64), CLI smoke-tested under qemu-riscv64; wired into the release job's needs so SHA256SUMS covers it. - packaging/linux/package.sh: CROSS_ARCH/CROSS_TARGET/CROSS_COMPILE/EMULATOR support. - clap-host: c_char -> u8 without a cast that is a no-op (clippy error) where c_char is u8. - Version 0.4.0 -> 0.5.0; docs list the riscv64 tarball. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
330a698397
commit
4410486fc2
|
|
@ -250,6 +250,76 @@ jobs:
|
||||||
path: dist/release/*.flatpak
|
path: dist/release/*.flatpak
|
||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
|
|
||||||
|
linux-riscv64:
|
||||||
|
name: Linux riscv64
|
||||||
|
needs: version
|
||||||
|
# Cross-compiled on x86_64 (no hosted RISC-V runners) against the runner's own Ubuntu release
|
||||||
|
# from ports.ubuntu.com, so the binaries need that release's glibc (24.04: 2.39). 22.04's
|
||||||
|
# riscv64 ports lag its amd64 updates, which breaks the multiarch install. tar.gz only; the
|
||||||
|
# CLI (which links no ALSA) is smoke-tested under QEMU. Plugin hosting (CLAP, VST3) is
|
||||||
|
# pure-Rust bindings plus dlopen, so it builds here unchanged; cpal uses ALSA (no JACK).
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
# No `environment: release`: this job signs nothing, so it gets no release secrets.
|
||||||
|
env:
|
||||||
|
SOUNDCRAFT_VERSION: ${{ needs.version.outputs.version }}
|
||||||
|
SOUNDCRAFT_BUILD_DATE: ${{ needs.version.outputs.date }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: dtolnay/rust-toolchain@stable
|
||||||
|
with:
|
||||||
|
targets: riscv64gc-unknown-linux-gnu
|
||||||
|
- uses: Swatinem/rust-cache@v2
|
||||||
|
with:
|
||||||
|
key: release-linux-riscv64
|
||||||
|
- name: Apply version override
|
||||||
|
if: inputs.version != ''
|
||||||
|
run: cargo xtask version set "$SOUNDCRAFT_VERSION"
|
||||||
|
- name: Install cross-compilation dependencies
|
||||||
|
run: |
|
||||||
|
. /etc/os-release
|
||||||
|
sudo dpkg --add-architecture riscv64
|
||||||
|
# Pin the existing (archive.ubuntu.com) sources to amd64; riscv64 comes from ports.
|
||||||
|
if [ -f /etc/apt/sources.list.d/ubuntu.sources ]; then
|
||||||
|
sudo sed -i '/^Types: deb/a Architectures: amd64' /etc/apt/sources.list.d/ubuntu.sources
|
||||||
|
fi
|
||||||
|
if [ -f /etc/apt/sources.list ]; then
|
||||||
|
sudo sed -i 's/^deb /deb [arch=amd64] /g' /etc/apt/sources.list
|
||||||
|
sudo sed -i 's/^deb-src /deb-src [arch=amd64] /g' /etc/apt/sources.list
|
||||||
|
fi
|
||||||
|
for suite in "$VERSION_CODENAME" "$VERSION_CODENAME-updates" "$VERSION_CODENAME-security"; do
|
||||||
|
echo "deb [arch=riscv64] http://ports.ubuntu.com/ubuntu-ports $suite main universe restricted multiverse"
|
||||||
|
done | sudo tee /etc/apt/sources.list.d/riscv64.list
|
||||||
|
sudo apt-get update
|
||||||
|
# The riscv64 twins of the linux job's -dev packages; libasound2-dev is cpal's ALSA backend.
|
||||||
|
sudo apt-get install -y --no-install-recommends \
|
||||||
|
gcc-riscv64-linux-gnu binutils-riscv64-linux-gnu libc6-dev-riscv64-cross libc6-dev:riscv64 qemu-user \
|
||||||
|
pkg-config file desktop-file-utils appstream \
|
||||||
|
libxkbcommon-dev:riscv64 libwayland-dev:riscv64 libx11-dev:riscv64 libxrandr-dev:riscv64 \
|
||||||
|
libxi-dev:riscv64 libgl1-mesa-dev:riscv64 libasound2-dev:riscv64
|
||||||
|
- name: Build and package (tar.gz)
|
||||||
|
env:
|
||||||
|
CARGO_TARGET_RISCV64GC_UNKNOWN_LINUX_GNU_LINKER: riscv64-linux-gnu-gcc
|
||||||
|
PKG_CONFIG_SYSROOT_DIR: /
|
||||||
|
PKG_CONFIG_PATH: /usr/lib/riscv64-linux-gnu/pkgconfig:/usr/share/pkgconfig
|
||||||
|
PKG_CONFIG_ALLOW_CROSS: "1"
|
||||||
|
CROSS_ARCH: riscv64
|
||||||
|
CROSS_TARGET: riscv64gc-unknown-linux-gnu
|
||||||
|
CROSS_COMPILE: riscv64-linux-gnu-
|
||||||
|
EMULATOR: qemu-riscv64
|
||||||
|
QEMU_LD_PREFIX: /usr/riscv64-linux-gnu
|
||||||
|
run: packaging/linux/package.sh --formats tar
|
||||||
|
- name: Check the package
|
||||||
|
run: |
|
||||||
|
file target/riscv64gc-unknown-linux-gnu/release/soundcraft | grep -q 'RISC-V'
|
||||||
|
# cpal's ALSA backend: the one audio library linked at build time (see nfpm.yaml).
|
||||||
|
riscv64-linux-gnu-readelf -d target/riscv64gc-unknown-linux-gnu/release/soundcraft | grep -q 'libasound'
|
||||||
|
tar -tzf "dist/release/soundcraft-$SOUNDCRAFT_VERSION-linux-riscv64.tar.gz" | grep -E 'bin/soundcraft$'
|
||||||
|
- uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: release-linux-riscv64
|
||||||
|
path: dist/release/*.tar.gz
|
||||||
|
if-no-files-found: error
|
||||||
|
|
||||||
freebsd:
|
freebsd:
|
||||||
name: FreeBSD x86_64
|
name: FreeBSD x86_64
|
||||||
needs: version
|
needs: version
|
||||||
|
|
@ -328,7 +398,7 @@ jobs:
|
||||||
release:
|
release:
|
||||||
name: Draft GitHub Release
|
name: Draft GitHub Release
|
||||||
# Needs the signed jobs, which only run on the `release` branch: a branch dispatch never drafts.
|
# Needs the signed jobs, which only run on the `release` branch: a branch dispatch never drafts.
|
||||||
needs: [version, macos, windows, linux, flatpak, freebsd, web]
|
needs: [version, macos, windows, linux, linux-riscv64, flatpak, freebsd, web]
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
environment: release
|
environment: release
|
||||||
permissions:
|
permissions:
|
||||||
|
|
|
||||||
|
|
@ -66,7 +66,7 @@ Parity is measured, not guessed: `crates/engine/catalog/menus.txt` lists the inc
|
||||||
`cargo xtask ci` = fmt check, `clippy --workspace --all-targets -D warnings`, tests, assets, layers, wasm check. Commit after each arc of work that builds; one topic per commit.
|
`cargo xtask ci` = fmt check, `clippy --workspace --all-targets -D warnings`, tests, assets, layers, wasm check. Commit after each arc of work that builds; one topic per commit.
|
||||||
|
|
||||||
## Release
|
## Release
|
||||||
Push to the `release` branch to build signed installers for macOS (universal DMG), Windows (x64/x86 MSI + zip), Linux (AppImage, deb, rpm, tar.gz, Flatpak manifest), FreeBSD and Web (wasm zip). Version: `cargo xtask version [set X.Y.Z]`. See `docs/release-playbook.md` and craftrules `release/playbook.md`.
|
Push to the `release` branch to build signed installers for macOS (universal DMG), Windows (x64/x86 MSI + zip), Linux (AppImage, deb, rpm, tar.gz, Flatpak; riscv64 tar.gz), FreeBSD and Web (wasm zip). Version: `cargo xtask version [set X.Y.Z]`. See `docs/release-playbook.md` and craftrules `release/playbook.md`.
|
||||||
|
|
||||||
## Roadmap
|
## Roadmap
|
||||||
`ROADMAP.md` (committed) is the one-page summary (stage, numbers, dimensions, languages, progress log); milestones live in `docs/roadmap.md`. Update both whenever a milestone lands, and close or shrink the matching `docs/gaps.md` entry.
|
`ROADMAP.md` (committed) is the one-page summary (stage, numbers, dimensions, languages, progress log); milestones live in `docs/roadmap.md`. Update both whenever a milestone lands, and close or shrink the matching `docs/gaps.md` entry.
|
||||||
|
|
|
||||||
|
|
@ -3403,7 +3403,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "soundcraft"
|
name = "soundcraft"
|
||||||
version = "0.4.0"
|
version = "0.5.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"eframe",
|
"eframe",
|
||||||
"egui",
|
"egui",
|
||||||
|
|
@ -3419,7 +3419,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "soundcraft-au-host"
|
name = "soundcraft-au-host"
|
||||||
version = "0.4.0"
|
version = "0.5.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"log",
|
"log",
|
||||||
"serde",
|
"serde",
|
||||||
|
|
@ -3429,7 +3429,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "soundcraft-audio-io"
|
name = "soundcraft-audio-io"
|
||||||
version = "0.4.0"
|
version = "0.5.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"log",
|
"log",
|
||||||
"proptest",
|
"proptest",
|
||||||
|
|
@ -3441,7 +3441,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "soundcraft-automation"
|
name = "soundcraft-automation"
|
||||||
version = "0.4.0"
|
version = "0.5.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"log",
|
"log",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
|
|
@ -3451,7 +3451,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "soundcraft-clap-host"
|
name = "soundcraft-clap-host"
|
||||||
version = "0.4.0"
|
version = "0.5.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap-sys",
|
"clap-sys",
|
||||||
"libloading",
|
"libloading",
|
||||||
|
|
@ -3463,7 +3463,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "soundcraft-cli"
|
name = "soundcraft-cli"
|
||||||
version = "0.4.0"
|
version = "0.5.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"soundcraft-audio-io",
|
"soundcraft-audio-io",
|
||||||
|
|
@ -3474,7 +3474,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "soundcraft-dsp"
|
name = "soundcraft-dsp"
|
||||||
version = "0.4.0"
|
version = "0.5.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"log",
|
"log",
|
||||||
"proptest",
|
"proptest",
|
||||||
|
|
@ -3485,7 +3485,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "soundcraft-engine"
|
name = "soundcraft-engine"
|
||||||
version = "0.4.0"
|
version = "0.5.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"log",
|
"log",
|
||||||
"proptest",
|
"proptest",
|
||||||
|
|
@ -3506,7 +3506,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "soundcraft-midi"
|
name = "soundcraft-midi"
|
||||||
version = "0.4.0"
|
version = "0.5.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proptest",
|
"proptest",
|
||||||
"serde",
|
"serde",
|
||||||
|
|
@ -3516,7 +3516,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "soundcraft-mix"
|
name = "soundcraft-mix"
|
||||||
version = "0.4.0"
|
version = "0.5.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"log",
|
"log",
|
||||||
"rayon",
|
"rayon",
|
||||||
|
|
@ -3532,7 +3532,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "soundcraft-model"
|
name = "soundcraft-model"
|
||||||
version = "0.4.0"
|
version = "0.5.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proptest",
|
"proptest",
|
||||||
"serde",
|
"serde",
|
||||||
|
|
@ -3545,7 +3545,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "soundcraft-playback"
|
name = "soundcraft-playback"
|
||||||
version = "0.4.0"
|
version = "0.5.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cpal",
|
"cpal",
|
||||||
"log",
|
"log",
|
||||||
|
|
@ -3558,7 +3558,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "soundcraft-time"
|
name = "soundcraft-time"
|
||||||
version = "0.4.0"
|
version = "0.5.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proptest",
|
"proptest",
|
||||||
"serde",
|
"serde",
|
||||||
|
|
@ -3568,7 +3568,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "soundcraft-ui-egui"
|
name = "soundcraft-ui-egui"
|
||||||
version = "0.4.0"
|
version = "0.5.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"egui",
|
"egui",
|
||||||
"egui_kittest",
|
"egui_kittest",
|
||||||
|
|
@ -3593,7 +3593,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "soundcraft-video"
|
name = "soundcraft-video"
|
||||||
version = "0.4.0"
|
version = "0.5.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"image",
|
"image",
|
||||||
"proptest",
|
"proptest",
|
||||||
|
|
@ -3604,7 +3604,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "soundcraft-vst3-host"
|
name = "soundcraft-vst3-host"
|
||||||
version = "0.4.0"
|
version = "0.5.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libloading",
|
"libloading",
|
||||||
"log",
|
"log",
|
||||||
|
|
@ -3619,7 +3619,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "soundcraft-web"
|
name = "soundcraft-web"
|
||||||
version = "0.4.0"
|
version = "0.5.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"eframe",
|
"eframe",
|
||||||
"egui",
|
"egui",
|
||||||
|
|
@ -5166,7 +5166,7 @@ checksum = "e450f9b2ed1dff33c94c12589a87338689467b9c4f5d8a5710bd09a847d2c8a7"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "xtask"
|
name = "xtask"
|
||||||
version = "0.4.0"
|
version = "0.5.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde_json",
|
"serde_json",
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ members = ["crates/*", "apps/*", "xtask"]
|
||||||
default-members = ["crates/*", "apps/*", "xtask"]
|
default-members = ["crates/*", "apps/*", "xtask"]
|
||||||
|
|
||||||
[workspace.package]
|
[workspace.package]
|
||||||
version = "0.4.0"
|
version = "0.5.0"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
license = "MIT OR Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
rust-version = "1.90"
|
rust-version = "1.90"
|
||||||
|
|
|
||||||
|
|
@ -293,6 +293,8 @@ and web backend defaults are unchanged.
|
||||||
| Fedora/RHEL/openSUSE | `soundcraft-<ver>-linux-x86_64.rpm` | `soundcraft-<ver>-linux-aarch64.rpm` | |
|
| Fedora/RHEL/openSUSE | `soundcraft-<ver>-linux-x86_64.rpm` | `soundcraft-<ver>-linux-aarch64.rpm` | |
|
||||||
| Tarball | `soundcraft-<ver>-linux-x86_64.tar.gz` | `soundcraft-<ver>-linux-aarch64.tar.gz` | Unpack anywhere |
|
| Tarball | `soundcraft-<ver>-linux-x86_64.tar.gz` | `soundcraft-<ver>-linux-aarch64.tar.gz` | Unpack anywhere |
|
||||||
|
|
||||||
|
RISC-V (riscv64): `soundcraft-<ver>-linux-riscv64.tar.gz`, a tarball only (glibc 2.39+, e.g. Ubuntu 24.04).
|
||||||
|
|
||||||
### FreeBSD
|
### FreeBSD
|
||||||
|
|
||||||
| Build | File |
|
| Build | File |
|
||||||
|
|
|
||||||
|
|
@ -2,36 +2,36 @@
|
||||||
"schema": 1,
|
"schema": 1,
|
||||||
"repo": "storytold/soundcraft",
|
"repo": "storytold/soundcraft",
|
||||||
"branch": "main",
|
"branch": "main",
|
||||||
"head": "caa4872df2aa81a21e401071d2e0d09002658e9e",
|
"head": "330a6983973dc2043bb1fa0f0ba67fa07ae50685",
|
||||||
"head_date": "2026-10-10T00:50:08Z",
|
"head_date": "2026-10-10T18:08:49Z",
|
||||||
"commits": 98,
|
"commits": 111,
|
||||||
"unattributed_commits": 0,
|
"unattributed_commits": 0,
|
||||||
"contributors": [
|
"contributors": [
|
||||||
{
|
{
|
||||||
"login": "echelon",
|
"login": "echelon",
|
||||||
"people_entry": true,
|
"people_entry": true,
|
||||||
"github_name": null,
|
"github_name": null,
|
||||||
"prs": 5,
|
"prs": 6,
|
||||||
"commits": 56,
|
"commits": 58,
|
||||||
"lines_added": 79132,
|
"lines_added": 80505,
|
||||||
"lines_deleted": 1983,
|
"lines_deleted": 2222,
|
||||||
"binary_added": 23,
|
"binary_added": 23,
|
||||||
"binary_deleted": 0,
|
"binary_deleted": 0,
|
||||||
"first_commit": "2026-10-06T00:08:04Z",
|
"first_commit": "2026-10-06T00:08:04Z",
|
||||||
"last_commit": "2026-10-10T00:50:08Z"
|
"last_commit": "2026-10-10T18:08:49Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"login": "reoniazx",
|
"login": "reoniazx",
|
||||||
"people_entry": false,
|
"people_entry": false,
|
||||||
"github_name": null,
|
"github_name": null,
|
||||||
"prs": 3,
|
"prs": 5,
|
||||||
"commits": 7,
|
"commits": 9,
|
||||||
"lines_added": 453,
|
"lines_added": 649,
|
||||||
"lines_deleted": 62,
|
"lines_deleted": 64,
|
||||||
"binary_added": 0,
|
"binary_added": 0,
|
||||||
"binary_deleted": 0,
|
"binary_deleted": 0,
|
||||||
"first_commit": "2026-10-08T06:10:03Z",
|
"first_commit": "2026-10-08T06:10:03Z",
|
||||||
"last_commit": "2026-10-09T15:12:12Z"
|
"last_commit": "2026-10-10T05:15:18Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"login": "switch87",
|
"login": "switch87",
|
||||||
|
|
@ -115,14 +115,14 @@
|
||||||
"login": "vbasky",
|
"login": "vbasky",
|
||||||
"people_entry": false,
|
"people_entry": false,
|
||||||
"github_name": null,
|
"github_name": null,
|
||||||
"prs": 3,
|
"prs": 10,
|
||||||
"commits": 4,
|
"commits": 11,
|
||||||
"lines_added": 829,
|
"lines_added": 1039,
|
||||||
"lines_deleted": 137,
|
"lines_deleted": 174,
|
||||||
"binary_added": 0,
|
"binary_added": 0,
|
||||||
"binary_deleted": 0,
|
"binary_deleted": 0,
|
||||||
"first_commit": "2026-10-09T00:12:26Z",
|
"first_commit": "2026-10-09T00:12:26Z",
|
||||||
"last_commit": "2026-10-09T22:37:04Z"
|
"last_commit": "2026-10-10T05:22:24Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"login": "DWAA1660",
|
"login": "DWAA1660",
|
||||||
|
|
@ -167,14 +167,27 @@
|
||||||
"login": "grovebit",
|
"login": "grovebit",
|
||||||
"people_entry": false,
|
"people_entry": false,
|
||||||
"github_name": null,
|
"github_name": null,
|
||||||
"prs": 1,
|
"prs": 2,
|
||||||
"commits": 1,
|
"commits": 2,
|
||||||
"lines_added": 198,
|
"lines_added": 218,
|
||||||
"lines_deleted": 5,
|
"lines_deleted": 15,
|
||||||
"binary_added": 0,
|
"binary_added": 0,
|
||||||
"binary_deleted": 0,
|
"binary_deleted": 0,
|
||||||
"first_commit": "2026-10-09T21:45:39Z",
|
"first_commit": "2026-10-09T21:45:39Z",
|
||||||
"last_commit": "2026-10-09T21:45:39Z"
|
"last_commit": "2026-10-10T01:34:26Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"login": "coygeek",
|
||||||
|
"people_entry": false,
|
||||||
|
"github_name": null,
|
||||||
|
"prs": 1,
|
||||||
|
"commits": 1,
|
||||||
|
"lines_added": 125,
|
||||||
|
"lines_deleted": 91,
|
||||||
|
"binary_added": 0,
|
||||||
|
"binary_deleted": 0,
|
||||||
|
"first_commit": "2026-10-10T01:28:07Z",
|
||||||
|
"last_commit": "2026-10-10T01:28:07Z"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"models": [
|
"models": [
|
||||||
|
|
@ -183,9 +196,9 @@
|
||||||
"company": "Anthropic",
|
"company": "Anthropic",
|
||||||
"model": "Claude Opus",
|
"model": "Claude Opus",
|
||||||
"version": "5.5",
|
"version": "5.5",
|
||||||
"commits": 71,
|
"commits": 73,
|
||||||
"lines_added": 80906,
|
"lines_added": 82279,
|
||||||
"lines_deleted": 2305
|
"lines_deleted": 2544
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "anthropic/claude-haiku/5.5",
|
"id": "anthropic/claude-haiku/5.5",
|
||||||
|
|
|
||||||
|
|
@ -71,8 +71,9 @@ unsafe fn read_cstr(p: *const c_char) -> Option<String> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Reads a fixed-size `char[N]` name buffer, stopping at the first NUL or the end of the array.
|
/// Reads a fixed-size `char[N]` name buffer, stopping at the first NUL or the end of the array.
|
||||||
|
/// `c_char` is `i8` on x86 and `u8` on ARM/RISC-V Linux; the byte reinterpretation is the same for both.
|
||||||
fn read_name(buf: &[c_char]) -> String {
|
fn read_name(buf: &[c_char]) -> String {
|
||||||
let bytes: Vec<u8> = buf.iter().take_while(|c| **c != 0).map(|c| *c as u8).collect();
|
let bytes: Vec<u8> = buf.iter().take_while(|c| **c != 0).map(|c| u8::from_ne_bytes(c.to_ne_bytes())).collect();
|
||||||
String::from_utf8_lossy(&bytes).into_owned()
|
String::from_utf8_lossy(&bytes).into_owned()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -50,6 +50,7 @@ web build and are checked, the signing jobs are refused, and no release is draft
|
||||||
| Windows 11 ARM64 | `soundcraft-<v>-windows-arm64.msi`, `soundcraft-<v>-windows-arm64-portable.zip` | `windows-latest` (cross-compiled; `windows-arm64.yml` installs and runs it on ARM64) |
|
| Windows 11 ARM64 | `soundcraft-<v>-windows-arm64.msi`, `soundcraft-<v>-windows-arm64-portable.zip` | `windows-latest` (cross-compiled; `windows-arm64.yml` installs and runs it on ARM64) |
|
||||||
| Linux x86_64 | `soundcraft-<v>-linux-x86_64.{AppImage,deb,rpm,tar.gz}` | `ubuntu-22.04` |
|
| Linux x86_64 | `soundcraft-<v>-linux-x86_64.{AppImage,deb,rpm,tar.gz}` | `ubuntu-22.04` |
|
||||||
| Linux aarch64 | `soundcraft-<v>-linux-aarch64.{AppImage,deb,rpm,tar.gz}` | `ubuntu-22.04-arm` |
|
| Linux aarch64 | `soundcraft-<v>-linux-aarch64.{AppImage,deb,rpm,tar.gz}` | `ubuntu-22.04-arm` |
|
||||||
|
| Linux riscv64 | `soundcraft-<v>-linux-riscv64.tar.gz` (glibc 2.39+) | `ubuntu-24.04` (cross-compiled; CLI smoke-tested under QEMU) |
|
||||||
| AppImage updates | `soundcraft-<v>-linux-{x86_64,aarch64}.AppImage.zsync` | with the AppImage |
|
| AppImage updates | `soundcraft-<v>-linux-{x86_64,aarch64}.AppImage.zsync` | with the AppImage |
|
||||||
| Flatpak x86_64, aarch64 | `soundcraft-<v>-linux-{x86_64,aarch64}.flatpak` | `ubuntu-24.04`, `ubuntu-24.04-arm` (repackages the Linux tarball) |
|
| Flatpak x86_64, aarch64 | `soundcraft-<v>-linux-{x86_64,aarch64}.flatpak` | `ubuntu-24.04`, `ubuntu-24.04-arm` (repackages the Linux tarball) |
|
||||||
| FreeBSD 14 x86_64 | `soundcraft-<v>-freebsd-x86_64.tar.gz` (a `/usr/local` tree) | FreeBSD 14.3 VM on `ubuntu-latest` |
|
| FreeBSD 14 x86_64 | `soundcraft-<v>-freebsd-x86_64.tar.gz` (a `/usr/local` tree) | FreeBSD 14.3 VM on `ubuntu-latest` |
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Build and package SoundCraft for Linux (<arch> is x86_64 or aarch64):
|
# Build and package SoundCraft for Linux (<arch> is x86_64 or aarch64, or riscv64 when cross-compiling):
|
||||||
#
|
#
|
||||||
# $DIST/soundcraft-<version>-linux-<arch>.AppImage any distro with glibc >= the build host's
|
# $DIST/soundcraft-<version>-linux-<arch>.AppImage any distro with glibc >= the build host's
|
||||||
# $DIST/soundcraft-<version>-linux-<arch>.AppImage.zsync delta updates (needs zsyncmake)
|
# $DIST/soundcraft-<version>-linux-<arch>.AppImage.zsync delta updates (needs zsyncmake)
|
||||||
|
|
@ -13,6 +13,10 @@
|
||||||
# (downloaded into $CARGO_TARGET_DIR if missing). Build on an old distro (CI: Ubuntu 22.04,
|
# (downloaded into $CARGO_TARGET_DIR if missing). Build on an old distro (CI: Ubuntu 22.04,
|
||||||
# glibc 2.35) so the binaries run on newer ones. Optional: desktop-file-validate, appstreamcli,
|
# glibc 2.35) so the binaries run on newer ones. Optional: desktop-file-validate, appstreamcli,
|
||||||
# zsyncmake (the zsync package) for the AppImage's .zsync.
|
# zsyncmake (the zsync package) for the AppImage's .zsync.
|
||||||
|
#
|
||||||
|
# Cross-compiling (CI's linux-riscv64 job, tar.gz only): set CROSS_ARCH (riscv64), CROSS_TARGET
|
||||||
|
# (the Rust target), CROSS_COMPILE (the binutils prefix, for strip) and optionally EMULATOR
|
||||||
|
# (e.g. qemu-riscv64) to smoke-test the CLI.
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
# shellcheck source=../env.sh
|
# shellcheck source=../env.sh
|
||||||
. "$(dirname "${BASH_SOURCE[0]}")/../env.sh"
|
. "$(dirname "${BASH_SOURCE[0]}")/../env.sh"
|
||||||
|
|
@ -25,15 +29,16 @@ while [ $# -gt 0 ]; do
|
||||||
case "$1" in
|
case "$1" in
|
||||||
--skip-build) SKIP_BUILD=1; shift ;;
|
--skip-build) SKIP_BUILD=1; shift ;;
|
||||||
--formats) FORMATS="$2"; shift 2 ;;
|
--formats) FORMATS="$2"; shift 2 ;;
|
||||||
-h | --help) sed -n '2,17p' "$0"; exit 0 ;;
|
-h | --help) sed -n '2,19p' "$0"; exit 0 ;;
|
||||||
*) echo "unknown argument: $1" >&2; exit 2 ;;
|
*) echo "unknown argument: $1" >&2; exit 2 ;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
ARCH="$(uname -m)"
|
ARCH="${CROSS_ARCH:-$(uname -m)}"
|
||||||
case "$ARCH" in
|
case "$ARCH" in
|
||||||
x86_64) DEB_ARCH=amd64 ;;
|
x86_64) DEB_ARCH=amd64 ;;
|
||||||
aarch64 | arm64) ARCH=aarch64; DEB_ARCH=arm64 ;;
|
aarch64 | arm64) ARCH=aarch64; DEB_ARCH=arm64 ;;
|
||||||
|
riscv64) DEB_ARCH=riscv64 ;;
|
||||||
*) echo "unsupported architecture $ARCH" >&2; exit 2 ;;
|
*) echo "unsupported architecture $ARCH" >&2; exit 2 ;;
|
||||||
esac
|
esac
|
||||||
export SOUNDCRAFT_MAINTAINER="${SOUNDCRAFT_MAINTAINER:-SoundCraft maintainers <soundcraft@storyteller.ai>}"
|
export SOUNDCRAFT_MAINTAINER="${SOUNDCRAFT_MAINTAINER:-SoundCraft maintainers <soundcraft@storyteller.ai>}"
|
||||||
|
|
@ -42,9 +47,13 @@ BASENAME="soundcraft-$VERSION-linux-$ARCH"
|
||||||
echo "==> SoundCraft $VERSION for Linux $ARCH ($FORMATS)"
|
echo "==> SoundCraft $VERSION for Linux $ARCH ($FORMATS)"
|
||||||
|
|
||||||
if [ "$SKIP_BUILD" = 0 ]; then
|
if [ "$SKIP_BUILD" = 0 ]; then
|
||||||
(cd "$ROOT" && cargo build --release --locked -p soundcraft -p soundcraft-cli)
|
if [ -n "${CROSS_TARGET:-}" ]; then
|
||||||
|
(cd "$ROOT" && cargo build --release --locked -p soundcraft -p soundcraft-cli --target "$CROSS_TARGET")
|
||||||
|
else
|
||||||
|
(cd "$ROOT" && cargo build --release --locked -p soundcraft -p soundcraft-cli)
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
BIN="$CARGO_TARGET_DIR/release"
|
BIN="$CARGO_TARGET_DIR/${CROSS_TARGET:+$CROSS_TARGET/}release"
|
||||||
WORK="$CARGO_TARGET_DIR/linux-package"
|
WORK="$CARGO_TARGET_DIR/linux-package"
|
||||||
STAGE="$WORK/root"
|
STAGE="$WORK/root"
|
||||||
rm -rf "$WORK"
|
rm -rf "$WORK"
|
||||||
|
|
@ -52,7 +61,7 @@ rm -rf "$WORK"
|
||||||
# ---- stage an FHS tree (shared by every format) -------------------------------------------------
|
# ---- stage an FHS tree (shared by every format) -------------------------------------------------
|
||||||
install -Dm755 "$BIN/soundcraft" "$STAGE/usr/bin/soundcraft"
|
install -Dm755 "$BIN/soundcraft" "$STAGE/usr/bin/soundcraft"
|
||||||
install -Dm755 "$BIN/soundcraft-cli" "$STAGE/usr/bin/soundcraft-cli"
|
install -Dm755 "$BIN/soundcraft-cli" "$STAGE/usr/bin/soundcraft-cli"
|
||||||
strip "$STAGE/usr/bin/soundcraft" "$STAGE/usr/bin/soundcraft-cli" 2>/dev/null || true
|
"${CROSS_COMPILE:-}strip" "$STAGE/usr/bin/soundcraft" "$STAGE/usr/bin/soundcraft-cli" 2>/dev/null || true
|
||||||
install -Dm644 "$HERE/$APP_ID.desktop" "$STAGE/usr/share/applications/$APP_ID.desktop"
|
install -Dm644 "$HERE/$APP_ID.desktop" "$STAGE/usr/share/applications/$APP_ID.desktop"
|
||||||
install -Dm644 "$HERE/$APP_ID.mime.xml" "$STAGE/usr/share/mime/packages/$APP_ID.xml"
|
install -Dm644 "$HERE/$APP_ID.mime.xml" "$STAGE/usr/share/mime/packages/$APP_ID.xml"
|
||||||
mkdir -p "$STAGE/usr/share/metainfo"
|
mkdir -p "$STAGE/usr/share/metainfo"
|
||||||
|
|
@ -135,6 +144,10 @@ if has appimage; then
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
"$STAGE/usr/bin/soundcraft-cli" --version
|
if [ -z "${CROSS_TARGET:-}" ]; then
|
||||||
|
"$STAGE/usr/bin/soundcraft-cli" --version
|
||||||
|
elif [ -n "${EMULATOR:-}" ]; then
|
||||||
|
"$EMULATOR" "$STAGE/usr/bin/soundcraft-cli" --version
|
||||||
|
fi
|
||||||
echo "==> done"
|
echo "==> done"
|
||||||
ls -lh "$DIST"
|
ls -lh "$DIST"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue