Skip to content

Commit 7df2e01

Browse files
ludfjigjsturtevant
authored andcommitted
Make cargo publish only publish unreleased crates (#623)
Signed-off-by: Ludvig Liljenberg <4257730+ludfjig@users.noreply.github.com>
1 parent abcc9e7 commit 7df2e01

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

.github/workflows/CargoPublish.yml

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,43 +44,79 @@ jobs:
4444
else
4545
VERSION="${{ github.ref }}"
4646
VERSION="${VERSION#refs/heads/release/v}"
47+
echo "VERSION=$VERSION" >> $GITHUB_ENV
4748
fi
4849
./dev/verify-version.sh "$VERSION" hyperlight-common hyperlight-guest hyperlight-guest-bin hyperlight-host hyperlight-component-util hyperlight-component-macro
4950
51+
- name: Determine which crates need publishing
52+
run: |
53+
needs_publish() {
54+
local crate=$1
55+
local crate_env_var=$(echo "$crate" | tr '[:lower:]' '[:upper:]' | tr '-' '_')
56+
57+
if [ -z "$VERSION" ]; then
58+
echo "No version set (dry run?), skipping crates.io existence checks."
59+
echo "PUBLISH_${crate_env_var}=true" >> "$GITHUB_ENV"
60+
return
61+
fi
62+
63+
if curl -s "https://crates.io/api/v1/crates/$crate/$VERSION" | jq -e .version > /dev/null; then
64+
echo "PUBLISH_${crate_env_var}=false" >> "$GITHUB_ENV"
65+
echo "✅ $crate@$VERSION already exists."
66+
else
67+
echo "PUBLISH_${crate_env_var}=true" >> "$GITHUB_ENV"
68+
echo "🚀 $crate@$VERSION will be published."
69+
fi
70+
}
71+
72+
needs_publish hyperlight-common
73+
needs_publish hyperlight-guest
74+
needs_publish hyperlight-guest-bin
75+
needs_publish hyperlight-component-util
76+
needs_publish hyperlight-component-macro
77+
needs_publish hyperlight-host
78+
5079
- name: Publish hyperlight-common
5180
continue-on-error: ${{ inputs.dry_run }}
5281
run: cargo publish --manifest-path ./src/hyperlight_common/Cargo.toml ${{ inputs.dry_run && '--dry-run' || '' }}
5382
env:
5483
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_PUBLISH_TOKEN }}
84+
if: env.PUBLISH_HYPERLIGHT_COMMON != 'false'
5585

5686
- name: Publish hyperlight-guest
5787
continue-on-error: ${{ inputs.dry_run }}
5888
run: cargo publish --manifest-path ./src/hyperlight_guest/Cargo.toml ${{ inputs.dry_run && '--dry-run' || '' }}
5989
env:
6090
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_PUBLISH_TOKEN }}
91+
if: env.PUBLISH_HYPERLIGHT_GUEST != 'false'
6192

6293
- name: Publish hyperlight-guest-bin
6394
continue-on-error: ${{ inputs.dry_run }}
6495
run: cargo publish --manifest-path ./src/hyperlight_guest_bin/Cargo.toml ${{ inputs.dry_run && '--dry-run' || '' }}
6596
env:
6697
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_PUBLISH_TOKEN }}
98+
if: env.PUBLISH_HYPERLIGHT_GUEST_BIN != 'false'
99+
67100
- name: Publish hyperlight-component-util
68101
continue-on-error: ${{ inputs.dry_run }}
69102
run: cargo publish --manifest-path ./src/hyperlight_component_util/Cargo.toml ${{ inputs.dry_run && '--dry-run' || '' }}
70103
env:
71104
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_PUBLISH_TOKEN }}
105+
if: env.PUBLISH_HYPERLIGHT_COMPONENT_UTIL != 'false'
72106

73107
- name: Publish hyperlight-component-macro
74108
continue-on-error: ${{ inputs.dry_run }}
75109
run: cargo publish --manifest-path ./src/hyperlight_component_macro/Cargo.toml ${{ inputs.dry_run && '--dry-run' || '' }}
76110
env:
77111
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_PUBLISH_TOKEN }}
112+
if: env.PUBLISH_HYPERLIGHT_COMPONENT_MACRO != 'false'
78113

79114
- name: Publish hyperlight-host
80115
continue-on-error: ${{ inputs.dry_run }}
81116
run: cargo publish --manifest-path ./src/hyperlight_host/Cargo.toml ${{ inputs.dry_run && '--dry-run' || '' }}
82117
env:
83118
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_PUBLISH_TOKEN }}
119+
if: env.PUBLISH_HYPERLIGHT_HOST != 'false'
84120

85121

86122
# TODO: Do we want to publish hyperlight-guest-capi to crates.io given that it's not for Rust consumption?

0 commit comments

Comments
 (0)