From a213146a80c11cfc9e8ff297fae96729223415e9 Mon Sep 17 00:00:00 2001 From: j-zhangyiyuan Date: Mon, 3 Aug 2026 10:32:05 +0800 Subject: [PATCH 1/2] fix: Java README version stuck at 1.0.5-01; release sed regex can't match numeric qualifiers The qualifier group \(-[a-z]...)\ requires qualifiers to start with a letter. Numeric-only qualifiers like \-01\ don't match, so the Maven snippet was never updated past 1.0.5-01. Fix the regex to accept any alphanumeric qualifier start character: \(-[a-zA-Z0-9][a-zA-Z0-9.-]*)\ Also update the stale README versions to 1.0.6 (latest release). Closes #2209 --- .github/workflows/java-publish-maven.yml | 12 ++++++------ java/README.md | 4 ++-- java/jbang-example.java | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/java-publish-maven.yml b/.github/workflows/java-publish-maven.yml index 944a0ee38e..789fcee1de 100644 --- a/.github/workflows/java-publish-maven.yml +++ b/.github/workflows/java-publish-maven.yml @@ -200,19 +200,19 @@ jobs: run: | VERSION="${{ steps.versions.outputs.release_version }}" - # Update release version in README.md (supports any version qualifier like -java.N, -java-preview.N, -beta-java.N) - sed -i "s|[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\(-[a-z][a-z0-9-]*\.[0-9][0-9]*\)*|${VERSION}|g" README.md - sed -i "s|copilot-sdk-java:[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\(-[a-z][a-z0-9-]*\.[0-9][0-9]*\)*|copilot-sdk-java:${VERSION}|g" README.md + # Update release version in README.md (matches alpha qualifiers like -preview.2 and numeric like -01, but not -SNAPSHOT) + sed -i "s|[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\(-[a-z][a-z0-9-]*\.[0-9][0-9]*\|-[0-9][0-9]*\)*|${VERSION}|g" README.md + sed -i "s|copilot-sdk-java:[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\(-[a-z][a-z0-9-]*\.[0-9][0-9]*\|-[0-9][0-9]*\)*|copilot-sdk-java:${VERSION}|g" README.md # Update snapshot versions in README.md (must run AFTER release version seds # because the release copilot-sdk-java: pattern partially matches inside snapshot # strings — the snapshot-specific seds override with the correct DEV_VERSION) DEV_VERSION="${{ steps.versions.outputs.dev_version }}" - sed -i "s|[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\(-[a-z][a-z0-9-]*\.[0-9][0-9]*\)*-SNAPSHOT|${DEV_VERSION}|g" README.md - sed -i "s|copilot-sdk-java:[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\(-[a-z][a-z0-9-]*\.[0-9][0-9]*\)*-SNAPSHOT|copilot-sdk-java:${DEV_VERSION}|g" README.md + sed -i "s|[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\(-[a-z][a-z0-9-]*\.[0-9][0-9]*\|-[0-9][0-9]*\)*-SNAPSHOT|${DEV_VERSION}|g" README.md + sed -i "s|copilot-sdk-java:[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\(-[a-z][a-z0-9-]*\.[0-9][0-9]*\|-[0-9][0-9]*\)*-SNAPSHOT|copilot-sdk-java:${DEV_VERSION}|g" README.md # Update version in jbang-example.java - sed -i "s|copilot-sdk-java:[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\(-[a-z][a-z0-9-]*\.[0-9][0-9]*\)*|copilot-sdk-java:${VERSION}|g" jbang-example.java + sed -i "s|copilot-sdk-java:[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\(-[a-z][a-z0-9-]*\.[0-9][0-9]*\|-[0-9][0-9]*\)*|copilot-sdk-java:${VERSION}|g" jbang-example.java sed -i 's|copilot-sdk-java:${project\.version}|copilot-sdk-java:'"${VERSION}"'|g' jbang-example.java # Commit the documentation changes before release:prepare (requires clean working directory) diff --git a/java/README.md b/java/README.md index 1ff1c90c73..ac1591b1d2 100644 --- a/java/README.md +++ b/java/README.md @@ -32,14 +32,14 @@ Replace `${copilot.sdk.version}` with the latest release from Maven Central. com.github copilot-sdk-java - 1.0.5-01 + 1.0.9-preview.3 ``` ### Gradle ```groovy -implementation 'com.github:copilot-sdk-java:1.0.9-preview.3-01' +implementation 'com.github:copilot-sdk-java:1.0.9-preview.3' ``` #### Snapshot Builds diff --git a/java/jbang-example.java b/java/jbang-example.java index 59e625724e..9abc39eddd 100644 --- a/java/jbang-example.java +++ b/java/jbang-example.java @@ -1,5 +1,5 @@ ///usr/bin/env jbang "$0" "$@" ; exit $? -//DEPS com.github:copilot-sdk-java:1.0.9-preview.3-01 +//DEPS com.github:copilot-sdk-java:1.0.9-preview.3 import com.github.copilot.CopilotClient; import com.github.copilot.generated.AssistantMessageEvent; import com.github.copilot.generated.SessionUsageInfoEvent; From 5aa5594f12a6738a041fb0c329469d9c1248deb4 Mon Sep 17 00:00:00 2001 From: Ed Burns Date: Tue, 4 Aug 2026 19:52:53 -0400 Subject: [PATCH 2/2] test(java): validate documentation version updates Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: a90becbd-1667-4e13-8047-b5715ad21e9f --- .github/workflows/java-publish-maven.yml | 16 +--- .github/workflows/java-sdk-tests.yml | 4 + .../test-update-documentation-versions.sh | 53 ++++++++++++ java/scripts/update-documentation-versions.sh | 80 +++++++++++++++++++ 4 files changed, 139 insertions(+), 14 deletions(-) create mode 100755 java/scripts/test-update-documentation-versions.sh create mode 100755 java/scripts/update-documentation-versions.sh diff --git a/.github/workflows/java-publish-maven.yml b/.github/workflows/java-publish-maven.yml index 789fcee1de..e293d91271 100644 --- a/.github/workflows/java-publish-maven.yml +++ b/.github/workflows/java-publish-maven.yml @@ -199,21 +199,9 @@ jobs: working-directory: ./java run: | VERSION="${{ steps.versions.outputs.release_version }}" - - # Update release version in README.md (matches alpha qualifiers like -preview.2 and numeric like -01, but not -SNAPSHOT) - sed -i "s|[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\(-[a-z][a-z0-9-]*\.[0-9][0-9]*\|-[0-9][0-9]*\)*|${VERSION}|g" README.md - sed -i "s|copilot-sdk-java:[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\(-[a-z][a-z0-9-]*\.[0-9][0-9]*\|-[0-9][0-9]*\)*|copilot-sdk-java:${VERSION}|g" README.md - - # Update snapshot versions in README.md (must run AFTER release version seds - # because the release copilot-sdk-java: pattern partially matches inside snapshot - # strings — the snapshot-specific seds override with the correct DEV_VERSION) DEV_VERSION="${{ steps.versions.outputs.dev_version }}" - sed -i "s|[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\(-[a-z][a-z0-9-]*\.[0-9][0-9]*\|-[0-9][0-9]*\)*-SNAPSHOT|${DEV_VERSION}|g" README.md - sed -i "s|copilot-sdk-java:[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\(-[a-z][a-z0-9-]*\.[0-9][0-9]*\|-[0-9][0-9]*\)*-SNAPSHOT|copilot-sdk-java:${DEV_VERSION}|g" README.md - - # Update version in jbang-example.java - sed -i "s|copilot-sdk-java:[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\(-[a-z][a-z0-9-]*\.[0-9][0-9]*\|-[0-9][0-9]*\)*|copilot-sdk-java:${VERSION}|g" jbang-example.java - sed -i 's|copilot-sdk-java:${project\.version}|copilot-sdk-java:'"${VERSION}"'|g' jbang-example.java + ./scripts/test-update-documentation-versions.sh + ./scripts/update-documentation-versions.sh "$VERSION" "$DEV_VERSION" README.md jbang-example.java # Commit the documentation changes before release:prepare (requires clean working directory) git add README.md jbang-example.java diff --git a/.github/workflows/java-sdk-tests.yml b/.github/workflows/java-sdk-tests.yml index c92b5291a3..20083749ec 100644 --- a/.github/workflows/java-sdk-tests.yml +++ b/.github/workflows/java-sdk-tests.yml @@ -45,6 +45,10 @@ jobs: with: node-version: 22 + - name: Test documentation version updater + if: matrix.test-jdk == '25' + run: ./scripts/test-update-documentation-versions.sh + - name: Build SDK and set up test harness run: mvn test-compile jar:jar diff --git a/java/scripts/test-update-documentation-versions.sh b/java/scripts/test-update-documentation-versions.sh new file mode 100755 index 0000000000..213bda6c43 --- /dev/null +++ b/java/scripts/test-update-documentation-versions.sh @@ -0,0 +1,53 @@ +#!/usr/bin/env bash + +set -euo pipefail + +SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +UPDATER="${SCRIPT_DIR}/update-documentation-versions.sh" +TEMP_DIR=$(mktemp -d) +trap 'rm -rf "$TEMP_DIR"' EXIT + +run_case() { + local name=$1 + local old_version=$2 + local old_dev_version=$3 + local version=$4 + local dev_version=$5 + local old_jbang_version=$6 + local case_dir="${TEMP_DIR}/${name}" + + mkdir "$case_dir" + printf '%s\n' \ + '' \ + ' copilot-sdk-java' \ + " ${old_version}" \ + '' \ + "implementation 'com.github:copilot-sdk-java:${old_version}'" \ + '' \ + ' copilot-sdk-java' \ + " ${old_dev_version}" \ + '' \ + "implementation 'com.github:copilot-sdk-java:${old_dev_version}'" \ + > "${case_dir}/README.md" + printf '%s\n' \ + "///usr/bin/env jbang \"\$0\" \"\$@\" ; exit \$?" \ + "//DEPS com.github:copilot-sdk-java:${old_jbang_version}" \ + > "${case_dir}/jbang-example.java" + + "$UPDATER" "$version" "$dev_version" "${case_dir}/README.md" "${case_dir}/jbang-example.java" + + grep -Fqx " ${version}" "${case_dir}/README.md" + grep -Fqx "implementation 'com.github:copilot-sdk-java:${version}'" "${case_dir}/README.md" + grep -Fqx " ${dev_version}" "${case_dir}/README.md" + grep -Fqx "implementation 'com.github:copilot-sdk-java:${dev_version}'" "${case_dir}/README.md" + grep -Fqx "//DEPS com.github:copilot-sdk-java:${version}" "${case_dir}/jbang-example.java" + + if grep -Fq "$old_version" "${case_dir}/README.md" "${case_dir}/jbang-example.java" || + grep -Fq "$old_dev_version" "${case_dir}/README.md"; then + echo "Stale version remained in ${name} test output" >&2 + exit 1 + fi +} + +run_case stable 1.0.8 1.0.9-SNAPSHOT 1.0.9 1.0.10-SNAPSHOT "\${project.version}" +run_case preview 1.0.9-preview.2-01 1.0.10-preview.2-SNAPSHOT 1.0.10-preview.2 1.0.11-preview.2-SNAPSHOT 1.0.9-preview.2-01 diff --git a/java/scripts/update-documentation-versions.sh b/java/scripts/update-documentation-versions.sh new file mode 100755 index 0000000000..d2d23c4ff2 --- /dev/null +++ b/java/scripts/update-documentation-versions.sh @@ -0,0 +1,80 @@ +#!/usr/bin/env bash + +set -euo pipefail + +if [[ $# -ne 4 ]]; then + echo "Usage: $0 " >&2 + exit 2 +fi + +VERSION=$1 +DEV_VERSION=$2 +README=$3 +JBANG_EXAMPLE=$4 +VERSION_FORMAT='[0-9]+\.[0-9]+\.[0-9]+(-(preview|(beta-)?java(-preview)?)\.[0-9]+)?' + +if [[ ! "$VERSION" =~ ^${VERSION_FORMAT}$ ]]; then + echo "Invalid release version: $VERSION" >&2 + exit 2 +fi +if [[ ! "$DEV_VERSION" =~ ^${VERSION_FORMAT}-SNAPSHOT$ ]]; then + echo "Invalid development version: $DEV_VERSION" >&2 + exit 2 +fi +if [[ ! -f "$README" || ! -f "$JBANG_EXAMPLE" ]]; then + echo "README and JBang example files must exist" >&2 + exit 2 +fi + +export VERSION DEV_VERSION + +perl -0 - "$README" <<'PERL' +use strict; +use warnings; + +my ($path) = @ARGV; +open my $input, '<', $path or die "Cannot read $path: $!\n"; +my $content = do { local $/; <$input> }; +close $input or die "Cannot close $path: $!\n"; + +# Match accepted release versions plus numeric suffixes left by the former broken updater. +my $version = qr/[0-9]+\.[0-9]+\.[0-9]+(?:-(?:preview|(?:beta-)?java(?:-preview)?)\.[0-9]+)?(?:-[0-9]+)*/; +my $snapshot_xml = ($content =~ s{$version-SNAPSHOT}{$ENV{DEV_VERSION}}g); +my $snapshot_gradle = ($content =~ s{(copilot-sdk-java:)$version-SNAPSHOT(?![-A-Za-z0-9.])}{$1 . $ENV{DEV_VERSION}}ge); +my $release_xml = ($content =~ s{$version}{$ENV{VERSION}}g); +my $release_gradle = ($content =~ s{(copilot-sdk-java:)$version(?![-A-Za-z0-9.])}{$1 . $ENV{VERSION}}ge); + +die "Expected one release and one snapshot example for both Maven and Gradle in $path\n" + unless $snapshot_xml == 1 && $snapshot_gradle == 1 && $release_xml == 1 && $release_gradle == 1; + +open my $output, '>', $path or die "Cannot write $path: $!\n"; +print {$output} $content; +close $output or die "Cannot close $path: $!\n"; +PERL + +perl -0 - "$JBANG_EXAMPLE" <<'PERL' +use strict; +use warnings; + +my ($path) = @ARGV; +open my $input, '<', $path or die "Cannot read $path: $!\n"; +my $content = do { local $/; <$input> }; +close $input or die "Cannot close $path: $!\n"; + +my $version = qr/[0-9]+\.[0-9]+\.[0-9]+(?:-(?:preview|(?:beta-)?java(?:-preview)?)\.[0-9]+)?(?:-[0-9]+)*/; +my $version_count = ($content =~ s{(copilot-sdk-java:)$version(?![-A-Za-z0-9.])}{$1 . $ENV{VERSION}}ge); +my $placeholder_count = ($content =~ s{copilot-sdk-java:\$\{project\.version\}}{copilot-sdk-java:$ENV{VERSION}}g); + +die "Expected exactly one Copilot SDK dependency in $path\n" + unless $version_count + $placeholder_count == 1; + +open my $output, '>', $path or die "Cannot write $path: $!\n"; +print {$output} $content; +close $output or die "Cannot close $path: $!\n"; +PERL + +grep -Fqx " ${VERSION}" "$README" +grep -Fqx "implementation 'com.github:copilot-sdk-java:${VERSION}'" "$README" +grep -Fqx " ${DEV_VERSION}" "$README" +grep -Fqx "implementation 'com.github:copilot-sdk-java:${DEV_VERSION}'" "$README" +grep -Fqx "//DEPS com.github:copilot-sdk-java:${VERSION}" "$JBANG_EXAMPLE"