@@ -254,9 +254,79 @@ Releases are fully automated via GitHub Actions:
254254
255255See [ BUILDING.md] ( BUILDING.md ) for more details.
256256
257+ ## GitHub Workflows
258+
259+ The project uses three automated GitHub Actions workflows:
260+
261+ ### 1. CI Workflow (` .github/workflows/ci.yml ` )
262+
263+ ** Triggers:** Push to ` main ` or pull requests to ` main `
264+
265+ ** What it does:**
266+ - Restores dependencies
267+ - Builds the project in Release mode
268+ - Runs all unit and integration tests
269+ - Reports test results
270+
271+ ** Skip CI:** Add ` [skip ci] ` to commit message to skip (used for docs-only changes)
272+
273+ ** Example:**
274+ ``` bash
275+ git commit -m " Update documentation [skip ci]"
276+ ```
277+
278+ ### 2. Update CHANGELOG Workflow (` .github/workflows/update-changelog.yml ` )
279+
280+ ** Triggers:** Push to ` main ` (automatically after your code is merged)
281+
282+ ** What it does:**
283+ - Extracts all commits since last release
284+ - Categorizes commits by type:
285+ - ` fix ` /` fixed ` /` bugfix ` → ** Fixed** section
286+ - ` feat ` /` add ` /` added ` → ** Added** section
287+ - ` change ` /` update ` /` refactor ` → ** Changed** section
288+ - Updates ` [Unreleased] ` section in CHANGELOG.md
289+ - Commits changes back with ` [skip ci] `
290+
291+ ** Important:**
292+ - Skips if CHANGELOG.md is the only file changed
293+ - Skips commits with ` [skip ci] ` or "Bump version"
294+ - Won't create infinite loops (uses ` [skip ci] ` and ` paths-ignore ` )
295+ - Won't trigger CI or release workflows
296+
297+ ** Commit message tips for better CHANGELOG entries:**
298+ ``` bash
299+ # Good - Will be categorized properly
300+ git commit -m " Fix ResourceFileParser order preservation"
301+ git commit -m " Add demo GIF to README"
302+ git commit -m " Change CI workflow trigger conditions"
303+
304+ # Also works - Keywords detected
305+ git commit -m " Fixed null reference in validator"
306+ git commit -m " Added new export format"
307+ ```
308+
309+ ### 3. Release Workflow (` .github/workflows/release.yml ` )
310+
311+ ** Triggers:** Push of special tags: ` release-patch ` , ` release-minor ` , ` release-major `
312+
313+ ** What it does:**
314+ - Bumps version in ` .csproj ` and ` README.md `
315+ - Updates CHANGELOG.md with version and date
316+ - Commits version changes
317+ - Creates version tag (e.g., ` v0.6.3 ` )
318+ - Runs all tests
319+ - Builds all 4 platforms
320+ - Creates GitHub release with binaries
321+ - Cleans up trigger tag
322+
323+ ** Note:** Only maintainers trigger releases.
324+
257325## Development Workflow
258326
259- ### Typical Development Cycle
327+ ### Typical Development Cycle with Automation
328+
329+ Here's how your changes flow through the automated system:
260330
261331``` bash
262332# 1. Sync with upstream
@@ -266,18 +336,73 @@ git pull upstream main
266336# 2. Create feature branch
267337git checkout -b feature/my-feature
268338
269- # 3. Make changes and test
339+ # 3. Make changes and test locally
270340dotnet build
271341dotnet test
272342
273- # 4. Commit changes
343+ # 4. Commit changes (use descriptive prefixes for CHANGELOG)
274344git add .
275- git commit -m " Add my feature"
345+ git commit -m " Add support for nested resource files"
346+ # or: "Fix validation for empty values"
347+ # or: "Change export format to include metadata"
276348
277349# 5. Push to your fork
278350git push origin feature/my-feature
279351
280352# 6. Create PR on GitHub
353+ # → CI workflow runs automatically
354+ # → Tests must pass before merge
355+
356+ # 7. After PR is merged to main:
357+ # → CI workflow runs again on main
358+ # → Update CHANGELOG workflow extracts your commit
359+ # → CHANGELOG.md is auto-updated with your changes
360+ # → Categorized based on your commit message keywords
361+ ```
362+
363+ ### What Happens After Merge
364+
365+ 1 . ** CI Workflow** runs all tests on ` main ` branch
366+ 2 . ** Update CHANGELOG Workflow** automatically:
367+ - Reads your commit message
368+ - Categorizes it (Fixed/Added/Changed)
369+ - Updates ` [Unreleased] ` section
370+ - Commits back to ` main `
371+ 3 . Your contribution is now documented and ready for the next release!
372+
373+ ** ⚠️ Important:** Always pull after your PR is merged:
374+
375+ ``` bash
376+ # After your PR is merged to main
377+ git checkout main
378+ git pull upstream main # or: git pull origin main
379+
380+ # This fetches the auto-updated CHANGELOG.md
381+ # Without this, your next push might conflict!
382+ ```
383+
384+ ** Also pull after releases:**
385+ - When a maintainer creates a release, version files are updated
386+ - Always sync before starting new work to avoid conflicts
387+
388+ ### Commit Message Best Practices
389+
390+ To ensure proper CHANGELOG categorization:
391+
392+ ``` bash
393+ # ✅ Good - Clear categorization
394+ git commit -m " Fix memory leak in resource parser"
395+ git commit -m " Add JSON export format"
396+ git commit -m " Change validation to be case-insensitive"
397+
398+ # ✅ Also good - Keywords are detected
399+ git commit -m " Fixed crash when loading empty files"
400+ git commit -m " Added support for comments in CSV"
401+ git commit -m " Refactor export logic for better performance"
402+
403+ # ⚠️ Less ideal - Will default to "Changed"
404+ git commit -m " Update code"
405+ git commit -m " Make improvements"
281406```
282407
283408### Keeping Your Fork Updated
0 commit comments