diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a629f6e3f3..df608c4dc8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -372,53 +372,56 @@ jobs: ver_zerocopy=$(version zerocopy) ver_zerocopy_derive=$(version zerocopy-derive) - # The non-dev dependency version (`.kind == null` filters out the dev - # dependency, and `.target == null` filters out the targeted version). - zerocopy_derive_dep_ver=$(cargo metadata --format-version 1 \ - | jq -r ".packages[] | select(.name == \"zerocopy\").dependencies[] | select((.name == \"zerocopy-derive\") and .kind == null and .target == null).req") + # Usage: dependency-version + function dependency-version { + KIND="$1" + TARGET="$2" + cargo metadata --format-version 1 \ + | jq -r ".packages[] | select(.name == \"zerocopy\").dependencies[] | select((.name == \"zerocopy-derive\") and .kind == $KIND and .target == $TARGET).req" + } + + # The non-dev dependency version (kind `null` filters out the dev + # dependency, and target `null` filters out the targeted version). + zerocopy_derive_dep_ver=$(dependency-version null null) - # The non-dev dependency, targeted version. - zerocopy_derive_targeted_ver=$(cargo metadata --format-version 1 \ - | jq -r ".packages[] | select(.name == \"zerocopy\").dependencies[] | select((.name == \"zerocopy-derive\") and .kind == null and .target == \"cfg(any())\").req") + # The non-dev dependency, targeted version (kind `null` filters out + # the dev dependency). + zerocopy_derive_targeted_ver=$(dependency-version null '"cfg(any())"') - # The dev dependency version (`.kind == \"dev\"` selects only the dev + # The dev dependency version (kind `"dev"` selects only the dev # dependency). - zerocopy_derive_dev_dep_ver=$(cargo metadata --format-version 1 \ - | jq -r ".packages[] | select(.name == \"zerocopy\").dependencies[] | select((.name == \"zerocopy-derive\") and .kind == \"dev\").req") + zerocopy_derive_dev_dep_ver=$(dependency-version '"dev"' null) + + function assert-match { + VER_A="$1" + VER_B="$2" + SUCCESS_MSG="$3" + FAILURE_MSG="$4" + if [[ "$ver_zerocopy" == "$ver_zerocopy_derive" ]]; then + echo "$SUCCESS_MSG" | tee -a $GITHUB_STEP_SUMMARY + else + echo "$FAILURE_MSG" | tee -a $GITHUB_STEP_SUMMARY >&2 + exit 1 + fi + } - if [[ "$ver_zerocopy" == "$ver_zerocopy_derive" ]]; then - echo "Same crate version ($ver_zerocopy) found for zerocopy and zerocopy-derive." | tee -a $GITHUB_STEP_SUMMARY - else - echo "Different crate versions found for zerocopy ($ver_zerocopy) and zerocopy-derive ($ver_zerocopy_derive)." \ - | tee -a $GITHUB_STEP_SUMMARY >&2 - exit 1 - fi + assert-match "$ver_zerocopy" "$ver_zerocopy_derive" \ + "Same crate version ($ver_zerocopy) found for zerocopy and zerocopy-derive." \ + "Different crate versions found for zerocopy ($ver_zerocopy) and zerocopy-derive ($ver_zerocopy_derive)." # Note the leading `=` sign - the dependency needs to be an exact one. - if [[ "=$ver_zerocopy_derive" == "$zerocopy_derive_dep_ver" ]]; then - echo "zerocopy depends upon same version of zerocopy-derive in-tree ($zerocopy_derive_dep_ver)." | tee -a $GITHUB_STEP_SUMMARY - else - echo "zerocopy depends upon different version of zerocopy-derive ($zerocopy_derive_dep_ver) than the one in-tree ($ver_zerocopy_derive)." \ - | tee -a $GITHUB_STEP_SUMMARY >&2 - exit 1 - fi + assert-match "=$ver_zerocopy_derive" "$zerocopy_derive_dep_ver" \ + "zerocopy depends upon same version of zerocopy-derive in-tree ($zerocopy_derive_dep_ver)." \ + "zerocopy depends upon different version of zerocopy-derive ($zerocopy_derive_dep_ver) than the one in-tree ($ver_zerocopy_derive)." - if [[ "=$ver_zerocopy_derive" == "$zerocopy_derive_dev_dep_ver" ]]; then - echo "In dev mode, zerocopy depends upon same version of zerocopy-derive in-tree ($zerocopy_derive_dev_dep_ver)." | tee -a $GITHUB_STEP_SUMMARY - else - echo "In dev mode, zerocopy depends upon different version of zerocopy-derive ($zerocopy_derive_dev_dep_ver) than the one in-tree ($ver_zerocopy_derive)." \ - | tee -a $GITHUB_STEP_SUMMARY >&2 - exit 1 - fi + # Note the leading `=` sign - the dependency needs to be an exact one. + assert-match "=$ver_zerocopy_derive" "$zerocopy_derive_dev_dep_ver" \ + "In dev mode, zerocopy depends upon same version of zerocopy-derive in-tree ($zerocopy_derive_dev_dep_ver)." \ + "In dev mode, zerocopy depends upon different version of zerocopy-derive ($zerocopy_derive_dev_dep_ver) than the one in-tree ($ver_zerocopy_derive)." - if [[ "$zerocopy_derive_dep_ver" == "$zerocopy_derive_targeted_ver" ]]; then - echo "Same crate version ($zerocopy_derive_dep_ver) found for optional and targeted zerocopy-derive dependency." \ - | tee -a $GITHUB_STEP_SUMMARY - else - echo "Different crate versions found for optional ($zerocopy_derive_dep_ver) and targeted ($zerocopy_derive_targeted_ver) dependency." \ - | tee -a $GITHUB_STEP_SUMMARY >&2 - exit 1 - fi + assert-match "$zerocopy_derive_dep_ver" "$zerocopy_derive_targeted_ver" \ + "Same crate version ($zerocopy_derive_dep_ver) found for optional and targeted zerocopy-derive dependency." \ + "Different crate versions found for optional ($zerocopy_derive_dep_ver) and targeted ($zerocopy_derive_targeted_ver) dependency." generate_cache: runs-on: ubuntu-latest