Skip to content
Merged
58 changes: 58 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: CI

on:
push:
branches:
- main
- dev
pull_request:

jobs:
build_and_test:
runs-on: ubuntu-latest
name: Build and Test
steps:
- name: Checkout code
uses: actions/checkout@v5

- uses: pnpm/action-setup@v4
with:
version: 9

- name: Read .nvmrc
run: echo ::set-output name=NVMRC::$(cat .nvmrc)
id: nvm

- name: Set up Node.js environment
uses: actions/setup-node@v5
with:
node-version: '${{ steps.nvm.outputs.NVMRC }}'

- name: Install pnpm
run: npm install -g pnpm

- name: Install dependencies
run: pnpm install

- name: Run lint
run: pnpm lint

- name: Run tests with coverage
run: pnpm test:coverage
env:
FORCE_COLOR: true

- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v5
with:
token: ${{ secrets.CODECOV_TOKEN }}

- name: Build project
run: pnpm build

- name: Release
env:
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
run: npx semantic-release

80 changes: 80 additions & 0 deletions .releaserc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
{
"branches": [{ "name": "main" }, { "name": "dev", "prerelease": true }],
"ci": true,
"plugins": [
[
"@semantic-release/commit-analyzer",
{
"releaseRules": [
{ "message": "*[release]*", "release": "patch" },
{ "breaking": true, "release": "major" },
{ "revert": true, "release": "patch" },
{ "type": "feat", "release": "minor" },
{ "type": "fix", "release": "patch" },
{ "type": "perf", "release": "patch" },
{ "emoji": ":racehorse:", "release": "patch" },
{ "emoji": ":bug:", "release": "patch" },
{ "emoji": ":penguin:", "release": "patch" },
{ "emoji": ":apple:", "release": "patch" },
{ "emoji": ":checkered_flag:", "release": "patch" },
{ "tag": "BUGFIX", "release": "patch" },
{ "tag": "FEATURE", "release": "minor" },
{ "tag": "SECURITY", "release": "patch" },
{ "tag": "Breaking", "release": "major" },
{ "tag": "Fix", "release": "patch" },
{ "tag": "Update", "release": "minor" },
{ "tag": "New", "release": "minor" },
{ "component": "perf", "release": "patch" },
{ "component": "deps", "release": "patch" },
{ "type": "FEAT", "release": "minor" },
{ "type": "FIX", "release": "patch" }
]
}
],
[
"@semantic-release/release-notes-generator",
{
"preset": "conventionalCommits",
"parserOpts": {
"noteKeywords": ["BREAKING CHANGE", "BREAKING CHANGES", "BREAKING"]
},
"presetConfig": {
"types": [
{
"type": "feat",
"section": "Features ✨"
},
{
"type": "fix",
"section": "Bug Fixes \uD83D\uDC1E"
},
{
"type": "chore",
"section": "Internal \uD83E\uDDF0",
"hidden": true
},
{
"type": "refactor",
"section": "Internal \uD83E\uDDF0",
"hidden": false
},
{
"type": "perf",
"section": "Internal \uD83E\uDDF0",
"hidden": false
}
]
}
}
],
"@semantic-release/npm",
"@semantic-release/github",
[
"@semantic-release/git",
{
"assets": ["CHANGELOG.md", "package.json"],
"message": "chore(📦): ${nextRelease.version}\n\n${nextRelease.notes}"
}
]
]
}
3 changes: 2 additions & 1 deletion biome.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
"useIgnoreFile": false
},
"files": {
"ignoreUnknown": false
"ignoreUnknown": false,
"includes": ["**", "!dist/", "!node_modules/", "!coverage/"]
},
"formatter": {
"enabled": true,
Expand Down
3 changes: 2 additions & 1 deletion jest.config.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
const { createDefaultPreset } = require('ts-jest')
import { createDefaultPreset } from 'ts-jest'

const tsJestTransformCfg = createDefaultPreset().transform

const config: import('jest').Config = {
testEnvironment: 'node',
testMatch: ['**/*.spec.ts'],
transform: {
...tsJestTransformCfg,
},
Expand Down
11 changes: 10 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,17 +24,26 @@
"scripts": {
"build": "tsdown",
"dev": "tsdown --watch",
"test": "jest"
"test": "jest",
"test:coverage": "jest --coverage",
"lint": "biome check"
},
"keywords": [],
"author": "Sophia <me@sophia-dev.io>",
"license": "MIT",
"devDependencies": {
"@biomejs/biome": "2.2.4",
"@semantic-release/commit-analyzer": "^13.0.1",
"@semantic-release/git": "^10.0.1",
"@semantic-release/github": "^11.0.6",
"@semantic-release/npm": "^12.0.2",
"@semantic-release/release-notes-generator": "^14.1.0",
"@types/jest": "^30.0.0",
"@types/json-source-map": "^0.6.0",
"@types/node": "^24.5.1",
"conventional-changelog-conventionalcommits": "^9.1.0",
"jest": "^30.1.3",
"semantic-release": "^24.2.8",
"ts-jest": "^29.4.2",
"ts-node": "^10.9.2",
"tsdown": "^0.15.2",
Expand Down
Loading
Loading