Merge pull request #19642 from overleaf/jdt-latexmkrc-ce

feat: add latexmkrc for server-ce
GitOrigin-RevId: 0d7385808a6a0b98d0a759ce0e329e6b9f578f35
This commit is contained in:
Jimmy Domagala-Tang 2024-09-03 15:26:13 -04:00 committed by Copybot
parent f4c57fce4c
commit 7add11a190
3 changed files with 40 additions and 9 deletions

View file

@ -82,6 +82,10 @@ RUN chmod +x /overleaf/bin/flush-history-queues
ADD server-ce/bin/force-history-resyncs /overleaf/bin/force-history-resyncs ADD server-ce/bin/force-history-resyncs /overleaf/bin/force-history-resyncs
RUN chmod +x /overleaf/bin/force-history-resyncs RUN chmod +x /overleaf/bin/force-history-resyncs
# Copy Latexmkrc
# -----------------------
COPY server-ce/config/latexmkrc /usr/local/share/latexmk/LatexMk
# File that controls open|closed status of the site # File that controls open|closed status of the site
# ------------------------------------------------- # -------------------------------------------------
ENV SITE_MAINTENANCE_FILE "/etc/overleaf/site_status" ENV SITE_MAINTENANCE_FILE "/etc/overleaf/site_status"

View file

@ -0,0 +1,3 @@
# equivalent to -gt option. Used to prevent latexmk from skipping recompilation
# of output.log and output.pdf
$go_mode = 3;

View file

@ -16,7 +16,7 @@ describe('SandboxedCompiles', function () {
ALL_TEX_LIVE_DOCKER_IMAGE_NAMES: '2023,2022', ALL_TEX_LIVE_DOCKER_IMAGE_NAMES: '2023,2022',
} }
describe('enabled in Server Pro', () => { describe('enabled in Server Pro', function () {
if (isExcludedBySharding('PRO_CUSTOM_2')) return if (isExcludedBySharding('PRO_CUSTOM_2')) return
startWith({ startWith({
pro: true, pro: true,
@ -28,7 +28,7 @@ describe('SandboxedCompiles', function () {
login('user@example.com') login('user@example.com')
}) })
it('should offer TexLive images and switch the compiler', () => { it('should offer TexLive images and switch the compiler', function () {
cy.visit('/project') cy.visit('/project')
createProject('sandboxed') createProject('sandboxed')
const recompile = throttledRecompile() const recompile = throttledRecompile()
@ -58,10 +58,11 @@ describe('SandboxedCompiles', function () {
checkSyncTeX() checkSyncTeX()
checkXeTeX() checkXeTeX()
checkRecompilesAfterErrors()
}) })
function checkSyncTeX() { function checkSyncTeX() {
describe('SyncTeX', () => { describe('SyncTeX', function () {
let projectName: string let projectName: string
beforeEach(function () { beforeEach(function () {
projectName = `Project ${uuid()}` projectName = `Project ${uuid()}`
@ -81,7 +82,7 @@ describe('SandboxedCompiles', function () {
}) })
}) })
it('should sync to code', () => { it('should sync to code', function () {
cy.log('navigate to \\maketitle using double click in PDF') cy.log('navigate to \\maketitle using double click in PDF')
cy.get('.pdf-viewer').within(() => { cy.get('.pdf-viewer').within(() => {
cy.findByText(projectName).dblclick() cy.findByText(projectName).dblclick()
@ -112,7 +113,7 @@ describe('SandboxedCompiles', function () {
cy.get('.cm-activeLine').should('have.text', '\\section{Section B}') cy.get('.cm-activeLine').should('have.text', '\\section{Section B}')
}) })
it('should sync to pdf', () => { it('should sync to pdf', function () {
cy.log('zoom in') cy.log('zoom in')
cy.findByText('45%').click() cy.findByText('45%').click()
cy.findByText('400%').click() cy.findByText('400%').click()
@ -150,8 +151,25 @@ describe('SandboxedCompiles', function () {
}) })
} }
function checkRecompilesAfterErrors() {
it('recompiles even if there are Latex errors', function () {
login('user@example.com')
cy.visit('/project')
createProject('test-project')
const recompile = throttledRecompile()
cy.findByText('\\maketitle').parent().click()
cy.findByText('\\maketitle')
.parent()
.type('\n\\fakeCommand{} \n\\section{{}Test Section}')
recompile()
recompile()
cy.get('.pdf-viewer').should('contain.text', 'Test Section')
cy.get('.logs-pane').should('not.contain.text', 'No PDF')
})
}
function checkXeTeX() { function checkXeTeX() {
it('should be able to use XeLaTeX', () => { it('should be able to use XeLaTeX', function () {
cy.visit('/project') cy.visit('/project')
createProject('XeLaTeX') createProject('XeLaTeX')
const recompile = throttledRecompile() const recompile = throttledRecompile()
@ -181,7 +199,11 @@ describe('SandboxedCompiles', function () {
} }
function checkUsesDefaultCompiler() { function checkUsesDefaultCompiler() {
it('should not offer TexLive images and use default compiler', () => { beforeEach(function () {
login('user@example.com')
})
it('should not offer TexLive images and use default compiler', function () {
cy.visit('/project') cy.visit('/project')
createProject('sandboxed') createProject('sandboxed')
cy.log('wait for compile') cy.log('wait for compile')
@ -198,7 +220,7 @@ describe('SandboxedCompiles', function () {
}) })
} }
describe('disabled in Server Pro', () => { describe('disabled in Server Pro', function () {
if (isExcludedBySharding('PRO_DEFAULT_2')) return if (isExcludedBySharding('PRO_DEFAULT_2')) return
startWith({ pro: true }) startWith({ pro: true })
ensureUserExists({ email: 'user@example.com' }) ensureUserExists({ email: 'user@example.com' })
@ -209,9 +231,10 @@ describe('SandboxedCompiles', function () {
checkUsesDefaultCompiler() checkUsesDefaultCompiler()
checkSyncTeX() checkSyncTeX()
checkXeTeX() checkXeTeX()
checkRecompilesAfterErrors()
}) })
describe.skip('unavailable in CE', () => { describe.skip('unavailable in CE', function () {
if (isExcludedBySharding('CE_CUSTOM_1')) return if (isExcludedBySharding('CE_CUSTOM_1')) return
startWith({ pro: false, vars: enabledVars, resetData: true }) startWith({ pro: false, vars: enabledVars, resetData: true })
ensureUserExists({ email: 'user@example.com' }) ensureUserExists({ email: 'user@example.com' })
@ -222,5 +245,6 @@ describe('SandboxedCompiles', function () {
checkUsesDefaultCompiler() checkUsesDefaultCompiler()
checkSyncTeX() checkSyncTeX()
checkXeTeX() checkXeTeX()
checkRecompilesAfterErrors()
}) })
}) })