Skip to content

DSE-323 / DSE-322 :: Input family and Fieldset FE update (#188) #46

DSE-323 / DSE-322 :: Input family and Fieldset FE update (#188)

DSE-323 / DSE-322 :: Input family and Fieldset FE update (#188) #46

Workflow file for this run

name: Create release
on:
push:
tags:
- 'v*' # Toolkit releases (backward compatible)
- 'toolkit-v*' # Toolkit releases (new pattern)
- 'react-v*' # React components releases
jobs:
build:
name: Create release
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- uses: actions/setup-node@v4
with:
node-version: '22.x'
- name: Enable Corepack and pnpm
run: |
corepack enable
corepack prepare pnpm@10.29.2 --activate
- name: Install dependencies
run: pnpm install
- name: Run linting
run: pnpm run lint
- name: Install Playwright browser for tests
run: pnpm --filter=@ourfuturehealth/react-components exec playwright install --with-deps chromium
- name: Run tests
run: pnpm test
- name: Validate release contract docs
run: pnpm docs:release-contract
- name: Determine package and version
id: package_info
run: |
TAG=${GITHUB_REF#refs/tags/}
if [[ $TAG == react-v* ]]; then
echo "PACKAGE=react-components" >> $GITHUB_OUTPUT
echo "PACKAGE_SCOPE=@ourfuturehealth/react-components" >> $GITHUB_OUTPUT
echo "PACKAGE_DIR=packages/react-components" >> $GITHUB_OUTPUT
echo "VERSION=${TAG#react-v}" >> $GITHUB_OUTPUT
elif [[ $TAG == toolkit-v* ]]; then
echo "PACKAGE=toolkit" >> $GITHUB_OUTPUT
echo "PACKAGE_SCOPE=@ourfuturehealth/toolkit" >> $GITHUB_OUTPUT
echo "PACKAGE_DIR=packages/toolkit" >> $GITHUB_OUTPUT
echo "VERSION=${TAG#toolkit-v}" >> $GITHUB_OUTPUT
else
# Assume v* tags are toolkit (backward compatibility)
echo "PACKAGE=toolkit" >> $GITHUB_OUTPUT
echo "PACKAGE_SCOPE=@ourfuturehealth/toolkit" >> $GITHUB_OUTPUT
echo "PACKAGE_DIR=packages/toolkit" >> $GITHUB_OUTPUT
echo "VERSION=${TAG#v}" >> $GITHUB_OUTPUT
fi
- name: Build release artifacts
run: |
if [ "${{ steps.package_info.outputs.PACKAGE }}" == "toolkit" ]; then
pnpm --filter=@ourfuturehealth/toolkit run zip
else
pnpm --filter=@ourfuturehealth/react-components run build
fi
- name: Pack release tarball
id: tarball
run: |
TARBALL_NAME=$(npm pack "./${{ steps.package_info.outputs.PACKAGE_DIR }}" --ignore-scripts | tail -n 1)
echo "ASSET_NAME=${TARBALL_NAME}" >> $GITHUB_OUTPUT
echo "ASSET_PATH=${GITHUB_WORKSPACE}/${TARBALL_NAME}" >> $GITHUB_OUTPUT
- name: Resolve toolkit asset details
if: steps.package_info.outputs.PACKAGE == 'toolkit'
id: toolkit_asset
run: |
ASSET_PATH=$(ls -1 ./packages/toolkit/dist/ofh-design-system-toolkit-*.zip | head -n 1)
ASSET_NAME=$(basename "$ASSET_PATH")
echo "ASSET_PATH=$ASSET_PATH" >> $GITHUB_OUTPUT
echo "ASSET_NAME=$ASSET_NAME" >> $GITHUB_OUTPUT
- name: Smoke test release tarball
run: |
./scripts/release/smoke-package-tarball.sh \
--package-dir "${{ github.workspace }}/${{ steps.package_info.outputs.PACKAGE_DIR }}" \
--tarball "${{ steps.tarball.outputs.ASSET_PATH }}" \
--managers 'yarn,npm,pnpm'
- name: Render release notes
id: release_notes
run: |
NOTES_PATH="${GITHUB_WORKSPACE}/release-notes.md"
if [ "${{ steps.package_info.outputs.PACKAGE }}" == "toolkit" ]; then
./scripts/release/render-release-notes.sh \
--package "${{ steps.package_info.outputs.PACKAGE }}" \
--tag "${GITHUB_REF_NAME}" \
--version "${{ steps.package_info.outputs.VERSION }}" \
--tarball "${{ steps.tarball.outputs.ASSET_NAME }}" \
--zip "${{ steps.toolkit_asset.outputs.ASSET_NAME }}" > "${NOTES_PATH}"
else
./scripts/release/render-release-notes.sh \
--package "${{ steps.package_info.outputs.PACKAGE }}" \
--tag "${GITHUB_REF_NAME}" \
--version "${{ steps.package_info.outputs.VERSION }}" \
--tarball "${{ steps.tarball.outputs.ASSET_NAME }}" > "${NOTES_PATH}"
fi
echo "NOTES_PATH=${NOTES_PATH}" >> $GITHUB_OUTPUT
- name: Create or update release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
TAG="${GITHUB_REF_NAME}"
if gh release view "$TAG" --repo "${GITHUB_REPOSITORY}" >/dev/null 2>&1; then
gh release edit "$TAG" \
--repo "${GITHUB_REPOSITORY}" \
--title "$TAG" \
--notes-file "${{ steps.release_notes.outputs.NOTES_PATH }}"
else
gh release create "$TAG" \
--repo "${GITHUB_REPOSITORY}" \
--title "$TAG" \
--notes-file "${{ steps.release_notes.outputs.NOTES_PATH }}"
fi
- name: Upload toolkit zip asset
if: steps.package_info.outputs.PACKAGE == 'toolkit'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh release upload "${GITHUB_REF_NAME}" "${{ steps.toolkit_asset.outputs.ASSET_PATH }}" \
--clobber \
--repo "${GITHUB_REPOSITORY}"
- name: Upload package tarball asset
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh release upload "${GITHUB_REF_NAME}" "${{ steps.tarball.outputs.ASSET_PATH }}" \
--clobber \
--repo "${GITHUB_REPOSITORY}"