- Automatic LSL syntax validation on commits - Release package generation for main branch - Documentation updates - Discord/Slack notifications (optional) - Secure builds using dedicated agent
176 lines
6.3 KiB
Groovy
176 lines
6.3 KiB
Groovy
pipeline {
|
|
agent any
|
|
|
|
environment {
|
|
LSL_TOOLS_PATH = '/opt/lsl-tools'
|
|
PROJECT_NAME = 'peril'
|
|
NOTIFICATION_WEBHOOK = credentials('discord-webhook') // Optional
|
|
}
|
|
|
|
triggers {
|
|
githubPush() // Trigger on GitHub push
|
|
pollSCM('H/5 * * * *') // Poll every 5 minutes as fallback
|
|
}
|
|
|
|
stages {
|
|
stage('Checkout') {
|
|
steps {
|
|
echo "🔍 Checking out LSL project: ${PROJECT_NAME}"
|
|
checkout scm
|
|
}
|
|
}
|
|
|
|
stage('LSL Validation') {
|
|
steps {
|
|
echo "🔧 Validating LSL syntax..."
|
|
sh '''
|
|
python3 ${LSL_TOOLS_PATH}/lsl_validator.py /workspace/${PROJECT_NAME}/
|
|
'''
|
|
}
|
|
post {
|
|
failure {
|
|
echo "❌ LSL validation failed!"
|
|
}
|
|
success {
|
|
echo "✅ LSL validation passed!"
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Preprocess Scripts') {
|
|
when {
|
|
anyOf {
|
|
branch 'main'
|
|
branch 'develop'
|
|
}
|
|
}
|
|
steps {
|
|
echo "🔄 Preprocessing LSL files..."
|
|
sh '''
|
|
cd /workspace/${PROJECT_NAME}
|
|
for file in *.lsl; do
|
|
if [[ -f "$file" ]]; then
|
|
echo "Processing $file..."
|
|
python3 ${LSL_TOOLS_PATH}/lsl_preprocessor.py "$file" "processed_$file"
|
|
fi
|
|
done
|
|
'''
|
|
}
|
|
}
|
|
|
|
stage('Generate Release Package') {
|
|
when {
|
|
branch 'main'
|
|
}
|
|
steps {
|
|
echo "📦 Creating release package..."
|
|
sh '''
|
|
cd /workspace/${PROJECT_NAME}
|
|
|
|
# Get version from git tag or use build number
|
|
VERSION=$(git describe --tags --abbrev=0 2>/dev/null || echo "v2.6.${BUILD_NUMBER}")
|
|
echo "Creating release ${VERSION}"
|
|
|
|
# Create release directory
|
|
mkdir -p releases/${VERSION}
|
|
|
|
# Copy LSL files
|
|
cp *.lsl releases/${VERSION}/
|
|
|
|
# Copy documentation
|
|
cp README.md CHANGELOG.md releases/${VERSION}/ 2>/dev/null || true
|
|
|
|
# Create deployment notes
|
|
echo "Peril Game ${VERSION}" > releases/${VERSION}/DEPLOYMENT_NOTES.txt
|
|
echo "Build: ${BUILD_NUMBER}" >> releases/${VERSION}/DEPLOYMENT_NOTES.txt
|
|
echo "Date: $(date)" >> releases/${VERSION}/DEPLOYMENT_NOTES.txt
|
|
echo "Commit: ${GIT_COMMIT}" >> releases/${VERSION}/DEPLOYMENT_NOTES.txt
|
|
|
|
# Create zip for easy download
|
|
cd releases
|
|
zip -r "${VERSION}.zip" ${VERSION}/
|
|
'''
|
|
|
|
// Archive the release
|
|
archiveArtifacts artifacts: 'releases/**/*', followSymlinks: false
|
|
|
|
// Create GitHub release (if using GitHub plugin)
|
|
script {
|
|
def version = sh(script: "cd /workspace/${PROJECT_NAME} && git describe --tags --abbrev=0 2>/dev/null || echo 'v2.6.${BUILD_NUMBER}'", returnStdout: true).trim()
|
|
echo "Release ${version} created successfully!"
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Update Documentation') {
|
|
when {
|
|
branch 'main'
|
|
}
|
|
steps {
|
|
echo "📚 Updating project documentation..."
|
|
sh '''
|
|
cd /workspace/${PROJECT_NAME}
|
|
|
|
# Generate function list from LSL files
|
|
echo "# Project Functions" > FUNCTIONS.md
|
|
echo "" >> FUNCTIONS.md
|
|
echo "Auto-generated list of functions in this project:" >> FUNCTIONS.md
|
|
echo "" >> FUNCTIONS.md
|
|
|
|
for file in *.lsl; do
|
|
if [[ -f "$file" ]]; then
|
|
echo "## $file" >> FUNCTIONS.md
|
|
echo "" >> FUNCTIONS.md
|
|
grep -n "^[a-zA-Z_][a-zA-Z0-9_]*(" "$file" | head -20 >> FUNCTIONS.md || true
|
|
echo "" >> FUNCTIONS.md
|
|
fi
|
|
done
|
|
'''
|
|
}
|
|
}
|
|
|
|
stage('Notify Success') {
|
|
when {
|
|
branch 'main'
|
|
}
|
|
steps {
|
|
echo "🎉 Build completed successfully!"
|
|
script {
|
|
// Optional: Send Discord/Slack notification
|
|
// Only if webhook is configured
|
|
if (env.NOTIFICATION_WEBHOOK) {
|
|
sh '''
|
|
curl -X POST ${NOTIFICATION_WEBHOOK} \
|
|
-H "Content-Type: application/json" \
|
|
-d "{\\"content\\": \\"✅ Peril LSL project build #${BUILD_NUMBER} completed successfully! New release ready for deployment.\\"}"
|
|
'''
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
post {
|
|
always {
|
|
echo "🧹 Cleaning up workspace..."
|
|
cleanWs(cleanWhenAborted: false, cleanWhenFailure: false, cleanWhenNotBuilt: false, cleanWhenSuccess: true, cleanWhenUnstable: false)
|
|
}
|
|
|
|
failure {
|
|
echo "💥 Build failed! Check the logs above."
|
|
script {
|
|
if (env.NOTIFICATION_WEBHOOK) {
|
|
sh '''
|
|
curl -X POST ${NOTIFICATION_WEBHOOK} \
|
|
-H "Content-Type: application/json" \
|
|
-d "{\\"content\\": \\"❌ Peril LSL project build #${BUILD_NUMBER} failed! Check Jenkins for details.\\"}"
|
|
'''
|
|
}
|
|
}
|
|
}
|
|
|
|
success {
|
|
echo "🎯 Build completed successfully!"
|
|
}
|
|
}
|
|
}
|