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
84 lines
3.2 KiB
Bash
Executable File
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}'
|