diff --git a/Makefile b/Makefile index 7199aa97..5b208915 100644 --- a/Makefile +++ b/Makefile @@ -11,17 +11,17 @@ image-%: ## Build Docker image with single language LANG .PHONY: run run: image ## Build and run image with all languages - docker run -it --rm polygott + docker run -it --rm --user runner:runner polygott run-%: image-% ## Build and run image with single language LANG - docker run -it --rm polygott-$(*) + docker run -it --rm --user runner:runner polygott-$(*) .PHONY: test test: image ## Build and test all languages - docker run polygott:latest bash -c polygott-self-test + docker run --user runner:runner polygott:latest bash -c polygott-self-test test-%: image-% ## Build and test single language LANG - docker run polygott-$(*) bash -c polygott-self-test + docker run --user runner:runner polygott-$(*) bash -c polygott-self-test .PHONY: changed-test changed-test: $(addprefix test-,$(basename $(notdir $(shell git diff --name-only origin/master -- languages)))) ## Build and test only changed/added languages diff --git a/gen/inside-test.ejs b/gen/inside-test.ejs index 4eee436d..9fd2963e 100644 --- a/gen/inside-test.ejs +++ b/gen/inside-test.ejs @@ -2,17 +2,18 @@ CODE=0 -<% for ( let lang of languages ) { -%> -# <%= lang.name %> -<% for ( let tname in lang.tests ) { -%> -<% let test = lang.tests[tname]; -%> -<% if ( test.input ) continue %> +<% for ( let lang of languages ) { %> +# <%= lang.name %> +<% for ( let tname in lang.tests ) { %> +<% let test = lang.tests[tname]; %> +<% if ( test.input ) continue %> <% if ( test.skip ) { %> echo S <%= lang.name %>:<%= tname %> <% } else { %> +polygott-lang-setup -l <%= lang.id %> echo "<%= btoa(test.code) %>" | base64 --decode | run-project -s -l <%= lang.id %> | diff -u --label "<%= lang.name %>" <( echo "<%= btoa(test.output) %>" | base64 --decode ) - && echo ✓ <%= lang.name %>:<%= tname %> || CODE=1 +<% } %> +<% } %> <% } %> -<% } %> -<% } -%> exit $CODE diff --git a/gen/tests.ejs b/gen/tests.ejs index a28a79ac..2f2ad491 100644 --- a/gen/tests.ejs +++ b/gen/tests.ejs @@ -1,12 +1,13 @@ -<% for ( let lang of languages ) { -%> -# <%= lang.name %> -<% for ( let tname in lang.tests ) { -%> -<% let test = lang.tests[tname]; -%> -<% if ( test.input ) continue %> -<% if ( test.skip ) { %> +<% for ( let lang of languages ) { %> +# <%= lang.name %> +<% for ( let tname in lang.tests ) { %> +<% let test = lang.tests[tname]; %> +<% if ( test.input ) continue %> +<% if ( test.skip ) { %> echo S <%= lang.name %>:<%= tname %> -<% } else { %> +<% } else { %> +polygott-lang-setup -l <%= lang.id %> echo "<%= btoa(test.code) %>" | base64 --decode | docker run --rm -i polygott run-project -s -l <%= lang.id %> | diff -u --label "<%= lang.name %>" <( echo "<%= btoa(test.output) %>" | base64 --decode ) - && echo ✓ <%= lang.name %>:<%= tname %> -<% } %> +<% } %> <% } %> -<% } -%> +<% } %> diff --git a/languages/clojure.toml b/languages/clojure.toml index 6018c7da..1d1ba465 100644 --- a/languages/clojure.toml +++ b/languages/clojure.toml @@ -10,27 +10,35 @@ packages = [ "openjdk-11-jre-headless" ] setup = [ - "wget https://download.clojure.org/install/linux-install-1.10.1.478.sh", - "chmod +x linux-install-1.10.1.478.sh", - "./linux-install-1.10.1.478.sh", - "rm linux-install-1.10.1.478.sh", + "wget https://download.clojure.org/install/linux-install-1.10.1.536.sh", + "chmod +x linux-install-1.10.1.536.sh", + "./linux-install-1.10.1.536.sh", + "rm linux-install-1.10.1.536.sh", + + # Trigger downloading of Clojure JARs now to avoid downloading them at runtime. + # (https://clojure.org/reference/deps_and_cli#_command_line_tools) + """su runner \ + -c 'clojure \ + -Sdeps "{:deps {org.clojure/tools.namespace {:mvn/version \\\"1.0.0\\\"}} :paths [\\\"src\\\" \\\".\\\"]}" \ + -Sforce \ + -Sverbose \ + --eval ""'""", - # this ensures that we cache the maven deps in the image ($XDG_CONFIG_HOME) - # https://clojure.org/reference/deps_and_cli#_command_line_tools - # pretty ridiculous but what else can you do? - "clojure -Sverbose -Sdeps '{:mvn/local-repo \"/home/runner/.m2/repository\"}' --eval ''", - "mv /root/.m2/repository $XDG_CONFIG_HOME/clojure/repository && rm -rf /root/.m2", "/usr/bin/build-prybar-lang.sh clojure" ] versionCommand = [ - "clojure", - "-e", + "clj", + "-Sdeps", + """{:deps {org.clojure/tools.namespace {:mvn/version "1.0.0"}} :paths ["src" "."]}""", + "--eval", "(clojure-version)" ] [run] command = [ - "clojure", + "clj", + "-Sdeps", + """{:deps {org.clojure/tools.namespace {:mvn/version "1.0.0"}} :paths ["src" "."]}""", "main.clj" ]