From 3bb3f02bcd73c296eec6d3fc8a83973576700a0f Mon Sep 17 00:00:00 2001
From: Martin Weinelt <martin@darmstadt.freifunk.net>
Date: Tue, 10 Aug 2021 22:42:19 +0200
Subject: [PATCH] contrib: drop Jenkins setup

Has gone unused for a while now and if it is needed again it can be
retrieved from the history.
---
 contrib/ci/Jenkinsfile                        |  82 --------------
 contrib/ci/jenkins-community-slave/Dockerfile |  33 ------
 contrib/ci/jenkins-community-slave/README.md  |  41 -------
 contrib/ci/jenkins-community-slave/slave.py   | 103 ------------------
 4 files changed, 259 deletions(-)
 delete mode 100644 contrib/ci/Jenkinsfile
 delete mode 100644 contrib/ci/jenkins-community-slave/Dockerfile
 delete mode 100644 contrib/ci/jenkins-community-slave/README.md
 delete mode 100644 contrib/ci/jenkins-community-slave/slave.py

diff --git a/contrib/ci/Jenkinsfile b/contrib/ci/Jenkinsfile
deleted file mode 100644
index 8acfa4922..000000000
--- a/contrib/ci/Jenkinsfile
+++ /dev/null
@@ -1,82 +0,0 @@
-pipeline {
-	agent none
-	environment {
-		GLUON_SITEDIR = "contrib/ci/minimal-site"
-		GLUON_TARGET = "x86-64"
-		BUILD_LOG = "1"
-	}
-	stages {
-		stage('lint') {
-			parallel {
-				stage('lint-lua') {
-					agent { label 'gluon-docker' }
-					steps {
-						sh label: 'Identify runner', script: 'echo $SLAVE_NAME'
-						sh 'make lint-lua'
-					}
-				}
-				stage('lint-sh') {
-					agent { label 'gluon-docker-v1' }
-					steps {
-						sh label: 'Identify runner', script: 'echo $SLAVE_NAME'
-						sh 'make lint-sh'
-					}
-				}
-			}
-		}
-		stage('docs') {
-			agent { label 'gluon-docker' }
-			steps {
-				sh label: 'Identify runner', script: 'echo $SLAVE_NAME'
-				sh 'make -C docs html'
-			}
-		}
-		stage('build') {
-			agent { label 'gluon-docker-v2' }
-			steps {
-				sh label: 'Identify runner', script: 'echo $SLAVE_NAME'
-				sh 'make update'
-				sh 'test -d /dl_cache && ln -s /dl_cache openwrt/dl || true'
-				timeout(time: 2, unit: "HOURS") {
-					sh 'make -j$(nproc) V=s'
-				}
-				stash includes: '**/output/images/factory/*-x86-64.img.gz', name: 'gluon-x86-64-factory'
-			}
-		}
-		stage('test') {
-			agent { label 'gluon-vmx' }
-			steps {
-				sh label: 'Identify runner', script: 'echo $SLAVE_NAME'
-				unstash 'gluon-x86-64-factory'
-				sh label: 'Unpack image', script: 'gunzip -cd ./output/images/factory/*x86-64*.img.gz > ./image.img'
-				sh label: 'Print python environment', script: 'python3 -m pip freeze'
-				script {
-					for (f in findFiles(glob: 'tests/*.py')) {
-						timeout(time: 10, unit: "MINUTES") {
-							sh label: "Test ${f.name}", script: "python3 tests/${f.name} --use-tmp-workdir"
-						}
-					}
-				}
-			}
-		}
-	}
-}
-
-/*
- api-history:
-
- Every time the build dependencies of gluon change, the version
- every container has to be rebuilt. Therefore, we use Jenkins
- labels which intoduce a version number which is documented here.
- As soon, as you properly rebuilt your docker container, you
- can notify lemoer, that you have updated your node.
-
- - gluon-docker-v1:
-   - add shellcheck binary to the build environment
- - gluon-docker-v2:
-   - add qemu-testlab testing, requires KVM virtualization support
-   - require rsync dependency to be able to build the next branch
- - gluon-vmx
-   - splits the qemu testing from the gluon-docker-v2 label to accomodate
-     nodes without the vmx cpu flag
-*/
diff --git a/contrib/ci/jenkins-community-slave/Dockerfile b/contrib/ci/jenkins-community-slave/Dockerfile
deleted file mode 100644
index 5f4de901c..000000000
--- a/contrib/ci/jenkins-community-slave/Dockerfile
+++ /dev/null
@@ -1,33 +0,0 @@
-FROM gluonmesh/build:latest
-
-USER root
-
-# this is needed to install default-jre-headless in debian slim images
-RUN mkdir -p /usr/share/man/man1
- 
-RUN apt-get update && apt-get install -y default-jre-headless curl git netcat-openbsd python3 python3-pip qemu-system-x86 iproute2 openssh-client rsync
-RUN python3 -m pip install jenkins-webapi sphinx sphinx_rtd_theme gluon-qemu-testlab==0.0.5
- 
-# Get docker-compose in the agent container
-RUN mkdir -p /home/jenkins
-RUN mkdir -p /var/lib/jenkins
-RUN mkdir -p /remoting
-RUN chown gluon /home/jenkins
-RUN chown gluon /var/lib/jenkins
-RUN chown gluon /remoting
- 
-# Start-up script to attach the slave to the master
-ADD slave.py /var/lib/jenkins/slave.py
-
-USER gluon
- 
-WORKDIR /home/jenkins
-
-ENV JENKINS_URL "https://build.ffh.zone/"
-ENV JENKINS_SLAVE_ADDRESS ""
-ENV SLAVE_EXECUTORS "1"
-ENV SLAVE_LABELS "docker"
-ENV SLAVE_WORING_DIR ""
-ENV CLEAN_WORKING_DIR "true"
- 
-CMD [ "python3", "-u", "/var/lib/jenkins/slave.py" ]
diff --git a/contrib/ci/jenkins-community-slave/README.md b/contrib/ci/jenkins-community-slave/README.md
deleted file mode 100644
index 45ff12ba3..000000000
--- a/contrib/ci/jenkins-community-slave/README.md
+++ /dev/null
@@ -1,41 +0,0 @@
-# Gluon CI using Jenkins
-
-## Requirements
-- Linux system
-  - with docker installed
-  - with Hardware Virtualisation (KVM Support)
-    - Verify using: `lscpu | grep vmx`
-    - If machine is virtualized host needs to load `kvm_intel` with `nested=1` option and cpuflags need to include `vmx`
-
-## Architecture
-
-![Screenshot from 2019-09-24 00-20-32](https://user-images.githubusercontent.com/601153/65468827-9edf2c80-de65-11e9-9fe0-56c3487719c3.png)
-
-## Installation
-You can support the gluon CI with your infrastructure:
-1. You need to query @lemoer (freifunk@irrelefant.net) for credentials.
-2. He will give you a `SLAVE_NAME` and a `SLAVE_SECRET` for your host.
-3. Then go to your docker host and substitute the values for  `SLAVE_NAME` and a `SLAVE_SECRET` in the following statements:
-``` shell
-git clone https://github.com/freifunk-gluon/gluon/
-cd gluon/contrib/ci/jenkins-community-slave/
-docker build -t gluon-jenkins .
-mkdir /var/cache/openwrt_dl_cache/
-chown 1000:1000 /var/cache/openwrt_dl_cache
-echo "z /dev/kvm 0666 - kvm -" > /etc/tmpfiles.d/kvm.conf
-systemd-tmpfiles --create
-docker run --detach --restart always \
-    --env "SLAVE_NAME=whoareyou" \
-    --env "SLAVE_SECRET=changeme" \
-    --device /dev/kvm:/dev/kvm \
-    --volume /var/cache/openwrt_dl_cache/:/dl_cache \
-    gluon-jenkins
-```
-4. Check whether the instance is running correctly:
-   - Your node should appear [here](https://build.ffh.zone/label/gluon-docker/).
-   - When clicking on it, Jenkins should state "Agent is connected." like here: 
-![Screenshot from 2019-09-24 01-00-52](https://user-images.githubusercontent.com/601153/65469209-dac6c180-de66-11e9-9d62-0d1c3b6b940b.png)
-5. **Your docker container needs to be rebuilt, when the build dependencies of gluon change. As soon as build dependencies have changed, the build dependency api level has to be raised.** After you rebuilt your docker container, notify @lemoer, so he can bump the versioning number.
-
-## Backoff
-- If @lemoer is not reachable, please be patient at first if possible. Otherwise contact info@hannover.freifunk.net or join the channel `#freifunkh` on hackint.
diff --git a/contrib/ci/jenkins-community-slave/slave.py b/contrib/ci/jenkins-community-slave/slave.py
deleted file mode 100644
index 7efa1f2e4..000000000
--- a/contrib/ci/jenkins-community-slave/slave.py
+++ /dev/null
@@ -1,103 +0,0 @@
-from jenkins import Jenkins, JenkinsError, NodeLaunchMethod
-import os
-import signal
-import sys
-import subprocess
-import shutil
-import requests
-import time
-
-slave_jar = '/var/lib/jenkins/slave.jar'
-slave_name = os.environ['SLAVE_NAME'] if os.environ['SLAVE_NAME'] != '' else 'docker-slave-' + os.environ['HOSTNAME']
-jnlp_url = os.environ['JENKINS_URL'] + '/computer/' + slave_name + '/slave-agent.jnlp'
-slave_jar_url = os.environ['JENKINS_URL'] + '/jnlpJars/slave.jar'
-print(slave_jar_url)
-process = None
-
-def clean_dir(dir):
-    for root, dirs, files in os.walk(dir):
-        for f in files:
-            os.unlink(os.path.join(root, f))
-        for d in dirs:
-            shutil.rmtree(os.path.join(root, d))
-
-def slave_create(node_name, working_dir, executors, labels):
-    j = Jenkins(os.environ['JENKINS_URL'], os.environ['JENKINS_USER'], os.environ['JENKINS_PASS'])
-    j.node_create(node_name, working_dir, num_executors = int(executors), labels = labels, launcher = NodeLaunchMethod.JNLP)
-
-def slave_delete(node_name):
-    j = Jenkins(os.environ['JENKINS_URL'], os.environ['JENKINS_USER'], os.environ['JENKINS_PASS'])
-    j.node_delete(node_name)
-
-def slave_download(target):
-    if os.path.isfile(slave_jar):
-        os.remove(slave_jar)
-
-    r = requests.get(os.environ['JENKINS_URL'] + '/jnlpJars/slave.jar')
-    with open('/var/lib/jenkins/slave.jar', 'wb') as f:
-        f.write(r.content)
-
-def slave_run(slave_jar, jnlp_url):
-    params = [ 'java', '-jar', slave_jar, '-jnlpUrl', jnlp_url ]
-    if os.environ['JENKINS_SLAVE_ADDRESS'] != '':
-        params.extend([ '-connectTo', os.environ['JENKINS_SLAVE_ADDRESS' ] ])
-
-    if os.environ['SLAVE_SECRET'] == '':
-        params.extend([ '-jnlpCredentials', os.environ['JENKINS_USER'] + ':' + os.environ['JENKINS_PASS'] ])
-    else:
-        params.extend([ '-secret', os.environ['SLAVE_SECRET'] ])
-    return subprocess.Popen(params, stdout=subprocess.PIPE)
-
-def signal_handler(sig, frame):
-    if process != None:
-        process.send_signal(signal.SIGINT)
-
-signal.signal(signal.SIGINT, signal_handler)
-signal.signal(signal.SIGTERM, signal_handler)
-
-def h():
-    print("ERROR!: please specify environment variables")
-    print("")
-    print('docker run -e "SLAVE_NAME=test" -e "SLAVE_SECRET=..." jenkins')
-
-if os.environ.get('SLAVE_NAME') is None:
-    h()
-    sys.exit(1)
-
-if os.environ.get('SLAVE_SECRET') is None:
-    h()
-    sys.exit(1)
-
-def master_ready(url):
-    try:
-        r = requests.head(url, timeout=None)
-        return r.status_code == requests.codes.ok
-    except:
-        return False
-
-while not master_ready(slave_jar_url):
-    print("Master not ready yet, sleeping for 10sec!")
-    time.sleep(10)
-
-slave_download(slave_jar)
-print('Downloaded Jenkins slave jar.')
-
-if os.environ['SLAVE_WORING_DIR']:
-    os.setcwd(os.environ['SLAVE_WORING_DIR'])
-
-if os.environ['CLEAN_WORKING_DIR'] == 'true':
-    clean_dir(os.getcwd())
-    print("Cleaned up working directory.")
-
-if os.environ['SLAVE_NAME'] == '':
-    slave_create(slave_name, os.getcwd(), os.environ['SLAVE_EXECUTORS'], os.environ['SLAVE_LABELS'])
-    print('Created temporary Jenkins slave.')
-
-process = slave_run(slave_jar, jnlp_url)
-print('Started Jenkins slave with name "' + slave_name + '" and labels [' + os.environ['SLAVE_LABELS'] + '].')
-process.wait()
-
-print('Jenkins slave stopped.')
-if os.environ['SLAVE_NAME'] == '':
-    slave_delete(slave_name)
-    print('Removed temporary Jenkins slave.')
-- 
GitLab