You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@community.apache.org by se...@apache.org on 2023/04/30 10:12:09 UTC

[comdev-events-site] branch main updated: Update Jenkinsfile (#6)

This is an automated email from the ASF dual-hosted git repository.

sebb pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/comdev-events-site.git


The following commit(s) were added to refs/heads/main by this push:
     new aedafec  Update Jenkinsfile (#6)
aedafec is described below

commit aedafec5f9cd6102cce485503a7b4c352b41b6fb
Author: sebbASF <se...@users.noreply.github.com>
AuthorDate: Sun Apr 30 11:12:05 2023 +0100

    Update Jenkinsfile (#6)
    
    * Try out Jenkins file from comdev main site
    
    * Fix up URLs
    
    * Skip Hugo install if present
    
    * Syntax
    
    * expression not working as expected
    
    * Strip leaving v
    
    * Must define HUGO_DIR
    
    * Try again
    
    * Oops need the parent dir
    
    * Allow for delete of HUGO_DIR
---
 Jenkinsfile | 100 +++++++++++++++++++++++++++++++++++++++++++++---------------
 1 file changed, 75 insertions(+), 25 deletions(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 8208e20..70a17ab 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -23,8 +23,9 @@ pipeline {
     }
    
     environment {
-        HUGO_VERSION = '0.63.2'
-        DEPLOY_BRANCH = 'asf-site'
+        DEPLOY_BRANCH = "${env.BRANCH_NAME == "main" ? "asf-site" : "${env.BRANCH_NAME}-staging"}"
+        HUGO_VERSION = '0.111.3'
+        HUGO_HASH = 'b382aacb522a470455ab771d0e8296e42488d3ea4e61fe49c11c32ec7fb6ee8b'
         PAGEFIND_VERSION = '0.12.0'
         PAGEFIND_HASH = '3e450176562b65359f855c04894ec2c07ffd30a8d08ef4d5812f8d3469d7a58f'
     }
@@ -35,17 +36,39 @@ pipeline {
                 script {
                     // Capture last commit hash for final commit message
                     env.LAST_SHA = sh(script:'git log -n 1 --pretty=format:\'%H\'', returnStdout: true).trim()
-
-                    // Setup Hugo
+                    env.HUGO_PATH = sh(script:'which hugo', returnStdout: true).trim()
+                    sh "echo Hugo path: '${env.HUGO_PATH}'"
+                    // Get current Hugo version (looks like hugo v0.111.3-5d4eb5154e1fed125ca8e9b5a0315c4180dab192+extended linux/amd64 ...)
+                    // Use the location found above to ensure same hugo can be used later
+                    env.HUGO_VERSION_CURRENT = sh(script:'${HUGO_PATH} version | cut -f 2 -d" "|cut -d- -f 1|sed -e "s!^v!!"', returnStdout: true).trim()
+                    sh "echo Hugo current: '${env.HUGO_VERSION_CURRENT}'"
+                    sh "echo Hugo  target: '${HUGO_VERSION}'"
+                    // create the dir in case it is needed (simplifies tidyup)
                     env.HUGO_DIR = sh(script:'mktemp -d', returnStdout: true).trim()
-                    sh """
-                        mkdir -p ${env.HUGO_DIR}/bin
-                        cd ${env.HUGO_DIR}
-                        wget --no-verbose -O hugo.tar.gz https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_Linux-64bit.tar.gz
-                        tar xfzv hugo.tar.gz
-                        mv hugo ${env.HUGO_DIR}/bin/
-                    """
-
+                }
+            }
+        }
+        stage("Install Hugo") {
+            when {
+              expression { env.HUGO_VERSION_CURRENT != HUGO_VERSION }
+            }
+            steps {
+                script {
+                    // Download Hugo
+                    sh "mkdir -p ${env.HUGO_DIR}/bin"
+                    sh "wget --no-verbose -O ${env.HUGO_DIR}/hugo.tar.gz https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_Linux-64bit.tar.gz"
+                    // Verify the checksum
+                    def hugo_hash = sha256 file: "${env.HUGO_DIR}/hugo.tar.gz"
+                    assert hugo_hash == "${HUGO_HASH}"
+                    // Unpack Hugo
+                    sh "tar -C ${env.HUGO_DIR}/bin -xkf ${env.HUGO_DIR}/hugo.tar.gz"
+                    env.HUGO_PATH = "${env.HUGO_DIR}/bin/hugo"
+                }
+            }
+        }
+        stage("Install Pagefind") {
+            steps {
+                script {
                     // Download Pagefind
                     env.PAGEFIND_DIR = sh(script:'mktemp -d', returnStdout: true).trim()
                     sh "mkdir -p ${env.PAGEFIND_DIR}/bin"
@@ -56,6 +79,12 @@ pipeline {
                     // Unpack Pagefind
                     sh "tar -C ${env.PAGEFIND_DIR}/bin -xkf ${env.PAGEFIND_DIR}/pagefind.tar.gz"
 
+                }
+            }
+        }
+        stage("Setup directory") {
+            steps {
+                script {
                     // Setup directory structure for generated content
                     env.TMP_DIR = sh(script:'mktemp -d', returnStdout: true).trim()
                     env.OUT_DIR = "${env.TMP_DIR}/content"
@@ -67,35 +96,56 @@ pipeline {
         stage('Build') {
             steps {
                 script {
-                    withEnv(["PATH+HUGO=${env.HUGO_DIR}/bin"]) {
-                        sh "hugo --destination ${env.OUT_DIR}"
-                    }
-                    sh "${env.PAGEFIND_DIR}/bin/pagefind --source ${env.OUT_DIR}"
+                    sh "${HUGO_PATH} --destination ${env.OUT_DIR}"
+                    sh "${PAGEFIND_DIR}/bin/pagefind --source ${env.OUT_DIR}"
+                    sh "rm -f .hugo_build.lock"
                 }
             }
         }
+        // https://www.jenkins.io/doc/book/pipeline/syntax/#built-in-conditions
+        // branch uses Ant-style patterns by default:
+        // https://ant.apache.org/manual/dirtasks.html#patterns
+        // Exclude branches ending in '-staging'
+        // Also try to prevent deploy of top-level branches apart from main
         stage('Deploy') {
             when {
+                not {
+                    branch '**/*-staging'
+                }
                 anyOf {
                     branch 'main'
-                }
+                    not {
+                      branch '*'
+                    }
+                }        
             }
+
             steps {
                 script {
-                    // Checkout branch with generated content
+                    // Checkout branch with generated content, creating it if necessary
+                    // We only want the generated content + .asf.yaml
                     sh """
-                        git checkout ${DEPLOY_BRANCH}
-                        git pull origin ${DEPLOY_BRANCH}
+                        if git checkout ${DEPLOY_BRANCH}
+                        then
+                          git pull origin ${DEPLOY_BRANCH}
+                        else
+                          echo "branch ${DEPLOY_BRANCH} is new; create basic site"
+                          git checkout --orphan ${DEPLOY_BRANCH} -f
+                          git rm -rf .
+                          # assume we have an asf.yaml file
+                          git checkout origin/${BRANCH_NAME} -- .asf.yaml
+                          git add .asf.yaml -f
+                        fi
                     """
-                    
+
                     // Remove the content of the target branch and replace it with the content of the temp folder
                     sh """
                         rm -rf ${WORKSPACE}/content
-                        git rm -r --cached content/*
+                        git rm -r --ignore-unmatch --cached content/*
                         mkdir -p ${WORKSPACE}/content
                         cp -rT ${env.TMP_DIR}/* ${WORKSPACE}/content
                     """
-                    
+
                     // Commit the changes to the target branch
                     env.COMMIT_MESSAGE1 = "Updated ${DEPLOY_BRANCH} from ${BRANCH_NAME} at ${env.LAST_SHA}"
                     env.COMMIT_MESSAGE2 = "Built from ${BUILD_URL}"
@@ -103,7 +153,7 @@ pipeline {
                         git add -A
                         git commit -m "${env.COMMIT_MESSAGE1}" -m "${env.COMMIT_MESSAGE2}" | true
                     """
-                    
+
                     // Push the generated content for deployment
                     sh "git push -u origin ${DEPLOY_BRANCH}"
                 }
@@ -116,6 +166,7 @@ pipeline {
             script {
                 sh """
                     rm -rf ${env.HUGO_DIR}
+                    rm -rf ${env.PAGEFIND_DIR}
                     rm -rf ${env.TMP_DIR}
                 """
             }
@@ -123,4 +174,3 @@ pipeline {
         }
     }
 }
-