Updated build system.

This commit is contained in:
Bokuan Li
2026-01-05 20:11:28 -05:00
parent abbed78434
commit a807369ab0
12 changed files with 438 additions and 47 deletions

131
build.groovy Normal file
View File

@@ -0,0 +1,131 @@
def projectRoot = '/home/gerby/gerby'
def vGPython = "${projectRoot}/gerby-venv/bin/python"
def vGPip = "${projectRoot}/gerby-venv/bin/pip"
def vPPython = "${projectRoot}/plastex-venv/bin/python"
def vPPip = "${projectRoot}/plastex-venv/bin/pip"
def vPlastex = "${projectRoot}/plastex-venv/bin/plastex"
def discordHook = "https://discord.com/api/webhooks/1456391390513856676/yniOv0Gbxp2UwW1pbZcekpXsC8y1dYppGQ90O7He-df24IODggrgXdMFwvz-RMWM15j8"
pipeline {
agent any
stages {
stage('Create Links') {
steps {
dir("${projectRoot}/gerby-website/gerby/tools/") {
sh 'rm ./document || true'
sh 'rm ./document.paux || true'
sh 'rm ./tags || true'
sh 'ln -s ../../../document document'
sh 'ln -s ../../../document.paux document.paux'
sh 'ln -s ../../../tags tags'
}
dir("${projectRoot}/gerby-website/") {
sh 'rm ./hello-world.sqlite || true'
sh 'rm ./comments.sqlite || true'
sh 'ln -s gerby/tools/hello-world.sqlite hello-world.sqlite'
sh 'ln -s gerby/tools/comments.sqlite comments.sqlite'
}
}
}
stage('Bibliography') {
steps {
dir("${projectRoot}/") {
sh 'pdflatex -interaction=nonstopmode document.tex || true'
sh 'bibtex document || true'
sh 'pdflatex -interaction=nonstopmode document.tex || true'
}
}
}
stage('Delete Tags') {
when {
expression { params['Redo Tags'] == true }
}
steps {
dir("${projectRoot}/") {
sh 'rm ./tags || true'
sh 'rm ./gerby-website/gerby/tools/hello-world.sqlite || true'
}
}
}
// The document folder is needed for the website to run, hence it is not cleared at the end of the compile process.
stage('Delete Previous Build') {
steps {
dir("${projectRoot}/") {
sh "rm -r ./document"
}
}
}
stage('Tag') {
steps {
dir("${projectRoot}/") {
sh "${vGPython} tagger.py >> tags"
}
}
}
stage('Plastex') {
steps {
dir("${projectRoot}/") {
sh "${vPlastex} --renderer=Gerby ./document.tex"
}
}
}
stage('Update Database') {
steps {
dir("${projectRoot}/gerby-website/gerby/tools") {
sh "${vGPython} update.py"
}
}
}
}
post {
always {
dir("${projectRoot}/") {
sh 'rm document.aux || true'
sh 'rm document.bbl || true'
sh 'rm document.blg || true'
sh 'rm document.log || true'
sh 'rm document.out || true'
sh 'rm document.pdf || true'
}
script {
def formatTime = { milliseconds ->
long seconds = (long)(milliseconds / 1000)
long mins = (long)(seconds / 60)
long secs = seconds % 60
return mins > 0 ? "${mins}m${secs}s" : "${secs}s"
}
def buildTitle = "Build Website #${env.BUILD_NUMBER}"
if (params['Redo Tags']) {
buildTitle += " (Retag)"
}
def queueTimeMs = currentBuild.startTimeInMillis - currentBuild.timeInMillis
def queueTime = formatTime(queueTimeMs)
def buildTime = formatTime(currentBuild.duration)
def description = """
**Build:** [#${env.BUILD_NUMBER}](${env.BUILD_URL})
**Console:** [Console Output](${env.BUILD_URL}console)
**Queue Time:** ${queueTime}
**Build Duration:** ${buildTime}
**Status:** ${currentBuild.currentResult}
""".trim()
discordSend(
webhookURL: discordHook,
title: buildTitle,
description: description,
result: currentBuild.currentResult
)
}
}
}
}