Release TeX Live 2026.1 as the default image (#36382)

* feat: releasing 2026.1 texlive to general release and promoting to default image

* fix: update clsi image tests so their likeness calcs work locally on different archs

* feat: updating epstopdf fixture and adding note to texlive Dockerfile used for codespaces

* fix: use generated image-eps-convert instead of fixture version that drifts

GitOrigin-RevId: 13c4f6977dbf07ddd34c9a5ab3ea295cddcbe025
This commit is contained in:
Jimmy Domagala-Tang
2026-09-17 11:59:26 +00:00
committed by Copybot
parent 6053781e57
commit 009668c224
5 changed files with 14 additions and 2 deletions
+1 -1
View File
@@ -28,7 +28,7 @@ The CLSI can be configured through the following environment variables:
- `LISTEN_ADDRESS` - The address for the RESTful service to listen on. Set to `0.0.0.0` to listen on all network interfaces
- `PROCESS_LIFE_SPAN_LIMIT_MS` - Process life span limit in milliseconds
- `SMOKE_TEST` - Whether to run smoke tests
- `TEXLIVE_IMAGE` - The TeX Live Docker image to use for sibling containers, e.g. `us-east1-docker.pkg.dev/overleaf-ops/ol-docker/texlive-full:2025.1`
- `TEXLIVE_IMAGE` - The TeX Live Docker image to use for sibling containers, e.g. `us-east1-docker.pkg.dev/overleaf-ops/ol-docker/texlive-full:2026.1`
- `TEX_LIVE_IMAGE_NAME_OVERRIDE` - The name of the registry for the Docker image e.g. `us-east1-docker.pkg.dev/overleaf-ops/ol-docker`
- `TEXLIVE_IMAGE_USER` - When using sibling containers, the user to run as in the TeX Live image. Defaults to `tex`
- `TEXLIVE_OPENOUT_ANY` - Sets the `openout_any` environment variable for TeX Live (see the `\openout` primitive [documentation](http://tug.org/texinfohtml/web2c.html#tex-invocation))
@@ -41,6 +41,13 @@ const convertToPng = function (pdfPath, pngPath) {
})
}
// ImageMagick reports the mean absolute error as "<absolute> (<normalised>)".
// Identical images do not always yield an exact zero: aarch64 builds leave
// floating point residue behind, so comparing an image against a byte-identical
// copy of itself measures around 2e-20. A single differing pixel measures around
// 7e-07, so anything below this threshold is the same image.
const MAX_NORMALISED_MAE = 1e-12
const compare = function (originalPath, generatedPath) {
return new Promise((resolve, reject) => {
const diffFile = `${fixturePath(generatedPath)}-diff.png`
@@ -52,7 +59,12 @@ const compare = function (originalPath, generatedPath) {
let stderr = ''
proc.stderr.on('data', chunk => (stderr += chunk))
proc.on('exit', () => {
if (stderr.trim() === '0 (0)') {
// take the parenthesised value: "1.55242e-15 (2.36884e-20)" -> "2.36884e-20".
// a failed comparison (mismatched dimensions, missing file) does not match
// the metric format, leaving NaN, which fails the threshold check below
const match = stderr.trim().match(/\((?<normalised>[^)]+)\)$/)
const normalisedMae = match ? parseFloat(match.groups.normalised) : NaN
if (normalisedMae <= MAX_NORMALISED_MAE) {
// remove output diff if test matches expected image
fs.unlink(diffFile, err => {
if (err) {