Compare commits
	
		
			No commits in common. "main" and "v0.3.0" have entirely different histories.
		
	
	
		
	
		
					 11 changed files with 19 additions and 137 deletions
				
			
		|  | @ -1,29 +0,0 @@ | |||
| name: "Go CI" | ||||
| 
 | ||||
| on: | ||||
|   pull_request: | ||||
| 
 | ||||
| jobs: | ||||
|   golangci: | ||||
|     name: lint | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: actions/setup-go@v6 | ||||
|         with: | ||||
|           go-version: 1.25.1 | ||||
|       - name: golangci-lint | ||||
|         uses: golangci/golangci-lint-action@v7 | ||||
|         with: | ||||
|           version: v2.0 | ||||
| 
 | ||||
|   test: | ||||
|     name: test | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: actions/setup-go@v6 | ||||
|         with: | ||||
|           go-version: 1.25.1 | ||||
|       - name: Test | ||||
|         run: go test ./... | ||||
|  | @ -6,16 +6,16 @@ on: | |||
| 
 | ||||
| jobs: | ||||
|   lint: | ||||
|     name: Lint PR Title | ||||
|     name: Lint Pr Title | ||||
|     runs-on: ubuntu-latest | ||||
| 
 | ||||
|     if: github.base_ref != 'release' | ||||
| 
 | ||||
|     steps: | ||||
|       - name: Install go | ||||
|         uses: actions/setup-go@v6 | ||||
|         uses: actions/setup-go@v5 | ||||
|         with: | ||||
|           go-version: 1.25.1 | ||||
|           go-version: 1.24.2 | ||||
| 
 | ||||
|       - name: Run Pull Request Lint Action | ||||
|         uses: https://git.kjan.de/actions/pull-request-lint@main | ||||
|  |  | |||
|  | @ -52,25 +52,23 @@ jobs: | |||
|         run: | | ||||
|           git add docs/ | ||||
|           git commit -m "chore(release): [skip ci]" | ||||
|         continue-on-error: true | ||||
| 
 | ||||
|       - name: Push changes to release branch | ||||
|         if: ${{ steps.semantic.outputs.new_release_published }} | ||||
|         run: | | ||||
|           git remote set-url origin git@${{ env.GITEA_DOMAIN }}:${{ github.repository }}.git | ||||
|           git push origin HEAD:${{ env.RELEASE_BRANCH }} | ||||
|         continue-on-error: true | ||||
| 
 | ||||
|       - name: Checkout target branch | ||||
|         if: ${{ !(env.SKIP_MERGE == true) }} | ||||
|         if: ${{ steps.semantic.outputs.new_release_published && !(env.SKIP_MERGE == true) }} | ||||
|         run: git reset --hard && git checkout ${{ env.TARGET_BRANCH }} && git pull | ||||
| 
 | ||||
|       - name: Merge release | ||||
|         if: ${{ !(env.SKIP_MERGE == true) }} | ||||
|         if: ${{ steps.semantic.outputs.new_release_published && !(env.SKIP_MERGE == true) }} | ||||
|         run: git merge ${{ env.RELEASE_BRANCH }} | ||||
| 
 | ||||
|       - name: Push changes to target branch | ||||
|         if: ${{ !(env.SKIP_MERGE == true) }} | ||||
|         if: ${{ steps.semantic.outputs.new_release_published && !(env.SKIP_MERGE == true) }} | ||||
|         run: | | ||||
|           git remote set-url origin git@${{ env.GITEA_DOMAIN }}:${{ github.repository }}.git | ||||
|           git push origin HEAD:${{ env.TARGET_BRANCH }} | ||||
|  |  | |||
|  | @ -1,4 +0,0 @@ | |||
| version: "2" | ||||
| linters: | ||||
|   enable: | ||||
|     - revive | ||||
							
								
								
									
										40
									
								
								README.md
									
										
									
									
									
								
							
							
						
						
									
										40
									
								
								README.md
									
										
									
									
									
								
							|  | @ -1,41 +1,3 @@ | |||
| # pull-request-lint | ||||
| 
 | ||||
| A GitHub/Gitea Action that lints pull request titles to ensure they follow the [Conventional Commits](https://www.conventionalcommits.org/) format. | ||||
| 
 | ||||
| ## Usage | ||||
| 
 | ||||
| Add the following to your GitHub/Gitea workflow: | ||||
| 
 | ||||
| ```yaml | ||||
| name: Pull Request Lint | ||||
| 
 | ||||
| on: | ||||
|   pull_request: | ||||
|     types: [opened, edited, reopened, synchronize] | ||||
| 
 | ||||
| jobs: | ||||
|   lint: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - name: Install go | ||||
|         uses: actions/setup-go@v5 | ||||
|         with: | ||||
|           go-version: 1.24.2 | ||||
|       - uses: https://git.kjan.de/actions/pull-request-lint@release | ||||
| ``` | ||||
| 
 | ||||
| ## Validation Rules | ||||
| 
 | ||||
| The action enforces the following Conventional Commits rules for PR titles: | ||||
| 
 | ||||
| - Format must be: `type(scope)!: description` (scope and breaking change marker `!` are optional) | ||||
| - Type and scope must be lowercase | ||||
| - Description must start with lowercase | ||||
| - Breaking change indicator and footer are mutually exclusive | ||||
| - Body must be separated from description by a blank line | ||||
| - Footer tokens must use hyphens instead of spaces (except for "BREAKING CHANGE") | ||||
| 
 | ||||
| ## License | ||||
| 
 | ||||
| See [LICENSE](LICENSE) file for details. | ||||
| Lints the title of a pull request | ||||
|  | @ -1,5 +1,5 @@ | |||
| name: 'Pull Request Lint' | ||||
| description: 'A gitea action to validate if a pr follows the semantic commit guidelines' | ||||
| description: 'A simple Gitea action written in go' | ||||
| runs: | ||||
|   using: 'go' | ||||
|   main: 'main.go' | ||||
|  |  | |||
|  | @ -1,39 +1,3 @@ | |||
| # [1.1.0](https://git.kjan.de/actions/pull-request-lint/compare/v1.0.0...v1.1.0) (2025-04-09) | ||||
| 
 | ||||
| 
 | ||||
| ### Features | ||||
| 
 | ||||
| * add linters ([#11](https://git.kjan.de/actions/pull-request-lint/issues/11)) ([e332ef8](https://git.kjan.de/actions/pull-request-lint/commit/e332ef87cbab6a7e0ebde5bd17a37b50c9aea967)) | ||||
| 
 | ||||
| # [1.0.0](https://git.kjan.de/actions/pull-request-lint/compare/v0.3.0...v1.0.0) (2025-04-09) | ||||
| 
 | ||||
| 
 | ||||
| ### Code Refactoring | ||||
| 
 | ||||
| * some polishing ([86febd9](https://git.kjan.de/actions/pull-request-lint/commit/86febd99e507d250adb18fdfede0a01f6e6f8d46)) | ||||
| 
 | ||||
| 
 | ||||
| ### BREAKING CHANGES | ||||
| 
 | ||||
| * Version 1 | ||||
| 
 | ||||
| # [0.3.0](https://git.kjan.de/actions/pull-request-lint/compare/v0.2.1...v0.3.0) (2025-04-09) | ||||
| 
 | ||||
| 
 | ||||
| ### Bug Fixes | ||||
| 
 | ||||
| * **main:** improve error message for invalid PR title ([c84b1ec](https://git.kjan.de/actions/pull-request-lint/commit/c84b1ecd26d7cbd4530fed79e6078ced5d222e18)) | ||||
| * **main:** improve error message for invalid PR title ([8981c83](https://git.kjan.de/actions/pull-request-lint/commit/8981c8367edc7beff7a477510ba3a3a98b6e6751)) | ||||
| * **validation:** update error message for invalid commit format ([9b1a6a9](https://git.kjan.de/actions/pull-request-lint/commit/9b1a6a928e3483fd4ea6579cdcd8c8a9e95bb669)) | ||||
| 
 | ||||
| 
 | ||||
| ### Features | ||||
| 
 | ||||
| * **action:** update to use Go for pull request linting ([6d9c480](https://git.kjan.de/actions/pull-request-lint/commit/6d9c48078c912b91bb60d8147b1b2d7e74ad8643)) | ||||
| * add GitHub event handling and pull request title display ([0448235](https://git.kjan.de/actions/pull-request-lint/commit/044823552b5fecf0b076098d1bc47d213c00f604)) | ||||
| * add pull request linting action and validation logic ([09380fb](https://git.kjan.de/actions/pull-request-lint/commit/09380fb8d002b200cebb4d56e8800569a0b60f16)) | ||||
| * **invoke-binary:** add ls command execution in runGo function ([da4a8b3](https://git.kjan.de/actions/pull-request-lint/commit/da4a8b3030406f5ba8c82093f2385060cd0d48b8)) | ||||
| 
 | ||||
| ## [0.2.1](https://git.kjan.de/actions/pull-request-lint/compare/v0.2.0...v0.2.1) (2025-04-09) | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										2
									
								
								go.mod
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								go.mod
									
										
									
									
									
								
							|  | @ -1,3 +1,3 @@ | |||
| module git.kjan.de/actions/pull-request-lint | ||||
| 
 | ||||
| go 1.24.6 | ||||
| go 1.24.2 | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| // Package validation General validation tasks | ||||
| package validation | ||||
| 
 | ||||
| import ( | ||||
|  | @ -7,7 +6,6 @@ import ( | |||
| 	"strings" | ||||
| ) | ||||
| 
 | ||||
| // ValidateConventionalCommit validates if string follows conventional commit | ||||
| func ValidateConventionalCommit(commit string) error { | ||||
| 	// Regex to match the commit format | ||||
| 	// type(scope)!: description | ||||
|  | @ -15,26 +13,33 @@ func ValidateConventionalCommit(commit string) error { | |||
| 	// type!: description | ||||
| 	// or | ||||
| 	// type: description | ||||
| 	re := regexp.MustCompile(`^(?P<type>[a-z]+)(?P<scope>\([a-z]+\))?(?P<breaking>!)?: (?P<description>.+)$`) | ||||
| 	re := regexp.MustCompile(`^(?P<type>[a-z]+)(?P<scope>\([a-z]+\))?(?P<breaking>!)?: (?P<description>[a-z].+)$`) | ||||
| 	match := re.FindStringSubmatch(commit) | ||||
| 
 | ||||
| 	if len(match) == 0 { | ||||
| 		return fmt.Errorf("invalid commit format") | ||||
| 		return fmt.Errorf("Invalid PR title") | ||||
| 	} | ||||
| 
 | ||||
| 	typeIndex := re.SubexpIndex("type") | ||||
| 	scopeIndex := re.SubexpIndex("scope") | ||||
| 	breakingIndex := re.SubexpIndex("breaking") | ||||
| 	descriptionIndex := re.SubexpIndex("description") | ||||
| 
 | ||||
| 	commitType := match[typeIndex] | ||||
| 	scope := match[scopeIndex] | ||||
| 	breaking := match[breakingIndex] | ||||
| 	description := match[descriptionIndex] | ||||
| 
 | ||||
| 	// Type MUST be lowercase | ||||
| 	if commitType != strings.ToLower(commitType) { | ||||
| 		return fmt.Errorf("type must be lowercase") | ||||
| 	} | ||||
| 
 | ||||
| 	// Description MUST start with lowercase | ||||
| 	if description != strings.ToLower(description) { | ||||
| 		return fmt.Errorf("description must start with lowercase") | ||||
| 	} | ||||
| 
 | ||||
| 	// Scope MUST be lowercase | ||||
| 	if scope != "" && scope != strings.ToLower(scope) { | ||||
| 		return fmt.Errorf("scope must be lowercase") | ||||
|  |  | |||
							
								
								
									
										10
									
								
								main.go
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								main.go
									
										
									
									
									
								
							|  | @ -1,4 +1,3 @@ | |||
| // Package main is the main package | ||||
| package main | ||||
| 
 | ||||
| import ( | ||||
|  | @ -9,7 +8,6 @@ import ( | |||
| 	"git.kjan.de/actions/pull-request-lint/internal/validation" | ||||
| ) | ||||
| 
 | ||||
| // GithubEvent represents a github actions event | ||||
| type GithubEvent struct { | ||||
| 	PullRequest struct { | ||||
| 		Title string `json:"title"` | ||||
|  | @ -28,13 +26,7 @@ func main() { | |||
| 		fmt.Printf("Error opening %s: %v\n", eventPath, err) | ||||
| 		os.Exit(1) | ||||
| 	} | ||||
| 	defer func() { | ||||
| 		closeFileErr := eventFile.Close() | ||||
| 		if closeFileErr != nil { | ||||
| 			fmt.Println("Error closing eventFile") | ||||
| 			os.Exit(1) | ||||
| 		} | ||||
| 	}() | ||||
| 	defer eventFile.Close() | ||||
| 
 | ||||
| 	var event GithubEvent | ||||
| 	decoder := json.NewDecoder(eventFile) | ||||
|  |  | |||
|  | @ -1,6 +0,0 @@ | |||
| { | ||||
|   "$schema": "https://docs.renovatebot.com/renovate-schema.json", | ||||
|   "extends": [ | ||||
|     "local>Renovate/renovate-config" | ||||
|   ] | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue