Adding 2025 and 2026 incremental compiles options (#35850)

* feat: adding 2025 and 2026 incremental compiles options

* feat: remove dmtcp from compiler list and autoselect checkpointing version with labs inclusion

* feat: updating seccomp profile for checkpointing

* feat: disable non-premium dmtcp compiles, and align checkpoint version detection between clsi and web

* feat: adding in reminder of checkpoint experiment, and using session based split test retrieval

* Increase Packer build.sh timeout from 1h15m to 1h30m as build takes approx 1h

* fix: moving checkpointing check from tag name based to hasCheckpointing flag set as part of allowed_images, and removing uneeded seccomp rule

* feat: move variant/ image selection to CLSI, and have web control only what options to set for a compile. removing uneeded extra variants from webs list of allowed images

* feat: adding compile timer as a query string as well

---------

Co-authored-by: Tim Gibbon <tim.gibbon@overleaf.com>
GitOrigin-RevId: cdbdf76a62dcd5a585925f18d64b6cb9cd6ed373
This commit is contained in:
Jimmy Domagala-Tang
2026-09-17 12:00:46 +00:00
committed by Copybot
co-authored by Tim Gibbon
parent 35271cb33c
commit baa9cf78d9
12 changed files with 389 additions and 27 deletions
@@ -198,6 +198,10 @@ describe('ClsiManager', function () {
clsiCookie: { key: 'clsiserver' },
safeCompilers: ['pdflatex', 'latex', 'xelatex', 'lualatex'],
defaultLatexCompiler: 'pdflatex',
allowedImageNames: [
{ imageName: 'mock-image-name', hasCheckpointing: true },
{ imageName: 'mock-image-name-no-checkpointing' },
],
}
ctx.ClsiCacheHandler = {
clearCache: sinon.stub().resolves(),
@@ -1117,6 +1121,152 @@ describe('ClsiManager', function () {
})
})
describe('with the checkpointing option', function () {
it('should ask the clsi to enable checkpointing, leaving the image alone', async function (ctx) {
await ctx.ClsiManager.promises.sendRequest(
null,
ctx.project._id,
ctx.user_id,
{
timeout: 100,
compileGroup: 'priority',
checkpointing: true,
}
)
expect(ctx.FetchUtils.fetchStringWithResponse).to.have.been.calledWith(
sinon.match.any,
sinon.match({
json: {
compile: {
options: {
imageName: ctx.project.imageName,
enableCheckpoint: true,
},
},
},
})
)
})
it('should not enable checkpointing for a standard compileGroup', async function (ctx) {
await ctx.ClsiManager.promises.sendRequest(
null,
ctx.project._id,
ctx.user_id,
{
timeout: 100,
compileGroup: 'standard',
checkpointing: true,
}
)
expect(ctx.FetchUtils.fetchStringWithResponse).to.have.been.calledWith(
sinon.match.any,
sinon.match({
json: {
compile: { options: { enableCheckpoint: false } },
},
})
)
})
it('should not enable checkpointing without the option', async function (ctx) {
await ctx.ClsiManager.promises.sendRequest(
null,
ctx.project._id,
ctx.user_id,
{
timeout: 100,
compileGroup: 'priority',
}
)
expect(ctx.FetchUtils.fetchStringWithResponse).to.have.been.calledWith(
sinon.match.any,
sinon.match({
json: {
compile: {
options: {
imageName: ctx.project.imageName,
enableCheckpoint: false,
},
},
},
})
)
})
it('should not enable checkpointing when the image has no checkpointing build', async function (ctx) {
ctx.project.imageName = 'mock-image-name-no-checkpointing'
await ctx.ClsiManager.promises.sendRequest(
null,
ctx.project._id,
ctx.user_id,
{
timeout: 100,
compileGroup: 'priority',
checkpointing: true,
}
)
expect(ctx.FetchUtils.fetchStringWithResponse).to.have.been.calledWith(
sinon.match.any,
sinon.match({
json: {
compile: { options: { enableCheckpoint: false } },
},
})
)
})
it('should not enable checkpointing when the project has no image', async function (ctx) {
delete ctx.project.imageName
await ctx.ClsiManager.promises.sendRequest(
null,
ctx.project._id,
ctx.user_id,
{
timeout: 100,
compileGroup: 'priority',
checkpointing: true,
}
)
expect(ctx.FetchUtils.fetchStringWithResponse).to.have.been.calledWith(
sinon.match.any,
sinon.match({
json: {
compile: { options: { enableCheckpoint: false } },
},
})
)
})
it('should look up the image ignoring the registry host', async function (ctx) {
ctx.project.imageName = 'quay.io/sharelatex/mock-image-name'
await ctx.ClsiManager.promises.sendRequest(
null,
ctx.project._id,
ctx.user_id,
{
timeout: 100,
compileGroup: 'priority',
checkpointing: true,
}
)
expect(ctx.FetchUtils.fetchStringWithResponse).to.have.been.calledWith(
sinon.match.any,
sinon.match({
json: {
compile: { options: { enableCheckpoint: true } },
},
})
)
})
})
describe('with the png2pdf option', function () {
beforeEach(async function (ctx) {
await ctx.ClsiManager.promises.sendRequest(