Skip to content

Commit

Permalink
ci: Implement conventional commit validation stage
Browse files Browse the repository at this point in the history
  • Loading branch information
mahdichtioui committed Dec 4, 2024
1 parent 39fd7ab commit d7c6c8c
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 3 deletions.
11 changes: 8 additions & 3 deletions build/azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,14 @@ variables:
- template: variables.yml

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

#-if false
- stage: CopyTool_GeneratedApp
dependsOn: Commit_Validation
jobs:
- template: ../src/cli/.azuredevops/stage-test-cli.yaml

Expand Down Expand Up @@ -67,10 +73,9 @@ stages:
- template: ../src/cli/.azuredevops/stage-publish-cli.yml

#-endif

- stage: Build_Staging
#-if false
dependsOn: [] # This removes the implicit dependency on previous stage and causes this to run in parallel.
#-endif
dependsOn: Commit_Validation
jobs:
- template: stage-build.yml
parameters:
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]*)'
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'
3 changes: 3 additions & 0 deletions src/cli/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ 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.

## 0.21.1
- Added conventional commit validation stage `stage-build.yml`

## 0.21.0
- Add bugsee sdk in Fluttter template
- Update build stage in `steps-build-android.yml` and `steps-build-ios` providing bugsee token
Expand Down

0 comments on commit d7c6c8c

Please sign in to comment.