Skip to content

Add release script for a2ui python agent#1056

Open
nan-yu wants to merge 2 commits intogoogle:mainfrom
nan-yu:agent-sdks
Open

Add release script for a2ui python agent#1056
nan-yu wants to merge 2 commits intogoogle:mainfrom
nan-yu:agent-sdks

Conversation

@nan-yu
Copy link
Copy Markdown
Collaborator

@nan-yu nan-yu commented Apr 2, 2026

Description

Replace this paragraph with a description of what this PR is changing or adding, and why. Consider including before/after screenshots.

List which issues are fixed by this PR. For larger changes, raising an issue first helps reduce redundant work.

Pre-launch Checklist

If you need help, consider asking for advice on the discussion board.

Copy link
Copy Markdown
Contributor

@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 release workflow for the Python SDK, adding a release.sh script and updating the README with deployment instructions. The review feedback focuses on improving the script's robustness and portability by suggesting the use of environment variables for configuration, isolated tool execution via uvx, handling non-interactive authentication failures, and ensuring proper cleanup of temporary files.

Comment on lines +6 to +11
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
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.

medium

The project, repository, and GCS bucket names are hardcoded to production values. To make the script more flexible and testable (e.g., for dry runs or staging releases), consider allowing these to be overridden via environment variables with the current values as defaults.

Suggested change
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
PACKAGE_NAME="${PACKAGE_NAME:-a2ui-agent-sdk}"
REPOSITORY="${REPOSITORY:-a2ui--pypi}"
PROJECT="${PROJECT:-oss-exit-gate-prod}"
LOCATION="${LOCATION:-us}"
REPOSITORY_URL="${REPOSITORY_URL:-https://us-python.pkg.dev/${PROJECT}/${REPOSITORY}}"
GCS_URI="${GCS_URI:-gs://oss-exit-gate-prod-projects-bucket/a2ui/pypi/manifests}"

Comment on lines +14 to +15
# limitations under the License.

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.

medium

Using uv tool install modifies the user's global tool environment every time the script runs. For a release script, it is generally better to use uvx (or uv tool run) to execute these tools in a transient, isolated environment. This avoids polluting the user's global state and ensures the script is more self-contained.

PROJECT="oss-exit-gate-prod"
LOCATION="us"
REPOSITORY_URL="https://us-python.pkg.dev/${PROJECT}/${REPOSITORY}"
GCS_URI="gs://oss-exit-gate-prod-projects-bucket/a2ui/pypi/manifests"
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.

medium

Importing the package to extract the version number can be fragile if the environment is not fully set up or if the package has side effects on import. Since the version is defined in a simple Python file, consider parsing it directly to avoid unnecessary execution.

Suggested change
GCS_URI="gs://oss-exit-gate-prod-projects-bucket/a2ui/pypi/manifests"
version=$(sed -n 's/__version__ = "\(.*\)"/\1/p' src/a2ui/version.py)


echo "--- Installing helper packages ---"
uv tool install twine --with keyrings.google-artifactregistry-auth --with keyring
uv tool install keyring --with keyrings.google-artifactregistry-auth
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.

medium

The command gcloud auth application-default login is interactive and will cause the script to hang or fail in non-interactive environments like CI/CD pipelines. It is better to exit with an error message instructing the user to authenticate if credentials are missing.

Suggested change
uv tool install keyring --with keyrings.google-artifactregistry-auth
echo "Error: Application Default Credentials not found. Please run 'gcloud auth application-default login'." >&2
exit 1

twine --version
twine check dist/*

version=$(uv run python -c "import a2ui; print(a2ui.__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.

medium

It is recommended to use the --non-interactive flag with twine upload to ensure the script fails immediately if authentication is not correctly configured, rather than waiting for user input.

Suggested change
version=$(uv run python -c "import a2ui; print(a2ui.__version__)")
twine upload --non-interactive --repository-url $REPOSITORY_URL dist/*


# Authenticate with Google Cloud
if ! gcloud auth application-default print-access-token --quiet > /dev/null; then
gcloud auth application-default login
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.

medium

The manifest.json file is created in the local directory but never removed. Consider adding a cleanup step to ensure temporary files are deleted after the script finishes.

Suggested change
gcloud auth application-default login
echo '{ "publish_all": true }' > manifest.json
trap 'rm -f manifest.json' EXIT


## Tracking the release

1. Check the release status through Sponge: go/spng2?q=PROJECT%3Aa2ui%2Fpypi
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Do we want to add this internal link to the OSS project? @jacobsimionato @gspencergoog

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Todo

Development

Successfully merging this pull request may close these issues.

1 participant