Files
convertis/packaging/build-plugin-package.sh

72 lines
2.3 KiB
Bash
Executable File

#!/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 <eliaswendland@pm.me>"
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/"