1#!/usr/bin/env bash 2# 3# Copyright 2024 The Fuchsia Authors 4# 5# Licensed under a BSD-style license <LICENSE-BSD>, Apache License, Version 2.0 6# <LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0>, or the MIT 7# license <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your option. 8# This file may not be copied, modified, or distributed except according to 9# those terms. 10 11set -eo pipefail 12 13# Usage: version <crate-name> 14function version { 15 cargo metadata -q --format-version 1 | jq -r ".packages[] | select(.name == \"$1\").version" 16} 17 18ver_zerocopy=$(version zerocopy) 19ver_zerocopy_derive=$(version zerocopy-derive) 20 21# Usage: dependency-version <kind> <target> 22function dependency-version { 23 KIND="$1" 24 TARGET="$2" 25 cargo metadata -q --format-version 1 \ 26 | jq -r ".packages[] | select(.name == \"zerocopy\").dependencies[] | select((.name == \"zerocopy-derive\") and .kind == $KIND and .target == $TARGET).req" 27} 28 29# The non-dev dependency version (kind `null` filters out the dev 30# dependency, and target `null` filters out the targeted version). 31zerocopy_derive_dep_ver=$(dependency-version null null) 32 33# The non-dev dependency, targeted version (kind `null` filters out 34# the dev dependency). 35zerocopy_derive_targeted_ver=$(dependency-version null '"cfg(any())"') 36 37# The dev dependency version (kind `"dev"` selects only the dev 38# dependency). 39zerocopy_derive_dev_dep_ver=$(dependency-version '"dev"' null) 40 41function assert-match { 42 VER_A="$1" 43 VER_B="$2" 44 SUCCESS_MSG="$3" 45 FAILURE_MSG="$4" 46 if [[ "$VER_A" == "$VER_B" ]]; then 47 echo "$SUCCESS_MSG" | tee -a $GITHUB_STEP_SUMMARY 48 else 49 echo "$FAILURE_MSG" | tee -a $GITHUB_STEP_SUMMARY >&2 50 exit 1 51 fi 52} 53 54assert-match "$ver_zerocopy" "$ver_zerocopy_derive" \ 55 "Same crate version ($ver_zerocopy) found for zerocopy and zerocopy-derive." \ 56 "Different crate versions found for zerocopy ($ver_zerocopy) and zerocopy-derive ($ver_zerocopy_derive)." 57 58# Note the leading `=` sign - the dependency needs to be an exact one. 59assert-match "=$ver_zerocopy_derive" "$zerocopy_derive_dep_ver" \ 60 "zerocopy depends upon same version of zerocopy-derive in-tree ($zerocopy_derive_dep_ver)." \ 61 "zerocopy depends upon different version of zerocopy-derive ($zerocopy_derive_dep_ver) than the one in-tree ($ver_zerocopy_derive)." 62 63# Note the leading `=` sign - the dependency needs to be an exact one. 64assert-match "=$ver_zerocopy_derive" "$zerocopy_derive_dev_dep_ver" \ 65 "In dev mode, zerocopy depends upon same version of zerocopy-derive in-tree ($zerocopy_derive_dev_dep_ver)." \ 66 "In dev mode, zerocopy depends upon different version of zerocopy-derive ($zerocopy_derive_dev_dep_ver) than the one in-tree ($ver_zerocopy_derive)." 67 68assert-match "$zerocopy_derive_dep_ver" "$zerocopy_derive_targeted_ver" \ 69 "Same crate version ($zerocopy_derive_dep_ver) found for optional and targeted zerocopy-derive dependency." \ 70 "Different crate versions found for optional ($zerocopy_derive_dep_ver) and targeted ($zerocopy_derive_targeted_ver) dependency." 71