Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at devShellTools-shell 132 lines 4.0 kB view raw
1{ 2 lib, 3 fetchFromGitHub, 4 makeWrapper, 5 jdk_headless, 6 jre_minimal, 7 maven, 8 writeShellApplication, 9 curl, 10 pcre, 11 common-updater-scripts, 12 jq, 13 gnused, 14}: 15 16let 17 jre = jre_minimal.override { 18 modules = [ 19 "java.base" 20 "java.logging" 21 "java.xml" 22 ]; 23 jdk = jdk_headless; 24 }; 25in 26maven.buildMavenPackage rec { 27 pname = "lemminx"; 28 version = "0.31.0"; 29 30 src = fetchFromGitHub { 31 owner = "eclipse"; 32 repo = "lemminx"; 33 rev = version; 34 hash = "sha256-a+9RN1265fsmYAUMuUTxA+VqJv7xPlzuc8HqoZwmR4M="; 35 # Lemminx reads this git information at runtime from a git.properties 36 # file on the classpath 37 leaveDotGit = true; 38 postFetch = '' 39 cat > $out/org.eclipse.lemminx/src/main/resources/git.properties << EOF 40 git.build.version=${version} 41 git.commit.id.abbrev=$(git -C $out rev-parse --short HEAD) 42 git.commit.message.short=$(git -C $out log -1 --pretty=format:%s) 43 git.branch=main 44 EOF 45 rm -rf $out/.git 46 ''; 47 }; 48 49 mvnJdk = jdk_headless; 50 mvnHash = "sha256-0KnaXr5Mmwm0pV4o5bAX0MWKl6f/cvlO6cyV9UcgXeo="; 51 52 # Disable gitcommitid plugin which needs a .git folder which we don't have. 53 # Disable failing tests which either need internet access or are flaky. 54 mvnParameters = lib.escapeShellArgs [ 55 "-Dmaven.gitcommitid.skip=true" 56 "-Dtest=!XMLValidationCommandTest, 57 !XMLValidationExternalResourcesBasedOnDTDTest, 58 !XMLSchemaPublishDiagnosticsTest, 59 !PlatformTest, 60 !XMLValidationExternalResourcesBasedOnXSDTest, 61 !XMLExternalTest, 62 !XMLSchemaCompletionExtensionsTest, 63 !XMLSchemaDiagnosticsTest, 64 !MissingChildElementCodeActionTest, 65 !XSDValidationExternalResourcesTest, 66 !DocumentLifecycleParticipantTest, 67 !DTDValidationExternalResourcesTest, 68 !DTDHoverExtensionsTest, 69 !CacheResourcesManagerTest" 70 ]; 71 72 installPhase = '' 73 runHook preInstall 74 75 mkdir -p $out/bin $out/share 76 install -Dm644 org.eclipse.lemminx/target/org.eclipse.lemminx-uber.jar $out/share 77 78 makeWrapper ${jre}/bin/java $out/bin/lemminx \ 79 --add-flags "-jar $out/share/org.eclipse.lemminx-uber.jar" 80 81 runHook postInstall 82 ''; 83 84 nativeBuildInputs = [ makeWrapper ]; 85 86 passthru = { 87 updateScript = 88 let 89 pkgFile = builtins.toString ./package.nix; 90 in 91 lib.getExe (writeShellApplication { 92 name = "update-${pname}"; 93 runtimeInputs = [ 94 curl 95 pcre 96 common-updater-scripts 97 jq 98 gnused 99 ]; 100 text = '' 101 if [ -z "''${GITHUB_TOKEN:-}" ]; then 102 echo "no GITHUB_TOKEN provided - you could meet API request limiting" >&2 103 fi 104 105 LATEST_TAG=$(curl -H "Accept: application/vnd.github+json" \ 106 ''${GITHUB_TOKEN:+-H "Authorization: bearer $GITHUB_TOKEN"} \ 107 -Lsf https://api.github.com/repos/${src.owner}/${src.repo}/tags | \ 108 jq -r '[.[] | select(.name | test("^[0-9]"))] | sort_by(.name | split(".") | 109 map(tonumber)) | reverse | .[0].name') 110 update-source-version ${pname} "$LATEST_TAG" 111 sed -i '0,/mvnHash *= *"[^"]*"/{s/mvnHash = "[^"]*"/mvnHash = ""/}' ${pkgFile} 112 113 echo -e "\nFetching all mvn dependencies to calculate the mvnHash. This may take a while ..." 114 nix-build -A ${pname}.fetchedMavenDeps 2> ${pname}-stderr.log || true 115 116 NEW_MVN_HASH=$(grep "got:" ${pname}-stderr.log | awk '{print ''$2}') 117 rm ${pname}-stderr.log 118 # escaping double quotes looks ugly but is needed for variable substitution 119 # use # instead of / as separator because the sha256 might contain the / character 120 sed -i "0,/mvnHash *= *\"[^\"]*\"/{s#mvnHash = \"[^\"]*\"#mvnHash = \"$NEW_MVN_HASH\"#}" ${pkgFile} 121 ''; 122 }); 123 }; 124 125 meta = with lib; { 126 description = "XML Language Server"; 127 mainProgram = "lemminx"; 128 homepage = "https://github.com/eclipse/lemminx"; 129 license = licenses.epl20; 130 maintainers = with maintainers; [ tricktron ]; 131 }; 132}