Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pre-Scala 2.13: Upgrade deps to versions that are also available on Scala 2.13 (redux) #532

Merged
merged 1 commit into from
Sep 18, 2024

Conversation

rtyley
Copy link
Member

@rtyley rtyley commented Sep 11, 2024

This is a repeat of the work in #522, previously reverted with #531 due to a runtime SLF4J error on startup (literally, running sbt run is enough to immediately expose this error, we should have done that!):

SLF4J(W): No SLF4J providers were found.
SLF4J(W): Defaulting to no-operation (NOP) logger implementation
SLF4J(W): See https://www.slf4j.org/codes.html#noProviders for further details.
SLF4J(W): Class path contains SLF4J bindings targeting slf4j-api versions 1.7.x or earlier.
SLF4J(W): Ignoring binding found at [jar:file:/usr/share/tag-manager/lib/ch.qos.logback.logback-classic-1.2.11.jar!/org>
SLF4J(W): See https://www.slf4j.org/codes.html#ignoredBindings for an explanation.
Oops, cannot start the server.
java.lang.ClassCastException: org.slf4j.helpers.NOPLoggerFactory cannot be cast to ch.qos.logback.classic.LoggerContext

The error occurred because we were including an update to content-api-client-default that took it past version v28.0.0, which upgraded slf4j-api to v2, which no longer honours the old static binder mechanism for finding logging providers. Logback v1.3+ copes with this, and is used by Play v2.9. However, Play 2.9 requires Scala 2.13 - and we are not yet on Scala 2.13! - so I'm going to just stick to CAPI client v27.0.0 for this PR.

Original PR description

As preparation for Scala 2.13, this updates all dependencies so that they are at versions that are available for Scala 2.13 as well as Scala 2.12.

As ScalaTest is updated to ScalaTest v3.2, we had to do some code updates to cope with class/package changes. We did these manually, though later we remembered that maybe we could have used Scalafix, as in this example here:

The steps would have been:

  • add sbt-scalafix plugin to user-level sbt plugins file
    • addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.12.1")
  • checked out main branch, still scala 2.12 (and so already compiled successfully)
  • launch sbt
  • run scalafixEnable
  • run scalafixAll dependency:[email protected]:autofix:3.1.0.1
  • increment scalatest dependency

Testing

This has been successfully deployed to https://tagmanager.code.dev-gutools.co.uk/ (which we didn't do with #522!) and the tool looks good:

image

…cala 2.13

This is a repeat of the work in #522,
previously reverted with #531 due to
a runtime SLF4J error on startup:

```
java.lang.ClassCastException: org.slf4j.helpers.NOPLoggerFactory cannot be cast to ch.qos.logback.classic.LoggerContext:
```

This error occurred because we were including an update to `content-api-client-default`
that took it past version v28.0.0 (https://github.com/guardian/content-api-scala-client/releases/tag/v28.0.0),
which upgraded `slf4j-api` to v2, which no longer honours the old static binder
mechanism for finding logging providers (https://www.slf4j.org/codes.html#ignoredBindings).
Logback v1.3+ copes with this, and is used by Play v2.9. However, upgrading Play
is another chunk of work, so I'm going to avoid that with this change, and stick to
CAPI client v27.0.0.

### Description of original work

As preparation for Scala 2.13, this updates all dependencies so that they
are at versions that are available for Scala 2.13 as well as Scala 2.12.

As ScalaTest is updated to ScalaTest v3.2, we had to do some code updates
to cope with class/package changes. We did these manually, though later
we remembered that maybe we could have used Scalafix, as in this example here:

* guardian/content-api#2893

The steps would have been:

- add sbt-scalafix plugin to user-level sbt plugins file
  - addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.12.1")
- checked out main branch, still scala 2.12 (and so already compiled successfully)
- launch sbt
- run `scalafixEnable`
- run `scalafixAll dependency:[email protected]:autofix:3.1.0.1`
- increment scalatest dependency
@rtyley rtyley changed the title Pre-Scala 2.13: Upgrade deps to versions that are also available on Scala 2.13 Pre-Scala 2.13: Upgrade deps to versions that are also available on Scala 2.13 (redux) Sep 11, 2024
@rtyley rtyley marked this pull request as ready for review September 11, 2024 10:30
@rtyley rtyley added the Scala 2.13 See https://github.com/guardian/maintaining-scala-projects/issues/2 label Sep 13, 2024
@rtyley rtyley merged commit e5d32b6 into main Sep 18, 2024
3 checks passed
@rtyley rtyley deleted the pre-scala-2.13-upgrade-dependencies-redux branch September 18, 2024 11:35
@prout-bot
Copy link

Seen on PROD (merged by @rtyley 5 minutes and 27 seconds ago) Please check your changes!

@rtyley
Copy link
Member Author

rtyley commented Sep 18, 2024

This has successfully deployed to PROD, and I've verified that I can still re-authenticate.

@rtyley rtyley mentioned this pull request Oct 22, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Scala 2.13 See https://github.com/guardian/maintaining-scala-projects/issues/2 Seen-on-PROD
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants