Skip to content

Refactor Github Action per b/485167538#19373

Closed
google-admin wants to merge 1 commit into
release/v0.29.0-preview.0-pr-18840from
lsc-1771395397.587337
Closed

Refactor Github Action per b/485167538#19373
google-admin wants to merge 1 commit into
release/v0.29.0-preview.0-pr-18840from
lsc-1771395397.587337

Conversation

@google-admin

Copy link
Copy Markdown
Contributor

This is a http://go/LSC run by http://go/ghss to automatically refactor your Github Actions per http://b/485167538.

This is a PR to help you upgrade to the latest standards in Github Actions.

Please merge this PR to accept the changes. NOTE: if you do not accept this PR, it may be force merged by the GHSS team. See http://b/485167538 for more details.

@gemini-cli

gemini-cli Bot commented Feb 18, 2026

Copy link
Copy Markdown
Contributor

Hi @google-admin, thank you so much for your contribution to Gemini CLI! We really appreciate the time and effort you've put into this.

We're making some updates to our contribution process to improve how we track and review changes. Please take a moment to review our recent discussion post: Improving Our Contribution Process & Introducing New Guidelines.

Key Update: Starting January 26, 2026, the Gemini CLI project will require all pull requests to be associated with an existing issue. Any pull requests not linked to an issue by that date will be automatically closed.

Thank you for your understanding and for being a part of our community!

@gemini-cli

gemini-cli Bot commented Feb 18, 2026

Copy link
Copy Markdown
Contributor

Hi there! Thank you for your contribution to Gemini CLI.

To improve our contribution process and better track changes, we now require all pull requests to be associated with an existing issue, as announced in our recent discussion and as detailed in our CONTRIBUTING.md.

This pull request is being closed because it is not currently linked to an issue. Once you have updated the description of this PR to link an issue (e.g., by adding Fixes #123 or Related to #123), it will be automatically reopened.

How to link an issue:
Add a keyword followed by the issue number (e.g., Fixes #123) in the description of your pull request. For more details on supported keywords and how linking works, please refer to the GitHub Documentation on linking pull requests to issues.

Thank you for your understanding and for being a part of our community!

@gemini-cli gemini-cli Bot closed this Feb 18, 2026
@gemini-code-assist

Copy link
Copy Markdown
Contributor

Summary of Changes

Hello @google-admin, 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 systematically refactors several custom GitHub Actions to adhere to a recommended best practice for handling input variables. The core change involves transitioning from direct inline access of inputs.<input-name> within shell commands to first assigning these inputs (and certain step outputs) to explicit environment variables. This change ensures that all values are properly escaped when passed to the shell, thereby improving the robustness and security of the workflows while also making the action definitions clearer and easier to manage.

Highlights

  • GitHub Actions Refactoring: Standardized the method of accessing input variables within GitHub Action run steps by explicitly mapping them to environment variables.
  • Security Enhancement: Improved the security posture of custom GitHub Actions by mitigating potential shell injection vulnerabilities through the use of environment variables.
  • Code Clarity and Maintainability: Enhanced the readability and maintainability of action definitions by centralizing input variable declarations within env blocks for each step.
Changelog
  • .github/actions/create-pull-request/action.yml
    • Mapped inputs.branch-name, inputs.pr-title, inputs.pr-body, and inputs.base-branch to environment variables for use in the gh pr create command.
  • .github/actions/npm-auth-token/action.yml
    • Converted direct input references for github-token, package-name, and various wombat-token inputs to environment variables within the script.
  • .github/actions/publish-release/action.yml
    • Updated the 'release_branch' step to use an environment variable for inputs.release-tag.
    • Modified the 'Update package versions' step to use an environment variable for inputs.release-version.
    • Refactored the 'Publish core package' step to use environment variables for inputs.dry-run and inputs.core-package-name.
    • Adjusted the 'Install latest core package' step to use environment variables for inputs.core-package-name, inputs.release-version, inputs.cli-package-name, and inputs.a2a-package-name.
    • Updated the 'Publish cli package' step to use environment variables for inputs.dry-run and inputs.cli-package-name.
    • Modified the 'Publish a2a-server package' step to use environment variables for inputs.dry-run and inputs.a2a-package-name.
    • Changed the 'Create GitHub Release' step to use environment variables for inputs.release-tag, steps.release_branch.outputs.BRANCH_NAME, and inputs.previous-tag.
    • Updated the 'Cleanup release branch' step to use an environment variable for steps.release_branch.outputs.BRANCH_NAME.
  • .github/actions/push-docker/action.yml
    • Converted the inputs.ref-name to an environment variable in the 'branch_name' step.
  • .github/actions/push-sandbox/action.yml
    • Refactored the 'image_tag' step to use environment variables for inputs.github-ref-name and inputs.github-sha.
    • Updated the 'build' step to use an environment variable for steps.image_tag.outputs.FINAL_TAG.
    • Modified the 'publish' step to use an environment variable for steps.docker_build.outputs.uri.
  • .github/actions/setup-npmrc/action.yml
    • Changed the npmrc setup to use an environment variable for inputs.github-token.
  • .github/actions/tag-npm-release/action.yml
    • Updated the 'Tag core package' step to use environment variables for inputs.core-package-name, inputs.version, and inputs.channel.
    • Modified the 'Tag cli package' step to use environment variables for inputs.cli-package-name, inputs.version, and inputs.channel.
    • Adjusted the 'Tag a2a-server package' step to use environment variables for inputs.a2a-package-name, inputs.version, and inputs.channel.
    • Refactored the 'Log dry run' step to use environment variables for inputs.channel, inputs.version, inputs.cli-package-name, inputs.core-package-name, and inputs.a2a-package-name.
  • .github/actions/verify-release/action.yml
    • Converted direct input references for inputs.expected-version and inputs.npm-package to environment variables in the 'Verify NPM release by version' step.
    • Updated the 'Verify NPX run by version' step to use environment variables for inputs.npm-package and inputs.expected-version.
Ignored Files
  • Ignored by pattern: .github/workflows/** (8)
    • .github/workflows/chained_e2e.yml
    • .github/workflows/ci.yml
    • .github/workflows/deflake.yml
    • .github/workflows/eval.yml
    • .github/workflows/evals-nightly.yml
    • .github/workflows/release-patch-3-release.yml
    • .github/workflows/release-promote.yml
    • .github/workflows/trigger_e2e.yml
Activity
  • This pull request was automatically generated by the ghss system as part of a large-scale change (LSC) initiative.
  • The changes aim to refactor GitHub Actions to comply with updated standards, as detailed in b/485167538.
  • The PR description notes that if not merged, this change may be force-merged by the GHSS team.
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.

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

Copy link
Copy Markdown
Contributor

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 is an automated refactoring to improve the security of your GitHub Actions by moving inline context expressions to environment variables. This is a valuable security enhancement. However, my review identified several instances where these new environment variables are used unsafely within run scripts, creating potential command injection vulnerabilities. One of these is a critical vulnerability involving an authentication token. The review comments provide specific code suggestions to properly quote variables and use safer shell commands to address these issues.

run: |-
echo ""@google-gemini:registry=https://npm.pkg.github.com"" > ~/.npmrc
echo ""//npm.pkg.github.com/:_authToken=${{ inputs.github-token }}"" >> ~/.npmrc
echo ""//npm.pkg.github.com/:_authToken=${INPUTS_GITHUB_TOKEN}"" >> ~/.npmrc

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

critical

Using echo with a variable that is not properly quoted within a double-quoted string can lead to command injection if the variable contains shell metacharacters (e.g., $()). Since INPUTS_GITHUB_TOKEN comes from a secret, its content should be treated as untrusted in this context. Using printf with a format string is a safer way to print the value without it being interpreted by the shell.

        printf "//npm.pkg.github.com/:_authToken=%s\n" "$INPUTS_GITHUB_TOKEN" >> ~/.npmrc

--title "Release ${INPUTS_RELEASE_TAG}" \
--notes-start-tag "${INPUTS_PREVIOUS_TAG}" \
--generate-notes \
${{ inputs.npm-tag != 'latest' && '--prerelease' || '' }}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

high

This refactoring is incomplete. The run script still contains a GitHub Actions expression that depends on an input (inputs.npm-tag). To complete the security hardening and improve readability, this logic should be moved into the shell script itself, using an environment variable for the input.

I recommend adding INPUTS_NPM_TAG: ${{ inputs.npm-tag }} to the env block for this step and then modifying the run script to handle the logic in bash:

PRERELEASE_ARG=""
if [[ "${INPUTS_NPM_TAG}" != "latest" ]]; then
  PRERELEASE_ARG="--prerelease"
fi
gh release create "${INPUTS_RELEASE_TAG}" \
  bundle/gemini.js \
  --target "${STEPS_RELEASE_BRANCH_OUTPUTS_BRANCH_NAME}" \
  --title "Release ${INPUTS_RELEASE_TAG}" \
  --notes-start-tag "${INPUTS_PREVIOUS_TAG}" \
  --generate-notes \
  $PRERELEASE_ARG

working-directory: '${{ inputs.working-directory }}'
run: |
npm dist-tag add ${{ inputs.core-package-name }}@${{ inputs.version }} ${{ inputs.channel }}
npm dist-tag add ${INPUTS_CORE_PACKAGE_NAME}@${INPUTS_VERSION} ${INPUTS_CHANNEL}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

high

The environment variables are used without quotes. This can lead to word splitting and globbing by the shell, and potentially command injection if the variables contain special characters. It's a security best practice to always quote variables in shell scripts.

        npm dist-tag add "${INPUTS_CORE_PACKAGE_NAME}@${INPUTS_VERSION}" "${INPUTS_CHANNEL}"

working-directory: '${{ inputs.working-directory }}'
run: |
npm dist-tag add ${{ inputs.cli-package-name }}@${{ inputs.version }} ${{ inputs.channel }}
npm dist-tag add ${INPUTS_CLI_PACKAGE_NAME}@${INPUTS_VERSION} ${INPUTS_CHANNEL}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

high

The environment variables are used without quotes. This can lead to word splitting and globbing by the shell, and potentially command injection if the variables contain special characters. It's a security best practice to always quote variables in shell scripts.

        npm dist-tag add "${INPUTS_CLI_PACKAGE_NAME}@${INPUTS_VERSION}" "${INPUTS_CHANNEL}"

working-directory: '${{ inputs.working-directory }}'
run: |
npm dist-tag add ${{ inputs.a2a-package-name }}@${{ inputs.version }} ${{ inputs.channel }}
npm dist-tag add ${INPUTS_A2A_PACKAGE_NAME}@${INPUTS_VERSION} ${INPUTS_CHANNEL}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

high

The environment variables are used without quotes. This can lead to word splitting and globbing by the shell, and potentially command injection if the variables contain special characters. It's a security best practice to always quote variables in shell scripts.

        npm dist-tag add "${INPUTS_A2A_PACKAGE_NAME}@${INPUTS_VERSION}" "${INPUTS_CHANNEL}"

working-directory: '${{ inputs.working-directory }}'
run: |
echo "Dry run: Would have added tag '${{ inputs.channel }}' to version '${{ inputs.version }}' for ${{ inputs.cli-package-name }}, ${{ inputs.core-package-name }}, and ${{ inputs.a2a-package-name }}."
echo "Dry run: Would have added tag '${INPUTS_CHANNEL}' to version '${INPUTS_VERSION}' for ${INPUTS_CLI_PACKAGE_NAME}, ${INPUTS_CORE_PACKAGE_NAME}, and ${INPUTS_A2A_PACKAGE_NAME}."

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

high

The package name variables are unquoted in this echo command. This could lead to command injection if a package name contained shell metacharacters. For safer logging, it's best to quote the variables.

        echo "Dry run: Would have added tag '${INPUTS_CHANNEL}' to version '${INPUTS_VERSION}' for '${INPUTS_CLI_PACKAGE_NAME}', '${INPUTS_CORE_PACKAGE_NAME}', and '${INPUTS_A2A_PACKAGE_NAME}'."

if [ "$gemini_version" != "${{ inputs.expected-version }}" ]; then
echo "❌ NPM Version mismatch: Got $gemini_version from ${{ inputs.npm-package }}, expected ${{ inputs.expected-version }}"
if [ "$gemini_version" != "${INPUTS_EXPECTED_VERSION}" ]; then
echo "❌ NPM Version mismatch: Got $gemini_version from ${INPUTS_NPM_PACKAGE}, expected ${INPUTS_EXPECTED_VERSION}"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

high

Variables in this echo statement are unquoted. This can lead to unexpected behavior or command injection if the variables contain shell metacharacters. It's safer to quote them, even in log messages.

          echo "❌ NPM Version mismatch: Got '$gemini_version' from '${INPUTS_NPM_PACKAGE}', expected '${INPUTS_EXPECTED_VERSION}'"

echo "❌ NPX Run Version mismatch: Got $gemini_version from ${{ inputs.npm-package }}, expected ${{ inputs.expected-version }}"
gemini_version=$(npx --prefer-online "${INPUTS_NPM_PACKAGE}" --version)
if [ "$gemini_version" != "${INPUTS_EXPECTED_VERSION}" ]; then
echo "❌ NPX Run Version mismatch: Got $gemini_version from ${INPUTS_NPM_PACKAGE}, expected ${INPUTS_EXPECTED_VERSION}"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

high

Variables in this echo statement are unquoted. This can lead to unexpected behavior or command injection if the variables contain shell metacharacters. It's safer to quote them, even in log messages.

          echo "❌ NPX Run Version mismatch: Got '$gemini_version' from '${INPUTS_NPM_PACKAGE}', expected '${INPUTS_EXPECTED_VERSION}'"

@google-admin google-admin deleted the lsc-1771395397.587337 branch February 18, 2026 22:50
@sripasg sripasg added the size/m A medium sized PR label Jun 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/m A medium sized PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants