Skip to content

Merge pull request #9 from restfulhead/main #18

Merge pull request #9 from restfulhead/main

Merge pull request #9 from restfulhead/main #18

Workflow file for this run

name: Release
concurrency:
group: release
cancel-in-progress: true
permissions:
contents: write
issues: write
pull-requests: write
on:
push:
branches:
- release
paths-ignore:
- 'package.json'
- 'package-lock.json'
jobs:
release:
runs-on: ubuntu-latest
timeout-minutes: 30
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup GIT
run: |
git config user.email "[email protected]"
git config user.name "$GITHUB_ACTOR"
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: "npm"
cache-dependency-path: "package-lock.json"
registry-url: 'https://registry.npmjs.org'
- name: Install dependencies
env:
CI: true
run: |
npm ci
npm install -g [email protected]
npm install -g @restfulhead/[email protected]
- name: Get workspaces
id: get-workspaces
run: |
echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_OUTPUT
echo "commit=${{ github.sha }}" >> $GITHUB_OUTPUT
workspaces=`echo -e "packages/ajv-openapi-request-response-validator\npackages/azure-functions-openapi-validator"`
echo 'ws<<EOF' >> $GITHUB_OUTPUT
echo $workspaces >> $GITHUB_OUTPUT
echo 'EOF' >> $GITHUB_OUTPUT
echo -e "Identified workspaces: \n$workspaces"
- name: Build workspaces
env:
CI: true
run: |
npm run build -ws
- name: Release workspaces
if: steps.get-workspaces.outputs.ws != ''
env:
CI: true
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
run: |
topdir=$(pwd)
for workspace in ${{ steps.get-workspaces.outputs.ws }}; do
echo "Potentially going to version and release $workspace"
cd $workspace
mkdir .git
PCKG_NAME=`node -pe "require('./package.json').name"`
CUR_VERSION_NO=`node -pe "require('./package.json').version"`
FROM_PARAM=""
if [ "$CUR_VERSION_NO" != "0.0.0" ]; then
TAG_NAME="${PCKG_NAME}_v${CUR_VERSION_NO}"
REMOTE_TAGS=`git ls-remote --tags "https://$GITHUB_ACTOR:[email protected]/$GITHUB_REPOSITORY"`
if echo "$REMOTE_TAGS" | grep -q "refs/tags/${TAG_NAME}"; then
echo "Identified previous release as ${TAG_NAME}."
FROM_PARAM="--from $TAG_NAME"
else
echo "::warning title=No previous tag found under ${TAG_NAME}:: This release will be based on the current branch."
fi
fi
DEBUG_FLAG=""
if [ "${{ runner.debug}}" == "1" ]; then
DEBUG_FLAG="-vv"
fi
VERSION=`npx auto version $FROM_PARAM $DEBUG_FLAG`
if [ ! -z "$VERSION" ]; then
echo "::notice title=✅ Detected $VERSION version change for $PCKG_NAME::Bumping $VERSION version of $PCKG_NAME"
npx auto changelog --base-branch ${{ steps.get-workspaces.outputs.branch }} $FROM_PARAM $DEBUG_FLAG
npm run build
echo "npm version $VERSION -m 'chore: bump release version to %s [skip ci]'"
npm version $VERSION -m "chore: bump release version to %s [skip ci]" || true
NEW_VERSION_NO=`node -pe "require('./package.json').version"`
git tag -d v$NEW_VERSION_NO
NEW_TAG=${PCKG_NAME}_v$NEW_VERSION_NO
echo "Going to create a new release for $NEW_TAG"
git add -A
git commit -m "chore: release v$NEW_VERSION_NO [skip ci]" || true
git tag -a $NEW_TAG -m "chore: tag v$NEW_VERSION_NO [skip ci]"
git push "https://$GITHUB_ACTOR:[email protected]/$GITHUB_REPOSITORY" HEAD:${{ steps.get-workspaces.outputs.branch }} --follow-tags
npx auto release --use-version $NEW_TAG $FROM_PARAM --base-branch ${{ steps.get-workspaces.outputs.branch }} $DEBUG_FLAG
IS_PRIVATE=`node -pe "require('./package.json').private"`
rm -rf .git
if [ "$IS_PRIVATE" != "true" ]; then
mkdir ./dist-temp
mv ./dist/* ./dist-temp
mv ./dist-temp ./dist/dist
cp ./package.json ./dist/
cd $topdir
echo "publishing $workspace/dist"
npm publish ./$workspace/dist
echo "::notice title=🚀 ${PCKG_NAME} v$NEW_VERSION_NO::Package ${PCKG_NAME} v$NEW_VERSION_NO versioned and published"
fi
else
echo "::notice title=Versioning of $PCKG_NAME skipped::No relevant changes detected for $PCKG_NAME."
fi
cd $topdir
done
- if: ${{ always() }}
name: Clean working directory
run: |
rm -r *