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
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}'
|
||||
Reference in new issue
Block a user