Files
Elias Wendland 96ffe372ba
Release / check-release (push) Successful in 22s
Release / build (push) Skipped
Release / package (deb) (push) Skipped
Release / package (rpm) (push) Skipped
Release / publish (push) Skipped
Plugin Releases / detect (push) Successful in 1m37s
CI / test (push) Successful in 1m59s
Plugin Releases / build-package-publish (push) Failing after 1m27s
chore: bump plugin versions to 0.1.1 and fix JSON object key access in CI scripts
2026-07-17 19:09:04 +02:00

84 lines
3.2 KiB
Bash
Executable File

#!/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 entries "$entries" '{"include": $entries}'