diff --git a/.gitignore b/.gitignore index 4c7b41d..03ee98e 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ target/ .lein-repl-history .lein-failures pom.* +reports/* # cljs .shadow-cljs @@ -28,3 +29,4 @@ auth.edn config.edn .eastwood + diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index fba2f21..1749ddb 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -6,7 +6,7 @@ stages: - image .img: &img - image: "domaindrivenarchitecture/ddadevops-dind:4.10.7" + image: "domaindrivenarchitecture/ddadevops-dind:4.11.3" services: - docker:dind before_script: @@ -16,7 +16,7 @@ stages: - export IMAGE_TAG=$CI_COMMIT_TAG .cljs-job: &cljs - image: "domaindrivenarchitecture/ddadevops-clj-cljs:4.10.7" + image: "domaindrivenarchitecture/ddadevops-clj-cljs:4.11.3" cache: key: ${CI_COMMIT_REF_SLUG} paths: @@ -29,7 +29,7 @@ stages: - npm install .clj-job: &clj - image: "domaindrivenarchitecture/ddadevops-clj-cljs:4.10.7" + image: "domaindrivenarchitecture/ddadevops-clj:4.11.3" cache: key: ${CI_COMMIT_REF_SLUG} paths: @@ -93,6 +93,15 @@ package-uberjar: paths: - target/uberjar +package-native: + <<: *clj + stage: package + script: + - pyb package_native + artifacts: + paths: + - target/graalvm + release-to-clojars: <<: *clj <<: *tag_only diff --git a/build.py b/build.py index 0995609..bbcc445 100644 --- a/build.py +++ b/build.py @@ -29,6 +29,7 @@ def initialize(project): "release_organisation": "meissa", "release_repository_name": name, "release_artifacts": [ + "target/graalvm/c4k-forgejo", "target/uberjar/c4k-forgejo-standalone.jar", "target/frontend-build/c4k-forgejo.js", ], @@ -77,17 +78,17 @@ def package_frontend(project): run("mkdir -p target/frontend-build", shell=True, check=True) run("shadow-cljs release frontend", shell=True, check=True) run( - "cp public/js/main.js target/frontend-build/c4k-forgejo.js", + "cp public/js/main.js target/frontend-build/" + project.name + ".js", shell=True, check=True, ) run( - "sha256sum target/frontend-build/c4k-forgejo.js > target/frontend-build/c4k-forgejo.js.sha256", + "sha256sum target/frontend-build/c4k-forgejo.js > target/frontend-build/" + project.name + ".js.sha256", shell=True, check=True, ) run( - "sha512sum target/frontend-build/c4k-forgejo.js > target/frontend-build/c4k-forgejo.js.sha512", + "sha512sum target/frontend-build/c4k-forgejo.js > target/frontend-build/" + project.name + ".js.sha512", shell=True, check=True, ) @@ -96,12 +97,65 @@ def package_frontend(project): @task def package_uberjar(project): run( - "sha256sum target/uberjar/c4k-forgejo-standalone.jar > target/uberjar/c4k-forgejo-standalone.jar.sha256", + "sha256sum target/uberjar/c4k-forgejo-standalone.jar > target/uberjar/" + project.name + "-standalone.jar.sha256", shell=True, check=True, ) run( - "sha512sum target/uberjar/c4k-forgejo-standalone.jar > target/uberjar/c4k-forgejo-standalone.jar.sha512", + "sha512sum target/uberjar/c4k-forgejo-standalone.jar > target/uberjar/" + project.name + "-standalone.jar.sha512", + shell=True, + check=True, + ) + + +@task +def package_native(project): + run( + "mkdir -p target/graalvm", + shell=True, + check=True, + ) + run( + "native-image " + + "--native-image-info " + + "--report-unsupported-elements-at-runtime " + + "--no-server " + + "--no-fallback " + + "--features=clj_easy.graal_build_time.InitClojureClasses " + + "-jar target/uberjar/" + project.name + "-standalone.jar " + + "-H:IncludeResources=.*.yaml " + + "-H:Log=registerResource:verbose " + + "-H:Name=target/graalvm/" + project.name + "", + shell=True, + check=True, + ) + run( + "sha256sum target/graalvm/c4k-forgejo > target/graalvm/" + project.name + ".sha256", + shell=True, + check=True, + ) + run( + "sha512sum target/graalvm/c4k-forgejo > target/graalvm/" + project.name + ".sha512", + shell=True, + check=True, + ) + + +@task +def inst(project): + run( + "lein uberjar", + shell=True, + check=True, + ) + package_native(project) + run( + "sudo install -m=755 target/uberjar/" + project.name + "-standalone.jar /usr/local/bin/" + project.name + "-standalone.jar", + shell=True, + check=True, + ) + run( + "sudo install -m=755 target/graalvm/" + project.name + " /usr/local/bin/" + project.name + "", shell=True, check=True, ) diff --git a/doc/Development.md b/doc/Development.md index 461f3d6..08c8546 100644 --- a/doc/Development.md +++ b/doc/Development.md @@ -39,26 +39,23 @@ npx shadow-cljs release frontend ## graalvm-setup ``` -curl -LO https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-21.0.0.2/graalvm-ce-java11-linux-amd64-21.0.0.2.tar.gz +curl -LO https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-21.0.2/graalvm-community-jdk-21.0.2_linux-x64_bin.tar.gz # unpack -tar -xzf graalvm-ce-java11-linux-amd64-21.0.0.2.tar.gz +tar -xzf graalvm-community-jdk-21.0.2_linux-x64_bin.tar.gz -sudo mv graalvm-ce-java11-21.0.0.2 /usr/lib/jvm/ -sudo ln -s /usr/lib/jvm/graalvm-ce-java11-21.0.0.2 /usr/lib/jvm/graalvm -sudo ln -s /usr/lib/jvm/graalvm/bin/gu /usr/local/bin -sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/graalvm/bin/java 2 +sudo mv graalvm-community-openjdk-21.0.2+13.1 /usr/lib/jvm/ +sudo ln -s /usr/lib/jvm/graalvm-community-openjdk-21.0.2+13.1 /usr/lib/jvm/graalvm-21 +sudo ln -s /usr/lib/jvm/graalvm-21/bin/gu /usr/local/bin +sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/graalvm-21/bin/java 2 sudo update-alternatives --config java - -# install native-image in graalvm-ce-java11-linux-amd64-21.0.0.2/bin -sudo gu install native-image -sudo ln -s /usr/lib/jvm/graalvm/bin/native-image /usr/local/bin +sudo ln -s /usr/lib/jvm/graalvm-21/bin/native-image /usr/local/bin # deps sudo apt-get install build-essential libz-dev zlib1g-dev # build -cd ~/repo/dda/c4k-cloud +cd ~/repo/c4k/c4k-forgejo lein uberjar mkdir -p target/graalvm lein native diff --git a/project.clj b/project.clj index 04290e4..3a7b011 100644 --- a/project.clj +++ b/project.clj @@ -5,7 +5,7 @@ :url "https://www.apache.org/licenses/LICENSE-2.0.html"} :dependencies [[org.clojure/clojure "1.11.1" :scope "provided"] [org.clojure/tools.reader "1.3.7"] - [org.domaindrivenarchitecture/c4k-common-clj "6.1.2"] + [org.domaindrivenarchitecture/c4k-common-clj "6.1.3"] [hickory "0.7.1" :exclusions [viebel/codox-klipse-theme]]] :target-path "target/%s/" :source-paths ["src/main/cljc" @@ -25,22 +25,11 @@ :dependencies [[org.clojure/tools.cli "1.0.219"] [ch.qos.logback/logback-classic "1.4.14" :exclusions [com.sun.mail/javax.mail]] - [org.slf4j/jcl-over-slf4j "2.0.12"]]}} + [org.slf4j/jcl-over-slf4j "2.0.12"] + [com.github.clj-easy/graal-build-time "1.0.5"]]}} :release-tasks [["test"] ["vcs" "assert-committed"] ["change" "version" "leiningen.release/bump-version" "release"] ["vcs" "commit"] ["vcs" "tag" "v" "--no-sign"] - ["change" "version" "leiningen.release/bump-version"]] - :aliases {"native" ["shell" - "native-image" - "--report-unsupported-elements-at-runtime" - "--initialize-at-build-time" - "-jar" "target/uberjar/c4k-forgejo-standalone.jar" - "-H:ResourceConfigurationFiles=graalvm-resource-config.json" - "-H:Log=registerResource" - "-H:Name=target/graalvm/${:name}"] - "inst" ["shell" - "sh" - "-c" - "lein uberjar && sudo install -m=755 target/uberjar/c4k-forgejo-standalone.jar /usr/local/bin/c4k-forgejo-standalone.jar"]}) + ["change" "version" "leiningen.release/bump-version"]]) diff --git a/shadow-cljs.edn b/shadow-cljs.edn index dedf0b9..a95e276 100644 --- a/shadow-cljs.edn +++ b/shadow-cljs.edn @@ -4,7 +4,7 @@ "src/test/cljc" "src/test/cljs" "src/test/resources"] - :dependencies [[org.domaindrivenarchitecture/c4k-common-cljs "6.1.2"] + :dependencies [[org.domaindrivenarchitecture/c4k-common-cljs "6.1.3"] [hickory "0.7.1"]] :builds {:frontend {:target :browser :modules {:main {:init-fn dda.c4k-forgejo.browser/init}} diff --git a/src/main/clj/dda/c4k_forgejo/uberjar.clj b/src/main/clj/dda/c4k_forgejo/uberjar.clj index 8339570..14338d6 100644 --- a/src/main/clj/dda/c4k_forgejo/uberjar.clj +++ b/src/main/clj/dda/c4k_forgejo/uberjar.clj @@ -4,6 +4,8 @@ [dda.c4k-forgejo.core :as core] [dda.c4k-common.uberjar :as uberjar])) +(set! *warn-on-reflection* true) + (defn -main [& cmd-args] (uberjar/main-common "c4k-forgejo"