From 69f5e31c5643dbd744699a3a68be7f999ad94e4a Mon Sep 17 00:00:00 2001 From: bom Date: Fri, 23 Feb 2024 17:25:07 +0100 Subject: [PATCH] Add native build --- .gitlab-ci.yml | 16 ++++++++++++--- build.py | 51 ++++++++++++++++++++++++++++++++++++++++++++-- doc/Development.md | 25 ++++++++++------------- project.clj | 25 +++++++---------------- 4 files changed, 80 insertions(+), 37 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0f1b554..9f0d1eb 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -7,7 +7,7 @@ stages: #- integrationtest .img: &img - image: "domaindrivenarchitecture/ddadevops-dind:4.10.7" + image: "domaindrivenarchitecture/ddadevops-dind:4.11.3" services: - docker:dind before_script: @@ -17,7 +17,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: @@ -30,7 +30,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: @@ -94,6 +94,16 @@ 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 a31e3bf..f4e996d 100644 --- a/build.py +++ b/build.py @@ -29,8 +29,9 @@ def initialize(project): "release_organisation": "meissa", "release_repository_name": name, "release_artifacts": [ - "target/uberjar/c4k-nextcloud-standalone.jar", - "target/frontend-build/c4k-nextcloud.js", + f"target/graalvm/{name}", + f"target/uberjar/{name}-standalone.jar", + f"target/frontend-build/{name}.js", ], "release_main_branch": "master", } @@ -107,6 +108,37 @@ 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 " + + f"-jar target/uberjar/{project.name}-standalone.jar " + + "-H:IncludeResources=.*.yaml " + + "-H:Log=registerResource:verbose " + + f"-H:Name=target/graalvm/{project.name}", + shell=True, + check=True, + ) + run( + f"sha256sum target/graalvm/{project.name} > target/graalvm/{project.name}.sha256", + shell=True, + check=True, + ) + run( + f"sha512sum target/graalvm/{project.name} > target/graalvm/{project.name}.sha512", + shell=True, + check=True, + ) @task def upload_clj(project): @@ -126,6 +158,21 @@ def lint(project): check=True, ) +@task +def inst(project): + package_uberjar(project) + package_native(project) + run( + f"sudo install -m=755 target/uberjar/{project.name}-standalone.jar /usr/local/bin/{project.name}-standalone.jar", + shell=True, + check=True, + ) + run( + f"sudo install -m=755 target/graalvm/{project.name} /usr/local/bin/{project.name}", + shell=True, + check=True, + ) + @task def patch(project): diff --git a/doc/Development.md b/doc/Development.md index 461f3d6..53e4c23 100644 --- a/doc/Development.md +++ b/doc/Development.md @@ -39,34 +39,31 @@ 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-nextcloud lein uberjar mkdir -p target/graalvm lein native # execute -./target/graalvm/c4k-cloud -h -./target/graalvm/c4k-cloud src/test/resources/valid-config.edn src/test/resources/valid-auth.edn -./target/graalvm/c4k-cloud src/test/resources/invalid-config.edn src/test/resources/invalid-auth.edn +./target/graalvm/c4k-nextcloud -h +./target/graalvm/c4k-nextcloud src/test/resources/nextcloud-test/valid-config.edn src/test/resources/nextcloud-test/valid-auth.edn +./target/graalvm/c4k-nextcloud src/test/resources/nextcloud-test/invalid-config.edn src/test/resources/nextcloud-test/invalid-auth.edn ``` ## c4k-setup diff --git a/project.clj b/project.clj index 6de244a..3eb5de4 100644 --- a/project.clj +++ b/project.clj @@ -4,8 +4,8 @@ :license {:name "Apache License, Version 2.0" :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.clojure/tools.reader "1.4.0"] + [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" @@ -22,25 +22,14 @@ :uberjar {:aot :all :main dda.c4k-nextcloud.uberjar :uberjar-name "c4k-nextcloud-standalone.jar" - :dependencies [[org.clojure/tools.cli "1.0.219"] - [ch.qos.logback/logback-classic "1.4.14" + :dependencies [[org.clojure/tools.cli "1.1.230"] + [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-nextcloud-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-nextcloud-standalone.jar /usr/local/bin/c4k-nextcloud-standalone.jar"]}) \ No newline at end of file + ["change" "version" "leiningen.release/bump-version"]]) \ No newline at end of file