diff --git a/.gitignore b/.gitignore index b628608..f0c10c9 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,5 @@ retropikzel/*/README.html foreign venv +tmp diff --git a/Dockerfile.test b/Dockerfile.test index 013dabc..2b8681c 100644 --- a/Dockerfile.test +++ b/Dockerfile.test @@ -1,45 +1,47 @@ ARG SCHEME=chibi -ARG IMAGE=${SCHEME}:head -FROM debian:trixie AS build -RUN apt-get update && apt-get install -y \ -git ca-certificates make gcc libffi-dev libffi-dev wget xz-utils libcurl4 -RUN mkdir ${HOME}/.snow && echo "()" > ${HOME}/.snow/config.scm +ARG IMAGE=chibi:head + +FROM docker.io/debian:trixie AS build +RUN apt-get update && apt-get install -y build-essential git ca-certificates curl xz-utils chicken-bin +RUN chicken-install r7rs + WORKDIR /build -RUN wget https://gitlab.com/-/project/6808260/uploads/094ce726ce3c6cf8c14560f1e31aaea0/akku-1.1.0.amd64-linux.tar.xz \ - && tar -xf akku-1.1.0.amd64-linux.tar.xz \ - && mv akku-1.1.0.amd64-linux akku -#RUN git clone https://github.com/ashinn/chibi-scheme.git --depth=2 -RUN git clone https://github.com/Retropikzel/chibi-scheme.git --branch=snow-chibi-kawa-fixes --depth=1 -RUN git clone https://codeberg.org/retropikzel/compile-scheme.git --depth=2 +RUN git clone https://github.com/ashinn/chibi-scheme.git --depth=1 +RUN curl -O https://gitlab.com/-/project/6808260/uploads/094ce726ce3c6cf8c14560f1e31aaea0/akku-1.1.0.amd64-linux.tar.xz +RUN tar -xf akku*.tar.xz && mv akku-1.1.0.amd64-linux akku +RUN git clone https://codeberg.org/retropikzel/scheme-venv.git --depth=1 +RUN git clone https://codeberg.org/retropikzel/compile-scheme.git --depth=1 + WORKDIR /build/chibi-scheme RUN make RUN make install + WORKDIR /build/compile-scheme -RUN make build-gauche +RUN mkdir -p /root/.snow && echo "()" > /root/.snow/config.scm +RUN snow-chibi install --impls=chicken --always-yes retropikzel.system +RUN snow-chibi install --impls=chicken --always-yes srfi.170 +RUN make build-chicken + ARG SCHEME=chibi -ARG IMAGE=${SCHEME}:head -FROM schemers/${IMAGE} -RUN apt-get update && apt-get install -y \ - make gcc libffi-dev libcurl4 gauche lighttpd -RUN mkdir ${HOME}/.snow && echo "()" > ${HOME}/.snow/config.scm +FROM docker.io/schemers/${IMAGE} + COPY --from=build /build /build -ARG SCHEME=chibi -WORKDIR /build/compile-scheme -RUN make install +RUN apt-get update && apt-get install -y make curl WORKDIR /build/chibi-scheme RUN make install WORKDIR /build/akku RUN bash install.sh -ENV PATH=/root/.local/bin:${PATH} -RUN akku update +RUN ln -sf /root/.local/bin/akku /usr/local/bin/akku +WORKDIR /build/scheme-venv +RUN make install +WORKDIR /build/compile-scheme +RUN make install + +RUN mkdir -p /root/.snow && echo "()" > /root/.snow/config.scm WORKDIR /workdir -COPY fcgi-lighttpd.conf . -RUN snow-chibi --impls=${SCHEME} --always-yes install "(srfi 60)" -RUN snow-chibi --impls=${SCHEME} --always-yes install "(srfi 64)" -RUN if [ "${SCHEME}" != "gauche" ]; then snow-chibi --impls=${SCHEME} --always-yes install "(srfi 106)"; fi -RUN if [ "${SCHEME}" != "gauche" ]; then snow-chibi --impls=${SCHEME} --always-yes install --install-source-dir=. --install-library-dir=. "(srfi 106)"; fi -RUN snow-chibi --impls=${SCHEME} --always-yes install "(srfi 180)" +ARG SCHEME=chibi +ENV COMPILE_R7RS=${SCHEME} COPY Makefile . COPY retropikzel retropikzel/ -RUN akku install loko-srfi + diff --git a/Jenkinsfile b/Jenkinsfile index d29f4b1..fdb28bd 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -14,7 +14,7 @@ pipeline { } parameters { - string(name: 'LIBRARIES', defaultValue: 'ctrf', description: '') + string(name: 'LIBRARIES', defaultValue: 'ctrf mouth string url-encoding', description: '') } stages { @@ -28,7 +28,7 @@ pipeline { [(SCHEME): { stage("${SCHEME}") { catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') { - sh "timeout 600 make SCHEME=${SCHEME} DOCKER_QUIET='' test-r6rs-docker" + sh "timeout 600 make SCHEME=${SCHEME} LIBRARY=${LIBRARY} RNRS=r6rs run-test-docker" } } }] @@ -48,7 +48,7 @@ pipeline { [(SCHEME): { stage("${SCHEME}") { catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') { - sh "timeout 600 make SCHEME=${SCHEME} DOCKER_QUIET='' test-r7rs-docker" + sh "timeout 600 make SCHEME=${SCHEME} LIBRARY=${LIBRARY} RNRS=r7rs run-test-docker" } } }] diff --git a/Makefile b/Makefile index 875e285..5a77f47 100644 --- a/Makefile +++ b/Makefile @@ -16,7 +16,6 @@ DOCKERIMG=${SCHEME}:head ifeq "${SCHEME}" "chicken" DOCKERIMG="chicken:5" endif -DOCKER_TAG=scheme-library-test-${SCHEME} all: build @@ -30,32 +29,53 @@ install: uninstall: -snow-chibi remove --impls=${SCHEME} ${PKG} -init-venv: build - @rm -rf venv - @scheme-venv ${SCHEME} ${RNRS} venv - @echo "(import (scheme base) (scheme write) (scheme read) (scheme char) (scheme file) (scheme process-context) (retropikzel mouth) (srfi 64) (retropikzel ctrf) (retropikzel ${LIBRARY}))" > venv/test.scm - @echo "(test-runner-current (ctrf-runner))" >> venv/test.scm - @printf "#!r6rs\n(import (rnrs) (srfi :64) (srfi :98) (retropikzel mouth) (retropikzel ${LIBRARY}))" > venv/test.sps - @cat ${TESTFILE} >> venv/test.scm - @cat ${TESTFILE} >> venv/test.sps - @if [ "${RNRS}" = "r7rs" ]; then ./venv/bin/snow-chibi install retropikzel.mouth; fi - @if [ "${RNRS}" = "r7rs" ]; then ./venv/bin/snow-chibi install --always-yes retropikzel.ctrf; fi - @if [ "${RNRS}" = "r6rs" ]; then if [ -d ../foreign-c ]; then cp -r ../foreign-c/foreign venv/lib/; fi; fi - @if [ "${RNRS}" = "r6rs" ]; then if [ -d ../foreign-c-srfis ]; then cp -r ../foreign-c-srfis/srfi venv/lib/; fi; fi - @if [ "${RNRS}" = "r6rs" ]; then cp -r retropikzel venv/lib/; fi - @if [ "${SCHEME}" = "chezscheme" ]; then ./venv/bin/akku install akku-r7rs chez-srfi; fi - @if [ "${SCHEME}" = "ikarus" ]; then ./venv/bin/akku install akku-r7rs chez-srfi; fi - @if [ "${SCHEME}" = "ironscheme" ]; then ./venv/bin/akku install akku-r7rs chez-srfi; fi - @if [ "${SCHEME}" = "racket" ]; then ./venv/bin/akku install akku-r7rs chez-srfi; fi - @if [ "${RNRS}" = "r6rs" ]; then ./venv/bin/akku install; fi - @if [ "${SCHEME}" = "chicken" ]; then ./venv/bin/snow-chibi install --always-yes srfi.64; fi - @if [ "${SCHEME}-${RNRS}" = "mosh-r7rs" ]; then ./venv/bin/snow-chibi install --always-yes srfi.64; fi - @if [ "${RNRS}" = "r7rs" ]; then ./venv/bin/snow-chibi install ${PKG}; fi - -run-test: init-venv +run-test-venv: build + rm -rf venv + scheme-venv ${SCHEME} ${RNRS} venv + echo "(import (scheme base) (scheme write) (scheme read) (scheme char) (scheme file) (scheme process-context) (retropikzel mouth) (srfi 64) (retropikzel ctrf) (retropikzel ${LIBRARY}))" > venv/test.scm + echo "(test-runner-current (ctrf-runner))" >> venv/test.scm + printf "#!r6rs\n(import (rnrs) (srfi :64) (srfi :98) (retropikzel mouth) (retropikzel ${LIBRARY}))" > venv/test.sps + cat ${TESTFILE} >> venv/test.scm + cat ${TESTFILE} >> venv/test.sps + if [ "${RNRS}" = "r7rs" ]; then ./venv/bin/snow-chibi install --always-yes srfi.64; fi + if [ "${RNRS}" = "r7rs" ]; then ./venv/bin/snow-chibi install retropikzel.mouth; fi + if [ "${RNRS}" = "r7rs" ]; then printf "1\n1\n" | ./venv/bin/snow-chibi install retropikzel.ctrf; fi + if [ "${RNRS}" = "r6rs" ]; then cp -r retropikzel venv/lib/; fi + if [ "${SCHEME}" = "chezscheme" ]; then ./venv/bin/akku install akku-r7rs chez-srfi; fi + if [ "${SCHEME}" = "ikarus" ]; then ./venv/bin/akku install akku-r7rs chez-srfi; fi + if [ "${SCHEME}" = "ironscheme" ]; then ./venv/bin/akku install akku-r7rs chez-srfi; fi + if [ "${SCHEME}" = "racket" ]; then ./venv/bin/akku install akku-r7rs chez-srfi; fi + if [ "${RNRS}" = "r6rs" ]; then ./venv/bin/akku install; fi + if [ "${SCHEME}-${RNRS}" = "mosh-r7rs" ]; then ./venv/bin/snow-chibi install --always-yes srfi.64; fi + if [ "${RNRS}" = "r7rs" ]; then ./venv/bin/snow-chibi install ${PKG}; fi if [ "${RNRS}" = "r6rs" ]; then ./venv/bin/scheme-compile venv/test.sps; fi - if [ "${RNRS}" = "r7rs" ]; then VENV_CSC_ARGS="-L -lcurl" ./venv/bin/scheme-compile venv/test.scm; fi + if [ "${RNRS}" = "r7rs" ]; then CSC_OPTIONS="-L -lcurl" ./venv/bin/scheme-compile venv/test.scm; fi ./venv/test +run-test-system: build + mkdir -p tmp + echo "(import (scheme base) (scheme write) (scheme read) (scheme char) (scheme file) (scheme process-context) (retropikzel mouth) (srfi 64) (retropikzel ctrf) (retropikzel ${LIBRARY}))" > tmp/test.scm + echo "(test-runner-current (ctrf-runner))" >> tmp/test.scm + printf "#!r6rs\n(import (rnrs) (srfi :64) (srfi :98) (retropikzel mouth) (retropikzel ${LIBRARY}))" > tmp/test.sps + cat ${TESTFILE} >> tmp/test.scm + cat ${TESTFILE} >> tmp/test.sps + if [ "${RNRS}" = "r7rs" ]; then snow-chibi install --always-yes srfi.64; fi + if [ "${RNRS}" = "r7rs" ]; then snow-chibi install retropikzel.mouth; fi + if [ "${RNRS}" = "r7rs" ]; then printf "1\n1\n" | snow-chibi install retropikzel.ctrf; fi + if [ "${SCHEME}" = "chezscheme" ]; then akku install akku-r7rs chez-srfi; fi + if [ "${SCHEME}" = "ikarus" ]; then akku install akku-r7rs chez-srfi; fi + if [ "${SCHEME}" = "ironscheme" ]; then akku install akku-r7rs chez-srfi; fi + if [ "${SCHEME}" = "racket" ]; then akku install akku-r7rs chez-srfi; fi + if [ "${RNRS}" = "r6rs" ]; then akku install; fi + if [ "${SCHEME}-${RNRS}" = "mosh-r7rs" ]; then snow-chibi install --always-yes srfi.64; fi + if [ "${RNRS}" = "r7rs" ]; then snow-chibi install ${PKG}; fi + if [ "${RNRS}" = "r6rs" ]; then COMPILE_SCHEME=${SCHEME} compile-scheme tmp/test.sps; fi + if [ "${RNRS}" = "r7rs" ]; then COMPILE_SCHEME=${SCHEME} CSC_OPTIONS="-L -lcurl" compile-scheme tmp/test.scm; fi + ./tmp/test + +run-test-docker: + docker build --build-arg IMAGE=${DOCKERIMG} -f Dockerfile.test --tag=scheme-libraries-${SCHEME}-${RNRS} . + docker run scheme-libraries-${SCHEME}-${RNRS} sh -c "make SCHEME=${SCHEME} RNRS=${RNRS} LIBRARY=${LIBRARY} run-test-system ; chmod 755 *.json" + clean: git clean -X -f