• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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