🏷️ Lerna Publish NPM Latest #44
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: 🏷️ Lerna Publish NPM Latest | |
on: | |
workflow_dispatch: | |
inputs: | |
dryrun: | |
type: boolean | |
description: Dry-Run | |
graduate: | |
type: boolean | |
description: Force Conventional Graduate | |
permissions: | |
contents: write | |
id-token: write | |
jobs: | |
deploy-npm-latest: | |
runs-on: ubuntu-latest | |
timeout-minutes: 30 | |
steps: | |
- name: Retrieve current Date Time in EST | |
shell: bash | |
run: echo "START_TIME=$(TZ=":America/New_York" date -R|sed 's/.....$//')" >> $GITHUB_ENV | |
- name: Current datetime - ${{ env.START_TIME }} | |
run: echo ${{ env.START_TIME }} | |
- name: Clone repository | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- if: ${{ github.event.pull_request.merged != true && contains('["ghiscoding"]', github.actor) != true }} | |
name: Exit early when current actor is not allowed to push new release | |
run: | | |
echo "Error: Your GitHub username (${{ github.actor }}) is not on the allowed list of admins for this workflow" | |
exit 1 | |
- name: Set NodeJS | |
uses: actions/setup-node@v4 | |
with: | |
registry-url: 'https://registry.npmjs.org/' | |
node-version: 20 | |
- name: Install pnpm | |
uses: pnpm/action-setup@v3 | |
with: | |
version: 9 | |
run_install: false | |
- name: Get pnpm store directory | |
run: echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV | |
- name: Setup pnpm cache | |
uses: actions/cache@v4 | |
with: | |
path: ${{ env.STORE_PATH }} | |
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} | |
restore-keys: | | |
${{ runner.os }}-pnpm-store- | |
- name: Run pnpm install dependencies | |
run: pnpm install | |
- name: Build Library | |
run: pnpm build | |
- name: Lerna Version (build query) | |
shell: bash | |
run: | | |
if ${{inputs.dryrun == true && inputs.graduate != true}} | |
then | |
echo "LERNA_VERSION_TYPE=🧪 Dry-Run" >> $GITHUB_ENV | |
echo "LERNA_VERSION_QUERY=pnpm exec lerna version --yes --dry-run" >> $GITHUB_ENV | |
elif ${{inputs.dryrun == true && inputs.graduate == true}} | |
then | |
echo "LERNA_VERSION_TYPE=🧪 Dry-Run w/Graduate" >> $GITHUB_ENV | |
echo "LERNA_VERSION_QUERY=pnpm exec lerna version --yes --dry-run --conventional-graduate" >> $GITHUB_ENV | |
elif ${{inputs.dryrun != true && inputs.graduate == true}} | |
then | |
echo "LERNA_VERSION_TYPE=🚀 Prod Version w/Graduate" >> $GITHUB_ENV | |
echo "LERNA_VERSION_QUERY=pnpm exec lerna version --yes --conventional-graduate" >> $GITHUB_ENV | |
elif ${{inputs.dryrun != true && inputs.graduate != true}} | |
then | |
echo "LERNA_VERSION_TYPE=🚀 Prod Version" >> $GITHUB_ENV | |
echo "LERNA_VERSION_QUERY=pnpm exec lerna version --yes" >> $GITHUB_ENV | |
fi | |
- name: Final version query type - ${{ env.LERNA_VERSION_TYPE }} | |
run: echo "${{ env.LERNA_VERSION_QUERY }}" | |
- name: Lerna Version 🏷️ | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} | |
NPM_CONFIG_PROVENANCE: true | |
run: | | |
git config --global user.name "${{ github.actor }}" | |
git config --global user.email "${{ github.actor }}@users.noreply.github.com" | |
pnpm whoami | |
pnpm exec ${{ env.LERNA_VERSION_QUERY }} | |
- name: OTP | |
if: ${{ inputs.dryrun != true }} | |
uses: step-security/wait-for-secrets@v1 | |
id: wait-for-secrets | |
with: | |
secrets: | | |
OTP: | |
name: 'OTP to publish package' | |
description: 'OTP from authenticator app' | |
- name: Lerna Publish 📦 | |
if: ${{ inputs.dryrun != true }} | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} | |
NPM_CONFIG_PROVENANCE: true | |
run: | | |
pnpm exec lerna publish from-package --force-publish --yes --otp ${{ steps.wait-for-secrets.outputs.OTP }} | |
- name: Build Website (GitHub demo site) | |
if: ${{ inputs.dryrun != true }} | |
run: pnpm build:demo | |
# deploy (re-publish) GitHub demo page with a Prod build but only when merging to "master" branch | |
# and the commit message contains the text "chore: release" | |
- name: Deploy to gh-pages | |
if: ${{ inputs.dryrun != true }} | |
uses: peaceiris/actions-gh-pages@v4 | |
with: | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
publish_dir: ./packages/demo/dist |