Skip to content

Commit 2791981

Browse files
deepharnessHarness
authored andcommitted
feat:[SSCA-3948]: implement SCS client for artifact source management and filtering (#37)
* feat: implement SCS client for artifact source management and filtering
1 parent 7d4d8aa commit 2791981

File tree

11 files changed

+4360
-0
lines changed

11 files changed

+4360
-0
lines changed

README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,25 @@ Toolset Name: `chaos`
100100
- `chaos_experiment_run`: Run a specific chaos experiment.
101101
- `chaos_experiment_run_result`: Get the result of a specific chaos experiment run.
102102

103+
#### Supply Chain Security (SCS) Toolset
104+
105+
Toolset Name: `scs`
106+
107+
- `list_artifact_sources`: List all artifact sources available in Harness SCS for a specific organization and project.
108+
- `list_artifacts_per_source`: List all artifacts within a specific artifact source.
109+
- `get_artifact_overview`: Get metadata, security findings, SBOM, and compliance status for a specific artifact.
110+
- `get_artifact_chain_of_custody`: Retrieve the full chain of custody (event history) for a specific artifact.
111+
- `fetch_compliance_results_by_artifact`: Fetch compliance results for a specific artifact.
112+
- `get_code_repository_overview`: Get an overview of vulnerabilities, SBOM, compliance issues, and policy violations for a code repository.
113+
- `list_scs_code_repos`: List all code repositories scanned by Harness SCS.
114+
115+
#### Security Test Orchestration (STO) Toolset
116+
117+
Toolset Name: `sto`
118+
119+
- `frontend_all_issues_list`: List and filter security issues in Harness STO by target, pipeline, tool, severity, exemption status, and type.
120+
121+
103122
#### Logs Toolset
104123

105124
Toolset Name: `logs`

client/scs/builder.go

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
package scs
2+
3+
import "github.com/harness/harness-mcp/client/scs/generated"
4+
5+
type artifactListingRequestBodyBuilder struct {
6+
b generated.ArtifactListingRequestBody
7+
}
8+
9+
func ArtifactListingRequestBodyBuilder() *artifactListingRequestBodyBuilder {
10+
return &artifactListingRequestBodyBuilder{b: generated.ArtifactListingRequestBody{}}
11+
}
12+
13+
func (bb *artifactListingRequestBodyBuilder) WithArtifactType(v []generated.ArtifactType) *artifactListingRequestBodyBuilder {
14+
if len(v) > 0 {
15+
bb.b.ArtifactType = &v
16+
}
17+
return bb
18+
}
19+
func (bb *artifactListingRequestBodyBuilder) WithComponentFilter(v []generated.ComponentFilter) *artifactListingRequestBodyBuilder {
20+
if len(v) > 0 {
21+
bb.b.ComponentFilter = &v
22+
}
23+
return bb
24+
}
25+
func (bb *artifactListingRequestBodyBuilder) WithEnvironmentType(v generated.ArtifactListingRequestBodyEnvironmentType) *artifactListingRequestBodyBuilder {
26+
if v != "" {
27+
bb.b.EnvironmentType = &v
28+
}
29+
return bb
30+
}
31+
func (bb *artifactListingRequestBodyBuilder) WithLicenseFilter(v generated.LicenseFilter) *artifactListingRequestBodyBuilder {
32+
// assuming LicenseFilter is a struct with zero-value checkable
33+
var zero generated.LicenseFilter
34+
if v != zero {
35+
bb.b.LicenseFilter = &v
36+
}
37+
return bb
38+
}
39+
func (bb *artifactListingRequestBodyBuilder) WithPolicyViolation(v generated.ArtifactListingRequestBodyPolicyViolation) *artifactListingRequestBodyBuilder {
40+
if v != "" {
41+
bb.b.PolicyViolation = &v
42+
}
43+
return bb
44+
}
45+
func (bb *artifactListingRequestBodyBuilder) WithSearchTerm(v string) *artifactListingRequestBodyBuilder {
46+
if v != "" {
47+
bb.b.SearchTerm = &v
48+
}
49+
return bb
50+
}
51+
func (bb *artifactListingRequestBodyBuilder) WithVerificationStatus(v generated.VerificationStatus) *artifactListingRequestBodyBuilder {
52+
if v != "" {
53+
bb.b.VerificationStatus = &v
54+
}
55+
return bb
56+
}
57+
58+
func (bb *artifactListingRequestBodyBuilder) Build() generated.ArtifactListingRequestBody {
59+
return bb.b
60+
}
61+
62+
type codeRepositoryListingRequestBodyBuilder struct {
63+
b generated.CodeRepositoryListingRequestBody
64+
}
65+
66+
type complianceResultByArtifactFilterBuilder struct {
67+
b generated.ComplianceResultByArtifactFilter
68+
}
69+
70+
func ComplianceResultByArtifactFilterBuilder() *complianceResultByArtifactFilterBuilder {
71+
return &complianceResultByArtifactFilterBuilder{b: generated.ComplianceResultByArtifactFilter{}}
72+
}
73+
74+
func (bb *complianceResultByArtifactFilterBuilder) WithComplianceId(v string) *complianceResultByArtifactFilterBuilder {
75+
if v != "" {
76+
bb.b.ComplianceId = &v
77+
}
78+
return bb
79+
}
80+
81+
func (bb *complianceResultByArtifactFilterBuilder) WithSearchTerm(v string) *complianceResultByArtifactFilterBuilder {
82+
if v != "" {
83+
bb.b.SearchTerm = &v
84+
}
85+
return bb
86+
}
87+
88+
func (bb *complianceResultByArtifactFilterBuilder) WithSeverity(v generated.ComplianceCheckSeverity) *complianceResultByArtifactFilterBuilder {
89+
if v != "" {
90+
bb.b.Severity = &v
91+
}
92+
return bb
93+
}
94+
95+
func (bb *complianceResultByArtifactFilterBuilder) WithStandards(v []generated.ComplianceStandardType) *complianceResultByArtifactFilterBuilder {
96+
if len(v) > 0 {
97+
bb.b.Standards = &v
98+
}
99+
return bb
100+
}
101+
102+
func (bb *complianceResultByArtifactFilterBuilder) WithStatus(v []generated.ComplianceResultStatus) *complianceResultByArtifactFilterBuilder {
103+
if len(v) > 0 {
104+
bb.b.Status = &v
105+
}
106+
return bb
107+
}
108+
109+
func (bb *complianceResultByArtifactFilterBuilder) Build() generated.ComplianceResultByArtifactFilter {
110+
return bb.b
111+
}
112+
113+
func CodeRepositoryListingRequestBodyBuilder() *codeRepositoryListingRequestBodyBuilder {
114+
return &codeRepositoryListingRequestBodyBuilder{b: generated.CodeRepositoryListingRequestBody{}}
115+
}
116+
117+
func (bb *codeRepositoryListingRequestBodyBuilder) WithDependencyFilter(v []generated.ComponentFilter) *codeRepositoryListingRequestBodyBuilder {
118+
if len(v) > 0 {
119+
bb.b.DependencyFilter = &v
120+
}
121+
return bb
122+
}
123+
124+
func (bb *codeRepositoryListingRequestBodyBuilder) WithLicenseFilter(v generated.LicenseFilter) *codeRepositoryListingRequestBodyBuilder {
125+
var zero generated.LicenseFilter
126+
if v != zero {
127+
bb.b.LicenseFilter = &v
128+
}
129+
return bb
130+
}
131+
132+
func (bb *codeRepositoryListingRequestBodyBuilder) WithSearchTerm(v string) *codeRepositoryListingRequestBodyBuilder {
133+
if v != "" {
134+
bb.b.SearchTerm = &v
135+
}
136+
return bb
137+
}
138+
139+
func (bb *codeRepositoryListingRequestBodyBuilder) Build() generated.CodeRepositoryListingRequestBody {
140+
return bb.b
141+
}

0 commit comments

Comments
 (0)