From c5780d04a7afbc7c3e18f008542669cbe0f1860e Mon Sep 17 00:00:00 2001 From: Michael Jerger Date: Mon, 19 Feb 2024 16:27:32 +0100 Subject: [PATCH 1/2] build native image --- .gitlab-ci.yml | 15 ++++++++++--- build.py | 58 +++++++++++++++++++++++++++++++++++++++++++++++-- project.clj | 20 +++++------------ shadow-cljs.edn | 2 +- 4 files changed, 74 insertions(+), 21 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index dc62ebf..8d53b05 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.4" 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.4" 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.4" 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 8ba25a1..283486e 100644 --- a/build.py +++ b/build.py @@ -28,8 +28,9 @@ def initialize(project): "release_organisation": "meissa", "release_repository_name": name, "release_artifacts": [ - "target/uberjar/c4k-website-standalone.jar", - "target/frontend-build/c4k-website.js", + "target/graalvm/" + name, + "target/uberjar/" + name + "-standalone.jar", + "target/frontend-build/" + name + ".js" ], } @@ -105,6 +106,59 @@ def package_uberjar(project): 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:IncludeResources=.*.xml " + + "-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, + ) + @task def upload_clj(project): diff --git a/project.clj b/project.clj index 0086556..317eeb7 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"] [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" @@ -23,24 +23,14 @@ :main dda.c4k-website.uberjar :uberjar-name "c4k-website-standalone.jar" :dependencies [[org.clojure/tools.cli "1.0.219"] - [ch.qos.logback/logback-classic "1.4.14" + [ch.qos.logback/logback-classic "1.5.0" :exclusions [com.sun.mail/javax.mail]] - [org.slf4j/jcl-over-slf4j "2.0.11"]]}} + [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-website-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-website-standalone.jar /usr/local/bin/c4k-website-standalone.jar"]}) + ) diff --git a/shadow-cljs.edn b/shadow-cljs.edn index 69b9fa2..d4415fd 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.0"] + :dependencies [[org.domaindrivenarchitecture/c4k-common-cljs "6.1.3"] [hickory "0.7.1"]] :builds {:frontend {:target :browser :modules {:main {:init-fn dda.c4k-website.browser/init}} From f323306c9c0e388acbbce24818c80aa0bbf8842d Mon Sep 17 00:00:00 2001 From: Michael Jerger Date: Mon, 19 Feb 2024 18:32:32 +0100 Subject: [PATCH 2/2] fix build script --- build.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.py b/build.py index 283486e..6b4cb14 100644 --- a/build.py +++ b/build.py @@ -129,12 +129,12 @@ def package_native(project): check=True, ) run( - "sha256sum target/graalvm/c4k-forgejo > target/graalvm/" + project.name + ".sha256", + "sha256sum target/graalvm/" + project.name + " > target/graalvm/" + project.name + ".sha256", shell=True, check=True, ) run( - "sha512sum target/graalvm/c4k-forgejo > target/graalvm/" + project.name + ".sha512", + "sha512sum target/graalvm/" + project.name + " > target/graalvm/" + project.name + ".sha512", shell=True, check=True, )