chore(deps): bump the next group across 1 directory with 2 updates #1500
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: Build Pipeline # A Build Pipeline which will use for build, test and deploy. | |
on: | |
push: # When we push the changes. | |
branches: # Only for these branches. | |
- master | |
- bugfix/* | |
- hotfix/* | |
- release/* | |
paths-ignore: # Ignoring the markdown file changes. | |
- '**/*.md' | |
pull_request: # Also on pull request events. | |
workflow_dispatch: # Allows you to run this workflow manually from the Actions tab. | |
jobs: | |
check: | |
name: State Verifier | |
runs-on: ubuntu-latest | |
outputs: | |
skip_ci: ${{ steps.check_initial_commit.outputs.skip_ci }} | |
steps: | |
# The first step is to check out the repository code | |
- name: Checking out repository code | |
uses: actions/[email protected] # Action for checking out a repo. | |
with: | |
fetch-depth: 0 # Fetches all history for all branches and tags | |
# The second step checks whether the commit is the initial commit | |
- name: Check Initial Commit | |
id: check_initial_commit | |
run: | | |
# Use a git command to count the number of revisions | |
# If the count is 1, then this is the initial commit | |
if [ "$(git rev-list --count HEAD)" -eq 1 ]; then | |
echo "This is the initial commit." | |
# Set the environment variable "skip_ci" to true, signifying CI should not run for the initial commit | |
echo "skip_ci=true" >> $GITHUB_OUTPUT | |
else | |
# If the count is not 1, this is not the initial commit | |
# Set the environment variable "skip_ci" to false, signifying CI should run | |
echo "skip_ci=false" >> $GITHUB_OUTPUT | |
fi | |
build: # Job named 'build' | |
name: Build & Test | |
if: needs.check.outputs.skip_ci != 'true' | |
runs-on: ubuntu-latest # The type of machine to run the job on. | |
needs: [check] | |
strategy: # Allows you to create a matrix for job configuration. | |
matrix: | |
node-version: [18.x, 19.x, 20.x, 21.x] # Running tests across different environments. | |
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/ | |
steps: # The sequence of tasks that make up a job. | |
- name: Checking out repository code | |
uses: actions/[email protected] # Action for checking out a repo. | |
- name: Setup Node.js ${{ matrix.node-version }} Environment | |
uses: actions/[email protected] # Action for setting up Node environment. | |
with: | |
node-version: ${{ matrix.node-version }} | |
- name: Install pnpm package manager | |
uses: pnpm/[email protected] # Action for setting up pnpm. | |
id: pnpm-install | |
with: | |
version: ^9 | |
run_install: false | |
- name: Capture pnpm store directory | |
id: pnpm-cache | |
run: | | |
echo "pnpm_cache_dir=$(pnpm store path)" >> $GITHUB_OUTPUT | |
- name: Cache pnpm Store | |
uses: actions/[email protected] # Action provides caching dependencies and build outputs to improve workflow execution time. | |
with: | |
path: ${{ steps.pnpm-cache.outputs.pnpm_cache_dir }} # The path of the directory to cache. | |
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} # An explicit key for restoring and saving the cache. | |
restore-keys: | | |
${{ runner.os }}-pnpm-store- | |
# Installs all dependencies specified in the project's package.json file. | |
- name: Install dependencies using pnpm | |
run: pnpm install | |
# This compiles the application in optimized production mode and output it to the build folder. | |
- name: Build the application and export it | |
run: pnpm run build | |
# Runs unit tests for the application using Jest. | |
- name: Execute tests using Jest | |
run: pnpm run test | |
release: | |
name: Create Release | |
# Specify the type of the runner the job will run on | |
runs-on: ubuntu-latest | |
needs: [build] | |
if: ${{ github.ref_name == 'master' }} | |
# Set permissions to write contents | |
permissions: | |
contents: write | |
steps: | |
# Checkout the repository code | |
- name: Checkout code | |
uses: actions/[email protected] | |
with: | |
fetch-depth: 0 # Fetches all history for all branches and tags | |
# Generate a changelog for the new release using Git | |
- name: Generate a changelog | |
uses: orhun/[email protected] | |
id: git-cliff | |
with: | |
config: cliff.toml # The configuration file for git-cliff | |
args: -vv --latest --strip all # Show verbose output, grab the latest changes, and strip unnecessary details | |
env: | |
OUTPUT: CHANGES.md # The output file for the changelog | |
# Prepare release notes by processing the generated changelog | |
- name: Set the release info | |
id: release | |
shell: bash | |
run: | | |
version=$(jq -r '.version' package.json) | |
echo "version=${version}" >> $GITHUB_OUTPUT | |
# Read contents of changelog into variable 'changelog_content' | |
changelog=$(cat ${{ steps.git-cliff.outputs.changelog }}) | |
# Remove first two lines from 'changelog' | |
changelog="$(printf "$changelog" | tail -n +3)" | |
# Save the value of 'changelog' back into the GitHub environment output | |
{ | |
echo "notes<<EOF" | |
echo "$changelog" | |
echo "EOF" | |
} >> $GITHUB_OUTPUT | |
# Create a new GitHub release using the gathered information | |
- name: Create the release | |
uses: nekofar/[email protected] | |
with: | |
tag: v${{ steps.release.outputs.version }} # The name of the tag to be released | |
title: v${{ steps.release.outputs.version }} # The title for the release | |
notes: ${{ steps.release.outputs.notes }} # The release notes generated in the previous step | |
draft: true # The release will be created as a draft | |
prerelease: ${{ contains(steps.release.outputs.version, '-rc') || contains(steps.release.outputs.version, '-beta') || contains(steps.release.outputs.version, '-alpha') }} # Conditions to mark the release as a pre-release | |
concurrency: # Allows controlling the concurrency level of the job in the build pipeline. | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true # If enabled, previous runs of this workflow for the same group-key will be cancelled while this build or run is in progress. |