Skip to content

Commit

Permalink
chore(config): husky and commitlint husky and commitlint (#1472)
Browse files Browse the repository at this point in the history
  • Loading branch information
hgw77 authored Dec 3, 2024
1 parent 4fbf0d2 commit ccad449
Show file tree
Hide file tree
Showing 7 changed files with 578 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
# because act will use the proxy and the tests will fail
# act -j test --env-file dummy.env --rm

name: CI Check
name: Checks

on:
pull_request:
Expand All @@ -15,6 +15,7 @@ on:

jobs:
test:
name: Run tests
runs-on: ubuntu-latest
container:
image: ruby:3.2
Expand Down
83 changes: 83 additions & 0 deletions .github/workflows/pr-title-lint-check.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
name: Pull Request Lint Check

on:
pull_request:
types:
- opened
- edited
- synchronize
- reopened

jobs:
title-lint:
name: Validate title
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Load config
id: load_config
run: |
# Load types and scopes directly from commitlint.config.mjs and set as environment variables
node --experimental-modules -e "
import('./commitlint.config.mjs').then(({ types, scopes }) => {
// Write types and scopes as multiline environment variables
console.log('TYPES<<EOF');
console.log(types.join('\n'));
console.log('EOF');
console.log('SCOPES<<EOF');
console.log(scopes.join('\n'));
console.log('EOF');
});
" >> $GITHUB_ENV
echo "Done!"
- name: CI Check Title
uses: amannn/action-semantic-pull-request@v5
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
wip: true
# Configure which types are allowed (newline-delimited).
# Default: https://github.com/commitizen/conventional-commit-types
types: |
${{ env.TYPES }}
scopes: |
${{ env.SCOPES }}
# Configure that a scope must always be provided.
requireScope: true
# Configure which scopes are disallowed in PR titles (newline-delimited).
# For instance by setting the value below, `chore(release): ...` (lowercase)
# and `ci(e2e,release): ...` (unknown scope) will be rejected.
# These are regex patterns auto-wrapped in `^ $`.
disallowScopes: |
release
[A-Z]+
# Configure additional validation for the subject based on a regex.
# This example ensures the subject doesn't start with an uppercase character.
subjectPattern: ^(?![A-Z]).+$
# If `subjectPattern` is configured, you can use this property to override
# the default error message that is shown when the pattern doesn't match.
# The variables `subject` and `title` can be used within the message.
subjectPatternError: |
The subject "{subject}" found in the pull request title "{title}"
didn't match the configured pattern. Please ensure that the subject
doesn't start with an uppercase character.
# If the PR contains one of these newline-delimited labels, the
# validation is skipped. If you want to rerun the validation when
# labels change, you might want to use the `labeled` and `unlabeled`
# event triggers in your workflow.
ignoreLabels: |
bot
ignore-semantic-pull-request
# If you're using a format for the PR title that differs from the traditional Conventional
# Commits spec, you can use these options to customize the parsing of the type, scope and
# subject. The `headerPattern` should contain a regex where the capturing groups in parentheses
# correspond to the parts listed in `headerPatternCorrespondence`.
# See: https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-commits-parser#headerpattern
headerPattern: '^(\w*)(?:\(([\w$.\-*/ ]*)\))?: (.*)$'
headerPatternCorrespondence: type, scope, subject
1 change: 1 addition & 0 deletions .husky/commit-msg
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
npx commitlint --edit $1
3 changes: 3 additions & 0 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#pnpm lint
#pnpm format
#pnpm typecheck
29 changes: 29 additions & 0 deletions commitlint.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
// import config from "./.github/commit-config.js"

export const types = ["build", "chore", "fix", "feat", "refactor", "research", "style", "test"]
export const scopes = [
"build",
"config",
"ci",
"core",
"docs",
"deps",
"infra",
"ui",
"version",
/^ISSUE-\d+$/, // Regex pattern for ISSUE-<number>]
]

export default {
extends: ["@commitlint/config-conventional"],
rules: {
"type-enum": [2, "always", types], // Enforces the type to be one of the specified values
"scope-enum": [2, "always", scopes],
"scope-case": [2, "always", "kebab-case"], // Enforces kebab-case
"subject-case": [
2,
"never",
["start-case", "pascal-case", "upper-case"], // Disallows certain cases for the subject
],
},
}
6 changes: 5 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@
"devDependencies": {
"@babel/preset-env": "^7.24.7",
"@babel/preset-react": "^7.24.7",
"@commitlint/cli": "^19.6.0",
"@commitlint/config-conventional": "^19.6.0",
"@svgr/core": "^8.1.0",
"@svgr/plugin-jsx": "^8.1.0",
"@testing-library/react": "^14.0.0",
Expand All @@ -79,6 +81,7 @@
"eslint-plugin-cypress": "^2.12.1",
"eslint-plugin-react": "^7.29.4",
"glob": "^8.0.1",
"husky": "^9.1.7",
"jest": "^29.7.0",
"jest-environment-jsdom": "^29.7.0",
"js-yaml": "^4.1.0",
Expand All @@ -97,7 +100,8 @@
"test": "NODE_ENV=test jest --config jest.config.js",
"build": "node ./config/esbuild/build.js",
"format": "prettier --log-level warn --write \"**/*.{js,jsx,ts,tsx,md}\"",
"check-format": "prettier --config ./.prettierrc --check \"**/*.{js,jsx,ts,tsx,md}\" "
"check-format": "prettier --config ./.prettierrc --check \"**/*.{js,jsx,ts,tsx,md}\" ",
"prepare": "husky"
},
"name": "elektra-cc-dashboard",
"license": "SEE LICENSE IN LICENSE",
Expand Down
Loading

0 comments on commit ccad449

Please sign in to comment.