Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GraalVM build #267

Merged
merged 17 commits into from
Feb 1, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
124 changes: 65 additions & 59 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ jobs:
tag_name: ${{ steps.latest-tag.outputs.tag}}
release_name: ${{ steps.latest-tag.outputs.tag}}

build-binary:
name: Build binary
build-jvm:
name: Build JVM jar and embedded jar
needs: release
runs-on: ubuntu-latest

Expand All @@ -43,95 +43,101 @@ jobs:
with:
lein: 2.9.5

- name: Generate binary
run: lein bin
- name: Generate jar and embedded jar
run: lein with-profiles +native-image bin

- uses: actions/upload-artifact@v1
- name: Get latest tag
id: latest-tag
uses: WyriHaximus/github-action-get-previous-tag@0.1.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Upload jar
uses: actions/upload-artifact@v2
with:
path: target/clojure-lsp-${{ steps.latest-tag.outputs.tag}}-standalone.jar
name: clojure-lsp.jar

- name: Upload embedded jar
uses: actions/upload-artifact@v2
with:
name: clojure-lsp
path: target/clojure-lsp
name: clojure-lsp

upload-binary:
name: Upload binary to release
needs: build-binary
deploy-jvm:
name: Deploy JVM jar and embedded jar
needs: build-jvm
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v1
- uses: actions/download-artifact@v2
with:
name: clojure-lsp
- name: Get latest tag
id: latest-tag
uses: WyriHaximus/github-action-get-previous-tag@0.1.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload linux binary to release
- uses: actions/download-artifact@v2

- name: Upload jar to release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: clojure-lsp.jar
asset_name: clojure-lsp.jar
tag: ${{ steps.latest-tag.outputs.tag}}

- name: Upload JVM unix embbeded jar to release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: clojure-lsp
asset_name: clojure-lsp
tag: ${{ steps.latest-tag.outputs.tag}}

- name: Upload Windows binary to release
- name: Upload JVM Windows embedded jar to release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: clojure-lsp
asset_name: clojure-lsp.bat
tag: ${{ steps.latest-tag.outputs.tag}}

build-jar:
name: Build jar
needs: release
deploy-native-linux:
name: Deploy native linux binary
needs: build-jvm
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v1
- name: Prepare java
uses: actions/setup-java@v1
with:
java-version: 1.8

- name: Install leiningen
uses: DeLaGuardo/setup-clojure@master
with:
lein: 2.9.5

- name: Generate jar
run: lein uberjar

- name: Get latest tag
id: latest-tag
uses: WyriHaximus/github-action-get-previous-tag@0.1.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- uses: actions/upload-artifact@v1
- uses: actions/download-artifact@v2
with:
name: clojure-lsp.jar
path: target/clojure-lsp-${{ steps.latest-tag.outputs.tag}}-standalone.jar

upload-jar:
name: Upload jar to release
needs: build-jar
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v1
- uses: actions/download-artifact@v2
- name: Cache GraalVM
uses: actions/cache@v1
id: cache-graalvm
with:
name: clojure-lsp.jar
- name: Get latest tag
id: latest-tag
uses: WyriHaximus/github-action-get-previous-tag@0.1.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload jar to release
uses: svenstaro/upload-release-action@v2
path: ~/graalvm-ce-java11-21.0.0
key: ${{ runner.os }}-graalvm-21.0.0
restore-keys: |
${{ runner.os }}-graalvm-21.0.0

- name: Download GraalVM
run: |
cd ~
if ! [ -d graalvm-ce-java11-21.0.0 ]; then
curl -O -sL https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-21.0.0/graalvm-ce-java11-linux-amd64-21.0.0.tar.gz
tar xzf graalvm-ce-java11-linux-amd64-21.0.0.tar.gz
fi

- name: Build Linux native image
run: |
export CLOJURE_LSP_JAR=clojure-lsp.jar
export CLOJURE_LSP_XMX="-J-Xmx6g"
export GRAALVM_HOME="$HOME/graalvm-ce-java11-21.0.0"
graalvm/native-compile.sh

- name: Upload artifact
uses: actions/upload-artifact@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: clojure-lsp-${{ steps.latest-tag.outputs.tag}}-standalone.jar
asset_name: clojure-lsp.jar
tag: ${{ steps.latest-tag.outputs.tag}}
path: clojure-lsp
name: clojure-lsp-${{ steps.latest-tag.outputs.tag}}-linux-amd64.zip
2 changes: 1 addition & 1 deletion .lsp/config.edn
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@
and [[:inner 1]]
or [[:inner 1]]
are [[:inner 0]]}}
:clj-kondo {:linters {:unused-namespace {:exclude [clojure.tools.logging]}}}
:clj-kondo {:linters {:unused-namespace {:exclude [taoensso.timbre]}}}
:semantic-tokens? true
:use-metadata-for-privacy? true}
18 changes: 10 additions & 8 deletions deps.edn
Original file line number Diff line number Diff line change
@@ -1,23 +1,25 @@
{:deps {org.clojure/clojure {:mvn/version "1.10.1"}
{:deps {org.clojure/clojure {:mvn/version "1.10.2"}
org.clojure/tools.reader {:mvn/version "1.3.4"}
org.eclipse.lsp4j/org.eclipse.lsp4j {:mvn/version "0.10.0" :exclusions [org.eclipse.xtend/org.eclipse.xtend.lib]}
org.eclipse.xtend/org.eclipse.xtend.lib {:mvn/version "2.25.0.M1" :exclusions [com.google.guava/guava]}
com.google.guava/guava {:mvn/version "30.1-jre"}
rewrite-clj/rewrite-clj {:mvn/version "0.6.1"}
org.clojure/data.json {:mvn/version "1.0.0"}
log4j/log4j {:mvn/version "1.2.17" :exclusions [javax.mail/mail
javax.jms/jms
com.sun.jdmk/jmxtools
com.sun.jmx/jmxri]}
org.clojure/tools.logging {:mvn/version "1.1.0"}
nrepl/nrepl {:mvn/version "0.8.3"}
ericdallo/timbre {:mvn/version "5.1.2" :exclusions [org.julienxx/clj-slack
com.mchange/c3p0
org.graylog2/gelfclient
ymilky/franzy
com.newrelic.agent.java/newrelic-agent
cljs-node-io
congomongo
raven-clj]}
org.clojure/core.async {:mvn/version "1.3.610"}
org.xerial/sqlite-jdbc {:mvn/version "3.34.0"}
seancorfield/next.jdbc {:mvn/version "1.1.613"}
digest/digest {:mvn/version "1.4.10"}
borkdude/dynaload {:mvn/version "0.2.2"}
cljfmt/cljfmt {:mvn/version "0.7.0" :exclusions [rewrite-cljs/rewrite-cljs]}
medley/medley {:mvn/version "1.3.0"}
com.taoensso/tufte {:mvn/version "2.2.0"}
trptcolin/versioneer {:mvn/version "0.2.0"}
clj-kondo/clj-kondo {:mvn/version "2021.01.21-20210126.140057-6"}}
:paths ["resources" "src"]
Expand Down
2 changes: 1 addition & 1 deletion docs/capabilities.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ Below are all the currently supported LSP capabilities and their implementation
| client/unregisterCapability | | |
| workspace/workspaceFolders | | |
| workspace/didChangeWorkspaceFolders | | |
| workspace/didChangeConfiguration | √ | Currently only log |
| workspace/didChangeConfiguration | √ | Currently does nothing but log |
| workspace/configuration | | |
| workspace/didChangeWatchedFiles | √ | |
| workspace/symbol | √ | |
Expand Down
13 changes: 13 additions & 0 deletions graalvm/jni-config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
[
{
"name":"clojure_lsp.main",
"methods":[{"name":"main","parameterTypes":["java.lang.String[]"] }]
},
{
"name":"java.lang.ClassLoader",
"methods":[
{"name":"getPlatformClassLoader","parameterTypes":[] },
{"name":"loadClass","parameterTypes":["java.lang.String"] }
]
}
]
47 changes: 47 additions & 0 deletions graalvm/native-compile.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
#!/usr/bin/env bash

set -e

if [ -z "$GRAALVM_HOME" ]; then
echo "Please set GRAALVM_HOME"
exit 1
fi

if [[ ! -f "$CLOJURE_LSP_JAR" ]]
then
lein with-profiles +native-image "do" clean, uberjar
CLOJURE_LSP_JAR=$(ls target/clojure-lsp-*-standalone.jar)
fi

CLOJURE_LSP_XMX=${CLOJURE_LSP_XMX:-"-J-Xmx4g"}

"$GRAALVM_HOME/bin/gu" install native-image

args=("-jar" "$CLOJURE_LSP_JAR"
"-H:Name=clojure-lsp"
"-J-Dclojure.compiler.direct-linking=true"
"-J-Dclojure.spec.skip-macros=true"
"-H:+ReportExceptionStackTraces"
"--enable-url-protocols=jar"
"-H:+InlineBeforeAnalysis"
"-H:Log=registerResource:"
"--verbose"
"-H:IncludeResources='db/.*|static/.*|templates/.*|.*.yml|.*.xml|.*/org/sqlite/.*|org/sqlite/.*|.*.properties'"
"-H:ConfigurationFileDirectories=graalvm"
"--initialize-at-build-time"
"--report-unsupported-elements-at-runtime"
"--no-server"
"--no-fallback"
"--native-image-info"
"--allow-incomplete-classpath"
"-H:ServiceLoaderFeatureExcludeServices=javax.sound.sampled.spi.AudioFileReader"
"-H:ServiceLoaderFeatureExcludeServices=javax.sound.midi.spi.MidiFileReader"
"-H:ServiceLoaderFeatureExcludeServices=javax.sound.sampled.spi.MixerProvider"
"-H:ServiceLoaderFeatureExcludeServices=javax.sound.sampled.spi.FormatConversionProvider"
"-H:ServiceLoaderFeatureExcludeServices=javax.sound.sampled.spi.AudioFileWriter"
"-H:ServiceLoaderFeatureExcludeServices=javax.sound.midi.spi.MidiDeviceProvider"
"-H:ServiceLoaderFeatureExcludeServices=javax.sound.midi.spi.SoundbankReader"
"-H:ServiceLoaderFeatureExcludeServices=javax.sound.midi.spi.MidiFileWriter"
"$CLOJURE_LSP_XMX")

"$GRAALVM_HOME/bin/native-image" "${args[@]}"
3 changes: 3 additions & 0 deletions graalvm/proxy-config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[
["org.eclipse.lsp4j.services.LanguageClient","org.eclipse.lsp4j.jsonrpc.Endpoint"]
]
Loading