diff --git a/.goreleaser.yml b/.goreleaser.yml index 9d9409c..d097cd3 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -15,7 +15,7 @@ builds: flags: - -trimpath ldflags: - - "-s -w -X main.version={{.Version}} -X main.commit={{.Commit}}" + - "-s -w -X main.version={{.Version}}" goos: - freebsd - windows @@ -41,7 +41,8 @@ builds: binary: "{{ .ProjectName }}_v{{ .Version }}" archives: - - format: zip + - formats: + - zip name_template: "{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}" checksum: diff --git a/CLAUDE.md b/CLAUDE.md index 1b40bce..867556f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -48,3 +48,7 @@ internal/ - `POST /v1/seats/unassign` - Unassign seat from user API docs: https://api.coderabbit.ai/v1/docs/ + +## Documentation + +When modifying usage or behavior, always update `README.md` to reflect the changes. diff --git a/README.md b/README.md index 99468f4..e59aa90 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,10 @@ provider "coderabbit" { # Optional: Custom API endpoint (default: https://api.coderabbit.ai) # base_url = "https://api.coderabbit.ai" + + # Optional: GitHub token for API authentication (higher rate limits) + # Can also be set via GITHUB_TOKEN environment variable + # github_token = "ghp_xxxxxxxxxxxx" } ``` @@ -52,6 +56,7 @@ provider "coderabbit" { |----------|-------------| | `CODERABBITAI_API_KEY` | CodeRabbit API authentication key | | `CODERABBIT_BASE_URL` | API base URL (optional) | +| `GITHUB_TOKEN` | GitHub personal access token for higher rate limits (optional) | ### Assigning Seats diff --git a/internal/client/client.go b/internal/client/client.go index 422be33..c6cccdd 100644 --- a/internal/client/client.go +++ b/internal/client/client.go @@ -32,15 +32,17 @@ func DefaultRetryConfig() RetryConfig { type Client struct { APIKey string BaseURL string + GitHubToken string HTTPClient *http.Client RetryConfig RetryConfig } // NewClient creates a new CodeRabbit API client -func NewClient(apiKey, baseURL string) *Client { +func NewClient(apiKey, baseURL, githubToken string) *Client { return &Client{ - APIKey: apiKey, - BaseURL: baseURL, + APIKey: apiKey, + BaseURL: baseURL, + GitHubToken: githubToken, HTTPClient: &http.Client{ Timeout: 30 * time.Second, }, @@ -191,6 +193,9 @@ func (c *Client) GetGitUserID(githubID string) (string, error) { } req.Header.Set("Accept", "application/vnd.github+json") + if c.GitHubToken != "" { + req.Header.Set("Authorization", "Bearer "+c.GitHubToken) + } resp, err := c.HTTPClient.Do(req) if err != nil { diff --git a/internal/provider/provider.go b/internal/provider/provider.go index 84c943e..b22c6d9 100644 --- a/internal/provider/provider.go +++ b/internal/provider/provider.go @@ -21,8 +21,9 @@ type CodeRabbitProvider struct { } type CodeRabbitProviderModel struct { - APIKey types.String `tfsdk:"api_key"` - BaseURL types.String `tfsdk:"base_url"` + APIKey types.String `tfsdk:"api_key"` + BaseURL types.String `tfsdk:"base_url"` + GitHubToken types.String `tfsdk:"github_token"` } func New(version string) func() provider.Provider { @@ -51,6 +52,11 @@ func (p *CodeRabbitProvider) Schema(ctx context.Context, req provider.SchemaRequ Description: "Base URL for CodeRabbit API. Defaults to https://api.coderabbit.ai. Can also be set via CODERABBIT_BASE_URL environment variable.", Optional: true, }, + "github_token": schema.StringAttribute{ + Description: "GitHub personal access token for GitHub API authentication. Can also be set via GITHUB_TOKEN environment variable. If not set, GitHub API requests will be unauthenticated (lower rate limits).", + Optional: true, + Sensitive: true, + }, }, } } @@ -88,8 +94,14 @@ func (p *CodeRabbitProvider) Configure(ctx context.Context, req provider.Configu baseURL = "https://api.coderabbit.ai" } + // Get GitHub token from config or environment variable + githubToken := os.Getenv("GITHUB_TOKEN") + if !config.GitHubToken.IsNull() { + githubToken = config.GitHubToken.ValueString() + } + // Create API client - c := client.NewClient(apiKey, baseURL) + c := client.NewClient(apiKey, baseURL, githubToken) // Make the client available to resources and data sources resp.DataSourceData = c diff --git a/main.go b/main.go index 0c25a4d..178922a 100644 --- a/main.go +++ b/main.go @@ -9,10 +9,7 @@ import ( "github.com/hashicorp/terraform-plugin-framework/providerserver" ) -var ( - version string = "dev" - commit string = "none" -) +var version string = "dev" func main() { var debug bool