midi-harbor/.goreleaser.yaml
2026-09-28 13:59:10 -05:00

205 lines
7 KiB
YAML

# Builds every release artifact from one machine, inside the image packaging/cross/Dockerfile
# makes. Run it through the Makefile: `make snapshot` or `make release`.
version: 2
project_name: midi-harbor
builds:
# The full build, with the graphical interface, for Linux and Windows.
- id: full
builder: rust
binary: midi-harbor
targets:
# Linux against Debian 12's glibc, the sysroots' release.
- x86_64-unknown-linux-gnu.2.36
- aarch64-unknown-linux-gnu.2.36
- x86_64-pc-windows-gnu
flags: &flags
- --release
- --locked
- --package=midi-harbor
env: &env
- MACOSX_DEPLOYMENT_TARGET=11.0
- SDKROOT=/osxcross/MacOSX.sdk
- PKG_CONFIG_ALLOW_CROSS=1
- PKG_CONFIG_SYSROOT_DIR={{ if eq .Os "linux" }}/sysroot/linux_{{ .Arch }}{{ end }}
- PKG_CONFIG_LIBDIR={{ if eq .Os "linux" }}/sysroot/linux_{{ .Arch }}/usr/lib/{{ if eq .Arch "amd64" }}x86_64{{ else }}aarch64{{ end }}-linux-gnu/pkgconfig{{ end }}
# cargo-zigbuild hands bindgen zig's own libc headers in place of the system's, so the
# sysroot's are added after them for the Avahi bindings.
# Room in the Mach-O header for the code signature packaging/macos/bundle.sh adds, which zig
# otherwise leaves too little of.
- CARGO_TARGET_X86_64_APPLE_DARWIN_RUSTFLAGS=-C link-arg=-Wl,-headerpad_max_install_names
- CARGO_TARGET_AARCH64_APPLE_DARWIN_RUSTFLAGS=-C link-arg=-Wl,-headerpad_max_install_names
- BINDGEN_EXTRA_CLANG_ARGS={{ if eq .Os "linux" }}-idirafter /sysroot/linux_{{ .Arch }}/usr/include -idirafter /sysroot/linux_{{ .Arch }}/usr/include/{{ if eq .Arch "amd64" }}x86_64{{ else }}aarch64{{ end }}-linux-gnu{{ end }}
# The full build for the Mac, which ships only inside the app on the disk image, never in an
# archive of its own.
- id: full-macos
builder: rust
binary: midi-harbor
targets:
- x86_64-apple-darwin
- aarch64-apple-darwin
flags: *flags
env: *env
# The headless build carries none of the GUI toolkit, for servers and machines without a
# display. It is the only loose binary the Mac gets.
- id: headless
builder: rust
binary: midi-harbor
targets:
- x86_64-unknown-linux-gnu.2.36
- aarch64-unknown-linux-gnu.2.36
- x86_64-apple-darwin
- aarch64-apple-darwin
flags:
- --release
- --locked
- --package=midi-harbor
- --no-default-features
env: *env
# One binary for both kinds of Mac, which the app bundle carries. Its id keeps it out of the
# archives, which on the Mac hold only the headless binaries.
universal_binaries:
- id: macos-app
ids: [full-macos]
name_template: midi-harbor
hooks:
# GoReleaser's own edition makes no app bundles or disk images, so the script does.
post:
- cmd: packaging/macos/bundle.sh "{{ .Path }}" "{{ .Version }}" dist/macos dist
archives:
- id: full
ids: [full]
name_template: "{{ .ProjectName }}-{{ .Version }}.{{ .Os }}-{{ .Arch }}"
formats: [tar.gz]
format_overrides:
- goos: windows
formats: [zip]
files: &files
- LICENSE.txt
- src: docs/*.md
dst: docs
- id: headless
ids: [headless]
name_template: "{{ .ProjectName }}-headless-{{ .Version }}.{{ .Os }}-{{ .Arch }}"
formats: [tar.gz]
files: *files
nfpms:
- id: full
ids: [full]
package_name: midi-harbor
file_name_template: "{{ .ConventionalFileName }}"
formats: [deb, rpm]
vendor: Midi Harbor
homepage: https://github.com/grmrgecko/midi-harbor
# Taken from the environment at build time rather than written into the repository.
maintainer: "{{ .Env.MIDI_HARBOR_MAINTAINER }}"
description: &description |-
Manages virtual MIDI ports, MIDI hardware, RTP-MIDI network sessions and
Bluetooth LE MIDI links, and reconnects every one of them by itself after
sleep, network changes, unplugging and restarts.
license: MIT
section: sound
conflicts: [midi-harbor-headless]
replaces: [midi-harbor-headless]
contents:
# Named for the window's application ID, which is how a desktop pairs the running window
# with this entry and its icon.
- src: packaging/linux/com.mrgeckosmedia.MidiHarbor.desktop
dst: /usr/share/applications/com.mrgeckosmedia.MidiHarbor.desktop
- src: Icon.svg
dst: /usr/share/icons/hicolor/scalable/apps/com.mrgeckosmedia.MidiHarbor.svg
- src: LICENSE.txt
dst: /usr/share/doc/midi-harbor/copyright
- src: docs/*.md
dst: /usr/share/doc/midi-harbor/
overrides:
deb:
dependencies:
# The binary uses symbols up to glibc 2.35, which nfpm does not detect by itself.
- libc6 (>= 2.35)
- libasound2
- libavahi-client3
- libavahi-common3
- libdbus-1-3
- libxkbcommon0
# Without these the package still works, but sessions are not advertised and Bluetooth
# is unavailable. The rest are what the interface loads while it runs rather than links
# against: one of X11 or Wayland to draw a window, and one of EGL or Vulkan to render.
recommends:
- avahi-daemon
- bluez
- libwayland-client0
- libx11-6
- libx11-xcb1
- libxi6
- libxkbcommon-x11-0
- libegl1
- libvulkan1
rpm:
dependencies:
- glibc >= 2.35
- alsa-lib
- avahi-libs
- dbus-libs
- libxkbcommon
recommends:
- avahi
- bluez
- libwayland-client
- libX11
- libX11-xcb
- libXi
- libxkbcommon-x11
- libglvnd-egl
- vulkan-loader
- id: headless
ids: [headless]
package_name: midi-harbor-headless
file_name_template: "{{ .ConventionalFileName }}"
formats: [deb, rpm]
vendor: Midi Harbor
homepage: https://github.com/grmrgecko/midi-harbor
maintainer: "{{ .Env.MIDI_HARBOR_MAINTAINER }}"
description: *description
license: MIT
section: sound
conflicts: [midi-harbor]
replaces: [midi-harbor]
contents:
- src: LICENSE.txt
dst: /usr/share/doc/midi-harbor-headless/copyright
- src: docs/*.md
dst: /usr/share/doc/midi-harbor-headless/
overrides:
deb:
dependencies: ["libc6 (>= 2.35)", libasound2, libavahi-client3, libavahi-common3, libdbus-1-3]
recommends: [avahi-daemon, bluez]
rpm:
dependencies: [glibc >= 2.35, alsa-lib, avahi-libs, dbus-libs]
recommends: [avahi, bluez]
checksum:
name_template: checksums.txt
extra_files:
- glob: dist/*.dmg
# A release takes its version from the tag, which make release checks against VERSION. A snapshot
# has no tag, so it takes VERSION, which the Makefile passes in.
snapshot:
version_template: "{{ .Env.MIDI_HARBOR_VERSION }}-SNAPSHOT-{{ .ShortCommit }}"
changelog:
sort: asc
release:
github:
owner: grmrgecko
name: midi-harbor
extra_files:
- glob: dist/*.dmg