From 7feda1cadee2639bfb783353bc55fcbf9f115f6f Mon Sep 17 00:00:00 2001 From: retropikzel Date: Fri, 24 Oct 2025 20:23:57 +0300 Subject: [PATCH] Adding testing --- .gitignore | 3 +++ Dockerfile.jenkins | 2 ++ Dockerfile.test | 33 ++++++++++++++++++++++++++++++ Jenkinsfile | 42 ++++++++++++++++++++++++++++++++++++++ Makefile | 51 ++++++++++++++++++++++++++++++++++++++++++++++ system | 1 + 6 files changed, 132 insertions(+) create mode 100644 .gitignore create mode 100644 Dockerfile.jenkins create mode 100644 Dockerfile.test create mode 100644 Jenkinsfile create mode 100644 Makefile create mode 160000 system diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..897abff --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +*/README.html +*.tgz +tmp diff --git a/Dockerfile.jenkins b/Dockerfile.jenkins new file mode 100644 index 0000000..3236405 --- /dev/null +++ b/Dockerfile.jenkins @@ -0,0 +1,2 @@ +FROM debian:trixie +RUN apt-get update && apt-get install -y build-essential make docker.io diff --git a/Dockerfile.test b/Dockerfile.test new file mode 100644 index 0000000..e07369a --- /dev/null +++ b/Dockerfile.test @@ -0,0 +1,33 @@ +ARG SCHEME=chibi +ARG IMAGE=${SCHEME}:head +FROM debian:trixie AS cache +RUN apt-get update && apt-get install -y git ca-certificates make gcc libffi-dev +RUN mkdir ${HOME}/.snow && echo "()" > ${HOME}/.snow/config.scm +WORKDIR /cache +RUN git clone https://github.com/ashinn/chibi-scheme.git --depth=1 +RUN git clone https://codeberg.org/retropikzel/compile-r7rs.git --depth=1 --branch=silence +WORKDIR /cache/chibi-scheme +RUN make +RUN make install +WORKDIR /cache/compile-r7rs +RUN snow-chibi install --always-yes "(foreign c)" +RUN snow-chibi install --always-yes "(srfi 170)" +RUN make build-chibi + +ARG SCHEME=chibi +ARG IMAGE=${SCHEME}:head +FROM schemers/${IMAGE} +RUN apt-get update && apt-get install -y make gcc libffi-dev +RUN mkdir ${HOME}/.snow && echo "()" > ${HOME}/.snow/config.scm +COPY --from=cache /cache /cache +COPY --from=cache /usr/local/share/snow /usr/local/share/snow +COPY --from=cache /usr/local/lib/snow /usr/local/lib/snow +ARG SCHEME=chibi +WORKDIR /cache/compile-r7rs +RUN make install +WORKDIR /cache/chibi-scheme +RUN make install +WORKDIR / +RUN snow-chibi install --impls=${SCHEME} --always-yes "(srfi 64)" +RUN snow-chibi install --impls=${SCHEME} --always-yes "(foreign c)" + diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..ab84bc1 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,42 @@ +pipeline { + agent { + dockerfile { + filename 'Dockerfile.jenkins' + image 'debian' + args '--user=root --privileged -v /var/run/docker.sock:/var/run/docker.sock' + } + } + + options { + disableConcurrentBuilds() + buildDiscarder(logRotator(numToKeepStr: '10', artifactNumToKeepStr: '10')) + } + + parameters { + string(name: 'LIBRARIES', defaultValue: 'system', description: '') + } + + stages { + stage('Tests') { + steps { + script { + def implementations = sh(script: 'compile-r7rs --list-r7rs-schemes', returnStdout: true).split() + + params.LIBRARIES.split().each { LIBRARY -> + stage("${LIBRARY}") { + parallel implementations.collectEntries { SCHEME -> + [(SCHEME): { + stage("${SCHEME}") { + catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') { + sh "make SCHEME=${SCHEME} clean test-docker" + } + } + }] + } + } + } + } + } + } + } +} diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..2a96a82 --- /dev/null +++ b/Makefile @@ -0,0 +1,51 @@ +.SILENT: build install test test-docker clean ${TMPDIR} +LIBRARY=system +README=${LIBRARY}/README.html +DESCRIPTION=$(shell head -n1 ${LIBRARY}/README.md) +VERSION=$(shell cat ${LIBRARY}/VERSION) +AUTHOR=$(shell cat ${LIBRARY}/AUTHOR | tr '[:upper:]' '[:lower:]') +LIBRARY_FILE=${LIBRARY}/${AUTHOR}/${LIBRARY}.sld +PKG=${AUTHOR}-${LIBRARY}-${VERSION}.tgz +SCHEME=chibi +TMPDIR=tmp/${SCHEME} +TESTFILE=${LIBRARY}/test.scm + +DOCKERIMG=${SCHEME}:head +ifeq "${SCHEME}" "chicken" +DOCKERIMG="chicken:5" +endif + +all: build + +build: ${LIBRARY}/LICENSE ${LIBRARY}/VERSION ${LIBRARY}/AUTHOR + echo "
$$(cat ${LIBRARY}/README.md)
" > ${README} + snow-chibi package --version=${VERSION} --authors=${AUTHOR} --doc=${README} --description="${DESCRIPTION}" ${LIBRARY_FILE} + +install: + snow-chibi install --impls=${SCHEME} ${SNOW_CHIBI_ARGS} ${PKG} + +uninstall: + -snow-chibi remove --impls=${SCHEME} ${PKG} + +${TMPDIR}: + @mkdir -p ${TMPDIR} + @cp ${TESTFILE} ${TMPDIR}/ + @cp -r ${LIBRARY} ${TMPDIR}/ + +test: ${TMPDIR} + echo "Hello" + cd ${TMPDIR} && COMPILE_R7RS=${SCHEME} compile-r7rs -I . -o test test.scm + cd ${TMPDIR} && ./test + +test-docker: ${TMPDIR} + docker build --build-arg IMAGE=${DOCKERIMG} --build-arg SCHEME=${SCHEME} --tag=foreign-c-test-${SCHEME} -f Dockerfile.test . 2> ${TMPDIR}/docker.log || cat ${TMPDIR}/docker.log + docker run -it -v "${PWD}:/workdir" -w /workdir -t foreign-c-test-${SCHEME} \ + sh -c "make SCHEME=${SCHEME} SNOW_CHIBI_ARGS=--always-yes build install test; chmod -R 755 ${TMPDIR}" + +clean: + find . -name "README.html" -delete + rm -rf ${TMPDIR} + rm -rf *.tgz + +clean-all: + rm -rf tmp diff --git a/system b/system new file mode 160000 index 0000000..5a543f5 --- /dev/null +++ b/system @@ -0,0 +1 @@ +Subproject commit 5a543f51e99f79b7ee22e19fd235f5f75da4f5a4