Bunch of changes, like a lot
This commit is contained in:
1 parent
f07f54d4c1
commit
3297f60f00
25 files changed
+566
-285
No files matched your search
@@ -9,18 +9,10 @@ mkdir -p "$dist_dir"
|
||||
|
||||
if [[ "$packager" == "deb" ]]; then
|
||||
architecture=amd64
|
||||
engine_dependency="convertis (= ${version}-1)"
|
||||
system_dependencies=("libc6" "libgcc-s1")
|
||||
ffmpeg_dependencies=("ffmpeg")
|
||||
imagemagick_dependencies=("imagemagick")
|
||||
graphicsmagick_dependencies=("graphicsmagick")
|
||||
else
|
||||
architecture=amd64
|
||||
engine_dependency="convertis = ${version}-1"
|
||||
system_dependencies=("glibc" "libgcc")
|
||||
ffmpeg_dependencies=("/usr/bin/ffmpeg" "/usr/bin/ffprobe")
|
||||
imagemagick_dependencies=("/usr/bin/magick")
|
||||
graphicsmagick_dependencies=("/usr/bin/gm")
|
||||
fi
|
||||
|
||||
make_package() {
|
||||
@@ -46,6 +38,10 @@ make_package() {
|
||||
echo "description: $description"
|
||||
echo "license: GPL-3.0-only"
|
||||
echo "homepage: https://git.ewenlau.net/ewenlau/convertis"
|
||||
if [[ "$name" == "convertis" ]]; then
|
||||
echo "provides:"
|
||||
echo " - convertis-plugin-api-2"
|
||||
fi
|
||||
if [[ ${#contents[@]} -gt 0 ]]; then
|
||||
echo "contents:"
|
||||
for mapping in "${contents[@]}"; do
|
||||
@@ -71,14 +67,6 @@ make_package() {
|
||||
rm -f "$config"
|
||||
}
|
||||
|
||||
exact_dependency() {
|
||||
if [[ "$packager" == "deb" ]]; then
|
||||
printf '%s (= %s-1)' "$1" "$version"
|
||||
else
|
||||
printf '%s = %s-1' "$1" "$version"
|
||||
fi
|
||||
}
|
||||
|
||||
make_package convertis "Plugin-based universal file converter" \
|
||||
"content:${release_root}/convertis::/usr/bin/convertis" \
|
||||
"content:target/man/convertis.1::/usr/share/man/man1/convertis.1" \
|
||||
@@ -86,46 +74,3 @@ make_package convertis "Plugin-based universal file converter" \
|
||||
"content:LICENSE::/usr/share/doc/convertis/LICENSE" \
|
||||
"content:packaging/plugin-catalog.json::/usr/share/convertis/plugin-catalog.json" \
|
||||
"${system_dependencies[@]}"
|
||||
|
||||
plugin_package() {
|
||||
local package=$1 library=$2 description=$3 dependency_group=${4:-none}
|
||||
local dependencies=("$engine_dependency")
|
||||
case "$dependency_group" in
|
||||
ffmpeg) dependencies+=("${ffmpeg_dependencies[@]}") ;;
|
||||
imagemagick) dependencies+=("${imagemagick_dependencies[@]}") ;;
|
||||
graphicsmagick) dependencies+=("${graphicsmagick_dependencies[@]}") ;;
|
||||
esac
|
||||
make_package "$package" "$description" \
|
||||
"content:${release_root}/${library}::/usr/lib/convertis/plugins/${library}" \
|
||||
"${dependencies[@]}"
|
||||
}
|
||||
|
||||
plugin_package convertis-ffmpeg-audio libconvertis_ffmpeg_audio.so "FFmpeg audio plugin for Convertis" ffmpeg
|
||||
plugin_package convertis-ffmpeg-video libconvertis_ffmpeg_video.so "FFmpeg video plugin for Convertis" ffmpeg
|
||||
plugin_package convertis-ffmpeg-video-to-frames libconvertis_ffmpeg_video_to_frames.so "FFmpeg video-to-frames plugin for Convertis" ffmpeg
|
||||
plugin_package convertis-ffmpeg-frames-to-video libconvertis_ffmpeg_frames_to_video.so "FFmpeg frames-to-video plugin for Convertis" ffmpeg
|
||||
plugin_package convertis-native-image libconvertis_native_image.so "Native common-image plugin for Convertis"
|
||||
plugin_package convertis-image-ascii libconvertis_image_ascii.so "Image-to-ASCII plugin for Convertis"
|
||||
plugin_package convertis-html libconvertis_html.so "Self-contained HTML plugin for Convertis"
|
||||
plugin_package convertis-imagemagick libconvertis_imagemagick.so "ImageMagick plugin for Convertis" imagemagick
|
||||
plugin_package convertis-graphicsmagick libconvertis_graphicsmagick.so "GraphicsMagick plugin for Convertis" graphicsmagick
|
||||
|
||||
make_package convertis-ffmpeg "All official FFmpeg plugins for Convertis" \
|
||||
"$engine_dependency" \
|
||||
"$(exact_dependency convertis-ffmpeg-audio)" \
|
||||
"$(exact_dependency convertis-ffmpeg-video)" \
|
||||
"$(exact_dependency convertis-ffmpeg-video-to-frames)" \
|
||||
"$(exact_dependency convertis-ffmpeg-frames-to-video)"
|
||||
|
||||
make_package convertis-image "All official image plugins for Convertis" \
|
||||
"$engine_dependency" \
|
||||
"$(exact_dependency convertis-native-image)" \
|
||||
"$(exact_dependency convertis-image-ascii)" \
|
||||
"$(exact_dependency convertis-imagemagick)" \
|
||||
"$(exact_dependency convertis-graphicsmagick)"
|
||||
|
||||
make_package convertis-plugins-all "Every official Convertis plugin" \
|
||||
"$engine_dependency" \
|
||||
"$(exact_dependency convertis-ffmpeg)" \
|
||||
"$(exact_dependency convertis-image)" \
|
||||
"$(exact_dependency convertis-html)"
|
||||
Executable
+71
@@ -0,0 +1,71 @@
|
||||
#!/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/"
|
||||
Executable
+83
@@ -0,0 +1,83 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
before=${1:-}
|
||||
after=${2:-HEAD}
|
||||
|
||||
if [[ -n "$before" && "$before" != "0000000000000000000000000000000000000000" ]] \
|
||||
&& git cat-file -e "${before}^{commit}" 2>/dev/null; then
|
||||
changed=$(git diff --name-only "$before" "$after" -- 'plugins/*')
|
||||
else
|
||||
changed=$(find plugins -mindepth 2 -maxdepth 2 -name Cargo.toml -print)
|
||||
fi
|
||||
|
||||
directories=$(printf '%s\n' "$changed" \
|
||||
| awk -F/ '$1 == "plugins" && NF >= 3 { print $1 "/" $2 }' \
|
||||
| sort -u)
|
||||
|
||||
workspace_version=$(sed -n 's/^version = "\([^"]*\)"/\1/p' Cargo.toml | head -n1)
|
||||
if [[ "$workspace_version" != *-dev* ]]; then
|
||||
engine_version=$workspace_version
|
||||
else
|
||||
engine_version=$(git describe --tags --abbrev=0 --match 'v[0-9]*' 2>/dev/null \
|
||||
| sed 's/^v//' || true)
|
||||
engine_version=${engine_version:-${workspace_version%-dev}}
|
||||
fi
|
||||
|
||||
entries='[]'
|
||||
while IFS= read -r directory; do
|
||||
[[ -n "$directory" && -f "$directory/Cargo.toml" ]] || continue
|
||||
manifest="$directory/Cargo.toml"
|
||||
declared_version=$(sed -n 's/^version = "\([^"]*\)"/\1/p' "$manifest" | head -n1)
|
||||
if [[ -z "$declared_version" ]]; then
|
||||
echo "$manifest must declare its own package version" >&2
|
||||
exit 1
|
||||
fi
|
||||
manifest_absolute=$(realpath "$manifest")
|
||||
metadata=$(cargo metadata --format-version 1 --no-deps --manifest-path "$manifest")
|
||||
entry=$(jq -c \
|
||||
--arg manifest "$manifest" \
|
||||
--arg manifest_absolute "$manifest_absolute" \
|
||||
--arg engine_version "$engine_version" '
|
||||
(.packages[] | select(.manifest_path == $manifest_absolute)) as $package
|
||||
| ($package.targets[] | select(.kind | index("cdylib"))) as $target
|
||||
| {
|
||||
manifest: $manifest,
|
||||
package: $package.name,
|
||||
version: $package.version,
|
||||
plugin_id: $package.metadata.convertis.id,
|
||||
api_version: $package.metadata.convertis["api-version"],
|
||||
engine_version: $engine_version,
|
||||
library: ("lib" + $target.name + ".so")
|
||||
}
|
||||
' <<<"$metadata")
|
||||
api_version=$(jq -r '.api_version' <<<"$entry")
|
||||
if [[ "$api_version" != "2" ]]; then
|
||||
echo "$manifest must declare package.metadata.convertis.api-version = 2" >&2
|
||||
exit 1
|
||||
fi
|
||||
current_version=$(jq -r '.version' <<<"$entry")
|
||||
if [[ "$current_version" != "$declared_version" ]]; then
|
||||
echo "$manifest resolved version $current_version but declares $declared_version" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -n "$before" ]] && git cat-file -e "$before:$manifest" 2>/dev/null; then
|
||||
previous_version=$(git show "$before:$manifest" \
|
||||
| sed -n 's/^version = "\([^"]*\)"/\1/p' \
|
||||
| head -n1)
|
||||
if [[ -n "$previous_version" && "$previous_version" == "$current_version" ]]; then
|
||||
echo "Skipping $manifest: version $current_version did not change" >&2
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ "$current_version" == *-dev* ]]; then
|
||||
echo "Skipping $manifest: development version $current_version is not releasable" >&2
|
||||
continue
|
||||
fi
|
||||
|
||||
entries=$(jq -c --argjson entry "$entry" '. + [$entry]' <<<"$entries")
|
||||
done <<<"$directories"
|
||||
|
||||
jq -cn --argjson include "$entries" '{include: $include}'
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"schema_version": 1,
|
||||
"engine_version": "0.3.0",
|
||||
"plugin_api_version": 2,
|
||||
"plugins": [
|
||||
{ "id": "ffmpeg-audio", "package": "convertis-ffmpeg-audio" },
|
||||
{ "id": "ffmpeg-video", "package": "convertis-ffmpeg-video" },
|
||||
|
||||
Reference in new issue
Block a user