All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, adheres to Semantic Versioning, and is generated by Changie.
| changesDir: .changes | |
| unreleasedDir: unreleased | |
| headerPath: header.tpl.md | |
| changelogPath: CHANGELOG.md | |
| versionExt: md | |
| versionFormat: '## {{.Version}} - {{.Time.Format "2006-01-02"}}' | |
| kindFormat: '' | |
| changeFormat: '- `{{.Kind}}`: {{.Body}}' | |
| body: | |
| block: true | |
| projects: | |
| - label: project # i use this for anything on project workings worth noting | |
| key: project | |
| changelog: CHANGELOG.md | |
| - label: server | |
| key: server | |
| changelog: server/CHANGELOG.md | |
| - label: extensions/intellij | |
| key: extensions/intellij | |
| changelog: extensions/intellij/CHANGELOG.md | |
| - label: extensions/vscode | |
| key: extensions/vscode | |
| changelog: extensions/vscode/CHANGELOG.md | |
| - label: docs | |
| key: docs | |
| changelog: docs/CHANGELOG.md # for releasing documents independently | |
| projectsVersionSeparator: / | |
| kinds: | |
| - label: 🤖 CI & Build | |
| auto: patch | |
| - label: 🎉 New Product Feature | |
| auto: minor | |
| - label: ⬇️ Deprecated | |
| auto: minor | |
| - label: 🧪 Tests | |
| auto: patch | |
| - label: 🔨 Refactor | |
| auto: patch | |
| - label: 🐛 Bug Fix | |
| auto: patch | |
| - label: 🔥 Breaking Change | |
| auto: minor | |
| - label: 🔒 Security | |
| auto: patch | |
| - label: ⬆️ Dependencies | |
| auto: patch | |
| - label: 🔥 Major Version Change (Breaking Changes) | |
| auto: major | |
| newlines: | |
| afterChange: 0 | |
| afterChangelogHeader: 1 | |
| afterChangelogVersion: 1 | |
| afterComponent: 1 | |
| afterFooterFile: 1 | |
| afterFooter: 1 | |
| afterHeaderFile: 1 | |
| afterHeaderTemplate: 1 | |
| afterKind: 1 | |
| afterVersion: 1 | |
| beforeChange: 0 | |
| beforeChangelogVersion: 0 | |
| beforeComponent: 0 | |
| beforeFooterFile: 0 | |
| beforeFooterTemplate: 0 | |
| beforeHeaderFile: 0 | |
| beforeHeaderTemplate: 0 | |
| beforeKind: 1 | |
| beforeVersion: 0 | |
| endOfVersion: 0 |
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, adheres to Semantic Versioning, and is generated by Changie.
You'd change from just a simple release to running changie batch auto --project extensions/vscode as the method.
I changed the template to be more compact as I set the monorepo up to run on every path change in .unreleased/*.md, and changie then does:
pwsh as it's cross-platform (powershell) and already installed on github + brew install on darwin and a bit cleaner than bash for more complex multi-line scripts.If you want less compact but normal format for changelog I did this:
versionFormat: '## {{.Version}} - {{.Time.Format "2006-01-02"}}'
kindFormat: '### {{.Kind}}'
changeFormat: '- {{ .Body -}}'
body:
block: trueReleasing every changie entry you can compact it like in the yaml file included to:
versionFormat: '## {{.Version}} - {{.Time.Format "2006-01-02"}}'
kindFormat: ''
changeFormat: '- `{{.Kind}}`: {{.Body}}'Whatever works for you!
| # Ensure full git checkout | |
| & git checkout $(Build.SourceBranchName) | |
| # Getting the list of projects from the .yaml file | |
| $projects = & yq e '.projects.key' - | ConvertFrom-Json | |
| # List of projects that had changes | |
| $changedFiles = Get-ChildItem -Path .unreleased/*.yaml -Recurse | |
| $ListOfProjectsThatHadChanges = $changedFiles | ForEach-Object { & yq e '.project' $_.FullName } | Select-Object -Unique | |
| # Batching changes for each project | |
| foreach ($project in $projects) { | |
| & changie batch auto --project $project | Out-Null | |
| if ($LASTEXITCODE -ne 0) { | |
| Write-Host "[$project] no project changes detected" | |
| } | |
| } | |
| # Set git config defaults | |
| $lastCommitUser = & git log -1 --pretty=format:'%an <%ae>' | |
| $lastCommitEmail = & git log -1 --pretty=format:'%ce' | |
| & git config user.name $lastCommitUser | |
| & git config user.email $lastCommitEmail | |
| # Add changes to git and commit | |
| & git add .changes/* | |
| if ((& git diff --staged | Measure-Object -Line).Lines -gt 0) { | |
| & git commit -m "ci(release): release for $($ListOfProjectsThatHadChanges -join ', ')" | |
| } else { | |
| Write-Host "no changes detected" | |
| } | |
| # Tagging new versions | |
| foreach ($project in $projects) { | |
| $VersionShouldBePublished = & changie latest --project $project | |
| $VersionExists = & git tag -l | Where-Object { $_ -eq $VersionShouldBePublished } | |
| if (-not $VersionExists) { | |
| & git tag $VersionShouldBePublished | |
| Write-Host "Tagged new version: $VersionShouldBePublished for project: $project" | |
| } | |
| } | |
| # Push changes and tags to the repository | |
| & git push origin $(Build.SourceBranchName) | |
| & git push origin --tags |
| # Ensure full git checkout | |
| & git checkout $(Build.SourceBranchName) | |
| # Getting the list of projects from the .yaml file | |
| $projects = & yq e '.projects.key' - | ConvertFrom-Json | |
| # List of projects that had changes | |
| $changedFiles = Get-ChildItem -Path .unreleased/*.yaml -Recurse | |
| $ListOfProjectsThatHadChanges = $changedFiles | ForEach-Object { & yq e '.project' $_.FullName } | Select-Object -Unique | |
| # Batching changes for each project | |
| foreach ($project in $projects) { | |
| & changie batch auto --project $project | Out-Null | |
| if ($LASTEXITCODE -ne 0) { | |
| Write-Host "[$project] no project changes detected" | |
| } | |
| } | |
| # Set git config defaults | |
| $lastCommitUser = & git log -1 --pretty=format:'%an <%ae>' | |
| $lastCommitEmail = & git log -1 --pretty=format:'%ce' | |
| & git config user.name $lastCommitUser | |
| & git config user.email $lastCommitEmail | |
| # Add changes to git and commit | |
| & git add .changes/* | |
| if ((& git diff --staged | Measure-Object -Line).Lines -gt 0) { | |
| & git commit -m "ci(release): release for $($ListOfProjectsThatHadChanges -join ', ')" | |
| } else { | |
| Write-Host "no changes detected" | |
| } | |
| # Create releases for new versions | |
| foreach ($project in $projects) { | |
| $VersionShouldBePublished = & changie latest --project $project | |
| $ReleaseExists = & gh release list | Where-Object { $_ -like "*$VersionShouldBePublished*" } | |
| if (-not $ReleaseExists) { | |
| & gh release create $VersionShouldBePublished --title "Release $VersionShouldBePublished" --notes "Auto-generated release for $project" | |
| Write-Host "Created release: $VersionShouldBePublished for project: $project" | |
| } | |
| } | |
| # Push changes to the repository | |
| & git push origin $(Build.SourceBranchName) | |