@@ -22,6 +22,7 @@ import (
2222 "net/http"
2323 "os"
2424
25+ "github.com/blang/semver/v4"
2526 admissionv1 "k8s.io/api/admission/v1"
2627 corev1 "k8s.io/api/core/v1"
2728 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3637 runtimeScheme = runtime .NewScheme ()
3738 codecs = serializer .NewCodecFactory (runtimeScheme )
3839 deserializer = codecs .UniversalDeserializer ()
40+ Version string
3941)
4042
4143var projectAliases = []string {
@@ -309,9 +311,49 @@ func needsEnvVar(c corev1.Container, name string) bool {
309311 return true
310312}
311313
314+ func updateCheck () error {
315+ type release struct {
316+ Name string `json:"name"`
317+ }
318+
319+ var releases []release
320+
321+ resp , err := http .Get ("https://storage.googleapis.com/minikube-gcp-auth/releases.json" )
322+ if err != nil {
323+ return fmt .Errorf ("failed to get releases file: %v" , err )
324+ }
325+ defer resp .Body .Close ()
326+ if err := json .NewDecoder (resp .Body ).Decode (& releases ); err != nil {
327+ return fmt .Errorf ("failed to decode releases file: %v" , err )
328+ }
329+ if len (releases ) == 0 {
330+ return fmt .Errorf ("no releases found in releases file" )
331+ }
332+
333+ currVersion , err := semver .ParseTolerant (Version )
334+ if err != nil {
335+ return fmt .Errorf ("unable to parse current version: %v" , err )
336+ }
337+ name := releases [0 ].Name
338+ latestVersion , err := semver .ParseTolerant (name )
339+ if err != nil {
340+ return fmt .Errorf ("unable to parse latest version: %v" , err )
341+ }
342+
343+ if currVersion .LT (latestVersion ) {
344+ log .Printf ("gcp-auth-webhook %s is available!" , name )
345+ }
346+
347+ return nil
348+ }
349+
312350func main () {
313351 log .Print ("GCP Auth Webhook started!" )
314352
353+ if err := updateCheck (); err != nil {
354+ log .Println (err )
355+ }
356+
315357 mux := http .NewServeMux ()
316358
317359 mux .HandleFunc ("/mutate" , mutateHandler )
0 commit comments