Skip to content

Commit e0d74e9

Browse files
ci: automate releases with release-please and enforce conventional commits
- Add release-please workflow to create release PRs on push to main - Add auto-merge workflow to merge release PRs after CI passes - Add workflow to build and upload sc-custom-cards.js to releases - Remove old semantic-release workflow and dependencies - Add Lefthook with commitlint for conventional commit validation - Add pre-commit hook for linting staged files - Configure release-please for Node.js with CHANGELOG generation This ensures releases are fully automated, assets are never missing, and all commits follow conventional commit format for proper semantic versioning.
1 parent c84f9dd commit e0d74e9

10 files changed

Lines changed: 549 additions & 1586 deletions
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
name: Auto-merge Release PRs
2+
3+
on:
4+
pull_request:
5+
types:
6+
- opened
7+
- synchronize
8+
- reopened
9+
10+
permissions:
11+
contents: write
12+
pull-requests: write
13+
14+
jobs:
15+
auto-merge-release-pr:
16+
runs-on: ubuntu-latest
17+
# Only run on release-please PRs
18+
if: |
19+
github.event.pull_request.user.login == 'github-actions[bot]' &&
20+
startsWith(github.event.pull_request.head.ref, 'release-please--')
21+
steps:
22+
- name: Enable auto-merge for release PR
23+
run: gh pr merge --auto --squash "$PR_URL"
24+
env:
25+
PR_URL: ${{ github.event.pull_request.html_url }}
26+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
name: Release Please
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
8+
permissions:
9+
contents: write
10+
pull-requests: write
11+
12+
jobs:
13+
release-please:
14+
runs-on: ubuntu-latest
15+
outputs:
16+
release_created: ${{ steps.release.outputs.release_created }}
17+
tag_name: ${{ steps.release.outputs.tag_name }}
18+
upload_url: ${{ steps.release.outputs.upload_url }}
19+
steps:
20+
- uses: googleapis/release-please-action@v4
21+
id: release
22+
with:
23+
# This uses the default token which has permissions for creating releases
24+
token: ${{ secrets.GITHUB_TOKEN }}

.github/workflows/release.yml

Lines changed: 0 additions & 36 deletions
This file was deleted.
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
name: Upload Release Assets
2+
3+
on:
4+
release:
5+
types: [published]
6+
7+
permissions:
8+
contents: write
9+
10+
jobs:
11+
build-and-upload:
12+
runs-on: ubuntu-latest
13+
steps:
14+
- name: Checkout code
15+
uses: actions/checkout@v4
16+
17+
- name: Setup pnpm
18+
uses: pnpm/action-setup@v4
19+
20+
- name: Setup Node.js
21+
uses: actions/setup-node@v4
22+
with:
23+
node-version: 20
24+
cache: 'pnpm'
25+
26+
- name: Install dependencies
27+
run: pnpm install
28+
29+
- name: Build the project
30+
run: pnpm run build
31+
32+
- name: Upload release asset
33+
uses: actions/upload-release-asset@v1
34+
env:
35+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
36+
with:
37+
upload_url: ${{ github.event.release.upload_url }}
38+
asset_path: ./dist/sc-custom-cards.js
39+
asset_name: sc-custom-cards.js
40+
asset_content_type: application/javascript

.release-please-manifest.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
".": "1.5.0"
3+
}

commitlint.config.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
export default {
2+
extends: ['@commitlint/config-conventional'],
3+
rules: {
4+
'type-enum': [
5+
2,
6+
'always',
7+
[
8+
'feat', // New feature
9+
'fix', // Bug fix
10+
'docs', // Documentation changes
11+
'style', // Code style changes (formatting, etc)
12+
'refactor', // Code refactoring
13+
'perf', // Performance improvements
14+
'test', // Adding or updating tests
15+
'build', // Build system or dependencies
16+
'ci', // CI configuration
17+
'chore', // Other changes (maintenance)
18+
'revert', // Revert a previous commit
19+
],
20+
],
21+
'type-case': [2, 'always', 'lower-case'],
22+
'type-empty': [2, 'never'],
23+
'subject-empty': [2, 'never'],
24+
'subject-full-stop': [2, 'never', '.'],
25+
'header-max-length': [2, 'always', 100],
26+
},
27+
}

lefthook.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Lefthook configuration
2+
# https://lefthook.dev/configuration/
3+
4+
commit-msg:
5+
commands:
6+
commitlint:
7+
run: npx commitlint --edit {1}
8+
9+
pre-commit:
10+
parallel: true
11+
commands:
12+
lint:
13+
glob: '*.{js,ts}'
14+
run: pnpm run lint

package.json

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818
"lint:oxlint": "oxlint . --fix -D correctness --ignore-path .gitignore",
1919
"lint:eslint": "eslint . --fix",
2020
"lint": "run-s lint:*",
21-
"format": "prettier --write src/"
21+
"format": "prettier --write src/",
22+
"prepare": "lefthook install"
2223
},
2324
"dependencies": {
2425
"@kipk/load-ha-components": "^1.0.3",
@@ -29,30 +30,26 @@
2930
"lit": "^2.8.0"
3031
},
3132
"devDependencies": {
32-
"@semantic-release/changelog": "^6.0.3",
33-
"@semantic-release/commit-analyzer": "^13.0.1",
34-
"@semantic-release/exec": "^7.1.0",
35-
"@semantic-release/git": "^10.0.1",
36-
"@semantic-release/npm": "^12.0.1",
33+
"@commitlint/cli": "^20.4.2",
34+
"@commitlint/config-conventional": "^20.4.2",
3735
"@tsconfig/node22": "^22.0.0",
3836
"@types/jsdom": "^21.1.7",
3937
"@types/node": "^22.13.9",
4038
"@vitest/coverage-v8": "^4.0.18",
4139
"@vitest/eslint-plugin": "^1.1.36",
4240
"canvas": "^3.2.1",
43-
"conventional-changelog-conventionalcommits": "^8.0.0",
4441
"dotenv": "^16.5.0",
4542
"eslint": "^9.21.0",
4643
"eslint-config-love": "^119.0.0",
4744
"eslint-plugin-oxlint": "^0.15.13",
4845
"globals": "^16.0.0",
4946
"jiti": "^2.4.2",
5047
"jsdom": "^26.0.0",
48+
"lefthook": "^2.1.2",
5149
"npm-run-all2": "^7.0.2",
5250
"oxlint": "^0.15.13",
5351
"prettier": "3.5.3",
5452
"sass-embedded": "^1.85.1",
55-
"semantic-release": "^24.2.3",
5653
"ts-lit-plugin": "^2.0.2",
5754
"typescript": "~5.8.0",
5855
"vite": "^6.2.1",

0 commit comments

Comments
 (0)