Skip to content

fix: implement disableColors and add git blame debug logging#23

Merged
yiftach-armis merged 2 commits intomainfrom
fix/disable-colors-and-git-blame-debug
Jan 7, 2026
Merged

fix: implement disableColors and add git blame debug logging#23
yiftach-armis merged 2 commits intomainfrom
fix/disable-colors-and-git-blame-debug

Conversation

@yiftach-armis
Copy link
Collaborator

  • Implement disableColors() to set ANSI color variables to empty strings
  • Add NO_COLOR environment variable support (https://no-color.org/)
  • Add debug logging when git blame fails (not a repo, file missing, command error)
  • Pass debug flag through FormatOptions to formatter
  • Fix staticcheck nil pointer warning in human_test.go

- Implement disableColors() to set ANSI color variables to empty strings
- Add NO_COLOR environment variable support (https://no-color.org/)
- Add debug logging when git blame fails (not a repo, file missing, command error)
- Pass debug flag through FormatOptions to formatter
- Fix staticcheck nil pointer warning in human_test.go
@github-actions
Copy link

github-actions bot commented Jan 7, 2026

Test Coverage Report

total: (statements) 56.5%

Coverage by function
github.com/ArmisSecurity/armis-cli/cmd/armis-cli/main.go:16:		main				0.0%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:34:		WithHTTPClient			100.0%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:42:		NewClient			100.0%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:78:		IsDebug				100.0%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:83:		StartIngest			78.4%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:149:		GetIngestStatus			84.2%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:182:		WaitForIngest			0.0%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:224:		FetchNormalizedResults		78.6%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:271:		FetchAllNormalizedResults	91.7%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:296:		GetScanResult			66.7%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:324:		WaitForScan			0.0%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:345:		formatBytes			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/root.go:41:		SetVersion			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/root.go:49:		Execute				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/root.go:53:		init				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/root.go:65:		getEnvOrDefault			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/root.go:72:		getEnvOrDefaultInt		100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/root.go:82:		getAPIBaseURL			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/root.go:89:		getToken			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/root.go:96:		getTenantID			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/root.go:103:		getPageLimit			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/root.go:110:		validatePageLimit		100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/scan.go:21:		init				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/scan_image.go:95:	init				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/scan_repo.go:73:	init				100.0%
github.com/ArmisSecurity/armis-cli/internal/httpclient/client.go:30:	NewClient			100.0%
github.com/ArmisSecurity/armis-cli/internal/httpclient/client.go:56:	Do				95.5%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:30:		write				66.7%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:61:		Write				90.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:92:		Format				100.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:97:		FormatWithOptions		96.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:135:	getSeverityIcon			100.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:152:	getSeverityColor		100.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:181:	init				50.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:188:	disableColors			100.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:200:	sortFindingsBySeverity		100.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:229:	loadSnippetFromFile		87.2%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:292:	formatCodeSnippet		0.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:329:	highlightColumns		0.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:365:	detectLanguage			100.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:663:	scanDuration			26.3%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:695:	renderSummaryDashboard		61.2%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:784:	renderFindings			100.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:799:	renderFinding			62.5%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:856:	renderGroupedFindings		100.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:877:	groupFindings			96.6%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:932:	severityRank			75.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:946:	isGitRepo			100.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:953:	getGitBlame			0.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:983:	parseGitBlame			85.7%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:1019:	maskEmail			100.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:1042:	getTopLevelDomain		75.0%
github.com/ArmisSecurity/armis-cli/internal/output/json.go:14:		Format				100.0%
github.com/ArmisSecurity/armis-cli/internal/output/json.go:21:		FormatWithOptions		100.0%
github.com/ArmisSecurity/armis-cli/internal/output/junit.go:43:		Format				83.3%
github.com/ArmisSecurity/armis-cli/internal/output/junit.go:67:		convertToJUnitCases		91.7%
github.com/ArmisSecurity/armis-cli/internal/output/junit.go:99:		countFailures			100.0%
github.com/ArmisSecurity/armis-cli/internal/output/junit.go:110:	FormatWithOptions		100.0%
github.com/ArmisSecurity/armis-cli/internal/output/output.go:25:	GetFormatter			100.0%
github.com/ArmisSecurity/armis-cli/internal/output/output.go:41:	ShouldFail			100.0%
github.com/ArmisSecurity/armis-cli/internal/output/output.go:57:	ExitIfNeeded			0.0%
github.com/ArmisSecurity/armis-cli/internal/output/sarif.go:64:		Format				100.0%
github.com/ArmisSecurity/armis-cli/internal/output/sarif.go:87:		convertToSarifResults		100.0%
github.com/ArmisSecurity/armis-cli/internal/output/sarif.go:124:	severityToSarifLevel		100.0%
github.com/ArmisSecurity/armis-cli/internal/output/sarif.go:138:	FormatWithOptions		100.0%
github.com/ArmisSecurity/armis-cli/internal/progress/progress.go:14:	IsCI				100.0%
github.com/ArmisSecurity/armis-cli/internal/progress/progress.go:36:	NewReader			100.0%
github.com/ArmisSecurity/armis-cli/internal/progress/progress.go:51:	NewWriter			50.0%
github.com/ArmisSecurity/armis-cli/internal/progress/progress.go:75:	NewSpinner			100.0%
github.com/ArmisSecurity/armis-cli/internal/progress/progress.go:87:	Start				17.6%
github.com/ArmisSecurity/armis-cli/internal/progress/progress.go:117:	Stop				50.0%
github.com/ArmisSecurity/armis-cli/internal/progress/progress.go:126:	UpdateMessage			100.0%
github.com/ArmisSecurity/armis-cli/internal/progress/progress.go:131:	Update				0.0%
github.com/ArmisSecurity/armis-cli/internal/progress/progress.go:136:	GetElapsed			100.0%
github.com/ArmisSecurity/armis-cli/internal/progress/progress.go:140:	formatDuration			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/image/image.go:38:	NewScanner			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/image/image.go:51:	ScanImage			0.0%
github.com/ArmisSecurity/armis-cli/internal/scan/image/image.go:84:	ScanTarball			0.0%
github.com/ArmisSecurity/armis-cli/internal/scan/image/image.go:134:	exportImage			0.0%
github.com/ArmisSecurity/armis-cli/internal/scan/image/image.go:167:	isDockerAvailable		42.9%
github.com/ArmisSecurity/armis-cli/internal/scan/image/image.go:181:	getDockerCommand		75.0%
github.com/ArmisSecurity/armis-cli/internal/scan/image/image.go:190:	validateDockerCommand		100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/image/image.go:197:	buildScanResult			0.0%
github.com/ArmisSecurity/armis-cli/internal/scan/image/image.go:224:	convertNormalizedFindings	0.0%
github.com/ArmisSecurity/armis-cli/internal/scan/image/image.go:314:	shouldFilterByExploitability	100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/image/image.go:333:	cleanDescription		100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/image/image.go:352:	isEmptyFinding			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/image/image.go:365:	mapSeverity			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/image/image.go:380:	formatElapsed			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/image/validate.go:11:	validateImageName		100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/ignore.go:18:	LoadIgnorePatterns		75.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/ignore.go:52:	loadIgnoreFile			89.5%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/ignore.go:86:	Match				100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/ignore.go:98:	shouldSkipDir			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/repo.go:36:	NewScanner			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/repo.go:49:	Scan				0.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/repo.go:132:	tarGzDirectory			0.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/repo.go:203:	calculateDirSize		0.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/repo.go:236:	shouldSkip			0.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/repo.go:267:	isTestFile			88.9%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/repo.go:310:	buildScanResult			0.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/repo.go:337:	convertNormalizedFindings	0.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/repo.go:427:	shouldFilterByExploitability	100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/repo.go:446:	cleanDescription		100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/repo.go:465:	isEmptyFinding			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/repo.go:478:	mapSeverity			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/repo.go:493:	formatElapsed			0.0%
github.com/ArmisSecurity/armis-cli/internal/util/path.go:11:		SanitizePath			100.0%
github.com/ArmisSecurity/armis-cli/test/sample-repo/src/main.go:6:	main				0.0%
total:									(statements)			56.5%

Copy link

Copilot AI left a comment

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 implements support for disabling ANSI color codes and adds debug logging for git blame operations. The changes improve accessibility by supporting the NO_COLOR standard and provide better diagnostics when git blame fails.

Key Changes:

  • Implemented disableColors() function with NO_COLOR environment variable support
  • Added debug logging to diagnose git blame failures (non-repo, missing file, command errors)
  • Fixed staticcheck nil pointer warning in human_test.go

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
internal/output/output.go Added Debug field to FormatOptions struct to enable debug logging
internal/output/human_test.go Added return statement after t.Fatal() to fix staticcheck nil pointer warning
internal/output/human.go Implemented disableColors() function, added NO_COLOR support, and debug logging for git blame operations
internal/cmd/scan_repo.go Passed debug flag to FormatOptions for repo scanning
internal/cmd/scan_image.go Passed debug flag to FormatOptions for image scanning

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

- TestDisableColors: verify all color variables are set to empty strings
- TestFormattedOutputWithoutColors: verify formatted output has no ANSI codes
- Both tests properly save and restore color values to avoid test pollution
@yiftach-armis yiftach-armis merged commit 126b0e9 into main Jan 7, 2026
6 checks passed
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