From 65a101781ccc2f2d251eedc1bb96a28aae28288d Mon Sep 17 00:00:00 2001 From: dmclink <135415819+dmclink@users.noreply.github.com> Date: Sun, 10 Aug 2025 17:48:25 +0800 Subject: [PATCH 01/11] feat: Create files for new secret scanning pattern configs API --- github/secret_scanning_pattern_configs.go | 6 ++++++ github/secret_scanning_pattern_configs_test.go | 6 ++++++ 2 files changed, 12 insertions(+) create mode 100644 github/secret_scanning_pattern_configs.go create mode 100644 github/secret_scanning_pattern_configs_test.go diff --git a/github/secret_scanning_pattern_configs.go b/github/secret_scanning_pattern_configs.go new file mode 100644 index 00000000000..6ab9517ec30 --- /dev/null +++ b/github/secret_scanning_pattern_configs.go @@ -0,0 +1,6 @@ +// Copyright 2025 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github diff --git a/github/secret_scanning_pattern_configs_test.go b/github/secret_scanning_pattern_configs_test.go new file mode 100644 index 00000000000..6ab9517ec30 --- /dev/null +++ b/github/secret_scanning_pattern_configs_test.go @@ -0,0 +1,6 @@ +// Copyright 2025 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github From 427cfdb53291570c1ed28bb27ff7fbb15eae457a Mon Sep 17 00:00:00 2001 From: dmclink <135415819+dmclink@users.noreply.github.com> Date: Sun, 10 Aug 2025 20:04:04 +0800 Subject: [PATCH 02/11] feat: Add secret scanning pattern configs function and data stubs --- github/secret_scanning_pattern_configs.go | 56 +++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/github/secret_scanning_pattern_configs.go b/github/secret_scanning_pattern_configs.go index 6ab9517ec30..61662aa9718 100644 --- a/github/secret_scanning_pattern_configs.go +++ b/github/secret_scanning_pattern_configs.go @@ -4,3 +4,59 @@ // license that can be found in the LICENSE file. package github + +import "context" + +// SecretScanningPatternConfigs represents a collection of GitHub secret scanning patterns +// and their settings related to push protection. +type SecretScanningPatternConfigs struct { + //TODO: +} + +// SecretScanningPatternConfigsUpdate represents a secret scanning pattern configurations update. +type SecretScanningPatternConfigsUpdate struct { + //TODO: +} + +// SecretScanningPatternConfigsUpdateOptions specifies optional parameters to +// the SecretScanningService.UpdatePatternConfigsForEnterprise method and +// the SecretScanningService.UpdatePatternConfigsForOrg method. +type SecretScanningPatternConfigsUpdateOptions struct { + //TODO: +} + +// ListPatternConfigsForEnterprise lists the secret scanning pattern configurations for an enterprise. +// +// Github API docs: https://docs.github.com/enterprise-cloud@latest/rest/secret-scanning/push-protection?apiVersion=2022-11-28#list-enterprise-pattern-configurations +// +//meta:operation GET /enterprises/{enterprise}/secret-scanning/pattern-configurations +func (s *SecretScanningService) ListPatternConfigsForEnterprise(ctx context.Context, enterprise string) (*SecretScanningPatternConfigs, *Response, error) { + //TODO: +} + +// UpdatePatternConfigsForEnterprise updates the secret scanning pattern configurations for an enterprise. +// +// Github API docs: https://docs.github.com/enterprise-cloud@latest/rest/secret-scanning/push-protection?apiVersion=2022-11-28#update-enterprise-pattern-configurations +// +//meta:operation PATCH /enterprises/{enterprise}/secret-scanning/pattern-configurations +func (s *SecretScanningService) UpdatePatternConfigsForEnterprise(ctx context.Context, enterprise string, opts *SecretScanningPatternConfigsUpdateOptions) (*SecretScanningPatternConfigsUpdate, *Response, error) { + //TODO: +} + +// ListPatternConfigsForOrg lists the secret scanning pattern configurations for an organization. +// +// Github API docs: https://docs.github.com/enterprise-cloud@latest/rest/secret-scanning/push-protection?apiVersion=2022-11-28#list-organization-pattern-configurations +// +//meta:operation GET /orgs/{org}/secret-scanning/pattern-configurations +func (s *SecretScanningService) ListPatternConfigsForOrg(ctx context.Context, org string) (*SecretScanningPatternConfigs, *Response, error) { + //TODO: +} + +// UpdatePatternConfigsForOrg updates the secret scanning pattern configurations for an organization. +// +// Github API docs: https://docs.github.com/enterprise-cloud@latest/rest/secret-scanning/push-protection?apiVersion=2022-11-28#update-organization-pattern-configurations +// +//meta:operation PATCH /orgs/{org}/secret-scanning/pattern-configurations +func (s *SecretScanningService) UpdatePatternConfigsForOrg(ctx context.Context, org string, opts *SecretScanningPatternConfigsUpdateOptions) (*SecretScanningPatternConfigsUpdate, *Response, error) { + //TODO: +} From ee32410b626f4909ea5e17bbdab2c895fa618a28 Mon Sep 17 00:00:00 2001 From: dmclink <135415819+dmclink@users.noreply.github.com> Date: Sun, 10 Aug 2025 21:20:36 +0800 Subject: [PATCH 03/11] feat: Finish secret scanning pattern configs data types --- github/secret_scanning_pattern_configs.go | 56 +++++++++++++++++++++-- 1 file changed, 53 insertions(+), 3 deletions(-) diff --git a/github/secret_scanning_pattern_configs.go b/github/secret_scanning_pattern_configs.go index 61662aa9718..3734bb8a7c3 100644 --- a/github/secret_scanning_pattern_configs.go +++ b/github/secret_scanning_pattern_configs.go @@ -10,19 +10,65 @@ import "context" // SecretScanningPatternConfigs represents a collection of GitHub secret scanning patterns // and their settings related to push protection. type SecretScanningPatternConfigs struct { - //TODO: + PatternConfigVersion *string `json:"pattern_config_version,omitempty"` + ProviderPatternOverrides []*SecretScanningPatternOverride `json:"provider_pattern_overrides,omitempty"` + CustomPatternOverrides []*SecretScanningPatternOverride `json:"custom_pattern_overrides,omitempty"` +} + +// SecretScanningPatternOverride respresents an override for provider partner or custom organization patterns. +type SecretScanningPatternOverride struct { + TokenType *string `json:"token_type,omitempty"` + CustomPatternVersion *string `json:"custom_pattern_version,omitempty"` + Slug *string `json:"slug,omitempty"` + DisplayName *string `json:"display_name,omitempty"` + AlertTotal *int `json:"alert_total,omitempty"` + AlertTotalPercentage *int `json:"alert_total_percentage,omitempty"` + FalsePositives *int `json:"false_positives,omitempty"` + FalsePositiveRate *int `json:"false_positive_rate,omitempty"` + Bypassrate *int `json:"bypass_rate,omitempty"` + DefaultSetting *string `json:"default_setting,omitempty"` + EnterpriseSetting *string `json:"enterprise_setting,omitempty"` + Setting *string `json:"setting,omitempty"` } // SecretScanningPatternConfigsUpdate represents a secret scanning pattern configurations update. type SecretScanningPatternConfigsUpdate struct { - //TODO: + PatternConfigVersion *string `json:"pattern_config_version,omitempty"` } // SecretScanningPatternConfigsUpdateOptions specifies optional parameters to // the SecretScanningService.UpdatePatternConfigsForEnterprise method and // the SecretScanningService.UpdatePatternConfigsForOrg method. type SecretScanningPatternConfigsUpdateOptions struct { - //TODO: + // The version of the entity. + PatternConfigVersion *string `json:"pattern_config_version,omitempty"` + + // Pattern settings for provider patterns. + ProviderPatternSettings []*SecretScanningProviderPatternSetting `json:"provider_pattern_settings,omitempty"` + + // Pattern settings for custom patterns. + CustomPatternSettings []*SecretScanningCustomPatternSetting `json:"custom_pattern_settings,omitempty"` +} + +type SecretScanningProviderPatternSetting struct { + // The ID of the pattern to configure. + TokenType string `json:"token_type"` + + // Push protection setting to set for the pattern. + // Can be one of: "not-set", "disabled", "enabled" + PushProtectionSetting string `json:"push_protection_setting"` +} + +type SecretScanningCustomPatternSetting struct { + // The ID of the pattern to configure. + TokenType string `json:"token_type"` + + // The version of the entity + CustomPatternVersion *string `json:"custom_pattern_version,omitempty"` + + // Push protection setting to set for the pattern. + // Can be one of: "not-set", "disabled", "enabled" + PushProtectionSetting string `json:"push_protection_setting"` } // ListPatternConfigsForEnterprise lists the secret scanning pattern configurations for an enterprise. @@ -32,6 +78,7 @@ type SecretScanningPatternConfigsUpdateOptions struct { //meta:operation GET /enterprises/{enterprise}/secret-scanning/pattern-configurations func (s *SecretScanningService) ListPatternConfigsForEnterprise(ctx context.Context, enterprise string) (*SecretScanningPatternConfigs, *Response, error) { //TODO: + return nil, nil, nil } // UpdatePatternConfigsForEnterprise updates the secret scanning pattern configurations for an enterprise. @@ -41,6 +88,7 @@ func (s *SecretScanningService) ListPatternConfigsForEnterprise(ctx context.Cont //meta:operation PATCH /enterprises/{enterprise}/secret-scanning/pattern-configurations func (s *SecretScanningService) UpdatePatternConfigsForEnterprise(ctx context.Context, enterprise string, opts *SecretScanningPatternConfigsUpdateOptions) (*SecretScanningPatternConfigsUpdate, *Response, error) { //TODO: + return nil, nil, nil } // ListPatternConfigsForOrg lists the secret scanning pattern configurations for an organization. @@ -50,6 +98,7 @@ func (s *SecretScanningService) UpdatePatternConfigsForEnterprise(ctx context.Co //meta:operation GET /orgs/{org}/secret-scanning/pattern-configurations func (s *SecretScanningService) ListPatternConfigsForOrg(ctx context.Context, org string) (*SecretScanningPatternConfigs, *Response, error) { //TODO: + return nil, nil, nil } // UpdatePatternConfigsForOrg updates the secret scanning pattern configurations for an organization. @@ -59,4 +108,5 @@ func (s *SecretScanningService) ListPatternConfigsForOrg(ctx context.Context, or //meta:operation PATCH /orgs/{org}/secret-scanning/pattern-configurations func (s *SecretScanningService) UpdatePatternConfigsForOrg(ctx context.Context, org string, opts *SecretScanningPatternConfigsUpdateOptions) (*SecretScanningPatternConfigsUpdate, *Response, error) { //TODO: + return nil, nil, nil } From f421fba860419f78ac7327cb2570837a86fba80b Mon Sep 17 00:00:00 2001 From: dmclink <135415819+dmclink@users.noreply.github.com> Date: Mon, 11 Aug 2025 09:49:22 +0800 Subject: [PATCH 04/11] feat: Implement secret scanning pattern configs functions --- github/secret_scanning_pattern_configs.go | 83 ++++++++++++++++++----- 1 file changed, 67 insertions(+), 16 deletions(-) diff --git a/github/secret_scanning_pattern_configs.go b/github/secret_scanning_pattern_configs.go index 3734bb8a7c3..0106f420d35 100644 --- a/github/secret_scanning_pattern_configs.go +++ b/github/secret_scanning_pattern_configs.go @@ -5,7 +5,10 @@ package github -import "context" +import ( + "context" + "fmt" +) // SecretScanningPatternConfigs represents a collection of GitHub secret scanning patterns // and their settings related to push protection. @@ -77,18 +80,20 @@ type SecretScanningCustomPatternSetting struct { // //meta:operation GET /enterprises/{enterprise}/secret-scanning/pattern-configurations func (s *SecretScanningService) ListPatternConfigsForEnterprise(ctx context.Context, enterprise string) (*SecretScanningPatternConfigs, *Response, error) { - //TODO: - return nil, nil, nil -} + u := fmt.Sprintf("enterprises/%v/secret-scanning/pattern-configurations", enterprise) -// UpdatePatternConfigsForEnterprise updates the secret scanning pattern configurations for an enterprise. -// -// Github API docs: https://docs.github.com/enterprise-cloud@latest/rest/secret-scanning/push-protection?apiVersion=2022-11-28#update-enterprise-pattern-configurations -// -//meta:operation PATCH /enterprises/{enterprise}/secret-scanning/pattern-configurations -func (s *SecretScanningService) UpdatePatternConfigsForEnterprise(ctx context.Context, enterprise string, opts *SecretScanningPatternConfigsUpdateOptions) (*SecretScanningPatternConfigsUpdate, *Response, error) { - //TODO: - return nil, nil, nil + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var patternConfigs *SecretScanningPatternConfigs + resp, err := s.client.Do(ctx, req, &patternConfigs) + if err != nil { + return nil, resp, err + } + + return patternConfigs, resp, nil } // ListPatternConfigsForOrg lists the secret scanning pattern configurations for an organization. @@ -97,8 +102,42 @@ func (s *SecretScanningService) UpdatePatternConfigsForEnterprise(ctx context.Co // //meta:operation GET /orgs/{org}/secret-scanning/pattern-configurations func (s *SecretScanningService) ListPatternConfigsForOrg(ctx context.Context, org string) (*SecretScanningPatternConfigs, *Response, error) { - //TODO: - return nil, nil, nil + u := fmt.Sprintf("orgs/%v/secret-scanning/pattern-configurations", org) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var patternConfigs *SecretScanningPatternConfigs + resp, err := s.client.Do(ctx, req, &patternConfigs) + if err != nil { + return nil, resp, err + } + + return patternConfigs, resp, nil +} + +// UpdatePatternConfigsForEnterprise updates the secret scanning pattern configurations for an enterprise. +// +// Github API docs: https://docs.github.com/enterprise-cloud@latest/rest/secret-scanning/push-protection?apiVersion=2022-11-28#update-enterprise-pattern-configurations +// +//meta:operation PATCH /enterprises/{enterprise}/secret-scanning/pattern-configurations +func (s *SecretScanningService) UpdatePatternConfigsForEnterprise(ctx context.Context, enterprise string, opts *SecretScanningPatternConfigsUpdateOptions) (*SecretScanningPatternConfigsUpdate, *Response, error) { + u := fmt.Sprintf("enterprises/%v/secret-scanning/pattern-configurations", enterprise) + + req, err := s.client.NewRequest("PATCH", u, opts) + if err != nil { + return nil, nil, err + } + + var patternConfigsUpdate *SecretScanningPatternConfigsUpdate + resp, err := s.client.Do(ctx, req, &patternConfigsUpdate) + if err != nil { + return nil, resp, err + } + + return patternConfigsUpdate, resp, nil } // UpdatePatternConfigsForOrg updates the secret scanning pattern configurations for an organization. @@ -107,6 +146,18 @@ func (s *SecretScanningService) ListPatternConfigsForOrg(ctx context.Context, or // //meta:operation PATCH /orgs/{org}/secret-scanning/pattern-configurations func (s *SecretScanningService) UpdatePatternConfigsForOrg(ctx context.Context, org string, opts *SecretScanningPatternConfigsUpdateOptions) (*SecretScanningPatternConfigsUpdate, *Response, error) { - //TODO: - return nil, nil, nil + u := fmt.Sprintf("orgs/%v/secret-scanning/pattern-configurations", org) + + req, err := s.client.NewRequest("PATCH", u, opts) + if err != nil { + return nil, nil, err + } + + var patternConfigsUpdate *SecretScanningPatternConfigsUpdate + resp, err := s.client.Do(ctx, req, &patternConfigsUpdate) + if err != nil { + return nil, resp, err + } + + return patternConfigsUpdate, resp, nil } From 24e740bac0e6aefc0d9c4297efa4f8141e43e6e5 Mon Sep 17 00:00:00 2001 From: dmclink <135415819+dmclink@users.noreply.github.com> Date: Mon, 11 Aug 2025 10:11:42 +0800 Subject: [PATCH 05/11] feat: Add secret scanning pattern config test function stubs --- .../secret_scanning_pattern_configs_test.go | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/github/secret_scanning_pattern_configs_test.go b/github/secret_scanning_pattern_configs_test.go index 6ab9517ec30..9e92d0c38dc 100644 --- a/github/secret_scanning_pattern_configs_test.go +++ b/github/secret_scanning_pattern_configs_test.go @@ -4,3 +4,60 @@ // license that can be found in the LICENSE file. package github + +import "testing" + +//TODO: implement new SecretScanningPatternConfigs method tests +func TestSecretScanningService_ListPatternConfigsForEnterprise(t *testing.T) { + t.Parallel() + client, mux, _ := setup(t) + //TODO: +} + +func TestSecretScanningService_ListPatternConfigsForOrg(t *testing.T) { + t.Parallel() + client, mux, _ := setup(t) + //TODO: +} + +func TestSecretScanningService_UpdatePatternConfigsForEnterprise(t *testing.T) { + t.Parallel() + client, mux, _ := setup(t) + //TODO: +} + +func TestSecretScanningService_UpdatePatternConfigsForOrg(t *testing.T) { + t.Parallel() + client, mux, _ := setup(t) + //TODO: +} + +func TestSecretScanningPatternConfigs_Marshal(t *testing.T) { + t.Parallel() + testJSONMarshal(t, &SecretScanningPatternConfigs{}, `{}`) + //TODO: +} + +func TestSecretScanningPatternOverride_Marshal(t *testing.T) { + t.Parallel() + testJSONMarshal(t, &SecretScanningPatternOverride{}, `{}`) + //TODO: +} + +func TestSecretScanningPatternConfigsUpdate_Marshal(t *testing.T) { + t.Parallel() + testJSONMarshal(t, &SecretScanningPatternConfigsUpdate{}, `{}`) + //TODO: +} + +func TestSecretScanningPatternConfigsUpdateOptions_Marshal(t *testing.T) { + t.Parallel() + testJSONMarshal(t, &SecretScanningPatternConfigsUpdateOptions{}, `{}`) + //TODO: +} + +func TestSecretScanningProviderPatternSetting_Marshal(t *testing.T) { + t.Parallel() + testJSONMarshal(t, &SecretScanningProviderPatternSetting{}, `{}`) + //TODO: +} From c45d1d2c4112a1d62379c1137bb97f45fb0cc6a5 Mon Sep 17 00:00:00 2001 From: dmclink <135415819+dmclink@users.noreply.github.com> Date: Mon, 11 Aug 2025 12:08:41 +0800 Subject: [PATCH 06/11] feat: Implement secret scanning pattern custom data marshal unit tests --- .../secret_scanning_pattern_configs_test.go | 224 +++++++++++++++++- 1 file changed, 215 insertions(+), 9 deletions(-) diff --git a/github/secret_scanning_pattern_configs_test.go b/github/secret_scanning_pattern_configs_test.go index 9e92d0c38dc..095aab0d546 100644 --- a/github/secret_scanning_pattern_configs_test.go +++ b/github/secret_scanning_pattern_configs_test.go @@ -10,54 +10,260 @@ import "testing" //TODO: implement new SecretScanningPatternConfigs method tests func TestSecretScanningService_ListPatternConfigsForEnterprise(t *testing.T) { t.Parallel() - client, mux, _ := setup(t) + // client, mux, _ := setup(t) //TODO: } func TestSecretScanningService_ListPatternConfigsForOrg(t *testing.T) { t.Parallel() - client, mux, _ := setup(t) + // client, mux, _ := setup(t) //TODO: } func TestSecretScanningService_UpdatePatternConfigsForEnterprise(t *testing.T) { t.Parallel() - client, mux, _ := setup(t) + // client, mux, _ := setup(t) //TODO: } func TestSecretScanningService_UpdatePatternConfigsForOrg(t *testing.T) { t.Parallel() - client, mux, _ := setup(t) + // client, mux, _ := setup(t) //TODO: } func TestSecretScanningPatternConfigs_Marshal(t *testing.T) { t.Parallel() testJSONMarshal(t, &SecretScanningPatternConfigs{}, `{}`) - //TODO: + + v := &SecretScanningPatternConfigs{ + PatternConfigVersion: Ptr("0ujsswThIGTUYm2K8FjOOfXtY1K"), + ProviderPatternOverrides: []*SecretScanningPatternOverride{ + { + TokenType: Ptr("GITHUB_PERSONAL_ACCESS_TOKEN"), + CustomPatternVersion: nil, + Slug: Ptr("github_personal_access_token_legacy_v2"), + DisplayName: Ptr("GitHub Personal Access Token (Legacy v2)"), + AlertTotal: Ptr(15), + AlertTotalPercentage: Ptr(36), + FalsePositives: Ptr(2), + FalsePositiveRate: Ptr(13), + Bypassrate: Ptr(13), + DefaultSetting: Ptr("enabled"), + EnterpriseSetting: Ptr("enabled"), + Setting: Ptr("enabled"), + }, + }, + CustomPatternOverrides: []*SecretScanningPatternOverride{ + { + TokenType: Ptr("cp_2"), + CustomPatternVersion: Ptr("0ujsswThIGTUYm2K8FjOOfXtY1K"), + Slug: Ptr("custom-api-key"), + DisplayName: Ptr("Custom API Key"), + AlertTotal: Ptr(15), + AlertTotalPercentage: Ptr(36), + FalsePositives: Ptr(3), + FalsePositiveRate: Ptr(20), + Bypassrate: Ptr(20), + DefaultSetting: Ptr("disabled"), + EnterpriseSetting: nil, + Setting: Ptr("enabled"), + }, + }, + } + + want := `{ + "pattern_config_version": "0ujsswThIGTUYm2K8FjOOfXtY1K", + "provider_pattern_overrides": [ + { + "token_type": "GITHUB_PERSONAL_ACCESS_TOKEN", + "slug": "github_personal_access_token_legacy_v2", + "display_name": "GitHub Personal Access Token (Legacy v2)", + "alert_total": 15, + "alert_total_percentage": 36, + "false_positives": 2, + "false_positive_rate": 13, + "bypass_rate": 13, + "default_setting": "enabled", + "setting": "enabled", + "enterprise_setting": "enabled" + } + ], + "custom_pattern_overrides": [ + { + "token_type": "cp_2", + "custom_pattern_version": "0ujsswThIGTUYm2K8FjOOfXtY1K", + "slug": "custom-api-key", + "display_name": "Custom API Key", + "alert_total": 15, + "alert_total_percentage": 36, + "false_positives": 3, + "false_positive_rate": 20, + "bypass_rate": 20, + "default_setting": "disabled", + "setting": "enabled" + } + ] + }` + + testJSONMarshal(t, v, want) } func TestSecretScanningPatternOverride_Marshal(t *testing.T) { t.Parallel() testJSONMarshal(t, &SecretScanningPatternOverride{}, `{}`) - //TODO: + + v := &SecretScanningPatternOverride{ + TokenType: Ptr("GITHUB_PERSONAL_ACCESS_TOKEN"), + CustomPatternVersion: nil, + Slug: Ptr("github_personal_access_token_legacy_v2"), + DisplayName: Ptr("GitHub Personal Access Token (Legacy v2)"), + AlertTotal: Ptr(15), + AlertTotalPercentage: Ptr(36), + FalsePositives: Ptr(2), + FalsePositiveRate: Ptr(13), + Bypassrate: Ptr(13), + DefaultSetting: Ptr("enabled"), + EnterpriseSetting: Ptr("enabled"), + Setting: Ptr("enabled"), + } + + want := `{ + "token_type": "GITHUB_PERSONAL_ACCESS_TOKEN", + "slug": "github_personal_access_token_legacy_v2", + "display_name": "GitHub Personal Access Token (Legacy v2)", + "alert_total": 15, + "alert_total_percentage": 36, + "false_positives": 2, + "false_positive_rate": 13, + "bypass_rate": 13, + "default_setting": "enabled", + "setting": "enabled", + "enterprise_setting": "enabled" + }` + + testJSONMarshal(t, v, want) + + v = &SecretScanningPatternOverride{ + TokenType: Ptr("cp_2"), + CustomPatternVersion: Ptr("0ujsswThIGTUYm2K8FjOOfXtY1K"), + Slug: Ptr("custom-api-key"), + DisplayName: Ptr("Custom API Key"), + AlertTotal: Ptr(15), + AlertTotalPercentage: Ptr(36), + FalsePositives: Ptr(3), + FalsePositiveRate: Ptr(20), + Bypassrate: Ptr(20), + DefaultSetting: Ptr("disabled"), + EnterpriseSetting: nil, + Setting: Ptr("enabled"), + } + + want = `{ + "token_type": "cp_2", + "custom_pattern_version": "0ujsswThIGTUYm2K8FjOOfXtY1K", + "slug": "custom-api-key", + "display_name": "Custom API Key", + "alert_total": 15, + "alert_total_percentage": 36, + "false_positives": 3, + "false_positive_rate": 20, + "bypass_rate": 20, + "default_setting": "disabled", + "setting": "enabled" + }` + + testJSONMarshal(t, v, want) } func TestSecretScanningPatternConfigsUpdate_Marshal(t *testing.T) { t.Parallel() testJSONMarshal(t, &SecretScanningPatternConfigsUpdate{}, `{}`) - //TODO: + + v := &SecretScanningPatternConfigsUpdate{ + PatternConfigVersion: Ptr("0ujsswThIGTUYm2K8FjOOfXtY1K"), + } + + want := `{ + "pattern_config_version": "0ujsswThIGTUYm2K8FjOOfXtY1K" + }` + + testJSONMarshal(t, v, want) } func TestSecretScanningPatternConfigsUpdateOptions_Marshal(t *testing.T) { t.Parallel() testJSONMarshal(t, &SecretScanningPatternConfigsUpdateOptions{}, `{}`) - //TODO: + + v := &SecretScanningPatternConfigsUpdateOptions{ + PatternConfigVersion: Ptr("0ujsswThIGTUYm2K8FjOOfXtY1K"), + ProviderPatternSettings: []*SecretScanningProviderPatternSetting{ + { + TokenType: "GITHUB_PERSONAL_ACCESS_TOKEN", + PushProtectionSetting: "enabled", + }, + }, + CustomPatternSettings: []*SecretScanningCustomPatternSetting{ + { + TokenType: "cp_2", + CustomPatternVersion: Ptr("0ujsswThIGTUYm2K8FjOOfXtY1K"), + PushProtectionSetting: "enabled", + }, + }, + } + + want := `{ + "pattern_config_version": "0ujsswThIGTUYm2K8FjOOfXtY1K", + "provider_pattern_settings": [ + { + "token_type": "GITHUB_PERSONAL_ACCESS_TOKEN", + "push_protection_setting": "enabled" + } + ], + "custom_pattern_settings": [ + { + "token_type": "cp_2", + "custom_pattern_version": "0ujsswThIGTUYm2K8FjOOfXtY1K", + "push_protection_setting": "enabled" + } + ] + }` + + testJSONMarshal(t, v, want) } func TestSecretScanningProviderPatternSetting_Marshal(t *testing.T) { t.Parallel() testJSONMarshal(t, &SecretScanningProviderPatternSetting{}, `{}`) - //TODO: + + v := SecretScanningProviderPatternSetting{ + TokenType: "GITHUB_PERSONAL_ACCESS_TOKEN", + PushProtectionSetting: "enabled", + } + + want := `{ + "token_type": "GITHUB_PERSONAL_ACCESS_TOKEN", + "push_protection_setting": "enabled" + }` + + testJSONMarshal(t, v, want) +} + +func TestSecretScanninCustomPatternSetting_Marshal(t *testing.T) { + t.Parallel() + testJSONMarshal(t, &SecretScanningCustomPatternSetting{}, `{}`) + + v := SecretScanningCustomPatternSetting{ + TokenType: "cp_2", + CustomPatternVersion: Ptr("0ujsswThIGTUYm2K8FjOOfXtY1K"), + PushProtectionSetting: "enabled", + } + + want := `{ + "token_type": "cp_2", + "custom_pattern_version": "0ujsswThIGTUYm2K8FjOOfXtY1K", + "push_protection_setting": "enabled" + }` + + testJSONMarshal(t, v, want) } From 1dec771630c362f8e848290b1590f76d87514e07 Mon Sep 17 00:00:00 2001 From: dmclink <135415819+dmclink@users.noreply.github.com> Date: Mon, 11 Aug 2025 17:16:53 +0800 Subject: [PATCH 07/11] feat: Implement unit tests for secret scanning pattern config list funcs --- .../secret_scanning_pattern_configs_test.go | 209 +++++++++++++++++- 1 file changed, 204 insertions(+), 5 deletions(-) diff --git a/github/secret_scanning_pattern_configs_test.go b/github/secret_scanning_pattern_configs_test.go index 095aab0d546..3763a0876b4 100644 --- a/github/secret_scanning_pattern_configs_test.go +++ b/github/secret_scanning_pattern_configs_test.go @@ -5,18 +5,217 @@ package github -import "testing" +import ( + "context" + "fmt" + "net/http" + "testing" + + "github.com/google/go-cmp/cmp" +) -//TODO: implement new SecretScanningPatternConfigs method tests func TestSecretScanningService_ListPatternConfigsForEnterprise(t *testing.T) { t.Parallel() - // client, mux, _ := setup(t) - //TODO: + client, mux, _ := setup(t) + + mux.HandleFunc("/enterprises/e/secret-scanning/pattern-configurations", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "GET") + + fmt.Fprint(w, `{ + "pattern_config_version": "0ujsswThIGTUYm2K8FjOOfXtY1K", + "provider_pattern_overrides": [ + { + "token_type": "GITHUB_PERSONAL_ACCESS_TOKEN", + "slug": "github_personal_access_token_legacy_v2", + "display_name": "GitHub Personal Access Token (Legacy v2)", + "alert_total": 15, + "alert_total_percentage": 36, + "false_positives": 2, + "false_positive_rate": 13, + "bypass_rate": 13, + "default_setting": "enabled", + "setting": "enabled", + "enterprise_setting": "enabled" + } + ], + "custom_pattern_overrides": [ + { + "token_type": "cp_2", + "custom_pattern_version": "0ujsswThIGTUYm2K8FjOOfXtY1K", + "slug": "custom-api-key", + "display_name": "Custom API Key", + "alert_total": 15, + "alert_total_percentage": 36, + "false_positives": 3, + "false_positive_rate": 20, + "bypass_rate": 20, + "default_setting": "disabled", + "setting": "enabled" + } + ] + }`) + }) + + ctx := context.Background() + + patternConfigs, _, err := client.SecretScanning.ListPatternConfigsForEnterprise(ctx, "e") + if err != nil { + t.Errorf("SecretScanning.ListPatternConfigsForEnterprise returned error: %v", err) + } + + want := &SecretScanningPatternConfigs{ + PatternConfigVersion: Ptr("0ujsswThIGTUYm2K8FjOOfXtY1K"), + ProviderPatternOverrides: []*SecretScanningPatternOverride{ + { + TokenType: Ptr("GITHUB_PERSONAL_ACCESS_TOKEN"), + CustomPatternVersion: nil, + Slug: Ptr("github_personal_access_token_legacy_v2"), + DisplayName: Ptr("GitHub Personal Access Token (Legacy v2)"), + AlertTotal: Ptr(15), + AlertTotalPercentage: Ptr(36), + FalsePositives: Ptr(2), + FalsePositiveRate: Ptr(13), + Bypassrate: Ptr(13), + DefaultSetting: Ptr("enabled"), + EnterpriseSetting: Ptr("enabled"), + Setting: Ptr("enabled"), + }, + }, + CustomPatternOverrides: []*SecretScanningPatternOverride{ + { + TokenType: Ptr("cp_2"), + CustomPatternVersion: Ptr("0ujsswThIGTUYm2K8FjOOfXtY1K"), + Slug: Ptr("custom-api-key"), + DisplayName: Ptr("Custom API Key"), + AlertTotal: Ptr(15), + AlertTotalPercentage: Ptr(36), + FalsePositives: Ptr(3), + FalsePositiveRate: Ptr(20), + Bypassrate: Ptr(20), + DefaultSetting: Ptr("disabled"), + EnterpriseSetting: nil, + Setting: Ptr("enabled"), + }, + }, + } + + if !cmp.Equal(patternConfigs, want) { + t.Errorf("SecretScanning.ListPatternConfigsForEnterprise returned %+v, want %+v", patternConfigs, want) + } + + const methodName = "ListPatternConfigsForEnterprise" + + testBadOptions(t, methodName, func() (err error) { + _, _, err = client.SecretScanning.ListPatternConfigsForEnterprise(ctx, "\n") + return err + }) + + testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { + _, resp, err := client.SecretScanning.ListPatternConfigsForEnterprise(ctx, "e") + return resp, err + }) } func TestSecretScanningService_ListPatternConfigsForOrg(t *testing.T) { t.Parallel() - // client, mux, _ := setup(t) + client, mux, _ := setup(t) + + mux.HandleFunc("/orgs/o/secret-scanning/pattern-configurations", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "GET") + + fmt.Fprint(w, `{ + "pattern_config_version": "0ujsswThIGTUYm2K8FjOOfXtY1K", + "provider_pattern_overrides": [ + { + "token_type": "GITHUB_PERSONAL_ACCESS_TOKEN", + "slug": "github_personal_access_token_legacy_v2", + "display_name": "GitHub Personal Access Token (Legacy v2)", + "alert_total": 15, + "alert_total_percentage": 36, + "false_positives": 2, + "false_positive_rate": 13, + "bypass_rate": 13, + "default_setting": "enabled", + "setting": "enabled", + "enterprise_setting": "enabled" + } + ], + "custom_pattern_overrides": [ + { + "token_type": "cp_2", + "custom_pattern_version": "0ujsswThIGTUYm2K8FjOOfXtY1K", + "slug": "custom-api-key", + "display_name": "Custom API Key", + "alert_total": 15, + "alert_total_percentage": 36, + "false_positives": 3, + "false_positive_rate": 20, + "bypass_rate": 20, + "default_setting": "disabled", + "setting": "enabled" + } + ] + }`) + + ctx := context.Background() + + patternConfigs, _, err := client.SecretScanning.ListPatternConfigsForOrg(ctx, "o") + if err != nil { + t.Errorf("SecretScanning.ListPatternConfigsForOrg returned error: %v", err) + } + + want := &SecretScanningPatternConfigs{ + PatternConfigVersion: Ptr("0ujsswThIGTUYm2K8FjOOfXtY1K"), + ProviderPatternOverrides: []*SecretScanningPatternOverride{ + { + TokenType: Ptr("GITHUB_PERSONAL_ACCESS_TOKEN"), + CustomPatternVersion: nil, + Slug: Ptr("github_personal_access_token_legacy_v2"), + DisplayName: Ptr("GitHub Personal Access Token (Legacy v2)"), + AlertTotal: Ptr(15), + AlertTotalPercentage: Ptr(36), + FalsePositives: Ptr(2), + FalsePositiveRate: Ptr(13), + Bypassrate: Ptr(13), + DefaultSetting: Ptr("enabled"), + EnterpriseSetting: Ptr("enabled"), + Setting: Ptr("enabled"), + }, + }, + CustomPatternOverrides: []*SecretScanningPatternOverride{ + { + TokenType: Ptr("cp_2"), + CustomPatternVersion: Ptr("0ujsswThIGTUYm2K8FjOOfXtY1K"), + Slug: Ptr("custom-api-key"), + DisplayName: Ptr("Custom API Key"), + AlertTotal: Ptr(15), + AlertTotalPercentage: Ptr(36), + FalsePositives: Ptr(3), + FalsePositiveRate: Ptr(20), + Bypassrate: Ptr(20), + DefaultSetting: Ptr("disabled"), + EnterpriseSetting: nil, + Setting: Ptr("enabled"), + }, + }, + } + + if !cmp.Equal(patternConfigs, want) { + t.Errorf("SecretScanning.ListPatternConfigsForOrg returned %+v, want %+v", patternConfigs, want) + } + + const methodName = "ListPatternConfigsForOrg" + + testBadOptions(t, methodName, func() (err error) { + _, _, err = client.SecretScanning.ListPatternConfigsForOrg(ctx, "\n") + return err + }) + + testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { + _, resp, err := client.SecretScanning.ListPatternConfigsForOrg(ctx, "o") + return resp, err + }) + }) //TODO: } From a24c54e9d607a4191c64a38ca8f846c57d3b70f5 Mon Sep 17 00:00:00 2001 From: dmclink <135415819+dmclink@users.noreply.github.com> Date: Mon, 11 Aug 2025 17:33:06 +0800 Subject: [PATCH 08/11] feat: Implement tests for secret scanning pattern configs update funcs --- .../secret_scanning_pattern_configs_test.go | 111 +++++++++++++++++- 1 file changed, 106 insertions(+), 5 deletions(-) diff --git a/github/secret_scanning_pattern_configs_test.go b/github/secret_scanning_pattern_configs_test.go index 3763a0876b4..2db1c6d7648 100644 --- a/github/secret_scanning_pattern_configs_test.go +++ b/github/secret_scanning_pattern_configs_test.go @@ -216,19 +216,120 @@ func TestSecretScanningService_ListPatternConfigsForOrg(t *testing.T) { return resp, err }) }) - //TODO: } func TestSecretScanningService_UpdatePatternConfigsForEnterprise(t *testing.T) { t.Parallel() - // client, mux, _ := setup(t) - //TODO: + client, mux, _ := setup(t) + + mux.HandleFunc("/enterprises/e/secret-scanning/pattern-configurations", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "PATCH") + + fmt.Fprint(w, `{ + "pattern_config_version": "0ujsswThIGTUYm2K8FjOOfXtY1K" + }`) + + ctx := context.Background() + + opts := &SecretScanningPatternConfigsUpdateOptions{ + PatternConfigVersion: Ptr("0ujsswThIGTUYm2K8FjOOfXtY1K"), + ProviderPatternSettings: []*SecretScanningProviderPatternSetting{ + { + TokenType: "GITHUB_PERSONAL_ACCESS_TOKEN", + PushProtectionSetting: "enabled", + }, + }, + CustomPatternSettings: []*SecretScanningCustomPatternSetting{ + { + TokenType: "cp_2", + CustomPatternVersion: Ptr("0ujsswThIGTUYm2K8FjOOfXtY1K"), + PushProtectionSetting: "enabled", + }, + }, + } + + configsUpdate, _, err := client.SecretScanning.UpdatePatternConfigsForEnterprise(ctx, "e", opts) + if err != nil { + t.Errorf("SecretScanning.UpdatePatternConfigsForEnterprise returned error: %v", err) + } + + want := &SecretScanningPatternConfigsUpdate{ + PatternConfigVersion: Ptr("0ujsswThIGTUYm2K8FjOOfXtY1K"), + } + + if !cmp.Equal(configsUpdate, want) { + t.Errorf("SecretScanning.UpdatePatternConfigsForEnterprise returned %+v, want %+v", configsUpdate, want) + } + + const methodName = "UpdatePatternConfigsForEnterprise" + + testBadOptions(t, methodName, func() (err error) { + _, _, err = client.SecretScanning.UpdatePatternConfigsForEnterprise(ctx, "\n", opts) + return err + }) + + testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { + _, resp, err := client.SecretScanning.UpdatePatternConfigsForEnterprise(ctx, "o", opts) + return resp, err + }) + }) } func TestSecretScanningService_UpdatePatternConfigsForOrg(t *testing.T) { t.Parallel() - // client, mux, _ := setup(t) - //TODO: + client, mux, _ := setup(t) + + mux.HandleFunc("/orgs/o/secret-scanning/pattern-configurations", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "PATCH") + + fmt.Fprint(w, `{ + "pattern_config_version": "0ujsswThIGTUYm2K8FjOOfXtY1K" + }`) + + ctx := context.Background() + + opts := &SecretScanningPatternConfigsUpdateOptions{ + PatternConfigVersion: Ptr("0ujsswThIGTUYm2K8FjOOfXtY1K"), + ProviderPatternSettings: []*SecretScanningProviderPatternSetting{ + { + TokenType: "GITHUB_PERSONAL_ACCESS_TOKEN", + PushProtectionSetting: "enabled", + }, + }, + CustomPatternSettings: []*SecretScanningCustomPatternSetting{ + { + TokenType: "cp_2", + CustomPatternVersion: Ptr("0ujsswThIGTUYm2K8FjOOfXtY1K"), + PushProtectionSetting: "enabled", + }, + }, + } + + configsUpdate, _, err := client.SecretScanning.UpdatePatternConfigsForOrg(ctx, "o", opts) + if err != nil { + t.Errorf("SecretScanning.UpdatePatternConfigsForOrg returned err: %v", err) + } + + want := &SecretScanningPatternConfigsUpdate{ + PatternConfigVersion: Ptr("0ujsswThIGTUYm2K8FjOOfXtY1K"), + } + + if !cmp.Equal(configsUpdate, want) { + t.Errorf("SecretScanning.UpdatePatternConfigsForOrg returned %+v, want %+v", configsUpdate, want) + } + + const methodName = "UpdatePatternConfigsForOrg" + + testBadOptions(t, methodName, func() (err error) { + _, _, err = client.SecretScanning.UpdatePatternConfigsForOrg(ctx, "\n", opts) + return err + }) + + testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { + _, resp, err := client.SecretScanning.UpdatePatternConfigsForOrg(ctx, "o", opts) + return resp, err + }) + }) } func TestSecretScanningPatternConfigs_Marshal(t *testing.T) { From 837e96a47854627e2987cb99aa0fda4bb027e5a4 Mon Sep 17 00:00:00 2001 From: dmclink <135415819+dmclink@users.noreply.github.com> Date: Tue, 12 Aug 2025 15:51:47 +0800 Subject: [PATCH 09/11] feat: Generate code with script/generate.sh --- github/github-accessors.go | 128 ++++++++++++++++ github/github-accessors_test.go | 176 ++++++++++++++++++++++ github/secret_scanning_pattern_configs.go | 8 +- 3 files changed, 308 insertions(+), 4 deletions(-) diff --git a/github/github-accessors.go b/github/github-accessors.go index 02035759a79..28651710d6b 100644 --- a/github/github-accessors.go +++ b/github/github-accessors.go @@ -25574,6 +25574,134 @@ func (s *SecretScanningAlertUpdateOptions) GetResolutionComment() string { return *s.ResolutionComment } +// GetCustomPatternVersion returns the CustomPatternVersion field if it's non-nil, zero value otherwise. +func (s *SecretScanningCustomPatternSetting) GetCustomPatternVersion() string { + if s == nil || s.CustomPatternVersion == nil { + return "" + } + return *s.CustomPatternVersion +} + +// GetPatternConfigVersion returns the PatternConfigVersion field if it's non-nil, zero value otherwise. +func (s *SecretScanningPatternConfigs) GetPatternConfigVersion() string { + if s == nil || s.PatternConfigVersion == nil { + return "" + } + return *s.PatternConfigVersion +} + +// GetPatternConfigVersion returns the PatternConfigVersion field if it's non-nil, zero value otherwise. +func (s *SecretScanningPatternConfigsUpdate) GetPatternConfigVersion() string { + if s == nil || s.PatternConfigVersion == nil { + return "" + } + return *s.PatternConfigVersion +} + +// GetPatternConfigVersion returns the PatternConfigVersion field if it's non-nil, zero value otherwise. +func (s *SecretScanningPatternConfigsUpdateOptions) GetPatternConfigVersion() string { + if s == nil || s.PatternConfigVersion == nil { + return "" + } + return *s.PatternConfigVersion +} + +// GetAlertTotal returns the AlertTotal field if it's non-nil, zero value otherwise. +func (s *SecretScanningPatternOverride) GetAlertTotal() int { + if s == nil || s.AlertTotal == nil { + return 0 + } + return *s.AlertTotal +} + +// GetAlertTotalPercentage returns the AlertTotalPercentage field if it's non-nil, zero value otherwise. +func (s *SecretScanningPatternOverride) GetAlertTotalPercentage() int { + if s == nil || s.AlertTotalPercentage == nil { + return 0 + } + return *s.AlertTotalPercentage +} + +// GetBypassrate returns the Bypassrate field if it's non-nil, zero value otherwise. +func (s *SecretScanningPatternOverride) GetBypassrate() int { + if s == nil || s.Bypassrate == nil { + return 0 + } + return *s.Bypassrate +} + +// GetCustomPatternVersion returns the CustomPatternVersion field if it's non-nil, zero value otherwise. +func (s *SecretScanningPatternOverride) GetCustomPatternVersion() string { + if s == nil || s.CustomPatternVersion == nil { + return "" + } + return *s.CustomPatternVersion +} + +// GetDefaultSetting returns the DefaultSetting field if it's non-nil, zero value otherwise. +func (s *SecretScanningPatternOverride) GetDefaultSetting() string { + if s == nil || s.DefaultSetting == nil { + return "" + } + return *s.DefaultSetting +} + +// GetDisplayName returns the DisplayName field if it's non-nil, zero value otherwise. +func (s *SecretScanningPatternOverride) GetDisplayName() string { + if s == nil || s.DisplayName == nil { + return "" + } + return *s.DisplayName +} + +// GetEnterpriseSetting returns the EnterpriseSetting field if it's non-nil, zero value otherwise. +func (s *SecretScanningPatternOverride) GetEnterpriseSetting() string { + if s == nil || s.EnterpriseSetting == nil { + return "" + } + return *s.EnterpriseSetting +} + +// GetFalsePositiveRate returns the FalsePositiveRate field if it's non-nil, zero value otherwise. +func (s *SecretScanningPatternOverride) GetFalsePositiveRate() int { + if s == nil || s.FalsePositiveRate == nil { + return 0 + } + return *s.FalsePositiveRate +} + +// GetFalsePositives returns the FalsePositives field if it's non-nil, zero value otherwise. +func (s *SecretScanningPatternOverride) GetFalsePositives() int { + if s == nil || s.FalsePositives == nil { + return 0 + } + return *s.FalsePositives +} + +// GetSetting returns the Setting field if it's non-nil, zero value otherwise. +func (s *SecretScanningPatternOverride) GetSetting() string { + if s == nil || s.Setting == nil { + return "" + } + return *s.Setting +} + +// GetSlug returns the Slug field if it's non-nil, zero value otherwise. +func (s *SecretScanningPatternOverride) GetSlug() string { + if s == nil || s.Slug == nil { + return "" + } + return *s.Slug +} + +// GetTokenType returns the TokenType field if it's non-nil, zero value otherwise. +func (s *SecretScanningPatternOverride) GetTokenType() string { + if s == nil || s.TokenType == nil { + return "" + } + return *s.TokenType +} + // GetStatus returns the Status field if it's non-nil, zero value otherwise. func (s *SecretScanningPushProtection) GetStatus() string { if s == nil || s.Status == nil { diff --git a/github/github-accessors_test.go b/github/github-accessors_test.go index 3fd50944499..183b8cb6150 100644 --- a/github/github-accessors_test.go +++ b/github/github-accessors_test.go @@ -32940,6 +32940,182 @@ func TestSecretScanningAlertUpdateOptions_GetResolutionComment(tt *testing.T) { s.GetResolutionComment() } +func TestSecretScanningCustomPatternSetting_GetCustomPatternVersion(tt *testing.T) { + tt.Parallel() + var zeroValue string + s := &SecretScanningCustomPatternSetting{CustomPatternVersion: &zeroValue} + s.GetCustomPatternVersion() + s = &SecretScanningCustomPatternSetting{} + s.GetCustomPatternVersion() + s = nil + s.GetCustomPatternVersion() +} + +func TestSecretScanningPatternConfigs_GetPatternConfigVersion(tt *testing.T) { + tt.Parallel() + var zeroValue string + s := &SecretScanningPatternConfigs{PatternConfigVersion: &zeroValue} + s.GetPatternConfigVersion() + s = &SecretScanningPatternConfigs{} + s.GetPatternConfigVersion() + s = nil + s.GetPatternConfigVersion() +} + +func TestSecretScanningPatternConfigsUpdate_GetPatternConfigVersion(tt *testing.T) { + tt.Parallel() + var zeroValue string + s := &SecretScanningPatternConfigsUpdate{PatternConfigVersion: &zeroValue} + s.GetPatternConfigVersion() + s = &SecretScanningPatternConfigsUpdate{} + s.GetPatternConfigVersion() + s = nil + s.GetPatternConfigVersion() +} + +func TestSecretScanningPatternConfigsUpdateOptions_GetPatternConfigVersion(tt *testing.T) { + tt.Parallel() + var zeroValue string + s := &SecretScanningPatternConfigsUpdateOptions{PatternConfigVersion: &zeroValue} + s.GetPatternConfigVersion() + s = &SecretScanningPatternConfigsUpdateOptions{} + s.GetPatternConfigVersion() + s = nil + s.GetPatternConfigVersion() +} + +func TestSecretScanningPatternOverride_GetAlertTotal(tt *testing.T) { + tt.Parallel() + var zeroValue int + s := &SecretScanningPatternOverride{AlertTotal: &zeroValue} + s.GetAlertTotal() + s = &SecretScanningPatternOverride{} + s.GetAlertTotal() + s = nil + s.GetAlertTotal() +} + +func TestSecretScanningPatternOverride_GetAlertTotalPercentage(tt *testing.T) { + tt.Parallel() + var zeroValue int + s := &SecretScanningPatternOverride{AlertTotalPercentage: &zeroValue} + s.GetAlertTotalPercentage() + s = &SecretScanningPatternOverride{} + s.GetAlertTotalPercentage() + s = nil + s.GetAlertTotalPercentage() +} + +func TestSecretScanningPatternOverride_GetBypassrate(tt *testing.T) { + tt.Parallel() + var zeroValue int + s := &SecretScanningPatternOverride{Bypassrate: &zeroValue} + s.GetBypassrate() + s = &SecretScanningPatternOverride{} + s.GetBypassrate() + s = nil + s.GetBypassrate() +} + +func TestSecretScanningPatternOverride_GetCustomPatternVersion(tt *testing.T) { + tt.Parallel() + var zeroValue string + s := &SecretScanningPatternOverride{CustomPatternVersion: &zeroValue} + s.GetCustomPatternVersion() + s = &SecretScanningPatternOverride{} + s.GetCustomPatternVersion() + s = nil + s.GetCustomPatternVersion() +} + +func TestSecretScanningPatternOverride_GetDefaultSetting(tt *testing.T) { + tt.Parallel() + var zeroValue string + s := &SecretScanningPatternOverride{DefaultSetting: &zeroValue} + s.GetDefaultSetting() + s = &SecretScanningPatternOverride{} + s.GetDefaultSetting() + s = nil + s.GetDefaultSetting() +} + +func TestSecretScanningPatternOverride_GetDisplayName(tt *testing.T) { + tt.Parallel() + var zeroValue string + s := &SecretScanningPatternOverride{DisplayName: &zeroValue} + s.GetDisplayName() + s = &SecretScanningPatternOverride{} + s.GetDisplayName() + s = nil + s.GetDisplayName() +} + +func TestSecretScanningPatternOverride_GetEnterpriseSetting(tt *testing.T) { + tt.Parallel() + var zeroValue string + s := &SecretScanningPatternOverride{EnterpriseSetting: &zeroValue} + s.GetEnterpriseSetting() + s = &SecretScanningPatternOverride{} + s.GetEnterpriseSetting() + s = nil + s.GetEnterpriseSetting() +} + +func TestSecretScanningPatternOverride_GetFalsePositiveRate(tt *testing.T) { + tt.Parallel() + var zeroValue int + s := &SecretScanningPatternOverride{FalsePositiveRate: &zeroValue} + s.GetFalsePositiveRate() + s = &SecretScanningPatternOverride{} + s.GetFalsePositiveRate() + s = nil + s.GetFalsePositiveRate() +} + +func TestSecretScanningPatternOverride_GetFalsePositives(tt *testing.T) { + tt.Parallel() + var zeroValue int + s := &SecretScanningPatternOverride{FalsePositives: &zeroValue} + s.GetFalsePositives() + s = &SecretScanningPatternOverride{} + s.GetFalsePositives() + s = nil + s.GetFalsePositives() +} + +func TestSecretScanningPatternOverride_GetSetting(tt *testing.T) { + tt.Parallel() + var zeroValue string + s := &SecretScanningPatternOverride{Setting: &zeroValue} + s.GetSetting() + s = &SecretScanningPatternOverride{} + s.GetSetting() + s = nil + s.GetSetting() +} + +func TestSecretScanningPatternOverride_GetSlug(tt *testing.T) { + tt.Parallel() + var zeroValue string + s := &SecretScanningPatternOverride{Slug: &zeroValue} + s.GetSlug() + s = &SecretScanningPatternOverride{} + s.GetSlug() + s = nil + s.GetSlug() +} + +func TestSecretScanningPatternOverride_GetTokenType(tt *testing.T) { + tt.Parallel() + var zeroValue string + s := &SecretScanningPatternOverride{TokenType: &zeroValue} + s.GetTokenType() + s = &SecretScanningPatternOverride{} + s.GetTokenType() + s = nil + s.GetTokenType() +} + func TestSecretScanningPushProtection_GetStatus(tt *testing.T) { tt.Parallel() var zeroValue string diff --git a/github/secret_scanning_pattern_configs.go b/github/secret_scanning_pattern_configs.go index 0106f420d35..49afd1a21b0 100644 --- a/github/secret_scanning_pattern_configs.go +++ b/github/secret_scanning_pattern_configs.go @@ -76,7 +76,7 @@ type SecretScanningCustomPatternSetting struct { // ListPatternConfigsForEnterprise lists the secret scanning pattern configurations for an enterprise. // -// Github API docs: https://docs.github.com/enterprise-cloud@latest/rest/secret-scanning/push-protection?apiVersion=2022-11-28#list-enterprise-pattern-configurations +// GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/secret-scanning/push-protection#list-enterprise-pattern-configurations // //meta:operation GET /enterprises/{enterprise}/secret-scanning/pattern-configurations func (s *SecretScanningService) ListPatternConfigsForEnterprise(ctx context.Context, enterprise string) (*SecretScanningPatternConfigs, *Response, error) { @@ -98,7 +98,7 @@ func (s *SecretScanningService) ListPatternConfigsForEnterprise(ctx context.Cont // ListPatternConfigsForOrg lists the secret scanning pattern configurations for an organization. // -// Github API docs: https://docs.github.com/enterprise-cloud@latest/rest/secret-scanning/push-protection?apiVersion=2022-11-28#list-organization-pattern-configurations +// GitHub API docs: https://docs.github.com/rest/secret-scanning/push-protection#list-organization-pattern-configurations // //meta:operation GET /orgs/{org}/secret-scanning/pattern-configurations func (s *SecretScanningService) ListPatternConfigsForOrg(ctx context.Context, org string) (*SecretScanningPatternConfigs, *Response, error) { @@ -120,7 +120,7 @@ func (s *SecretScanningService) ListPatternConfigsForOrg(ctx context.Context, or // UpdatePatternConfigsForEnterprise updates the secret scanning pattern configurations for an enterprise. // -// Github API docs: https://docs.github.com/enterprise-cloud@latest/rest/secret-scanning/push-protection?apiVersion=2022-11-28#update-enterprise-pattern-configurations +// GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/secret-scanning/push-protection#update-enterprise-pattern-configurations // //meta:operation PATCH /enterprises/{enterprise}/secret-scanning/pattern-configurations func (s *SecretScanningService) UpdatePatternConfigsForEnterprise(ctx context.Context, enterprise string, opts *SecretScanningPatternConfigsUpdateOptions) (*SecretScanningPatternConfigsUpdate, *Response, error) { @@ -142,7 +142,7 @@ func (s *SecretScanningService) UpdatePatternConfigsForEnterprise(ctx context.Co // UpdatePatternConfigsForOrg updates the secret scanning pattern configurations for an organization. // -// Github API docs: https://docs.github.com/enterprise-cloud@latest/rest/secret-scanning/push-protection?apiVersion=2022-11-28#update-organization-pattern-configurations +// GitHub API docs: https://docs.github.com/rest/secret-scanning/push-protection#update-organization-pattern-configurations // //meta:operation PATCH /orgs/{org}/secret-scanning/pattern-configurations func (s *SecretScanningService) UpdatePatternConfigsForOrg(ctx context.Context, org string, opts *SecretScanningPatternConfigsUpdateOptions) (*SecretScanningPatternConfigsUpdate, *Response, error) { From afc50525e7bbee943364cd236aa857075847d205 Mon Sep 17 00:00:00 2001 From: dmclink <135415819+dmclink@users.noreply.github.com> Date: Tue, 12 Aug 2025 23:22:35 +0800 Subject: [PATCH 10/11] fix: Missing comments for pattern setting structs --- github/secret_scanning_pattern_configs.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/github/secret_scanning_pattern_configs.go b/github/secret_scanning_pattern_configs.go index 49afd1a21b0..58a42eaf184 100644 --- a/github/secret_scanning_pattern_configs.go +++ b/github/secret_scanning_pattern_configs.go @@ -53,6 +53,7 @@ type SecretScanningPatternConfigsUpdateOptions struct { CustomPatternSettings []*SecretScanningCustomPatternSetting `json:"custom_pattern_settings,omitempty"` } +// SecretScanningProviderPatternSetting defines an optional pattern setting for provider patterns. type SecretScanningProviderPatternSetting struct { // The ID of the pattern to configure. TokenType string `json:"token_type"` @@ -62,6 +63,7 @@ type SecretScanningProviderPatternSetting struct { PushProtectionSetting string `json:"push_protection_setting"` } +// SecretScanningCustomPatternSetting defines an optional pattern setting for custom patterns type SecretScanningCustomPatternSetting struct { // The ID of the pattern to configure. TokenType string `json:"token_type"` From 35a09e264f4be76b75f071740877abc1c3319652 Mon Sep 17 00:00:00 2001 From: dmclink <135415819+dmclink@users.noreply.github.com> Date: Tue, 12 Aug 2025 23:33:08 +0800 Subject: [PATCH 11/11] fix: Comment missing period --- github/secret_scanning_pattern_configs.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/github/secret_scanning_pattern_configs.go b/github/secret_scanning_pattern_configs.go index 58a42eaf184..c2d51f7d803 100644 --- a/github/secret_scanning_pattern_configs.go +++ b/github/secret_scanning_pattern_configs.go @@ -63,7 +63,7 @@ type SecretScanningProviderPatternSetting struct { PushProtectionSetting string `json:"push_protection_setting"` } -// SecretScanningCustomPatternSetting defines an optional pattern setting for custom patterns +// SecretScanningCustomPatternSetting defines an optional pattern setting for custom patterns. type SecretScanningCustomPatternSetting struct { // The ID of the pattern to configure. TokenType string `json:"token_type"`