diff --git a/.github/actions/post-coverage-comment/action.yml b/.github/actions/post-coverage-comment/action.yml
index 10a4afeb..6862e6be 100644
--- a/.github/actions/post-coverage-comment/action.yml
+++ b/.github/actions/post-coverage-comment/action.yml
@@ -27,79 +27,88 @@ inputs:
runs:
using: 'composite'
steps:
- - name: Prepare Coverage Comment
- id: prep_coverage_comment
- shell: bash
- run: |
- cli_json_file="${{ inputs.cli_json_file }}"
- core_json_file="${{ inputs.core_json_file }}"
- cli_full_text_summary_file="${{ inputs.cli_full_text_summary_file }}"
- core_full_text_summary_file="${{ inputs.core_full_text_summary_file }}"
- comment_file="coverage-comment.md"
-
+ - name: 'Prepare Coverage Comment'
+ id: 'prep_coverage_comment'
+ shell: 'bash'
+ env:
+ CLI_JSON_FILE: '${{ inputs.cli_json_file }}'
+ CORE_JSON_FILE: '${{ inputs.core_json_file }}'
+ CLI_FULL_TEXT_SUMMARY_FILE: '${{ inputs.cli_full_text_summary_file }}'
+ CORE_FULL_TEXT_SUMMARY_FILE: '${{ inputs.core_full_text_summary_file }}'
+ COMMENT_FILE: 'coverage-comment.md'
+ NODE_VERSION: '${{ inputs.node_version }}'
+ OS: '${{ inputs.os }}'
+ run: |-
# Extract percentages using jq for the main table
- if [ -f "$cli_json_file" ]; then
- cli_lines_pct=$(jq -r '.total.lines.pct' "$cli_json_file")
- cli_statements_pct=$(jq -r '.total.statements.pct' "$cli_json_file")
- cli_functions_pct=$(jq -r '.total.functions.pct' "$cli_json_file")
- cli_branches_pct=$(jq -r '.total.branches.pct' "$cli_json_file")
+ if [ -f "${CLI_JSON_FILE}" ]; then
+ cli_lines_pct="$(jq -r '.total.lines.pct' "${CLI_JSON_FILE}")"
+ cli_statements_pct="$(jq -r '.total.statements.pct' "${CLI_JSON_FILE}")"
+ cli_functions_pct="$(jq -r '.total.functions.pct' "${CLI_JSON_FILE}")"
+ cli_branches_pct="$(jq -r '.total.branches.pct' "${CLI_JSON_FILE}")"
else
- cli_lines_pct="N/A"; cli_statements_pct="N/A"; cli_functions_pct="N/A"; cli_branches_pct="N/A"
- echo "CLI coverage-summary.json not found at: $cli_json_file" >&2 # Error to stderr
+ cli_lines_pct="N/A"
+ cli_statements_pct="N/A"
+ cli_functions_pct="N/A"
+ cli_branches_pct="N/A"
+ echo "CLI coverage-summary.json not found at: ${CLI_JSON_FILE}" >&2 # Error to stderr
fi
- if [ -f "$core_json_file" ]; then
- core_lines_pct=$(jq -r '.total.lines.pct' "$core_json_file")
- core_statements_pct=$(jq -r '.total.statements.pct' "$core_json_file")
- core_functions_pct=$(jq -r '.total.functions.pct' "$core_json_file")
- core_branches_pct=$(jq -r '.total.branches.pct' "$core_json_file")
+ if [ -f "${CORE_JSON_FILE}" ]; then
+ core_lines_pct="$(jq -r '.total.lines.pct' "${CORE_JSON_FILE}")"
+ core_statements_pct="$(jq -r '.total.statements.pct' "${CORE_JSON_FILE}")"
+ core_functions_pct="$(jq -r '.total.functions.pct' "${CORE_JSON_FILE}")"
+ core_branches_pct="$(jq -r '.total.branches.pct' "${CORE_JSON_FILE}")"
else
- core_lines_pct="N/A"; core_statements_pct="N/A"; core_functions_pct="N/A"; core_branches_pct="N/A"
- echo "Core coverage-summary.json not found at: $core_json_file" >&2 # Error to stderr
+ core_lines_pct="N/A"
+ core_statements_pct="N/A"
+ core_functions_pct="N/A"
+ core_branches_pct="N/A"
+ echo "Core coverage-summary.json not found at: ${CORE_JSON_FILE}" >&2 # Error to stderr
fi
- echo "## Code Coverage Summary" > "$comment_file"
- echo "" >> "$comment_file"
- echo "| Package | Lines | Statements | Functions | Branches |" >> "$comment_file"
- echo "|---|---|---|---|---|" >> "$comment_file"
- echo "| CLI | ${cli_lines_pct}% | ${cli_statements_pct}% | ${cli_functions_pct}% | ${cli_branches_pct}% |" >> "$comment_file"
- echo "| Core | ${core_lines_pct}% | ${core_statements_pct}% | ${core_functions_pct}% | ${core_branches_pct}% |" >> "$comment_file"
- echo "" >> "$comment_file"
+ echo "## Code Coverage Summary" > "${COMMENT_FILE}"
+ echo "" >> "${COMMENT_FILE}"
+ echo "| Package | Lines | Statements | Functions | Branches |" >> "${COMMENT_FILE}"
+ echo "|---|---|---|---|---|" >> "${COMMENT_FILE}"
+ echo "| CLI | ${cli_lines_pct}% | ${cli_statements_pct}% | ${cli_functions_pct}% | ${cli_branches_pct}% |" >> "${COMMENT_FILE}"
+ echo "| Core | ${core_lines_pct}% | ${core_statements_pct}% | ${core_functions_pct}% | ${core_branches_pct}% |" >> "${COMMENT_FILE}"
+ echo "" >> "${COMMENT_FILE}"
# CLI Package - Collapsible Section (with full text summary from file)
- echo "" >> "$comment_file"
- echo "CLI Package - Full Text Report
" >> "$comment_file"
- echo "" >> "$comment_file"
- echo '```text' >> "$comment_file"
- if [ -f "$cli_full_text_summary_file" ]; then
- cat "$cli_full_text_summary_file" >> "$comment_file"
+ echo "" >> "${COMMENT_FILE}"
+ echo "CLI Package - Full Text Report
" >> "${COMMENT_FILE}"
+ echo "" >> "${COMMENT_FILE}"
+ echo '```text' >> "${COMMENT_FILE}"
+ if [ -f "${CLI_FULL_TEXT_SUMMARY_FILE}" ]; then
+ cat "${CLI_FULL_TEXT_SUMMARY_FILE}" >> "${COMMENT_FILE}"
else
- echo "CLI full-text-summary.txt not found at: $cli_full_text_summary_file" >> "$comment_file"
+ echo "CLI full-text-summary.txt not found at: ${CLI_FULL_TEXT_SUMMARY_FILE}" >> "${COMMENT_FILE}"
fi
- echo '```' >> "$comment_file"
- echo " " >> "$comment_file"
- echo "" >> "$comment_file"
+ echo '```' >> "${COMMENT_FILE}"
+ echo " " >> "${COMMENT_FILE}"
+ echo "" >> "${COMMENT_FILE}"
# Core Package - Collapsible Section (with full text summary from file)
- echo "" >> "$comment_file"
- echo "Core Package - Full Text Report
" >> "$comment_file"
- echo "" >> "$comment_file"
- echo '```text' >> "$comment_file"
- if [ -f "$core_full_text_summary_file" ]; then
- cat "$core_full_text_summary_file" >> "$comment_file"
+ echo "" >> "${COMMENT_FILE}"
+ echo "Core Package - Full Text Report
" >> "${COMMENT_FILE}"
+ echo "" >> "${COMMENT_FILE}"
+ echo '```text' >> "${COMMENT_FILE}"
+ if [ -f "${CORE_FULL_TEXT_SUMMARY_FILE}" ]; then
+ cat "${CORE_FULL_TEXT_SUMMARY_FILE}" >> "${COMMENT_FILE}"
else
- echo "Core full-text-summary.txt not found at: $core_full_text_summary_file" >> "$comment_file"
+ echo "Core full-text-summary.txt not found at: ${CORE_FULL_TEXT_SUMMARY_FILE}" >> "${COMMENT_FILE}"
fi
- echo '```' >> "$comment_file"
- echo " " >> "$comment_file"
- echo "" >> "$comment_file"
+ echo '```' >> "${COMMENT_FILE}"
+ echo " " >> "${COMMENT_FILE}"
+ echo "" >> "${COMMENT_FILE}"
- echo "_For detailed HTML reports, please see the 'coverage-reports-${{ inputs.node_version }}-${{ inputs.os }}' artifact from the main CI run._" >> "$comment_file"
+ echo "_For detailed HTML reports, please see the 'coverage-reports-${NODE_VERSION}-${OS}' artifact from the main CI run._" >> "${COMMENT_FILE}"
- - name: Post Coverage Comment
- uses: thollander/actions-comment-pull-request@v3
- if: always()
+ - name: 'Post Coverage Comment'
+ uses: 'thollander/actions-comment-pull-request@65f9e5c9a1f2cd378bd74b2e057c9736982a8e74' # ratchet:thollander/actions-comment-pull-request@v3
+ if: |-
+ ${{ always() }}
with:
- file-path: coverage-comment.md # Use the generated file directly
- comment-tag: code-coverage-summary
- github-token: ${{ inputs.github_token }}
+ file-path: 'coverage-comment.md' # Use the generated file directly
+ comment-tag: 'code-coverage-summary'
+ github-token: '${{ inputs.github_token }}'
diff --git a/.github/workflows/community-report.yml b/.github/workflows/community-report.yml
index 28aa2cba..59fd427f 100644
--- a/.github/workflows/community-report.yml
+++ b/.github/workflows/community-report.yml
@@ -1,4 +1,4 @@
-name: Generate Weekly Community Report 📊
+name: 'Generate Weekly Community Report 📊'
on:
schedule:
@@ -12,56 +12,57 @@ on:
jobs:
generate-report:
- name: Generate Report 📝
- if: ${{ github.repository == 'google-gemini/gemini-cli' }}
- runs-on: ubuntu-latest
+ name: 'Generate Report 📝'
+ if: |-
+ ${{ github.repository == 'google-gemini/gemini-cli' }}
+ runs-on: 'ubuntu-latest'
permissions:
- issues: write
- pull-requests: read
- discussions: read
- contents: read
- id-token: write
+ issues: 'write'
+ pull-requests: 'read'
+ discussions: 'read'
+ contents: 'read'
+ id-token: 'write'
steps:
- - name: Generate GitHub App Token 🔑
- id: generate_token
- uses: actions/create-github-app-token@df432ceedc7162793a195dd1713ff69aefc7379e # v2
+ - name: 'Generate GitHub App Token 🔑'
+ id: 'generate_token'
+ uses: 'actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b' # ratchet:actions/create-github-app-token@v2
with:
- app-id: ${{ secrets.APP_ID }}
- private-key: ${{ secrets.PRIVATE_KEY }}
+ app-id: '${{ secrets.APP_ID }}'
+ private-key: '${{ secrets.PRIVATE_KEY }}'
- - name: Generate Report 📜
- id: report
+ - name: 'Generate Report 📜'
+ id: 'report'
env:
- GH_TOKEN: ${{ steps.generate_token.outputs.token }}
- REPO: ${{ github.repository }}
- DAYS: ${{ github.event.inputs.days || '7' }}
- run: |
+ GH_TOKEN: '${{ steps.generate_token.outputs.token }}'
+ REPO: '${{ github.repository }}'
+ DAYS: '${{ github.event.inputs.days || 7 }}'
+ run: |-
set -e
- START_DATE=$(date -u -d "$DAYS days ago" +'%Y-%m-%d')
- END_DATE=$(date -u +'%Y-%m-%d')
- echo "⏳ Generating report for contributions from $START_DATE to $END_DATE..."
+ START_DATE="$(date -u -d "$DAYS days ago" +'%Y-%m-%d')"
+ END_DATE="$(date -u +'%Y-%m-%d')"
+ echo "⏳ Generating report for contributions from ${START_DATE} to ${END_DATE}..."
declare -A author_is_googler
check_googler_status() {
- local author=$1
- if [[ "$author" == *"[bot]" ]]; then
- author_is_googler[$author]=1
+ local author="$1"
+ if [[ "${author}" == *"[bot]" ]]; then
+ author_is_googler[${author}]=1
return 1
fi
- if [[ -v "author_is_googler[$author]" ]]; then
- return ${author_is_googler[$author]}
+ if [[ -v "author_is_googler[${author}]" ]]; then
+ return "${author_is_googler[${author}]}"
fi
- if gh api "orgs/googlers/members/$author" --silent 2>/dev/null; then
- echo "🧑💻 $author is a Googler."
- author_is_googler[$author]=0
+ if gh api "orgs/googlers/members/${author}" --silent 2>/dev/null; then
+ echo "🧑💻 ${author} is a Googler."
+ author_is_googler[${author}]=0
else
- echo "🌍 $author is a community contributor."
- author_is_googler[$author]=1
+ echo "🌍 ${author} is a community contributor."
+ author_is_googler[${author}]=1
fi
- return ${author_is_googler[$author]}
+ return "${author_is_googler[${author}]}"
}
googler_issues=0
@@ -70,27 +71,27 @@ jobs:
non_googler_prs=0
echo "🔎 Fetching issues and pull requests..."
- ITEMS_JSON=$(gh search issues --repo "$REPO" "created:>$START_DATE" --json author,isPullRequest --limit 1000)
+ ITEMS_JSON="$(gh search issues --repo "${REPO}" "created:>${START_DATE}" --json author,isPullRequest --limit 1000)"
for row in $(echo "${ITEMS_JSON}" | jq -r '.[] | @base64'); do
_jq() {
- echo ${row} | base64 --decode | jq -r ${1}
+ echo "${row}" | base64 --decode | jq -r "${1}"
}
- author=$(_jq '.author.login')
- is_pr=$(_jq '.isPullRequest')
+ author="$(_jq '.author.login')"
+ is_pr="$(_jq '.isPullRequest')"
- if [[ -z "$author" || "$author" == "null" ]]; then
+ if [[ -z "${author}" || "${author}" == "null" ]]; then
continue
fi
- if check_googler_status "$author"; then
- if [[ "$is_pr" == "true" ]]; then
+ if check_googler_status "${author}"; then
+ if [[ "${is_pr}" == "true" ]]; then
((googler_prs++))
else
((googler_issues++))
fi
else
- if [[ "$is_pr" == "true" ]]; then
+ if [[ "${is_pr}" == "true" ]]; then
((non_googler_prs++))
else
((non_googler_issues++))
@@ -114,19 +115,19 @@ jobs:
}
}
}'''
- DISCUSSIONS_JSON=$(gh api graphql -f q="repo:$REPO created:>$START_DATE" -f query="$DISCUSSION_QUERY")
+ DISCUSSIONS_JSON="$(gh api graphql -f q="repo:${REPO} created:>${START_DATE}" -f query="${DISCUSSION_QUERY}")"
for row in $(echo "${DISCUSSIONS_JSON}" | jq -r '.data.search.nodes[] | @base64'); do
_jq() {
- echo ${row} | base64 --decode | jq -r ${1}
+ echo "${row}" | base64 --decode | jq -r "${1}"
}
- author=$(_jq '.author.login')
+ author="$(_jq '.author.login')"
- if [[ -z "$author" || "$author" == "null" ]]; then
+ if [[ -z "${author}" || "${author}" == "null" ]]; then
continue
fi
- if check_googler_status "$author"; then
+ if check_googler_status "${author}"; then
((googler_discussions++))
else
((non_googler_discussions++))
@@ -134,7 +135,6 @@ jobs:
done
echo "✍️ Generating report content..."
- REPORT_TITLE="Community Contribution Report: $START_DATE to $END_DATE"
TOTAL_ISSUES=$((googler_issues + non_googler_issues))
TOTAL_PRS=$((googler_prs + non_googler_prs))
TOTAL_DISCUSSIONS=$((googler_discussions + non_googler_discussions))
@@ -142,7 +142,7 @@ jobs:
REPORT_BODY=$(cat <> $GITHUB_OUTPUT
- echo "$REPORT_BODY" >> $GITHUB_OUTPUT
- echo "EOF" >> $GITHUB_OUTPUT
+ echo "report_body<> "${GITHUB_OUTPUT}"
+ echo "${REPORT_BODY}" >> "${GITHUB_OUTPUT}"
+ echo "EOF" >> "${GITHUB_OUTPUT}"
echo "📊 Community Contribution Report:"
- echo "$REPORT_BODY"
+ echo "${REPORT_BODY}"
- - name: 🤖 Get Insights from Report
- if: steps.report.outputs.report_body != ''
- uses: google-gemini/gemini-cli-action@df3f890f003d28c60a2a09d2c29e0126e4d1e2ff
+ - name: '🤖 Get Insights from Report'
+ if: |-
+ ${{ steps.report.outputs.report_body != '' }}
+ uses: 'google-github-actions/run-gemini-cli@06123c6a203eb7a964ce3be7c48479cc66059f23' # ratchet:google-github-actions/run-gemini-cli@v0
env:
- GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }}
+ GITHUB_TOKEN: '${{ steps.generate_token.outputs.token }}'
+ REPOSITORY: '${{ github.repository }}'
with:
- version: 0.1.8-rc.0
- GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
- OTLP_GCP_WIF_PROVIDER: ${{ secrets.OTLP_GCP_WIF_PROVIDER }}
- OTLP_GOOGLE_CLOUD_PROJECT: ${{ secrets.OTLP_GOOGLE_CLOUD_PROJECT }}
- settings_json: |
+ gcp_workload_identity_provider: '${{ vars.GCP_WIF_PROVIDER }}'
+ gcp_project_id: '${{ vars.GOOGLE_CLOUD_PROJECT }}'
+ gcp_location: '${{ vars.GOOGLE_CLOUD_LOCATION }}'
+ gcp_service_account: '${{ vars.SERVICE_ACCOUNT_EMAIL }}'
+ gemini_api_key: '${{ secrets.GEMINI_API_KEY }}'
+ use_vertex_ai: '${{ vars.GOOGLE_GENAI_USE_VERTEXAI }}'
+ use_gemini_code_assist: '${{ vars.GOOGLE_GENAI_USE_GCA }}'
+ settings: |-
{
"coreTools": [
"run_shell_command(gh issue list)",
@@ -180,7 +185,7 @@ jobs:
"run_shell_command(gh search prs)"
]
}
- prompt: |
+ prompt: |-
You are a helpful assistant that analyzes community contribution reports.
Based on the following report, please provide a brief summary and highlight any interesting trends or potential areas for improvement.
diff --git a/docs/npm.md b/docs/npm.md
index ed99f0b8..466e25d0 100644
--- a/docs/npm.md
+++ b/docs/npm.md
@@ -58,7 +58,7 @@ To install the latest nightly build, use the `@nightly` tag:
npm install -g @google/gemini-cli@nightly
```
-We also run a Google cloud build called [release-docker.yml](../.gcp/release-docker.yaml). Which publishes the sandbox docker to match your release. This will also be moved to GH and combined with the main release file once service account permissions are sorted out.
+We also run a Google cloud build called [release-docker.yml](../.gcp/release-docker.yml). Which publishes the sandbox docker to match your release. This will also be moved to GH and combined with the main release file once service account permissions are sorted out.
### After the Release