Skip to content

ci: add commitlint GitHub Actions #4440

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 27, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 47 additions & 0 deletions .github/workflows/commitlint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: Conventional Commitlint
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure when our docs were updated last. Should this here just be exactly this?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think CI is ambiguous.
So I use Conventional Commitlint.

Another workflow uses Validate Commits.
It might be good to update the example name.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah sorry, I do not care about the name 📦
I meant this part:

 - name: Install commitlint
        run: npm install -D @commitlint/cli @commitlint/config-conventional

Also there is not build step in the docs

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good question.

At first, I try to use install command like yarn add -D @commitlint/cli @commitlint/config-conventional.
However, It failed due to conflict with local packages in this repository.
So I select build command instead of install.

Failed GitHub Actions
name: Conventional Commitlint

on:
  push:
  pull_request:
  workflow_dispatch:

permissions:
  contents: read

jobs:
  commitlint:
    name: Commitlint
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
        with:
          fetch-depth: 0

      - name: Setup Node
        uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
        with:
          node-version: lts/*
          cache: yarn

      - name: Install commitlint
        run: yarn add -D @commitlint/cli @commitlint/config-conventional

      - name: Print versions
        run: |
          git --version
          node --version
          npm --version
          yarn --version
          yarn commitlint --version

      - name: Validate current commit (last commit) with commitlint
        if: github.event_name == 'push' || github.event_name == 'workflow_dispatch'
        run: yarn commitlint --last --verbose

      - name: Validate PR commits with commitlint
        if: github.event_name == 'pull_request'
        run: yarn commitlint --from ${{ github.event.pull_request.base.sha }} --to ${{ github.event.pull_request.head.sha }} --verbose

Result

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Uhm, thanks. The docs use npm, does it work if you try npm?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure but doubt it. Locally this all works fine. Weird, I would assume that if this doesn't work people would already have opened up an issue.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Eventually, I detected the problem of an error.
The below GitHub Actions worked correctly when I deleted the workspaces section in package.json.

Deleted section in package.json
  ~~~
  "renovate": {
    "rangeStrategy": "update-lockfile",
    "ignorePaths": [
      "**/fixtures/**/package.json"
    ],
    "extends": [
      "config:base",
      ":semanticCommitType(chore)",
      ":semanticCommitScopeDisabled"
    ],
    "ignoreDeps": [
      "@commitlint/test",
      "@commitlint/test-environment",
      "@commitlint/utils"
    ]
  },
-  "workspaces": [
-    "@alias/*",
-    "@commitlint/*",
-    "@packages/*"
-  ],
  "engines": {
    "node": ">=v18",
    "npm": ">=7"
  },
  ~~~
Successful GitHub Actions
name: Conventional Commitlint

on:
  push:
  pull_request:
  workflow_dispatch:

permissions:
  contents: read

jobs:
  commitlint:
    name: Commitlint
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
        with:
          fetch-depth: 0

      - name: Setup Node
        uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
        with:
          node-version: lts/*
          cache: npm

      - name: Install commitlint
        run: npm install -D @commitlint/cli @commitlint/config-conventional @commitlint/config-workspace-scopes

      - name: Print versions
        run: |
          git --version
          node --version
          npm --version
          yarn --version
          npx commitlint --version

      - name: Validate current commit (last commit) with commitlint
        if: github.event_name == 'push' || github.event_name == 'workflow_dispatch'
        run: npx commitlint --last --verbose

      - name: Validate PR commits with commitlint
        if: github.event_name == 'pull_request'
        run: npx commitlint --from ${{ github.event.pull_request.base.sha }} --to ${{ github.event.pull_request.head.sha }} --verbose

In addition, The commitlint action of yarn version was also successful without workspaces difinition in package.json.

Yarn version workflow
name: Conventional Commitlint

on:
  push:
  pull_request:
  workflow_dispatch:

permissions:
  contents: read

jobs:
  commitlint:
    name: Commitlint
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
        with:
          fetch-depth: 0

      - name: Setup Node
        uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
        with:
          node-version: lts/*
          cache: yarn

      - name: Install commitlint
        run: yarn add -D @commitlint/cli @commitlint/config-conventional @commitlint/config-workspace-scopes

      - name: Print versions
        run: |
          git --version
          node --version
          npm --version
          yarn --version
          yarn commitlint --version

      - name: Validate current commit (last commit) with commitlint
        if: github.event_name == 'push' || github.event_name == 'workflow_dispatch'
        run: yarn commitlint --last --verbose

      - name: Validate PR commits with commitlint
        if: github.event_name == 'pull_request'
        run: yarn commitlint --from ${{ github.event.pull_request.base.sha }} --to ${{ github.event.pull_request.head.sha }} --verbose

Unfortunately, I don't have any solution to run this workflow with workspaces difinition.

Copy link
Collaborator

@JounQin JounQin Jun 23, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With workspaces option enabled, the installation command is using local packages as dependencies correctly with symlinks, but build is required in this case. Otherwise lib dirs won't be there.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So... this should work if we keep the build step?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, I think so.


on:
push:
pull_request:
workflow_dispatch:

permissions:
contents: read

jobs:
commitlint:
name: Commitlint
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0

- name: Setup Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: lts/*
cache: yarn

- name: Install dependencies
run: yarn install --frozen-lockfile

- name: Build packages
run: yarn build

- name: Print versions
run: |
git --version
node --version
npm --version
yarn --version
yarn commitlint --version

- name: Validate current commit (last commit) with commitlint
if: github.event_name == 'push' || github.event_name == 'workflow_dispatch'
run: yarn commitlint --last --verbose

- name: Validate PR commits with commitlint
if: github.event_name == 'pull_request'
run: yarn commitlint --from ${{ github.event.pull_request.base.sha }} --to ${{ github.event.pull_request.head.sha }} --verbose