From 467e63a612137c2def23519941a12f9357e131ff Mon Sep 17 00:00:00 2001 From: Aravindh K Date: Mon, 16 Dec 2024 20:12:23 +0000 Subject: [PATCH 01/10] Fix broken link (#4070) * Fix broken link for space.game * Removes reference to the broken link and associated image --------- Co-authored-by: Ivy Gooch --- site/content/en/_index.html | 1 - site/static/images/spacegame.png | Bin 4753 -> 0 bytes 2 files changed, 1 deletion(-) delete mode 100644 site/static/images/spacegame.png diff --git a/site/content/en/_index.html b/site/content/en/_index.html index cd2ccb2e53..8f01e3691d 100644 --- a/site/content/en/_index.html +++ b/site/content/en/_index.html @@ -56,7 +56,6 @@

Companies using Agones

altavr Embark Studios accelbyte - Space Game rolltable Vela Games Netspeak Games diff --git a/site/static/images/spacegame.png b/site/static/images/spacegame.png deleted file mode 100644 index 65222f5cd8fb47be94eaa41adb507e22f6e24e65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4753 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 From f2a5ccd9f6e53fa8b8a721399228deae7ae35fe2 Mon Sep 17 00:00:00 2001 From: Mark Mandel Date: Mon, 16 Dec 2024 18:37:37 -0800 Subject: [PATCH 02/10] Link to Google Cloud Agones Support. (#4071) Adds links to the Agones support landing page on Google Cloud. --- site/content/en/docs/Guides/Best Practices/gke.md | 7 +++++++ site/content/en/docs/Installation/Creating Cluster/gke.md | 2 ++ 2 files changed, 9 insertions(+) diff --git a/site/content/en/docs/Guides/Best Practices/gke.md b/site/content/en/docs/Guides/Best Practices/gke.md index 5ae4abe6a2..5aca923a95 100644 --- a/site/content/en/docs/Guides/Best Practices/gke.md +++ b/site/content/en/docs/Guides/Best Practices/gke.md @@ -58,3 +58,10 @@ For sessions longer than an hour, there are currently two possible approaches to * delete the old, `blue` cluster when the `Fleet` successfully scales down. * (GKE Standard only) Use [node pool blue/green upgrades](https://cloud.google.com/kubernetes-engine/docs/concepts/node-pool-upgrade-strategies#blue-green-upgrade-strategy) + +## Google Cloud Support Package + +We recommend getting official support package for running Agones on Google Cloud. + +Support for Agones on Google Cloud is offered under the +[Google Cloud Premium support package](https://cloud.google.com/kubernetes-engine/docs/how-to/agones-support). diff --git a/site/content/en/docs/Installation/Creating Cluster/gke.md b/site/content/en/docs/Installation/Creating Cluster/gke.md index e5c122a0bd..3e3c7a7f04 100644 --- a/site/content/en/docs/Installation/Creating Cluster/gke.md +++ b/site/content/en/docs/Installation/Creating Cluster/gke.md @@ -338,3 +338,5 @@ gcloud container clusters get-credentials [CLUSTER_NAME] --region=[COMPUTE_REGIO ## Next Steps * Continue to [Install Agones]({{< relref "../Install Agones/_index.md" >}}). +* Have a look at the + [Best practices for running Agones on Google Kubernetes Engine]({{< ref "/docs/Guides/Best Practices/gke.md" >}}). From 87e15a973d868e88e380a329109af66300e701c2 Mon Sep 17 00:00:00 2001 From: Aravindh K Date: Tue, 17 Dec 2024 17:45:52 +0000 Subject: [PATCH 03/10] Upgrade Go to 1.23.4 and update example image tags (#4072) --- build/Makefile | 2 +- build/agones-bot/Dockerfile | 2 +- build/agones-bot/go.mod | 2 +- build/build-image/Dockerfile | 2 +- build/build-sdk-images/go/Dockerfile | 2 +- build/build-sdk-images/restapi/Dockerfile | 2 +- build/e2e-image/Dockerfile | 2 +- build/report/cloudbuild.yaml | 2 +- build/scripts/example-version-checker/go.mod | 2 +- build/scripts/k8s-export-openapi/go.mod | 2 +- build/scripts/previousversion/go.mod | 2 +- .../scripts/site-config-update-version/go.mod | 2 +- examples/allocation-endpoint/Makefile | 2 +- examples/allocation-endpoint/client/go.mod | 2 +- .../allocation-endpoint/server/Dockerfile | 2 +- examples/allocation-endpoint/server/go.mod | 2 +- .../allocation-endpoint/terraform/variable.tf | 2 +- examples/autoscaler-webhook/Dockerfile | 2 +- examples/autoscaler-webhook/Makefile | 2 +- .../autoscaler-service-tls.yaml | 2 +- .../autoscaler-service.yaml | 2 +- examples/autoscaler-webhook/go.mod | 45 ++++----- examples/autoscaler-webhook/go.sum | 94 ++++++++++--------- examples/crd-client/Dockerfile | 2 +- examples/crd-client/Makefile | 2 +- examples/crd-client/create-gs.yaml | 4 +- examples/crd-client/go.mod | 2 +- examples/custom-controller/Dockerfile | 2 +- examples/custom-controller/Makefile | 2 +- examples/custom-controller/deployment.yaml | 2 +- examples/custom-controller/go.mod | 2 +- examples/fleet.yaml | 2 +- examples/gameserver.yaml | 2 +- examples/simple-game-server/Dockerfile | 2 +- .../simple-game-server/Dockerfile.windows | 2 +- examples/simple-game-server/Makefile | 2 +- .../simple-game-server/dev-gameserver.yaml | 2 +- .../simple-game-server/fleet-distributed.yaml | 2 +- examples/simple-game-server/fleet-tcp.yaml | 2 +- examples/simple-game-server/fleet.yaml | 2 +- .../simple-game-server/gameserver-none.yaml | 2 +- .../gameserver-passthrough.yaml | 2 +- .../gameserver-windows.yaml | 2 +- examples/simple-game-server/gameserver.yaml | 2 +- examples/simple-game-server/go.mod | 20 ++-- examples/simple-game-server/go.sum | 50 +++++----- examples/simple-genai-server/Dockerfile | 2 +- examples/simple-genai-server/Makefile | 2 +- .../gameserver_autochat.yaml | 2 +- .../gameserver_manualchat.yaml | 2 +- .../gameserver_npcchat.yaml | 2 +- examples/supertuxkart/Dockerfile | 2 +- examples/supertuxkart/Makefile | 2 +- examples/supertuxkart/fleet.yaml | 2 +- examples/supertuxkart/gameserver.yaml | 2 +- examples/supertuxkart/go.mod | 2 +- examples/xonotic/Dockerfile | 2 +- examples/xonotic/Dockerfile.windows | 2 +- examples/xonotic/Makefile | 2 +- examples/xonotic/fleet.yaml | 2 +- examples/xonotic/gameserver.yaml | 2 +- examples/xonotic/go.mod | 2 +- go.mod | 4 +- .../agones/templates/tests/test-runner.yaml | 4 +- pkg/util/webhooks/webhooks_test.go | 2 +- site/config.toml | 2 +- site/go.mod | 4 +- site/go.sum | 6 +- test/e2e/examples_test.go | 4 +- test/e2e/fleetautoscaler_test.go | 2 +- test/e2e/framework/framework.go | 2 +- test/e2e/gameserver_test.go | 2 +- test/load/allocation/fleet.yaml | 2 +- .../performance-test-fleet-template.yaml | 2 +- test/load/allocation/scenario-fleet.yaml | 2 +- test/sdk/go/Dockerfile | 2 +- test/upgrade/Dockerfile | 2 +- test/upgrade/go.mod | 2 +- 78 files changed, 182 insertions(+), 189 deletions(-) diff --git a/build/Makefile b/build/Makefile index 9bae434fab..8c72fe8950 100644 --- a/build/Makefile +++ b/build/Makefile @@ -64,7 +64,7 @@ KIND_PROFILE ?= agones KIND_CONTAINER_NAME=$(KIND_PROFILE)-control-plane # Game Server image to use while doing end-to-end tests -GS_TEST_IMAGE ?= us-docker.pkg.dev/agones-images/examples/simple-game-server:0.35 +GS_TEST_IMAGE ?= us-docker.pkg.dev/agones-images/examples/simple-game-server:0.36 # Enable all beta feature gates. Keep in sync with `true` (beta) entries in pkg/util/runtime/features.go:featureDefaults BETA_FEATURE_GATES ?= "AutopilotPassthroughPort=true&CountsAndLists=true&DisableResyncOnSDKServer=true&GKEAutopilotExtendedDurationPods=true" diff --git a/build/agones-bot/Dockerfile b/build/agones-bot/Dockerfile index b51890e8a7..71c0eb10a6 100644 --- a/build/agones-bot/Dockerfile +++ b/build/agones-bot/Dockerfile @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -FROM golang:1.22 AS build-env +FROM golang:1.23 AS build-env COPY . /go-src WORKDIR /go-src RUN CGO_ENABLED=0 go build -o /go-app . diff --git a/build/agones-bot/go.mod b/build/agones-bot/go.mod index 6666c20073..8d89faf439 100644 --- a/build/agones-bot/go.mod +++ b/build/agones-bot/go.mod @@ -14,7 +14,7 @@ module github-bot -go 1.22 +go 1.23 require ( github.com/GoogleCloudPlatform/cloud-build-notifiers/lib/notifiers v0.0.0-20210219212036-163c92a64b27 diff --git a/build/build-image/Dockerfile b/build/build-image/Dockerfile index c9a1f11cd4..08311431de 100644 --- a/build/build-image/Dockerfile +++ b/build/build-image/Dockerfile @@ -28,7 +28,7 @@ RUN gem install fpm && \ # install go WORKDIR /usr/local -ENV GO_VERSION=1.22.6 +ENV GO_VERSION=1.23.4 ENV GOPATH /go ENV GO111MODULE=on RUN wget -q https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz && \ diff --git a/build/build-sdk-images/go/Dockerfile b/build/build-sdk-images/go/Dockerfile index 8f0eb1016d..cc24df169d 100644 --- a/build/build-sdk-images/go/Dockerfile +++ b/build/build-sdk-images/go/Dockerfile @@ -20,7 +20,7 @@ RUN apt-get --allow-releaseinfo-change update && \ # install go WORKDIR /usr/local -ENV GO_VERSION=1.22.6 +ENV GO_VERSION=1.23.4 ENV GO111MODULE=on ENV GOPATH /go RUN wget -q https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz && \ diff --git a/build/build-sdk-images/restapi/Dockerfile b/build/build-sdk-images/restapi/Dockerfile index 6b74002182..ec0700b45e 100644 --- a/build/build-sdk-images/restapi/Dockerfile +++ b/build/build-sdk-images/restapi/Dockerfile @@ -20,7 +20,7 @@ RUN apt-get --allow-releaseinfo-change update && \ # install go WORKDIR /usr/local -ENV GO_VERSION=1.22.6 +ENV GO_VERSION=1.23.4 ENV GO111MODULE=on ENV GOPATH /go RUN wget -q https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz && \ diff --git a/build/e2e-image/Dockerfile b/build/e2e-image/Dockerfile index 047382e41d..c73b233ec2 100644 --- a/build/e2e-image/Dockerfile +++ b/build/e2e-image/Dockerfile @@ -6,7 +6,7 @@ RUN apt-get update && \ # install go WORKDIR /usr/local -ENV GO_VERSION=1.22.6 +ENV GO_VERSION=1.23.4 ENV GOPATH /go ENV GO111MODULE=on RUN wget -q https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz && \ diff --git a/build/report/cloudbuild.yaml b/build/report/cloudbuild.yaml index 89e40fa59b..ebdc12f7d4 100644 --- a/build/report/cloudbuild.yaml +++ b/build/report/cloudbuild.yaml @@ -19,7 +19,7 @@ steps: id: build-report script: | #!/usr/bin/env bash - export GO_VERSION=1.22.6 + export GO_VERSION=1.23.4 cd /usr/local curl -SsL https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz | tar -xzf- export PATH=/usr/local/go/bin:${PATH} diff --git a/build/scripts/example-version-checker/go.mod b/build/scripts/example-version-checker/go.mod index 43a5b6c254..adf4acc0c9 100644 --- a/build/scripts/example-version-checker/go.mod +++ b/build/scripts/example-version-checker/go.mod @@ -1,6 +1,6 @@ module github.com/agones/agones/build/scripts/example-version-checker -go 1.21 +go 1.23 require github.com/go-git/go-git/v5 v5.12.0 diff --git a/build/scripts/k8s-export-openapi/go.mod b/build/scripts/k8s-export-openapi/go.mod index 83b54b9e9a..5d016d3d8e 100644 --- a/build/scripts/k8s-export-openapi/go.mod +++ b/build/scripts/k8s-export-openapi/go.mod @@ -1,5 +1,5 @@ module github.com/agones/agones/build/scripts/k8s-export-openapi -go 1.22 +go 1.23 require github.com/itchyny/json2yaml v0.1.4 diff --git a/build/scripts/previousversion/go.mod b/build/scripts/previousversion/go.mod index faa850d4d6..b136e14291 100644 --- a/build/scripts/previousversion/go.mod +++ b/build/scripts/previousversion/go.mod @@ -1,5 +1,5 @@ module github.com/agones/agones/build/scripts/previousversion -go 1.22 +go 1.23 require github.com/blang/semver/v4 v4.0.0 diff --git a/build/scripts/site-config-update-version/go.mod b/build/scripts/site-config-update-version/go.mod index df625029e6..65b976db96 100644 --- a/build/scripts/site-config-update-version/go.mod +++ b/build/scripts/site-config-update-version/go.mod @@ -1,5 +1,5 @@ module github.com/agones/agones/build/scripts/site-config-update-version -go 1.22 +go 1.23 require github.com/pelletier/go-toml v1.9.5 diff --git a/examples/allocation-endpoint/Makefile b/examples/allocation-endpoint/Makefile index 11cd82079f..178dea5105 100644 --- a/examples/allocation-endpoint/Makefile +++ b/examples/allocation-endpoint/Makefile @@ -30,7 +30,7 @@ PROD_REPO ?= us-docker.pkg.dev/agones-images/examples mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST))) project_path := $(dir $(mkfile_path)) root_path = $(realpath $(project_path)/../..) -version := 0.10 +version := 0.11 ifeq ($(REPOSITORY),) server_tag := allocation-endpoint-proxy:$(version) else diff --git a/examples/allocation-endpoint/client/go.mod b/examples/allocation-endpoint/client/go.mod index 130a01f7cb..77458bb1da 100644 --- a/examples/allocation-endpoint/client/go.mod +++ b/examples/allocation-endpoint/client/go.mod @@ -1,6 +1,6 @@ module agones.dev/agones/examples/allocation-endpoint/client -go 1.22 +go 1.23 require ( agones.dev/agones v1.35.0 diff --git a/examples/allocation-endpoint/server/Dockerfile b/examples/allocation-endpoint/server/Dockerfile index 9eab717bf7..2b8362426a 100644 --- a/examples/allocation-endpoint/server/Dockerfile +++ b/examples/allocation-endpoint/server/Dockerfile @@ -14,7 +14,7 @@ # syntax=docker/dockerfile:1 -FROM golang:1.22-alpine +FROM golang:1.23-alpine WORKDIR /app diff --git a/examples/allocation-endpoint/server/go.mod b/examples/allocation-endpoint/server/go.mod index 90cce5a8a9..97cad67cac 100644 --- a/examples/allocation-endpoint/server/go.mod +++ b/examples/allocation-endpoint/server/go.mod @@ -1,6 +1,6 @@ module agones.dev/agones/examples/allocation-endpoint/server -go 1.22 +go 1.23 require ( agones.dev/agones v1.35.0 diff --git a/examples/allocation-endpoint/terraform/variable.tf b/examples/allocation-endpoint/terraform/variable.tf index 5d61a7040f..b95b7b7464 100644 --- a/examples/allocation-endpoint/terraform/variable.tf +++ b/examples/allocation-endpoint/terraform/variable.tf @@ -20,7 +20,7 @@ variable "project_id" { variable "ae_proxy_image" { type = string description = "The docker image of the allocation proxy." - default = "us-docker.pkg.dev/agones-images/examples/allocation-endpoint-proxy:0.10" + default = "us-docker.pkg.dev/agones-images/examples/allocation-endpoint-proxy:0.11" } variable "region" { diff --git a/examples/autoscaler-webhook/Dockerfile b/examples/autoscaler-webhook/Dockerfile index f355da626b..2826fa0df8 100644 --- a/examples/autoscaler-webhook/Dockerfile +++ b/examples/autoscaler-webhook/Dockerfile @@ -13,7 +13,7 @@ # limitations under the License. # Gather dependencies and build the executable -FROM golang:1.22.6 as builder +FROM golang:1.23.4 as builder WORKDIR /go/src COPY . agones.dev/agones diff --git a/examples/autoscaler-webhook/Makefile b/examples/autoscaler-webhook/Makefile index 9b1a5800b9..146b9e0df1 100644 --- a/examples/autoscaler-webhook/Makefile +++ b/examples/autoscaler-webhook/Makefile @@ -29,7 +29,7 @@ PROD_REPO ?= us-docker.pkg.dev/agones-images/examples mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST))) project_path := $(dir $(mkfile_path)) root_path := $(realpath $(project_path)/../..) -version := 0.15 +version := 0.16 ifeq ($(REPOSITORY),) autoscaler_webhook_tag := autoscaler-webhook:$(version) else diff --git a/examples/autoscaler-webhook/autoscaler-service-tls.yaml b/examples/autoscaler-webhook/autoscaler-service-tls.yaml index 124e635f1d..0128a45e82 100644 --- a/examples/autoscaler-webhook/autoscaler-service-tls.yaml +++ b/examples/autoscaler-webhook/autoscaler-service-tls.yaml @@ -54,7 +54,7 @@ spec: secretName: autoscalersecret containers: - name: autoscaler-webhook - image: us-docker.pkg.dev/agones-images/examples/autoscaler-webhook:0.15 + image: us-docker.pkg.dev/agones-images/examples/autoscaler-webhook:0.16 imagePullPolicy: Always volumeMounts: - mountPath: /home/service/certs diff --git a/examples/autoscaler-webhook/autoscaler-service.yaml b/examples/autoscaler-webhook/autoscaler-service.yaml index d5d4a808f0..abf3ae08eb 100644 --- a/examples/autoscaler-webhook/autoscaler-service.yaml +++ b/examples/autoscaler-webhook/autoscaler-service.yaml @@ -50,7 +50,7 @@ spec: # serviceAccount: autoscaler-webhook containers: - name: autoscaler-webhook - image: us-docker.pkg.dev/agones-images/examples/autoscaler-webhook:0.15 + image: us-docker.pkg.dev/agones-images/examples/autoscaler-webhook:0.16 imagePullPolicy: Always ports: - name: autoscaler diff --git a/examples/autoscaler-webhook/go.mod b/examples/autoscaler-webhook/go.mod index d7088b88b6..f2320e70a0 100644 --- a/examples/autoscaler-webhook/go.mod +++ b/examples/autoscaler-webhook/go.mod @@ -1,6 +1,6 @@ module autoscaler-webhook -go 1.22 +go 1.23 require agones.dev/agones v1.35.0 @@ -8,17 +8,18 @@ require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/emicklei/go-restful/v3 v3.11.0 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect - github.com/go-logr/logr v1.3.0 // indirect - github.com/go-openapi/jsonpointer v0.19.6 // indirect + github.com/fxamacker/cbor/v2 v2.7.0 // indirect + github.com/go-logr/logr v1.4.2 // indirect + github.com/go-openapi/jsonpointer v0.21.0 // indirect github.com/go-openapi/jsonreference v0.20.2 // indirect github.com/go-openapi/spec v0.19.5 // indirect - github.com/go-openapi/swag v0.22.3 // indirect + github.com/go-openapi/swag v0.23.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/google/gnostic-models v0.6.8 // indirect github.com/google/gofuzz v1.2.0 // indirect - github.com/google/uuid v1.3.1 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/imdario/mergo v0.3.6 // indirect github.com/josharian/intern v1.0.0 // indirect @@ -41,31 +42,31 @@ require ( github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/viper v1.17.0 // indirect github.com/subosito/gotenv v1.6.0 // indirect + github.com/x448/float16 v0.8.4 // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect - golang.org/x/net v0.23.0 // indirect - golang.org/x/oauth2 v0.12.0 // indirect - golang.org/x/sys v0.18.0 // indirect - golang.org/x/term v0.18.0 // indirect - golang.org/x/text v0.14.0 // indirect + golang.org/x/net v0.28.0 // indirect + golang.org/x/oauth2 v0.21.0 // indirect + golang.org/x/sys v0.23.0 // indirect + golang.org/x/term v0.23.0 // indirect + golang.org/x/text v0.17.0 // indirect golang.org/x/time v0.3.0 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect - google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b // indirect - google.golang.org/grpc v1.59.0 // indirect - google.golang.org/protobuf v1.33.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 // indirect + google.golang.org/grpc v1.65.0 // indirect + google.golang.org/protobuf v1.34.2 // indirect gopkg.in/fsnotify.v1 v1.4.7 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/api v0.29.7 // indirect - k8s.io/apimachinery v0.29.7 // indirect - k8s.io/client-go v0.29.7 // indirect - k8s.io/klog/v2 v2.110.1 // indirect - k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect - k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect + k8s.io/api v0.31.0 // indirect + k8s.io/apimachinery v0.31.0 // indirect + k8s.io/client-go v0.31.0 // indirect + k8s.io/klog/v2 v2.130.1 // indirect + k8s.io/kube-openapi v0.0.0-20240903163716-9e1beecbcb38 // indirect + k8s.io/utils v0.0.0-20240921022957-49e7df575cb6 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect sigs.k8s.io/yaml v1.4.0 // indirect diff --git a/examples/autoscaler-webhook/go.sum b/examples/autoscaler-webhook/go.sum index 4cb072a924..6ef23b8f86 100644 --- a/examples/autoscaler-webhook/go.sum +++ b/examples/autoscaler-webhook/go.sum @@ -67,15 +67,18 @@ github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0X github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= +github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= -github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= +github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= +github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= @@ -83,13 +86,12 @@ github.com/go-openapi/spec v0.19.5 h1:Xm0Ao53uqnk9QE/LlYV5DEU09UAgpliA85QoT9LzqP github.com/go-openapi/spec v0.19.5/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk= github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= +github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo= -github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -150,13 +152,13 @@ github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= -github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0 h1:RtRsiaGvWxcwd8y3BiRZxsylPT8hLWZ5SPcfI+3IDNk= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0/go.mod h1:TzP6duP4Py2pHLVPPQp42aoYI92+PCrVotyR5e8Vqlk= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0/go.mod h1:P+Lt/0by1T8bfcF3z737NnSbmxQAppXMRziHUxPOC8k= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= @@ -209,8 +211,8 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1: github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= -github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/sagikazarmark/locafero v0.3.0 h1:zT7VEGWC2DTflmccN/5T1etyKvxSxpHsjb9cJvm4SvQ= github.com/sagikazarmark/locafero v0.3.0/go.mod h1:w+v7UsPNFwzF1cHuOajOOzoq4U7v/ig1mpRjqV+Bu1U= github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= @@ -237,10 +239,13 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= +github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= +github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -329,8 +334,8 @@ golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= -golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE= +golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -340,8 +345,8 @@ golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4= -golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4= +golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs= +golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -388,11 +393,11 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= -golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM= +golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= -golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= +golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU= +golang.org/x/term v0.23.0/go.mod h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -401,8 +406,8 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc= +golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -488,7 +493,6 @@ google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -526,12 +530,10 @@ google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a h1:fwgW9j3vHirt4ObdHoYNwuO24BEZjSzbh+zPaNWoiY8= -google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:EMfReVxb80Dq1hhioy0sOsY9jCE46YDgHlJ7fWVUWRE= -google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b h1:CIC2YMXmIhYw6evmhPxBKJ4fmLbOFtXQN/GV3XOZR8k= -google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:IBQ646DjkDkvUIsVq/cc03FUFQ9wbZu7yE396YcL870= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b h1:ZlWIi1wSK56/8hn4QcBp/j9M7Gt3U/3hZw3mC7vDICo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:swOH3j0KzcDDgGUWr+SNpyTen5YrXjS3eyPzFYKc6lc= +google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157 h1:7whR9kGa5LUwFtpLm2ArCEejtnxlGeLbAyjFY8sGNFw= +google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157/go.mod h1:99sLkeliLXfdj2J75X3Ho+rrVCaJze0uwN7zDDkjPVU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 h1:BwIjyKYGsK9dMCBOorzRri8MQwmi7mT9rGHsCEinZkA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -548,8 +550,8 @@ google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= -google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= +google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= +google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -560,8 +562,8 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= @@ -588,18 +590,18 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.29.7 h1:Q2/thp7YYESgy0MGzxT9RvA/6doLJHBXSFH8GGLxSbc= -k8s.io/api v0.29.7/go.mod h1:mPimdbyuIjwoLtBEVIGVUYb4BKOE+44XHt/n4IqKsLA= -k8s.io/apimachinery v0.29.7 h1:ICXzya58Q7hyEEfnTrbmdfX1n1schSepX2KUfC2/ykc= -k8s.io/apimachinery v0.29.7/go.mod h1:i3FJVwhvSp/6n8Fl4K97PJEP8C+MM+aoDq4+ZJBf70Y= -k8s.io/client-go v0.29.7 h1:vTtiFrGBKlcBhxaeZC4eDrqui1e108nsTyue/KU63IY= -k8s.io/client-go v0.29.7/go.mod h1:69BvVqdRozgR/9TP45u/oO0tfrdbP+I8RqrcCJQshzg= -k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0= -k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo= -k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780= -k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= -k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI= -k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/api v0.31.0 h1:b9LiSjR2ym/SzTOlfMHm1tr7/21aD7fSkqgD/CVJBCo= +k8s.io/api v0.31.0/go.mod h1:0YiFF+JfFxMM6+1hQei8FY8M7s1Mth+z/q7eF1aJkTE= +k8s.io/apimachinery v0.31.0 h1:m9jOiSr3FoSSL5WO9bjm1n6B9KROYYgNZOb4tyZ1lBc= +k8s.io/apimachinery v0.31.0/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= +k8s.io/client-go v0.31.0 h1:QqEJzNjbN2Yv1H79SsS+SWnXkBgVu4Pj3CJQgbx0gI8= +k8s.io/client-go v0.31.0/go.mod h1:Y9wvC76g4fLjmU0BA+rV+h2cncoadjvjjkkIGoTLcGU= +k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= +k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= +k8s.io/kube-openapi v0.0.0-20240903163716-9e1beecbcb38 h1:1dWzkmJrrprYvjGwh9kEUxmcUV/CtNU8QM7h1FLWQOo= +k8s.io/kube-openapi v0.0.0-20240903163716-9e1beecbcb38/go.mod h1:coRQXBK9NxO98XUv3ZD6AK3xzHCxV6+b7lrquKwaKzA= +k8s.io/utils v0.0.0-20240921022957-49e7df575cb6 h1:MDF6h2H/h4tbzmtIKTuctcwZmY0tY9mD9fNT47QO6HI= +k8s.io/utils v0.0.0-20240921022957-49e7df575cb6/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/examples/crd-client/Dockerfile b/examples/crd-client/Dockerfile index 1cda4e9d92..89fb765979 100644 --- a/examples/crd-client/Dockerfile +++ b/examples/crd-client/Dockerfile @@ -13,7 +13,7 @@ # limitations under the License. # Gather dependencies and build the executable -FROM golang:1.22.6 as builder +FROM golang:1.23.4 as builder WORKDIR /go/src/crd-client COPY . . diff --git a/examples/crd-client/Makefile b/examples/crd-client/Makefile index c8328b7dbd..da5f41fc97 100644 --- a/examples/crd-client/Makefile +++ b/examples/crd-client/Makefile @@ -25,7 +25,7 @@ REPOSITORY ?= PROD_REPO ?= us-docker.pkg.dev/agones-images/examples -version := 0.18 +version := 0.19 ifeq ($(REPOSITORY),) server_tag := crd-client:$(version) else diff --git a/examples/crd-client/create-gs.yaml b/examples/crd-client/create-gs.yaml index 30c9dc7008..6ed0883aaf 100644 --- a/examples/crd-client/create-gs.yaml +++ b/examples/crd-client/create-gs.yaml @@ -34,9 +34,9 @@ spec: cpu: 500m ephemeral-storage: 1Gi memory: 2Gi - image: us-docker.pkg.dev/agones-images/examples/crd-client:0.18 + image: us-docker.pkg.dev/agones-images/examples/crd-client:0.19 imagePullPolicy: Always env: - name: GAMESERVER_IMAGE - value: us-docker.pkg.dev/agones-images/examples/simple-game-server:0.35 + value: us-docker.pkg.dev/agones-images/examples/simple-game-server:0.36 restartPolicy: Never diff --git a/examples/crd-client/go.mod b/examples/crd-client/go.mod index 3ef533269b..c513975eab 100644 --- a/examples/crd-client/go.mod +++ b/examples/crd-client/go.mod @@ -1,6 +1,6 @@ module crd-client -go 1.22 +go 1.23 require ( agones.dev/agones v1.35.0 diff --git a/examples/custom-controller/Dockerfile b/examples/custom-controller/Dockerfile index 35e96a853f..710e8c76a9 100644 --- a/examples/custom-controller/Dockerfile +++ b/examples/custom-controller/Dockerfile @@ -13,7 +13,7 @@ # limitations under the License. # Gather dependencies and build the executable -FROM golang:1.22.6 as builder +FROM golang:1.23.4 as builder WORKDIR /go/src/custom-controller COPY . . diff --git a/examples/custom-controller/Makefile b/examples/custom-controller/Makefile index 276a1bdca1..7100ec608d 100644 --- a/examples/custom-controller/Makefile +++ b/examples/custom-controller/Makefile @@ -25,7 +25,7 @@ REPOSITORY ?= PROD_REPO ?= us-docker.pkg.dev/agones-images/examples -version := 0.6 +version := 0.7 ifeq ($(REPOSITORY),) server_tag := custom-controller:$(version) else diff --git a/examples/custom-controller/deployment.yaml b/examples/custom-controller/deployment.yaml index f4a3d579a8..928d2a504d 100644 --- a/examples/custom-controller/deployment.yaml +++ b/examples/custom-controller/deployment.yaml @@ -64,5 +64,5 @@ spec: serviceAccountName: custom-controller-sa containers: - name: custom-controller - image: us-docker.pkg.dev/agones-images/examples/custom-controller:0.6 + image: us-docker.pkg.dev/agones-images/examples/custom-controller:0.7 imagePullPolicy: Always diff --git a/examples/custom-controller/go.mod b/examples/custom-controller/go.mod index 1f1ef8581a..5fdffa3b8e 100644 --- a/examples/custom-controller/go.mod +++ b/examples/custom-controller/go.mod @@ -1,6 +1,6 @@ module custom-controller -go 1.22 +go 1.23 require ( agones.dev/agones v1.38.0 diff --git a/examples/fleet.yaml b/examples/fleet.yaml index 9f8b43a7d8..7ecfb1307d 100644 --- a/examples/fleet.yaml +++ b/examples/fleet.yaml @@ -110,4 +110,4 @@ spec: spec: containers: - name: simple-game-server - image: us-docker.pkg.dev/agones-images/examples/simple-game-server:0.35 + image: us-docker.pkg.dev/agones-images/examples/simple-game-server:0.36 diff --git a/examples/gameserver.yaml b/examples/gameserver.yaml index 7cc4b3f903..eed7c01a36 100644 --- a/examples/gameserver.yaml +++ b/examples/gameserver.yaml @@ -122,7 +122,7 @@ spec: spec: containers: - name: simple-game-server - image: us-docker.pkg.dev/agones-images/examples/simple-game-server:0.35 + image: us-docker.pkg.dev/agones-images/examples/simple-game-server:0.36 imagePullPolicy: Always # nodeSelector is a label that can be used to tell Kubernetes which host # OS to use. For Windows game servers uncomment the nodeSelector diff --git a/examples/simple-game-server/Dockerfile b/examples/simple-game-server/Dockerfile index 4def9e5f7d..5701c9337d 100644 --- a/examples/simple-game-server/Dockerfile +++ b/examples/simple-game-server/Dockerfile @@ -13,7 +13,7 @@ # limitations under the License. # build -FROM golang:1.22.6 as builder +FROM golang:1.23.4 as builder WORKDIR /go/src COPY . agones.dev/agones diff --git a/examples/simple-game-server/Dockerfile.windows b/examples/simple-game-server/Dockerfile.windows index 6ddda2ed83..77fbaf8342 100644 --- a/examples/simple-game-server/Dockerfile.windows +++ b/examples/simple-game-server/Dockerfile.windows @@ -20,7 +20,7 @@ # Build Stage ARG WINDOWS_VERSION=ltsc2019 -FROM --platform=linux/amd64 golang:1.22.6 as builder +FROM --platform=linux/amd64 golang:1.23.4 as builder WORKDIR /go/src COPY . agones.dev/agones diff --git a/examples/simple-game-server/Makefile b/examples/simple-game-server/Makefile index 2715915d10..3b38719077 100644 --- a/examples/simple-game-server/Makefile +++ b/examples/simple-game-server/Makefile @@ -39,7 +39,7 @@ WITH_ARM64 ?= 1 mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST))) project_path := $(dir $(mkfile_path)) -version := 0.35 +version := 0.36 ifeq ($(REPOSITORY),) server_tag := simple-game-server:$(version) else diff --git a/examples/simple-game-server/dev-gameserver.yaml b/examples/simple-game-server/dev-gameserver.yaml index 482bc539d5..56bfd7bc9e 100644 --- a/examples/simple-game-server/dev-gameserver.yaml +++ b/examples/simple-game-server/dev-gameserver.yaml @@ -31,4 +31,4 @@ spec: spec: containers: - name: simple-game-server - image: us-docker.pkg.dev/agones-images/examples/simple-game-server:0.35 + image: us-docker.pkg.dev/agones-images/examples/simple-game-server:0.36 diff --git a/examples/simple-game-server/fleet-distributed.yaml b/examples/simple-game-server/fleet-distributed.yaml index 772b480dca..6888ef17ff 100644 --- a/examples/simple-game-server/fleet-distributed.yaml +++ b/examples/simple-game-server/fleet-distributed.yaml @@ -32,7 +32,7 @@ spec: spec: containers: - name: simple-game-server - image: us-docker.pkg.dev/agones-images/examples/simple-game-server:0.35 + image: us-docker.pkg.dev/agones-images/examples/simple-game-server:0.36 resources: requests: memory: 64Mi diff --git a/examples/simple-game-server/fleet-tcp.yaml b/examples/simple-game-server/fleet-tcp.yaml index eb06f8d60f..3971c38f5e 100644 --- a/examples/simple-game-server/fleet-tcp.yaml +++ b/examples/simple-game-server/fleet-tcp.yaml @@ -28,7 +28,7 @@ spec: spec: containers: - name: simple-game-server - image: us-docker.pkg.dev/agones-images/examples/simple-game-server:0.35 + image: us-docker.pkg.dev/agones-images/examples/simple-game-server:0.36 env: # Disables the UDP listener (Enabled by default) - name: UDP diff --git a/examples/simple-game-server/fleet.yaml b/examples/simple-game-server/fleet.yaml index 97ffadadde..d578b5f573 100644 --- a/examples/simple-game-server/fleet.yaml +++ b/examples/simple-game-server/fleet.yaml @@ -27,7 +27,7 @@ spec: spec: containers: - name: simple-game-server - image: us-docker.pkg.dev/agones-images/examples/simple-game-server:0.35 + image: us-docker.pkg.dev/agones-images/examples/simple-game-server:0.36 resources: requests: memory: 64Mi diff --git a/examples/simple-game-server/gameserver-none.yaml b/examples/simple-game-server/gameserver-none.yaml index c5a3d7418b..7d130b9022 100644 --- a/examples/simple-game-server/gameserver-none.yaml +++ b/examples/simple-game-server/gameserver-none.yaml @@ -29,7 +29,7 @@ spec: spec: containers: - name: simple-game-server - image: us-docker.pkg.dev/agones-images/examples/simple-game-server:0.35 + image: us-docker.pkg.dev/agones-images/examples/simple-game-server:0.36 resources: requests: memory: 64Mi diff --git a/examples/simple-game-server/gameserver-passthrough.yaml b/examples/simple-game-server/gameserver-passthrough.yaml index ab6a3283e2..d4a6d74204 100644 --- a/examples/simple-game-server/gameserver-passthrough.yaml +++ b/examples/simple-game-server/gameserver-passthrough.yaml @@ -24,7 +24,7 @@ spec: spec: containers: - name: simple-game-server - image: us-docker.pkg.dev/agones-images/examples/simple-game-server:0.35 + image: us-docker.pkg.dev/agones-images/examples/simple-game-server:0.36 env: - name: PASSTHROUGH value: 'TRUE' diff --git a/examples/simple-game-server/gameserver-windows.yaml b/examples/simple-game-server/gameserver-windows.yaml index a7c5073d76..bd2ddb810d 100644 --- a/examples/simple-game-server/gameserver-windows.yaml +++ b/examples/simple-game-server/gameserver-windows.yaml @@ -25,7 +25,7 @@ spec: spec: containers: - name: simple-game-server - image: us-docker.pkg.dev/agones-images/examples/simple-game-server:0.35 + image: us-docker.pkg.dev/agones-images/examples/simple-game-server:0.36 resources: requests: memory: 64Mi diff --git a/examples/simple-game-server/gameserver.yaml b/examples/simple-game-server/gameserver.yaml index a865068149..4ab7476895 100644 --- a/examples/simple-game-server/gameserver.yaml +++ b/examples/simple-game-server/gameserver.yaml @@ -25,7 +25,7 @@ spec: spec: containers: - name: simple-game-server - image: us-docker.pkg.dev/agones-images/examples/simple-game-server:0.35 + image: us-docker.pkg.dev/agones-images/examples/simple-game-server:0.36 resources: requests: memory: 64Mi diff --git a/examples/simple-game-server/go.mod b/examples/simple-game-server/go.mod index 1fbff2018d..b6c6654dc6 100644 --- a/examples/simple-game-server/go.mod +++ b/examples/simple-game-server/go.mod @@ -1,21 +1,19 @@ module agones.dev/agones/examples/simple-game-server -go 1.22 +go 1.23 require agones.dev/agones v1.36.0 require ( - github.com/golang/protobuf v1.5.4 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect github.com/pkg/errors v0.9.1 // indirect - golang.org/x/net v0.23.0 // indirect - golang.org/x/sys v0.18.0 // indirect - golang.org/x/text v0.14.0 // indirect - google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b // indirect - google.golang.org/grpc v1.59.0 // indirect - google.golang.org/protobuf v1.33.0 // indirect + golang.org/x/net v0.28.0 // indirect + golang.org/x/sys v0.23.0 // indirect + golang.org/x/text v0.17.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 // indirect + google.golang.org/grpc v1.65.0 // indirect + google.golang.org/protobuf v1.34.2 // indirect ) replace agones.dev/agones => ../../ diff --git a/examples/simple-game-server/go.sum b/examples/simple-game-server/go.sum index 33c7876889..5e15b5e702 100644 --- a/examples/simple-game-server/go.sum +++ b/examples/simple-game-server/go.sum @@ -1,34 +1,28 @@ -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo= -github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= -github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= -github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0 h1:RtRsiaGvWxcwd8y3BiRZxsylPT8hLWZ5SPcfI+3IDNk= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0/go.mod h1:TzP6duP4Py2pHLVPPQp42aoYI92+PCrVotyR5e8Vqlk= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0/go.mod h1:P+Lt/0by1T8bfcF3z737NnSbmxQAppXMRziHUxPOC8k= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= -golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= -golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= -golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b h1:+YaDE2r2OG8t/z5qmsh7Y+XXwCbvadxxZ0YY6mTdrVA= -google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:CgAqfJo+Xmu0GwA0411Ht3OU3OntXwsGmrmjI8ioGXI= -google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b h1:CIC2YMXmIhYw6evmhPxBKJ4fmLbOFtXQN/GV3XOZR8k= -google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:IBQ646DjkDkvUIsVq/cc03FUFQ9wbZu7yE396YcL870= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b h1:ZlWIi1wSK56/8hn4QcBp/j9M7Gt3U/3hZw3mC7vDICo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:swOH3j0KzcDDgGUWr+SNpyTen5YrXjS3eyPzFYKc6lc= -google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= -google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE= +golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg= +golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM= +golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc= +golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157 h1:7whR9kGa5LUwFtpLm2ArCEejtnxlGeLbAyjFY8sGNFw= +google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157/go.mod h1:99sLkeliLXfdj2J75X3Ho+rrVCaJze0uwN7zDDkjPVU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 h1:BwIjyKYGsK9dMCBOorzRri8MQwmi7mT9rGHsCEinZkA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= +google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= +google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/examples/simple-genai-server/Dockerfile b/examples/simple-genai-server/Dockerfile index aa424523f0..51e0eca931 100644 --- a/examples/simple-genai-server/Dockerfile +++ b/examples/simple-genai-server/Dockerfile @@ -13,7 +13,7 @@ # limitations under the License. # build -FROM golang:1.22.6 as builder +FROM golang:1.23.4 as builder WORKDIR /go/src COPY . agones.dev/agones diff --git a/examples/simple-genai-server/Makefile b/examples/simple-genai-server/Makefile index d58511049c..2753f83528 100644 --- a/examples/simple-genai-server/Makefile +++ b/examples/simple-genai-server/Makefile @@ -27,7 +27,7 @@ PROD_REPO ?= us-docker.pkg.dev/agones-images/examples mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST))) project_path := $(dir $(mkfile_path)) -version := 0.4 +version := 0.5 ifeq ($(REPOSITORY),) server_tag := simple-genai-game-server:$(version) else diff --git a/examples/simple-genai-server/gameserver_autochat.yaml b/examples/simple-genai-server/gameserver_autochat.yaml index 98706847df..ae7f6b297b 100644 --- a/examples/simple-genai-server/gameserver_autochat.yaml +++ b/examples/simple-genai-server/gameserver_autochat.yaml @@ -26,7 +26,7 @@ spec: spec: containers: - name: simple-genai-game-server - image: us-docker.pkg.dev/agones-images/examples/simple-genai-game-server:0.4 + image: us-docker.pkg.dev/agones-images/examples/simple-genai-game-server:0.5 # imagePullPolicy: Always # add for development env: - name: GEN_AI_ENDPOINT diff --git a/examples/simple-genai-server/gameserver_manualchat.yaml b/examples/simple-genai-server/gameserver_manualchat.yaml index b5f29e3785..7a40bad9c2 100644 --- a/examples/simple-genai-server/gameserver_manualchat.yaml +++ b/examples/simple-genai-server/gameserver_manualchat.yaml @@ -26,7 +26,7 @@ spec: spec: containers: - name: simple-genai-game-server - image: us-docker.pkg.dev/agones-images/examples/simple-genai-game-server:0.4 + image: us-docker.pkg.dev/agones-images/examples/simple-genai-game-server:0.5 # imagePullPolicy: Always # add for development env: - name: GEN_AI_ENDPOINT diff --git a/examples/simple-genai-server/gameserver_npcchat.yaml b/examples/simple-genai-server/gameserver_npcchat.yaml index d11ca3a0bc..97c4de03de 100644 --- a/examples/simple-genai-server/gameserver_npcchat.yaml +++ b/examples/simple-genai-server/gameserver_npcchat.yaml @@ -21,7 +21,7 @@ spec: spec: containers: - name: simple-genai-game-server - image: us-docker.pkg.dev/agones-images/examples/simple-genai-game-server:0.4 + image: us-docker.pkg.dev/agones-images/examples/simple-genai-game-server:0.5 # imagePullPolicy: Always # add for development env: - name: GEN_AI_ENDPOINT diff --git a/examples/supertuxkart/Dockerfile b/examples/supertuxkart/Dockerfile index 957157df95..4eee1b2236 100644 --- a/examples/supertuxkart/Dockerfile +++ b/examples/supertuxkart/Dockerfile @@ -13,7 +13,7 @@ # limitations under the License. # build go -FROM golang:1.22.6 as go-builder +FROM golang:1.23.4 as go-builder WORKDIR /go/src/supertuxkart COPY main.go go.mod ./ diff --git a/examples/supertuxkart/Makefile b/examples/supertuxkart/Makefile index c6d8b6cf65..e5b7b7dfe6 100644 --- a/examples/supertuxkart/Makefile +++ b/examples/supertuxkart/Makefile @@ -28,7 +28,7 @@ PROD_REPO ?= us-docker.pkg.dev/agones-images/examples mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST))) project_path := $(dir $(mkfile_path)) -version := 0.15 +version := 0.16 ifeq ($(REPOSITORY),) image_tag := supertuxkart-example:$(version) else diff --git a/examples/supertuxkart/fleet.yaml b/examples/supertuxkart/fleet.yaml index 5a59dec53d..432792c9fd 100644 --- a/examples/supertuxkart/fleet.yaml +++ b/examples/supertuxkart/fleet.yaml @@ -32,4 +32,4 @@ spec: spec: containers: - name: supertuxkart - image: us-docker.pkg.dev/agones-images/examples/supertuxkart-example:0.15 + image: us-docker.pkg.dev/agones-images/examples/supertuxkart-example:0.16 diff --git a/examples/supertuxkart/gameserver.yaml b/examples/supertuxkart/gameserver.yaml index b16b5e2705..b96e16f91b 100644 --- a/examples/supertuxkart/gameserver.yaml +++ b/examples/supertuxkart/gameserver.yaml @@ -24,7 +24,7 @@ spec: spec: containers: - name: supertuxkart - image: us-docker.pkg.dev/agones-images/examples/supertuxkart-example:0.15 + image: us-docker.pkg.dev/agones-images/examples/supertuxkart-example:0.16 # imagePullPolicy: Always # add for development env: - name: ENABLE_PLAYER_TRACKING diff --git a/examples/supertuxkart/go.mod b/examples/supertuxkart/go.mod index 7ff172c2d7..7ccec28d32 100644 --- a/examples/supertuxkart/go.mod +++ b/examples/supertuxkart/go.mod @@ -1,6 +1,6 @@ module supertuxkart -go 1.22 +go 1.23 require ( agones.dev/agones v1.35.0 diff --git a/examples/xonotic/Dockerfile b/examples/xonotic/Dockerfile index 3952afa151..238ec0d924 100644 --- a/examples/xonotic/Dockerfile +++ b/examples/xonotic/Dockerfile @@ -13,7 +13,7 @@ # limitations under the License. # build -FROM golang:1.22.6 as builder +FROM golang:1.23.4 as builder RUN apt-get update && apt-get install -y unzip curl diff --git a/examples/xonotic/Dockerfile.windows b/examples/xonotic/Dockerfile.windows index f75aa4bd00..bde3122103 100644 --- a/examples/xonotic/Dockerfile.windows +++ b/examples/xonotic/Dockerfile.windows @@ -37,7 +37,7 @@ ARG WINDOWS_VERSION=ltsc2019 # Build Stage -FROM --platform=linux/amd64 golang:1.22.6 as base +FROM --platform=linux/amd64 golang:1.23.4 as base RUN apt-get update && apt-get install -y unzip curl diff --git a/examples/xonotic/Makefile b/examples/xonotic/Makefile index 646a4bcb72..0c78fb4c88 100644 --- a/examples/xonotic/Makefile +++ b/examples/xonotic/Makefile @@ -37,7 +37,7 @@ WINDOWS_DOCKER_PUSH_ARGS = --push mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST))) project_path := $(dir $(mkfile_path)) -version := 2.1 +version := 2.2 ifeq ($(REPOSITORY),) server_tag := xonotic-example:$(version) else diff --git a/examples/xonotic/fleet.yaml b/examples/xonotic/fleet.yaml index 44c6f12303..7135224205 100644 --- a/examples/xonotic/fleet.yaml +++ b/examples/xonotic/fleet.yaml @@ -35,7 +35,7 @@ spec: spec: containers: - name: xonotic - image: us-docker.pkg.dev/agones-images/examples/xonotic-example:2.1 + image: us-docker.pkg.dev/agones-images/examples/xonotic-example:2.2 resources: requests: memory: 700Mi diff --git a/examples/xonotic/gameserver.yaml b/examples/xonotic/gameserver.yaml index 13e2ddeb7e..c51523332a 100644 --- a/examples/xonotic/gameserver.yaml +++ b/examples/xonotic/gameserver.yaml @@ -24,7 +24,7 @@ spec: spec: containers: - name: xonotic - image: us-docker.pkg.dev/agones-images/examples/xonotic-example:2.1 + image: us-docker.pkg.dev/agones-images/examples/xonotic-example:2.2 resources: requests: memory: 700Mi diff --git a/examples/xonotic/go.mod b/examples/xonotic/go.mod index d29fd6c927..0d859c4671 100644 --- a/examples/xonotic/go.mod +++ b/examples/xonotic/go.mod @@ -1,6 +1,6 @@ module xonotic -go 1.22 +go 1.23 require agones.dev/agones v1.35.0 diff --git a/go.mod b/go.mod index c46a278381..c50b480608 100644 --- a/go.mod +++ b/go.mod @@ -1,8 +1,6 @@ module agones.dev/agones -go 1.22.0 - -toolchain go1.22.6 +go 1.23 require ( cloud.google.com/go/cloudbuild v1.13.0 diff --git a/install/helm/agones/templates/tests/test-runner.yaml b/install/helm/agones/templates/tests/test-runner.yaml index df337775b9..87be532b81 100644 --- a/install/helm/agones/templates/tests/test-runner.yaml +++ b/install/helm/agones/templates/tests/test-runner.yaml @@ -25,11 +25,11 @@ spec: serviceAccountName: agones-controller containers: - name: create-gameserver - image: us-docker.pkg.dev/agones-images/examples/crd-client:0.18 + image: us-docker.pkg.dev/agones-images/examples/crd-client:0.19 imagePullPolicy: Always env: - name: GAMESERVER_IMAGE - value: "us-docker.pkg.dev/agones-images/examples/simple-game-server:0.35" + value: "us-docker.pkg.dev/agones-images/examples/simple-game-server:0.36" - name: IS_HELM_TEST value: "true" - name: GAMESERVERS_NAMESPACE diff --git a/pkg/util/webhooks/webhooks_test.go b/pkg/util/webhooks/webhooks_test.go index 6e9224d167..1f236fba4e 100644 --- a/pkg/util/webhooks/webhooks_test.go +++ b/pkg/util/webhooks/webhooks_test.go @@ -164,7 +164,7 @@ func TestWebHookFleetValidationHandler(t *testing.T) { "template": { "spec": { "containers": [{ - "image": "us-docker.pkg.dev/agones-images/examples/simple-game-server:0.35", + "image": "us-docker.pkg.dev/agones-images/examples/simple-game-server:0.36", "name": false }] } diff --git a/site/config.toml b/site/config.toml index ea54432966..f7c552e0ea 100644 --- a/site/config.toml +++ b/site/config.toml @@ -100,7 +100,7 @@ dev_eks_example_cluster_version = "1.31" dev_minikube_example_cluster_version = "1.30.4" # example tag -example_image_tag = "us-docker.pkg.dev/agones-images/examples/simple-game-server:0.35" +example_image_tag = "us-docker.pkg.dev/agones-images/examples/simple-game-server:0.36" # Enable syntax highlighting and copy buttons on code blocks with Prism prism_syntax_highlighting = true diff --git a/site/go.mod b/site/go.mod index 4ab9f2b561..bf64935772 100644 --- a/site/go.mod +++ b/site/go.mod @@ -1,10 +1,10 @@ module github.com/agones/agones/site -go 1.22 +go 1.23 require gopkg.in/yaml.v2 v2.4.0 require ( - github.com/google/docsy v0.10.0 // indirect + github.com/google/docsy v0.11.0 // indirect github.com/google/docsy/dependencies v0.7.2 // indirect ) diff --git a/site/go.sum b/site/go.sum index 3c9faaf83e..799bf1b824 100644 --- a/site/go.sum +++ b/site/go.sum @@ -1,7 +1,7 @@ github.com/FortAwesome/Font-Awesome v0.0.0-20230327165841-0698449d50f2/go.mod h1:IUgezN/MFpCDIlFezw3L8j83oeiIuYoj28Miwr/KUYo= -github.com/FortAwesome/Font-Awesome v0.0.0-20240402185447-c0f460dca7f7/go.mod h1:IUgezN/MFpCDIlFezw3L8j83oeiIuYoj28Miwr/KUYo= -github.com/google/docsy v0.10.0 h1:6tMDacPwAyRWNCfvsn/9qGOZDQ8b0aRzjRZvnZPY5dg= -github.com/google/docsy v0.10.0/go.mod h1:c0nIAqmRTOuJ01F85U/wJPQtc3Zj9N58Kea9bOT2AJc= +github.com/FortAwesome/Font-Awesome v0.0.0-20240716171331-37eff7fa00de/go.mod h1:IUgezN/MFpCDIlFezw3L8j83oeiIuYoj28Miwr/KUYo= +github.com/google/docsy v0.11.0 h1:QnV40cc28QwS++kP9qINtrIv4hlASruhC/K3FqkHAmM= +github.com/google/docsy v0.11.0/go.mod h1:hGGW0OjNuG5ZbH5JRtALY3yvN8ybbEP/v2iaK4bwOUI= github.com/google/docsy/dependencies v0.7.2 h1:+t5ufoADQAj4XneFphz4A+UU0ICAxmNaRHVWtMYXPSI= github.com/google/docsy/dependencies v0.7.2/go.mod h1:gihhs5gmgeO+wuoay4FwOzob+jYJVyQbNaQOh788lD4= github.com/twbs/bootstrap v5.2.3+incompatible/go.mod h1:fZTSrkpSf0/HkL0IIJzvVspTt1r9zuf7XlZau8kpcY0= diff --git a/test/e2e/examples_test.go b/test/e2e/examples_test.go index 31d5ae6b23..d8a372d1aa 100644 --- a/test/e2e/examples_test.go +++ b/test/e2e/examples_test.go @@ -45,7 +45,7 @@ func TestSuperTuxKartGameServerReady(t *testing.T) { Containers: []corev1.Container{ { Name: "supertuxkart", - Image: "us-docker.pkg.dev/agones-images/examples/supertuxkart-example:0.15", + Image: "us-docker.pkg.dev/agones-images/examples/supertuxkart-example:0.16", Env: []corev1.EnvVar{ { Name: "ENABLE_PLAYER_TRACKING", @@ -203,7 +203,7 @@ func TestXonoticGameServerReady(t *testing.T) { Containers: []corev1.Container{ { Name: "xonotic", - Image: "us-docker.pkg.dev/agones-images/examples/xonotic-example:2.1", + Image: "us-docker.pkg.dev/agones-images/examples/xonotic-example:2.2", Resources: corev1.ResourceRequirements{ Requests: corev1.ResourceList{ corev1.ResourceMemory: resource.MustParse("700Mi"), diff --git a/test/e2e/fleetautoscaler_test.go b/test/e2e/fleetautoscaler_test.go index 3733854e90..1306bc4c6c 100644 --- a/test/e2e/fleetautoscaler_test.go +++ b/test/e2e/fleetautoscaler_test.go @@ -645,7 +645,7 @@ func defaultAutoscalerWebhook(namespace string) (*corev1.Pod, *corev1.Service) { }, Spec: corev1.PodSpec{ Containers: []corev1.Container{{Name: "webhook", - Image: "us-docker.pkg.dev/agones-images/examples/autoscaler-webhook:0.15", + Image: "us-docker.pkg.dev/agones-images/examples/autoscaler-webhook:0.16", ImagePullPolicy: corev1.PullAlways, Ports: []corev1.ContainerPort{{ ContainerPort: 8000, diff --git a/test/e2e/framework/framework.go b/test/e2e/framework/framework.go index cf2e8cc465..d06259b823 100644 --- a/test/e2e/framework/framework.go +++ b/test/e2e/framework/framework.go @@ -150,7 +150,7 @@ func NewFromFlags() (*Framework, error) { } viper.SetDefault(kubeconfigFlag, filepath.Join(usr.HomeDir, ".kube", "config")) - viper.SetDefault(gsimageFlag, "us-docker.pkg.dev/agones-images/examples/simple-game-server:0.35") + viper.SetDefault(gsimageFlag, "us-docker.pkg.dev/agones-images/examples/simple-game-server:0.36") viper.SetDefault(pullSecretFlag, "") viper.SetDefault(stressTestLevelFlag, 0) viper.SetDefault(perfOutputDirFlag, "") diff --git a/test/e2e/gameserver_test.go b/test/e2e/gameserver_test.go index 42111ec6c9..4e04e5e528 100644 --- a/test/e2e/gameserver_test.go +++ b/test/e2e/gameserver_test.go @@ -1133,7 +1133,7 @@ spec: preferredDuringSchedulingIgnoredDuringExecution: ERROR containers: - name: simple-game-server - image: us-docker.pkg.dev/agones-images/examples/simple-game-server:0.35 + image: us-docker.pkg.dev/agones-images/examples/simple-game-server:0.36 ` err := os.WriteFile("/tmp/invalid.yaml", []byte(gsYaml), 0o644) require.NoError(t, err) diff --git a/test/load/allocation/fleet.yaml b/test/load/allocation/fleet.yaml index 7a01fb99da..dbb267acb8 100644 --- a/test/load/allocation/fleet.yaml +++ b/test/load/allocation/fleet.yaml @@ -33,7 +33,7 @@ spec: spec: containers: - args: [-automaticShutdownDelaySec=600] - image: us-docker.pkg.dev/agones-images/examples/simple-game-server:0.35 + image: us-docker.pkg.dev/agones-images/examples/simple-game-server:0.36 name: simple-game-server resources: limits: diff --git a/test/load/allocation/performance-test-fleet-template.yaml b/test/load/allocation/performance-test-fleet-template.yaml index b3c6785a22..85b3118e92 100644 --- a/test/load/allocation/performance-test-fleet-template.yaml +++ b/test/load/allocation/performance-test-fleet-template.yaml @@ -33,7 +33,7 @@ spec: spec: containers: - args: [-automaticShutdownDelaySec=AUTOMATIC_SHUTDOWN_DELAY_SEC_REPLACEMENT] - image: us-docker.pkg.dev/agones-images/examples/simple-game-server:0.35 + image: us-docker.pkg.dev/agones-images/examples/simple-game-server:0.36 name: simple-game-server resources: limits: diff --git a/test/load/allocation/scenario-fleet.yaml b/test/load/allocation/scenario-fleet.yaml index 251b281802..c52f5331a6 100644 --- a/test/load/allocation/scenario-fleet.yaml +++ b/test/load/allocation/scenario-fleet.yaml @@ -38,7 +38,7 @@ spec: value: 'true' containers: - name: simple-game-server - image: us-docker.pkg.dev/agones-images/examples/simple-game-server:0.35 + image: us-docker.pkg.dev/agones-images/examples/simple-game-server:0.36 args: [-automaticShutdownDelaySec=60, -readyIterations=10] resources: limits: diff --git a/test/sdk/go/Dockerfile b/test/sdk/go/Dockerfile index e0059fcdd8..d69dc15fda 100644 --- a/test/sdk/go/Dockerfile +++ b/test/sdk/go/Dockerfile @@ -13,7 +13,7 @@ # limitations under the License. # Build the Go image from source -FROM golang:1.22.6 AS build-stage +FROM golang:1.23.4 AS build-stage WORKDIR /agones.dev diff --git a/test/upgrade/Dockerfile b/test/upgrade/Dockerfile index 722a4a153f..add0e0e600 100644 --- a/test/upgrade/Dockerfile +++ b/test/upgrade/Dockerfile @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -FROM golang:1.22.6-alpine AS builder +FROM golang:1.23.4-alpine AS builder # install curl RUN apk update && \ diff --git a/test/upgrade/go.mod b/test/upgrade/go.mod index c933172c94..2a723f22f7 100644 --- a/test/upgrade/go.mod +++ b/test/upgrade/go.mod @@ -1,6 +1,6 @@ module agones.dev/agones/test/upgrade/testContainer -go 1.22.6 +go 1.23 require ( agones.dev/agones v1.45.0 From 8166704922062cd53b33c8cb8c58454a700efc2a Mon Sep 17 00:00:00 2001 From: Vicente Ferrara <47219931+vicentefb@users.noreply.github.com> Date: Wed, 18 Dec 2024 08:59:17 -0800 Subject: [PATCH 04/10] Removed reflector metric usage (#4056) * removed reflector metric usage * remove dashboard * removed doc references * reverted vendor code changes --- build/grafana/dashboard-goclient-caches.yaml | 574 ------------------- pkg/metrics/kubernetes_client.go | 1 - site/content/en/docs/Guides/metrics.md | 7 - 3 files changed, 582 deletions(-) delete mode 100644 build/grafana/dashboard-goclient-caches.yaml diff --git a/build/grafana/dashboard-goclient-caches.yaml b/build/grafana/dashboard-goclient-caches.yaml deleted file mode 100644 index 0f668610d5..0000000000 --- a/build/grafana/dashboard-goclient-caches.yaml +++ /dev/null @@ -1,574 +0,0 @@ ---- -# Copyright 2019 Google LLC All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# 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, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# configs map used by grafana -apiVersion: v1 -kind: ConfigMap -metadata: - name: agones-goclient-caches - namespace: metrics - labels: - grafana_dashboard: '1' -data: - dashboard-agones-goclient-caches.json: |- - { - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": "-- Grafana --", - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "type": "dashboard" - } - ] - }, - "editable": true, - "gnetId": null, - "graphTooltip": 0, - "id": 7, - "links": [], - "panels": [ - { - "cacheTimeout": null, - "colorBackground": false, - "colorValue": false, - "colors": [ - "#299c46", - "rgba(237, 129, 40, 0.89)", - "#d44a3a" - ], - "datasource": null, - "format": "none", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, - "gridPos": { - "h": 9, - "w": 4, - "x": 0, - "y": 0 - }, - "id": 4, - "interval": null, - "links": [], - "mappingType": 1, - "mappingTypes": [ - { - "$$hashKey": "object:5575", - "name": "value to text", - "value": 1 - }, - { - "$$hashKey": "object:5576", - "name": "range to text", - "value": 2 - } - ], - "maxDataPoints": 100, - "nullPointMode": "connected", - "nullText": null, - "postfix": "", - "postfixFontSize": "50%", - "prefix": "", - "prefixFontSize": "50%", - "rangeMaps": [ - { - "from": "null", - "text": "N/A", - "to": "null" - } - ], - "sparkline": { - "fillColor": "rgba(31, 118, 189, 0.18)", - "full": false, - "lineColor": "rgb(31, 120, 193)", - "show": false - }, - "tableColumn": "", - "targets": [ - { - "$$hashKey": "object:5432", - "expr": "agones_k8s_client_cache_last_resource_version", - "format": "time_series", - "instant": true, - "intervalFactor": 1, - "refId": "A" - } - ], - "thresholds": "", - "title": "Last resource version", - "type": "singlestat", - "valueFontSize": "80%", - "valueMaps": [ - { - "$$hashKey": "object:5578", - "op": "=", - "text": "N/A", - "value": "null" - } - ], - "valueName": "avg" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": null, - "fill": 1, - "gridPos": { - "h": 9, - "w": 10, - "x": 4, - "y": 0 - }, - "id": 8, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": true, - "hideZero": true, - "max": true, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "$$hashKey": "object:6208", - "expr": "sum(rate(agones_k8s_client_cache_list_items_sum[5m]) / rate(agones_k8s_client_cache_list_items_count[5m]))", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "list items", - "refId": "A" - }, - { - "$$hashKey": "object:6270", - "expr": "sum(rate(agones_k8s_client_cache_watch_events_sum[5m]) / rate(agones_k8s_client_cache_watch_events_count[5m]))", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "watch events", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Cache items rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:6309", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:6310", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": null, - "fill": 1, - "gridPos": { - "h": 9, - "w": 10, - "x": 14, - "y": 0 - }, - "id": 9, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": true, - "hideZero": true, - "max": true, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "$$hashKey": "object:6208", - "expr": "sum(agones_k8s_client_cache_list_items_sum / agones_k8s_client_cache_list_items_count)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "list items", - "refId": "A" - }, - { - "$$hashKey": "object:6270", - "expr": "sum(agones_k8s_client_cache_watch_events_sum / agones_k8s_client_cache_watch_events_count)", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "watch events", - "refId": "B" - }, - { - "$$hashKey": "object:6551", - "expr": "", - "format": "time_series", - "intervalFactor": 1, - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Cache avg items per operations", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:6309", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:6310", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": null, - "fill": 1, - "gridPos": { - "h": 9, - "w": 14, - "x": 0, - "y": 9 - }, - "id": 6, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "$$hashKey": "object:5637", - "expr": "sum(rate(agones_k8s_client_cache_list_duration_seconds_sum[5m]) / rate(agones_k8s_client_cache_list_duration_seconds_count[5m]))", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "list", - "refId": "A" - }, - { - "$$hashKey": "object:5785", - "expr": "sum(rate(agones_k8s_client_cache_watch_duration_seconds_sum[5m]) / rate(agones_k8s_client_cache_watch_duration_seconds_count[5m]))", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "watch", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Avg List/Watch requests duration", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:5813", - "format": "s", - "label": null, - "logBase": 10, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:5814", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": null, - "fill": 1, - "gridPos": { - "h": 9, - "w": 10, - "x": 14, - "y": 9 - }, - "id": 2, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": true, - "min": false, - "rightSide": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "sum(rate(agones_k8s_client_cache_list_total[1m]))", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "list", - "refId": "A" - }, - { - "expr": "sum(rate(agones_k8s_client_cache_watches_total[1m]))", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "watch", - "refId": "B" - }, - { - "expr": "sum(rate(agones_k8s_client_cache_short_watches_total[1m]))", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "short watch", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Caches operations rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ops", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "refresh": "10s", - "schemaVersion": 16, - "style": "dark", - "tags": [ - "controller", - "agones", - "client-go" - ], - "templating": { - "list": [] - }, - "time": { - "from": "now-30m", - "to": "now" - }, - "timepicker": { - "refresh_intervals": [ - "5s", - "10s", - "30s", - "1m", - "5m", - "15m", - "30m", - "1h", - "2h", - "1d" - ], - "time_options": [ - "5m", - "15m", - "1h", - "6h", - "12h", - "24h", - "2d", - "7d", - "30d" - ] - }, - "timezone": "", - "title": "Agones Controller go-client caches", - "uid": "IcQY6i_iz", - "version": 6 - } diff --git a/pkg/metrics/kubernetes_client.go b/pkg/metrics/kubernetes_client.go index 4a5591dd1c..149f8fed6f 100644 --- a/pkg/metrics/kubernetes_client.go +++ b/pkg/metrics/kubernetes_client.go @@ -196,7 +196,6 @@ func (c *clientGoMetricAdapter) Register() { RequestLatency: c, RequestResult: c, }) - cache.SetReflectorMetricsProvider(c) workqueue.SetProvider(c) } diff --git a/site/content/en/docs/Guides/metrics.md b/site/content/en/docs/Guides/metrics.md index 3fcd799730..feadda52c8 100644 --- a/site/content/en/docs/Guides/metrics.md +++ b/site/content/en/docs/Guides/metrics.md @@ -68,11 +68,6 @@ Follow the [Google Cloud Monitoring installation steps](#google-cloud-monitoring | agones_gameserver_state_duration | The distribution of gameserver state duration in seconds. Note: this metric could have some missing samples by design. Do not use the `_total` counter as the real value for state changes. | histogram | | agones_k8s_client_http_request_total | The total of HTTP requests to the Kubernetes API by status code | counter | | agones_k8s_client_http_request_duration_seconds | The distribution of HTTP requests latencies to the Kubernetes API by status code | histogram | -| agones_k8s_client_cache_list_total | The total number of list operations for client-go caches | counter | -| agones_k8s_client_cache_list_duration_seconds | Duration of a Kubernetes list API call in seconds | histogram | -| agones_k8s_client_cache_list_items | Count of items in a list from the Kubernetes API | histogram | -| agones_k8s_client_cache_watches_total | The total number of watch operations for client-go caches | counter | -| agones_k8s_client_cache_last_resource_version | Last resource version from the Kubernetes API | gauge | | agones_k8s_client_workqueue_depth | Current depth of the work queue | gauge | | agones_k8s_client_workqueue_latency_seconds | How long an item stays in the work queue | histogram | | agones_k8s_client_workqueue_items_total | Total number of items added to the work queue | counter | @@ -110,8 +105,6 @@ We provide a set of useful [Grafana](https://grafana.com/) dashboards to monitor - {{< ghlink href="/build/grafana/dashboard-goclient-requests.yaml" branch="main" >}}Agones Controller go-client requests{{< /ghlink >}} displays Agones Controller Kubernetes API consumption. -- {{< ghlink href="/build/grafana/dashboard-goclient-caches.yaml" branch="main" >}}Agones Controller go-client caches{{< /ghlink >}} displays Agones Controller Kubernetes Watches/Lists operations used. - - {{< ghlink href="/build/grafana/dashboard-goclient-workqueues.yaml" branch="main" >}}Agones Controller go-client workqueues{{< /ghlink >}} displays Agones Controller workqueue processing time and rates. - {{< ghlink href="/build/grafana/dashboard-apiserver-requests.yaml" branch="main" >}}Agones Controller API Server requests{{< /ghlink >}} displays your current API server request rate, errors rate and request latencies with optional CustomResourceDefinition filtering by Types: fleets, gameserversets, gameservers, gameserverallocations. From 146fc317d8b739fd67218cacb16b5e72bc2422f5 Mon Sep 17 00:00:00 2001 From: igooch Date: Thu, 2 Jan 2025 16:00:14 -0800 Subject: [PATCH 05/10] Unblocks Agones release PR by waiting for either the Agones dev version or release version (#4078) * Unblocks Agones release PR by waiting for either the Agones dev version or release version * Fixes broken link --- .../en/docs/Guides/Client SDKs/rest.md | 32 +++++++++---------- test/upgrade/main.go | 8 +++-- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/site/content/en/docs/Guides/Client SDKs/rest.md b/site/content/en/docs/Guides/Client SDKs/rest.md index a706602f13..e7eddca35c 100644 --- a/site/content/en/docs/Guides/Client SDKs/rest.md +++ b/site/content/en/docs/Guides/Client SDKs/rest.md @@ -46,7 +46,7 @@ Generally the REST interface gets used if gRPC isn't well supported for a given {{< alert title="Warning" color="warning">}} The SDK Server sidecar process may startup after your game server binary. So your REST SDK API calls should -contain some retry logic to take this into account. +contain some retry logic to take this into account. {{< /alert >}} ## Generating clients @@ -62,9 +62,9 @@ docker run --rm -v ${PWD}:/local swaggerapi/swagger-codegen-cli generate -i /loc The same could be run for `alpha.swagger.json` and `beta.swagger.json` as required. -You can read more about OpenAPI/Swagger code generation in their [Command Line Tool Documentation](https://swagger.io/docs/open-source-tools/swagger-codegen/) +You can read more about OpenAPI/Swagger code generation in their [Command Line Tool Documentation](https://swagger.io/docs/open-source-tools/swagger-codegen/codegen-v3/about/) -## Reference +## Reference ### Lifecycle Management @@ -112,10 +112,10 @@ curl -d '{"seconds": "5"}' -H "Content-Type: application/json" -X POST http://lo #### Allocate With some matchmakers and game matching strategies, it can be important for game servers to mark themselves as `Allocated`. -For those scenarios, this SDK functionality exists. +For those scenarios, this SDK functionality exists. {{< alert title="Note" color="info">}} -Using a [GameServerAllocation]({{< ref "/docs/Reference/gameserverallocation.md" >}}) is preferred in all other scenarios, +Using a [GameServerAllocation]({{< ref "/docs/Reference/gameserverallocation.md" >}}) is preferred in all other scenarios, as it gives Agones control over how packed `GameServers` are scheduled within a cluster, whereas with `Allocate()` you relinquish control to an external service which likely doesn't have as much information as Agones. {{< /alert >}} @@ -140,7 +140,7 @@ Call when the GameServer session is over and it's time to shut down curl -d "{}" -H "Content-Type: application/json" -X POST http://localhost:${AGONES_SDK_HTTP_PORT}/shutdown ``` -### Configuration Retrieval +### Configuration Retrieval #### GameServer @@ -292,7 +292,7 @@ curl -H "Content-Type: application/json" -X GET http://localhost:${AGONES_SDK_HT Response: ```json -{"name":"players", "capacity":"100", "values":["player0", "player1", "player2"]} +{"name":"players", "capacity":"100", "values":["player0", "player1", "player2"]} ``` ##### Beta: UpdateList @@ -310,7 +310,7 @@ Response: ##### Beta: AddListValue This function adds a new value to a list with the key `players` and returns the list with this addition. -###### Example +###### Example ```bash curl -d '{"value": "player9"}' -H "Content-Type: application/json" -X POST http://localhost:${AGONES_SDK_HTTP_PORT}/v1beta1/lists/players:addValue @@ -323,8 +323,8 @@ Response: ##### Beta: RemoveListValue This function removes a value from the list with the key `players` and returns updated list. - -###### Example + +###### Example ```bash curl -d '{"value": "player3"}' -H "Content-Type: application/json" -X POST http://localhost:${AGONES_SDK_HTTP_PORT}/v1beta1/lists/players:removeValue @@ -341,10 +341,10 @@ Response: #### Alpha: PlayerConnect -This function increases the SDK’s stored player count by one, and appends this playerID to +This function increases the SDK’s stored player count by one, and appends this playerID to `GameServer.Status.Players.IDs`. - -##### Example + +##### Example ```bash curl -d '{"playerID": "uzh7i"}' -H "Content-Type: application/json" -X POST http://localhost:${AGONES_SDK_HTTP_PORT}/alpha/player/connect @@ -354,10 +354,10 @@ Response: ```json {"bool":true} ``` - + #### Alpha: PlayerDisconnect -This function decreases the SDK’s stored player count by one, and removes the playerID from +This function decreases the SDK’s stored player count by one, and removes the playerID from [`GameServer.Status.Players.IDs`][playerstatus]. ##### Example @@ -399,7 +399,7 @@ Response: #### Alpha: GetPlayerCount -This function retrieves the current player count. +This function retrieves the current player count. This is always accurate from what has been set through this SDK, even if the value has yet to be updated on the GameServer status resource. ##### Example diff --git a/test/upgrade/main.go b/test/upgrade/main.go index 17104a1eff..4ae7bcadac 100644 --- a/test/upgrade/main.go +++ b/test/upgrade/main.go @@ -354,14 +354,18 @@ func checkHelmStatus(agonesVersion string) string { log.Fatal("Could not Unmarshal", err) } - // Remove the commit sha from the DevVersion i.e. from 1.46.0-dev-7168dd3 to 1.46.0-dev + // Remove the commit sha from the DevVersion i.e. from 1.46.0-dev-7168dd3 to 1.46.0-dev or 1.46.0 + // for the case of this test running during a new Agones version release PR. + agonesRelease := "" if agonesVersion == DevVersion { r := regexp.MustCompile(`1\.\d+\.\d+-dev`) agonesVersion = r.FindString(DevVersion) + r = regexp.MustCompile(`1\.\d+\.\d`) + agonesRelease = r.FindString(agonesVersion) } for _, status := range helmStatus { - if status.AppVersion == agonesVersion { + if (status.AppVersion == agonesVersion) || (status.AppVersion == agonesRelease) { return status.Status } } From f04d81968908573c3e3a4733fd9cde6aa88d8fa7 Mon Sep 17 00:00:00 2001 From: Aravindh K Date: Fri, 3 Jan 2025 17:15:24 +0000 Subject: [PATCH 06/10] Release v1.46.0 (#4077) * Release Agones v1.46.0: Go v1.23.4, custom labels, list deletion, in-place upgrades, and more * Fix broken link * fixes * regenerate full changelog to include recent hotfix --------- Co-authored-by: igooch --- CHANGELOG.md | 38 +++++ install/helm/agones/Chart.yaml | 4 +- install/helm/agones/values.yaml | 2 +- install/yaml/install.yaml | 74 ++++----- sdks/csharp/sdk/AgonesSDK.nuspec | 2 +- sdks/csharp/sdk/csharp-sdk.csproj | 2 +- sdks/nodejs/package-lock.json | 4 +- sdks/nodejs/package.json | 2 +- sdks/rust/Cargo.toml | 2 +- sdks/unity/package.json | 2 +- site/config.toml | 4 +- site/content/en/blog/releases/1.45.0.md | 6 +- site/content/en/blog/releases/1.46.0.md | 56 +++++++ .../docs/Installation/Install Agones/helm.md | 146 ------------------ site/content/en/docs/Installation/_index.md | 4 +- .../content/en/docs/Installation/upgrading.md | 2 - site/layouts/partials/navbar.html | 2 +- 17 files changed, 149 insertions(+), 203 deletions(-) create mode 100644 site/content/en/blog/releases/1.46.0.md diff --git a/CHANGELOG.md b/CHANGELOG.md index cfbee0538e..1c697f3d96 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,43 @@ # Changelog +## [v1.46.0](https://github.com/googleforgames/agones/tree/v1.46.0) (2025-01-02) + +[Full Changelog](https://github.com/googleforgames/agones/compare/v1.45.0...v1.46.0) + +**Breaking changes:** +- Removed reflector metric usage by @vicentefb in https://github.com/googleforgames/agones/pull/4056 + +**Implemented enhancements:** +- Set externalTrafficPolicy as Local for agones-allocator by @osterante in https://github.com/googleforgames/agones/pull/4022 +- Integrates upgrades tests into Cloud Build by @igooch in https://github.com/googleforgames/agones/pull/4037 +- Delete List Value(s) on Game Server Allocation by @igooch in https://github.com/googleforgames/agones/pull/4054 +- In place upgrades version update instructions by @igooch in https://github.com/googleforgames/agones/pull/4064 + +**Fixed bugs:** +- Correct CI check for examples and add a unit test by @wheatear-dev in https://github.com/googleforgames/agones/pull/4045 +- Enable counter based autoscaler to scale from 0 replicas by @geopaulm in https://github.com/googleforgames/agones/pull/4049 + +**Other:** +- Preparation for Release v1.46.0 by @0xaravindh in https://github.com/googleforgames/agones/pull/4043 +- Updates Kubernetes templates for cpp-simple image by @0xaravindh in https://github.com/googleforgames/agones/pull/4044 +- Changes upgrades clusters to use only us based regions by @igooch in https://github.com/googleforgames/agones/pull/4046 +- Clarify docs on GKE Autopilot and node pools by @danfairs in https://github.com/googleforgames/agones/pull/4048 +- Updated typo's in multiple files by @nallave in https://github.com/googleforgames/agones/pull/4055 +- Flake: e2e/TestScheduleAutoscaler by @markmandel in https://github.com/googleforgames/agones/pull/4058 +- Add ability to specify additional labels for controller and extension pods by @R4oulDuk3 in https://github.com/googleforgames/agones/pull/4057 +- Adds Documention for how to run an in-place Agones upgrade by @igooch in https://github.com/googleforgames/agones/pull/3904 +- Fixes build error in push-upgrade-test by @igooch in https://github.com/googleforgames/agones/pull/4065 +- Fix broken link by @0xaravindh in https://github.com/googleforgames/agones/pull/4070 +- Link to Google Cloud Agones Support. by @markmandel in https://github.com/googleforgames/agones/pull/4071 +- Upgrade Go to 1.23.4 and update example image tags by @0xaravindh in https://github.com/googleforgames/agones/pull/4072 +- Unblocks Agones release PR by waiting for either the Agones dev version or release version by @igooch in https://github.com/googleforgames/agones/pull/4078 + +**New Contributors:** +- @danfairs made their first contribution in https://github.com/googleforgames/agones/pull/4048 +- @osterante made their first contribution in https://github.com/googleforgames/agones/pull/4022 +- @nallave made their first contribution in https://github.com/googleforgames/agones/pull/4055 +- @R4oulDuk3 made their first contribution in https://github.com/googleforgames/agones/pull/4057 + ## [v1.45.0](https://github.com/googleforgames/agones/tree/v1.45.0) (2024-11-19) [Full Changelog](https://github.com/googleforgames/agones/compare/v1.44.0...v1.45.0) diff --git a/install/helm/agones/Chart.yaml b/install/helm/agones/Chart.yaml index 59441c148d..76b78b5eb4 100644 --- a/install/helm/agones/Chart.yaml +++ b/install/helm/agones/Chart.yaml @@ -15,8 +15,8 @@ # Declare variables to be passed into your templates. apiVersion: v1 -appVersion: "1.46.0-dev" -version: 1.46.0-dev +appVersion: "1.46.0" +version: 1.46.0 name: agones description: a library for hosting, running and scaling dedicated game servers on Kubernetes. keywords: diff --git a/install/helm/agones/values.yaml b/install/helm/agones/values.yaml index 85d1ea9ac2..d587aecb7d 100644 --- a/install/helm/agones/values.yaml +++ b/install/helm/agones/values.yaml @@ -274,7 +274,7 @@ agones: topologySpreadConstraints: {} image: registry: us-docker.pkg.dev/agones-images/release - tag: 1.46.0-dev + tag: 1.46.0 controller: name: agones-controller pullPolicy: IfNotPresent diff --git a/install/yaml/install.yaml b/install/yaml/install.yaml index 19d3c9596f..d66721b083 100644 --- a/install/yaml/install.yaml +++ b/install/yaml/install.yaml @@ -50,7 +50,7 @@ metadata: namespace: agones-system labels: app: agones - chart: agones-1.46.0-dev + chart: agones-1.46.0 release: agones-manual heritage: Helm --- @@ -75,7 +75,7 @@ metadata: namespace: agones-system labels: app: agones - chart: agones-1.46.0-dev + chart: agones-1.46.0 release: agones-manual heritage: Helm --- @@ -100,7 +100,7 @@ metadata: namespace: default labels: app: agones - chart: agones-1.46.0-dev + chart: agones-1.46.0 release: agones-manual heritage: Helm --- @@ -112,7 +112,7 @@ metadata: namespace: agones-system labels: app: agones - chart: "agones-1.46.0-dev" + chart: "agones-1.46.0" release: "agones-manual" heritage: "Helm" type: Opaque @@ -129,7 +129,7 @@ metadata: namespace: agones-system labels: app: agones - chart: "agones-1.46.0-dev" + chart: "agones-1.46.0" release: "agones-manual" heritage: "Helm" data: @@ -145,7 +145,7 @@ metadata: namespace: agones-system labels: app: agones - chart: "agones-1.46.0-dev" + chart: "agones-1.46.0" release: "agones-manual" heritage: "Helm" data: @@ -161,7 +161,7 @@ metadata: namespace: agones-system labels: app: agones - chart: "agones-1.46.0-dev" + chart: "agones-1.46.0" release: "agones-manual" heritage: "Helm" data: @@ -191,7 +191,7 @@ metadata: labels: component: crd app: agones - chart: agones-1.46.0-dev + chart: agones-1.46.0 release: agones-manual heritage: Helm spec: @@ -5922,7 +5922,7 @@ metadata: labels: component: crd app: agones - chart: agones-1.46.0-dev + chart: agones-1.46.0 release: agones-manual heritage: Helm spec: @@ -6112,7 +6112,7 @@ metadata: labels: component: crd app: agones - chart: agones-1.46.0-dev + chart: agones-1.46.0 release: agones-manual heritage: Helm spec: @@ -11675,7 +11675,7 @@ metadata: labels: component: crd app: agones - chart: agones-1.46.0-dev + chart: agones-1.46.0 release: agones-manual heritage: Helm name: gameserverallocationpolicies.multicluster.agones.dev @@ -11754,7 +11754,7 @@ metadata: labels: component: crd app: agones - chart: agones-1.46.0-dev + chart: agones-1.46.0 release: agones-manual heritage: Helm spec: @@ -17453,7 +17453,7 @@ metadata: name: agones-allocator labels: app: agones - chart: agones-1.46.0-dev + chart: agones-1.46.0 release: agones-manual heritage: Helm rules: @@ -17483,7 +17483,7 @@ metadata: name: agones-controller labels: app: agones - chart: agones-1.46.0-dev + chart: agones-1.46.0 release: agones-manual heritage: Helm rules: @@ -17537,7 +17537,7 @@ metadata: name: agones-sdk labels: app: agones - chart: agones-1.46.0-dev + chart: agones-1.46.0 release: agones-manual heritage: Helm rules: @@ -17556,7 +17556,7 @@ metadata: name: agones-allocator labels: app: agones - chart: agones-1.46.0-dev + chart: agones-1.46.0 release: agones-manual heritage: Helm subjects: @@ -17575,7 +17575,7 @@ metadata: name: agones-controller-access labels: app: agones - chart: agones-1.46.0-dev + chart: agones-1.46.0 release: agones-manual heritage: Helm subjects: @@ -17627,7 +17627,7 @@ metadata: namespace: default labels: app: agones - chart: agones-1.46.0-dev + chart: agones-1.46.0 release: agones-manual heritage: Helm subjects: @@ -17661,7 +17661,7 @@ metadata: labels: agones.dev/role: controller app: agones - chart: agones-1.46.0-dev + chart: agones-1.46.0 release: agones-manual heritage: Helm spec: @@ -17695,7 +17695,7 @@ metadata: labels: agones.dev/role: extensions app: agones - chart: agones-1.46.0-dev + chart: agones-1.46.0 release: agones-manual heritage: Helm spec: @@ -17715,7 +17715,7 @@ metadata: labels: component: ping app: agones - chart: agones-1.46.0-dev + chart: agones-1.46.0 release: agones-manual heritage: Helm spec: @@ -17737,7 +17737,7 @@ metadata: labels: component: ping app: agones - chart: agones-1.46.0-dev + chart: agones-1.46.0 release: agones-manual heritage: Helm spec: @@ -17773,7 +17773,7 @@ metadata: labels: agones.dev/role: extensions app: agones - chart: agones-1.46.0-dev + chart: agones-1.46.0 release: agones-manual heritage: Helm spec: @@ -17810,7 +17810,7 @@ metadata: labels: component: allocator app: agones - chart: agones-1.46.0-dev + chart: agones-1.46.0 release: agones-manual heritage: Helm spec: @@ -17833,7 +17833,7 @@ metadata: labels: multicluster.agones.dev/role: allocator app: agones - chart: agones-1.46.0-dev + chart: agones-1.46.0 release: agones-manual heritage: Helm spec: @@ -17867,7 +17867,7 @@ metadata: labels: component: controller app: agones - chart: agones-1.46.0-dev + chart: agones-1.46.0 release: agones-manual heritage: Helm spec: @@ -17909,7 +17909,7 @@ spec: serviceAccountName: agones-controller containers: - name: agones-controller - image: "us-docker.pkg.dev/agones-images/release/agones-controller:1.46.0-dev" + image: "us-docker.pkg.dev/agones-images/release/agones-controller:1.46.0" imagePullPolicy: IfNotPresent securityContext: runAsNonRoot: true @@ -17923,7 +17923,7 @@ spec: - name: MAX_PORT value: "8000" - name: SIDECAR_IMAGE # overwrite the GameServer sidecar image that is used - value: "us-docker.pkg.dev/agones-images/release/agones-sdk:1.46.0-dev" + value: "us-docker.pkg.dev/agones-images/release/agones-sdk:1.46.0" - name: ALWAYS_PULL_SIDECAR # set the sidecar imagePullPolicy to Always value: "false" - name: SIDECAR_CPU_REQUEST @@ -18041,7 +18041,7 @@ metadata: labels: component: extensions app: agones - chart: agones-1.46.0-dev + chart: agones-1.46.0 release: agones-manual heritage: Helm spec: @@ -18085,7 +18085,7 @@ spec: terminationGracePeriodSeconds: 27 containers: - name: agones-extensions - image: "us-docker.pkg.dev/agones-images/release/agones-extensions:1.46.0-dev" + image: "us-docker.pkg.dev/agones-images/release/agones-extensions:1.46.0" imagePullPolicy: IfNotPresent securityContext: runAsNonRoot: true @@ -18195,7 +18195,7 @@ metadata: labels: component: ping app: agones - chart: agones-1.46.0-dev + chart: agones-1.46.0 release: agones-manual heritage: Helm spec: @@ -18230,7 +18230,7 @@ spec: priorityClassName: agones-system containers: - name: agones-ping - image: "us-docker.pkg.dev/agones-images/release/agones-ping:1.46.0-dev" + image: "us-docker.pkg.dev/agones-images/release/agones-ping:1.46.0" imagePullPolicy: IfNotPresent securityContext: runAsNonRoot: true @@ -18308,7 +18308,7 @@ spec: secretName: allocator-client-ca containers: - name: agones-allocator - image: "us-docker.pkg.dev/agones-images/release/agones-allocator:1.46.0-dev" + image: "us-docker.pkg.dev/agones-images/release/agones-allocator:1.46.0" imagePullPolicy: IfNotPresent securityContext: runAsNonRoot: true @@ -18395,7 +18395,7 @@ metadata: labels: component: controller app: agones - chart: agones-1.46.0-dev + chart: agones-1.46.0 release: agones-manual heritage: Helm spec: @@ -18446,7 +18446,7 @@ metadata: labels: component: controller app: agones - chart: agones-1.46.0-dev + chart: agones-1.46.0 release: agones-manual heritage: Helm webhooks: @@ -18489,7 +18489,7 @@ metadata: labels: component: controller app: agones - chart: agones-1.46.0-dev + chart: agones-1.46.0 release: agones-manual heritage: Helm webhooks: @@ -18534,7 +18534,7 @@ metadata: labels: component: controller app: agones - chart: agones-1.46.0-dev + chart: agones-1.46.0 release: agones-manual heritage: Helm webhooks: diff --git a/sdks/csharp/sdk/AgonesSDK.nuspec b/sdks/csharp/sdk/AgonesSDK.nuspec index 802626486a..579a328c1f 100644 --- a/sdks/csharp/sdk/AgonesSDK.nuspec +++ b/sdks/csharp/sdk/AgonesSDK.nuspec @@ -2,7 +2,7 @@ AgonesSDK - 1.46.0-dev + 1.46.0 Google LLC Google LLC false diff --git a/sdks/csharp/sdk/csharp-sdk.csproj b/sdks/csharp/sdk/csharp-sdk.csproj index 262931fbb7..c521f6c9c6 100644 --- a/sdks/csharp/sdk/csharp-sdk.csproj +++ b/sdks/csharp/sdk/csharp-sdk.csproj @@ -13,7 +13,7 @@ https://agones.dev http://www.apache.org/licenses/LICENSE-2.0 AgonesSDK - 1.46.0-dev + 1.46.0 agones, googleforgames, kuberenetes, multiplayer, gameservers agones.dev Debug;Release;DebugProtoGen diff --git a/sdks/nodejs/package-lock.json b/sdks/nodejs/package-lock.json index 99a5678cd5..2f844a6504 100644 --- a/sdks/nodejs/package-lock.json +++ b/sdks/nodejs/package-lock.json @@ -1,12 +1,12 @@ { "name": "@google-cloud/agones-sdk", - "version": "1.46.0-dev", + "version": "1.46.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@google-cloud/agones-sdk", - "version": "1.46.0-dev", + "version": "1.46.0", "license": "Apache-2.0", "dependencies": { "@grpc/grpc-js": "1.10.9", diff --git a/sdks/nodejs/package.json b/sdks/nodejs/package.json index 5b461b92b0..77e946226d 100644 --- a/sdks/nodejs/package.json +++ b/sdks/nodejs/package.json @@ -26,5 +26,5 @@ "publishConfig": { "access": "public" }, - "version": "1.46.0-dev" + "version": "1.46.0" } diff --git a/sdks/rust/Cargo.toml b/sdks/rust/Cargo.toml index ddcd187745..a131508b77 100644 --- a/sdks/rust/Cargo.toml +++ b/sdks/rust/Cargo.toml @@ -14,7 +14,7 @@ [package] name = "agones" -version = "1.46.0-dev" +version = "1.46.0" edition = "2021" description = "The Rust SDK for Agones." license = "Apache-2.0" diff --git a/sdks/unity/package.json b/sdks/unity/package.json index 92f846881e..9871a739d7 100644 --- a/sdks/unity/package.json +++ b/sdks/unity/package.json @@ -1,6 +1,6 @@ { "name": "com.googleforgames.agones", - "version": "1.46.0-dev", + "version": "1.46.0", "displayName": "Agones Unity SDK", "description": "The Unity Gameserver SDK for Agones", "unity": "2019.1", diff --git a/site/config.toml b/site/config.toml index f7c552e0ea..7f4682e6cb 100644 --- a/site/config.toml +++ b/site/config.toml @@ -80,9 +80,9 @@ github_repo = "https://github.com/googleforgames/agones" gcs_engine_id = "016691298986124624340:x7qv2dywdao" # current release branch. Never is rc. -release_branch = "release-1.45.0" +release_branch = "release-1.46.0" # the main version. Never is rc. -release_version = "1.45.0" +release_version = "1.46.0" # shown for production supported_k8s = ["1.29", "1.30", "1.31"] diff --git a/site/content/en/blog/releases/1.45.0.md b/site/content/en/blog/releases/1.45.0.md index 93cd9ce92c..c31c43e93d 100644 --- a/site/content/en/blog/releases/1.45.0.md +++ b/site/content/en/blog/releases/1.45.0.md @@ -18,7 +18,7 @@ In this release, we’ve introduced Terraform scripts and updated documentation - **New Dashboard Feature for GameServer State Duration**: A new dashboard feature has been added that provides insights into the duration of GameServer states. This will help operators monitor and debug the lifecycle of game servers more efficiently. -Check the README for details on features, installation and usage. +Check the README for details on features, installation and usage. **Breaking changes:** - Update Supported Kubernetes to 1.29, 1.30, 1.31 by @kamaljeeti in https://github.com/googleforgames/agones/pull/4024 @@ -28,7 +28,7 @@ Check the CHANGELOG for more details on changes. +See CHANGELOG for more details on changes. Images available with this release: @@ -49,7 +49,7 @@ Images available with this release: Helm chart available with this release: -- +- helm install agones agones/agones --version 1.45.0 > Make sure to add our stable helm repository using `helm repo add agones https://agones.dev/chart/stable` \ No newline at end of file diff --git a/site/content/en/blog/releases/1.46.0.md b/site/content/en/blog/releases/1.46.0.md new file mode 100644 index 0000000000..00b6433e71 --- /dev/null +++ b/site/content/en/blog/releases/1.46.0.md @@ -0,0 +1,56 @@ +--- +title: "1.46.0 - Go v1.23.4, Custom Labels, List Deletion, In-Place Upgrades in Alpha and More" +linktitle: "1.46.0" +date: "2025-01-02" +--- + +This is the 1.46.0 release of Agones. + +In this release, we’ve introduced Go v1.23.4 for improved performance, added support for custom labels on pods for enhanced monitoring, and enabled the deletion of list values during game server allocation. The externalTrafficPolicy for agones-allocator is now set to "Local" for stable allocations during node pool scaling. Additionally, the documentation has been updated with step-by-step instructions for in-place Agones upgrades. + +- **Updated Versions**: Go v1.23.4 Now Live: We have upgraded to Go v1.22.6 which brings enhanced performance and crucial security updates. + +- **Support for Custom Labels on Controller and Extension Pods**: Allows adding extra labels to controller and extension pods, enhancing monitoring and management with Prometheus. + +- **Enable List Value Deletion in Game Server Allocation**: Introduces the ability to delete values from a list during game server allocation, enabling support for multiple concurrent backfill requests in Agones. + +- **Added externalTrafficPolicy for agones-allocator**: This update configures the externalTrafficPolicy to "Local" for the agones-allocator service, ensuring stable allocations when scaling down the GameServers node pool in Agones clusters. + +- **In-Place Agones Upgrades is in Alpha**: Check out the new user documentation with step-by-step instructions for performing an in-place Agones upgrade. + +Check the README for details on features, installation and usage. + +**Breaking changes**: +- Removed reflector metric usage by @vicentefb in https://github.com/googleforgames/agones/pull/4056 + +**Implemented enhancements**: +- Set externalTrafficPolicy as Local for agones-allocator by @osterante in https://github.com/googleforgames/agones/pull/4022 +- Integrates upgrades tests into Cloud Build by @igooch in https://github.com/googleforgames/agones/pull/4037 +- Delete List Value(s) on Game Server Allocation by @igooch in https://github.com/googleforgames/agones/pull/4054 +- In place upgrades version update instructions by @igooch in https://github.com/googleforgames/agones/pull/4064 + +See CHANGELOG for more details on changes. + +Images available with this release: + +- [us-docker.pkg.dev/agones-images/release/agones-controller:1.46.0](https://us-docker.pkg.dev/agones-images/release/agones-controller:1.46.0) +- [us-docker.pkg.dev/agones-images/release/agones-sdk:1.46.0](https://us-docker.pkg.dev/agones-images/release/agones-sdk:1.46.0) +- [us-docker.pkg.dev/agones-images/release/agones-ping:1.46.0](https://us-docker.pkg.dev/agones-images/release/agones-ping:1.46.0) +- [us-docker.pkg.dev/agones-images/release/agones-allocator:1.46.0](https://us-docker.pkg.dev/agones-images/release/agones-allocator:1.46.0) +- [us-docker.pkg.dev/agones-images/examples/allocation-endpoint-proxy:0.11](https://us-docker.pkg.dev/agones-images/examples/allocation-endpoint-proxy:0.11) +- [us-docker.pkg.dev/agones-images/examples/autoscaler-webhook:0.16](https://us-docker.pkg.dev/agones-images/examples/autoscaler-webhook:0.16) +- [us-docker.pkg.dev/agones-images/examples/cpp-simple-server:0.19](https://us-docker.pkg.dev/agones-images/examples/cpp-simple-server:0.19) +- [us-docker.pkg.dev/agones-images/examples/crd-client:0.19](https://us-docker.pkg.dev/agones-images/examples/crd-client:0.19) +- [us-docker.pkg.dev/agones-images/examples/nodejs-simple-server:0.10](https://us-docker.pkg.dev/agones-images/examples/nodejs-simple-server:0.10) +- [us-docker.pkg.dev/agones-images/examples/rust-simple-server:0.13](https://us-docker.pkg.dev/agones-images/examples/rust-simple-server:0.13) +- [us-docker.pkg.dev/agones-images/examples/simple-game-server:0.36](https://us-docker.pkg.dev/agones-images/examples/simple-game-server:0.36) +- [us-docker.pkg.dev/agones-images/examples/supertuxkart-example:0.16](https://us-docker.pkg.dev/agones-images/examples/supertuxkart-example:0.16) +- [us-docker.pkg.dev/agones-images/examples/unity-simple-server:0.3](https://us-docker.pkg.dev/agones-images/examples/unity-simple-server:0.3) +- [us-docker.pkg.dev/agones-images/examples/xonotic-example:2.2](https://us-docker.pkg.dev/agones-images/examples/xonotic-example:2.2) + +Helm chart available with this release: + +- + helm install agones agones/agones --version 1.46.0 + +> Make sure to add our stable helm repository using `helm repo add agones https://agones.dev/chart/stable` \ No newline at end of file diff --git a/site/content/en/docs/Installation/Install Agones/helm.md b/site/content/en/docs/Installation/Install Agones/helm.md index a0223e0559..7d6d6be2e4 100644 --- a/site/content/en/docs/Installation/Install Agones/helm.md +++ b/site/content/en/docs/Installation/Install Agones/helm.md @@ -150,50 +150,6 @@ The following tables lists the configurable parameters of the Agones chart and t ### Agones Controller -{{% feature expiryVersion="1.46.0" %}} - -| Parameter | Description | Default | -|----------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------| -| `agones.controller.replicas` | The number of replicas to run in the `agones-controller` deployment. | `2` | -| `agones.controller.pdb.minAvailable` | Description of the number of pods from that set that must still be available after the eviction, even in the absence of the evicted pod. Can be either an absolute number or a percentage. Mutually Exclusive with `maxUnavailable` | `1` | -| `agones.controller.pdb.maxUnavailable` | Description of the number of pods from that set that can be unavailable after the eviction. It can be either an absolute number or a percentage Mutually Exclusive with `minAvailable` | \`\` | -| `agones.controller.http.port` | Port to use for liveness probe service and metrics | `8080` | -| `agones.controller.healthCheck.initialDelaySeconds` | Initial delay before performing the first probe (in seconds) | `3` | -| `agones.controller.healthCheck.periodSeconds` | Seconds between every liveness probe (in seconds) | `3` | -| `agones.controller.healthCheck.failureThreshold` | Number of times before giving up (in seconds) | `3` | -| `agones.controller.healthCheck.timeoutSeconds` | Number of seconds after which the probe times out (in seconds) | `1` | -| `agones.controller.resources` | Controller [resource requests/limit][resources] | `{}` | -| `agones.controller.generateTLS` | Set to true to generate TLS certificates or false to provide your own certificates | `true` | -| `agones.controller.tlsCert` | Custom TLS certificate provided as a string | \`\` | -| `agones.controller.tlsKey` | Custom TLS private key provided as a string | \`\` | -| `agones.controller.nodeSelector` | Controller [node labels][nodeSelector] for pod assignment | `{}` | -| `agones.controller.tolerations` | Controller [toleration][toleration] labels for pod assignment | `[]` | -| `agones.controller.affinity` | Controller [affinity][affinity] settings for pod assignment | `{}` | -| `agones.controller.annotations` | [Annotations][annotations] added to the Agones controller pods | `{}` | -| `agones.controller.numWorkers` | Number of workers to spin per resource type | `100` | -| `agones.controller.apiServerQPS` | Maximum sustained queries per second that controller should be making against API Server | `400` | -| `agones.controller.apiServerQPSBurst` | Maximum burst queries per second that controller should be making against API Server | `500` | -| `agones.controller.logLevel` | Agones Controller Log level. Log only entries with that severity and above | `info` | -| `agones.controller.persistentLogs` | Store Agones controller logs in a temporary volume attached to a container for debugging | `true` | -| `agones.controller.persistentLogsSizeLimitMB` | Maximum total size of all Agones container logs in MB | `10000` | -| `agones.controller.disableSecret` | **Deprecated**. Use `agones.extensions.disableSecret` instead. Disables the creation of any allocator secrets. If true, you MUST provide the `{agones.releaseName}-cert` secrets before installation. | `false` | -| `agones.controller.customCertSecretPath` | Remap cert-manager path to server.crt and server.key | `{}` | -| `agones.controller.allocationApiService.annotations` | **Deprecated**. Use `agones.extensions.allocationApiService.annotations` instead. [Annotations][annotations] added to the Agones apiregistration | `{}` | -| `agones.controller.allocationApiService.disableCaBundle` | **Deprecated**. Use `agones.extensions.allocationApiService.disableCaBundle` instead. Disable ca-bundle so it can be injected by cert-manager. | `false` | -| `agones.controller.validatingWebhook.annotations` | **Deprecated**. Use `agones.extensions.validatingWebhook.annotations` instead. [Annotations][annotations] added to the Agones validating webhook | `{}` | -| `agones.controller.validatingWebhook.disableCaBundle` | **Deprecated**. Use `agones.extensions.validatingWebhook.disableCaBundle` instead. Disable ca-bundle so it can be injected by cert-manager | `false` | -| `agones.controller.mutatingWebhook.annotations` | **Deprecated**. Use `agones.extensions.mutatingWebhook.annotations` instead. [Annotations][annotations] added to the Agones mutating webhook | `{}` | -| `agones.controller.mutatingWebhook.disableCaBundle` | **Deprecated**. Use `agones.extensions.mutatingWebhook.disableCaBundle` instead. Disable ca-bundle so it can be injected by cert-manager | `false` | -| `agones.controller.allocationBatchWaitTime` | Wait time between each allocation batch when performing allocations in controller mode | `500ms` | -| `agones.controller.topologySpreadConstraints` | Ensures better resource utilization and high availability by evenly distributing Pods in the agones-system namespace | `{}` | -| `agones.controller.maxCreationParallelism` | Maximum number of parallelizing creation calls in GSS controller | `16` | -| `agones.controller.maxGameServerCreationsPerBatch` | Maximum number of GameServer creation calls per batch | `64` | -| `agones.controller.maxDeletionParallelism` | Maximum number of parallelizing deletion calls in GSS | `64` | -| `agones.controller.maxGameServerDeletionsPerBatch` | Maximum number of GameServer deletion calls per batch | `64` | -| `agones.controller.maxPodPendingCount` | Maximum number of pending pods per game server set | `5000` | - -{{% /feature %}} -{{% feature publishVersion="1.46.0" %}} | Parameter | Description | Default | |----------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------| | `agones.controller.replicas` | The number of replicas to run in the `agones-controller` deployment. | `2` | @@ -234,7 +190,6 @@ The following tables lists the configurable parameters of the Agones chart and t | `agones.controller.maxDeletionParallelism` | Maximum number of parallelizing deletion calls in GSS | `64` | | `agones.controller.maxGameServerDeletionsPerBatch` | Maximum number of GameServer deletion calls per batch | `64` | | `agones.controller.maxPodPendingCount` | Maximum number of pending pods per game server set | `5000` | -{{% /feature %}} ### Ping Service @@ -276,65 +231,6 @@ The following tables lists the configurable parameters of the Agones chart and t ### Allocator Service -{{% feature expiryVersion="1.46.0" %}} -| Parameter | Description | Default | -|----------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------| -| `agones.allocator.apiServerQPS` | Maximum sustained queries per second that an allocator should be making against API Server | `400` | -| `agones.allocator.apiServerQPSBurst` | Maximum burst queries per second that an allocator should be making against API Server | `500` | -| `agones.allocator.remoteAllocationTimeout` | Remote allocation call timeout. | `10s` | -| `agones.allocator.totalRemoteAllocationTimeout` | Total remote allocation timeout including retries. | `30s` | -| `agones.allocator.logLevel` | Agones Allocator Log level. Log only entries with that severity and above | `info` | -| `agones.allocator.install` | Whether to install the [allocator service][allocator] | `true` | -| `agones.allocator.replicas` | The number of replicas to run in the deployment | `3` | -| `agones.allocator.service.name` | Service name for the allocator | `agones-allocator` | -| `agones.allocator.service.serviceType` | The [Service Type][service] of the HTTP Service | `LoadBalancer` | -| `agones.allocator.service.clusterIP` | The [Cluster IP][clusterIP] of the Agones allocator. If you want [Headless Service][headless-service] for Agones Allocator, you can set `None` to clusterIP. | \`\` | -| `agones.allocator.service.loadBalancerIP` | The [Load Balancer IP][loadBalancer] of the Agones allocator load balancer. Only works if the Kubernetes provider supports this option. | \`\` | -| `agones.allocator.service.loadBalancerSourceRanges` | The [Load Balancer SourceRanges][loadBalancer] of the Agones allocator load balancer. Only works if the Kubernetes provider supports this option. | `[]` | -| `agones.allocator.service.annotations` | [Annotations][annotations] added to the Agones allocator service | `{}` | -| `agones.allocator.service.http.enabled` | If true the [allocator service][allocator] will respond to [REST requests][rest-requests] | `true` | -| `agones.allocator.service.http.appProtocol` | The `appProtocol` to set on the Service for the http allocation port. If left blank, no value is set. | `` | -| `agones.allocator.service.http.port` | The port that is exposed externally by the [allocator service][allocator] for [REST requests][rest-requests] | `443` | -| `agones.allocator.service.http.portName` | The name of exposed port | `http` | -| `agones.allocator.service.http.targetPort` | The port that is used by the allocator pod to listen for [REST requests][rest-requests]. Note that the allocator server cannot bind to low numbered ports. | `8443` | -| `agones.allocator.service.http.nodePort` | If the ServiceType is set to "NodePort", this is the NodePort that the allocator http service is exposed on. | `30000-32767` | -| `agones.allocator.service.http.unallocatedStatusCode` | HTTP status code to return when no GameServer is available for allocation. This setting allows for custom responses when a game server allocation fails, offering flexibility in handling these situations. | `429` | -| `agones.allocator.service.grpc.enabled` | If true the [allocator service][allocator] will respond to [gRPC requests][grpc-requests] | `true` | -| `agones.allocator.service.grpc.port` | The port that is exposed externally by the [allocator service][allocator] for [gRPC requests][grpc-requests] | `443` | -| `agones.allocator.service.grpc.portName` | The name of exposed port | `` | -| `agones.allocator.service.grpc.appProtocol` | The `appProtocol` to set on the Service for the gRPC allocation port. If left blank, no value is set. | `` | -| `agones.allocator.service.grpc.nodePort` | If the ServiceType is set to "NodePort", this is the NodePort that the allocator gRPC service is exposed on. | `30000-32767` | -| `agones.allocator.service.grpc.targetPort` | The port that is used by the allocator pod to listen for [gRPC requests][grpc-requests]. Note that the allocator server cannot bind to low numbered ports. | `8443` | -| `agones.allocator.generateClientTLS` | Set to true to generate client TLS certificates or false to provide certificates in `certs/allocator/allocator-client.default/*` | `true` | -| `agones.allocator.generateTLS` | Set to true to generate TLS certificates or false to provide your own certificates | `true` | -| `agones.allocator.disableMTLS` | Turns off client cert authentication for incoming connections to the allocator. | `false` | -| `agones.allocator.disableTLS` | Turns off TLS security for incoming connections to the allocator. | `false` | -| `agones.allocator.disableSecretCreation` | Disables the creation of any allocator secrets. If true, you MUST provide the `allocator-tls`, `allocator-tls-ca`, and `allocator-client-ca` secrets before installation. | `false` | -| `agones.allocator.tlsCert` | Custom TLS certificate provided as a string | \`\` | -| `agones.allocator.tlsKey` | Custom TLS private key provided as a string | \`\` | -| `agones.allocator.clientCAs` | A map of secret key names to allowed client CA certificates provided as strings | `{}` | -| `agones.allocator.tolerations` | Allocator [toleration][toleration] labels for pod assignment | `[]` | -| `agones.allocator.affinity` | Allocator [affinity][affinity] settings for pod assignment | `{}` | -| `agones.allocator.annotations` | [Annotations][annotations] added to the Agones allocator pods | `{}` | -| `agones.allocator.resources` | Allocator pods [resource requests/limit][resources] | `{}` | -| `agones.allocator.labels` | [Labels][labels] Added to the Agones Allocator pods | `{}` | -| `agones.allocator.readiness.initialDelaySeconds` | Initial delay before performing the first probe (in seconds) | `3` | -| `agones.allocator.readiness.periodSeconds` | Seconds between every liveness probe (in seconds) | `3` | -| `agones.allocator.readiness.failureThreshold` | Number of times before giving up (in seconds) | `3` | -| `agones.allocator.nodeSelector` | Allocator [node labels][nodeSelector] for pod assignment | `{}` | -| `agones.allocator.serviceMetrics.name` | Second Service name for the allocator | `agones-allocator-metrics-service` | -| `agones.allocator.serviceMetrics.annotations` | [Annotations][annotations] added to the Agones allocator second Service | `{}` | -| `agones.allocator.serviceMetrics.http.port` | The port that is exposed within cluster by the [allocator service][allocator] for http requests | `8080` | -| `agones.allocator.serviceMetrics.http.portName` | The name of exposed port | `http` | -| `agones.allocator.allocationBatchWaitTime` | Wait time between each allocation batch when performing allocations in allocator mode | `500ms` | -| `agones.allocator.updateStrategy` | The [strategy](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy) to apply to the ping deployment | `{}` | -| `agones.allocator.pdb.enabled` | Set to `true` to enable the creation of a [PodDisruptionBudget](https://kubernetes.io/docs/tasks/run-application/configure-pdb/) for the allocator deployment | `false` | -| `agones.allocator.pdb.minAvailable` | Description of the number of pods from that set that must still be available after the eviction, even in the absence of the evicted pod. Can be either an absolute number or a percentage. Mutually Exclusive with `maxUnavailable` | `1` | -| `agones.allocator.pdb.maxUnavailable` | Description of the number of pods from that set that can be unavailable after the eviction. It can be either an absolute number or a percentage. Mutually Exclusive with `minAvailable` | \`\` | -| `agones.allocator.topologySpreadConstraints` | Ensures better resource utilization and high availability by evenly distributing Pods in the agones-system namespace | `{}` | - -{{% /feature %}} -{{% feature publishVersion="1.46.0" %}} | Parameter | Description | Default | | ----------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------- | | `agones.allocator.apiServerQPS` | Maximum sustained queries per second that an allocator should be making against API Server | `400` | @@ -392,50 +288,9 @@ The following tables lists the configurable parameters of the Agones chart and t | `agones.allocator.topologySpreadConstraints` | Ensures better resource utilization and high availability by evenly distributing Pods in the agones-system namespace | `{}` | | `agones.allocator.externalTrafficPolicy` | The `externalTrafficPolicy` for the Agones allocator service | `Cluster` | -{{% /feature %}} ### Extensions -{{% feature expiryVersion="1.46.0" %}} -| Parameter | Description | Default | -|----------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------| -|`agones.extensions.hostNetwork` | Determines if the Agones extensions should operate in hostNetwork mode. If running in hostNetwork mode, you should change `agones.extensions.http.port` and `agones.extensions.webhooks.port` to an available port. | `false` | -| `agones.extensions.http.port` | Port to use for liveness probe service and metrics | `8080` | -|`agones.extensions.webhooks.port` | Port to use for webhook service | `8081` | -| `agones.extensions.healthCheck.initialDelaySeconds` | Initial delay before performing the first probe (in seconds) | `3` | -| `agones.extensions.healthCheck.periodSeconds` | Seconds between every liveness probe (in seconds) | `3` | -| `agones.extensions.healthCheck.failureThreshold` | Number of times before giving up (in seconds) | `3` | -| `agones.extensions.healthCheck.timeoutSeconds` | Number of seconds after which the probe times out (in seconds) | `1` | -| `agones.extensions.resources` | Extensions [resource requests/limit][resources] | `{}` | -| `agones.extensions.generateTLS` | Set to true to generate TLS certificates or false to provide your own certificates | `true` | -| `agones.extensions.tlsCert` | Custom TLS certificate provided as a string | \`\` | -| `agones.extensions.tlsKey` | Custom TLS private key provided as a string | \`\` | -| `agones.extensions.nodeSelector` | Extensions [node labels][nodeSelector] for pod assignment | `{}` | -| `agones.extensions.tolerations` | Extensions [toleration][toleration] labels for pod assignment | `[]` | -| `agones.extensions.affinity` | Extensions [affinity][affinity] settings for pod assignment | `{}` | -| `agones.extensions.annotations` | [Annotations][annotations] added to the Agones extensions pods | `{}` | -| `agones.extensions.numWorkers` | Number of workers to spin per resource type | `100` | -| `agones.extensions.apiServerQPS` | Maximum sustained queries per second that extensions should be making against API Server | `400` | -| `agones.extensions.apiServerQPSBurst` | Maximum burst queries per second that extensions should be making against API Server | `500` | -| `agones.extensions.logLevel` | Agones Extensions Log level. Log only entries with that severity and above | `info` | -| `agones.extensions.persistentLogs` | Store Agones extensions logs in a temporary volume attached to a container for debugging | `true` | -| `agones.extensions.persistentLogsSizeLimitMB` | Maximum total size of all Agones container logs in MB | `10000` | -| `agones.extensions.disableSecret` | Disables the creation of any allocator secrets. You MUST provide the `{agones.releaseName}-cert` secrets before installation if this is set to `true`. | `false` | -| `agones.extensions.customCertSecretPath` | Remap cert-manager path to server.crt and server.key | `{}` | -| `agones.extensions.allocationApiService.annotations` | [Annotations][annotations] added to the Agones API registration. | `{}` | -| `agones.extensions.allocationApiService.disableCaBundle` | Disable ca-bundle so it can be injected by cert-manager. | `false` | -| `agones.extensions.validatingWebhook.annotations` | [Annotations][annotations] added to the Agones validating webhook. | `{}` | -| `agones.extensions.validatingWebhook.disableCaBundle` | Disable ca-bundle so it can be injected by cert-manager. | `false` | -| `agones.extensions.mutatingWebhook.annotations` | [Annotations][annotations] added to the Agones mutating webhook. | `{}` | -| `agones.extensions.mutatingWebhook.disableCaBundle` | Disable ca-bundle so it can be injected by cert-manager. | `false` | -| `agones.extensions.allocationBatchWaitTime` | Wait time between each allocation batch when performing allocations in controller mode | `500ms` | -| `agones.extensions.pdb.minAvailable` | Description of the number of pods from that set that must still be available after the eviction, even in the absence of the evicted pod. Can be either an absolute number or a percentage. Mutually Exclusive with maxUnavailable | `1` | -| `agones.extensions.pdb.maxUnavailable` | Description of the number of pods from that set that can be unavailable after the eviction. It can be either an absolute number or a percentage. Mutually Exclusive with `minAvailable` | \`\` | -| `agones.extensions.replicas` | The number of replicas to run in the deployment | `2` | -| `agones.extensions.topologySpreadConstraints` | Ensures better resource utilization and high availability by evenly distributing Pods in the agones-system namespace | `{}` | - -{{% /feature %}} -{{% feature publishVersion="1.46.0" %}} | Parameter | Description | Default | |----------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------| |`agones.extensions.hostNetwork` | Determines if the Agones extensions should operate in hostNetwork mode. If running in hostNetwork mode, you should change `agones.extensions.http.port` and `agones.extensions.webhooks.port` to an available port. | `false` | @@ -474,7 +329,6 @@ The following tables lists the configurable parameters of the Agones chart and t | `agones.extensions.replicas` | The number of replicas to run in the deployment | `2` | | `agones.extensions.topologySpreadConstraints` | Ensures better resource utilization and high availability by evenly distributing Pods in the agones-system namespace | `{}` | -{{% /feature %}} ### GameServers diff --git a/site/content/en/docs/Installation/_index.md b/site/content/en/docs/Installation/_index.md index 343448de86..418d9d6b3f 100644 --- a/site/content/en/docs/Installation/_index.md +++ b/site/content/en/docs/Installation/_index.md @@ -47,7 +47,8 @@ The following table lists recent Agones versions and their corresponding require | Agones version | Kubernetes version(s) | | -------------- | ------------------ | -| 1.45 | {{% k8s-version %}} | +| 1.46 | {{% k8s-version %}} | +| 1.45 | 1.29, 1.30, 1.31 | | 1.44 | 1.28, 1.29, 1.30 | | 1.43 | 1.28, 1.29, 1.30 | | 1.42 | 1.27, 1.28, 1.29 | @@ -69,7 +70,6 @@ The following table lists recent Agones versions and their corresponding require | 1.26 | 1.23 | | 1.25 | 1.22 | | 1.24 | 1.22 | -| 1.23 | 1.22 | ## Best Practices {#separation-of-agones-from-gameserver-nodes} diff --git a/site/content/en/docs/Installation/upgrading.md b/site/content/en/docs/Installation/upgrading.md index a6b7b6c8d9..f2bd031999 100644 --- a/site/content/en/docs/Installation/upgrading.md +++ b/site/content/en/docs/Installation/upgrading.md @@ -51,7 +51,6 @@ The following are steps to implement this: If you are upgrading a single cluster, we recommend creating a maintenance window, in which your game goes offline for the period of your upgrade, as there will be a short period in which Agones will be non-responsive during the upgrade. -{{% feature publishVersion="1.46.0" %}} #### In-Place Agones Upgrades {{< alert color="warning" title="Warning" >}} @@ -118,7 +117,6 @@ configurable parameters. increases the likelihood of having multiple Game Server configurations on the same Fleet. 4. Run any other tests to ensure the Agones installation is working as expected. 5. Congratulations - you have now upgraded to a new version of Agones! 👍 -{{% /feature %}} #### Installation with install.yaml diff --git a/site/layouts/partials/navbar.html b/site/layouts/partials/navbar.html index fb890b8260..48263cf930 100644 --- a/site/layouts/partials/navbar.html +++ b/site/layouts/partials/navbar.html @@ -27,6 +27,7 @@ {{ if (gt (len .Site.Home.Translations) 0) }} From 56563a932a31509d6397c4c79360f42b9a99596c Mon Sep 17 00:00:00 2001 From: Aravindh K Date: Sat, 4 Jan 2025 01:43:05 +0000 Subject: [PATCH 07/10] Preparation for Release v1.47.0 (#4079) * Preparation for Release v1.47.0 * Update version to 1.46.0 and 1.47.0 in config files --- build/Makefile | 2 +- cloudbuild.yaml | 2 +- install/helm/agones/Chart.yaml | 4 +- install/helm/agones/values.yaml | 2 +- install/yaml/install.yaml | 74 +++++++++++++++---------------- sdks/csharp/sdk/AgonesSDK.nuspec | 2 +- sdks/csharp/sdk/csharp-sdk.csproj | 2 +- sdks/nodejs/package-lock.json | 4 +- sdks/nodejs/package.json | 2 +- sdks/rust/Cargo.toml | 2 +- sdks/unity/package.json | 2 +- test/sdk/go/Makefile | 2 +- test/upgrade/Makefile | 2 +- test/upgrade/versionMap.yaml | 9 +++- 14 files changed, 59 insertions(+), 52 deletions(-) diff --git a/build/Makefile b/build/Makefile index 8c72fe8950..2f6e2ac620 100644 --- a/build/Makefile +++ b/build/Makefile @@ -24,7 +24,7 @@ # # base version target. This is usually the next release. -base_version = 1.46.0 +base_version = 1.47.0 # # All of the following can be overwritten with environment variables diff --git a/cloudbuild.yaml b/cloudbuild.yaml index 29f08f5452..e55cde729b 100644 --- a/cloudbuild.yaml +++ b/cloudbuild.yaml @@ -556,7 +556,7 @@ steps: done substitutions: - _BASE_VERSION: 1.46.0 + _BASE_VERSION: 1.47.0 _CACHE_BUCKET: agones-build-cache _HTMLTEST_CACHE_KEY: htmltest-0.10.1 _CPP_SDK_BUILD_CACHE_KEY: cpp-sdk-build diff --git a/install/helm/agones/Chart.yaml b/install/helm/agones/Chart.yaml index 76b78b5eb4..75e8e4f0de 100644 --- a/install/helm/agones/Chart.yaml +++ b/install/helm/agones/Chart.yaml @@ -15,8 +15,8 @@ # Declare variables to be passed into your templates. apiVersion: v1 -appVersion: "1.46.0" -version: 1.46.0 +appVersion: "1.47.0-dev" +version: 1.47.0-dev name: agones description: a library for hosting, running and scaling dedicated game servers on Kubernetes. keywords: diff --git a/install/helm/agones/values.yaml b/install/helm/agones/values.yaml index d587aecb7d..26f768211b 100644 --- a/install/helm/agones/values.yaml +++ b/install/helm/agones/values.yaml @@ -274,7 +274,7 @@ agones: topologySpreadConstraints: {} image: registry: us-docker.pkg.dev/agones-images/release - tag: 1.46.0 + tag: 1.47.0-dev controller: name: agones-controller pullPolicy: IfNotPresent diff --git a/install/yaml/install.yaml b/install/yaml/install.yaml index d66721b083..91339f4a67 100644 --- a/install/yaml/install.yaml +++ b/install/yaml/install.yaml @@ -50,7 +50,7 @@ metadata: namespace: agones-system labels: app: agones - chart: agones-1.46.0 + chart: agones-1.47.0-dev release: agones-manual heritage: Helm --- @@ -75,7 +75,7 @@ metadata: namespace: agones-system labels: app: agones - chart: agones-1.46.0 + chart: agones-1.47.0-dev release: agones-manual heritage: Helm --- @@ -100,7 +100,7 @@ metadata: namespace: default labels: app: agones - chart: agones-1.46.0 + chart: agones-1.47.0-dev release: agones-manual heritage: Helm --- @@ -112,7 +112,7 @@ metadata: namespace: agones-system labels: app: agones - chart: "agones-1.46.0" + chart: "agones-1.47.0-dev" release: "agones-manual" heritage: "Helm" type: Opaque @@ -129,7 +129,7 @@ metadata: namespace: agones-system labels: app: agones - chart: "agones-1.46.0" + chart: "agones-1.47.0-dev" release: "agones-manual" heritage: "Helm" data: @@ -145,7 +145,7 @@ metadata: namespace: agones-system labels: app: agones - chart: "agones-1.46.0" + chart: "agones-1.47.0-dev" release: "agones-manual" heritage: "Helm" data: @@ -161,7 +161,7 @@ metadata: namespace: agones-system labels: app: agones - chart: "agones-1.46.0" + chart: "agones-1.47.0-dev" release: "agones-manual" heritage: "Helm" data: @@ -191,7 +191,7 @@ metadata: labels: component: crd app: agones - chart: agones-1.46.0 + chart: agones-1.47.0-dev release: agones-manual heritage: Helm spec: @@ -5922,7 +5922,7 @@ metadata: labels: component: crd app: agones - chart: agones-1.46.0 + chart: agones-1.47.0-dev release: agones-manual heritage: Helm spec: @@ -6112,7 +6112,7 @@ metadata: labels: component: crd app: agones - chart: agones-1.46.0 + chart: agones-1.47.0-dev release: agones-manual heritage: Helm spec: @@ -11675,7 +11675,7 @@ metadata: labels: component: crd app: agones - chart: agones-1.46.0 + chart: agones-1.47.0-dev release: agones-manual heritage: Helm name: gameserverallocationpolicies.multicluster.agones.dev @@ -11754,7 +11754,7 @@ metadata: labels: component: crd app: agones - chart: agones-1.46.0 + chart: agones-1.47.0-dev release: agones-manual heritage: Helm spec: @@ -17453,7 +17453,7 @@ metadata: name: agones-allocator labels: app: agones - chart: agones-1.46.0 + chart: agones-1.47.0-dev release: agones-manual heritage: Helm rules: @@ -17483,7 +17483,7 @@ metadata: name: agones-controller labels: app: agones - chart: agones-1.46.0 + chart: agones-1.47.0-dev release: agones-manual heritage: Helm rules: @@ -17537,7 +17537,7 @@ metadata: name: agones-sdk labels: app: agones - chart: agones-1.46.0 + chart: agones-1.47.0-dev release: agones-manual heritage: Helm rules: @@ -17556,7 +17556,7 @@ metadata: name: agones-allocator labels: app: agones - chart: agones-1.46.0 + chart: agones-1.47.0-dev release: agones-manual heritage: Helm subjects: @@ -17575,7 +17575,7 @@ metadata: name: agones-controller-access labels: app: agones - chart: agones-1.46.0 + chart: agones-1.47.0-dev release: agones-manual heritage: Helm subjects: @@ -17627,7 +17627,7 @@ metadata: namespace: default labels: app: agones - chart: agones-1.46.0 + chart: agones-1.47.0-dev release: agones-manual heritage: Helm subjects: @@ -17661,7 +17661,7 @@ metadata: labels: agones.dev/role: controller app: agones - chart: agones-1.46.0 + chart: agones-1.47.0-dev release: agones-manual heritage: Helm spec: @@ -17695,7 +17695,7 @@ metadata: labels: agones.dev/role: extensions app: agones - chart: agones-1.46.0 + chart: agones-1.47.0-dev release: agones-manual heritage: Helm spec: @@ -17715,7 +17715,7 @@ metadata: labels: component: ping app: agones - chart: agones-1.46.0 + chart: agones-1.47.0-dev release: agones-manual heritage: Helm spec: @@ -17737,7 +17737,7 @@ metadata: labels: component: ping app: agones - chart: agones-1.46.0 + chart: agones-1.47.0-dev release: agones-manual heritage: Helm spec: @@ -17773,7 +17773,7 @@ metadata: labels: agones.dev/role: extensions app: agones - chart: agones-1.46.0 + chart: agones-1.47.0-dev release: agones-manual heritage: Helm spec: @@ -17810,7 +17810,7 @@ metadata: labels: component: allocator app: agones - chart: agones-1.46.0 + chart: agones-1.47.0-dev release: agones-manual heritage: Helm spec: @@ -17833,7 +17833,7 @@ metadata: labels: multicluster.agones.dev/role: allocator app: agones - chart: agones-1.46.0 + chart: agones-1.47.0-dev release: agones-manual heritage: Helm spec: @@ -17867,7 +17867,7 @@ metadata: labels: component: controller app: agones - chart: agones-1.46.0 + chart: agones-1.47.0-dev release: agones-manual heritage: Helm spec: @@ -17909,7 +17909,7 @@ spec: serviceAccountName: agones-controller containers: - name: agones-controller - image: "us-docker.pkg.dev/agones-images/release/agones-controller:1.46.0" + image: "us-docker.pkg.dev/agones-images/release/agones-controller:1.47.0-dev" imagePullPolicy: IfNotPresent securityContext: runAsNonRoot: true @@ -17923,7 +17923,7 @@ spec: - name: MAX_PORT value: "8000" - name: SIDECAR_IMAGE # overwrite the GameServer sidecar image that is used - value: "us-docker.pkg.dev/agones-images/release/agones-sdk:1.46.0" + value: "us-docker.pkg.dev/agones-images/release/agones-sdk:1.47.0-dev" - name: ALWAYS_PULL_SIDECAR # set the sidecar imagePullPolicy to Always value: "false" - name: SIDECAR_CPU_REQUEST @@ -18041,7 +18041,7 @@ metadata: labels: component: extensions app: agones - chart: agones-1.46.0 + chart: agones-1.47.0-dev release: agones-manual heritage: Helm spec: @@ -18085,7 +18085,7 @@ spec: terminationGracePeriodSeconds: 27 containers: - name: agones-extensions - image: "us-docker.pkg.dev/agones-images/release/agones-extensions:1.46.0" + image: "us-docker.pkg.dev/agones-images/release/agones-extensions:1.47.0-dev" imagePullPolicy: IfNotPresent securityContext: runAsNonRoot: true @@ -18195,7 +18195,7 @@ metadata: labels: component: ping app: agones - chart: agones-1.46.0 + chart: agones-1.47.0-dev release: agones-manual heritage: Helm spec: @@ -18230,7 +18230,7 @@ spec: priorityClassName: agones-system containers: - name: agones-ping - image: "us-docker.pkg.dev/agones-images/release/agones-ping:1.46.0" + image: "us-docker.pkg.dev/agones-images/release/agones-ping:1.47.0-dev" imagePullPolicy: IfNotPresent securityContext: runAsNonRoot: true @@ -18308,7 +18308,7 @@ spec: secretName: allocator-client-ca containers: - name: agones-allocator - image: "us-docker.pkg.dev/agones-images/release/agones-allocator:1.46.0" + image: "us-docker.pkg.dev/agones-images/release/agones-allocator:1.47.0-dev" imagePullPolicy: IfNotPresent securityContext: runAsNonRoot: true @@ -18395,7 +18395,7 @@ metadata: labels: component: controller app: agones - chart: agones-1.46.0 + chart: agones-1.47.0-dev release: agones-manual heritage: Helm spec: @@ -18446,7 +18446,7 @@ metadata: labels: component: controller app: agones - chart: agones-1.46.0 + chart: agones-1.47.0-dev release: agones-manual heritage: Helm webhooks: @@ -18489,7 +18489,7 @@ metadata: labels: component: controller app: agones - chart: agones-1.46.0 + chart: agones-1.47.0-dev release: agones-manual heritage: Helm webhooks: @@ -18534,7 +18534,7 @@ metadata: labels: component: controller app: agones - chart: agones-1.46.0 + chart: agones-1.47.0-dev release: agones-manual heritage: Helm webhooks: diff --git a/sdks/csharp/sdk/AgonesSDK.nuspec b/sdks/csharp/sdk/AgonesSDK.nuspec index 579a328c1f..04efe171c5 100644 --- a/sdks/csharp/sdk/AgonesSDK.nuspec +++ b/sdks/csharp/sdk/AgonesSDK.nuspec @@ -2,7 +2,7 @@ AgonesSDK - 1.46.0 + 1.47.0-dev Google LLC Google LLC false diff --git a/sdks/csharp/sdk/csharp-sdk.csproj b/sdks/csharp/sdk/csharp-sdk.csproj index c521f6c9c6..7c60092ad0 100644 --- a/sdks/csharp/sdk/csharp-sdk.csproj +++ b/sdks/csharp/sdk/csharp-sdk.csproj @@ -13,7 +13,7 @@ https://agones.dev http://www.apache.org/licenses/LICENSE-2.0 AgonesSDK - 1.46.0 + 1.47.0-dev agones, googleforgames, kuberenetes, multiplayer, gameservers agones.dev Debug;Release;DebugProtoGen diff --git a/sdks/nodejs/package-lock.json b/sdks/nodejs/package-lock.json index 2f844a6504..a39e42025b 100644 --- a/sdks/nodejs/package-lock.json +++ b/sdks/nodejs/package-lock.json @@ -1,12 +1,12 @@ { "name": "@google-cloud/agones-sdk", - "version": "1.46.0", + "version": "1.47.0-dev", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@google-cloud/agones-sdk", - "version": "1.46.0", + "version": "1.47.0-dev", "license": "Apache-2.0", "dependencies": { "@grpc/grpc-js": "1.10.9", diff --git a/sdks/nodejs/package.json b/sdks/nodejs/package.json index 77e946226d..0c93854d4e 100644 --- a/sdks/nodejs/package.json +++ b/sdks/nodejs/package.json @@ -26,5 +26,5 @@ "publishConfig": { "access": "public" }, - "version": "1.46.0" + "version": "1.47.0-dev" } diff --git a/sdks/rust/Cargo.toml b/sdks/rust/Cargo.toml index a131508b77..01933244ea 100644 --- a/sdks/rust/Cargo.toml +++ b/sdks/rust/Cargo.toml @@ -14,7 +14,7 @@ [package] name = "agones" -version = "1.46.0" +version = "1.47.0-dev" edition = "2021" description = "The Rust SDK for Agones." license = "Apache-2.0" diff --git a/sdks/unity/package.json b/sdks/unity/package.json index 9871a739d7..e2c6ff1708 100644 --- a/sdks/unity/package.json +++ b/sdks/unity/package.json @@ -1,6 +1,6 @@ { "name": "com.googleforgames.agones", - "version": "1.46.0", + "version": "1.47.0-dev", "displayName": "Agones Unity SDK", "description": "The Unity Gameserver SDK for Agones", "unity": "2019.1", diff --git a/test/sdk/go/Makefile b/test/sdk/go/Makefile index 86ba5dba7b..4ebb18e784 100644 --- a/test/sdk/go/Makefile +++ b/test/sdk/go/Makefile @@ -29,7 +29,7 @@ project_path := $(dir $(mkfile_path)) root_path = $(realpath $(project_path)/) # Because go mod init in the Dockerfile installs the most recently released version of Agones, this # will need to be built and pushed post-release. During DEV it will be built at DEV - 1. -release_version = 1.45.0 +release_version = 1.46.0 server_tag := $(REGISTRY)/sdk-client-test:$(release_version) # _____ _ diff --git a/test/upgrade/Makefile b/test/upgrade/Makefile index e7c014412f..ff27150294 100644 --- a/test/upgrade/Makefile +++ b/test/upgrade/Makefile @@ -24,7 +24,7 @@ # REGISTRY ?= -base_version = 1.46.0 +base_version = 1.47.0 # Version defaults to the short hash of the latest commit VERSION ?= $(base_version)-dev-$(shell git rev-parse --short=7 HEAD) server_tag := $(REGISTRY)/upgrade-test-controller:$(VERSION) diff --git a/test/upgrade/versionMap.yaml b/test/upgrade/versionMap.yaml index 7c8a1724cd..21846b47e0 100644 --- a/test/upgrade/versionMap.yaml +++ b/test/upgrade/versionMap.yaml @@ -19,7 +19,7 @@ metadata: name: version-map data: DevVersion: ${DevVersion} - ReleaseVersion: "1.45.0" + ReleaseVersion: "1.46.0" version-mappings.json: | { "k8sToAgonesVersions": { @@ -30,17 +30,20 @@ data: "1.43.0", "1.44.0", "1.45.0", + "1.46.0", "Dev" ], "1.30": [ "1.43.0", "1.44.0", "1.45.0", + "1.46.0", "Dev" ], "1.31": [ "1.44.0", "1.45.0", + "1.46.0", "Dev" ] }, @@ -69,6 +72,10 @@ data: "alphaGates": ["PlayerAllocationFilter", "PlayerTracking", "PortPolicyNone", "PortRanges", "RollingUpdateFix", "ScheduledAutoscaler"], "betaGates": ["AutopilotPassthroughPort", "CountsAndLists", "DisableResyncOnSDKServer", "GKEAutopilotExtendedDurationPods"] }, + "1.46.0": { + "alphaGates": ["PlayerAllocationFilter", "PlayerTracking", "PortPolicyNone", "PortRanges", "RollingUpdateFix", "ScheduledAutoscaler"], + "betaGates": ["AutopilotPassthroughPort", "CountsAndLists", "DisableResyncOnSDKServer", "GKEAutopilotExtendedDurationPods"] + }, "Dev": { "alphaGates": ["PlayerAllocationFilter", "PlayerTracking", "PortPolicyNone", "PortRanges", "RollingUpdateFix", "ScheduledAutoscaler"], "betaGates": ["AutopilotPassthroughPort", "CountsAndLists", "DisableResyncOnSDKServer", "GKEAutopilotExtendedDurationPods"] From 0366002c15abf2c2a2df8607baa42985feda1b41 Mon Sep 17 00:00:00 2001 From: Paulina Kalicka <71526180+paulinek13@users.noreply.github.com> Date: Mon, 6 Jan 2025 22:44:12 +0100 Subject: [PATCH 08/10] fix(lint): update `golangci-lint` configuration and resolve deprecation warnings (#4082) - Replace deprecated `run.skip-dirs` with `issues.exclude-dirs` - Update `output.format` to `output.formats` - Replace deprecated linters: - `megacheck` (split into `gosimple`, `staticcheck`, and `unused`) - `exportloopref` (no longer relevant since Go 1.22, replaced by `copyloopvar`) - Remove redundant variable copies flagged by `copyloopvar` (context: https://go.dev/blog/loopvar-preview) - Adjust `defer` statement comments in `localsdk.go` to use `staticcheck` instead of the deprecated `megacheck` Signed-off-by: Paulina Kalicka <71526180+paulinek13@users.noreply.github.com> --- .golangci.yml | 31 ++++++++++++------- pkg/allocation/converters/converter.go | 1 - pkg/allocation/converters/converter_test.go | 4 --- .../allocation_cache_test.go | 2 -- pkg/sdkserver/localsdk.go | 2 +- pkg/sdkserver/localsdk_test.go | 6 ---- test/e2e/fleet_test.go | 9 ------ test/e2e/gameserverallocation_test.go | 4 --- 8 files changed, 20 insertions(+), 39 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index fc917eb4e0..3539265b04 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -18,14 +18,6 @@ run: # list of build tags, all linters use it. Default is empty list. build-tags: - # which dirs to skip: they won't be analyzed; - # can use regexp here: generated.*, regexp is applied on full path; - # default value is empty list, but next dirs are always skipped independently - # from this option's value: - # vendor$, third_party$, testdata$, examples$, Godeps$, builtin$ - skip-dirs: - - test/sdk/restapi - # which files to skip: they will be analyzed, but issues from them # won't be reported. Default value is empty list, but there is # no need to include all autogenerated files, we confidently recognize @@ -34,8 +26,15 @@ run: modules-download-mode: vendor # output configuration options output: - # colored-line-number|line-number|json|tab|checkstyle, default is "colored-line-number" - format: colored-line-number + # the formats used to render issues + # formats: colored-line-number, line-number, json, colored-tab, + # tab, html, checkstyle, code-climate, junit-xml, + # junit-xml-extended, github-actions, teamcity, sarif + # output path can be either `stdout`, `stderr` + # or path to the file to write to + formats: + - format: colored-line-number + path: stdout # print lines of code with issue, default is true print-issued-lines: true @@ -45,20 +44,21 @@ output: linters: enable: - bodyclose + - copyloopvar - dupl - - exportloopref - goconst - gocritic - gocyclo - goimports + - gosimple - govet - - megacheck - misspell - nakedret - revive - staticcheck - unconvert - unparam + - unused linters-settings: govet: disable-all: false @@ -88,3 +88,10 @@ issues: - path: (.+)_test\.go|^test/|^cmd/.*|^pkg/apis/.* # fieldalignment is in the `govet` linter, so exclude based on text instead of all of govet text: '^fieldalignment: .*' + + # which dirs to exclude: issues from them won't be reported + # default dirs are skipped independently of this option's value + # (see exclude-dirs-use-default) + # default: [] + exclude-dirs: + - test/sdk/restapi diff --git a/pkg/allocation/converters/converter.go b/pkg/allocation/converters/converter.go index b4b80cfc68..3210a097f2 100644 --- a/pkg/allocation/converters/converter.go +++ b/pkg/allocation/converters/converter.go @@ -286,7 +286,6 @@ func convertInternalLabelSelectorToLabelSelector(in *metav1.LabelSelector) *pb.L func convertInternalLabelSelectorsToLabelSelectors(in []allocationv1.GameServerSelector) []*pb.GameServerSelector { var result []*pb.GameServerSelector for _, l := range in { - l := l c := convertInternalGameServerSelectorToGameServer(&l) result = append(result, c) } diff --git a/pkg/allocation/converters/converter_test.go b/pkg/allocation/converters/converter_test.go index 4a26e011fb..e3144a18c8 100644 --- a/pkg/allocation/converters/converter_test.go +++ b/pkg/allocation/converters/converter_test.go @@ -626,7 +626,6 @@ func TestConvertAllocationRequestToGameServerAllocation(t *testing.T) { }, } for _, tc := range tests { - tc := tc t.Run(tc.name, func(t *testing.T) { t.Parallel() @@ -834,7 +833,6 @@ func TestConvertGSAToAllocationRequest(t *testing.T) { }, } for _, tc := range tests { - tc := tc t.Run(tc.name, func(t *testing.T) { t.Parallel() @@ -1370,7 +1368,6 @@ func TestConvertGSAToAllocationResponse(t *testing.T) { }, } for _, tc := range tests { - tc := tc t.Run(tc.name, func(t *testing.T) { t.Parallel() runtime.FeatureTestMutex.Lock() @@ -1561,7 +1558,6 @@ func TestConvertAllocationResponseToGSA(t *testing.T) { }, } for _, tc := range tests { - tc := tc t.Run(tc.name, func(t *testing.T) { t.Parallel() runtime.FeatureTestMutex.Lock() diff --git a/pkg/gameserverallocations/allocation_cache_test.go b/pkg/gameserverallocations/allocation_cache_test.go index bde3bfc222..5904f12e2b 100644 --- a/pkg/gameserverallocations/allocation_cache_test.go +++ b/pkg/gameserverallocations/allocation_cache_test.go @@ -174,8 +174,6 @@ func TestAllocationCacheListSortedGameServers(t *testing.T) { } for k, v := range fixtures { - k := k - v := v t.Run(k, func(t *testing.T) { // deliberately not resetting the Feature state, to catch any possible unknown regressions with the // new feature flags diff --git a/pkg/sdkserver/localsdk.go b/pkg/sdkserver/localsdk.go index 2f5a2ce4ce..a4b8b3489f 100644 --- a/pkg/sdkserver/localsdk.go +++ b/pkg/sdkserver/localsdk.go @@ -882,7 +882,7 @@ func (l *LocalSDKServer) setGameServerFromFilePath(filePath string) error { l.logger.WithField("filePath", filePath).Info("Reading GameServer configuration") reader, err := os.Open(filePath) // nolint: gosec - defer reader.Close() // nolint: megacheck,errcheck + defer reader.Close() // nolint: staticcheck,errcheck if err != nil { return err diff --git a/pkg/sdkserver/localsdk_test.go b/pkg/sdkserver/localsdk_test.go index d103713902..593d2a1536 100644 --- a/pkg/sdkserver/localsdk_test.go +++ b/pkg/sdkserver/localsdk_test.go @@ -160,9 +160,6 @@ func TestLocalSDKServerSetLabel(t *testing.T) { } for k, v := range fixtures { - // pin variables here, see scopelint for details - k := k - v := v t.Run(k, func(t *testing.T) { ctx := context.Background() e := &sdk.Empty{} @@ -470,9 +467,6 @@ func TestLocalSDKServerPlayerConnectAndDisconnect(t *testing.T) { } for k, v := range fixtures { - // pin variables here, see https://github.com/kyoh86/scopelint for the details - k := k - v := v t.Run(k, func(t *testing.T) { var l *LocalSDKServer var err error diff --git a/test/e2e/fleet_test.go b/test/e2e/fleet_test.go index 365ead45a3..6306a608fe 100644 --- a/test/e2e/fleet_test.go +++ b/test/e2e/fleet_test.go @@ -303,7 +303,6 @@ func TestFleetScaleUpEditAndScaleDown(t *testing.T) { fixtures := []bool{true, false} for _, usePatch := range fixtures { - usePatch := usePatch t.Run("Use fleet Patch "+fmt.Sprint(usePatch), func(t *testing.T) { t.Parallel() ctx := context.Background() @@ -633,7 +632,6 @@ func TestScaleFleetUpAndDownWithGameServerAllocation(t *testing.T) { fixtures := []bool{false, true} for _, usePatch := range fixtures { - usePatch := usePatch t.Run("Use fleet Patch "+fmt.Sprint(usePatch), func(t *testing.T) { t.Parallel() @@ -714,8 +712,6 @@ func TestFleetUpdates(t *testing.T) { } for k, v := range fixtures { - k := k - v := v t.Run(k, func(t *testing.T) { t.Parallel() client := framework.AgonesClient.AgonesV1() @@ -1380,7 +1376,6 @@ func TestFleetRecreateGameServers(t *testing.T) { podClient := framework.KubeClient.CoreV1().Pods(framework.Namespace) for _, gs := range list.Items { - gs := gs pod, err := podClient.Get(ctx, gs.ObjectMeta.Name, metav1.GetOptions{}) assert.NoError(t, err) @@ -1392,7 +1387,6 @@ func TestFleetRecreateGameServers(t *testing.T) { }}, "gameserver shutdown": {f: func(t *testing.T, list *agonesv1.GameServerList) { for _, gs := range list.Items { - gs := gs var reply string reply, err := framework.SendGameServerUDP(t, &gs, "EXIT") if err != nil { @@ -1410,7 +1404,6 @@ func TestFleetRecreateGameServers(t *testing.T) { }}, "gameserver unhealthy": {f: func(t *testing.T, list *agonesv1.GameServerList) { for _, gs := range list.Items { - gs := gs var reply string reply, err := framework.SendGameServerUDP(t, &gs, "UNHEALTHY") if err != nil { @@ -1423,8 +1416,6 @@ func TestFleetRecreateGameServers(t *testing.T) { } for k, v := range tests { - k := k - v := v t.Run(k, func(t *testing.T) { t.Parallel() client := framework.AgonesClient.AgonesV1() diff --git a/test/e2e/gameserverallocation_test.go b/test/e2e/gameserverallocation_test.go index 9a09a3ce59..02d19e9c73 100644 --- a/test/e2e/gameserverallocation_test.go +++ b/test/e2e/gameserverallocation_test.go @@ -44,7 +44,6 @@ func TestCreateFleetAndGameServerAllocate(t *testing.T) { fixtures := []apis.SchedulingStrategy{apis.Packed, apis.Distributed} for _, strategy := range fixtures { - strategy := strategy t.Run(string(strategy), func(t *testing.T) { t.Parallel() ctx := context.Background() @@ -999,7 +998,6 @@ func TestMultiClusterAllocationOnLocalCluster(t *testing.T) { fixtures := []apis.SchedulingStrategy{apis.Packed, apis.Distributed} for _, strategy := range fixtures { - strategy := strategy t.Run(string(strategy), func(t *testing.T) { if strategy == apis.Distributed { framework.SkipOnCloudProduct(t, "gke-autopilot", "Autopilot does not support Distributed scheduling") @@ -1138,8 +1136,6 @@ func TestCreateFullFleetAndCantGameServerAllocate(t *testing.T) { fixtures := []apis.SchedulingStrategy{apis.Packed, apis.Distributed} for _, strategy := range fixtures { - strategy := strategy - t.Run(string(strategy), func(t *testing.T) { if strategy == apis.Distributed { framework.SkipOnCloudProduct(t, "gke-autopilot", "Autopilot does not support Distributed scheduling") From 97c1f518b7e106cabec57a7a8faf69e901079297 Mon Sep 17 00:00:00 2001 From: Mark Mandel Date: Thu, 9 Jan 2025 14:53:58 -0800 Subject: [PATCH 09/10] Docs: Update Player Tracking to use Lists (#4086) Updates the Player Tracking Guide to use Lists instead of the older Player Tracking functionality. Still kept the Player Tracking docs, to be removed when that feature gets removed. Closes #3653 --- build/includes/website.mk | 3 +- .../Integration Patterns/player-capacity.md | 70 ++++++++--- .../allocation-player-capacity-list.puml | 117 ++++++++++++++++++ .../allocation-player-capacity-list.puml.png | Bin 0 -> 190230 bytes ... allocation-player-capacity-tracking.puml} | 0 ...ocation-player-capacity-tracking.puml.png} | Bin 6 files changed, 171 insertions(+), 19 deletions(-) create mode 100644 site/static/diagrams/allocation-player-capacity-list.puml create mode 100644 site/static/diagrams/allocation-player-capacity-list.puml.png rename site/static/diagrams/{allocation-player-capacity.puml => allocation-player-capacity-tracking.puml} (100%) rename site/static/diagrams/{allocation-player-capacity.puml.png => allocation-player-capacity-tracking.puml.png} (100%) diff --git a/build/includes/website.mk b/build/includes/website.mk index 6673ab4c16..3e3df44ae5 100644 --- a/build/includes/website.mk +++ b/build/includes/website.mk @@ -80,7 +80,8 @@ site-images: ${site_path}/static/diagrams/system-diagram.dot.png site-images: $(site_path)/static/diagrams/gameserver-lifecycle.puml.png site-images: $(site_path)/static/diagrams/gameserver-reserved.puml.png site-images: $(site_path)/static/diagrams/canary-testing.puml.png -site-images: $(site_path)/static/diagrams/allocation-player-capacity.puml.png +site-images: $(site_path)/static/diagrams/allocation-player-capacity-tracking.puml.png +site-images: $(site_path)/static/diagrams/allocation-player-capacity-list.puml.png site-images: $(site_path)/static/diagrams/reusing-gameservers.puml.png site-images: $(site_path)/static/diagrams/high-density.puml.png diff --git a/site/content/en/docs/Integration Patterns/player-capacity.md b/site/content/en/docs/Integration Patterns/player-capacity.md index 59588e76ff..fd4c181c9a 100644 --- a/site/content/en/docs/Integration Patterns/player-capacity.md +++ b/site/content/en/docs/Integration Patterns/player-capacity.md @@ -7,31 +7,63 @@ description: > Find a `GameServer` that has room for a specific number of players. --- +Using this approach, we are able to be able to make an Allocation request that is akin to: "Find me a `GameServer` +that is already allocated, with room for _n_ number of players, and if one is not available, allocate me a `Ready` +`GameServer`". + +Common applications of this type of allocation are Lobby servers where players await matchmaking, or a +persistent world server where players connect and disconnect from a large map. + {{% pageinfo color="info" %}} -[Counters and Lists]({{< ref "/docs/Guides/counters-and-lists.md" >}}) will eventually replace the Beta functionality +[Counters and Lists]({{< ref "/docs/Guides/counters-and-lists.md" >}}) will eventually replace the Alpha functionality of Player Tracking, which will subsequently be removed from Agones. -If you are currently using this Beta feature, we would love for you to test (and ideally migrate to!) this new +If you are currently using this Alpha feature, we would love for you to test (and ideally migrate to!) this new functionality to Counters and Lists to ensure it meet all your needs. - -This document will be updated to utilise Counters and Lists in the near future. {{% /pageinfo %}} +## Tracking Players Through Lists + +{{< beta title="Counters And Lists" gate="CountsAndLists" >}} + + +Player Capacity Allocation Diagram + + +### Example `GameServerAllocation` + +The below allocation will attempt to find an already Allocated `GameServer` from the `Fleet` "simple-game-server" with +room for at least 10, and if it cannot find one, will allocate a Ready one from the same `Fleet`. + +```yaml +apiVersion: allocation.agones.dev/v1 +kind: GameServerAllocation +spec: + selectors: + - matchLabels: + agones.dev/fleet: simple-game-server + gameServerState: Allocated # check for Allocated first + lists: + players: + minAvailable: 10 # at least 10 players in available capacity + - matchLabels: + agones.dev/fleet: simple-game-server + lists: + players: + minAvailable: 10 # not required, since our GameServers start with empty lists, but a good practice +``` + +## Player Tracking + {{< alpha title="Player Tracking and Allocation Player Filter" gate="PlayerTracking,PlayerAllocationFilter" >}} -Using this approach, we are able to be able to make a request that is akin to: "Find me a `GameServer` that is already -allocated, with room for _n_ number of players, and if one is not available, allocate me a `Ready` `GameServer`". - -Common applications of this type of allocation are Lobby servers where players await matchmaking, or a -persistent world server where players connect and disconnect from a large map. - - -Player Capacity Allocation Diagram + +Player Capacity Allocation Diagram -## Example `GameServerAllocation` +### Example `GameServerAllocation` The below allocation will attempt to find an already Allocated `GameServer` from the `Fleet` "lobby" with room for 10 to 15 players, and if it cannot find one, will allocate a Ready one from the same `Fleet`. @@ -51,11 +83,13 @@ spec: agones.dev/fleet: lobby ``` -{{< alert title="Note" color="info">}} -We recommend doing an extra check when players connect to a `GameServer` that there is the expected player capacity -on the `GameServer` as there can be a small delay between a player connecting and it being reported -to Agones. -{{< /alert >}} +## Consistency + +Agones, and Kubernetes itself are built as eventually consistent, self-healing systems. To that end, it is worth +noting that there may be minor delays between each of the operations in either of the above flows. For example, +depending on the cluster load, it may take approximately a second for an SDK driven +[list change]({{% ref "/docs/Guides/Client SDKs/_index.md#counters-and-lists" %}}) on a `GameServer` record to be visible to the Agones +allocation system. We recommend building your integrations with Agones with this in mind. ## Next Steps diff --git a/site/static/diagrams/allocation-player-capacity-list.puml b/site/static/diagrams/allocation-player-capacity-list.puml new file mode 100644 index 0000000000..d47a09cfef --- /dev/null +++ b/site/static/diagrams/allocation-player-capacity-list.puml @@ -0,0 +1,117 @@ +@startuml +/' +Copyright 2024 Google LLC All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +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, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +'/ + +'https://plantuml.com/sequence-diagram + +actor "Player One" as Player1 +actor "Player Two" as Player2 +participant Matchmaker +participant Agones +participant "GameServer\nResource" as GameServer +box "Game Server Pod" + participant "Game Server\nProcess" as Binary + participant SDK +end box + +activate GameServer + +== GameServer Start == + +Agones -> GameServer: GameServer created through\na Fleet configuration +note left +Fleet configuration includes a players List with an initial empty value +and a capacity set to the total number of players that be can be hosted on a GameServer. +end note +activate GameServer +GameServer -> Binary: Agones creates a Pod with the\nconfigured Game Server Container +activate Binary +activate SDK +Binary -> SDK: SDK.WatchGameServer() +note right +Use the SDK Watch function +to watch and react to allocation +and List mutation events +end note + +Binary -> SDK: SDK.Ready() +note right + Call Ready() when the + Game Server can take player + connections and is able to + be allocated. +end note +GameServer <-- SDK: Update to Ready State + +== No allocated GameServers == + +Player1 -> Matchmaker: Requests a game session +Matchmaker -> Agones: Create: GameServerAllocation +note left + The GameServerAllocation is implemented to + optionally select an already allocated GameServer + with an available capacity under List players + of 1. If one cannot be found, allocate a Ready + GameServer instead. + + Since at this stage there are no Allocated GameServer + Agones will allocate a Ready GameServer. +end note +Agones -> GameServer: Finds a Ready GameServer,\nsets it to Allocated State +Matchmaker <-- Agones : GameServerAllocation is returned\nwith GameServer details\nincluding IP and port to connect to. +Player1 <-- Matchmaker : Returns GameServer connection information +Player1 -> Binary : Connects to game server process +Binary -> SDK : SDK.Beta().AppendListValue("players", id) +note left + Process calls AppendListValue(...) + on player client connection. +end note +GameServer <-- SDK : Appends id to status.lists["players"].values + +== Allocated GameServers with player(s) on them == + +Player2 -> Matchmaker: Requests a game session +Matchmaker -> Agones: Create: GameServerAllocation +note left + The GameServerAllocation will this time find the + Allocated GameServer with the players List + with available capacity, indicating it has room for + more players. +end note +Agones -> GameServer: Finds the Allocated GameServer where\nlength(status["players"].values) < status["rooms"].capacity. +note right + This is the same GameServer that "Player One" + is currently playing on. +end note +Matchmaker <-- Agones: returns Allocated GameServer record +Player2 <-- Matchmaker : Returns GameServer connection information +Player2 -> Binary : Connects to game server process +Binary -> SDK : SDK.Beta().AppendListValue("players", id) +GameServer <-- SDK : Appends id to status.lists["players"].values + +alt Player disconnects + Binary -> SDK: SDK.Beta().DeleteListValue("players", id) + SDK --> GameServer: Removes id from status.lists["players"].values +end alt +note right + When a player disconnects, + remove their id from the "players" List, + to increase the available capacity + on this GameServer. +end note + + +@enduml diff --git a/site/static/diagrams/allocation-player-capacity-list.puml.png b/site/static/diagrams/allocation-player-capacity-list.puml.png new file mode 100644 index 0000000000000000000000000000000000000000..9dc073925662ead029e286bb8afdfe9807e83b36 GIT binary patch literal 190230 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
ZmJY$IVv1iH8v*_6i`0&fc56$}CT-Da9Q}mB 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 Date: Mon, 13 Jan 2025 08:50:51 -0800 Subject: [PATCH 10/10] Docs: Counters with High Density (#4085) * Docs: Counters with High Density Implements documentation for the High Density Integration pattern using Counters. Leaves in the "label locking" technique as well, as it is still a valid technique! Closes #3655 * Updates based on review comments. --- build/includes/website.mk | 3 +- .../high-density-gameservers.md | 124 ++++++++++++++--- .../diagrams/high-density-counters.puml | 131 ++++++++++++++++++ .../diagrams/high-density-counters.puml.png | Bin 0 -> 215149 bytes ...sity.puml => high-density-label-lock.puml} | 0 ...l.png => high-density-label-lock.puml.png} | Bin 6 files changed, 236 insertions(+), 22 deletions(-) create mode 100644 site/static/diagrams/high-density-counters.puml create mode 100644 site/static/diagrams/high-density-counters.puml.png rename site/static/diagrams/{high-density.puml => high-density-label-lock.puml} (100%) rename site/static/diagrams/{high-density.puml.png => high-density-label-lock.puml.png} (100%) diff --git a/build/includes/website.mk b/build/includes/website.mk index 3e3df44ae5..1b9a5d154e 100644 --- a/build/includes/website.mk +++ b/build/includes/website.mk @@ -83,7 +83,8 @@ site-images: $(site_path)/static/diagrams/canary-testing.puml.png site-images: $(site_path)/static/diagrams/allocation-player-capacity-tracking.puml.png site-images: $(site_path)/static/diagrams/allocation-player-capacity-list.puml.png site-images: $(site_path)/static/diagrams/reusing-gameservers.puml.png -site-images: $(site_path)/static/diagrams/high-density.puml.png +site-images: $(site_path)/static/diagrams/high-density-label-lock.puml.png +site-images: $(site_path)/static/diagrams/high-density-counters.puml.png # generate pngs from dot files %.dot.png: %.dot diff --git a/site/content/en/docs/Integration Patterns/high-density-gameservers.md b/site/content/en/docs/Integration Patterns/high-density-gameservers.md index 5cdfb8fe16..36a7a24d06 100644 --- a/site/content/en/docs/Integration Patterns/high-density-gameservers.md +++ b/site/content/en/docs/Integration Patterns/high-density-gameservers.md @@ -13,34 +13,113 @@ use of resources to run multiple concurrent game sessions from within a single ` The tradeoff here is that this requires more management on behalf of the integrated game server process and external systems, since it works around the common Kubernetes and/or Agones container lifecycle. -Utilising the new allocation `gameServerState` filter as well as the existing ability to edit the +Here are two different approaches to solving this problem with Agones: + +## Session/Room Counters + +{{< beta title="Counters And Lists" gate="CountsAndLists" >}} + +Utilising the allocation `gameServerState` filter as well as the new ability to add Counter capacity and counts to +`GameServer` records at both [allocation time]({{% ref "/docs/Reference/gameserverallocation.md" %}}), and from +within the game server process, [via the SDK][sdk-counter], means Agones is able to atomically track how many sessions +are available on a given a `GameServer` from the list of potentially Ready or Allocated `GameServers` when making an +allocation request. + +By also using Counters, we can provide Agones the allocation metadata it needs to pack appropriately across the high +density `GameServer` instances as well. + + +High Density Allocation Diagram (Session Counters) + + +### Example `GameServerAllocation` + +The below `Allocation` will first attempt to find a `GameServer` from the `Fleet` `simple-game-server` that is already +Allocated and also available capacity under the `rooms` Counter. + +If an Allocated `GameServer` does not exist with available capacity, then use the next selector to allocate a Ready +`GameServer` from the `simple-game-server` `Fleet`. + +Whichever condition is met, once allocation is made against a `GameServer`, the `rooms` Counter will be incremented by +one, thereby decrementing the available capacity of the `room` Counter on the `GameServer` instance. Generally +speaking, once there is no available capacity on the most full `GameServer`, the allocation will prioritise the next +least full `GameServer` to ensure packing across `GameServer` instances. + +It will then be up to the game server process to decrement the `rooms` Counter via the SDK when a session comes to end, +to increase the amount of available capacity within the `GameServer` instance. + +```yaml +apiVersion: allocation.agones.dev/v1 +kind: GameServerAllocation +spec: + scheduling: Packed + priorities: + - type: Counter + key: rooms + order: Ascending # Ensures the "rooms" with the least available capacity (most full rooms) get prioritised. + selectors: + # Check if there is an already Allocated GameServer with room for at least one more session. + - gameServerState: Allocated + matchLabels: + agones.dev/fleet: simple-game-server + counters: + rooms: + minAvailable: 1 + # If we can't find an Allocated GameServer, then go get a `Ready` `GameServer`. + - gameServerState: Ready + matchLabels: + agones.dev/fleet: simple-game-server + counters: + rooms: + minAvailable: 1 # not 100% necessary, since our Ready GameServers don't change their count value, but a good practice. + counters: + rooms: + action: Increment + amount: 1 # Bump up the room count by one on Allocation. +``` + +{{% alert title="Note" color="info" %}} +When using `Packed` `scheduling`, Counter and List `priorities` are used as a tiebreaker within nodes, to ensure packing +across the nodes is done as efficiently as possible first, and the packing within each `GameServer` on the node is done +second. + +For a `Distributed` `scheduling` implementation, Counter and List `priorities` are the only sorting that occurs across +the potential set of GameServers that are to be allocated. +{{% /alert %}} + +## GameServer Label Locking + +Utilising the allocation `gameServerState` filter as well as the existing ability to edit the `GameServer` labels at both [allocation time]({{% ref "/docs/Reference/gameserverallocation.md" %}}), and from -within the game server process, [via the SDK][sdk], +within the game server process, [via the SDK][sdk-label], means Agones is able to atomically remove a `GameServer` from the list of potentially allocatable `GameServers` at allocation time, and then return it back into the pool of allocatable `GameServers` if and when the -game server process deems that is has room to host another game session. +game server process deems that is has room to host another game session. - -High Density Allocation Diagram +The downside to this approach is that there is no packing across re-allocated `GameServer` instances, but it is a very +flexible approach if utilising Counters or Lists is not a viable option. + + +High Density Allocation Diagram (Label Lock) {{< alert title="Info" color="info">}} To watch for Allocation events, there is the initial `GameServer.status.state` change from `Ready` to `Allocated`, but it is also useful to know that the value of `GameServer.metadata.annotations["agones.dev/last-allocated"]` will -change as it is set by Agones with each allocation with the current timestamp, regardless of if there +change as it is set by Agones with each allocation with the current timestamp, regardless of if there is a state change or not. {{< /alert >}} -## Example `GameServerAllocation` +### Example `GameServerAllocation` -The below `Allocation` will first attempt to find a `GameServer` from the `Fleet` `simple-udp` that is already +The below `Allocation` will first attempt to find a `GameServer` from the `Fleet` `simple-game-server` that is already Allocated and also has the label `agones.dev/sdk-gs-session-ready` with the value of `true`. The above condition indicates that the matching game server process behind the matched `GameServer` record is able to accept another game session at this time. If an Allocated `GameServer` does not exist with the desired labels, then use the next selector to allocate a Ready -`GameServer` from the `simple-udp` `Fleet`. +`GameServer` from the `simple-game-server` `Fleet`. Whichever condition is met, once allocation is made against a `GameServer`, its label of `agones.dev/sdk-gs-session-ready` will be set to the value of `false` and it will no longer match the first selector, thereby removing it from any @@ -56,34 +135,37 @@ kind: GameServerAllocation spec: selectors: - matchLabels: - agones.dev/fleet: simple-udp + agones.dev/fleet: simple-game-server agones.dev/sdk-gs-session-ready: "true" # this is important gameServerState: Allocated # new state filter: allocate from Allocated servers - matchLabels: - agones.dev/fleet: simple-udp + agones.dev/fleet: simple-game-server gameServerState: Ready # Allocate out of the Ready Pool (which would be default, so backward compatible) metadata: labels: agones.dev/sdk-gs-session-ready: "false" # this removes it from the pool ``` -{{< alert title="Info" color="info">}} +{{% alert title="Info" color="info" %}} It's important to note that the labels that the `GameServer` process use to add itself back into the pool of allocatable instances, must start with the prefix `agones.dev/sdk-`, since only labels that have this prefix are -available to be [updated from the SDK][sdk]. -{{< /alert >}} +available to be [updated from the SDK]({{% ref "/docs/Guides/Client SDKs/_index.md#setlabelkey-value" %}}). +{{% /alert %}} ## Consistency -Agones, and Kubernetes itself are built as eventually consistent, self-healing systems. To that end, it is worth -noting that there may be minor delays between each of the operations in the above flow. For example, depending on the -cluster load, it may take up to a second for an [SDK driven label change][sdk] on a `GameServer` record to be -visible to the Agones allocation system. We recommend building your integrations with Agones with this in mind. +Agones, and Kubernetes itself are built as eventually consistent, self-healing systems. To that end, it is worth +noting that there may be minor delays between each of the operations in either of the above flows. For example, +depending on the cluster load, it may take approximately a second for an SDK driven +[counter change][sdk-counter] or [label change][sdk-label] on a `GameServer` record to be visible to the Agones +allocation system. We recommend building your integrations with Agones with this in mind. ## Next Steps -* View the details about [using the SDK][sdk] to set - labels on the `GameServer`. +* Read the [Counters and Lists]({{< ref "/docs/Guides/counters-and-lists.md" >}}) guide. +* View the details about [using the SDK]({{% ref "/docs/Guides/Client SDKs/_index.md#setlabelkey-value" %}}) to change + values on the `GameServer`. * Check all the options available on [`GameServerAllocation`]({{% ref "/docs/Reference/gameserverallocation.md" %}}). -[sdk]: {{% ref "/docs/Guides/Client SDKs/_index.md#setlabelkey-value" %}} +[sdk-label]: {{% ref "/docs/Guides/Client SDKs/_index.md#setlabelkey-value" %}} +[sdk-counter]: {{% ref "/docs/Guides/Client SDKs/_index.md#counters-and-lists" %}} diff --git a/site/static/diagrams/high-density-counters.puml b/site/static/diagrams/high-density-counters.puml new file mode 100644 index 0000000000..abc963320d --- /dev/null +++ b/site/static/diagrams/high-density-counters.puml @@ -0,0 +1,131 @@ +@startuml +/' +Copyright 2024 Google LLC All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +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, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +'/ + +participant Matchmaker +participant Agones +participant "Game Server\nProcess" as Binary +participant SDK +participant "GameServer\nResource" as GameServer +box "Game Server Pod" + participant Binary + participant SDK +end box + +== GameServer Start == + +Agones -> GameServer: GameServer created through\na Fleet configuration +note left +Fleet configuration includes a rooms Counter with an initial value of 0 +and a capacity set to the total number of sessions that be can be hosted on a GameServer. +end note +activate GameServer +GameServer -> Binary: Agones creates a Pod with the\nconfigured Game Server Container +activate Binary +activate SDK +Binary -> SDK: SDK.WatchGameServer() +note right +Use the SDK Watch function +to watch and react to allocation +events +end note + +Binary -> SDK: SDK.Ready() +note right + Call Ready() when the + Game Server can take player + connections and is able to + be allocated. +end note +GameServer <-- SDK: Update to Ready State + +== No allocated GameServers == + +Matchmaker -> Agones: Create: GameServerAllocation +note left + The GameServerAllocation is implemented to + optionally select an already allocated GameServer + with a available capacity under Counter rooms + of 1. If one cannot be found, allocate a Ready + GameServer instead. + + Since at this stage there are no Allocated GameServer + Agones will allocate a Ready GameServer. +end note +Agones -> GameServer: Finds a Ready GameServer.\n\nSets status.state to Allocated State\nand status.counters["rooms"}.count++\nand metadata.annotations["agones.dev/last-allocated"] = current timestamp +note left +By incrementing the rooms counter by one, +this reduces the available capacity for this +GameServer by one. +end note +Matchmaker <-- Agones : GameServerAllocation is returned\nwith GameServer details\nincluding IP and port to connect to. + +SDK --> Binary: Sends SDK.WatchGameServer()\nevent for Allocation. +note right +This initial allocation can be determined +as a change in GameServer.status.state +from Ready to Allocated, as well as an +increment of one on +GameServer.status.counters["rooms"].count +end note + +== Allocated GameServers with available capacity for more sessions == + +Matchmaker -> Agones: Create: GameServerAllocation +note left + The GameServerAllocation will this time find the + Allocated GameServer with the rooms Counter + with available capacity, inculcating it has room for + more game sessions. +end note +Agones -> GameServer: Finds the Allocated GameServer where\nstatus["rooms"].count < status["rooms"].capacity.\n\nSets status.counters["rooms"}.count++\nand metadata.annotations["agones.dev/last-allocated"] = current timestamp +note right + This is a GameServer that has room + for another concurrent game session. +end note +Matchmaker <-- Agones: returns Allocated GameServer record + +SDK --> Binary: Sends SDK.WatchGameServer()\nevent for Allocation. +note right +The game server process can watch for an +increment of status.counters["rooms"}.count and/or +change in metadata.annotations["agones.dev/last-allocated"] +to determine if there is an allocation event. +end note + +alt GameServer finishes a game session + Binary -> SDK: SDK.Beta().DecrementCounter("rooms", 1) + SDK --> GameServer: Sets status["rooms"].count-- +end alt +note right + When a session ends, decrement the session counter + to increase the available capacity on this GameServer. +end note + +== GameServer has completed n number of complete sessions == + +Binary -> SDK: SDK.Shutdown() +note left +The GameServer process tracks the total number of sessions +that it hosts, and after n number, calls Shutdown() +to delete the GameServer resource and backing Pod. +end note +SDK --> GameServer: Update to Shutdown state. +Agones -> GameServer: Deletes GameServer resource and backing Pod. +destroy Binary +destroy SDK +destroy GameServer +@enduml diff --git a/site/static/diagrams/high-density-counters.puml.png b/site/static/diagrams/high-density-counters.puml.png new file mode 100644 index 0000000000000000000000000000000000000000..c8267b334fbf8dfada75eafc53d4331038d5109e GIT binary patch literal 215149 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

yh7n`148*Er21wdmU)|ppAL+)~(LC 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 Ky5z%WZ~O~dq;x+3 literal 0 HcmV?d00001 diff --git a/site/static/diagrams/high-density.puml b/site/static/diagrams/high-density-label-lock.puml similarity index 100% rename from site/static/diagrams/high-density.puml rename to site/static/diagrams/high-density-label-lock.puml diff --git a/site/static/diagrams/high-density.puml.png b/site/static/diagrams/high-density-label-lock.puml.png similarity index 100% rename from site/static/diagrams/high-density.puml.png rename to site/static/diagrams/high-density-label-lock.puml.png