#!/usr/bin/env bash set -euo pipefail packager=${1:?packager must be deb or rpm} manifest=${2:?plugin Cargo.toml is required} release_root=${3:?release target directory is required} dist_dir=${4:-dist} nfpm_command=${NFPM:-nfpm} if [[ "$packager" != "deb" && "$packager" != "rpm" ]]; then echo "packager must be deb or rpm" >&2 exit 1 fi metadata=$(cargo metadata --format-version 1 --no-deps --manifest-path "$manifest") manifest_absolute=$(realpath "$manifest") package_metadata=$(jq -c --arg manifest "$manifest_absolute" \ '.packages[] | select(.manifest_path == $manifest)' <<<"$metadata") package=$(jq -r '.name' <<<"$package_metadata") version=$(jq -r '.version' <<<"$package_metadata") description=$(jq -r '.description' <<<"$package_metadata") api_version=$(jq -r '.metadata.convertis["api-version"]' <<<"$package_metadata") target=$(jq -r '.targets[] | select(.kind | index("cdylib")) | .name' <<<"$package_metadata") library="lib${target}.so" if [[ "$api_version" != "2" ]]; then echo "$manifest advertises unsupported plugin API $api_version" >&2 exit 1 fi if [[ ! -f "$release_root/$library" ]]; then echo "plugin library not found: $release_root/$library" >&2 exit 1 fi mkdir -p "$dist_dir" config=$(mktemp) trap 'rm -f "$config"' EXIT if [[ "$packager" == "deb" ]]; then architecture=amd64 dependency_key="debian-dependencies" else architecture=x86_64 dependency_key="rpm-dependencies" fi { echo "name: $package" echo "arch: $architecture" echo "platform: linux" echo "version: $version" echo "release: 1" echo "section: utils" echo "priority: optional" echo "maintainer: Elias Wendland " echo "description: $description" echo "license: GPL-3.0-only" echo "homepage: https://git.ewenlau.net/ewenlau/convertis" echo "contents:" echo " - src: $release_root/$library" echo " dst: /usr/lib/convertis/plugins/$library" echo " file_info:" echo " mode: 0755" echo "depends:" echo " - convertis-plugin-api-2" jq -r --arg key "$dependency_key" \ '.metadata.convertis[$key] // [] | .[] | " - " + .' \ <<<"$package_metadata" } >"$config" "$nfpm_command" package --config "$config" --packager "$packager" --target "$dist_dir/"