Skip to content

fix(ci): add git config to release-batch workflow#262

Closed
KooshaPari wants to merge 300 commits intorouter-for-me:mainfrom
KooshaPari:wip/ci-rerun-20260222-212333
Closed

fix(ci): add git config to release-batch workflow#262
KooshaPari wants to merge 300 commits intorouter-for-me:mainfrom
KooshaPari:wip/ci-rerun-20260222-212333

Conversation

@KooshaPari
Copy link
Copy Markdown

Adds git config to fix 'Committer identity unknown' error in release-batch workflow

@gemini-code-assist
Copy link
Copy Markdown

Summary of Changes

Hello @KooshaPari, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request delivers a significant upgrade to the project's operational and development infrastructure. While addressing a specific CI issue, it expands into a broader initiative to harden CI/CD pipelines, refactor the core into a reusable library, and vastly improve documentation. The changes aim to streamline development workflows, enhance deployment flexibility, and provide clearer guidance for integrating and operating the proxy with a wider array of LLM providers.

Highlights

  • CI/CD Infrastructure Overhaul: Introduced comprehensive CI/CD scripts and configuration files, including new required checks, release governance, and pre-commit hooks, significantly enhancing the project's automated quality gates and release process.
  • Architectural Refactoring to Library-First: Migrated core proxy logic imports from internal/ to pkg/llmproxy/ across the codebase, establishing a public, reusable Go library for embedding the proxy engine into other applications.
  • Expanded Provider Support and Configuration: Added extensive configuration options and login flags for numerous new LLM providers, including Cursor, MiniMax, Roo Code, DeepSeek, Groq, Mistral, SiliconFlow, OpenRouter, Together AI, Fireworks AI, and Novita AI, alongside new OAuth upstream overrides.
  • Enhanced Docker Deployment and Entrypoint: Updated the Dockerfile to use a new binary name, incorporate an init.sh entrypoint script for robust runtime configuration via environment variables, and expose additional ports for broader functionality.
  • Comprehensive Documentation Site: Introduced a new VitePress-based documentation site with detailed guides for users, developers, and agent operators, covering installation, provider usage, API references, feature deep-dives, and operational runbooks.
  • New Tooling for Project Management and Releases: Added dedicated Go programs for syncing GitHub issues/PRs to a planning board (boardsync), generating provider-related code (codegen), and automating release tagging and notes generation (releasebatch).

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • .env.example
    • Added Docker runtime configuration variables.
  • .github/ISSUE_TEMPLATE/bug_report.md
    • Updated bug report template with more specific fields.
  • .github/policies/approved-external-endpoints.txt
    • Added a new policy file listing approved external endpoint hosts.
  • .github/release-required-checks.txt
    • Added a new file listing required checks for releases.
  • .github/required-checks.txt
    • Added a new file listing general required checks.
  • .github/scripts/check-approved-external-endpoints.sh
    • Added a new script to validate external endpoints against a policy.
  • .github/scripts/check-distributed-critical-paths.sh
    • Added a new script to validate distributed critical paths.
  • .github/scripts/check-docs-secret-samples.sh
    • Added a new script to check for secret samples in documentation.
  • .github/scripts/check-open-items-fragmented-parity.sh
    • Added a new script to check parity for fragmented open items.
  • .github/scripts/check-workflow-token-permissions.sh
    • Added a new script to check workflow token permissions.
  • .github/scripts/release-lint.sh
    • Added a new script for release-related linting.
  • .gitignore
    • Updated ignored files to include new binaries, git cache, and documentation build artifacts.
  • .golangci.yml
    • Added a new configuration file for golangci-lint.
  • .goreleaser.yml
    • Updated build ID and binary name from 'cli-proxy-api-plus' to 'cliproxyapi++'.
  • .pre-commit-config.yaml
    • Added a new pre-commit configuration for quality checks.
  • CONTRIBUTING.md
    • Added a new contributing guide with details on bug reporting, enhancements, pull requests, and governance.
  • Dockerfile
    • Updated the Dockerfile to use a new binary name, install 'sed', expose more ports, and use an entrypoint script with environment variable overrides.
  • LICENSE
    • Updated copyright year and added KooshaPari.
  • README.md
    • Significantly updated the README to reflect the 'cliproxyapi++' project, including feature comparisons, technical differences, getting started, provider capabilities, contributing guidelines, and extensive documentation links.
  • README_CN.md
    • Updated the Chinese README with similar extensive changes as the English version.
  • SECURITY.md
    • Added a new security policy document.
  • Taskfile.yml
    • Added a new Taskfile for unified build, test, and management commands.
  • cmd/boardsync/main.go
    • Added a new Go program for syncing GitHub issues/PRs/discussions to a planning board.
  • cmd/codegen/main.go
    • Added a new Go program for code generation related to providers.
  • cmd/releasebatch/main.go
    • Added a new Go program for managing release tags and notes.
  • cmd/releasebatch/main_test.go
    • Added unit tests for the 'releasebatch' tool.
  • cmd/server/config_path.go
    • Added a new Go file to resolve default configuration paths.
  • cmd/server/config_path_test.go
    • Added unit tests for configuration path resolution.
  • cmd/server/config_validate.go
    • Added a new Go file for strict configuration file validation.
  • cmd/server/config_validate_test.go
    • Added unit tests for strict configuration validation.
  • cmd/server/main.go
    • Updated imports from 'internal/' to 'pkg/llmproxy/', added new login flags for various providers, and integrated a setup wizard.
  • cmd/server/main_kiro_flags_test.go
    • Added unit tests for Kiro-related flags.
  • config.example.yaml
    • Updated default values, added new provider configurations (Cursor, MiniMax, Roo Code, Kilo, DeepSeek, Groq, Mistral, SiliconFlow, OpenRouter, Together AI, Fireworks AI, Novita AI), and added OAuth upstream overrides.
  • docker-compose.yml
    • Updated the Docker image name and added environment variable overrides for runtime configuration.
  • docker-init.sh
    • Added a new shell script as the Docker entrypoint to handle config initialization and environment variable overrides.
  • docs/.vitepress/config.ts
    • Added a new VitePress configuration file for documentation.
  • docs/.vitepress/plugins/content-tabs.ts
    • Added a new TypeScript file for content tabs plugin in VitePress.
  • docs/.vitepress/theme/index.ts
    • Added a new TypeScript file for VitePress theme configuration.
  • docs/FEATURE_CHANGES_PLUSPLUS.md
    • Added a new document detailing feature changes in 'cliproxyapi++'.
  • docs/README.md
    • Added a new documentation map for the project.
  • docs/api/index.md
    • Added a new API index document.
  • docs/api/management.md
    • Added a new document for the Management API.
  • docs/api/openai-compatible.md
    • Added a new document for the OpenAI-Compatible API.
  • docs/api/operations.md
    • Added a new document for the Operations API.
  • docs/docsets/agent/index.md
    • Added a new docset for agent operators.
  • docs/docsets/agent/operating-model.md
    • Added a new document for the agent operating model.
  • docs/docsets/developer/external/index.md
    • Added a new docset for external developers.
  • docs/docsets/developer/external/integration-quickstart.md
    • Added a new document for external developer integration quickstart.
  • docs/docsets/developer/internal/architecture.md
    • Added a new document for internal architecture.
  • docs/docsets/developer/internal/index.md
    • Added a new docset for internal developers.
  • docs/docsets/index.md
    • Added a new docsets index.
  • docs/docsets/user/index.md
    • Added a new docset for technical users.
  • docs/docsets/user/quickstart.md
    • Added a new document for technical user quickstart.
  • docs/features/architecture/DEV.md
    • Added a new developer guide for architecture.
  • docs/features/architecture/SPEC.md
    • Added a new technical specification for architecture.
  • docs/features/architecture/USER.md
    • Added a new user guide for architecture.
  • docs/features/architecture/fragemented/.fragmented-candidates.txt
    • Added a file listing fragmented candidates.
  • docs/features/architecture/fragemented/.migration.log
    • Added a migration log file.
  • docs/features/architecture/fragemented/DEV.md
    • Added a fragmented developer guide for architecture.
  • docs/features/architecture/fragemented/README.md
    • Added a fragmented README.
  • docs/features/architecture/fragemented/SPEC.md
    • Added a fragmented technical specification for architecture.
  • docs/features/architecture/fragemented/USER.md
    • Added a fragmented user guide for architecture.
  • docs/features/architecture/fragemented/explanation.md
    • Added an explanation for fragmented files.
  • docs/features/architecture/fragemented/index.md
    • Added a fragmented index.
  • docs/features/architecture/fragemented/merged.md
    • Added a merged fragmented document.
  • docs/features/auth/DEV.md
    • Added a new developer guide for authentication.
  • docs/features/auth/SPEC.md
    • Added a new technical specification for authentication.
  • docs/features/auth/USER.md
    • Added a new user guide for authentication.
  • docs/features/auth/index.md
    • Added a new index for authentication features.
  • docs/features/index.md
    • Added a new feature guides index.
  • docs/features/operations/SPEC.md
    • Added a new technical specification for operations.
  • docs/features/operations/USER.md
    • Added a new user guide for operations.
  • docs/features/operations/index.md
    • Added a new index for operations features.
  • docs/features/providers/SPEC.md
    • Added a new technical specification for providers.
  • docs/features/providers/USER.md
    • Added a new user guide for providers.
  • docs/features/providers/fragemented/.fragmented-candidates.txt
    • Added a file listing fragmented candidates.
  • docs/features/providers/fragemented/.migration.log
    • Added a migration log file.
  • docs/features/providers/fragemented/README.md
    • Added a fragmented README.
  • docs/features/providers/fragemented/SPEC.md
    • Added a fragmented technical specification for providers.
  • docs/features/providers/fragemented/USER.md
    • Added a fragmented user guide for providers.
  • docs/features/providers/fragemented/explanation.md
    • Added an explanation for fragmented files.
  • docs/features/providers/fragemented/index.md
    • Added a fragmented index.
  • docs/features/providers/fragemented/merged.md
    • Added a merged fragmented document.
  • docs/features/security/SPEC.md
    • Added a new technical specification for security.
  • docs/features/security/USER.md
    • Added a new user guide for security.
  • docs/features/security/index.md
    • Added a new index for security features.
  • docs/getting-started.md
    • Added a new getting started guide.
  • docs/guides/release-batching.md
    • Added a new guide for release batching.
  • docs/index.md
    • Added a new main documentation index.
  • docs/install.md
    • Added a new installation guide.
  • docs/operations/auth-refresh-failure-symptom-fix.md
    • Added a new document for auth refresh failure fixes.
  • docs/operations/checks-owner-responder-map.md
    • Added a new document mapping checks to owners.
  • docs/operations/critical-endpoints-curl-pack.md
    • Added a new document with critical endpoints curl commands.
  • docs/operations/distributed-fs-compute-status.md
    • Added a new document on distributed FS/compute status.
  • docs/operations/index.md
    • Added a new operations response kit index.
  • docs/operations/provider-outage-triage-quick-guide.md
    • Added a new guide for provider outage triage.
  • docs/operations/release-governance.md
    • Added a new document for release governance.
  • docs/operations/required-branch-check-ownership.md
    • Added a new document on required branch check ownership.
Ignored Files
  • Ignored by pattern: .github/workflows/** (8)
    • .github/workflows/ci-rerun-flaky.yml
    • .github/workflows/codeql.yml
    • .github/workflows/pr-path-guard.yml
    • .github/workflows/pr-test-build.yml
    • .github/workflows/release-batch.yaml
    • .github/workflows/release.yaml
    • .github/workflows/required-check-names-guard.yml
    • .github/workflows/vitepress-pages.yml
Activity
  • The pull request was initiated by KooshaPari.
  • The title and description indicate an initial focus on resolving a 'Committer identity unknown' error within the release-batch workflow.
  • The extensive file changes suggest a comprehensive effort to improve CI/CD, refactor core components, and enhance documentation, going beyond the stated CI fix.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.


func logCodexWebsocketDisconnected(sessionID string, authID string, wsURL string, reason string, err error) {
if err != nil {
log.Infof("codex websockets: upstream disconnected session=%s auth=%s url=%s reason=%s err=%v", strings.TrimSpace(sessionID), strings.TrimSpace(authID), strings.TrimSpace(wsURL), strings.TrimSpace(reason), err)

Check failure

Code scanning / CodeQL

Clear-text logging of sensitive information High

Sensitive data returned by an access to apiKeyModelAlias
flows to a logging call.
}

func logCodexWebsocketConnected(sessionID string, authID string, wsURL string) {
log.Infof("codex websockets: upstream connected session=%s auth=%s url=%s", strings.TrimSpace(sessionID), strings.TrimSpace(authID), strings.TrimSpace(wsURL))

Check failure

Code scanning / CodeQL

Clear-text logging of sensitive information High

Sensitive data returned by an access to apiKeyModelAlias
flows to a logging call.
}

func (e *CodexWebsocketsExecutor) ExecuteStream(ctx context.Context, auth *cliproxyauth.Auth, req cliproxyexecutor.Request, opts cliproxyexecutor.Options) (_ *cliproxyexecutor.StreamResult, err error) {
log.Debugf("Executing Codex Websockets stream request with auth ID: %s, model: %s", auth.ID, req.Model)

Check failure

Code scanning / CodeQL

Clear-text logging of sensitive information High

Sensitive data returned by an access to apiKeyModelAlias
flows to a logging call.
}

func userIDCacheKey(apiKey string) string {
sum := sha256.Sum256([]byte(apiKey))

Check failure

Code scanning / CodeQL

Use of a broken or weak cryptographic hashing algorithm on sensitive data High

Sensitive data (password)
is used in a hashing algorithm (SHA256) that is insecure for password hashing, since it is not a computationally expensive hash function.
auth.Metadata["last_refresh"] = time.Now().Format(time.RFC3339)

// Log the new access token (masked) after successful refresh
log.Debugf("iflow executor: token refresh successful, new: %s", util.HideAPIKey(tokenData.AccessToken))

Check failure

Code scanning / CodeQL

Clear-text logging of sensitive information High

Sensitive data returned by an access to apiKey
flows to a logging call.
}

func writeWSError(conn *websocket.Conn, err error) {
_ = conn.WriteMessage(websocket.TextMessage, []byte(`{"error":"`+err.Error()+`"}`))

Check failure

Code scanning / CodeQL

Potentially unsafe quoting Critical

If this
JSON value
contains a double quote, it could break out of the enclosing quotes.
AuthValue: authValue,
})

httpResp, errDo := httpClient.Do(httpReq)

Check failure

Code scanning / CodeQL

Uncontrolled data used in network request Critical

The
URL
of this request depends on a
user-provided value
.
The
URL
of this request depends on a
user-provided value
.
}
if attempt+1 < attempts {
delay := antigravityNoCapacityRetryDelay(attempt)
log.Debugf("antigravity executor: no capacity for model %s, retrying in %s (attempt %d/%d)", baseModel, delay, attempt+1, attempts)

Check failure

Code scanning / CodeQL

Clear-text logging of sensitive information High

Sensitive data returned by an access to apiKeyModelAlias
flows to a logging call.
}
if attempt+1 < attempts {
delay := antigravityNoCapacityRetryDelay(attempt)
log.Debugf("antigravity executor: no capacity for model %s, retrying in %s (attempt %d/%d)", baseModel, delay, attempt+1, attempts)

Check failure

Code scanning / CodeQL

Clear-text logging of sensitive information High

Sensitive data returned by an access to apiKeyModelAlias
flows to a logging call.
}
if attempt+1 < attempts {
delay := antigravityNoCapacityRetryDelay(attempt)
log.Debugf("antigravity executor: no capacity for model %s, retrying in %s (attempt %d/%d)", baseModel, delay, attempt+1, attempts)

Check failure

Code scanning / CodeQL

Clear-text logging of sensitive information High

Sensitive data returned by an access to apiKeyModelAlias
flows to a logging call.
Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request introduces a very large set of changes, including a major architectural refactoring to a "library-first" approach, significant enhancements to CI/CD, new provider support, and a complete documentation overhaul. The changes are extensive and go far beyond the scope suggested by the PR title and description ("fix(ci): add git config to release-batch workflow"). While the overall direction and quality of the changes are very high, I have a few points of feedback. Notably, config.yaml has been removed from .gitignore, which poses a security risk of leaking credentials and should be reverted. I've also identified a couple of areas in the new CI scripts that could be made more robust and a potentially undocumented breaking change in the configuration.

@@ -1,35 +1,26 @@
# Binaries
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

high

The config.yaml file is no longer being ignored. This poses a significant security risk as it could lead to accidental commitment of sensitive information like API keys. It is strongly recommended to add config.yaml back to the .gitignore file to prevent secrets from being checked into version control.

Comment on lines +27 to +45
mapfile -t discovered_hosts < <(
rg -No --hidden \
--glob '!docs/**' \
--glob '!**/*_test.go' \
--glob '!**/node_modules/**' \
--glob '!**/*.png' \
--glob '!**/*.jpg' \
--glob '!**/*.jpeg' \
--glob '!**/*.gif' \
--glob '!**/*.svg' \
--glob '!**/*.webp' \
'https?://[^"\047 )\]]+' \
cmd pkg sdk scripts .github/workflows config.example.yaml README.md README_CN.md 2>/dev/null \
| awk -F'://' '{print $2}' \
| cut -d/ -f1 \
| cut -d: -f1 \
| tr '[:upper:]' '[:lower:]' \
| sort -u
)
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

medium

Using 2>/dev/null to suppress rg error messages can hide unexpected issues. A cleaner approach is to use the --no-messages flag, which is specifically designed to suppress errors about files that rg can't read, without hiding other potential problems.

Suggested change
mapfile -t discovered_hosts < <(
rg -No --hidden \
--glob '!docs/**' \
--glob '!**/*_test.go' \
--glob '!**/node_modules/**' \
--glob '!**/*.png' \
--glob '!**/*.jpg' \
--glob '!**/*.jpeg' \
--glob '!**/*.gif' \
--glob '!**/*.svg' \
--glob '!**/*.webp' \
'https?://[^"\047 )\]]+' \
cmd pkg sdk scripts .github/workflows config.example.yaml README.md README_CN.md 2>/dev/null \
| awk -F'://' '{print $2}' \
| cut -d/ -f1 \
| cut -d: -f1 \
| tr '[:upper:]' '[:lower:]' \
| sort -u
)
mapfile -t discovered_hosts < <(
rg -No --hidden --no-messages \
--glob '!docs/**' \
--glob '!**/*_test.go' \
--glob '!**/node_modules/**' \
--glob '!**/*.png' \
--glob '!**/*.jpg' \
--glob '!**/*.jpeg' \
--glob '!**/*.gif' \
--glob '!**/*.svg' \
--glob '!**/*.webp' \
'https?://[^"\047 )\\]]+' \
cmd pkg sdk scripts .github/workflows config.example.yaml README.md README_CN.md \
| awk -F'://' '{print $2}' \
| cut -d/ -f1 \
| cut -d: -f1 \
| tr '[:upper:]' '[:lower:]' \
| sort -u
)

#!/usr/bin/env bash
set -euo pipefail

report="docs/reports/fragemented/OPEN_ITEMS_VALIDATION_2026-02-22.md"
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

medium

The report path is hardcoded with the date 2026-02-22. This is brittle and will require manual updates for future reports. To make the script more robust, consider dynamically finding the latest report file in the docs/reports/fragemented/ directory instead of hardcoding the filename.

Suggested change
report="docs/reports/fragemented/OPEN_ITEMS_VALIDATION_2026-02-22.md"
report_dir="docs/reports/fragemented"
report="$(find "$report_dir" -name 'OPEN_ITEMS_VALIDATION_*.md' | sort -r | head -n 1)"

proxy-url: ""

# When true, unprefixed model requests only use credentials without a prefix (except when prefix == model name).
force-model-prefix: false
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

medium

The passthrough-headers configuration option appears to have been removed in this change. If this is an intentional breaking change, it should be documented in the release notes or a migration guide to inform users who might be relying on this feature for forwarding upstream headers.

@KooshaPari

This comment was marked as spam.

@KooshaPari KooshaPari closed this Feb 23, 2026
@KooshaPari

This comment was marked as spam.

@KooshaPari KooshaPari mentioned this pull request Feb 23, 2026
@KooshaPari

This comment was marked as spam.

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