aboutsummaryrefslogtreecommitdiff
path: root/Jenkinsfile
diff options
context:
space:
mode:
authorMax Nanis2026-03-06 16:49:46 -0500
committerMax Nanis2026-03-06 16:49:46 -0500
commit91d040211a4ed6e4157896256a762d3854777b5e (patch)
treecd95922ea4257dc8d3f4e4cbe8534474709a20dc /Jenkinsfile
downloadgeneralresearch-91d040211a4ed6e4157896256a762d3854777b5e.tar.gz
generalresearch-91d040211a4ed6e4157896256a762d3854777b5e.zip
Initial commitv3.3.4
Diffstat (limited to 'Jenkinsfile')
-rw-r--r--Jenkinsfile295
1 files changed, 295 insertions, 0 deletions
diff --git a/Jenkinsfile b/Jenkinsfile
new file mode 100644
index 0000000..29d065f
--- /dev/null
+++ b/Jenkinsfile
@@ -0,0 +1,295 @@
+pipeline {
+ agent any
+
+ triggers {
+ cron('H */12 * * *')
+ pollSCM('H */6 * * *')
+ }
+
+ options {
+ skipDefaultCheckout()
+ }
+
+ environment {
+ VENV = "${env.WORKSPACE}/py-utils-venv"
+ SPECTRUM_CARER_VENV = "${env.WORKSPACE}/thl-spectrum-carer-venv"
+ GRLIQ_CARER_VENV = "${env.WORKSPACE}/grliq-carer-venv"
+ GR_CARER_VENV = "${env.WORKSPACE}/gr-carer-venv"
+
+ INCITE_MOUNT_DIR = '/mnt/thl-incite'
+ TMP_DIR = "${env.WORKSPACE}/tmp"
+ }
+
+ stages {
+ stage('python versions') {
+ matrix {
+ axes {
+ axis {
+ name 'PYTHON_VERSION'
+ values 'python3.13', 'python3.12', 'python3.11', 'python3.10'
+ }
+ }
+
+ stages {
+ stage('Setup DB') {
+ steps {
+ script {
+ env.DB_NAME = 'unittest-thl-' + UUID.randomUUID().toString().replace('-', '').take(12)
+ env.THL_WEB_RW_DB = "postgres://${env.DB_USER}:${env.DB_PASSWORD}@${env.DB_POSTGRESQL_HOST}/${env.DB_NAME}"
+ env.THL_WEB_RR_DB = env.THL_WEB_RW_DB
+ env.THL_WEB_RO_DB = env.THL_WEB_RW_DB
+ echo "Using database: ${env.DB_NAME}"
+
+ env.SPECTRUM_DB_NAME = 'unittest-thl-spectrum-' + UUID.randomUUID().toString().replace('-', '').take(12)
+ env.SPECTRUM_RW_DB = "mariadb://${env.DB_USER}:${env.DB_PASSWORD}@${env.DB_MARIA_HOST}/${env.SPECTRUM_DB_NAME}"
+ env.SPECTRUM_RR_DB = env.SPECTRUM_RW_DB
+ echo "Using database: ${env.SPECTRUM_DB_NAME}"
+
+ env.GRLIQ_DB_NAME = 'unittest-grliq-' + UUID.randomUUID().toString().replace('-', '').take(12)
+ env.GRLIQ_DB = "postgres://${env.DB_USER}:${env.DB_PASSWORD}@${env.DB_POSTGRESQL_HOST}/${env.GRLIQ_DB_NAME}"
+ echo "Using database: ${env.GRLIQ_DB_NAME}"
+
+ env.GR_DB_NAME = 'unittest-gr-' + UUID.randomUUID().toString().replace('-', '').take(12)
+ env.GR_DB = "postgres://${env.DB_USER}:${env.DB_PASSWORD}@${env.DB_POSTGRESQL_HOST}/${env.GR_DB_NAME}"
+ echo "Using database: ${env.GR_DB_NAME}"
+ }
+
+ sh """
+ PGPASSWORD=${env.DB_PASSWORD} psql -h ${env.DB_POSTGRESQL_HOST} -U ${env.DB_USER} -d postgres <<EOF
+ CREATE DATABASE "${env.DB_NAME}" WITH TEMPLATE = template0 ENCODING = 'UTF8';
+ EOF
+ """
+ sh """
+ PGPASSWORD=${env.DB_PASSWORD} psql -h ${env.DB_POSTGRESQL_HOST} -U ${env.DB_USER} -d postgres <<EOF
+ CREATE DATABASE "${env.GRLIQ_DB_NAME}" WITH TEMPLATE = template0 ENCODING = 'UTF8';
+ EOF
+ """
+ sh """
+ PGPASSWORD=${env.DB_PASSWORD} psql -h ${env.DB_POSTGRESQL_HOST} -U ${env.DB_USER} -d postgres <<EOF
+ CREATE DATABASE "${env.GR_DB_NAME}" WITH TEMPLATE = template0 ENCODING = 'UTF8';
+ EOF
+ """
+ sh """
+ mysql -h ${env.DB_MARIA_HOST} -u ${env.DB_USER} -p${env.DB_PASSWORD} --ssl=0 -e 'CREATE DATABASE `${env.SPECTRUM_DB_NAME}`;'
+ """
+
+ script {
+ env.REDIS_DB = new Random().nextInt(1024).toString()
+ env.REDIS = "redis://${env.REDIS}:6379/${env.REDIS_DB}"
+ env.THL_REDIS = "redis://${env.THLREDIS}:6379/${env.REDIS_DB}"
+ echo "Using THL Redis: ${env.REDIS}"
+ if (sh(script: "redis-cli -u ${env.REDIS} SET jenkins_lock 1 NX EX 3600", returnStdout: true).trim() != 'OK')
+ error('Redis already locked... aborting.')
+ }
+ script {
+ env.GR_REDIS_DB = new Random().nextInt(1024).toString()
+ env.GR_REDIS = "redis://${env.REDIS}:6379/${env.GR_REDIS_DB}"
+ echo "Using GR Redis: ${env.GR_REDIS}"
+ if (sh(script: "redis-cli -u ${env.GR_REDIS} SET jenkins_lock 1 NX EX 3600", returnStdout: true).trim() != 'OK')
+ error('Redis already locked... aborting.')
+ }
+ }
+ }
+
+ stage('Setup Git') {
+ steps {
+ cleanWs()
+
+ dir('tmp') {
+ sh 'pwd -P'
+ }
+
+ dir("py-utils:$PYTHON_VERSION/") {
+ checkout scmGit(
+ branches: [[name: env.BRANCH_NAME]],
+ extensions: [ cloneOption(shallow: true) ],
+ userRemoteConfigs: [
+ [credentialsId: 'abdeb570-b708-44f3-b857-8a6b06ed9822',
+ url: 'ssh://code.g-r-l.com:6611/py-utils']
+ ],
+ )
+ }
+
+ dir("thl-spectrum:$PYTHON_VERSION/") {
+ checkout scmGit(
+ branches: [[name: env.BRANCH_NAME]],
+ extensions: [ cloneOption(shallow: true) ],
+ userRemoteConfigs: [
+ [credentialsId: 'abdeb570-b708-44f3-b857-8a6b06ed9822',
+ url: 'ssh://code.g-r-l.com:6611/thl-marketplaces/thl-spectrum']
+ ],
+ )
+ }
+
+ dir("grliq:$PYTHON_VERSION/") {
+ checkout scmGit(
+ branches: [[name: env.BRANCH_NAME]],
+ extensions: [ cloneOption(shallow: true) ],
+ userRemoteConfigs: [
+ [credentialsId: 'abdeb570-b708-44f3-b857-8a6b06ed9822',
+ url: 'ssh://code.g-r-l.com:6611/grl-iq']
+ ],
+ )
+ }
+
+ dir("gr:$PYTHON_VERSION/") {
+ checkout scmGit(
+ branches: [[name: env.BRANCH_NAME]],
+ extensions: [ cloneOption(shallow: true) ],
+ userRemoteConfigs: [
+ [credentialsId: 'abdeb570-b708-44f3-b857-8a6b06ed9822',
+ url: 'ssh://code.g-r-l.com:6611/general-research/gr-carer']
+ ],
+ )
+ }
+ }
+ }
+
+ stage('Env & Migration') {
+ steps {
+ dir("py-utils:$PYTHON_VERSION/") {
+ sh "/usr/local/bin/$PYTHON_VERSION -m venv $VENV-$PYTHON_VERSION"
+ sh "$VENV-$PYTHON_VERSION/bin/pip install -U setuptools wheel pip"
+ sh "$VENV-$PYTHON_VERSION/bin/pip install -r requirements.txt"
+ sh "$VENV-$PYTHON_VERSION/bin/pip install '.[django]'"
+ sh """
+ export DB_NAME=${DB_NAME}
+ export DB_USER=${env.DB_USER}
+ export DB_PASSWORD=${env.DB_PASSWORD}
+ export DB_HOST=${env.DB_POSTGRESQL_HOST}
+ $VENV-$PYTHON_VERSION/bin/$PYTHON_VERSION -m generalresearch.thl_django.app.manage migrate
+ """
+ }
+
+ dir("thl-spectrum:$PYTHON_VERSION/") {
+ dir('carer') {
+ sh "/usr/local/bin/$PYTHON_VERSION -m venv $SPECTRUM_CARER_VENV-$PYTHON_VERSION"
+ sh "$SPECTRUM_CARER_VENV-$PYTHON_VERSION/bin/pip install -U setuptools wheel pip"
+ sh "$SPECTRUM_CARER_VENV-$PYTHON_VERSION/bin/pip install -r requirements.txt"
+
+ sh """
+ export DB_NAME=${SPECTRUM_DB_NAME}
+ $SPECTRUM_CARER_VENV-$PYTHON_VERSION/bin/$PYTHON_VERSION manage.py migrate --settings=carer.settings.unittest
+ """
+ }
+ }
+
+ dir("grliq:$PYTHON_VERSION/") {
+ dir('carer') {
+ sh "/usr/local/bin/$PYTHON_VERSION -m venv $GRLIQ_CARER_VENV-$PYTHON_VERSION"
+ sh "$GRLIQ_CARER_VENV-$PYTHON_VERSION/bin/pip install -U setuptools wheel pip"
+ sh "$GRLIQ_CARER_VENV-$PYTHON_VERSION/bin/pip install -r requirements.txt"
+
+ sh """
+ export DB_NAME=${GRLIQ_DB_NAME}
+ $GRLIQ_CARER_VENV-$PYTHON_VERSION/bin/$PYTHON_VERSION manage.py migrate --settings=carer.settings.unittest
+ """
+ }
+ }
+
+ dir("gr:$PYTHON_VERSION/") {
+ sh "/usr/local/bin/$PYTHON_VERSION -m venv $GR_CARER_VENV-$PYTHON_VERSION"
+ sh "$GR_CARER_VENV-$PYTHON_VERSION/bin/pip install -U setuptools wheel pip"
+ sh "$GR_CARER_VENV-$PYTHON_VERSION/bin/pip install -r requirements.txt"
+
+ sh """
+ export DB_NAME=${GR_DB_NAME}
+ $GR_CARER_VENV-$PYTHON_VERSION/bin/$PYTHON_VERSION manage.py migrate --settings=gr.settings.unittest
+ """
+ }
+ }
+ }
+
+ stage('base') {
+ when {
+ expression { return true }
+ }
+ steps {
+ dir("py-utils:$PYTHON_VERSION") {
+ sh "$VENV-$PYTHON_VERSION/bin/pytest -v tests/sql_helper.py"
+ }
+ }
+ }
+
+ stage('models') {
+ when {
+ expression { return true }
+ }
+ steps {
+ dir("py-utils:$PYTHON_VERSION") {
+ sh "$VENV-$PYTHON_VERSION/bin/pytest -v tests/models"
+ }
+ }
+ }
+
+ stage('managers') {
+ steps {
+ dir("py-utils:$PYTHON_VERSION") {
+ sh "$VENV-$PYTHON_VERSION/bin/pytest -v tests/managers"
+ }
+ }
+ }
+
+ stage('wall_status_codes') {
+ steps {
+ dir("py-utils:$PYTHON_VERSION") {
+ sh "$VENV-$PYTHON_VERSION/bin/pytest -v tests/wall_status_codes"
+ }
+ }
+ }
+
+ stage('wxet') {
+ steps {
+ dir("py-utils:$PYTHON_VERSION") {
+ sh "$VENV-$PYTHON_VERSION/bin/pytest -v tests/wxet"
+ }
+ }
+ }
+
+ stage('grliq') {
+ steps {
+ dir("py-utils:$PYTHON_VERSION") {
+ sh "$VENV-$PYTHON_VERSION/bin/pytest -v tests/grliq"
+ }
+ }
+ }
+
+ stage('incite') {
+ steps {
+ dir("py-utils:$PYTHON_VERSION") {
+ sh "$VENV-$PYTHON_VERSION/bin/pytest -v tests/incite"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ post {
+ always {
+ echo 'One way or another, I have finished'
+ deleteDir() /* clean up our workspace */
+ sh """
+ mariadb -h ${env.DB_MARIA_HOST} -u ${env.DB_USER} -p${env.DB_PASSWORD} --ssl=0 -e 'DROP DATABASE `${env.SPECTRUM_DB_NAME}`;'
+ """
+ sh """
+ PGPASSWORD=${env.DB_PASSWORD} psql -h ${env.DB_POSTGRESQL_HOST} -U ${env.DB_USER} -d postgres <<EOF
+ DROP DATABASE "${env.DB_NAME}";
+ EOF
+ """
+ sh """
+ PGPASSWORD=${env.DB_PASSWORD} psql -h ${env.DB_POSTGRESQL_HOST} -U ${env.DB_USER} -d postgres <<EOF
+ DROP DATABASE "${env.GRLIQ_DB_NAME}";
+ EOF
+ """
+ sh """
+ PGPASSWORD=${env.DB_PASSWORD} psql -h ${env.DB_POSTGRESQL_HOST} -U ${env.DB_USER} -d postgres <<EOF
+ DROP DATABASE "${env.GR_DB_NAME}";
+ EOF
+ """
+
+ sh "redis-cli -u ${env.THL_REDIS} FLUSHDB"
+ sh "redis-cli -u ${env.GR_REDIS} FLUSHDB"
+ }
+ }
+}