@@ -38,33 +38,46 @@ jobs:
3838 - name : Run tests
3939 run : pnpm test
4040
41+ - name : Validate release contract docs
42+ run : pnpm docs:release-contract
43+
4144 - name : Determine package and version
4245 id : package_info
4346 run : |
4447 TAG=${GITHUB_REF#refs/tags/}
4548 if [[ $TAG == react-v* ]]; then
4649 echo "PACKAGE=react-components" >> $GITHUB_OUTPUT
50+ echo "PACKAGE_SCOPE=@ourfuturehealth/react-components" >> $GITHUB_OUTPUT
51+ echo "PACKAGE_DIR=packages/react-components" >> $GITHUB_OUTPUT
4752 echo "VERSION=${TAG#react-v}" >> $GITHUB_OUTPUT
48- echo "BUILD_CMD=build" >> $GITHUB_OUTPUT
4953 elif [[ $TAG == toolkit-v* ]]; then
5054 echo "PACKAGE=toolkit" >> $GITHUB_OUTPUT
55+ echo "PACKAGE_SCOPE=@ourfuturehealth/toolkit" >> $GITHUB_OUTPUT
56+ echo "PACKAGE_DIR=packages/toolkit" >> $GITHUB_OUTPUT
5157 echo "VERSION=${TAG#toolkit-v}" >> $GITHUB_OUTPUT
52- echo "BUILD_CMD=zip" >> $GITHUB_OUTPUT
5358 else
5459 # Assume v* tags are toolkit (backward compatibility)
5560 echo "PACKAGE=toolkit" >> $GITHUB_OUTPUT
61+ echo "PACKAGE_SCOPE=@ourfuturehealth/toolkit" >> $GITHUB_OUTPUT
62+ echo "PACKAGE_DIR=packages/toolkit" >> $GITHUB_OUTPUT
5663 echo "VERSION=${TAG#v}" >> $GITHUB_OUTPUT
57- echo "BUILD_CMD=zip" >> $GITHUB_OUTPUT
5864 fi
5965
60- - name : Build release artifact
66+ - name : Build release artifacts
6167 run : |
6268 if [ "${{ steps.package_info.outputs.PACKAGE }}" == "toolkit" ]; then
6369 pnpm --filter=@ourfuturehealth/toolkit run zip
6470 else
6571 pnpm --filter=@ourfuturehealth/react-components run build
6672 fi
6773
74+ - name : Pack release tarball
75+ id : tarball
76+ run : |
77+ TARBALL_NAME=$(npm pack "./${{ steps.package_info.outputs.PACKAGE_DIR }}" --ignore-scripts | tail -n 1)
78+ echo "ASSET_NAME=${TARBALL_NAME}" >> $GITHUB_OUTPUT
79+ echo "ASSET_PATH=${GITHUB_WORKSPACE}/${TARBALL_NAME}" >> $GITHUB_OUTPUT
80+
6881 - name : Resolve toolkit asset details
6982 if : steps.package_info.outputs.PACKAGE == 'toolkit'
7083 id : toolkit_asset
@@ -74,30 +87,48 @@ jobs:
7487 echo "ASSET_PATH=$ASSET_PATH" >> $GITHUB_OUTPUT
7588 echo "ASSET_NAME=$ASSET_NAME" >> $GITHUB_OUTPUT
7689
90+ - name : Smoke test release tarball
91+ run : |
92+ ./scripts/release/smoke-package-tarball.sh \
93+ --package-dir "${{ github.workspace }}/${{ steps.package_info.outputs.PACKAGE_DIR }}" \
94+ --tarball "${{ steps.tarball.outputs.ASSET_PATH }}" \
95+ --managers 'yarn,npm,pnpm'
96+
97+ - name : Render release notes
98+ id : release_notes
99+ run : |
100+ NOTES_PATH="${GITHUB_WORKSPACE}/release-notes.md"
101+ if [ "${{ steps.package_info.outputs.PACKAGE }}" == "toolkit" ]; then
102+ ./scripts/release/render-release-notes.sh \
103+ --package "${{ steps.package_info.outputs.PACKAGE }}" \
104+ --tag "${GITHUB_REF_NAME}" \
105+ --version "${{ steps.package_info.outputs.VERSION }}" \
106+ --tarball "${{ steps.tarball.outputs.ASSET_NAME }}" \
107+ --zip "${{ steps.toolkit_asset.outputs.ASSET_NAME }}" > "${NOTES_PATH}"
108+ else
109+ ./scripts/release/render-release-notes.sh \
110+ --package "${{ steps.package_info.outputs.PACKAGE }}" \
111+ --tag "${GITHUB_REF_NAME}" \
112+ --version "${{ steps.package_info.outputs.VERSION }}" \
113+ --tarball "${{ steps.tarball.outputs.ASSET_NAME }}" > "${NOTES_PATH}"
114+ fi
115+ echo "NOTES_PATH=${NOTES_PATH}" >> $GITHUB_OUTPUT
116+
77117 - name : Create or update release
78118 env :
79119 GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
80120 run : |
81121 TAG="${GITHUB_REF_NAME}"
82- RELEASE_BODY=$(cat <<EOF
83- Release of **${{ steps.package_info.outputs.PACKAGE }}** version ${{ steps.package_info.outputs.VERSION }}
84-
85- ## Installation
86-
87- \`\`\`json
88- {
89- "dependencies": {
90- "@ourfuturehealth/${{ steps.package_info.outputs.PACKAGE }}": "github:ourfuturehealth/design-system-toolkit#${{ github.ref_name }}:packages/${{ steps.package_info.outputs.PACKAGE }}"
91- }
92- }
93- \`\`\`
94- EOF
95- )
96-
97- if gh release view "$TAG" >/dev/null 2>&1; then
98- gh release edit "$TAG" --title "$TAG" --notes "$RELEASE_BODY"
122+ if gh release view "$TAG" --repo "${GITHUB_REPOSITORY}" >/dev/null 2>&1; then
123+ gh release edit "$TAG" \
124+ --repo "${GITHUB_REPOSITORY}" \
125+ --title "$TAG" \
126+ --notes-file "${{ steps.release_notes.outputs.NOTES_PATH }}"
99127 else
100- gh release create "$TAG" --title "$TAG" --notes "$RELEASE_BODY"
128+ gh release create "$TAG" \
129+ --repo "${GITHUB_REPOSITORY}" \
130+ --title "$TAG" \
131+ --notes-file "${{ steps.release_notes.outputs.NOTES_PATH }}"
101132 fi
102133
103134 - name : Upload toolkit zip asset
@@ -108,3 +139,11 @@ jobs:
108139 gh release upload "${GITHUB_REF_NAME}" "${{ steps.toolkit_asset.outputs.ASSET_PATH }}" \
109140 --clobber \
110141 --repo "${GITHUB_REPOSITORY}"
142+
143+ - name : Upload package tarball asset
144+ env :
145+ GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
146+ run : |
147+ gh release upload "${GITHUB_REF_NAME}" "${{ steps.tarball.outputs.ASSET_PATH }}" \
148+ --clobber \
149+ --repo "${GITHUB_REPOSITORY}"
0 commit comments