-
-
Notifications
You must be signed in to change notification settings - Fork 416
fix(ci): add git config to release-batch workflow #262
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 250 commits
04e8c6a
fbb47a0
bc90fce
06618f8
bc0369d
d1d83ce
dd122e0
322381d
9b25e95
24cef45
e019ee0
9dacfcd
7485103
e1aa44d
e3c7419
8be28b1
27d78a7
9559f14
306bc80
1495084
fad61c3
068d40f
3c91336
3bedab3
f1d8262
f68f151
2493d07
648e849
cddcbeb
027d6a8
95c55d3
59297e9
d58eb82
14d95b6
6d4a8a8
276134d
624bbe4
2e5c7ae
e656f53
9d79248
85686ca
13cdb7c
253b06c
46d7f33
394a4a8
4892d8d
f227350
b1bf58a
c0e6da8
a501208
5a3a844
9ef2290
4cbb32a
7315177
2f1f892
9bdb8a0
fdce486
3aad543
c610ffc
64b6289
ad63e6f
3e9d5d6
47e73fb
1a1782c
369546d
2e092b7
7debd48
d380774
0fa3bb9
be04e23
f751d7d
00d4d22
8bdb7d0
1adf3f8
2482c60
5a1a2eb
95d539e
78fb893
e0000a9
9630ace
d578da6
e6780fa
042b379
b1d2cb6
e31a420
2c99303
9f5687a
e8fbbb7
9799ee9
eb78145
4b1f5b5
7e40311
a5442bd
ff426dd
1facec8
54f8b31
57a7115
08a5705
f04583b
7f9a7f1
fb104bd
5ab2135
961e847
9c29ca1
36ef7de
f1e7c5c
c33a86a
6d94967
c422c02
869c56e
0225558
0fd841d
5fc1ea5
c270d66
1480277
184f43d
c4e2ce7
70b5514
e477098
83e3fba
408edf5
4f87dac
31f085e
225a6a6
e184f3c
f6a5481
7afa33b
16fe699
8bb109e
3dd58db
d2e9f14
c9e3e71
be0899d
ff087a5
7b200a7
6924aac
40562e7
b274e63
5e81023
a255918
ff1056f
ff95a4e
53b3c1d
3f730dc
7a860be
2f2d8ba
f013d44
e1be261
d3aa154
34295d3
7e04484
a13313d
ee10834
8413526
1e8cd7e
ad0ba5d
4bc4cff
3d91eea
25349ec
e133e15
66b614f
f045937
26ebe16
db9eefa
cb1283e
f988258
b7793ea
044be68
966989a
d9ef4db
94fd2a6
06c39f5
5810cfa
f79eafb
fa7370d
7b1d7cd
8595076
ea74fbf
9a00a6e
bd81b1d
91453e4
73d3309
d33fb23
7183215
09f7756
753c41f
fe0a049
c095165
cf7343f
a1415f3
03d7cad
526285a
81c2566
3fa1124
d2989f3
003663e
63e1f9c
95a8800
9ccc11c
59eee53
4f8e896
1401fbb
1977a8d
00a1caf
74570e3
a08603f
eee2be9
12440ee
4410d0a
0c88b90
77b14e7
51b332a
d54c5fd
09556e3
84b6989
5892d82
c0934ae
d30b3d9
4255dd9
a76daf9
4c802d7
5e1de31
ea68cd9
593c3eb
938f3d0
f42b67c
557bb60
d40414f
238a81f
8c6b19e
da817cc
25e281d
4c53c48
8f9e8eb
62fd80c
84b161a
ad7bacc
152b35f
ee3fee6
4e137cf
0954c5c
c8719c5
c04cfa1
647597f
b3170b8
ba69d16
b5834b2
ee05f5f
d422c4e
8cb539f
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,44 +1,41 @@ | ||
| --- | ||
| name: Bug report | ||
| about: Create a report to help us improve | ||
| title: '' | ||
| labels: '' | ||
| about: Report a bug in cliproxyapi++ | ||
| title: '[BUG] ' | ||
| labels: 'bug' | ||
| assignees: '' | ||
|
|
||
| --- | ||
|
|
||
| **Is it a request payload issue?** | ||
| [ ] Yes, this is a request payload issue. I am using a client/cURL to send a request payload, but I received an unexpected error. | ||
| [ ] No, it's another issue. | ||
| [ ] Yes, this is a request payload issue. I am using a client/cURL to send a request payload, but I received an unexpected error. | ||
| [ ] No, it's another issue. | ||
|
|
||
| **If it's a request payload issue, you MUST know** | ||
| Our team doesn't have any GODs or ORACLEs or MIND READERs. Please make sure to attach the request log or curl payload. | ||
| To help us diagnose the problem, please provide as much detail as possible, including request logs or `curl` payloads. | ||
|
|
||
| **Describe the bug** | ||
| A clear and concise description of what the bug is. | ||
|
|
||
| **CLI Type** | ||
| What type of CLI account do you use? (gemini-cli, gemini, codex, claude code or openai-compatibility) | ||
|
|
||
| **Model Name** | ||
| What model are you using? (example: gemini-2.5-pro, claude-sonnet-4-20250514, gpt-5, etc.) | ||
| **cliproxyapi++ Configuration** | ||
| What provider and model are you using? (e.g. Kiro, Claude, Gemini) | ||
|
|
||
| **LLM Client** | ||
| What LLM Client are you using? (example: roo-code, cline, claude code, etc.) | ||
| What LLM Client are you using? (e.g. Roo Code, Claude Code, Cursor, etc.) | ||
|
|
||
| **Environment Information** | ||
| - **cliproxyapi++ Version**: (e.g., v6.0.0-++.1) | ||
| - **Deployment Method**: (e.g., Docker, Binary) | ||
| - **OS**: (e.g. macOS, Ubuntu 22.04) | ||
|
|
||
| **Request Information** | ||
| The best way is to paste the cURL command of the HTTP request here. | ||
| Alternatively, you can set `request-log: true` in the `config.yaml` file and then upload the detailed log file. | ||
| Please provide the `curl` command or the logs from `config.yaml` with `request-log: true`. | ||
|
|
||
| **Expected behavior** | ||
| A clear and concise description of what you expected to happen. | ||
|
|
||
| **Screenshots** | ||
| If applicable, add screenshots to help explain your problem. | ||
|
|
||
| **OS Type** | ||
| - OS: [e.g. macOS] | ||
| - Version [e.g. 15.6.0] | ||
|
|
||
| **Additional context** | ||
| Add any other context about the problem here. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,42 @@ | ||
| # Approved external endpoint hosts. | ||
| # Matching is exact host or subdomain of an entry. | ||
|
|
||
| accounts.google.com | ||
| aiplatform.googleapis.com | ||
| ampcode.com | ||
| api.anthropic.com | ||
| api.api.githubcopilot.com | ||
| api.deepseek.com | ||
| api.fireworks.ai | ||
| api.github.com | ||
| api.groq.com | ||
| api.kilo.ai | ||
| api.kimi.com | ||
| api.minimax.chat | ||
| api.minimax.io | ||
| api.mistral.ai | ||
| api.novita.ai | ||
| api.openai.com | ||
| api.roocode.com | ||
| api.siliconflow.cn | ||
| api.together.xyz | ||
| apis.iflow.cn | ||
| auth.openai.com | ||
| chat.qwen.ai | ||
| chatgpt.com | ||
| claude.ai | ||
| cloudcode-pa.googleapis.com | ||
| cloudresourcemanager.googleapis.com | ||
| generativelanguage.googleapis.com | ||
| github.com | ||
| golang.org | ||
| iflow.cn | ||
| integrate.api.nvidia.com | ||
| oauth2.googleapis.com | ||
| openrouter.ai | ||
| platform.iflow.cn | ||
| platform.openai.com | ||
| portal.qwen.ai | ||
| raw.githubusercontent.com | ||
| serviceusage.googleapis.com | ||
| www.googleapis.com |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,13 @@ | ||
| # workflow_file|job_name | ||
| pr-test-build.yml|go-ci | ||
| pr-test-build.yml|quality-ci | ||
| pr-test-build.yml|quality-staged-check | ||
| pr-test-build.yml|fmt-check | ||
| pr-test-build.yml|golangci-lint | ||
| pr-test-build.yml|route-lifecycle | ||
| pr-test-build.yml|test-smoke | ||
| pr-test-build.yml|pre-release-config-compat-smoke | ||
| pr-test-build.yml|distributed-critical-paths | ||
| pr-test-build.yml|changelog-scope-classifier | ||
| pr-test-build.yml|docs-build | ||
| pr-test-build.yml|ci-summary |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,16 @@ | ||
| # workflow_file|job_name | ||
| pr-test-build.yml|go-ci | ||
| pr-test-build.yml|quality-ci | ||
| pr-test-build.yml|quality-staged-check | ||
| pr-test-build.yml|fmt-check | ||
| pr-test-build.yml|golangci-lint | ||
| pr-test-build.yml|route-lifecycle | ||
| pr-test-build.yml|provider-smoke-matrix | ||
| pr-test-build.yml|provider-smoke-matrix-cheapest | ||
| pr-test-build.yml|test-smoke | ||
| pr-test-build.yml|pre-release-config-compat-smoke | ||
| pr-test-build.yml|distributed-critical-paths | ||
| pr-test-build.yml|changelog-scope-classifier | ||
| pr-test-build.yml|docs-build | ||
| pr-test-build.yml|ci-summary | ||
| pr-path-guard.yml|ensure-no-translator-changes |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,67 @@ | ||
| #!/usr/bin/env bash | ||
| set -euo pipefail | ||
|
|
||
| policy_file=".github/policies/approved-external-endpoints.txt" | ||
| if [[ ! -f "${policy_file}" ]]; then | ||
| echo "Missing policy file: ${policy_file}" | ||
| exit 1 | ||
| fi | ||
|
|
||
| mapfile -t approved_hosts < <(grep -Ev '^\s*#|^\s*$' "${policy_file}" | tr '[:upper:]' '[:lower:]') | ||
| if [[ "${#approved_hosts[@]}" -eq 0 ]]; then | ||
| echo "No approved hosts in policy file" | ||
| exit 1 | ||
| fi | ||
|
|
||
| matches_policy() { | ||
| local host="$1" | ||
| local approved | ||
| for approved in "${approved_hosts[@]}"; do | ||
| if [[ "${host}" == "${approved}" || "${host}" == *."${approved}" ]]; then | ||
| return 0 | ||
| fi | ||
| done | ||
| return 1 | ||
| } | ||
|
|
||
| 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 | ||
| ) | ||
|
|
||
| unknown=() | ||
| for host in "${discovered_hosts[@]}"; do | ||
| [[ -z "${host}" ]] && continue | ||
| [[ "${host}" == *"%"* ]] && continue | ||
| [[ "${host}" == *"{"* ]] && continue | ||
| [[ "${host}" == "localhost" || "${host}" == "127.0.0.1" || "${host}" == "0.0.0.0" ]] && continue | ||
| [[ "${host}" == "example.com" || "${host}" == "www.example.com" ]] && continue | ||
| [[ "${host}" == "proxy.com" || "${host}" == "proxy.local" ]] && continue | ||
| [[ "${host}" == "api.example.com" ]] && continue | ||
| if ! matches_policy "${host}"; then | ||
| unknown+=("${host}") | ||
| fi | ||
| done | ||
|
|
||
| if [[ "${#unknown[@]}" -ne 0 ]]; then | ||
| echo "Found external hosts not in ${policy_file}:" | ||
| printf ' - %s\n' "${unknown[@]}" | ||
| exit 1 | ||
| fi | ||
|
|
||
| echo "external endpoint policy check passed" | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,19 @@ | ||
| #!/usr/bin/env bash | ||
| set -euo pipefail | ||
|
|
||
| echo "[distributed-critical-paths] validating filesystem-sensitive paths" | ||
| go test -count=1 -run '^(TestMultiSourceSecret_FileHandling|TestMultiSourceSecret_CacheBehavior|TestMultiSourceSecret_Concurrency|TestAmpModule_OnConfigUpdated_CacheInvalidation)$' ./pkg/llmproxy/api/modules/amp | ||
|
|
||
| echo "[distributed-critical-paths] validating ops endpoint route registration" | ||
| go test -count=1 -run '^TestRegisterManagementRoutes$' ./pkg/llmproxy/api/modules/amp | ||
|
|
||
| echo "[distributed-critical-paths] validating compute/cache-sensitive paths" | ||
| go test -count=1 -run '^(TestEnsureCacheControl|TestCacheControlOrder|TestCountOpenAIChatTokens|TestCountClaudeChatTokens)$' ./pkg/llmproxy/runtime/executor | ||
|
|
||
| echo "[distributed-critical-paths] validating queue telemetry to provider metrics path" | ||
| go test -count=1 -run '^TestBuildProviderMetricsFromSnapshot_FailoverAndQueueTelemetry$' ./pkg/llmproxy/usage | ||
|
|
||
| echo "[distributed-critical-paths] validating signature cache primitives" | ||
| go test -count=1 -run '^(TestCacheSignature_BasicStorageAndRetrieval|TestCacheSignature_ExpirationLogic)$' ./pkg/llmproxy/cache | ||
|
|
||
| echo "[distributed-critical-paths] all targeted checks passed" |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,53 @@ | ||
| #!/usr/bin/env bash | ||
| set -euo pipefail | ||
|
|
||
| patterns=( | ||
| 'sk-[A-Za-z0-9]{20,}' | ||
| 'ghp_[A-Za-z0-9]{20,}' | ||
| 'AKIA[0-9A-Z]{16}' | ||
| 'AIza[0-9A-Za-z_-]{20,}' | ||
| '-----BEGIN (RSA|OPENSSH|EC|DSA|PRIVATE) KEY-----' | ||
| ) | ||
|
|
||
| allowed_context='\$\{|\{\{.*\}\}|<[^>]+>|\[REDACTED|your[_-]?|example|dummy|sample|placeholder' | ||
|
|
||
| tmp_hits="$(mktemp)" | ||
| trap 'rm -f "${tmp_hits}"' EXIT | ||
|
|
||
| for pattern in "${patterns[@]}"; do | ||
| rg -n --pcre2 --hidden \ | ||
| --glob '!docs/node_modules/**' \ | ||
| --glob '!**/*.min.*' \ | ||
| --glob '!**/*.svg' \ | ||
| --glob '!**/*.png' \ | ||
| --glob '!**/*.jpg' \ | ||
| --glob '!**/*.jpeg' \ | ||
| --glob '!**/*.gif' \ | ||
| --glob '!**/*.webp' \ | ||
| --glob '!**/*.pdf' \ | ||
| --glob '!**/*.lock' \ | ||
| --glob '!**/*.snap' \ | ||
| -e "${pattern}" docs README.md README_CN.md examples >> "${tmp_hits}" || true | ||
| done | ||
|
|
||
| if [[ ! -s "${tmp_hits}" ]]; then | ||
| echo "docs secret sample check passed" | ||
| exit 0 | ||
| fi | ||
|
|
||
| violations=0 | ||
| while IFS= read -r hit; do | ||
| line_content="${hit#*:*:}" | ||
| if printf '%s' "${line_content}" | rg -qi "${allowed_context}"; then | ||
| continue | ||
| fi | ||
| echo "Potential secret detected: ${hit}" | ||
| violations=1 | ||
| done < "${tmp_hits}" | ||
|
|
||
| if [[ "${violations}" -ne 0 ]]; then | ||
| echo "Secret sample check failed. Replace with placeholders or redact." | ||
| exit 1 | ||
| fi | ||
|
|
||
| echo "docs secret sample check passed" |
| Original file line number | Diff line number | Diff line change | ||||||
|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,31 @@ | ||||||||
| #!/usr/bin/env bash | ||||||||
| set -euo pipefail | ||||||||
|
|
||||||||
| report="docs/reports/fragemented/OPEN_ITEMS_VALIDATION_2026-02-22.md" | ||||||||
|
||||||||
| 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)" |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,31 @@ | ||
| #!/usr/bin/env bash | ||
| set -euo pipefail | ||
|
|
||
| violations=0 | ||
| allowed_write_keys='security-events|id-token|pages' | ||
|
|
||
| for workflow in .github/workflows/*.yml .github/workflows/*.yaml; do | ||
| [[ -f "${workflow}" ]] || continue | ||
|
|
||
| if rg -n '^permissions:\s*write-all\s*$' "${workflow}" >/dev/null; then | ||
| echo "${workflow}: uses permissions: write-all" | ||
| violations=1 | ||
| fi | ||
|
|
||
| if rg -n '^on:' "${workflow}" >/dev/null && rg -n 'pull_request:' "${workflow}" >/dev/null; then | ||
| while IFS= read -r line; do | ||
| key="$(printf '%s' "${line}" | sed -E 's/^[0-9]+:\s*([a-zA-Z-]+):\s*write\s*$/\1/')" | ||
| if [[ "${key}" != "${line}" ]] && ! printf '%s' "${key}" | grep -Eq "^(${allowed_write_keys})$"; then | ||
| echo "${workflow}: pull_request workflow grants '${key}: write'" | ||
| violations=1 | ||
| fi | ||
| done < <(rg -n '^\s*[a-zA-Z-]+:\s*write\s*$' "${workflow}") | ||
| fi | ||
| done | ||
|
|
||
| if [[ "${violations}" -ne 0 ]]; then | ||
| echo "workflow token permission check failed" | ||
| exit 1 | ||
| fi | ||
|
|
||
| echo "workflow token permission check passed" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Using
2>/dev/nullto suppressrgerror messages can hide unexpected issues. A cleaner approach is to use the--no-messagesflag, which is specifically designed to suppress errors about files thatrgcan't read, without hiding other potential problems.