diff --git a/.github/actions/setup-default-test-properties/test-properties.json b/.github/actions/setup-default-test-properties/test-properties.json index 91e264f483aa..bbdaffbbd7fe 100644 --- a/.github/actions/setup-default-test-properties/test-properties.json +++ b/.github/actions/setup-default-test-properties/test-properties.json @@ -18,6 +18,8 @@ "SPARK_VERSIONS": ["3"] }, "GoTestProperties": { - "SUPPORTED_VERSIONS": ["1.25"] + "SUPPORTED_VERSIONS": [ + "1.26" + ] } } diff --git a/.github/actions/setup-environment-action/action.yml b/.github/actions/setup-environment-action/action.yml index f4e17cd80d35..9c17bcce624b 100644 --- a/.github/actions/setup-environment-action/action.yml +++ b/.github/actions/setup-environment-action/action.yml @@ -84,5 +84,5 @@ runs: if: ${{ inputs.go-version != '' }} uses: actions/setup-go@v6 with: - go-version: ${{ inputs.go-version == 'default' && '1.25' || inputs.go-version }} # never set patch, to get latest patch releases. + go-version: ${{ inputs.go-version == 'default' && '1.26' || inputs.go-version }} # never set patch, to get latest patch releases. cache-dependency-path: $${{ inputs.disable-cache && '' || 'sdks/go.sum' }} diff --git a/.github/gh-actions-self-hosted-runners/arc/images/Dockerfile b/.github/gh-actions-self-hosted-runners/arc/images/Dockerfile index 8f4a42080c22..3e0f8a4c63ab 100644 --- a/.github/gh-actions-self-hosted-runners/arc/images/Dockerfile +++ b/.github/gh-actions-self-hosted-runners/arc/images/Dockerfile @@ -31,7 +31,7 @@ RUN curl -OL https://nodejs.org/dist/v22.14.0/node-v22.14.0-linux-x64.tar.xz && mv /usr/local/node-v22.14.0-linux-x64 /usr/local/node ENV PATH="${PATH}:/usr/local/node/bin" #Install Go -ARG go_version=1.25.2 +ARG go_version=1.26.1 RUN curl -OL https://go.dev/dl/go${go_version}.linux-amd64.tar.gz && \ tar -C /usr/local -xzf go${go_version}.linux-amd64.tar.gz && \ rm go${go_version}.linux-amd64.tar.gz diff --git a/.github/workflows/build_release_candidate.yml b/.github/workflows/build_release_candidate.yml index 88f7e2207880..120cef1eb644 100644 --- a/.github/workflows/build_release_candidate.yml +++ b/.github/workflows/build_release_candidate.yml @@ -451,7 +451,7 @@ jobs: fi - uses: actions/setup-go@v6 with: - go-version: '1.25' + go-version: '1.26' - name: Import GPG key id: import_gpg uses: crazy-max/ghaction-import-gpg@e89d40939c28e39f97cf32126055eeae86ba74ec diff --git a/CHANGES.md b/CHANGES.md index e7f7283b7ef7..e91da103c30e 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -71,6 +71,7 @@ * Added support for large pipeline options via a file (Python) ([#37370](https://github.com/apache/beam/issues/37370)). * Supported infer schema from dataclass (Python) ([#22085](https://github.com/apache/beam/issues/22085)). Default coder for typehint-ed (or set with_output_type) for non-frozen dataclasses changed to RowCoder. To preserve the old behavior (fast primitive coder), explicitly register the type with FastPrimitiveCoder. +* Updates minimum Go version to 1.26.1 ([#37897](https://github.com/apache/beam/issues/37897)). ## Breaking Changes diff --git a/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy b/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy index d2c8c3245478..b2b1f9e7d65f 100644 --- a/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy +++ b/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy @@ -2321,7 +2321,7 @@ class BeamModulePlugin implements Plugin { // This sets the whole project Go version. // The latest stable Go version can be checked at https://go.dev/dl/ - project.ext.goVersion = "go1.26.0" + project.ext.goVersion = "go1.26.1" // Minor TODO: Figure out if we can pull out the GOCMD env variable after goPrepare script // completion, and avoid this GOBIN substitution. diff --git a/dev-support/docker/Dockerfile b/dev-support/docker/Dockerfile index af8a4afe0bb1..7abfc61789d7 100644 --- a/dev-support/docker/Dockerfile +++ b/dev-support/docker/Dockerfile @@ -74,7 +74,7 @@ RUN pip3 install --break-system-packages distlib==0.3.9 yapf==0.43.0 pytest plug ### # Install Go ### -ENV DOWNLOAD_GO_VERSION=1.25.2 +ENV DOWNLOAD_GO_VERSION=1.26.1 RUN wget https://golang.org/dl/go${DOWNLOAD_GO_VERSION}.linux-amd64.tar.gz && \ tar -C /usr/local -xzf go${DOWNLOAD_GO_VERSION}.linux-amd64.tar.gz ENV GOROOT /usr/local/go diff --git a/playground/infrastructure/cloudbuild/playground_ci_examples.sh b/playground/infrastructure/cloudbuild/playground_ci_examples.sh index aa5c94f7e452..d39e0a696c2a 100755 --- a/playground/infrastructure/cloudbuild/playground_ci_examples.sh +++ b/playground/infrastructure/cloudbuild/playground_ci_examples.sh @@ -84,7 +84,7 @@ export STEP=CI export SDK_CONFIG="$BEAM_ROOT_DIR/playground/sdks.yaml" export BEAM_EXAMPLE_CATEGORIES="$BEAM_ROOT_DIR/playground/categories.yaml" export GRADLE_VERSION=7.5.1 -export GO_VERSION=1.25 +export GO_VERSION=1.26 LogOutput "Installing python java8 and dependencies" apt-get update > /dev/null diff --git a/sdks/go.mod b/sdks/go.mod index 3b255abdd32e..6f1b65e32a2d 100644 --- a/sdks/go.mod +++ b/sdks/go.mod @@ -20,9 +20,9 @@ // directory. module github.com/apache/beam/sdks/v2 -go 1.25.0 +go 1.26.0 -toolchain go1.25.2 +toolchain go1.26.1 require ( cloud.google.com/go/bigquery v1.72.0 diff --git a/sdks/go/pkg/beam/core/runtime/contextreg/contextreg_test.go b/sdks/go/pkg/beam/core/runtime/contextreg/contextreg_test.go index dd0c5fb92c57..3bc23bf3e635 100644 --- a/sdks/go/pkg/beam/core/runtime/contextreg/contextreg_test.go +++ b/sdks/go/pkg/beam/core/runtime/contextreg/contextreg_test.go @@ -73,7 +73,7 @@ func TestPTransformExtractor(t *testing.T) { t.Errorf("extracted annotation %q = %q, want %q", key, got, want) } if got, want := len(ptrans.Annotations), 2; got != want { - t.Errorf("extracted annotation %q = %q, want %q - have %v", key, got, want, ptrans) + t.Errorf("extracted annotation %v = %d, want %d - have %v", key, got, want, ptrans) } } @@ -103,6 +103,6 @@ func TestHintExtractor(t *testing.T) { t.Errorf("extracted annotation %q = %q, want %q", key, got, want) } if got, want := len(env.ResourceHints), 1; got != want { - t.Errorf("extracted annotation %q = %q, want %q - have %v", key, got, want, env) + t.Errorf("extracted annotation %v = %d, want %d - have %v", key, got, want, env) } } diff --git a/sdks/go/pkg/beam/runners/dataflow/dataflow_test.go b/sdks/go/pkg/beam/runners/dataflow/dataflow_test.go index 2e0f28f263d6..fa418ebbe6a0 100644 --- a/sdks/go/pkg/beam/runners/dataflow/dataflow_test.go +++ b/sdks/go/pkg/beam/runners/dataflow/dataflow_test.go @@ -64,7 +64,7 @@ func TestGetJobOptions(t *testing.T) { t.Errorf("getJobOptions().Name = %q, want %q", got, want) } if got, want := len(opts.Experiments), 5; got != want { - t.Errorf("len(getJobOptions().Experiments) = %q, want %q", got, want) + t.Errorf("len(getJobOptions().Experiments) = %d, want %d", got, want) } else { sort.Strings(opts.Experiments) expectedExperiments := []string{"beam_fn_api", "min_cpu_platform=testPlatform", "use_portable_job_submission", "use_runner_v2", "use_unified_worker"} @@ -75,7 +75,7 @@ func TestGetJobOptions(t *testing.T) { } } if got, want := len(opts.DataflowServiceOptions), 2; got != want { - t.Errorf("len(getJobOptions().DataflowServiceOptions) = %q, want %q", got, want) + t.Errorf("len(getJobOptions().DataflowServiceOptions) = %d, want %d", got, want) } else { sort.Strings(opts.DataflowServiceOptions) expectedOptions := []string{"opt1", "opt2"} @@ -92,7 +92,7 @@ func TestGetJobOptions(t *testing.T) { t.Errorf("getJobOptions().Region = %q, want %q", got, want) } if got, want := len(opts.Labels), 2; got != want { - t.Errorf("len(getJobOptions().Labels) = %q, want %q", got, want) + t.Errorf("len(getJobOptions().Labels) = %d, want %d", got, want) } else { if got, want := opts.Labels["label1"], "val1"; got != want { t.Errorf("getJobOptions().Labels[\"label1\"] = %q, want %q", got, want) @@ -134,7 +134,7 @@ func TestGetJobOptions_Streaming(t *testing.T) { t.Errorf("getJobOptions().Name = %q, want %q", got, want) } if got, want := len(opts.Experiments), 7; got != want { - t.Errorf("len(getJobOptions().Experiments) = %q, want %q", got, want) + t.Errorf("len(getJobOptions().Experiments) = %d, want %d", got, want) } else { sort.Strings(opts.Experiments) expectedExperiments := []string{"beam_fn_api", "enable_streaming_engine", "enable_windmill_service", "min_cpu_platform=testPlatform", "use_portable_job_submission", "use_runner_v2", "use_unified_worker"} @@ -145,7 +145,7 @@ func TestGetJobOptions_Streaming(t *testing.T) { } } if got, want := len(opts.DataflowServiceOptions), 2; got != want { - t.Errorf("len(getJobOptions().DataflowServiceOptions) = %q, want %q", got, want) + t.Errorf("len(getJobOptions().DataflowServiceOptions) = %d, want %d", got, want) } else { sort.Strings(opts.DataflowServiceOptions) expectedOptions := []string{"opt1", "opt2"} @@ -162,7 +162,7 @@ func TestGetJobOptions_Streaming(t *testing.T) { t.Errorf("getJobOptions().Region = %q, want %q", got, want) } if got, want := len(opts.Labels), 2; got != want { - t.Errorf("len(getJobOptions().Labels) = %q, want %q", got, want) + t.Errorf("len(getJobOptions().Labels) = %d, want %d", got, want) } else { if got, want := opts.Labels["label1"], "val1"; got != want { t.Errorf("getJobOptions().Labels[\"label1\"] = %q, want %q", got, want) @@ -192,7 +192,7 @@ func TestGetJobOptions_NoExperimentsSet(t *testing.T) { t.Fatalf("getJobOptions() returned error %q, want %q", err, "nil") } if got, want := len(opts.Experiments), 4; got != want { - t.Fatalf("len(getJobOptions().Experiments) = %q, want %q", got, want) + t.Fatalf("len(getJobOptions().Experiments) = %d, want %d", got, want) } sort.Strings(opts.Experiments) expectedExperiments := []string{"beam_fn_api", "use_portable_job_submission", "use_unified_worker", "use_runner_v2"} @@ -216,7 +216,7 @@ func TestGetJobOptions_NoExperimentsSetStreaming(t *testing.T) { t.Fatalf("getJobOptions() returned error %q, want %q", err, "nil") } if got, want := len(opts.Experiments), 6; got != want { - t.Fatalf("len(getJobOptions().Experiments) = %q, want %q", got, want) + t.Fatalf("len(getJobOptions().Experiments) = %d, want %d", got, want) } sort.Strings(opts.Experiments) expectedExperiments := []string{"beam_fn_api", "enable_streaming_engine", "enable_windmill_service", "use_portable_job_submission", "use_unified_worker", "use_runner_v2"} diff --git a/sdks/go/run_with_go_version.sh b/sdks/go/run_with_go_version.sh index dfc8d228e257..26dbca822014 100755 --- a/sdks/go/run_with_go_version.sh +++ b/sdks/go/run_with_go_version.sh @@ -37,7 +37,7 @@ set -e # # This variable is also used as the execution command downscript. # The list of downloadable versions are at https://go.dev/dl/ -GOVERS=go1.25.2 +GOVERS=go1.26.1 if ! command -v go &> /dev/null then