From 6b46b07c37cee154e355a45f8b1f36a9335d6b9b Mon Sep 17 00:00:00 2001 From: Jorge Azevedo Date: Fri, 13 Feb 2026 20:36:18 +0000 Subject: [PATCH 1/7] chore: Upgrade to Java 21 --- .tool-versions | 2 +- app/agent/origin.scala | 2 ++ cdk/lib/prism.ts | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.tool-versions b/.tool-versions index 58dcdfd2..cff4b120 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1 +1 @@ -java corretto-11.0.25.9.1 +java corretto-21.0.3.9.1 diff --git a/app/agent/origin.scala b/app/agent/origin.scala index d6bea311..f1a55753 100644 --- a/app/agent/origin.scala +++ b/app/agent/origin.scala @@ -2,6 +2,7 @@ package agent import java.io.FileNotFoundException import java.net.{URI, URL, URLConnection, URLStreamHandler} +import scala.annotation.nowarn import collectors.Instance import conf.{AWS, PrismConfiguration} @@ -233,6 +234,7 @@ case class JsonOrigin( } def data(resource: ResourceType): JsValue = { + @nowarn("cat=deprecation") val source: Source = new URI( url.replace("%resource%", resource.name) ) match { diff --git a/cdk/lib/prism.ts b/cdk/lib/prism.ts index f18d3dc8..5966f610 100644 --- a/cdk/lib/prism.ts +++ b/cdk/lib/prism.ts @@ -89,7 +89,7 @@ export class Prism extends GuStack { applicationLogging: { enabled: true, }, - imageRecipe: 'arm64-focal-java11-deploy-infrastructure', + imageRecipe: 'arm64-noble-java21-deploy-infrastructure', instanceType: InstanceType.of(InstanceClass.T4G, InstanceSize.MEDIUM), userData, certificateProps: { From 49bf292709396180a241652d1c03a7d15f02389c Mon Sep 17 00:00:00 2001 From: Jorge Azevedo Date: Fri, 13 Feb 2026 20:58:51 +0000 Subject: [PATCH 2/7] chore: Use major Java version only in .tool-versions --- .tool-versions | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tool-versions b/.tool-versions index cff4b120..0ef52de3 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1 +1 @@ -java corretto-21.0.3.9.1 +java corretto-21 From 87a842e95911ed94d1af127fdeb441db3d9cdc0c Mon Sep 17 00:00:00 2001 From: Jorge Azevedo Date: Fri, 13 Feb 2026 21:26:13 +0000 Subject: [PATCH 3/7] chore: Remove stale .java-version file --- .java-version | 1 - cdk/lib/prism.ts | 24 ++++++++++++------------ 2 files changed, 12 insertions(+), 13 deletions(-) delete mode 100644 .java-version diff --git a/.java-version b/.java-version deleted file mode 100644 index 3a560a7e..00000000 --- a/.java-version +++ /dev/null @@ -1 +0,0 @@ -11.0.20 diff --git a/cdk/lib/prism.ts b/cdk/lib/prism.ts index 5966f610..caa0201d 100644 --- a/cdk/lib/prism.ts +++ b/cdk/lib/prism.ts @@ -1,29 +1,29 @@ import { AccessScope } from '@guardian/cdk/lib/constants'; import { - GuDistributionBucketParameter, - GuPrivateConfigBucketParameter, + GuDistributionBucketParameter, + GuPrivateConfigBucketParameter, } from '@guardian/cdk/lib/constructs/core'; import type { GuStackProps } from '@guardian/cdk/lib/constructs/core/stack'; import { GuStack } from '@guardian/cdk/lib/constructs/core/stack'; import { - GuAllowPolicy, - GuAssumeRolePolicy, - GuGetS3ObjectsPolicy, + GuAllowPolicy, + GuAssumeRolePolicy, + GuGetS3ObjectsPolicy, } from '@guardian/cdk/lib/constructs/iam'; import { GuEc2AppExperimental } from '@guardian/cdk/lib/experimental/patterns/ec2-app'; import type { App } from 'aws-cdk-lib'; import { Duration } from 'aws-cdk-lib'; import type { CfnAutoScalingGroup } from 'aws-cdk-lib/aws-autoscaling'; import { - BlockDeviceVolume, - EbsDeviceVolumeType, + BlockDeviceVolume, + EbsDeviceVolumeType, } from 'aws-cdk-lib/aws-autoscaling'; import { - InstanceClass, - InstanceSize, - InstanceType, - Peer, - UserData, + InstanceClass, + InstanceSize, + InstanceType, + Peer, + UserData, } from 'aws-cdk-lib/aws-ec2'; import { Bucket } from 'aws-cdk-lib/aws-s3'; From f51521b94ddbd128d3970b0a6de189419052d74d Mon Sep 17 00:00:00 2001 From: Jorge Azevedo Date: Fri, 13 Feb 2026 21:36:28 +0000 Subject: [PATCH 4/7] chore: Fix prettier formatting --- cdk/lib/prism.ts | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/cdk/lib/prism.ts b/cdk/lib/prism.ts index caa0201d..5966f610 100644 --- a/cdk/lib/prism.ts +++ b/cdk/lib/prism.ts @@ -1,29 +1,29 @@ import { AccessScope } from '@guardian/cdk/lib/constants'; import { - GuDistributionBucketParameter, - GuPrivateConfigBucketParameter, + GuDistributionBucketParameter, + GuPrivateConfigBucketParameter, } from '@guardian/cdk/lib/constructs/core'; import type { GuStackProps } from '@guardian/cdk/lib/constructs/core/stack'; import { GuStack } from '@guardian/cdk/lib/constructs/core/stack'; import { - GuAllowPolicy, - GuAssumeRolePolicy, - GuGetS3ObjectsPolicy, + GuAllowPolicy, + GuAssumeRolePolicy, + GuGetS3ObjectsPolicy, } from '@guardian/cdk/lib/constructs/iam'; import { GuEc2AppExperimental } from '@guardian/cdk/lib/experimental/patterns/ec2-app'; import type { App } from 'aws-cdk-lib'; import { Duration } from 'aws-cdk-lib'; import type { CfnAutoScalingGroup } from 'aws-cdk-lib/aws-autoscaling'; import { - BlockDeviceVolume, - EbsDeviceVolumeType, + BlockDeviceVolume, + EbsDeviceVolumeType, } from 'aws-cdk-lib/aws-autoscaling'; import { - InstanceClass, - InstanceSize, - InstanceType, - Peer, - UserData, + InstanceClass, + InstanceSize, + InstanceType, + Peer, + UserData, } from 'aws-cdk-lib/aws-ec2'; import { Bucket } from 'aws-cdk-lib/aws-s3'; From 0b8f67148b78836f604f58040d2cd05bd7234406 Mon Sep 17 00:00:00 2001 From: Jorge Azevedo Date: Fri, 13 Feb 2026 22:02:52 +0000 Subject: [PATCH 5/7] docs: Update Java version to 21 in README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c93f44b9..22107d80 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ Running locally ------------------------------ 1. Get Deploy Tools Janus credentials. 2. Run `./scripts/setup` -3. Ensure you are running Java 11 +3. Ensure you are running Java 21 4. Run `sbt` 5. Start the application: `sbt:prism> run` From 2471f02a30d0999904a9a5862f4ffb539812e77e Mon Sep 17 00:00:00 2001 From: Jorge Azevedo Date: Fri, 13 Feb 2026 22:12:16 +0000 Subject: [PATCH 6/7] chore: Fix deprecated URL constructor for Java 21 compatibility - Replace deprecated new URL() constructor with getClass.getResource() - Remove unused @nowarn annotation and classpathHandler --- app/agent/origin.scala | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/app/agent/origin.scala b/app/agent/origin.scala index f1a55753..7c169e72 100644 --- a/app/agent/origin.scala +++ b/app/agent/origin.scala @@ -1,8 +1,7 @@ package agent import java.io.FileNotFoundException -import java.net.{URI, URL, URLConnection, URLStreamHandler} -import scala.annotation.nowarn +import java.net.URI import collectors.Instance import conf.{AWS, PrismConfiguration} @@ -207,17 +206,6 @@ case class JsonOrigin( crawlRate: Map[String, CrawlRate] ) extends Origin with Logging { - private val classpathHandler = new URLStreamHandler { - override def openConnection(u: URL): URLConnection = { - Option(getClass.getResource(u.getPath)) - .map(_.openConnection()) - .getOrElse { - throw new FileNotFoundException( - "%s not found on classpath" format u.getPath - ) - } - } - } def credsFromS3Url(url: URI): AwsCredentialsProvider = { Option(url.getUserInfo) match { @@ -234,15 +222,15 @@ case class JsonOrigin( } def data(resource: ResourceType): JsValue = { - @nowarn("cat=deprecation") val source: Source = new URI( url.replace("%resource%", resource.name) ) match { case classPathLocation if classPathLocation.getScheme == "classpath" => - Source.fromURL( - new URL(null, classPathLocation.toString, classpathHandler), - "utf-8" - ) + val path = classPathLocation.getPath + val resourceURL = Option(getClass.getResource(path)).getOrElse { + throw new FileNotFoundException(s"$path not found on classpath") + } + Source.fromURL(resourceURL, "utf-8") case s3Location if s3Location.getScheme == "s3" => val s3Client = S3Client.builder .credentialsProvider(credsFromS3Url(s3Location)) From 5d803d254c88ba84578e909c080f3c57962c6a01 Mon Sep 17 00:00:00 2001 From: Jorge Azevedo Date: Fri, 20 Feb 2026 15:16:04 +0000 Subject: [PATCH 7/7] fix: Use jammy instead of noble for imageRecipe --- cdk/lib/prism.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cdk/lib/prism.ts b/cdk/lib/prism.ts index 5966f610..49ee1da1 100644 --- a/cdk/lib/prism.ts +++ b/cdk/lib/prism.ts @@ -89,7 +89,7 @@ export class Prism extends GuStack { applicationLogging: { enabled: true, }, - imageRecipe: 'arm64-noble-java21-deploy-infrastructure', + imageRecipe: 'arm64-jammy-java21-deploy-infrastructure', instanceType: InstanceType.of(InstanceClass.T4G, InstanceSize.MEDIUM), userData, certificateProps: {