Skip to content

Commit 766447c

Browse files
authored
Merge branch 'master' into claude/fix-issue-420-011CUuU5AJzxGDpoSBNa7foE
2 parents 3fc9505 + 162e168 commit 766447c

2 files changed

Lines changed: 49 additions & 28 deletions

File tree

.github/workflows/automated-release.yml

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,21 +87,36 @@ jobs:
8787
8888
BUMP_TYPE="none"
8989
90+
# Check for breaking changes (conventional format)
9091
if echo "$COMMITS" | grep -iE "(BREAKING CHANGE:|BREAKING:|^[a-f0-9]+ [a-z]+(\([^)]*\))?!:)" > /dev/null; then
9192
BUMP_TYPE="major"
9293
echo "Found BREAKING CHANGE - will bump MAJOR version"
9394
fi
9495
96+
# Check for features (conventional format: feat:)
9597
if [ "$BUMP_TYPE" = "none" ] && echo "$COMMITS" | grep -iE "^[a-f0-9]+ feat(\(.*\))?:" > /dev/null; then
9698
BUMP_TYPE="minor"
9799
echo "Found feat: commits - will bump MINOR version"
98100
fi
99101
102+
# Check for fixes/refactor/perf/docs (conventional format with colon)
100103
if [ "$BUMP_TYPE" = "none" ] && echo "$COMMITS" | grep -iE "^[a-f0-9]+ (fix|refactor|perf|docs)(\(.*\))?:" > /dev/null; then
101104
BUMP_TYPE="minor"
102105
echo "Found fix:/refactor:/perf:/docs: commits - will bump MINOR version"
103106
fi
104107
108+
# FALLBACK: Check for common non-conventional patterns (without colon)
109+
# This handles PR titles like "Fix issue #123" or "Add feature X"
110+
if [ "$BUMP_TYPE" = "none" ] && echo "$COMMITS" | grep -iE "^[a-f0-9]+ (add|implement|create|new) " > /dev/null; then
111+
BUMP_TYPE="minor"
112+
echo "Found Add/Implement/Create commits - will bump MINOR version"
113+
fi
114+
115+
if [ "$BUMP_TYPE" = "none" ] && echo "$COMMITS" | grep -iE "^[a-f0-9]+ (fix|update|improve|enhance|resolve|patch|correct|repair) " > /dev/null; then
116+
BUMP_TYPE="minor"
117+
echo "Found Fix/Update/Improve commits - will bump MINOR version"
118+
fi
119+
105120
case $BUMP_TYPE in
106121
major)
107122
MAJOR=$((MAJOR + 1))
@@ -188,6 +203,28 @@ jobs:
188203
CHANGELOG+=$'\n'
189204
fi
190205
206+
# FALLBACK: Non-conventional commits - New features (Add/Implement/Create/New)
207+
NEW_FEATURES=$(echo "$COMMITS" | grep -iE "^[a-f0-9]+ (add|implement|create|new) " | grep -viE "^[a-f0-9]+ (feat|fix|refactor|perf|docs)(\(.*\))?:" || true)
208+
if [ -n "$NEW_FEATURES" ]; then
209+
CHANGELOG+="### New Features"$'\n'
210+
while IFS= read -r line; do
211+
MSG=$(echo "$line" | sed -E 's/^[a-f0-9]+ //')
212+
CHANGELOG+="- $MSG"$'\n'
213+
done < <(echo "$NEW_FEATURES")
214+
CHANGELOG+=$'\n'
215+
fi
216+
217+
# FALLBACK: Non-conventional commits - Bug fixes and improvements
218+
OTHER_FIXES=$(echo "$COMMITS" | grep -iE "^[a-f0-9]+ (fix|update|improve|enhance|resolve|patch|correct|repair) " | grep -viE "^[a-f0-9]+ (feat|fix|refactor|perf|docs)(\(.*\))?:" || true)
219+
if [ -n "$OTHER_FIXES" ]; then
220+
CHANGELOG+="### Bug Fixes & Improvements"$'\n'
221+
while IFS= read -r line; do
222+
MSG=$(echo "$line" | sed -E 's/^[a-f0-9]+ //')
223+
CHANGELOG+="- $MSG"$'\n'
224+
done < <(echo "$OTHER_FIXES")
225+
CHANGELOG+=$'\n'
226+
fi
227+
191228
echo "$CHANGELOG"
192229
193230
echo "version=$NEW_VERSION" >> $GITHUB_OUTPUT

commitlint.config.js

Lines changed: 12 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -5,43 +5,27 @@ export default {
55
'body-max-line-length': [1, 'always', 200],
66
},
77
ignores: [
8-
// ===== Merge Commits =====
8+
// ===== Merge Commits ONLY =====
9+
// These are the ONLY legitimate ignores - merge commits cannot follow conventional format
10+
911
// Ignore GitHub auto-generated merge commits (PR merges)
1012
(message) => /^Merge pull request #\d+/.test(message),
1113
// Ignore merge commits when merging branches
1214
(message) => /^Merge branch '.+'/.test(message),
1315
// Ignore merge commits from remote
1416
(message) => /^Merge remote-tracking branch/.test(message),
15-
// Ignore manual merge commits (e.g., "merge: resolve conflicts...")
16-
(message) => /^merge:/i.test(message),
1717
// Ignore general merge commits containing "Merge" followed by common patterns
1818
(message) => /^Merge (origin|upstream|master|main)/i.test(message),
1919

20-
// ===== Legacy Commits (before conventional commits enforced) =====
21-
// These are squashed PR commits that used generic PR titles
22-
23-
// Ignore "Work Session Planning" and "Work on Issue" PRs
24-
(message) => /^Work (Session|on Issue)/i.test(message),
25-
26-
// Ignore "Fix issue X in AiDotNet (#Y)" PRs
27-
(message) => /^Fix issue \d+ in AiDotNet/i.test(message),
28-
29-
// Ignore legacy "Implement X" commits (not following feat: format)
30-
(message) => /^Implement\s+\w+/i.test(message),
31-
32-
// Ignore legacy "Add X" commits (not following feat: format)
33-
(message) => /^Add\s+\w+/i.test(message),
34-
35-
// Ignore legacy "Update X" commits (not following feat/fix: format)
36-
(message) => /^Update\s+\w+/i.test(message),
37-
38-
// Ignore legacy "Create X" commits
39-
(message) => /^Create\s+\w+/i.test(message),
40-
41-
// Ignore legacy "Remove X" commits
42-
(message) => /^Remove\s+\w+/i.test(message),
20+
// ===== GitHub Actions Bot Commits =====
21+
// Ignore commits made by GitHub Actions (auto-fixes, dependabot, etc.)
22+
(message) => /Co-Authored-By: github-actions\[bot\]/.test(message),
4323

44-
// Ignore commits that are just PR titles (Title (#123))
45-
(message) => /^[A-Z][^:]+\s+\(#\d+\)$/.test(message.split('\n')[0]),
24+
// NOTE: All legacy ignores have been REMOVED as of 2025-12-14.
25+
// The pr-title-lint.yml and commitlint-autofix.yml workflows now handle
26+
// auto-fixing non-compliant PR titles and commit messages.
27+
// All new commits MUST follow conventional commits format:
28+
// type(scope)?: description
29+
// Valid types: feat, fix, docs, refactor, perf, test, chore, ci, style
4630
]
4731
};

0 commit comments

Comments
 (0)