Skip to content

feat: add additional branch protection flags, closes #51#59

Merged
obcode merged 1 commit into
mainfrom
feature/branch_rules
Apr 23, 2026
Merged

feat: add additional branch protection flags, closes #51#59
obcode merged 1 commit into
mainfrom
feature/branch_rules

Conversation

@obcode

@obcode obcode commented Apr 23, 2026

Copy link
Copy Markdown
Owner

No description provided.

…closes #51

Co-authored-by: Copilot <copilot@github.com>
Copilot AI review requested due to automatic review settings April 23, 2026 22:00
@github-actions

Copy link
Copy Markdown
Contributor

Coverage

github.com/obcode/glabs/cmd/archive.go:12:		init				100.0%
github.com/obcode/glabs/cmd/check.go:10:		init				100.0%
github.com/obcode/glabs/cmd/clone.go:45:		init				100.0%
github.com/obcode/glabs/cmd/delete.go:12:		init				100.0%
github.com/obcode/glabs/cmd/generate.go:12:		init				100.0%
github.com/obcode/glabs/cmd/protect.go:12:		init				100.0%
github.com/obcode/glabs/cmd/report.go:14:		init				100.0%
github.com/obcode/glabs/cmd/root.go:39:			Execute				0.0%
github.com/obcode/glabs/cmd/root.go:43:			init				100.0%
github.com/obcode/glabs/cmd/root.go:51:			er				0.0%
github.com/obcode/glabs/cmd/root.go:56:			initConfig			0.0%
github.com/obcode/glabs/cmd/setaccess.go:12:		init				100.0%
github.com/obcode/glabs/cmd/show.go:8:			init				100.0%
github.com/obcode/glabs/cmd/update.go:12:		init				100.0%
github.com/obcode/glabs/cmd/urls.go:22:			init				100.0%
github.com/obcode/glabs/cmd/version.go:10:		init				100.0%
github.com/obcode/glabs/config/assignment.go:11:	String				100.0%
github.com/obcode/glabs/config/assignment.go:24:	GetAssignmentConfig		88.2%
github.com/obcode/glabs/config/assignment.go:80:	RepoSuffix			100.0%
github.com/obcode/glabs/config/assignment.go:94:	RepoBaseName			100.0%
github.com/obcode/glabs/config/assignment.go:102:	RepoNameWithSuffix		100.0%
github.com/obcode/glabs/config/assignment.go:106:	RepoNameForStudent		100.0%
github.com/obcode/glabs/config/assignment.go:110:	RepoNameForGroup		100.0%
github.com/obcode/glabs/config/assignment.go:114:	assignmentPath			100.0%
github.com/obcode/glabs/config/assignment.go:128:	per				100.0%
github.com/obcode/glabs/config/assignment.go:135:	description			100.0%
github.com/obcode/glabs/config/assignment.go:145:	mergeRequest			83.3%
github.com/obcode/glabs/config/course.go:14:		GetCourseConfig			50.0%
github.com/obcode/glabs/config/release.go:8:		release				100.0%
github.com/obcode/glabs/config/release.go:22:		releaseMergeRequest		100.0%
github.com/obcode/glabs/config/release.go:46:		dockerImages			100.0%
github.com/obcode/glabs/config/repo.go:11:		startercode			87.5%
github.com/obcode/glabs/config/repo.go:45:		branches			91.5%
github.com/obcode/glabs/config/repo.go:126:		normalizeBranchRuleConfigKeys	76.5%
github.com/obcode/glabs/config/repo.go:157:		defaultBranch			37.5%
github.com/obcode/glabs/config/repo.go:172:		issues				100.0%
github.com/obcode/glabs/config/repo.go:193:		clone				100.0%
github.com/obcode/glabs/config/repo.go:215:		SetBranch			100.0%
github.com/obcode/glabs/config/repo.go:219:		SetProtectToBranch		88.9%
github.com/obcode/glabs/config/repo.go:237:		SetLocalpath			100.0%
github.com/obcode/glabs/config/repo.go:241:		SetForce			100.0%
github.com/obcode/glabs/config/seeder.go:15:		seeder				53.8%
github.com/obcode/glabs/config/show.go:10:		Show				98.0%
github.com/obcode/glabs/config/students.go:14:		SetAccessLevel			100.0%
github.com/obcode/glabs/config/students.go:28:		accessLevel			100.0%
github.com/obcode/glabs/config/students.go:43:		students			100.0%
github.com/obcode/glabs/config/students.go:75:		mkStudents			94.4%
github.com/obcode/glabs/config/students.go:108:		groups				100.0%
github.com/obcode/glabs/config/urls.go:5:		Urls				100.0%
github.com/obcode/glabs/git/auth.go:11:			GetAuth				90.0%
github.com/obcode/glabs/git/clone.go:18:		Clone				80.0%
github.com/obcode/glabs/git/clone.go:38:		cloneurl			100.0%
github.com/obcode/glabs/git/clone.go:44:		localpath			100.0%
github.com/obcode/glabs/git/clone.go:48:		clone				36.1%
github.com/obcode/glabs/git/starterrepo.go:22:		PrepareStartercodeRepo		0.0%
github.com/obcode/glabs/gitlab/archive.go:14:		Archive				77.8%
github.com/obcode/glabs/gitlab/archive.go:32:		archivePerStudent		90.9%
github.com/obcode/glabs/gitlab/archive.go:54:		archivePerGroup			90.9%
github.com/obcode/glabs/gitlab/archive.go:76:		archive				75.6%
github.com/obcode/glabs/gitlab/branches.go:12:		syncConfiguredBranches		0.0%
github.com/obcode/glabs/gitlab/branches.go:49:		defaultBranchName		0.0%
github.com/obcode/glabs/gitlab/branches.go:67:		isBranchAlreadyExistsError	0.0%
github.com/obcode/glabs/gitlab/check.go:9:		CheckCourse			90.6%
github.com/obcode/glabs/gitlab/check.go:67:		checkStudent			100.0%
github.com/obcode/glabs/gitlab/check.go:89:		checkDupsInGroups		100.0%
github.com/obcode/glabs/gitlab/delete.go:11:		Delete				77.8%
github.com/obcode/glabs/gitlab/delete.go:29:		deletePerStudent		100.0%
github.com/obcode/glabs/gitlab/delete.go:40:		deletePerGroup			100.0%
github.com/obcode/glabs/gitlab/delete.go:51:		delete				92.9%
github.com/obcode/glabs/gitlab/generate.go:14:		Generate			38.9%
github.com/obcode/glabs/gitlab/generate.go:51:		generate			0.0%
github.com/obcode/glabs/gitlab/generate.go:226:		generatePerStudent		0.0%
github.com/obcode/glabs/gitlab/generate.go:239:		generatePerGroup		0.0%
github.com/obcode/glabs/gitlab/gitlab.go:13:		NewClient			80.0%
github.com/obcode/glabs/gitlab/groups.go:12:		getGroupIDByFullPath		100.0%
github.com/obcode/glabs/gitlab/groups.go:33:		getGroupID			100.0%
github.com/obcode/glabs/gitlab/groups.go:46:		createGroup			83.3%
github.com/obcode/glabs/gitlab/issues.go:14:		getStartercodeProject		100.0%
github.com/obcode/glabs/gitlab/issues.go:58:		replicateIssue			100.0%
github.com/obcode/glabs/gitlab/projects.go:12:		generateProject			77.5%
github.com/obcode/glabs/gitlab/projects.go:97:		getProjectByName		80.0%
github.com/obcode/glabs/gitlab/protect.go:15:		ProtectToBranch			77.8%
github.com/obcode/glabs/gitlab/protect.go:33:		protectBranch			75.0%
github.com/obcode/glabs/gitlab/protect.go:104:		hasProtectedBranches		100.0%
github.com/obcode/glabs/gitlab/protect.go:114:		protectSingleBranch		76.5%
github.com/obcode/glabs/gitlab/protect.go:174:		replaceBranchPermissions	88.9%
github.com/obcode/glabs/gitlab/protect.go:190:		isProtectedBranchNotFoundError	75.0%
github.com/obcode/glabs/gitlab/protect.go:199:		protectToBranchPerStudent	90.9%
github.com/obcode/glabs/gitlab/protect.go:221:		protectToBranchPerGroup		72.7%
github.com/obcode/glabs/gitlab/report.go:14:		Report				78.9%
github.com/obcode/glabs/gitlab/report.go:51:		ReportHTML			73.7%
github.com/obcode/glabs/gitlab/report.go:86:		ReportJSON			77.8%
github.com/obcode/glabs/gitlab/report_helper.go:17:	report				82.5%
github.com/obcode/glabs/gitlab/report_helper.go:135:	projectReport			85.9%
github.com/obcode/glabs/gitlab/seeder.go:21:		localpath			0.0%
github.com/obcode/glabs/gitlab/seeder.go:25:		runSeeder			0.0%
github.com/obcode/glabs/gitlab/seeder.go:100:		addAndCommit			0.0%
github.com/obcode/glabs/gitlab/seeder.go:121:		push				0.0%
github.com/obcode/glabs/gitlab/setaccess.go:14:		Setaccess			77.8%
github.com/obcode/glabs/gitlab/setaccess.go:32:		setaccess			41.5%
github.com/obcode/glabs/gitlab/setaccess.go:140:	inviteByEmail			100.0%
github.com/obcode/glabs/gitlab/setaccess.go:155:	setaccessPerStudent		100.0%
github.com/obcode/glabs/gitlab/setaccess.go:175:	setaccessPerGroup		80.0%
github.com/obcode/glabs/gitlab/starterrepo.go:14:	pushStartercode			0.0%
github.com/obcode/glabs/gitlab/update.go:15:		Update				60.0%
github.com/obcode/glabs/gitlab/update.go:44:		update				31.6%
github.com/obcode/glabs/gitlab/update.go:91:		updatePerStudent		100.0%
github.com/obcode/glabs/gitlab/update.go:111:		updatePerGroup			100.0%
github.com/obcode/glabs/gitlab/users.go:12:		getUser				95.0%
github.com/obcode/glabs/gitlab/users.go:49:		getUserID			100.0%
github.com/obcode/glabs/gitlab/users.go:63:		addMember			94.1%
github.com/obcode/glabs/main.go:18:			main				0.0%
total:							(statements)			67.1%

@obcode obcode merged commit dc396cc into main Apr 23, 2026
12 checks passed
@obcode obcode deleted the feature/branch_rules branch April 23, 2026 22:02

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR extends the branch-protection feature to support additional GitLab protected-branch flags and updates config parsing/docs/tests to match.

Changes:

  • Add allowForcePush and codeOwnerApprovalRequired to BranchRule and surface them in AssignmentConfig.Show().
  • Forward the new flags through to GitLab’s protected-branch create (POST) and update (PATCH) calls.
  • Improve config parsing to accept legacy snake_case keys for the new flags and add contract/unit tests covering the behavior.

Reviewed changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated no comments.

Show a summary per file
File Description
gitlab/protect.go Pass BranchRule through to protection logic and forward additional protection flags to GitLab API options.
gitlab/protect_contract_test.go Add contract tests asserting the new flags are sent on both create and update paths; update protectSingleBranch callsites for new signature.
gitlab/contract_test_helpers_test.go Configure the GitLab API client for tests to avoid retries that could hang against mock 5xx responses.
config/types.go Extend BranchRule with AllowForcePush and CodeOwnerApprovalRequired.
config/repo.go Decode branches with a custom mapstructure decoder and normalize legacy snake_case keys for the new flags; merge duplicate branch rules including new flags.
config/repo_test.go Add coverage for merging the new flags and for legacy snake_case config keys.
config/show.go Print the two new branch flags in Show() output.
config/urls_show_test.go Assert Show() output includes the new compact branch flags.
docs/configuration.md Document the new branch keys and add them to examples.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants