diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index 606965a0a0e1..d78fee412ee6 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -7227,6 +7227,11 @@ name = "Tom van Dijk"; keys = [ { fingerprint = "D044 F07B 8863 B681 26BD 79FE 7A98 4C82 07AD BA51"; } ]; }; + dtvillafana = { + github = "dtvillafana"; + githubId = 82293276; + name = "David VillafaƱa"; + }; dudeofawesome = { email = "tourist-04.iced@icloud.com"; github = "dudeofawesome"; diff --git a/pkgs/development/tools/language-servers/ansible-language-server/default.nix b/pkgs/development/tools/language-servers/ansible-language-server/default.nix new file mode 100644 index 000000000000..8506e6edd8ed --- /dev/null +++ b/pkgs/development/tools/language-servers/ansible-language-server/default.nix @@ -0,0 +1,110 @@ +{ + lib, + fetchFromGitHub, + pkgs, +}: +let + pname = "ansible-language-server"; + version = "26.1.3"; + + src = fetchFromGitHub { + owner = "ansible"; + repo = "vscode-ansible"; + tag = "v${version}"; + hash = "sha256-DsEW3xP8Fa9nwPuyEFVqG6rvAZgr4TDB6jhyixdvqt8="; + }; + + # Fixed-output derivation to fetch yarn berry dependencies + offlineCache = pkgs.stdenvNoCC.mkDerivation { + name = "${pname}-${version}-yarn-cache"; + inherit src; + + nativeBuildInputs = [ + pkgs.yarn-berry + pkgs.nodejs + pkgs.cacert + ]; + + outputHashMode = "recursive"; + outputHashAlgo = "sha256"; + outputHash = "sha256-NYbHhvlVoSL7lT1EdFkNJlmzRzQ0Gudo5pF0t6JtSic="; + + buildPhase = '' + export HOME=$TMPDIR + export SSL_CERT_FILE=${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt + + yarn config set enableTelemetry false + yarn config set enableGlobalCache false + yarn config set cacheFolder .yarn/cache + yarn install --mode=skip-build + + mkdir -p $out + cp -r .yarn/cache/* $out/ + cp .yarnrc.yml $out/ || true + ''; + + dontInstall = true; + }; + +in +pkgs.stdenvNoCC.mkDerivation { + inherit pname version src; + + nativeBuildInputs = with pkgs; [ + yarn-berry + nodejs + makeWrapper + ]; + + buildPhase = '' + export HOME=$TMPDIR + + # Set up yarn cache from our FOD + mkdir -p .yarn/cache + for f in ${offlineCache}/*; do + if [ "$(basename $f)" != ".yarnrc.yml" ]; then + cp -r "$f" .yarn/cache/ + fi + done + + yarn config set enableTelemetry false + yarn config set enableGlobalCache false + yarn config set cacheFolder .yarn/cache + yarn config set enableNetwork false + + # Only install deps for ansible-language-server workspace + yarn workspaces focus @ansible/ansible-language-server + + # Build ansible-language-server (exclude tests) + cd packages/ansible-language-server + rm -rf test + yarn run compile + ''; + + installPhase = '' + mkdir -p $out/lib/node_modules/ansible-language-server + cp -r out package.json $out/lib/node_modules/ansible-language-server/ + + # Copy node_modules (yarn berry installs them at workspace root) + # Use -L to dereference symlinks (yarn creates symlinks for workspace packages) + cd ../.. + cp -rL node_modules $out/lib/node_modules/ansible-language-server/ + + mkdir -p $out/lib/node_modules/ansible-language-server/bin + cp packages/ansible-language-server/bin/ansible-language-server $out/lib/node_modules/ansible-language-server/bin/ + + mkdir -p $out/bin + makeWrapper ${pkgs.nodejs}/bin/node $out/bin/ansible-language-server \ + --prefix PATH : ${pkgs.python3}/bin \ + --add-flags "$out/lib/node_modules/ansible-language-server/out/server/src/server.js" + ''; + + meta = with lib; { + changelog = "https://github.com/ansible/vscode-ansible/releases/tag/v${version}"; + description = "Ansible Language Server"; + mainProgram = "ansible-language-server"; + homepage = "https://github.com/ansible/vscode-ansible"; + license = licenses.mit; + maintainers = with lib.maintainers; [ dtvillafana ]; + }; +} diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix index 828c2207e76c..b80121e855e2 100644 --- a/pkgs/top-level/aliases.nix +++ b/pkgs/top-level/aliases.nix @@ -295,7 +295,6 @@ mapAliases { androidndkPkgs_26 = throw "androidndkPkgs_26 has been removed, as it is EOL"; # Added 2025-08-09 anew = throw "'anew' has been removed, as it has been unmaintained upstream since March 2022"; # Added 2026-01-01 anonymousPro = anonymous-pro-fonts; # Added 2026-02-08 - ansible-language-server = throw "ansible-language-server was removed, because it was unmaintained in nixpkgs."; # Added 2025-09-24 ansible-later = throw "ansible-later has been discontinued. The author recommends switching to ansible-lint"; # Added 2025-08-24 ansible_2_16 = throw "ansible_2_16 has been removed, as it is EOL"; # Added 2025-11-10 ansible_2_17 = throw "ansible_2_17 has been removed, as it is EOL"; # Added 2025-11-10 diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 5acfb1d9acda..0a502a2fbdf7 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -5441,6 +5441,10 @@ with pkgs; ansible = python3Packages.toPythonApplication python3Packages.ansible-core; + ansible-language-server = + callPackage ../development/tools/language-servers/ansible-language-server + { }; + ansible-builder = with python3Packages; toPythonApplication ansible-builder; yakut = python3Packages.callPackage ../development/tools/misc/yakut { };