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]

Reply via email to