|
| 1 | +#!/bin/bash |
| 2 | +# This script checks if a crate needs a version bump. |
| 3 | +# |
| 4 | +# At the time of writing, it doesn't check what kind of bump is required. |
| 5 | +# In the future, we could take SemVer compatibliity into account, like |
| 6 | +# integrating `cargo-semver-checks` of else |
| 7 | +# |
| 8 | +# Inputs: |
| 9 | +# BASE_SHA The commit SHA of the branch where the PR wants to merge into. |
| 10 | +# HEAD_SHA The commit SHA that triggered the workflow. |
| 11 | + |
| 12 | +set -euo pipefail |
| 13 | + |
| 14 | +# When `BASE_SHA` is missing, we assume it is from bors merge commit, |
| 15 | +# so hope `HEAD~` to find the previous commit on master branch. |
| 16 | +base_sha=$(git rev-parse "${BASE_SHA:-HEAD~1}") |
| 17 | +head_sha=$(git rev-parse "${HEAD_SHA:-HEAD}") |
| 18 | + |
| 19 | +echo "Base branch is $base_sha" |
| 20 | +echo "Current head is $head_sha" |
| 21 | + |
| 22 | +# Gets crate names of members that has been changed from $bash_sha to $head_sha. |
| 23 | +changed_crates=$( |
| 24 | + git diff --name-only "$base_sha" "$head_sha" -- crates/ credential/ benches/ \ |
| 25 | + | cut -d'/' -f2 \ |
| 26 | + | sort -u |
| 27 | +) |
| 28 | + |
| 29 | +if [ -z "$changed_crates" ] |
| 30 | +then |
| 31 | + echo "No file changed in member crates." |
| 32 | + exit 0 |
| 33 | +fi |
| 34 | + |
| 35 | +# Checks publish status for only crates with code changes. |
| 36 | +publish_status_table=$( |
| 37 | + echo "$changed_crates" \ |
| 38 | + | xargs printf -- '--package %s\n' \ |
| 39 | + | xargs cargo unpublished |
| 40 | +) |
| 41 | + |
| 42 | +# "yes" -> code changed but no version difference -> need a bump |
| 43 | +# Prints 2nd column (sep by space), which is the name of the crate. |
| 44 | +crates_need_bump=$( |
| 45 | + echo "$publish_status_table" \ |
| 46 | + | { grep '| yes ' || true; } \ |
| 47 | + | awk '{print $2}' |
| 48 | +) |
| 49 | + |
| 50 | +if [ -z "$crates_need_bump" ] |
| 51 | +then |
| 52 | + echo "No version bump needed for member crates." |
| 53 | + exit 0 |
| 54 | +fi |
| 55 | + |
| 56 | +echo "Detected changes in these crates but no version bump found:" |
| 57 | +echo "$crates_need_bump" |
| 58 | +echo |
| 59 | +echo "Please bump at least one patch version for each corresponding Cargo.toml:" |
| 60 | +echo 'Run "cargo unpublished" to read the publish status table for details.' |
| 61 | +exit 1 |
0 commit comments