From 752ba443b49e5865a7e275f476b4b7946ae9ffda Mon Sep 17 00:00:00 2001 From: swb Date: Sun, 12 Mar 2023 21:41:17 +0000 Subject: [PATCH] add jenkinsfile and CNAME file The current implementation of the site builder requires content repo to be submited as a zip file for production using env vars `CONTENT_SOURCE_TYPE=git` and `CONTENT_SOURCE_URL=repo-link.zip` which is not considered a best practice. Due to this, a race condition may occur during the build process if another commit is made while the build is in progress which may lead a security flow. To work around this,first, we checkout into `src` using `checkoutToSubdirectory('src')`. Then, we use `local_folder` mode using `CONTENT_SOURCE_TYPE=local_folder` and `CONTENT_SOURCE_URL=..src` env vars, just like a local develop. `local_folder` mode copies the website files from `src` into `docs` because the site builder is incapable of copying it. Finally, we checkout the builder into the `builder` directory and we run the `install` and `build` commands inside of that directory. --- Jenkinsfile | 80 +++++++++++++++++++++++++++++++++++++++++++++ static-assets/CNAME | 1 + 2 files changed, 81 insertions(+) create mode 100644 Jenkinsfile create mode 100644 static-assets/CNAME diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..bef86fa --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,80 @@ +pipeline { + agent { label 'linux' } + + options { + disableConcurrentBuilds() + /* Necessary for logos-side-builder local_folder source type. */ + checkoutToSubdirectory('src') + /* manage how many builds we keep */ + buildDiscarder(logRotator( + numToKeepStr: '20', + daysToKeepStr: '30', + )) + } + + environment { + /* Mode of logos-site-builder for copying site source from already checked out repo. + * TODO: Avoid copying anything at all, make checkout site of into `docs` folder work. */ + CONTENT_SOURCE_TYPE = 'local_folder' + CONTENT_SOURCE_URL = '../src' + GIT_COMMITTER_NAME = 'status-im-auto' + GIT_COMMITTER_EMAIL = 'auto@status.im' + /* dev page settings */ + DEV_SITE = 'dev.logos.co' + DEV_HOST = 'jenkins@node-01.do-ams3.sites.misc.statusim.net' + SCP_OPTS = 'StrictHostKeyChecking=no' + } + + stages { + stage('Clone Builder') { + steps { + dir('builder') { + checkout([$class: 'GitSCM', + branches: [[name: 'v0']], + userRemoteConfigs: [[url: 'https://github.com/acid-info/logos-site-builder']]]) + } + } + } + + stage('Install') { + steps { + dir('builder') { + sh 'yarn install' + } + } + } + + stage('Build') { + steps { + dir('builder') { + sh 'yarn build' + } + } + } + + stage('Publish Prod') { + when { expression { env.GIT_BRANCH ==~ /.*master/ } } + steps { + sshagent(credentials: ['status-im-auto-ssh']) { + sh "ghp-import -p public" + } + } + } + + stage('Publish Devel') { + when { expression { env.GIT_BRANCH ==~ /.*develop/ } } + steps { + sshagent(credentials: ['jenkins-ssh']) { + sh """ + rsync -e 'ssh -o ${SCP_OPTS}' -r --delete public/. \ + ${env.DEV_HOST}:/var/www/${env.DEV_SITE}/ + """ + } + } + } + } + + post { + cleanup { cleanWs() } + } +} diff --git a/static-assets/CNAME b/static-assets/CNAME new file mode 100644 index 0000000..32ca2fe --- /dev/null +++ b/static-assets/CNAME @@ -0,0 +1 @@ +logos.co \ No newline at end of file