summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ci/.gitignore2
-rw-r--r--ci/Dockerfile13
-rw-r--r--ci/data/etc/ldapadmin/figwheel-main.edn34
-rw-r--r--ci/data/etc/ldapadmin/options.lisp11
-rw-r--r--ci/data/etc/sbclrc6
-rwxr-xr-xci/data/install-root.sh30
-rwxr-xr-xci/data/install-user-sbcl.sh10
-rw-r--r--ci/data/ldapadmin-starter.lisp7
-rwxr-xr-xci/data/start_app.sh42
-rwxr-xr-xci/docker-build.sh28
-rw-r--r--ci/docker-compose.yaml.example48
-rwxr-xr-xci/docker-run.sh7
-rw-r--r--ci/env.sh4
-rw-r--r--lisp/ldapadmin.asd2
14 files changed, 243 insertions, 1 deletions
diff --git a/ci/.gitignore b/ci/.gitignore
new file mode 100644
index 0000000..416ae59
--- /dev/null
+++ b/ci/.gitignore
@@ -0,0 +1,2 @@
+tmp
+docker-compose.yaml
diff --git a/ci/Dockerfile b/ci/Dockerfile
new file mode 100644
index 0000000..18a0dab
--- /dev/null
+++ b/ci/Dockerfile
@@ -0,0 +1,13 @@
+FROM ubuntu:noble
+MAINTAINER Carlos Konstanski
+ADD tmp/docker-start.tar.xz /
+ARG OLO_USERNAME=root
+ARG OLO_GROUPNAME=root
+ARG OLO_UID=0
+ARG OLO_GID=0
+RUN data/install-root.sh
+USER ${OLO_UID}:${OLO_GID}
+RUN data/install-user-sbcl.sh
+ENTRYPOINT [ "data/start_app.sh" ]
+#ENTRYPOINT [ "/bin/bash", "-l", "-c" ]
+CMD []
diff --git a/ci/data/etc/ldapadmin/figwheel-main.edn b/ci/data/etc/ldapadmin/figwheel-main.edn
new file mode 100644
index 0000000..864266c
--- /dev/null
+++ b/ci/data/etc/ldapadmin/figwheel-main.edn
@@ -0,0 +1,34 @@
+;; Figwheel-main configuration options see: https://figwheel.org/config-options
+;; these will be overriden by the metadata config options in dev.cljs.edn build file
+{
+ ;; Set the server port https://figwheel.org/config-options#ring-server-options
+ ;; :ring-server-options {:port 9500}
+
+ ;; Change the target directory from the "target" to "resources"
+ ;; https://figwheel.org/config-options#target-dir
+ ;; :target-dir "resources"
+
+ ;; Server Ring Handler (optional) https://figwheel.org/docs/ring-handler.html
+ ;; If you want to embed a ring handler into the figwheel server, this
+ ;; is for simple ring servers
+ ;; :ring-handler hello_world.server/handler
+
+ ;; To be able to open files in your editor from the heads up display
+ ;; you will need to put a script on your path. This script will have
+ ;; to take a file path and a line number ie.
+ ;; in ~/bin/myfile-opener:
+ ;;
+ ;; #! /bin/sh
+ ;; emacsclient -n +$2:$3 $1
+ ;;
+ ;; :open-file-command "myfile-opener"
+
+ ;; if you are using emacsclient you can just use
+ ;; :open-file-command "emacsclient"
+
+ ;; Logging output gets printed to the REPL, if you want to redirect it to a file:
+ ;; :log-file "figwheel-main.log"
+
+ :target-dir "resources"
+ :open-url false
+}
diff --git a/ci/data/etc/ldapadmin/options.lisp b/ci/data/etc/ldapadmin/options.lisp
new file mode 100644
index 0000000..3d35ea0
--- /dev/null
+++ b/ci/data/etc/ldapadmin/options.lisp
@@ -0,0 +1,11 @@
+((:name "ldapadmin"
+ :url "http://localhost:3006"
+ :document-root "ldapadmin"
+ :title "LDAP Administration Tool"
+ :meta-description "LDAP Administration Tool"
+ :ldap (:ldap-host "ldap.pippiandcarlos.com"
+ :sslflag nil
+ :username "cn=Manager,dc=pippiandcarlos,dc=com"
+ :password "ayluvmiym"
+ :base-dn "dc=pippiandcarlos,dc=com"
+ :debug-mode nil)))
diff --git a/ci/data/etc/sbclrc b/ci/data/etc/sbclrc
new file mode 100644
index 0000000..3a931d0
--- /dev/null
+++ b/ci/data/etc/sbclrc
@@ -0,0 +1,6 @@
+;;; The following lines added by ql:add-to-init-file:
+#-quicklisp
+(let ((quicklisp-init (merge-pathnames "quicklisp/setup.lisp"
+ (user-homedir-pathname))))
+ (when (probe-file quicklisp-init)
+ (load quicklisp-init)))
diff --git a/ci/data/install-root.sh b/ci/data/install-root.sh
new file mode 100755
index 0000000..1aacb79
--- /dev/null
+++ b/ci/data/install-root.sh
@@ -0,0 +1,30 @@
+#!/bin/bash
+
+echo 'APT::Acquire::Retries "3";' > /etc/apt/apt.conf.d/80-retries
+export DEBIAN_FRONTEND=noninteractive
+apt-get update
+apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" dist-upgrade
+apt-get -y install -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" aptitude
+aptitude -y install -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" apt-transport-https ca-certificates software-properties-common language-pack-de
+update-ca-certificates
+aptitude update
+aptitude -y install -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" sbcl sbcl-source leiningen dnsutils bind9-host vim curl wget rlwrap pass rsync sudo jq lsof zip unzip ldap-utils
+
+rsync -av /data/ /
+
+if (( OLO_UID != 0 )); then
+ userdel ubuntu || true
+ groupdel ubuntu || true
+ rm -rf /home/ubuntu || true
+ export HOMEDIR="/home/${OLO_USERNAME}"
+ groupadd -g "${OLO_GID}" "${OLO_GROUPNAME}" || OLO_GROUPNAME=$(grep -F "x:${OLO_GID}:" /etc/group | awk -F: '{print $1}')
+ useradd -s /bin/bash -m -u "${OLO_UID}" -g "${OLO_GROUPNAME}" "${OLO_USERNAME}" || OLO_USERNAME=$(grep -F "x:${OLO_UID}:" /etc/passwd | awk -F: '{print $1}')
+ SUDOERS_FILENAME="${OLO_USERNAME//\./_}"
+ echo "${OLO_USERNAME} ALL=(ALL) NOPASSWD: ALL" > "/etc/sudoers.d/${SUDOERS_FILENAME}"
+ chmod 0440 "/etc/sudoers.d/${SUDOERS_FILENAME}"
+ mkdir -p "${HOMEDIR}/.gnupg"
+ chown "${OLO_USERNAME}":"${OLO_GROUPNAME}" "${HOMEDIR}/.gnupg"
+ chmod 0700 "${HOMEDIR}/.gnupg"
+fi
+
+exit 0
diff --git a/ci/data/install-user-sbcl.sh b/ci/data/install-user-sbcl.sh
new file mode 100755
index 0000000..8ab05ea
--- /dev/null
+++ b/ci/data/install-user-sbcl.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+curl -o ~/quicklisp.lisp https://beta.quicklisp.org/quicklisp.lisp
+sbcl --load ~/quicklisp.lisp --eval "(quicklisp-quickstart:install)" --eval "(sb-ext:exit)"
+sbcl --eval "(loop for pkg in '(net-telent-date cl-ppcre uffi hunchentoot cl-log ironclad trivial-ldap cl-smtp drakma cl-json swank) do (ql:quickload (symbol-name pkg)))" --eval "(sb-ext:exit)"
+
+mkdir -p ~/.config/common-lisp
+echo "(:source-registry (:tree (:home \"common-lisp/systems\")) :inherit-configuration)" | tee ~/.config/common-lisp/source-registry.conf
+
+exit 0
diff --git a/ci/data/ldapadmin-starter.lisp b/ci/data/ldapadmin-starter.lisp
new file mode 100644
index 0000000..84cbd7a
--- /dev/null
+++ b/ci/data/ldapadmin-starter.lisp
@@ -0,0 +1,7 @@
+(load "/etc/sbclrc")
+(asdf:operate 'asdf:load-op 'swank)
+(setf swank::*loopback-interface* "0.0.0.0")
+(swank:create-server :port 4106 :dont-close t)
+(asdf:operate 'asdf:load-op 'ldapadmin)
+(in-package :ldapadmin)
+(ldapadmin)
diff --git a/ci/data/start_app.sh b/ci/data/start_app.sh
new file mode 100755
index 0000000..0b40f17
--- /dev/null
+++ b/ci/data/start_app.sh
@@ -0,0 +1,42 @@
+#!/bin/bash
+
+mkdir -p ~/common-lisp/systems ~/opt
+cd ~/opt
+git clone -b master git@ns:repos/ldapadmin.git
+git clone -b master git@github.com:ckonstanski/org-ckons-cljs.form.git
+git clone -b master git@github.com:ckonstanski/org-ckons-cljs.notifications
+git clone -b master git@github.com:ckonstanski/org-ckons-condition
+git clone -b master git@github.com:ckonstanski/org-ckons-core
+git clone -b master git@github.com:ckonstanski/org-ckons-http
+git clone -b master git@github.com:ckonstanski/org-ckons-json
+
+logdir="/var/log/lisp"
+mv -f ${logdir}/ldapadmin.log.1 ${logdir}/ldapadmin.log.2
+mv -f ${logdir}/${APPNAME}ldapadmin.log ${logdir}/ldapadmin.log.1
+
+pushd ~/common-lisp/systems
+ln -s ~/opt/ldapadmin/lisp/ldapadmin.asd ldapadmin.asd
+ln -s ~/opt/org-ckons-condition/org-ckons-condition.asd org-ckons-condition.asd
+ln -s ~/opt/org-ckons-core/org-ckons-core.asd org-ckons-core.asd
+ln -s ~/opt/org-ckons-file/org-ckons-file.asd org-ckons-file.asd
+ln -s ~/opt/org-ckons-http/org-ckons-http.asd org-ckons-http.asd
+ln -s ~/opt/org-ckons-json/org-ckons-json.asd org-ckons-json.asd
+popd
+
+pushd ~/opt/ldapadmin/lisp/webapps/ldapadmin/conf
+ln -s /etc/ldapadmin/options.lisp options.lisp
+popd
+
+pushd ~/opt/ldapadmin/lisp/webapps/ldapadmin/clojurescript/ldapadmin
+ln -s /etc/ldapadmin/figwheel-main.edn figwheel-main.edn
+mkdir checkouts
+pushd checkouts
+ln -s ~/opt/org-ckons-cljs.form org-ckons-cljs.form
+ln -s ~/opt/org-ckons-cljs.notifications org-ckons-cljs.notifications
+popd
+
+lein clean
+lein fig:build | tee /tmp/ldapadmin/lein.log &
+popd
+
+SBCL_HOME=/usr/lib/sbcl SBCL_SOURCE_ROOT=/usr/lib/sbcl/src exec sbcl --dynamic-space-size 256 --userinit /data/ldapadmin-starter.lisp | tee /tmp/ldapadmin/sbcl.log
diff --git a/ci/docker-build.sh b/ci/docker-build.sh
new file mode 100755
index 0000000..560cbc8
--- /dev/null
+++ b/ci/docker-build.sh
@@ -0,0 +1,28 @@
+#!/bin/bash -e
+
+. env.sh
+
+builddir='tmp'
+container='ldapadmin'
+
+rm -rf ${builddir}
+mkdir ${builddir}
+rsync -aq data ${builddir}
+pushd ${builddir} 2>/dev/null
+
+tar Jcvf docker-start.tar.xz data/
+docker stop ${container} || true
+docker container prune -f
+docker rmi --force ${container} || true
+
+DOCKER_BUILDKIT=0 docker compose \
+ --progress "plain" \
+ --ansi "never" \
+ build \
+ --no-cache \
+ --pull
+
+popd 2>/dev/null
+rm -rf tmp
+
+exit 0
diff --git a/ci/docker-compose.yaml.example b/ci/docker-compose.yaml.example
new file mode 100644
index 0000000..78c8478
--- /dev/null
+++ b/ci/docker-compose.yaml.example
@@ -0,0 +1,48 @@
+services:
+ ldapadmin:
+ image: ldapadmin:v0.1
+ tty: true
+ build:
+ context: .
+ args:
+ OLO_USERNAME: ${OLO_USERNAME}
+ OLO_GROUPNAME: ${OLO_GROUPNAME}
+ OLO_UID: ${OLO_UID}
+ OLO_GID: ${OLO_GID}
+ network_mode: "host"
+ container_name: ldapadmin
+ volumes:
+ - type: bind
+ source: ~/.m2
+ target: /home/${OLO_USERNAME}/.m2
+ - type: bind
+ source: ~/.bashrc
+ target: /home/${OLO_USERNAME}/.bashrc
+ - type: bind
+ source: ~/.bash_history
+ target: /home/${OLO_USERNAME}/.bash_history
+ - type: bind
+ source: ~/.vimrc
+ target: /home/${OLO_USERNAME}/.vimrc
+ - type: bind
+ source: ~/.gitconfig
+ target: /home/${OLO_USERNAME}/.gitconfig
+ - type: bind
+ source: ~/.ssh
+ target: /home/${OLO_USERNAME}/.ssh
+ - type: bind
+ source: /etc/hosts
+ target: /etc/hosts
+ - type: bind
+ source: /etc/ssh
+ target: /etc/ssh
+ - type: bind
+ source: /var/log/lisp
+ target: /var/log/lisp
+ environment:
+ - TERM=xterm-256color
+ - https_proxy=${https_proxy}
+ - http_proxy=${http_proxy}
+ - no_proxy=${no_proxy}
+ - GITHUB_TOKEN=${GITHUB_TOKEN}
+ command: [ "/bin/bash -l -c" ]
diff --git a/ci/docker-run.sh b/ci/docker-run.sh
new file mode 100755
index 0000000..c368224
--- /dev/null
+++ b/ci/docker-run.sh
@@ -0,0 +1,7 @@
+#!/bin/bash -e
+
+. env.sh
+
+docker compose --ansi "never" up -d
+
+exit 0
diff --git a/ci/env.sh b/ci/env.sh
new file mode 100644
index 0000000..a49fb54
--- /dev/null
+++ b/ci/env.sh
@@ -0,0 +1,4 @@
+export OLO_USERNAME=$(id -un)
+export OLO_GROUPNAME=$(id -gn)
+export OLO_UID=$(id -u)
+export OLO_GID=$(id -g)
diff --git a/lisp/ldapadmin.asd b/lisp/ldapadmin.asd
index 915e09f..c430075 100644
--- a/lisp/ldapadmin.asd
+++ b/lisp/ldapadmin.asd
@@ -18,7 +18,7 @@
:components ,components))
(defparameter *quicklisp-packages* '(net-telent-date cl-ppcre uffi hunchentoot cl-log ironclad trivial-ldap cl-smtp))
-(defparameter *asdf-packages* '(org-ckons-core org-ckons-http org-ckons-json))
+(defparameter *asdf-packages* '(org-ckons-core org-ckons-condition org-ckons-http org-ckons-json))
(defparameter *all-packages* (append *quicklisp-packages* *asdf-packages*))
(loop for pkg in *quicklisp-packages* do