chromium,chromedriver: 129.0.6668.91 -> 129.0.6668.100
[NixPkgs.git] / pkgs / by-name / so / sonarlint-ls / package.nix
blob7c043da4e359b24f1507cd954a40048020bdea66
1 { lib
2 , fetchFromGitHub
3 , jre_headless
4 , maven
5 , jdk17
6 , makeWrapper
7 , writeShellApplication
8 , runCommand
9 , sonarlint-ls
10 , curl
11 , pcre
12 , common-updater-scripts
13 , jq
14 , gnused
17 maven.buildMavenPackage rec {
18   pname = "sonarlint-ls";
19   version = "3.5.1.75119";
21   src = fetchFromGitHub {
22     owner = "SonarSource";
23     repo = "sonarlint-language-server";
24     rev = version;
25     hash = "sha256-6tbuX0wUpqbTyM44e7PqZHL0/XjN8hTFCgfzV+qc1m0=";
26   };
28   mvnJdk = jdk17;
29   manualMvnArtifacts = [
30     "org.apache.maven.surefire:surefire-junit-platform:3.1.2"
31     "org.junit.platform:junit-platform-launcher:1.8.2"
32   ];
34   mvnHash = "sha256-ZhAQtpi0wQP8+QPeYaor2MveY+DZ9RPENb3kITnuWd8=";
36   buildOffline = true;
39   # disable node and npm module installation because the need network access
40   # for the tests.
41   mvnDepsParameters = "-Dskip.installnodenpm=true -Dskip.npm package";
43   # disable failing tests which either need network access or are flaky
44   mvnParameters = lib.escapeShellArgs [
45     "-Dskip.installnodenpm=true"
46     "-Dskip.npm"
47     "-Dtest=!LanguageServerMediumTests,
48     !LanguageServerWithFoldersMediumTests,
49     !NotebookMediumTests,
50     !ConnectedModeMediumTests,
51     !JavaMediumTests"
52   ];
54   doCheck = false;
56   installPhase = ''
57     runHook preInstall
59     mkdir -p $out/{bin,share/plugins}
60     install -Dm644 target/sonarlint-language-server-*.jar \
61       $out/share/sonarlint-ls.jar
62     install -Dm644 target/plugins/* \
63       $out/share/plugins
66     makeWrapper ${jre_headless}/bin/java $out/bin/sonarlint-ls \
67       --add-flags "-jar $out/share/sonarlint-ls.jar" \
68       --add-flags "-stdio" \
69       --add-flags "-analyzers $(ls -1 $out/share/plugins | tr '\n' ' ')"
71     runHook postInstall
72   '';
74   nativeBuildInputs = [ makeWrapper ];
76   passthru = {
77     tests = {
78       sonarlint-ls-starts-successfully = runCommand "${pname}-test" { } ''
79         ${sonarlint-ls}/bin/sonarlint-ls > $out
80         cat $out | grep "SonarLint backend started"
81       '';
82     };
84     updateScript =
85       let
86         pkgFile = builtins.toString ./package.nix;
87       in
88       lib.getExe (writeShellApplication {
89         name = "update-${pname}";
90         runtimeInputs = [ curl pcre common-updater-scripts jq gnused ];
91         text = ''
92           LATEST_TAG=$(curl https://api.github.com/repos/${src.owner}/${src.repo}/tags | \
93             jq -r '[.[] | select(.name | test("^[0-9]"))] | sort_by(.name | split(".") |
94             map(tonumber)) | reverse | .[0].name')
95           update-source-version sonarlint-ls "$LATEST_TAG"
96           sed -i '0,/mvnHash *= *"[^"]*"/{s/mvnHash = "[^"]*"/mvnHash = ""/}' ${pkgFile}
98           echo -e "\nFetching all mvn dependencies to calculate the mvnHash. This may take a while ..."
99           nix-build -A sonarlint-ls.fetchedMavenDeps 2> sonarlint-ls-stderr.log || true
101           NEW_MVN_HASH=$(grep "got:" sonarlint-ls-stderr.log | awk '{print ''$2}')
102           rm sonarlint-ls-stderr.log
103           # escaping double quotes looks ugly but is needed for variable substitution
104           # use # instead of / as separator because the sha256 might contain the / character
105           sed -i "0,/mvnHash *= *\"[^\"]*\"/{s#mvnHash = \"[^\"]*\"#mvnHash = \"$NEW_MVN_HASH\"#}" ${pkgFile}
106         '';
107       });
108   };
110   meta = {
111     description = "Sonarlint language server";
112     mainProgram = "sonarlint-ls";
113     homepage = "https://github.com/SonarSource/sonarlint-language-server";
114     license = lib.licenses.lgpl3;
115     maintainers = with lib.maintainers; [ tricktron ];
116   };