···2626 mergedSha: ${{ inputs.mergedSha || github.event.merge_group.head_sha }}2727 targetSha: ${{ inputs.targetSha || github.event.merge_group.base_sha }}28282929- # This job's only purpose is to serve as a target for the "Required Status Checks" branch ruleset.2929+ # This job's only purpose is to create the target for the "Required Status Checks" branch ruleset.3030 # It "needs" all the jobs that should block the Merge Queue.3131- # If they pass, it is skipped — which counts as "success" for purposes of the branch ruleset.3232- # However, if any of them fail, this job will also fail — thus blocking the branch ruleset.3333- no-pr-failures:3131+ unlock:3232+ if: github.event_name != 'pull_request'3433 # Modify this list to add or remove jobs from required status checks.3534 needs:3635 - lint3737- # WARNING:3838- # Do NOT change the name of this job, otherwise the rule will not catch it anymore.3939- # This would prevent all PRs from passing the merge queue.4040- name: no PR failures4141- if: ${{ failure() }}4236 runs-on: ubuntu-24.04-arm3737+ permissions:3838+ statuses: write4339 steps:4444- - run: exit 14040+ - uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.14141+ with:4242+ script: |4343+ const { serverUrl, repo, runId, payload } = context4444+ const target_url =4545+ `${serverUrl}/${repo.owner}/${repo.repo}/actions/runs/${runId}`4646+ await github.rest.repos.createCommitStatus({4747+ ...repo,4848+ sha: payload.merge_group.head_sha,4949+ // WARNING:5050+ // Do NOT change the name of this, otherwise the rule will not catch it anymore.5151+ // This would prevent all PRs from merging.5252+ context: 'no PR failures',5353+ state: 'success',5454+ target_url,5555+ })
+22-14
.github/workflows/pr.yml
···6161 headBranch: ${{ needs.prepare.outputs.headBranch }}6262 mergedSha: ${{ needs.prepare.outputs.mergedSha }}6363 targetSha: ${{ needs.prepare.outputs.targetSha }}6464+ ownersCanFail: ${{ !contains(fromJSON(needs.prepare.outputs.touched), 'owners') }}64656566 lint:6667 name: Lint···120119 baseBranch: ${{ needs.prepare.outputs.baseBranch }}121120 mergedSha: ${{ needs.prepare.outputs.mergedSha }}122121123123- # This job's only purpose is to serve as a target for the "Required Status Checks" branch ruleset.122122+ # This job's only purpose is to create the target for the "Required Status Checks" branch ruleset.124123 # It "needs" all the jobs that should block merging a PR.125125- # If they pass, it is skipped — which counts as "success" for purposes of the branch ruleset.126126- # However, if any of them fail, this job will also fail — thus blocking the branch ruleset.127127- no-pr-failures:124124+ unlock:125125+ if: github.event_name != 'pull_request'128126 # Modify this list to add or remove jobs from required status checks.129127 needs:130128 - check131129 - lint132130 - eval133131 - build134134- # WARNING:135135- # Do NOT change the name of this job, otherwise the rule will not catch it anymore.136136- # This would prevent all PRs from merging.137137- name: no PR failures138138- # A single job is "cancelled" when it hits its timeout. This is not the same139139- # as "skipped", which happens when the `if` condition doesn't apply.140140- # The "cancelled()" function only checks the whole workflow, but not individual141141- # jobs.142142- if: ${{ failure() || contains(needs.*.result, 'cancelled') }}143132 runs-on: ubuntu-24.04-arm133133+ permissions:134134+ statuses: write144135 steps:145145- - run: exit 1136136+ - uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1137137+ with:138138+ script: |139139+ const { serverUrl, repo, runId, payload } = context140140+ const target_url =141141+ `${serverUrl}/${repo.owner}/${repo.repo}/actions/runs/${runId}?pr=${payload.pull_request.number}`142142+ await github.rest.repos.createCommitStatus({143143+ ...repo,144144+ sha: payload.pull_request.head.sha,145145+ // WARNING:146146+ // Do NOT change the name of this, otherwise the rule will not catch it anymore.147147+ // This would prevent all PRs from merging.148148+ context: 'no PR failures',149149+ state: 'success',150150+ target_url,151151+ })
+5-2
.github/workflows/test.yml
···7676 name: Merge Group7777 needs: [prepare]7878 uses: ./.github/workflows/merge-group.yml7979+ # Those are actually only used on the merge_group event, but will throw an error if not set.8080+ permissions:8181+ statuses: write7982 secrets:8083 CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }}8184 with:···9087 name: PR9188 needs: [prepare]9289 uses: ./.github/workflows/pr.yml9393- # Those are not actually used on pull_request, but will throw an error if not set.9090+ # Those are actually only used on the pull_request_target event, but will throw an error if not set.9491 permissions:9592 issues: write9693 pull-requests: write···105102 name: Push106103 needs: [prepare]107104 uses: ./.github/workflows/push.yml108108- # Those are not actually used on push, but will throw an error if not set.105105+ # Those are not actually used on the push or pull_request events, but will throw an error if not set.109106 permissions:110107 statuses: write111108 secrets:
+4-2
ci/github-script/prepare.js
···7676 })7777 ).map((file) => file.filename)78787979- if (files.includes('ci/pinned.json')) core.setOutput('touched', ['pinned'])8080- else core.setOutput('touched', [])7979+ const touched = []8080+ if (files.includes('ci/pinned.json')) touched.push('pinned')8181+ if (files.includes('ci/OWNERS')) touched.push('owners')8282+ core.setOutput('touched', touched)81838284 return8385 }
···22 config,33 lib,44 pkgs,55- utils,65 ...76}:87···101102 default = "sqlite://./users.db?mode=rwc";102103 example = "postgres://postgres-user:password@postgres-server/my-database";103104 };105105+106106+ ldap_user_pass = mkOption {107107+ type = types.nullOr types.str;108108+ default = null;109109+ description = ''110110+ Password for default admin password.111111+112112+ Unsecure: Use `ldap_user_pass_file` settings instead.113113+ '';114114+ };115115+116116+ ldap_user_pass_file = mkOption {117117+ type = types.nullOr types.str;118118+ default = null;119119+ description = ''120120+ Path to a file containing the default admin password.121121+122122+ If you want to update the default admin password through this setting,123123+ you must set `force_ldap_user_pass_reset` to `true`.124124+ Otherwise changing this setting will have no effect125125+ unless this is the very first time LLDAP is started and its database is still empty.126126+ '';127127+ };128128+129129+ force_ldap_user_pass_reset = mkOption {130130+ type = types.oneOf [131131+ types.bool132132+ (types.enum [ "always" ])133133+ ];134134+ default = false;135135+ description = ''136136+ Force reset of the admin password.137137+138138+ Set this setting to `"always"` to update the admin password when `ldap_user_pass_file` changes.139139+ Setting to `"always"` also means any password update in the UI will be overwritten next time the service restarts.140140+141141+ The difference between `true` and `"always"` is the former is intended for a one time fix142142+ while the latter is intended for a declarative workflow. In practice, the result143143+ is the same: the password gets reset. The only practical difference is the former144144+ outputs a warning message while the latter outputs an info message.145145+ '';146146+ };147147+148148+ jwt_secret_file = mkOption {149149+ type = types.nullOr types.str;150150+ default = null;151151+ description = ''152152+ Path to a file containing the JWT secret.153153+ '';154154+ };104155 };105156 };157157+158158+ # TOML does not allow null values, so we use null to omit those fields159159+ apply = lib.filterAttrsRecursive (_: v: v != null);160160+ };161161+162162+ silenceForceUserPassResetWarning = mkOption {163163+ type = types.bool;164164+ default = false;165165+ description = ''166166+ Disable warning when the admin password is set declaratively with the `ldap_user_pass_file` setting167167+ but the `force_ldap_user_pass_reset` is set to `false`.168168+169169+ This can lead to the admin password to drift from the one given declaratively.170170+ If that is okay for you and you want to silence the warning, set this option to `true`.171171+ '';106172 };107173 };108174109175 config = lib.mkIf cfg.enable {176176+ assertions = [177177+ {178178+ assertion =179179+ (cfg.settings.ldap_user_pass_file or null) != null || (cfg.settings.ldap_user_pass or null) != null;180180+ message = "lldap: Default admin user password must be set. Please set the `ldap_user_pass` or better the `ldap_user_pass_file` setting.";181181+ }182182+ {183183+ assertion =184184+ (cfg.settings.ldap_user_pass_file or null) == null || (cfg.settings.ldap_user_pass or null) == null;185185+ message = "lldap: Both `ldap_user_pass` and `ldap_user_pass_file` settings should not be set at the same time. Set one to `null`.";186186+ }187187+ ];188188+189189+ warnings =190190+ lib.optionals (cfg.settings.ldap_user_pass or null != null) [191191+ ''192192+ lldap: Unsecure `ldap_user_pass` setting is used. Prefer `ldap_user_pass_file` instead.193193+ ''194194+ ]195195+ ++196196+ lib.optionals197197+ (cfg.settings.force_ldap_user_pass_reset == false && cfg.silenceForceUserPassResetWarning == false)198198+ [199199+ ''200200+ lldap: The `force_ldap_user_pass_reset` setting is set to `false` which means201201+ the admin password can be changed through the UI and will drift from the one defined in your nix config.202202+ It also means changing the setting `ldap_user_pass` or `ldap_user_pass_file` will have no effect on the admin password.203203+ Either set `force_ldap_user_pass_reset` to `"always"` or silence this warning by setting the option `services.lldap.silenceForceUserPassResetWarning` to `true`.204204+ ''205205+ ];206206+110207 systemd.services.lldap = {111208 description = "Lightweight LDAP server (lldap)";112209 wants = [ "network-online.target" ];
+40-16
nixos/modules/virtualisation/qemu-vm.nix
···20202121 cfg = config.virtualisation;22222323- opt = options.virtualisation;2424-2523 qemu = cfg.qemu.package;26242725 hostPkgs = cfg.host.pkgs;28262927 consoles = lib.concatMapStringsSep " " (c: "console=${c}") cfg.qemu.consoles;30283131- driveOpts =2929+ driveOptions =3230 { ... }:3331 {34323533 options = {3636-3737- file = mkOption {3838- type = types.str;3939- description = "The file image used for this drive.";4040- };4141-4234 driveExtraOpts = mkOption {4335 type = types.attrsOf types.str;4436 default = { };···291299292300 ${lib.pipe cfg.emptyDiskImages [293301 (lib.imap0 (294294- idx: size: ''302302+ idx:303303+ { size, ... }:304304+ ''295305 test -e "empty${builtins.toString idx}.qcow2" || ${qemu}/bin/qemu-img create -f qcow2 "empty${builtins.toString idx}.qcow2" "${builtins.toString size}M"296306 ''297307 ))···471477 };472478473479 virtualisation.emptyDiskImages = mkOption {474474- type = types.listOf types.ints.positive;480480+ type = types.listOf (481481+ types.coercedTo types.ints.positive (size: { inherit size; }) (482482+ types.submodule {483483+ options.size = mkOption {484484+ type = types.ints.positive;485485+ description = "The size of the disk in MiB";486486+ };487487+ options.driveConfig = mkOption {488488+ type = lib.types.submodule driveOptions;489489+ description = "Drive configuration to pass to {option}`virtualisation.qemu.drives`";490490+ };491491+ }492492+ )493493+ );475494 default = [ ];476495 description = ''477496 Additional disk images to provide to the VM. The value is···836829 };837830838831 drives = mkOption {839839- type = types.listOf (types.submodule driveOpts);832832+ type = types.listOf (833833+ types.submodule {834834+ imports = [ driveOptions ];835835+836836+ options = {837837+ file = mkOption {838838+ type = types.str;839839+ description = "The file image used for this drive.";840840+ };841841+ };842842+ }843843+ );840844 description = "Drives passed to qemu.";841845 };842846···13281310 driveExtraOpts.format = "raw";13291311 }13301312 ])13311331- (imap0 (idx: _: {13321332- file = "$(pwd)/empty${toString idx}.qcow2";13331333- driveExtraOpts.werror = "report";13341334- }) cfg.emptyDiskImages)13131313+ (imap0 (13141314+ idx: imgCfg:13151315+ lib.mkMerge [13161316+ {13171317+ file = "$(pwd)/empty${toString idx}.qcow2";13181318+ driveExtraOpts.werror = "report";13191319+ }13201320+ imgCfg.driveConfig13211321+ ]13221322+ ) cfg.emptyDiskImages)13351323 ];1336132413371325 # By default, use mkVMOverride to enable building test VMs (e.g. via
···11+diff --git a/aab/builder.py b/aab/builder.py22+index 5c3805c..a181b27 10064433+--- a/aab/builder.py44++++ b/aab/builder.py55+@@ -67,8 +67,7 @@ class AddonBuilder:66+ self._version = Git().parse_version(version)77+ # git stash create comes up empty when no changes were made since the88+ # last commit. Don't use 'dev' as version in these cases.99+- git_status = call_shell("git status --porcelain")1010+- if self._version == "dev" and git_status == "":1111++ if self._version == "dev" and call_shell("git status --porcelain") == "":1212+ self._version = Git().parse_version("current")1313+ if not self._version:1414+ logging.error("Error: Version could not be determined through Git")
···77 testers,88 roslyn-ls,99 jq,1010+ writeText,1111+ runCommand,1212+ expect,1013}:1114let1215 pname = "roslyn-ls";···3128 rid = dotnetCorePackages.systemToDotnetRid stdenvNoCC.targetPlatform.system;32293330 project = "Microsoft.CodeAnalysis.LanguageServer";3131+3232+ targets = writeText "versions.targets" ''3333+ <Project>3434+ <ItemGroup>3535+ <KnownFrameworkReference Update="@(KnownFrameworkReference)">3636+ <LatestRuntimeFrameworkVersion Condition="'%(TargetFramework)' == 'net8.0'">${dotnetCorePackages.sdk_8_0.runtime.version}</LatestRuntimeFrameworkVersion>3737+ <LatestRuntimeFrameworkVersion Condition="'%(TargetFramework)' == 'net9.0'">${dotnetCorePackages.sdk_9_0.runtime.version}</LatestRuntimeFrameworkVersion>3838+ <TargetingPackVersion Condition="'%(TargetFramework)' == 'net8.0'">${dotnetCorePackages.sdk_8_0.runtime.version}</TargetingPackVersion>3939+ <TargetingPackVersion Condition="'%(TargetFramework)' == 'net9.0'">${dotnetCorePackages.sdk_9_0.runtime.version}</TargetingPackVersion>4040+ </KnownFrameworkReference>4141+ <KnownAppHostPack Update="@(KnownAppHostPack)">4242+ <AppHostPackVersion Condition="'%(TargetFramework)' == 'net8.0'">${dotnetCorePackages.sdk_8_0.runtime.version}</AppHostPackVersion>4343+ <AppHostPackVersion Condition="'%(TargetFramework)' == 'net9.0'">${dotnetCorePackages.sdk_9_0.runtime.version}</AppHostPackVersion>4444+ </KnownAppHostPack>4545+ </ItemGroup>4646+ </Project>4747+ '';4848+3449in3535-buildDotnetModule rec {5050+buildDotnetModule (finalAttrs: rec {3651 inherit pname dotnet-sdk dotnet-runtime;37523853 vsVersion = "2.87.26";···7857 # until made configurable/and or different location7958 # https://github.com/dotnet/roslyn/issues/768928059 ./cachedirectory.patch8181- # Force download of apphost8282- ./runtimedownload.patch8360 ];84618562 postPatch = ''8663 # Upstream uses rollForward = latestPatch, which pins to an *exact* .NET SDK version.8764 jq '.sdk.rollForward = "latestMinor"' < global.json > global.json.tmp8865 mv global.json.tmp global.json6666+6767+ substituteInPlace Directory.Build.targets \6868+ --replace-fail '</Project>' '<Import Project="${targets}" /></Project>'8969 '';90709171 dotnetFlags = [9272 "-p:TargetRid=${rid}"9373 # this removes the Microsoft.WindowsDesktop.App.Ref dependency9474 "-p:EnableWindowsTargeting=false"7575+ # this is needed for the KnownAppHostPack changes to work7676+ "-p:EnableAppHostPackDownload=true"9577 ];96789779 # two problems solved here:···12399 '';124100125101 passthru = {126126- tests.version = testers.testVersion { package = roslyn-ls; };102102+ tests =103103+ let104104+ with-sdk =105105+ sdk:106106+ runCommand "with-${if sdk ? version then sdk.version else "no"}-sdk"107107+ {108108+ nativeBuildInputs = [109109+ finalAttrs.finalPackage110110+ sdk111111+ expect112112+ ];113113+ meta.timeout = 60;114114+ }115115+ ''116116+ HOME=$TMPDIR117117+ expect <<"EOF"118118+ spawn ${meta.mainProgram} --stdio --logLevel Information --extensionLogDirectory log119119+ expect_before timeout {120120+ send_error "timeout!\n"121121+ exit 1122122+ }123123+ expect "Language server initialized"124124+ send \x04125125+ expect eof126126+ catch wait result127127+ exit [lindex $result 3]128128+ EOF129129+ touch $out130130+ '';131131+ in132132+ {133133+ # Make sure we can run with any supported SDK version, as well as without134134+ with-net9-sdk = with-sdk dotnetCorePackages.sdk_9_0;135135+ with-net10-sdk = with-sdk dotnetCorePackages.sdk_10_0;136136+ no-sdk = with-sdk null;137137+ version = testers.testVersion { package = finalAttrs.finalPackage; };138138+ };127139 updateScript = ./update.sh;128140 };129141···171111 maintainers = with lib.maintainers; [ konradmalik ];172112 mainProgram = "Microsoft.CodeAnalysis.LanguageServer";173113 };174174-}114114+})
-15
pkgs/by-name/ro/roslyn-ls/runtimedownload.patch
···11-diff --git a/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/Microsoft.CodeAnalysis.LanguageServer.csproj b/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/Microsoft.CodeAnalysis.LanguageServer.csproj22-index c32f01a6695..b98bab44c4e 10064433---- a/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/Microsoft.CodeAnalysis.LanguageServer.csproj44-+++ b/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/Microsoft.CodeAnalysis.LanguageServer.csproj55-@@ -54,8 +54,8 @@66- <RuntimeIdentifiers Condition="'$(TargetRid)' == '' and '$(PortableTargetRid)' == ''">win-x64;win-arm64;linux-x64;linux-arm64;linux-musl-x64;linux-musl-arm64;osx-x64;osx-arm64</RuntimeIdentifiers>77-88- <!-- These indicate that the runtime/apphost packages should not be downloaded as part of build/restore -->99-- <EnableRuntimePackDownload>false</EnableRuntimePackDownload>1010-- <EnableAppHostPackDownload>false</EnableAppHostPackDownload>1111-+ <EnableRuntimePackDownload>true</EnableRuntimePackDownload>1212-+ <EnableAppHostPackDownload>true</EnableAppHostPackDownload>1313-1414- <!-- Publish ready to run executables when we're publishing platform specific executables. -->1515- <PublishReadyToRun Condition="'$(RuntimeIdentifier)' != '' AND '$(Configuration)' == 'Release' ">true</PublishReadyToRun>
···27272828stdenv.mkDerivation (finalAttrs: {2929 pname = "shader-slang";3030- version = "2025.12.1";3030+ version = "2025.14.3";31313232 src = fetchFromGitHub {3333 owner = "shader-slang";3434 repo = "slang";3535 tag = "v${finalAttrs.version}";3636- hash = "sha256-5M/sKoCFVGW4VcOPzL8dVhTuo+esjINPXw76fnO7OEw=";3636+ hash = "sha256-tHLm0XmS5vV+o3VmFHWG8wZnrb0p63Nz1zVyvc/e5+s=";3737 fetchSubmodules = true;3838 };3939···114114 # Handled by separateDebugInfo so we don't need special installation handling115115 "-DSLANG_ENABLE_SPLIT_DEBUG_INFO=OFF"116116 "-DSLANG_VERSION_FULL=v${finalAttrs.version}-nixpkgs"117117- # slang-rhi tries to download WebGPU dawn binaries, and as stated on118118- # https://github.com/shader-slang/slang-rhi is "under active refactoring119119- # and development, and is not yet ready for general use."120120- "-DSLANG_ENABLE_SLANG_RHI=OFF"121117 "-DSLANG_USE_SYSTEM_MINIZ=ON"122118 "-DSLANG_USE_SYSTEM_LZ4=ON"123119 "-DSLANG_SLANG_LLVM_FLAVOR=${if withLLVM then "USE_SYSTEM_LLVM" else "DISABLE"}"120120+ # slang-rhi tries to download headers and precompiled binaries for these backends121121+ "-DSLANG_RHI_ENABLE_OPTIX=OFF"122122+ "-DSLANG_RHI_ENABLE_VULKAN=OFF"123123+ "-DSLANG_RHI_ENABLE_METAL=OFF"124124+ "-DSLANG_RHI_ENABLE_WGPU=OFF"124125 ]125126 ++ lib.optionals withGlslang [126127 "-DSLANG_USE_SYSTEM_SPIRV_TOOLS=ON"
···176176 };177177178178 patches = [179179- # Disable uriplaylistbin test that requires network access.180180- # https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/676181181- # TODO: Remove in 0.14, it has been replaced by a different fix:182182- # https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2140183183- ./ignore-network-tests.patch179179+ # Related to https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/723180180+ ./ignore-tests.patch184181 ];185182186183 strictDeps = true;···254257 '';255258256259 passthru = {257257- tests = {258258- # Applies patches.259259- # TODO: remove with 0.14260260- inherit mopidy;261261- };262262-263260 updateScript = nix-update-script {264261 # use numbered releases rather than gstreamer-* releases265262 # this matches upstream's recommendation: https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/470#note_2202772