Skip to content

Holy Grail

Holy Grail #5

Workflow file for this run

# Holy Grail: all release steps in one workflow
name: Holy Grail
on:
workflow_dispatch:
inputs:
version:
description: 'Release type'
required: true
default: 'patch'
type: choice
options:
- minor
- patch
nodeVersion:
description: 'Node version'
required: true
default: '20.9.0'
type: string
tags:
description: 'Tag'
required: true
default: 'latest'
type: choice
options:
- latest
- beta
- dev
jobs:
#CREATE RELEASE BRANCH
create-release-branch:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v4
with:
ref: develop
- name: Set Tegel user
run: git config --global user.name "Tegel - Scania" && git config --global user.email "tegel.design.system@gmail.com"
- name: Core - Bump version
id: core-version
working-directory: packages/core
run: npm version ${{ github.event.inputs.version }} --no-git-tag-version
- name: Angular - Bump version
id: angular-version
working-directory: packages/angular
run: npm version ${{ github.event.inputs.version }} --no-git-tag-version
- name: Angular 17 - Bump version
id: angular-17-version
working-directory: packages/angular-17/projects/components
run: npm version ${{ github.event.inputs.version }} --no-git-tag-version
- name: React - Bump version
id: react-version
working-directory: packages/react
run: npm version ${{ github.event.inputs.version }} --no-git-tag-version
- name: Core - Read package.json Version
id: version
working-directory: packages/core
run: echo "PACKAGE_VERSION=$(jq -r .version package.json)" >> $GITHUB_OUTPUT
- name: Save version as artifact
uses: actions/upload-artifact@v4
with:
name: version
path: packages/core/package.json # assuming the version is saved here
- name: Create release branch
run: |
git checkout -b release/tegel@${{ steps.version.outputs.PACKAGE_VERSION }}
git add .
git commit -m "chore: bump versions to ${{ steps.version.outputs.PACKAGE_VERSION }}"
git push -u --no-verify origin release/tegel@${{ steps.version.outputs.PACKAGE_VERSION }}
#Need to output the version to use it in the next jobs
outputs:
version: ${{ steps.version.outputs.PACKAGE_VERSION }}
#RELEASE CORE
release-core:
needs: create-release-branch
runs-on: ubuntu-latest
env:
WORKING_DIRECTORY: packages/core
steps:
- name: Check out code
uses: actions/checkout@v4
with:
ref: release/tegel@${{ needs.create-release-branch.outputs.version }}
fetch-depth: 0 # Fetch all branches
token: ${{ secrets.GH_PERSONAL_ACCESS_TOKEN }} # Use the token for authentication
- name: Set up node
uses: actions/setup-node@v3
with:
node-version: ${{ github.event.inputs.nodeVersion }}
registry-url: 'https://registry.npmjs.org'
- name: Set up Git for authentication
run: |
git config --global user.name "Tegel - Scania"
git config --global user.email "tegel.design.system@gmail.com"
git remote set-url origin https://x-access-token:${{ secrets.GH_PERSONAL_ACCESS_TOKEN }}@github.com/${{ github.repository }}
- name: Core - Read Package.json Version
id: version
working-directory: ${{ env.WORKING_DIRECTORY }}
run: echo "PACKAGE_VERSION=$(jq -r .version package.json)" >> $GITHUB_OUTPUT
- name: Install dependencies in root
run: npm ci
- name: Core - Install
working-directory: ${{ env.WORKING_DIRECTORY }}
run: npm ci
- name: Core - Run build
working-directory: ${{ env.WORKING_DIRECTORY }}
run: npm run build
- name: Core - Publish
working-directory: ${{ env.WORKING_DIRECTORY }}
run: npm publish --tag ${{ github.event.inputs.tags }}
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Core - Commit and push changes
run: |
git add .
if ! git diff-index --quiet HEAD; then
git commit -m "ci(release-core-step): files changed in release"
git push --force --no-verify
else
echo "No changes to commit"
fi
#BUMP WRAPPERS TO NEW VERSION
bump-wrappers-to-new-version:
needs: release-core
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v4
with:
ref: release/tegel@${{ needs.create-release-branch.outputs.version }}
fetch-depth: 1 # Fetch just the release branch
- name: Set up node
uses: actions/setup-node@v3
with:
node-version: ${{ github.event.inputs.nodeVersion }}
registry-url: 'https://registry.npmjs.org'
- name: Set Tegel user
run: git config --global user.name "Tegel - Scania" && git config --global user.email "tegel.design.system@gmail.com"
- name: Angular - Install latest tegel package
working-directory: packages/angular
run: npm install @scania/tegel@${{ needs.create-release-branch.outputs.version }}
- name: Angular 17 - Install latest tegel package
working-directory: packages/angular-17
run: npm install @scania/tegel@${{ needs.create-release-branch.outputs.version }}
- name: Angular 17 components - Install latest tegel package
working-directory: packages/angular-17/projects/components
run: npm install @scania/tegel@${{ needs.create-release-branch.outputs.version }}
- name: React - Install latest tegel package
working-directory: packages/react
run: npm install @scania/tegel@${{ needs.create-release-branch.outputs.version }}
- name: Wrappers Core increase - Commit and push changes
run: |
git add .
if ! git diff-index --quiet HEAD; then
git commit -m "ci(wrappers-increase-step): files changed in release"
git push --force --no-verify
else
echo "No changes to commit"
fi
#RELEASE ANGULAR
release-angular:
needs: [create-release-branch, release-core, bump-wrappers-to-new-version]
runs-on: ubuntu-latest
env:
WORKING_DIRECTORY: packages/angular
steps:
- name: Check out code
uses: actions/checkout@v4
with:
ref: release/tegel@${{ needs.create-release-branch.outputs.version }}
fetch-depth: 1 # Fetch just the release branch
- name: Set up node
uses: actions/setup-node@v3
with:
node-version: ${{ github.event.inputs.nodeVersion }}
registry-url: 'https://registry.npmjs.org'
- name: Install dependencies in root
run: npm ci
- name: Core - Install
working-directory: packages/core
run: npm ci
- name: Angular - Install
working-directory: packages/angular
run: npm ci
- name: Angular - Run build
run: npm run build-angular
- name: Angular - Publish
working-directory: packages/angular
run: npm publish --tag ${{ github.event.inputs.tags }}
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
#RELEASE ANGULAR 17
release-angular-17:
needs: [create-release-branch, release-core, bump-wrappers-to-new-version]
runs-on: ubuntu-latest
env:
WORKING_DIRECTORY: packages/angular-17
steps:
- name: Check out code
uses: actions/checkout@v4
with:
ref: release/tegel@${{ needs.create-release-branch.outputs.version }}
fetch-depth: 1 # Fetch just the release branch
- name: Set up node
uses: actions/setup-node@v3
with:
node-version: ${{ github.event.inputs.nodeVersion }}
registry-url: 'https://registry.npmjs.org'
- name: Install dependencies in root
run: npm ci
- name: Core - Install
working-directory: packages/core
run: npm ci
- name: Angular-17 workspace - Install
working-directory: packages/angular-17
run: npm ci
- name: Angular-17 wrapper - Install
working-directory: packages/angular-17/projects/components
run: npm ci
- name: Angular-17 - Run build
run: npm run build-angular-17
- name: Angular-17 - Publish
working-directory: packages/angular-17/dist/components
run: npm publish --tag ${{ github.event.inputs.tags }}
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
#RELEASE REACT
release-react:
needs: [create-release-branch, release-core, bump-wrappers-to-new-version]
runs-on: ubuntu-latest
env:
WORKING_DIRECTORY: packages/react
steps:
- name: Check out code
uses: actions/checkout@v4
with:
ref: release/tegel@${{ needs.create-release-branch.outputs.version }}
fetch-depth: 1 # Fetch just the release branch
- name: Set up node
uses: actions/setup-node@v3
with:
node-version: ${{ github.event.inputs.nodeVersion }}
registry-url: 'https://registry.npmjs.org'
- name: React - Read package.json Version
id: version
working-directory: packages/react
run: echo "PACKAGE_VERSION=$(jq -r .version package.json)" >> $GITHUB_OUTPUT
- name: Install dependencies in root
run: npm ci
- name: Core - Install
working-directory: packages/core
run: npm ci
- name: React - Install
working-directory: packages/react
run: npm ci
- name: React - Build
run: npm run build-react
- name: React - Publish
working-directory: packages/react
run: npm publish --tag ${{ github.event.inputs.tags }}
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
#ON FAILURE
on-failure:
needs: [create-release-branch, release-core, release-angular, release-angular-17, release-react]
runs-on: ubuntu-latest
if: (needs.create-release-branch.result == 'failure' || needs.release-core.result == 'failure' || needs.release-angular.result == 'failure' || needs.release-angular-17.result == 'failure' || needs.release-react.result == 'failure')
steps:
- name: Download version
uses: actions/download-artifact@v4
with:
name: version
path: packages/core
- name: Remove branch on failure
run: git push --no-verify origin --delete release/tegel@${{ needs.create-release-branch.outputs.version }}
#MERGE RELEASE BRANCH TO DEVELOP
merge-release-branch-into-develop:
needs: [create-release-branch, release-core, release-angular, release-angular-17, release-react]
runs-on: ubuntu-latest
if: (needs.create-release-branch.result == 'success' && needs.release-core.result == 'success' && needs.release-angular.result == 'success' && needs.release-angular-17.result == 'success' && needs.release-react.result == 'success')
steps:
- name: Check out code
uses: actions/checkout@v4
with:
ref: release/tegel@${{ needs.create-release-branch.outputs.version }}
fetch-depth: 0 # Fetch all branches
token: ${{ secrets.GH_PERSONAL_ACCESS_TOKEN }}
- name: Fetch all branches
run: git fetch --all
- name: Set up Git for authentication
run: |
git config --global user.name "Tegel - Scania"
git config --global user.email "tegel.design.system@gmail.com"
git remote set-url origin https://x-access-token:${{ secrets.GH_PERSONAL_ACCESS_TOKEN }}@github.com/${{ github.repository }}
- name: Merge release branch into develop
run: |
git checkout develop
git merge --squash -X theirs release/tegel@${{ needs.create-release-branch.outputs.version }}
git add .
if ! git diff-index --quiet HEAD; then
git commit -m "release: tegel ${{ needs.create-release-branch.outputs.version }}"
git push --force --no-verify origin develop
else
echo "No changes to commit in develop"
fi
#CREATE GIT TAG
create-git-tag:
needs: [create-release-branch, merge-release-branch-into-develop]
runs-on: ubuntu-latest
if: (needs.merge-release-branch-into-develop.result == 'success')
env:
WORKING_DIRECTORY: packages/core
steps:
- name: Check out code
uses: actions/checkout@v4
with:
ref: develop
fetch-depth: 0 # Fetch all branches
token: ${{ secrets.GH_PERSONAL_ACCESS_TOKEN }} # Use the token for authentication
- name: Set up node
uses: actions/setup-node@v3
with:
node-version: ${{ github.event.inputs.nodeVersion }}
registry-url: 'https://registry.npmjs.org'
- name: Set up Git for authentication
run: |
git config --global user.name "Tegel - Scania"
git config --global user.email "tegel.design.system@gmail.com"
git remote set-url origin https://x-access-token:${{ secrets.GH_PERSONAL_ACCESS_TOKEN }}@github.com/${{ github.repository }}
- name: Core - Create git tag
run: git tag @scania/tegel@${{ needs.create-release-branch.outputs.version }}
- name: Core - Push git tag
run: git push --no-verify origin @scania/tegel@${{ needs.create-release-branch.outputs.version }}
#MERGE DEVELOP INTO MAIN
merge-develop-into-main:
needs: [create-release-branch, create-git-tag, merge-release-branch-into-develop]
runs-on: ubuntu-latest
if: (needs.create-git-tag.result == 'success' && needs.merge-release-branch-into-develop.result == 'success')
steps:
- name: Check out code
uses: actions/checkout@v4
with:
ref: develop
fetch-depth: 0 # Fetch all branches
token: ${{ secrets.GH_PERSONAL_ACCESS_TOKEN }}
- name: Fetch all branches
run: git fetch --all
- name: Set up Git for authentication
run: |
git config --global user.name "Tegel - Scania"
git config --global user.email "tegel.design.system@gmail.com"
git remote set-url origin https://x-access-token:${{ secrets.GH_PERSONAL_ACCESS_TOKEN }}@github.com/${{ github.repository }}
- name: Merge develop into main
run: |
git checkout main
git merge --squash -X theirs develop
git add .
if ! git diff-index --quiet HEAD; then
git commit -m "release: tegel ${{ needs.create-release-branch.outputs.version }}"
git push --force --no-verify origin main
else
echo "No changes to commit in main"
fi