Skip to content

Commit

Permalink
Merge pull request #418 from nventive/dev/mach/implement-commit-valid…
Browse files Browse the repository at this point in the history
…ation

feat: Implement conventional commit validation
  • Loading branch information
mahdichtioui authored Dec 9, 2024
2 parents c5ac45c + 82fb10d commit af371d8
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 3 deletions.
10 changes: 7 additions & 3 deletions .azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,15 @@ variables:
- template: build/variables.yml

stages:
- stage: Commit_Validation
dependsOn: []
jobs:
- template: build/stage-commit-validation.yaml

#-if false
# This special if is used to remove those Dotnet_New stages for generated application.
- stage: Dotnet_New_GeneratedApp
dependsOn: Commit_Validation
jobs:
- template: .template.config/build/stage-donetnew.yaml

Expand Down Expand Up @@ -62,9 +68,7 @@ stages:

#-endif
- stage: Build_Staging
#-if false
dependsOn: []
#-endif
dependsOn: Commit_Validation
jobs:
- template: build/stage-build.yml
parameters:
Expand Down
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)

Prefix your items with `(Template)` if the change is about the template and not the resulting application.

## 3.6.X
- Added conventional commit validation stage `stage-commit-validation.yml`

## 3.5.X
- Bump Uno packages to 5.2.121 to fix a crash on iOS.
Expand Down
7 changes: 7 additions & 0 deletions build/stage-commit-validation.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# This stage is responsible for running the template to validate the commits of the PR
jobs:
- job: OnWindows_ValidateCommits
pool:
vmImage : $(windowsHostedAgentImage)
steps:
- template: templates/validate-commits.yaml
46 changes: 46 additions & 0 deletions build/templates/validate-commits.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# This template is used to validate that the commit messages follow the Conventional Commits specification (https://www.conventionalcommits.org/en/v1.0.0/).
# Consider placing this at the beginning of the build pipeline to ensure that the commits are valid before proceeding with longer build steps.
steps:
- task: PowerShell@2
condition: eq(variables['Build.Reason'], 'PullRequest')
inputs:
targetType: 'inline'
script: |
# Pre-Validation Logging
Write-Host "Starting PR Validation..."
Write-Host "Source Branch: $(System.PullRequest.SourceBranch)"
Write-Host "Target Branch: $(System.PullRequest.TargetBranch)"
Write-Host "Pull Request ID: $(System.PullRequest.PullRequestId)"
write-Host "Repository: $(Build.Repository.Name)"
Write-Host "Build.SourceBranch: $(Build.SourceBranch)"
# Fetch commit range
Write-Host "Retrieving commits..."
git fetch origin
Write-Host "Commit Range: origin/$(System.PullRequest.TargetBranch)..origin/$(System.PullRequest.SourceBranch)"
$commits = git log origin/$(System.PullRequest.TargetBranch)..origin/$(System.PullRequest.SourceBranch) --pretty=format:"%H %B"
$commitCount = ($commits | Measure-Object).Count
Write-Host "Commits found: $commitCount"
# Regex pattern for Conventional Commits
$pattern = '^(build|chore|ci|docs|feat|fix|perf|refactor|revert|style|test){1}(\([\w\.\-]+\))?(!)?: ([\w ])+([\s\S]*)|^(Merged PR \d+: .+)|^(Merge pull request #/d+ from .+)|^(Merge branch .+)'
Write-Host "Regular Expression: $pattern"
# Validate each commit message
$invalidCommits = @()
foreach ($commit in $commits -split "`n") {
$commitMessage = $commit.Substring($commit.IndexOf(" ") + 1)
Write-Host "Validating commit: $commitMessage"
if ($commitMessage -notmatch $pattern) {
$invalidCommits += $commitMessage
}
}
if($invalidCommits.count -gt 0) {
Write-Error "The following commit messages do no follow the Conventional Commits standard: `n$($invalidCommits -join "`n")"
exit 1
} else {
Write-Host "All commit messages are valid."
}
displayName: 'Validate Commit Messages'

0 comments on commit af371d8

Please sign in to comment.