refactor: restructure project into a workspace by introducing a plugin API crate and modularizing individual plugin definitions.
This commit is contained in:
@@ -0,0 +1,131 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
packager=${1:?packager must be deb or rpm}
|
||||
version=${2:?version is required}
|
||||
release_root=${3:?release target directory is required}
|
||||
dist_dir=${4:-dist}
|
||||
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() {
|
||||
local name=$1 description=$2
|
||||
shift 2
|
||||
local config
|
||||
config=$(mktemp)
|
||||
local contents=()
|
||||
while [[ $# -gt 0 && "$1" == content:* ]]; do
|
||||
contents+=("${1#content:}")
|
||||
shift
|
||||
done
|
||||
local dependencies=("$@")
|
||||
{
|
||||
echo "name: $name"
|
||||
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"
|
||||
if [[ ${#contents[@]} -gt 0 ]]; then
|
||||
echo "contents:"
|
||||
for mapping in "${contents[@]}"; do
|
||||
destination=${mapping#*::}
|
||||
echo " - src: ${mapping%%::*}"
|
||||
echo " dst: $destination"
|
||||
echo " file_info:"
|
||||
if [[ "$destination" == /usr/bin/* || "$destination" == *.so ]]; then
|
||||
echo " mode: 0755"
|
||||
else
|
||||
echo " mode: 0644"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
if [[ ${#dependencies[@]} -gt 0 ]]; then
|
||||
echo "depends:"
|
||||
for dependency in "${dependencies[@]}"; do
|
||||
echo " - $dependency"
|
||||
done
|
||||
fi
|
||||
} > "$config"
|
||||
nfpm package --config "$config" --packager "$packager" --target "$dist_dir/"
|
||||
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" \
|
||||
"content:README.md::/usr/share/doc/convertis/README.md" \
|
||||
"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)"
|
||||
Reference in New Issue
Block a user