set -eux
MEMBER_PACKAGES=$(
cargo metadata --format-version 1 \
| jq -r '
.packages[]
| select(.source==null)
| select(.publish !=[])
| .name
'
)
PUBLISH_EXCLUDE=$(
cargo metadata --format-version 1 \
| jq -r '
.packages[]
| select(.publish ==[])
| "--exclude " + .name
'
)
function crate-release-level {
tomato get 'workspace.metadata.next-release' Cargo.toml \
| jq --arg name ${1} -r '.[$name]'
}
BASELINE_REV=$(tomato get 'workspace.metadata.baseline' Cargo.toml)
function crate-kind {
cargo metadata --format-version 1 \
| jq \
--arg name ${1} \
-r '
.packages[]
| select(.name==$name)
| .targets[].kind[] '
}
echo "${MEMBER_PACKAGES}" | while IFS= read -r crate_name; do
echo "checking ${crate_name}"
RELEASE_LEVEL=$(crate-release-level ${crate_name})
if crate-kind ${crate_name} | grep -q "lib"; then
cargo semver-checks --baseline-rev ${BASELINE_REV} --package ${crate_name} --release-type ${RELEASE_LEVEL}
fi
done
CRATE_LIST=$(
cargo metadata --format-version 1 \
| jq -r '
.packages[]
| select(.source==null)
| select(.publish !=[])
| "--package " + .name
'
)
cargo package --no-verify --allow-dirty ${CRATE_LIST}
cargo publish --dry-run --workspace ${PUBLISH_EXCLUDE} --locked --allow-dirty