Copilot commented on code in PR #10233:
URL: https://github.com/apache/gravitino/pull/10233#discussion_r2887928975
##########
dev/release/publish_docker.sh:
##########
@@ -0,0 +1,159 @@
+#!/bin/bash
Review Comment:
All other scripts in `dev/release/` use hyphens in their filenames (e.g.,
`do-release.sh`, `release-build.sh`, `release-tag.sh`, `check-license.sh`).
This file uses an underscore (`publish_docker.sh`). For consistency, consider
renaming to `publish-docker.sh`.
##########
dev/release/publish_docker.sh:
##########
@@ -0,0 +1,159 @@
+#!/bin/bash
+#
+# Build and publish Gravitino Docker images via GitHub Actions
+#
+# Usage: ./publish_docker.sh <tag|branch> [--dry-run]
+# Example:
+# ./publish_docker.sh v1.2.0-rc5
+# ./publish_docker.sh branch-1.2.0-rc5
+# ./publish_docker.sh v1.2.0-rc5 --dry-run
+#
+# Environment variables required (set in env file or shell profile):
+# DOCKER_USERNAME - Docker Hub username
+# PUBLISH_DOCKER_TOKEN - Docker Hub access token
+# GH_TOKEN - GitHub token with repo/workflow permissions
+#
+# This script triggers the docker-image.yml workflow for the following images:
+# - apache/gravitino:v${VERSION}
+# - apache/gravitino-iceberg-rest:${VERSION}
+# - apache/gravitino-lance-rest:${VERSION}
+# - apache/gravitino-mcp-server:${VERSION}
+# - apache/gravitino-playground:trino-478-gravitino-${VERSION}
+#
+
+set -e
+
+# Parse arguments
+DRY_RUN=false
+INPUT_TAG=""
+
+while [[ $# -gt 0 ]]; do
+ case "$1" in
+ --dry-run)
+ DRY_RUN=true
+ shift
+ ;;
+ -h|--help)
+ cat << EOF
+Usage: $0 <tag|branch> [--dry-run]
+
+Arguments:
+ <tag|branch> Git tag or branch name to build (e.g., v1.2.0-rc5,
branch-1.2.0-rc5)
+ --dry-run Preview mode, print commands without triggering workflows
+
+Environment variables:
+ DOCKER_USERNAME Docker Hub username (required for actual run)
+ PUBLISH_DOCKER_TOKEN Docker Hub access token (required for actual run)
+ GH_TOKEN GitHub token with repo/workflow permissions
+
+Examples:
+ $0 v1.2.0-rc5 # Build version 1.2.0-rc5
+ $0 branch-1.2.0-rc5 # Build from branch
+ $0 v1.2.0-rc5 --dry-run # Preview commands only
+
+Images built:
+ apache/gravitino:v${VERSION}
+ apache/gravitino-iceberg-rest:${VERSION}
+ apache/gravitino-lance-rest:${VERSION}
+ apache/gravitino-mcp-server:${VERSION}
+ apache/gravitino-playground:trino-478-gravitino-${VERSION}
+
+EOF
+ exit 0
+ ;;
+ *)
+ if [[ -z "$INPUT_TAG" ]]; then
+ INPUT_TAG="$1"
+ else
+ echo "ERROR: Unknown argument: $1"
+ exit 1
+ fi
+ shift
+ ;;
+ esac
+done
+
+# Check tag argument
+if [[ -z "$INPUT_TAG" ]]; then
+ echo "ERROR: Missing tag/branch argument"
+ echo "Usage: $0 <tag|branch> [--dry-run]"
+ exit 1
+fi
+
+# Verify tag or branch exists
+if ! git rev-parse "$INPUT_TAG" >/dev/null 2>&1; then
+ echo "ERROR: Tag or branch '$INPUT_TAG' does not exist"
+ exit 1
+fi
+
+echo "Verified: $INPUT_TAG exists"
Review Comment:
`git rev-parse "$INPUT_TAG"` only checks the **local** repository for the
given ref. However, the workflow is triggered on the remote repository (`-R
apache/gravitino`). If the user hasn't fetched the latest tags/branches, this
check could incorrectly fail for a valid remote ref, or pass for a local-only
ref that doesn't exist on the remote. Consider using `git ls-remote --exit-code
apache/gravitino "$INPUT_TAG"` (or at least `git fetch --tags` before the
check) to verify the ref exists on the remote.
```suggestion
# Verify tag or branch exists on the apache/gravitino remote
if ! git ls-remote --exit-code https://github.com/apache/gravitino.git
"$INPUT_TAG" >/dev/null 2>&1; then
echo "ERROR: Tag or branch '$INPUT_TAG' does not exist on remote
'apache/gravitino'"
exit 1
fi
echo "Verified: $INPUT_TAG exists on remote 'apache/gravitino'"
```
##########
dev/release/publish_docker.sh:
##########
@@ -0,0 +1,159 @@
+#!/bin/bash
+#
+# Build and publish Gravitino Docker images via GitHub Actions
+#
+# Usage: ./publish_docker.sh <tag|branch> [--dry-run]
+# Example:
+# ./publish_docker.sh v1.2.0-rc5
+# ./publish_docker.sh branch-1.2.0-rc5
+# ./publish_docker.sh v1.2.0-rc5 --dry-run
+#
+# Environment variables required (set in env file or shell profile):
+# DOCKER_USERNAME - Docker Hub username
+# PUBLISH_DOCKER_TOKEN - Docker Hub access token
+# GH_TOKEN - GitHub token with repo/workflow permissions
+#
+# This script triggers the docker-image.yml workflow for the following images:
+# - apache/gravitino:v${VERSION}
+# - apache/gravitino-iceberg-rest:${VERSION}
+# - apache/gravitino-lance-rest:${VERSION}
+# - apache/gravitino-mcp-server:${VERSION}
+# - apache/gravitino-playground:trino-478-gravitino-${VERSION}
+#
+
+set -e
+
+# Parse arguments
+DRY_RUN=false
+INPUT_TAG=""
+
+while [[ $# -gt 0 ]]; do
+ case "$1" in
+ --dry-run)
+ DRY_RUN=true
+ shift
+ ;;
+ -h|--help)
+ cat << EOF
+Usage: $0 <tag|branch> [--dry-run]
+
+Arguments:
+ <tag|branch> Git tag or branch name to build (e.g., v1.2.0-rc5,
branch-1.2.0-rc5)
+ --dry-run Preview mode, print commands without triggering workflows
+
+Environment variables:
+ DOCKER_USERNAME Docker Hub username (required for actual run)
+ PUBLISH_DOCKER_TOKEN Docker Hub access token (required for actual run)
+ GH_TOKEN GitHub token with repo/workflow permissions
+
+Examples:
+ $0 v1.2.0-rc5 # Build version 1.2.0-rc5
+ $0 branch-1.2.0-rc5 # Build from branch
+ $0 v1.2.0-rc5 --dry-run # Preview commands only
+
+Images built:
+ apache/gravitino:v${VERSION}
+ apache/gravitino-iceberg-rest:${VERSION}
+ apache/gravitino-lance-rest:${VERSION}
+ apache/gravitino-mcp-server:${VERSION}
+ apache/gravitino-playground:trino-478-gravitino-${VERSION}
+
+EOF
+ exit 0
+ ;;
+ *)
+ if [[ -z "$INPUT_TAG" ]]; then
+ INPUT_TAG="$1"
+ else
+ echo "ERROR: Unknown argument: $1"
+ exit 1
+ fi
+ shift
+ ;;
+ esac
+done
+
+# Check tag argument
+if [[ -z "$INPUT_TAG" ]]; then
+ echo "ERROR: Missing tag/branch argument"
+ echo "Usage: $0 <tag|branch> [--dry-run]"
+ exit 1
+fi
+
+# Verify tag or branch exists
+if ! git rev-parse "$INPUT_TAG" >/dev/null 2>&1; then
+ echo "ERROR: Tag or branch '$INPUT_TAG' does not exist"
+ exit 1
+fi
+
+echo "Verified: $INPUT_TAG exists"
+
+# Trino special version
+TRINO_VERSION="trino-478-gravitino-${INPUT_TAG}"
Review Comment:
The Trino version `478` is hardcoded here, but the project's Trino
playground Dockerfile (`dev/docker/trino/Dockerfile`) currently uses
`trinodb/trino:469`. This hardcoded value will need to be updated every time
the Trino version changes. Consider making the Trino version a configurable
parameter (e.g., via an additional CLI argument or environment variable)
instead of hardcoding it, or at minimum add a comment explaining where this
value comes from and when it needs to be updated.
##########
dev/release/publish_docker.sh:
##########
@@ -0,0 +1,159 @@
+#!/bin/bash
+#
+# Build and publish Gravitino Docker images via GitHub Actions
+#
+# Usage: ./publish_docker.sh <tag|branch> [--dry-run]
+# Example:
+# ./publish_docker.sh v1.2.0-rc5
+# ./publish_docker.sh branch-1.2.0-rc5
+# ./publish_docker.sh v1.2.0-rc5 --dry-run
+#
+# Environment variables required (set in env file or shell profile):
+# DOCKER_USERNAME - Docker Hub username
+# PUBLISH_DOCKER_TOKEN - Docker Hub access token
+# GH_TOKEN - GitHub token with repo/workflow permissions
+#
+# This script triggers the docker-image.yml workflow for the following images:
+# - apache/gravitino:v${VERSION}
+# - apache/gravitino-iceberg-rest:${VERSION}
+# - apache/gravitino-lance-rest:${VERSION}
+# - apache/gravitino-mcp-server:${VERSION}
+# - apache/gravitino-playground:trino-478-gravitino-${VERSION}
+#
+
+set -e
+
Review Comment:
The script depends on `gh` (GitHub CLI) and `git` but doesn't verify that
these commands are available before use. If `gh` is not installed, the script
will fail at line 131 with an unclear error. Other release scripts in this
directory (e.g., `do-release.sh` lines 36-41) explicitly check for required
commands. Add a similar check for `gh` and `git`.
```suggestion
# Check for required commands
for cmd in git gh; do
if ! command -v "$cmd" >/dev/null 2>&1; then
echo "ERROR: Required command '$cmd' is not installed or not in PATH."
exit 1
fi
done
```
##########
dev/release/publish_docker.sh:
##########
@@ -0,0 +1,159 @@
+#!/bin/bash
+#
+# Build and publish Gravitino Docker images via GitHub Actions
+#
+# Usage: ./publish_docker.sh <tag|branch> [--dry-run]
+# Example:
+# ./publish_docker.sh v1.2.0-rc5
+# ./publish_docker.sh branch-1.2.0-rc5
+# ./publish_docker.sh v1.2.0-rc5 --dry-run
+#
+# Environment variables required (set in env file or shell profile):
+# DOCKER_USERNAME - Docker Hub username
+# PUBLISH_DOCKER_TOKEN - Docker Hub access token
+# GH_TOKEN - GitHub token with repo/workflow permissions
+#
+# This script triggers the docker-image.yml workflow for the following images:
+# - apache/gravitino:v${VERSION}
+# - apache/gravitino-iceberg-rest:${VERSION}
+# - apache/gravitino-lance-rest:${VERSION}
+# - apache/gravitino-mcp-server:${VERSION}
+# - apache/gravitino-playground:trino-478-gravitino-${VERSION}
+#
+
+set -e
+
+# Parse arguments
+DRY_RUN=false
+INPUT_TAG=""
+
+while [[ $# -gt 0 ]]; do
+ case "$1" in
+ --dry-run)
+ DRY_RUN=true
+ shift
+ ;;
+ -h|--help)
+ cat << EOF
+Usage: $0 <tag|branch> [--dry-run]
+
+Arguments:
+ <tag|branch> Git tag or branch name to build (e.g., v1.2.0-rc5,
branch-1.2.0-rc5)
+ --dry-run Preview mode, print commands without triggering workflows
+
+Environment variables:
+ DOCKER_USERNAME Docker Hub username (required for actual run)
+ PUBLISH_DOCKER_TOKEN Docker Hub access token (required for actual run)
+ GH_TOKEN GitHub token with repo/workflow permissions
+
+Examples:
+ $0 v1.2.0-rc5 # Build version 1.2.0-rc5
+ $0 branch-1.2.0-rc5 # Build from branch
+ $0 v1.2.0-rc5 --dry-run # Preview commands only
+
+Images built:
+ apache/gravitino:v${VERSION}
+ apache/gravitino-iceberg-rest:${VERSION}
+ apache/gravitino-lance-rest:${VERSION}
+ apache/gravitino-mcp-server:${VERSION}
+ apache/gravitino-playground:trino-478-gravitino-${VERSION}
+
+EOF
+ exit 0
+ ;;
+ *)
+ if [[ -z "$INPUT_TAG" ]]; then
+ INPUT_TAG="$1"
+ else
+ echo "ERROR: Unknown argument: $1"
+ exit 1
+ fi
+ shift
+ ;;
+ esac
+done
+
+# Check tag argument
+if [[ -z "$INPUT_TAG" ]]; then
+ echo "ERROR: Missing tag/branch argument"
+ echo "Usage: $0 <tag|branch> [--dry-run]"
+ exit 1
+fi
+
+# Verify tag or branch exists
+if ! git rev-parse "$INPUT_TAG" >/dev/null 2>&1; then
+ echo "ERROR: Tag or branch '$INPUT_TAG' does not exist"
+ exit 1
+fi
+
+echo "Verified: $INPUT_TAG exists"
+
+# Trino special version
+TRINO_VERSION="trino-478-gravitino-${INPUT_TAG}"
+
+if [[ "$DRY_RUN" == "true" ]]; then
+ echo "=== [DRY RUN] Preview Gravitino Docker Image Build ==="
+else
+ echo "=== Building Gravitino Docker Images ==="
+fi
+echo "Input: ${INPUT_TAG}"
+echo "Trino Version: ${TRINO_VERSION}"
+
+if [[ "$DRY_RUN" == "false" ]]; then
+ if [[ -z "$DOCKER_USERNAME" ]]; then
+ echo "ERROR: DOCKER_USERNAME environment variable not set"
+ exit 1
+ fi
+ if [[ -z "$PUBLISH_DOCKER_TOKEN" ]]; then
+ echo "ERROR: PUBLISH_DOCKER_TOKEN environment variable not set"
+ exit 1
+ fi
+ echo "Username: ${DOCKER_USERNAME}"
+fi
+echo ""
+
+# Image list
+declare -a images=(
+ "gravitino"
+ "gravitino-iceberg-rest-server"
+ "gravitino-lance-rest-server"
+ "gravitino-mcp-server"
+)
+
+echo "=== Triggering Workflows ==="
+
+# Build main images
+for img in "${images[@]}"; do
+ if [[ "$DRY_RUN" == "true" ]]; then
+ echo ">>> [DRY RUN] gh workflow run docker-image.yml -R apache/gravitino
-f image=${img} -f version=${INPUT_TAG}"
+ else
+ echo ">>> Triggering ${img}:${INPUT_TAG}"
+ gh workflow run docker-image.yml -R apache/gravitino \
+ -f image="${img}" \
+ -f docker_repo_name=apache \
+ -f version="${INPUT_TAG}" \
+ -f username="${DOCKER_USERNAME}" \
+ -f token="${PUBLISH_DOCKER_TOKEN}"
+ fi
Review Comment:
`PUBLISH_DOCKER_TOKEN` is passed as a plaintext workflow input (`-f
token=...`). GitHub Actions workflow dispatch inputs of type `string` are
**not** masked in the Actions UI or API responses — they are visible in the
workflow run's input parameters to anyone with read access to the repository.
This is a pre-existing design issue in the `docker-image.yml` workflow (the
token input is compared against a secret as an authorization check rather than
being used for Docker login), but it's worth noting that this script
perpetuates the exposure. Consider adding a warning comment in the script that
this token will be visible in the GitHub Actions run logs/UI.
##########
dev/release/publish_docker.sh:
##########
@@ -0,0 +1,159 @@
+#!/bin/bash
+#
+# Build and publish Gravitino Docker images via GitHub Actions
+#
+# Usage: ./publish_docker.sh <tag|branch> [--dry-run]
+# Example:
+# ./publish_docker.sh v1.2.0-rc5
+# ./publish_docker.sh branch-1.2.0-rc5
+# ./publish_docker.sh v1.2.0-rc5 --dry-run
+#
+# Environment variables required (set in env file or shell profile):
+# DOCKER_USERNAME - Docker Hub username
+# PUBLISH_DOCKER_TOKEN - Docker Hub access token
+# GH_TOKEN - GitHub token with repo/workflow permissions
+#
+# This script triggers the docker-image.yml workflow for the following images:
+# - apache/gravitino:v${VERSION}
+# - apache/gravitino-iceberg-rest:${VERSION}
+# - apache/gravitino-lance-rest:${VERSION}
+# - apache/gravitino-mcp-server:${VERSION}
+# - apache/gravitino-playground:trino-478-gravitino-${VERSION}
Review Comment:
Same issue as the help text: `${VERSION}` in these comment lines is
technically not expanded (they're in comments), but it's inconsistent with the
actual image naming. For example, the comment says
`apache/gravitino:v${VERSION}` (with a `v` prefix), but the script passes
`INPUT_TAG` directly as the version. If `INPUT_TAG` is already `v1.2.0-rc5`,
the gravitino image tag would be `v1.2.0-rc5`, not `vv1.2.0-rc5`. The
documentation should clearly describe what the actual tag will be.
##########
dev/release/publish_docker.sh:
##########
@@ -0,0 +1,159 @@
+#!/bin/bash
+#
+# Build and publish Gravitino Docker images via GitHub Actions
Review Comment:
This file is missing the Apache License 2.0 header that all other scripts in
`dev/release/` include. Per the project's coding guidelines for new files, an
Apache License 2.0 header must be added at the top of the file (after the
shebang line). See `dev/release/release-build.sh` lines 2-18 or
`dev/release/check-license.sh` lines 2-18 for the expected format.
##########
dev/release/publish_docker.sh:
##########
@@ -0,0 +1,159 @@
+#!/bin/bash
+#
+# Build and publish Gravitino Docker images via GitHub Actions
+#
+# Usage: ./publish_docker.sh <tag|branch> [--dry-run]
+# Example:
+# ./publish_docker.sh v1.2.0-rc5
+# ./publish_docker.sh branch-1.2.0-rc5
+# ./publish_docker.sh v1.2.0-rc5 --dry-run
+#
+# Environment variables required (set in env file or shell profile):
+# DOCKER_USERNAME - Docker Hub username
+# PUBLISH_DOCKER_TOKEN - Docker Hub access token
+# GH_TOKEN - GitHub token with repo/workflow permissions
+#
+# This script triggers the docker-image.yml workflow for the following images:
+# - apache/gravitino:v${VERSION}
+# - apache/gravitino-iceberg-rest:${VERSION}
+# - apache/gravitino-lance-rest:${VERSION}
+# - apache/gravitino-mcp-server:${VERSION}
+# - apache/gravitino-playground:trino-478-gravitino-${VERSION}
+#
+
+set -e
+
+# Parse arguments
+DRY_RUN=false
+INPUT_TAG=""
+
+while [[ $# -gt 0 ]]; do
+ case "$1" in
+ --dry-run)
+ DRY_RUN=true
+ shift
+ ;;
+ -h|--help)
+ cat << EOF
+Usage: $0 <tag|branch> [--dry-run]
+
+Arguments:
+ <tag|branch> Git tag or branch name to build (e.g., v1.2.0-rc5,
branch-1.2.0-rc5)
+ --dry-run Preview mode, print commands without triggering workflows
+
+Environment variables:
+ DOCKER_USERNAME Docker Hub username (required for actual run)
+ PUBLISH_DOCKER_TOKEN Docker Hub access token (required for actual run)
+ GH_TOKEN GitHub token with repo/workflow permissions
+
+Examples:
+ $0 v1.2.0-rc5 # Build version 1.2.0-rc5
+ $0 branch-1.2.0-rc5 # Build from branch
+ $0 v1.2.0-rc5 --dry-run # Preview commands only
+
+Images built:
+ apache/gravitino:v${VERSION}
+ apache/gravitino-iceberg-rest:${VERSION}
+ apache/gravitino-lance-rest:${VERSION}
+ apache/gravitino-mcp-server:${VERSION}
+ apache/gravitino-playground:trino-478-gravitino-${VERSION}
+
+EOF
+ exit 0
+ ;;
+ *)
+ if [[ -z "$INPUT_TAG" ]]; then
+ INPUT_TAG="$1"
+ else
+ echo "ERROR: Unknown argument: $1"
+ exit 1
+ fi
+ shift
+ ;;
+ esac
+done
+
+# Check tag argument
+if [[ -z "$INPUT_TAG" ]]; then
+ echo "ERROR: Missing tag/branch argument"
+ echo "Usage: $0 <tag|branch> [--dry-run]"
+ exit 1
+fi
+
+# Verify tag or branch exists
+if ! git rev-parse "$INPUT_TAG" >/dev/null 2>&1; then
+ echo "ERROR: Tag or branch '$INPUT_TAG' does not exist"
+ exit 1
+fi
+
+echo "Verified: $INPUT_TAG exists"
+
+# Trino special version
+TRINO_VERSION="trino-478-gravitino-${INPUT_TAG}"
+
+if [[ "$DRY_RUN" == "true" ]]; then
+ echo "=== [DRY RUN] Preview Gravitino Docker Image Build ==="
+else
+ echo "=== Building Gravitino Docker Images ==="
+fi
+echo "Input: ${INPUT_TAG}"
+echo "Trino Version: ${TRINO_VERSION}"
+
+if [[ "$DRY_RUN" == "false" ]]; then
+ if [[ -z "$DOCKER_USERNAME" ]]; then
+ echo "ERROR: DOCKER_USERNAME environment variable not set"
+ exit 1
+ fi
+ if [[ -z "$PUBLISH_DOCKER_TOKEN" ]]; then
+ echo "ERROR: PUBLISH_DOCKER_TOKEN environment variable not set"
+ exit 1
+ fi
Review Comment:
`GH_TOKEN` is documented as a required environment variable (lines 14, 47)
but is never validated before use. When `gh workflow run` is called without a
valid `GH_TOKEN` (or `gh` CLI not being authenticated), it will fail with an
opaque error. Add a check for `GH_TOKEN` (or `gh auth status`) alongside the
`DOCKER_USERNAME` and `PUBLISH_DOCKER_TOKEN` checks in the non-dry-run block.
```suggestion
fi
if [[ -z "$GH_TOKEN" ]]; then
echo "ERROR: GH_TOKEN environment variable not set"
exit 1
fi
```
##########
dev/release/publish_docker.sh:
##########
@@ -0,0 +1,159 @@
+#!/bin/bash
+#
+# Build and publish Gravitino Docker images via GitHub Actions
+#
+# Usage: ./publish_docker.sh <tag|branch> [--dry-run]
+# Example:
+# ./publish_docker.sh v1.2.0-rc5
+# ./publish_docker.sh branch-1.2.0-rc5
+# ./publish_docker.sh v1.2.0-rc5 --dry-run
+#
+# Environment variables required (set in env file or shell profile):
+# DOCKER_USERNAME - Docker Hub username
+# PUBLISH_DOCKER_TOKEN - Docker Hub access token
+# GH_TOKEN - GitHub token with repo/workflow permissions
+#
+# This script triggers the docker-image.yml workflow for the following images:
+# - apache/gravitino:v${VERSION}
+# - apache/gravitino-iceberg-rest:${VERSION}
+# - apache/gravitino-lance-rest:${VERSION}
+# - apache/gravitino-mcp-server:${VERSION}
+# - apache/gravitino-playground:trino-478-gravitino-${VERSION}
+#
+
+set -e
+
+# Parse arguments
+DRY_RUN=false
+INPUT_TAG=""
+
+while [[ $# -gt 0 ]]; do
+ case "$1" in
+ --dry-run)
+ DRY_RUN=true
+ shift
+ ;;
+ -h|--help)
+ cat << EOF
+Usage: $0 <tag|branch> [--dry-run]
+
+Arguments:
+ <tag|branch> Git tag or branch name to build (e.g., v1.2.0-rc5,
branch-1.2.0-rc5)
+ --dry-run Preview mode, print commands without triggering workflows
+
+Environment variables:
+ DOCKER_USERNAME Docker Hub username (required for actual run)
+ PUBLISH_DOCKER_TOKEN Docker Hub access token (required for actual run)
+ GH_TOKEN GitHub token with repo/workflow permissions
+
+Examples:
+ $0 v1.2.0-rc5 # Build version 1.2.0-rc5
+ $0 branch-1.2.0-rc5 # Build from branch
+ $0 v1.2.0-rc5 --dry-run # Preview commands only
+
+Images built:
+ apache/gravitino:v${VERSION}
+ apache/gravitino-iceberg-rest:${VERSION}
+ apache/gravitino-lance-rest:${VERSION}
+ apache/gravitino-mcp-server:${VERSION}
+ apache/gravitino-playground:trino-478-gravitino-${VERSION}
Review Comment:
The `${VERSION}` variable referenced in the help text (lines 55-59) is never
defined, so when a user runs `--help`, these lines will render with empty
strings (e.g., `apache/gravitino:v` instead of showing a meaningful
placeholder). Use escaped/literal placeholders like `\${VERSION}` or replace
with static example text (e.g., `apache/gravitino:<VERSION>`).
```suggestion
apache/gravitino:v\${VERSION}
apache/gravitino-iceberg-rest:\${VERSION}
apache/gravitino-lance-rest:\${VERSION}
apache/gravitino-mcp-server:\${VERSION}
apache/gravitino-playground:trino-478-gravitino-\${VERSION}
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]