dotnet: improve EOL evaluation errors

Cc: @NixOS/dotnet

Things done

Built on platform(s)

[ ] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)

[ ] sandbox = relaxed
[ ] sandbox = true

[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
25.05 Release Notes (or backporting 24.11 and 25.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[x] Fits CONTRIBUTING.md.

Add a :+1: reaction to pull requests you find important.

@Atemu as discussed in #339370

Inheriting meta whole is generally not a good idea. Always pick the parts you actually care about.

That does sound reasonable, but cc-wrapper does:
  meta =
    let cc_ = optionalAttrs (cc != null) cc; in
    (optionalAttrs (cc_ ? meta) (removeAttrs cc.meta ["priority"])) //
    { description = attrByPath ["meta" "description"] "System C compiler" cc_ + " (wrapper script)";
      priority = 10;
      mainProgram = if name != "" then name else "${targetPrefix}${ccName}";
  };

So it only replaces those three attributes and inherits everything else.
What I've done here only sets description, maintainers (i.e. the maintainer of the wrapper / combiner), and mainProgram.

swift-wrapper inherits all of meta:
stdenv.mkDerivation (swift._wrapperParams // {
  pname = "swift-wrapper";
  inherit (swift) version meta;

pkgconfig-wrapper does something like cc-wrapper:
  meta =
    let pkg-config_ = optionalAttrs (pkg-config != null) pkg-config; in
    (optionalAttrs (pkg-config_ ? meta) (removeAttrs pkg-config.meta ["priority" "mainProgram"])) //
    { description =
        attrByPath ["meta" "description"] "pkg-config" pkg-config_
        + " (wrapper script)";
      priority = 10;
      mainProgram = wrapperBinName;
  };

rustc-wrapper:
  meta = rustc-unwrapped.meta // {
    description = "${rustc-unwrapped.meta.description} (wrapper script)";
    priority = 10;
  };

Yes, it doesn't, but it gets used as reference for new things constantly and provides a certain measure of standardization as if you've seen one wrapper you have an idea of how other wrappers will work. If this wasn't an issue for other compilers which are used much more widely than .NET I don't see why this should be an issue for us or something addressed at a higher level across all of nixpkgs.
Users are putting themselves and others at risk by using .NET 6 and/or 7. I don't think this should be easy nor painless to do. It should cause as big of an annoyance as possible so they actually think about what they're doing and maintainers actually do something about it.

Lets discuss this here because it's not related to the like of code quoted.
This is about whether we do anything at all.  i.e. Do we even remove knownVulnerabilities from the wrapper?
Right now you have to do this:
    nixpkgs.config.permittedInsecurePackages = [
      "dotnet-sdk-6.0.428"
      "dotnet-sdk-wrapped-6.0.428"
    ];

IMO there's no benefit in requiring that the wrapper be permitted separately.  It's just confusing.

IMO there's no benefit in requiring that the wrapper be permitted separately.  It's just confusing.

Yes, I don't disagree it's confusing, however we're causing maintainer churn for something that'll ultimately be removed.
We're putting effort into something that doesn't really benefit anyone, my issue here is that we're focusing on things that shouldn't really be relevant.

It benefits me because I currently have all of this in my local config:
            permittedInsecurePackages = map (x: x.name) (with pkgs; [
              dotnet-sdk_6
              dotnet-sdk_6.unwrapped
              dotnet-sdk_7
              dotnet-sdk_7.unwrapped
              dotnet-runtime_6
              dotnet-runtime_6.unwrapped
              dotnet-runtime_7
              dotnet-runtime_7.unwrapped
            ]) ++ [
              "dotnet-core-combined"
            ];

and I'm not going to realistically stop using those packages any time soon.

It benefits me because I currently have all of this in my local config:
            permittedInsecurePackages = map (x: x.name) (with pkgs; [
              dotnet-sdk_6
              dotnet-sdk_6.unwrapped
              dotnet-sdk_7
              dotnet-sdk_7.unwrapped
              dotnet-runtime_6
              dotnet-runtime_6.unwrapped
              dotnet-runtime_7
              dotnet-runtime_7.unwrapped
            ]) ++ [
              "dotnet-core-combined"
            ];

and I'm not going to realistically stop using those packages any time soon.

True, but is all of this worth it to avoid adding just one extra like per SDK?
This feels like too much work

@Atemu continuing here since it's unrelated to maintainers line.

Because dotnet is the only compiler I know of in Nixpkgs that gets EOL'd via insecure.

Maybe we should look at how java handles this? Considering they have the same model there (compiler + runtime).

Btw, why is the compiler EOL'd anyways? Isn't only the runtime relevant for security? Not to deep into dotnet to know the details here.

The SDK could be left as not insecure, however the packages used at runtime definitely should be marked as such if we do so. As a package can compile and run in a different runtime but use packages from an earlier release which are EOL and possibly insecure.
And using the compiler itself, one can also abuse vulnerabilities in the compiler itself and its tooling to abuse security vulnerabilities, I don't know if that counts.

Having to put it in permittedInsecure is annoyance enough. Anything past that is extremely unnecessary.

Yes, but if we marked them as unsupported I don't see why we should waste extra effort on it as we'll be removing it once it's no longer used in nixpkgs anyways.
And considering the incoming change of marking all of .NET 6 and 7 packages as insecure, the annoyance will become even bigger with needing to add 10 to 30 lines in it.

Maybe we should look at how java handles this? Considering they have the same model there (compiler + runtime).

Java apps generally depend on LTS versions and those are generally maintained for decades. It's rare for a Java app that is not compatible with a supported LTS JDK to have any relevance whatsoever because it must have been last updated well over a decade ago.
I'm not saying this doesn't happen but it's exceedingly rare I think.

if we marked them as unsupported I don't see why we should waste extra effort on it as we'll be removing it once it's no longer used in nixpkgs anyways.

To not make the lives of those who have no other choice unnecessarily hard.

considering the incoming change of marking all of .NET 6 and 7 packages as insecure

I'm not quite sure what you mean by this? Marking the SDK and runtimes as insecure has already happened which has already marked all dependent packages as insecure transitively.
Are you intending on marking the individual packages as insecure?
If so, why? That wouldn't solve any problem and only cause unnecessary pain. It'd also be wrong because the packages themselves don't have security issues, it's the SDKs they use and those are already marked appropriately and cause an eval abort.

If someone or their project are still stuck in an unsupported version of .NET, that's a them problem and it shouldn't be up to nixpkgs to make their life easier to use something that's no longer supported.

Again, this isn't about making their life easier through significant effort, it's about not making their lives unnecessary hard with very little effort in correctly setting metadata. It's simply incorrect to mark i.e. the wrapper as insecure because the wrapper code itself doesn't have any known security issue whatsoever, only the wrapped SDK.

Are you intending on marking the individual packages as insecure?

Yes.

If so, why? That wouldn't solve any problem and only cause unnecessary pain.

It would, because if you look at the other PR that removes unnecessary uses of combinePackages, references to the older SDKs are being removed and only their packages kept.

It'd also be wrong because the packages themselves don't have security issues, it's the SDKs they use and those are already marked appropriately and cause an eval abort.

It wouldn't be wrong. Many .NET CVEs have been causes by packages and not the runtime itself. Including RCEs. Just look through previous advisories and you'll see they mention package versions and not the runtime (JIT, bytecode handling) itself.

If someone or their project are still stuck in an unsupported version of .NET, that's a them problem and it shouldn't be up to nixpkgs to make their life easier to use something that's no longer supported.

Again, this isn't about making their life easier through significant effort, it's about not making their lives unnecessary hard with very little effort in correctly setting metadata. It's simply incorrect to mark i.e. the wrapper as insecure because the wrapper code itself doesn't have any known security issue whatsoever, only the wrapped SDK.

Fair, but the eval error already tells the person everything they have to add, is it really making their loves harder if we spoonfeed them everything they need to do to fix it?

@GGG-KILLER @Atemu  Do either of you (or anyone else) have any actual problems with this PR as it is?

This feels like too much work considering all the decision making and bikeshedding we're running into.

IMO most of this has been off-topic.

Do either of you (or anyone else) have any actual problems with this PR as it is?

I have a problem with the maintainers list, lack of url and homepage.
URL and homepage show on search.nixos.org so it's a nice to have and the maintainers should preserve the original maintainers in case the problem us with the wrapped package, not the wrapper imo.
The license field is also missing which prevents Hydra from caching the build results so it's important to have.

For reference:
{
  available = true;
  broken = false;
  description = ".NET SDK 9.0.100";
  homepage = "https://dotnet.github.io/";
  insecure = false;
  knownVulnerabilities = [ ];
  license = {
    deprecated = false;
    free = true;
    fullName = "MIT License";
    redistributable = true;
    shortName = "mit";
    spdxId = "MIT";
    url = "https://spdx.org/licenses/MIT.html";
  };
  mainProgram = "dotnet";
  maintainers = [
    {
      email =<EMAIL_ADDRESS>      github = "kuznero";
      githubId = 449813;
      name = "Roman Kuznetsov";
    }
    {
      email =<EMAIL_ADDRESS>      github = "mdarocha";
      githubId = 11572618;
      name = "Marek Darocha";
    }
    {
      email =<EMAIL_ADDRESS>      github = "corngood";
      githubId = 3077118;
      name = "David McFarland";
    }
  ];
  name = "dotnet-sdk-9.0.100";
  outputsToInstall = [ "out" ];
  platforms = [
    "x86_64-darwin"
    "aarch64-darwin"
    "aarch64-linux"
    "x86_64-linux"
  ];
  position = "/home/david/src/nixpkgs/pkgs/development/compilers/dotnet/build-dotnet.nix:212";
  sourceProvenance = [
    {
      isSource = false;
      shortName = "binaryBytecode";
    }
    {
      isSource = false;
      shortName = "binaryNativeCode";
    }
  ];
  unfree = false;
  unsupported = false;
}

So how about we keep:

maintainers
platforms
description (with suffix?)
homepage

The license field is also missing which prevents Hydra from caching the build results so it's important to have.

I'm not sure that's the case.  Things that live in nixpkgs (e.g. stdenv, nuget-to-nix) seem to omit license and are still cached.

But won't that affect the display in search.nixos.org as well?

Yes, presumably.  I think that's a good enough reason to include license as well.

Not ideal but looks good enough to me.

I'm converting this back to a draft because I've added 6693d97cf5959490e46b5a7f6eea4f871e299867, which is meant to mark the nuget packages as insecure along with the corresponding SDK.
It does this by requiring evaluation of the SDK, which means:

the package derivations don't have to change
permitting the sdk is enough to allow all the packages

I'm converting this back to a draft because I've added 6693d97cf5959490e46b5a7f6eea4f871e299867, which is meant to mark the nuget packages as insecure along with the corresponding SDK.
It does this by requiring evaluation of the SDK, which means:

the package derivations don't have to change
permitting the sdk is enough to allow all the packages

Edit: this could be a separate PR, but it seems closely related, so I put it here for now.

Interesting solution, wouldn't have thought of it myself!

builtins.seq finalAttrs.finalPackage.drvPath  is how it accomplishes this.  It's a little unusual, which makes me slightly nervous, but so far it seems to work.  I tried making an actual separate pseudo-package for this purpose and adding it to buildInputs, but that results in the derivations changing for no good reason.

It is indeed unusual and I think it might be confusing for the maintainers of other packages that now only reference packages or targetPackages from an SDK due to the other PR, but that's something we can "hide" behind a helper later on if it gets confusing.

It seems pretty intuitive.  It may not be clear exactly where the dependency comes from (it usually isn't anyway), but you still get the usual message, and the resolution is the same:
$ nix eval -f. roslyn-ls

«error: Package ‘dotnet-sdk-6.0.428’ in /home/david/src/nixpkgs/pkgs/development/compilers/dotnet/build-dotnet.nix:220 is marked as insecure, refusing to evaluate.

Known issues:
 - Dotnet SDK 6.0.428 is EOL, please use 8.0 (LTS) or 9.0 (Current)

You can install it anyway by allowing this package, using the
following methods:

a) To temporarily allow all insecure packages, you can use an environment
   variable for a single invocation of the nix tools:

     $ export NIXPKGS_ALLOW_INSECURE=1

   Note: When using `nix shell`, `nix build`, `nix develop`, etc with a flake,
         then pass `--impure` in order to allow use of environment variables.

b) for `nixos-rebuild` you can add ‘dotnet-sdk-6.0.428’ to
   `nixpkgs.config.permittedInsecurePackages` in the configuration.nix,
   like so:

     {
       nixpkgs.config.permittedInsecurePackages = [
         "dotnet-sdk-6.0.428"
       ];
     }

c) For `nix-env`, `nix-build`, `nix-shell` or any other Nix command you can add
   ‘dotnet-sdk-6.0.428’ to `permittedInsecurePackages` in
   ~/.config/nixpkgs/config.nix, like so:

     {
       permittedInsecurePackages = [
         "dotnet-sdk-6.0.428"
       ];
     }

»
$ nix eval -f. roslyn-ls --arg config '{ permittedInsecurePackages = [ "dotnet-sdk-6.0.428" ]; }'

«derivation /nix/store/bkbizsb5g2iqca6ikl9k842v7nqfd433-roslyn-ls-4.13.0-3.24577.4.drv»

Fair enough, I'm really fond of this solution since it achieves the evaluation error I wanted and as a bonus doesn't generate a billion lines of permittedInsecurePackages.
Thank you for this wonderful solution!

--------- Impacted packages on 'x86_64-linux' ---------
2 packages removed:
godot4-mono (†4.3-stable) roslyn-ls (†4.13.0-3.24577.4)

These are the packages that become insecure with this change.

Thanks!


Line break in email notification should be in html format

Currently email notification for new issue is just one line text. Should be in html formatted to make it more pretty
thanks

Thanks your feedback!

When I create new issue, all watcher get notification email, email source follow:
--cd8461cec9bcaef98ae5349397f93dfbf68c80f5c9a993e1084e6c325299
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

TODO
1. Task 1
1. Task 2
1. Task 3
1. Task 4

-
 View =
it on Gogs.
--cd8461cec9bcaef98ae5349397f93dfbf68c80f5c9a993e1084e6c325299
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset=UTF-8

TODO
1. Task 1
1. Task 2
1. Task 3
1. Task 4

-
 View =
it on Gogs.
--cd8461cec9bcaef98ae5349397f93dfbf68c80f5c9a993e1084e6c325299--

When opening in mail client it will shown as:
TODO 1. Task 1 1. Task 2 1. Task 3 1. Task 4
[Link]

It would be good if the email formatted using markdown as shown in issue page
Thanks

It is markdown formatted before sending...

What is the actual content of issue thought?

ping @biji

Hi Unknwon,
Issue entered as:
TODO

Task 1
Task 2
Task 3
Task 4

Gogs shown as:
TODO

Task 1
Task 2
Task 3
Task 4

Email sent should be:
TODO

Task 1
Task 2
Task 3
Task 4

Thanks

Thanks for following up!

This issue is claimed to be fixed ber meging https://github.com/gogits/gogs/pull/2659

Close as fixed.


Add Event.defer with hidden experimental setting

Part of #161622

I found that about 20-30% of keypress time was spend setting up or tearing down timeouts/callback. This change introduces Event.defer which now is now a convenience function on top of Event.debounce which converts it to a debounced signal. It converts some low-risk listeners which simply schedule things to a following task to use deferred listeners to avoid creating a new timeout for each one.
Before:

The above was taken using the current change but swapping out defer's implementation with signal(event) to get an approximation of what it was before.
After:

Some measurements via performance.now() (0.1ms precision):
Typing 'a' on my macbook until line is full (to avoid scrolling overhead), ignore first 10 samples as suggest is involved
PR where defer uses debounce
averageWithoutFirst 2.341666666428662 sample size 144
averageWithoutFirst 2.2861111108731063 sample size 144
averageWithoutFirst 2.3076388886612325 sample size 144
averageWithoutFirst 2.353472222470575 sample size 144

PR where defer uses signal
averageWithoutFirst 2.33819444430992 sample size 144
averageWithoutFirst 2.392361111162851 sample size 144
averageWithoutFirst 2.3055555556072957 sample size 144
averageWithoutFirst 2.3951388884128795 sample size 144

main
averageWithoutFirst 2.3451388888578446 sample size 144
averageWithoutFirst 2.400694444672101 sample size 144
averageWithoutFirst 2.347916666366574 sample size 144
averageWithoutFirst 2.1895833337265582 sample size 144
averageWithoutFirst 2.425000000020696 sample size 144

These results show that it may be slightly faster, but not as much as I was expecting.
I notice the JavaScript Profiler is far more accurate than the Performance tab in devtools for measuring this low level stuff so I should probably be using that to analyze. It also seems to avoid the timeout overhead problem. Closing this for now, will investigate further.

I notice the JavaScript Profiler is far more accurate than the Performance tab in devtools for measuring this low level stuff

Yeah, that matches my experience. Tho, it lacks the holistic view of things

Did more thorough performance testing using a JS CPU profile, couldn't see a particular difference with this change of tweaking how scheduling things was done.

Some more measurements, this time using JavaScript Profiler on a profile with the following test:

Make InputHandler.ts (xterm.js) dirty
Reload
Wait for renderer to calm down
Type a 150 times at the bottom of _preserveStack

Before - main
Profile:
codeEditorWidget.ts:1616 = 9.37% of keypress fn
Focusing on that function:

After - Event.defer
codeEditorWidget.ts:1619 = 9.36% of keypress fn
Focusing on that function:


Travis + Coveralls

@papajohn Can we use Travis and Coveralls? I tried but don't have the permissions to set them up. It should be just a few clicks; I can add the badges afterwards.

@papajohn To add to the wishlist, can we have a wiki too? I think we need a place to document Table and Map features.

I've had bad experience with wikis. They rarely seem to represent the current truth. Feel free to add feature descriptions to readme files.

Ok, I've given permissions to coveralls and travis. @alvinwan can you configure them to your liking?
https://coveralls.io/github/dsten/datascience
https://travis-ci.org/dsten/datascience

Sure, that makes sense. I'll add to the README instead then.
Awesome, thanks. I'll add the configs.


Add fallback to load function when no scripts found

load fails with a type error if no existing script files are found on the page using the Fathom.load function.
I've added a fallback to insert immediately before the <body> tag.
(I started seeing errors when using with SvelteKit v1.0.0-next.257 onwards; 257 had some breaking changes relating to how the hydration script works. This patch appears to fix.)

Interesting, thanks!

Released https://github.com/derrickreimer/fathom-client/releases/tag/v3.4.1 ✨


Fix two command issues in 2017-03-09 profile

This checklist is used to make sure that common guidelines for a pull request are followed.
General Guidelines

[ ] The PR has modified HISTORY.rst with an appropriate description of the change (see Modifying change log).

Command Guidelines

[ ] Each command and parameter has a meaningful description.
[ ] Each new command has a test.

(see Authoring Command Modules)

Codecov Report

Merging #4175 into master will increase coverage by <.01%.
The diff coverage is 77.77%.

@@            Coverage Diff            @@
##           master   #4175      +/-   ##
=========================================
+ Coverage   70.89%   70.9%   +<.01%
=========================================
  Files         437     437
  Lines       28261   28266       +5
  Branches     4352    4353       +1
=========================================
+ Hits        20037   20041       +4
- Misses       6877    6878       +1
  Partials     1347    1347

Impacted Files
Coverage Δ

...rce/azure/cli/command_modules/resource/commands.py
85.05% <100%> (+0.35%)
:arrow_up:

...rage/azure/cli/command_modules/storage/commands.py
98.19% <100%> (+0.58%)
:arrow_up:

...azure/cli/command_modules/storage/_command_type.py
85.71% <50%> (-14.29%)
:arrow_down:

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 335762b...b9aa45d. Read the comment docs.

@tjprescott, updated.

Rebased, will merge once CI passes


Add creating and deleting storage account tests and related changes

Change window.showWarningMessage() to ext.ui.WarningMessage().
Add a string util to get a random string.
Add creating and deleting storage account tests.

 Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.:x: v-etzha sign nowYou have signed the CLA already but the status is still pending? Let us recheck it.


azshell.exe hangs after a couple of minutes when run from wsl2

Love runinng this from wsl2 however the Azure CloudShell terminal hangs after a couple of minutes and I can't enter any more text into the terminal.
profiles.json looks pretty standard ...
            {
            "acrylicOpacity" : 0.5,
            "closeOnExit" : true,
            "colorScheme" : "Campbell",
            "commandline" : "azshell --shell bash",
            "cursorColor" : "#FFFFFF",
            "cursorShape" : "bar",
            "fontFace" : "Consolas",
            "fontSize" : 10,
            "guid" : "{2c4de342-38b7-51cf-b940-2309a097f520}",
            "historySize" : 9001,
            "icon" : "ms-appx:///ProfileIcons/{9acb9455-ca41-5af7-950f-6bca1bc9722f}.png",
            "name" : "Azure CloudShell",
            "padding" : "0, 0, 0, 0",
            "snapOnInput" : true,
            "useAcrylic" : false
        }

thanks for reporting! I assume it was idle (not typing) for couple minutes? It might be the underlying socket connection disconnected. I will do some debugging.


Ball Tracking

Implemented the transformation onto the whole field coordinate plane; should be ready to test on Saturday.

I'm still not sold on the method for localization here. I think doing a simple offset would introduce too much distortion near the edges of the frame. But that is what this weekend is for, and I'd love to be proven wrong.
Aside from that, there are some things in here regarding coding style that seem... weird, but nothing that would impact functionality. Unless James has anything to add, I think we're good to merge.

I'm still not sold on the method for localization here. I think doing a simple offset would introduce too much distortion near the edges of the frame. But that is what this weekend is for, and I'd love to be proven wrong.
We are actually not doing that, in BallDetection.cpp on line 113, there is this bit of code: cv::Point3d cam = camera.projectPixelTo3dRay(cv::Point2d(centerX, centerY));.
The projectPixelTo3dRay method (documentation ) Is what I'm using, along with some trig. For what it's worth, I've tested this at home with a tape measure and it was basically spot-on; we will be able to check this further this weekend. I know the coding is a bit weird, particularly the putting the size on the z and some of the weird stuff I did. Once this works, I'll work on straightening things out.

Oh I'm dumb. I saw lines 131/132 and vaguely linked it to something we talked about a while ago. I completely missed the projectPixelTo3dRay line when I was skimming the code. Sorry about that.

Ah, I see.
Those lines are for taking the coordinates centered at the point directly below the camera and translating those to the origin or the entire field.


IOS EVM ft price display

Currently, the EVM FT has no price.
We need to handle this; if it was bridged, it should return the price from the Flow side.
We can add a new address field for EVM in the original price API, and the corresponding EVM FT will use the Flow side price.

EVM account ft's price and icon are not displayed in ios prod version 2.1.12(1)

This issue already fixed in ios prod version 2.1.12(8).


non-negative coords only?

Hi @zhijian-liu , thanks for the amazing work! Quick question regarding the coordinates here. I see that in https://github.com/mit-han-lab/spvnas/blob/master/core/datasets/semantic_kitti.py#L198
pc_ -= pc_.min(0, keepdims=1)

The coordinates are made to be non-negative. Is there a constraint that voxel indices for sparse tensor or point tensor to be non-negative?
Thanks

It's a common practice to normalize the coordinates to be non-negative. This is because some sparse convolution libraries do not support negative indices.


scene of a sub-viewport is drawn outside the sub-viewport

The instanced scene of a sub-viewport is drawn outside the sub-viewport, i.e. the scene is drawn relative to the root viewport and not the sub-viewport. See http://code.guido-berhoerster.org/tmp/BugReproducer2.tar.gz for a minimal project to reproduce the issue.

Hi @gber and sorry for the delay. It looks like your minimal project is not available anymore, could you reupload one?

Github is really annoying for not allowing binary attachments, I've attached the above tarball base64 encoded: BugReproducer2.tar.gz.txt
You can extract it e.g. with openssl like this: openssl enc -base64 -d -in BugReproducer2.tar.gz.txt | gunzip | tar xf -.

I can reproduce the issue in the current master branch using the file in the above comment.

Potentially related to #1840.

Could someone upload a decoded repro? >_>

I have a feeling this is no longer relevant in 3.x. Plus there has been no engagement in over 4 years. Closing for now, if anyone can figure this out and reproduce it, I would be happy to re-open.


Watch sim devices

refactor our use of simctl into it's own library and class: simulator.dart
change from parsing the std text output of simctl list to using the --json option
add a polling watcher to SimControl, and have flutter daemon use it (we now get notifications when simulator devices start up or terminate). We poll once every 4 seconds while there's a listener; each simctl call takes about 80ms. I would like to eventually use a notification system instead of polling.
updated the boot in install.dart. It doesn't seem to install anything into the simulator for me - not sure when it regressed (whether w/ this PR or before)

lgtm


[fix] Removed the word "ugly" from otherwise fantastic documentation

Was reading through your documentation and thought this could be a positive change.

A... beautiful suggestion 👍 Thank you!

❤ Thanks for this @KsenijaGogic, fabulous improvement!


Cancelling cherry-pick should abort

Testing #229359

After pressing "Cancel" here I would have expected my changes view to be clean, but I was still in cherry-pick mode and had to run git cherry-pick --abort

I am still left in a state that is not clean:

Can you please click on "Show Command Output" and share the output. Cannot pause the git to actually read it...

2024-09-26 09:41:25.030 [info] > git cherry-pick c06df8ff01219e52bc3f7bff8b87c7e32620f785 [21ms]
2024-09-26 09:41:25.031 [info] error: Cherry-picking is not possible because you have unmerged files.
hint: Fix them up in the work tree, and then use 'git add/rm <file>'
hint: as appropriate to mark resolution and make a commit.
fatal: cherry-pick failed
2024-09-26 09:41:25.046 [info] > git for-each-ref --format=%(refname)%00%(upstream:short)%00%(objectname)%00%(upstream:track)%00%(upstream:remotename)%00%(upstream:remoteref) --ignore-case refs/heads/ben/mutual-mule refs/remotes/ben/mutual-mule [14ms]
2024-09-26 09:41:25.060 [info] > git status -z -uall [13ms]
2024-09-26 09:41:25.063 [info] > git for-each-ref --sort -committerdate --format %(refname) %(objectname) %(*objectname) [15ms]

There are two distinct scenarios that may result in a cherry pick failing:

Changes are already present. In this case we will abort the cherry-pick operation.
Merge conflict (second scenario that you have shared). In this case VS Code will show a notification and users will have to manually resolve the merge conflict (code lens or merge editor) before committing. This aligns with the merge/rebase flows already present.


Update CHANGELOG.md

Issue #, if available:
Description of changes:
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

AWS CodeBuild CI Report

CodeBuild project: githubautobuild-for-cdk-v2
Commit ID: 64a09c8bd20f7189ce4e74678a257297435a9c7d
Result: FAILED
Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository


Store/Backup wallet after stopping Container

Hi all,
after stopping the container for Alice or other users and restart the container a new wallet is created, so all the received credentials and created connections are not more available.
Is there any possibility to backup the wallet and restore it in the container?
Thanks and regards,
Mohammad

It is possible. I'm not using the demo, but have built my own docker container. An example from my docker YAML file is below. Notice the "wallet-storage-config" option on the command line and the volumes at the bottom. The first tells Indy where to store its wallets. The second tells Docker to mount the ./data/wallets folder under /data in Docker.
Of course, most people would use Postgres as their database engine, but for my development setup, the below is sufficient. It should be doable to also do this for the demo's (but haven't looked at those specifically).
    command: |
      start --endpoint http://<IP_ADDRESS>:8060
      --inbound-transport http <IP_ADDRESS> 8060
      --outbound-transport http
      --admin <IP_ADDRESS> 8061
      --admin-insecure-mode
      --label cloudwallet.dev
      --genesis-url http://localhost/genesis
      --wallet-type indy
      --wallet-storage-type default
      --wallet-storage-config '{ "path":"/data" }'
      --wallet-name cloudwallet.dev761055
      --wallet-key cloudwallet.dev761055
      --preserve-exchange-records
      --auto-provision
      --log-level info
    volumes:
      - ./data/wallets:/data

Closing issue - please reopen if necessary.


Fix commons-math dependency

Fix missing commons-math dependency pulled in transitively via Helix.
This fixes classpath issues when building against Helix versions that do
not expose the commons-math dependency.

Codecov Report

:exclamation: No coverage uploaded for pull request base (master@54d8cd8). Click here to learn what that means.
The diff coverage is n/a.

@@            Coverage Diff            @@
##             master    #1566   +/-   ##
=========================================
  Coverage          ?   68.09%
=========================================
  Files             ?      818
  Lines             ?    39542
  Branches          ?     5182
=========================================
  Hits              ?    26927
  Misses            ?    10854
  Partials          ?     1761

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 54d8cd8...f59a56d. Read the comment docs.


feat: Add --pretty option to CLI tool

Add a --pretty option, to be used with --json to output 2 space indentation.
See also #479 and #523.

Could you clarify what's the use case of pretty-printed JSON output? For single-shot manual use, wouldn't the same be served by piping the output to a separate JSON prettifier like jq?

Non single-shot manual use… Like in package.json (package.yaml) scripts.

Eh, not sure that it really makes sense to prettify output that's meant for machine consumption, as it risks creating JSON files that will be presumed to be the source of truth, rather than intermediate build assets. But I'll grant you that there's probably a valid use case somewhere here.

Naming the option as "pretty" and only affecting the JSON output seems rather misleading. Either the option needs to make sense independently of --json, or it needs to be named more specifically.

I had a similar thought, but there is no such thing as --pretty YAML, it already has to be indented…
I think the ideal API would be an optional parameter, maybe to --json, e.g --json 2 or something, but that isn’t really a feature of util.parseArgs. How about --indent? What other name do you think would be better?

--indent works, esp. as it's already an option for YAML formatting. Switch this PR to that and make it apply to YAML output as well?

it risks creating JSON files that will be presumed to be the source of truth

Well the YAML files are the source… But a lot of tools only work from JSON. Harder to debug if it has to be minified also…

--indent works, esp. as it's already an option for YAML formatting. Switch this PR to that and make it apply to YAML output as well?

Good idea, will look into it…

Thank you, this looks good! Sorry for the delay in getting to this. There was a missing newline from the test source, which I added to get the test to pass.

No worries, life gets in the way… I know! Ah cool, was that at the end?


next-image config with @zeit/next-css

hello .my next.config file is
const withSass = require('@zeit/next-sass');
const withCSS = require('@zeit/next-css');

module.exports = withCSS(withSass());

I installed next-image and added it to config:
const withSass = require('@zeit/next-sass');
const withCSS = require('@zeit/next-css');
const withImages = require('next-images');

module.exports = withCSS(withSass());
module.exports = withImages();

but I got this error
./node_modules/react-modern-calendar-datepicker/lib/DatePicker.css 1:0
Module parse failed: Unexpected token (1:0)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
> .DatePicker {
|   position: relative;
|   display: inline-block;

how can I resolve this problem?

@zahraHaghi Sorry for the late reply, you should also embed the withImages function call as withCSS and withSass. Something like this:
const withSass = require('@zeit/next-sass');
const withCSS = require('@zeit/next-css');
const withImages = require('next-images');

module.exports = withCSS(withSass(withImages()));

You also can use next-compose-plugins.


[DOC]update links for 2206 release[skip ci]

Signed-off-by: liyuan<EMAIL_ADDRESS>Normally we first release spark-rapids and then release(not really, just merge dev to main) spark-rapids-examples. Since we revamp the spark-rapids-example repo and update the directories in v22.06, so there is a time gap that we either have broken links in spark-rapids repo or spark-rapids-example repo. Refer to dev-branch links would be a workaround to fix this issue. (The con is that we need to update the links for each release. Maybe we could re-refer to the main branch next release because I believe there will be no big directory changes in the future. )

build

Please update the links to point to the spark-rapids-examples main branch in the next release to make maintenance easier.


Refactor Redux actions into more manageable smaller modules

Closing, this is being addressed while refactoring into the redux toolkit.


feat: add pre save/ post save hooks

In continuance to resolving #1348.   Add prePush  hook to the list of hooks, which should allow modifying entry data.

Fixes #1348

Thanks @barthc, this will make some people very happy 😄
Just a few comments/suggestions

I'm one of those people, thanks @barthc @erezrokah !


OpenLane quit at synthesis stage with no apparent error

Description
I am pretty new to OpenLane, just started to try it out for only few days. I've successfully run the 'test' and one of my own design (very small) and able to generate GDS. But when I tried a larger design, OpenLane stop at Sythesis stage (Step 1) with no apparent error.
Expected Behavior
Be able to finish all the required steps and generate GDS
Environment report
Kernel: Linux v5.15.0-78-generic
Distribution: ubuntu 20.04
Python: v3.8.10 (OK)
Container Engine: docker v24.0.5 (OK)
OpenLane Git Version: 4c74d8b13c39ac20acfd412d90fdd689a959fafc
NOT FOUND: Please install pip using your operating system's package manager.
---
PDK Version Verification Status: FAILED
/home/heliboy/Desktop/OpenLane/pdks/sky130A not found.
Traceback (most recent call last):
  File "/home/heliboy/Desktop/OpenLane/dependencies/verify_versions.py", line 76, in verify_versions
    raise Exception(f"{pdk_dir} not found.")
Exception: /home/heliboy/Desktop/OpenLane/pdks/sky130A not found.

Failed to verify sky130A.
---
Git Log (Last 3 Commits)

4c74d8b1 2023-07-31T17:13:43+00:00 Rename `mca` folders (#1922) - Kareem Farid -  (HEAD -> master, tag: 2023.08.01, origin/master, origin/HEAD)
01e67230 2023-07-25T13:53:21+03:00 [BOT] Update magic (#1914) - Openlane Bot -  (tag: 2023.07.26)
157a6505 2023-07-25T13:02:39+03:00 Update Documentation (#1917) - Mohamed Gaber -  ()
---
Git Remotes

origin	https://github.com/The-OpenROAD-Project/OpenLane.git (fetch)
origin	https://github.com/The-OpenROAD-Project/OpenLane.git (push)

Reproduction material
issue_reproducible.tar.gz
Relevant log output
No relevant log output which can indicate the reason for synthesis to quit.

Sorry, first time to use this, the following is the message output to console
root@Ubuntu20:/openlane# ./flow.tcl -design Proj
OpenLane 4c74d8b13c39ac20acfd412d90fdd689a959fafc
All rights reserved. (c) 2020-2022 Efabless Corporation and contributors.
Available under the Apache License, version 2.0. See the LICENSE file for more details.
[INFO]: Using configuration in 'Proj/config.json'...
[INFO]: PDK Root: /root/.volare
[INFO]: Process Design Kit: sky130A
[INFO]: Standard Cell Library: sky130_fd_sc_hd
[INFO]: Optimization Standard Cell Library: sky130_fd_sc_hd
[INFO]: Run Directory: /openlane/Proj/runs/RUN_2023.08.07_06.51.31
[INFO]: Saving runtime environment...
[INFO]: Preparing LEF files for the nom corner...
[INFO]: Preparing LEF files for the min corner...
[INFO]: Preparing LEF files for the max corner...
[INFO]: Running linter (Verilator) (log: Proj/runs/RUN_2023.08.07_06.51.31/logs/synthesis/linter.log)...
[INFO]: 0 errors found by linter
[WARNING]: 1149 warnings found by linter
[STEP 1]
[INFO]: Running Synthesis (log: Proj/runs/RUN_2023.08.07_06.51.31/logs/synthesis/1-synthesis.log)...
[ERROR]: during executing yosys script /openlane/scripts/yosys/synth.tcl
[ERROR]: Log: Proj/runs/RUN_2023.08.07_06.51.31/logs/synthesis/1-synthesis.log
[ERROR]: Last 10 lines:
[INFO]: USING STRATEGY AREA 0

Executing ABC pass (technology mapping using ABC).

64.1. Extracting gate netlist of module \TxEncode' to /tmp/yosys-abc-KdQOSV/input.blif'..
Extracted 182146 gates and 188238 wires to a netlist network with 6090 inputs and 4884 outputs.
64.1.1.

Looks like an out-of-memory error. Can you watch your swap space while it's running?

It might be a memory issue. Can you upload your project files so that I can test?

Hi,
You folks are correct, it is out-of-memory problem. I am using VM running Ubuntu, and the RAM seems too small (8GB) and after I increase that to 32 GB, it can execute up to Step 15, the Running Global Routing Resizer Design Optimizations then reports Routing congestion and quit. Since this is not related to this issue, so I close this issue.
Lesson learned, make sure memory is enough!!!
Thanks.


feat: relying-party creates SI token for VP query

What this PR changes/adds
This PR extends the IdentityAndTrustService and generates another SI token on the relying-party side
which is then used to execute the VP query against the counter-party's CredentialService (= presentation endpoint).
Why it does that
Complete the circle of the presentation flow
Further notes

Be aware that currently we need to parse the access_token to get the scope string. This is a workaround, until we can extract the scope from the verification context. This behaviour will change in subsequent developments and is only there for the immediate future. The related code has been marked accordingly.
the access_token constant was renamed to PRESENTATION_ACCESS_TOKEN_CLAIM and is now used everywhere

Linked Issue(s)
Closes # <-- insert Issue number if one exists
Please be sure to take a look at the contributing guidelines and our etiquette for pull requests.

Codecov Report
Attention: 6 lines in your changes are missing coverage. Please review.

Comparison is base (1cf48c2) 71.79% compared to head (a86846f) 71.79%.

:exclamation: Current head a86846f differs from pull request most recent head af441d2.
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #3659      +/-   ##
==========================================
- Coverage   71.79%   71.79%   -0.01%
==========================================
  Files         917      917
  Lines       18370    18388      +18
  Branches     1042     1044       +2
==========================================
+ Hits        13189    13201      +12
- Misses       4724     4728       +4
- Partials      457      459       +2

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


perf(build): remove linting and add gulp-cached

// cc @ludohenin @d3viant0ne @totev

Looks good!
What about the npm deps?
"devDependencies": {
...
"gulp-cached": "^1.1.0",
"merge-stream": "^1.0.0",
...

We have them in master already.

Haven't tried it but LGTM


whl agent's active thread is 0.3  , quit not undrstand

Description

Environment

Pinpoint version:
OS, WAS, affected library, etc:
Additional details (e.g. how your collector/web is set up):

Additional Info

may  the number of active thread should be integer, how it could be 0.3

It is the average value for the time between intervals, not the value of that time.

Thanks,koo-taejin.
another question, what agent's active threads  are used for ? Are these threads created by the agent in the tomcat?

t is described in the tooltip.
(Tooltip are located at the top right of the chart)
active for serving a request.

thanks, i get it.


Aftership sensor error

Home Assistant release with the issue:
0.96.4
Last working Home Assistant release (if known):
Operating environment (Hass.io/Docker/Windows/etc.):
Docker
Component/platform:
Aftership
Description of problem:
The sensor gives an error if there aren't any checkpoints yet. I currently have one package being tracked, but the status is Pending. The issue results in "Entity not available: sensor.aftership"
Problem-relevant configuration.yaml entries and (fill out even if it seems unimportant):
Traceback (if applicable):
Traceback (most recent call last):
  File "/usr/src/app/homeassistant/helpers/entity_platform.py", line 261, in _async_add_entity
    await entity.async_device_update(warning=False)
  File "/usr/src/app/homeassistant/helpers/entity.py", line 378, in async_device_update
    await self.async_update()
  File "/usr/src/app/homeassistant/components/aftership/sensor.py", line 183, in async_update
    else track['checkpoints'][-1]
IndexError: list index out of range

Most likely duplicate of https://github.com/home-assistant/home-assistant/issues/25054

I can confirm that my item tag is Pending (I exported the source data as CSV)
One thing that I have noticed is that while tag exists, I don't have any checkpoint column, this must be why else track['checkpoints'][-1] returns an error.
These are all the columns
updated_at
tracking_number
tag
slug
title
customer_name
order_id
order_id_path
source	emails
smses
shipment_type
shipment_weight
shipment_package_count
shipment_pickup_date
shipment_delivery_date
scheduled_delivery_date
signed_by
origin_address
origin_country_name
origin_country_iso3
origin_state
origin_city	origin_zip
destination_address
destination_country_name
destination_country_iso3
destination_state
destination_city
destination_zip
last_checkpoint_time
last_checkpoint_country_name
last_checkpoint_country_iso3
last_checkpoint_city
last_checkpoint_state
last_checkpoint_zip
last_checkpoint_message	note
delivery_time
tracking_account_number
tracking_origin_country
tracking_destination_country
tracking_key
tracking_postal_code
tracking_ship_date
tracking_state

Me too.
Home Assistant release with the issue:
0.100.2
Operating environment (Hass.io/Docker/Windows/etc.):
Hass.io
Component/platform:
Aftership
Traceback
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 292, in _async_add_entity
    await entity.async_device_update(warning=False)
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 446, in async_device_update
    await self.async_update()
  File "/usr/src/homeassistant/homeassistant/components/aftership/sensor.py", line 184, in async_update
    else track["checkpoints"][-1]
IndexError: list index out of range

Seems like my fix didn't work after all, would be nice to get some help on this.
Home Assistant release with the issue:
0.102.2
Operating environment (Hass.io/Docker/Windows/etc.):
Docker
Component/platform:
Aftership


about mask

Thank you for your great work, how can I obtain a mask?

I have the same problem. Is the mask generated through Know depths?


msmtp: 1.8.18 -> 1.8.19

Motivation for this change
Update to latest upstream release 1.8.19
Change log: https://marlam.de/msmtp/news/msmtp-1-8-19/
Things done

Built on platform(s)

[x] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review wip"
[x] Tested basic functionality of all binary files (usually in ./result/bin/)
21.11 Release Notes (or backporting 21.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[x] Fits CONTRIBUTING.md.

Result of nixpkgs-review pr 144952 run on x86_64-linux 1

1 package built:

msmtp


Improve the processing of faucet_host URL input (Draft PR)

High Level Overview of Change

This PR seeks to address https://github.com/XRPLF/xrpl-py/issues/364
Context of Change

This is a slight modification in the handling of the faucet_host URL. The developer can have the flexibility to specify the resource paths (like /accounts) and internet protocols ('https://') in the input.
Type of Change

[ ] Bug fix (non-breaking change which fixes an issue)
[x] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[ ] Refactor (non-breaking change that only restructures code)
[ ] Tests (You added tests for code that already exists, or your new feature included in this PR)
[ ] Documentation Updates
[ ] Release

Did you update CHANGELOG.md?

[ ] Yes
[x] No, this change does not impact library users

Test Plan

How can I test the use of custom faucet-host? I used faucet-nft.ripple.com , but I'm getting Connection Timeout errors. The existing integration tests use the Testnet, Devnet and hooks faucet to validate the code, but not any custom faucets.

@ckeshava
from urllib.parse import urlparse, urlunparse

def process_faucet_host_url(input_url: str) -> str:
    """
    Construct a URL from the given input string.

    Args:
    - input_url (str): The input string that may or may not include a protocol,
                       and may or may not have a path.

    Returns:
    - str: The constructed URL with https as the default protocol and /accounts as the default path.
    """

    # Parse the input URL to identify its components.
    parsed_url = urlparse(input_url)

    # If the input string includes a protocol (e.g., "https://"), urlparse will correctly parse it.
    # Scheme refers to the protocol (e.g., "https", "http").
    scheme = parsed_url.scheme if parsed_url.scheme else 'https'

    # Netloc is the network location part, which usually includes the domain name.
    # For input "https://abcd.com", netloc is "abcd.com".
    # If no protocol is provided, the domain might be parsed as the path.
    # Consider the input string "abcd.com". If you were to parse this string using urlparse
    # without manually prepending a protocol (like http:// or https://), the parsing logic would
    # interpret "abcd.com" not as the network location part (or domain) of the URL, but rather
    # as the path component. This is because urlparse expects a scheme (protocol) to correctly
    # identify the parts of the URL.
    # Hence, we check if netloc is present; if not, assume the path is actually the netloc.
    netloc = parsed_url.netloc if parsed_url.netloc else parsed_url.path
    path = parsed_url.path if parsed_url.netloc else ''

    # If no specific path is provided, append '/accounts' to the URL.
    # For input "abcd.com", the constructed path will be "/accounts".
    if not path:
        path = '/accounts'

    # Construct the final URL by reassembling its components.
    final_url = urlunparse((scheme, netloc, path, '', '', ''))

    return final_url

Tests
from unittest import TestCase
from utils import process_faucet_host_url

class TestProcessFaucetHostURL(TestCase):
    """Test process_faucet_host_url."""

    def test_process_faucet_host_url_no_protocol(self) -> None:
        """Test with domain only, no protocol. Lacks a protocol and path, so it defaults to https://abcd.com/accounts"""
        input_url = "faucet.devnet.rippletest.net"
        expected_url = "https://faucet.devnet.rippletest.net/accounts"
        self.assertEqual(process_faucet_host_url(input_url), expected_url)

    def test_process_faucet_host_url_with_https(self) -> None:
        """Test with HTTPS protocol specified. Has a complete URL but lacks a path, thus "/accounts" is appended."""
        input_url = "https://faucet.devnet.rippletest.net"
        expected_url = "https://faucet.devnet.rippletest.net/accounts"
        self.assertEqual(process_faucet_host_url(input_url), expected_url)

    def test_process_faucet_host_url_with_path(self) -> None:
        """Test with domain and path, no protocol. Lacks a protocol, defaults to "https://", and already specifies a path."""
        input_url = "faucet.devnet.rippletest.net/accounts"
        expected_url = "https://faucet.devnet.rippletest.net/accounts"
        self.assertEqual(process_faucet_host_url(input_url), expected_url)

    def test_process_faucet_host_url_full(self) -> None:
        """Test with full URL."""
        input_url = "https://faucet.devnet.rippletest.net/accounts"
        expected_url = "https://faucet.devnet.rippletest.net/accounts"
        self.assertEqual(process_faucet_host_url(input_url), expected_url)

     def test_process_faucet_host_url_different_protocol(self) -> None:
        """Test with a non-HTTP protocol specified."""
        input_url = "ftp://faucet.devnet.rippletest.net"
        expected_url = "ftp://faucet.devnet.rippletest.net/accounts"
        self.assertEqual(process_faucet_host_url(input_url), expected_url)

Hey @justinr1234 ,
Thank you very much for writing this code. It is very thorough and clear.
However, I'm facing trouble with two test cases:
    # failing test cases
    # third test case in your code
    def test_process_faucet_host_url_with_path(self) -> None:
        """Test with domain and path, no protocol. Lacks a protocol, defaults to "https://", and already specifies a path."""
        input_url = "faucet.devnet.rippletest.net/accounts"
        expected_url = "https://faucet.devnet.rippletest.net/accounts"
        self.assertEqual(process_faucet_host_url(input_url), expected_url)

    def test_process_faucet_host_url_trailing_slash(self) -> None:
        """Test with a non-HTTP protocol specified."""
        input_url = "https://faucet.devnet.rippletest.net/"
        expected_url = "https://faucet.devnet.rippletest.net/accounts"
        self.assertEqual(process_faucet_host_url(input_url), expected_url)

    def test_process_faucet_host_url_custom_path(self) -> None:
        """Test with a non-HTTP protocol specified."""
        input_url = "https://faucet.devnet.rippletest.net/america/"
        expected_url = "https://faucet.devnet.rippletest.net/america"
        self.assertEqual(process_faucet_host_url(input_url), expected_url)

The test cases are failing when the path is specified, and/or there is a trailing slash / in the URL.
Here is the stacktrace:
  xrpl-py git:(justinURL) ✗ poetry run poe test tests/unit/asyn/wallet/test_wallet.py
Poe => python3 -m unittest tests/unit/asyn/wallet/test_wallet.py
F...F.F.....
======================================================================
FAIL: test_process_faucet_host_url_custom_path (tests.unit.asyn.wallet.test_wallet.TestProcessFaucetHostURL)
Test with a non-HTTP protocol specified.
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/ckeshavabs/xrpl-py/tests/unit/asyn/wallet/test_wallet.py", line 102, in test_process_faucet_host_url_custom_path
    self.assertEqual(process_faucet_host_url(input_url), expected_url)
AssertionError: 'https://faucet.devnet.rippletest.net/america/' != 'https://faucet.devnet.rippletest.net/america'
- https://faucet.devnet.rippletest.net/america/
?                                             -
+ https://faucet.devnet.rippletest.net/america

======================================================================
FAIL: test_process_faucet_host_url_trailing_slash (tests.unit.asyn.wallet.test_wallet.TestProcessFaucetHostURL)
Test with a non-HTTP protocol specified.
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/ckeshavabs/xrpl-py/tests/unit/asyn/wallet/test_wallet.py", line 96, in test_process_faucet_host_url_trailing_slash
    self.assertEqual(process_faucet_host_url(input_url), expected_url)
AssertionError: 'https://faucet.devnet.rippletest.net/' != 'https://faucet.devnet.rippletest.net/accounts'
- https://faucet.devnet.rippletest.net/
+ https://faucet.devnet.rippletest.net/accounts
?                                      ++++++++

======================================================================
FAIL: test_process_faucet_host_url_with_path (tests.unit.asyn.wallet.test_wallet.TestProcessFaucetHostURL)
Test with domain and path, no protocol. Lacks a protocol, defaults to "https://", and already specifies a path.
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/ckeshavabs/xrpl-py/tests/unit/asyn/wallet/test_wallet.py", line 77, in test_process_faucet_host_url_with_path
    self.assertEqual(process_faucet_host_url(input_url), expected_url)
AssertionError: 'https://faucet.devnet.rippletest.net/accounts/accounts' != 'https://faucet.devnet.rippletest.net/accounts'
- https://faucet.devnet.rippletest.net/accounts/accounts
?                                              ---------
+ https://faucet.devnet.rippletest.net/accounts

----------------------------------------------------------------------
Ran 12 tests in 0.015s

FAILED (failures=3)
➜  xrpl-py git:(justinURL) ✗

This is a known behavior of the urllib in Python. Are we expecting our users to not specify a trailing / in their inputs?

@ckeshava we should be able to handle stripping trailing slashes I’d say

This issue is being solved by https://github.com/XRPLF/xrpl-py/pull/690, hence closing this PR


Implement AAVAE (https://arxiv.org/abs/2107.12329)

Hey I've just seen that you add the tutorials to implement a new method! Can I try to implement this method?

Hey @PeppeSaccardi, I copied the implementation from their original repo and ran some stuff on cifar, it was performing okayish, but now I'm not really sure how well.
I'll pull the main into that branch. If you wanna work on it, please feel free to :). I can guide you if you have any questions as well.

Managed to merge the main with aavae's branch and you should be able to run. After a couple of steps I'm getting an inf in the training loss, but now I won't be able to check if my parameters are messed up or what might be the issue.

Oh thank you! I will start looking at your code then, and in case I find something that I can contribute to I will let you know :+1:


The description of ADLS storage replication (within region) does not match the description of LRS (datacenter only)

This article describes ADLS as using LRS. However, replication is stated as taking place within a region (implies multiple datacenters). Furthermore, documentation on Azure storage replication indicates that LRS cannot survive an entire datacenter outage. Stating that ADLS uses LRS storage, and that it has multiple replicas within a region (implies multiple datacenters) is inconsistent.

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 343e2c07-02f6-49df-f042-956442a61d69
Version Independent ID: 22a8d0cf-cf0e-62af-4155-298eaa5f11eb
Content: Disaster recovery guidance for Azure Data Lake Store
Content Source: articles/data-lake-store/data-lake-store-disaster-recovery-guidance.md
Service: data-lake-store
GitHub Login: @nitinme
Microsoft Alias: nitinme

Thanks for the feedback! I have assigned the issue to the content author to evaluate and update as appropriate.

Thank you. Furthermore, can ADLS in its current form (v1) survive a datacenter outage?


WIP: Package Manager Conditional Target Dependencies

This is the first iteration of the Package Manager conditional target dependencies proposal.

@benrimmington Thanks for the comments. I've applied them.


[2.3.x] Add root path for Quinoa Web UI

Describe your changes
This is a back-port of #691 to the 2.3.x branch.
Note that if the quarkus.quinoa.ui-root-path=/foo is set, then http://localhost:8080/foo redirects to http://localhost:8080/foo/ to serve the index.html file in production mode.
This happens, because in production mode io.vertx.ext.web.handler.StaticHandler is used to serve files which already implements this behavior.

Fixes Issue
Fixes #302

Check List (Check all the applicable boxes)

[x] My code follows the code style of this project.
[x] My change requires changes to the documentation.
[ ] I have updated the documentation accordingly.
[x] All new and existing tests passed.

I will wait for @ia3andy review and once its all done I will cut a 2.3.X release with your great fix!

I will not have time today, if you tested it @melloware I approve the code part

@liquidnya congratulation for getting this in, this is a very nice contribution and thank you 🚀🎉

@liquidnya would you care to join the quarkus zulip?

I tried to cut a release of 2.3 but it failed for Quarkus invalid token which Max is fixing I will try again today


Should Safari still be listed?

When trying to install the Safari extension, I get the following message:
Safari no longer supports unsafe extensions.
“Markdown Here” is no longer supported. You can find newer extensions reviewed by Apple in the App Store or Safari Extensions Gallery

I gets better:

Choose Develop > Allow Unsigned Extensions. The Allow Unsigned Extensions setting is reset when a user quits Safari; you must set it again the next time Safari is launched.

So even if you do build and install it, without a developer ID you have to re-authorize it every time you close Safari.


Add top level queries in GraphQL v2 for consistency

Fix https://github.com/opencollective/opencollective/issues/5188

@Betree I updated the schema, always a good idea when the API changes. Unfortunately, as I decided to order the queries alphabetically in the code, it looks like a huge change.


Linux executable does nothing when launched

What version of pkg are you using?
6.0.0
What version of Node.js are you using?
22.11.0
What operating system are you using?
Ubuntu 22.04.2
What CPU architecture are you using?
x86_64
What Node versions, OSs and CPU architectures are you building for?
node22-linux-x64
Describe the Bug
Building with default pkg instruction, .exe for windows works perfectly, but the linux executable just not working, it starts for 1 second, then closes. No errors, nothing
Expected Behavior
Should work
To Reproduce
I do
chmod +x ExecutableName
./ExecutableName

Executable should match everything

Does it works when using node 20?

Does it works when using node 20?

Yes, I already figured that out. It seems like ubuntu doesn't like working with node of versions 22 at all it seems. Issue solved.


Fix: Popover not working in Android

Closes https://github.com/tamagui/tamagui/issues/3029

it's still not woking in android

@calvinxie668 Tamagui picks from common js I think, so if you comment at source it will not work. You have to go to cjs folder I guess and comment it out. I don't remember the folder name, but commenting out one at a time helped me
@natew Can you please take a look at this Popper issues in Android and iOS please??

Yes after commenting these lines it works on Android 👍

Yes, After commenting the lines you have suggested it works on Android 👍

Can confirm that commenting out these lines of code bring popover back to android in latest Expo SDK 52 👍
<EMAIL_ADDRESS>

Fix going out v1.116.15, had to clean up a few things so just merged it myself but appreciate you finding this out.


Nice crate!

Hey Drew!
I've been looking into the async story in objc2 today (https://github.com/madsmtm/objc2/issues/279), gonna open a few issues (and later on probably PRs) in this repo because I believe you've taken the right approach in splitting this out from blockr to be generally applicable, and this'll be a useful crate for me to recommend to objc2 async users in the future.
Feel free to say so if you don't intend for this crate to be used by the wider ecosystem / gain that kind of "publicity" (with the effort that entails), then I'll go a different approach.
(Btw, thanks for making the license in your objr repos more permissive).

Oh, just found out that oneshot exists, might end up using that instead, not yet sure.

Hi mads, glad you found it useful so far.
I was unaware of oneshot as well.  Taking a glance at it I think the key differences are:

continue has first-class support for running code on cancel.  I think oneshot needs a wrapper for this?  Personally I think going batteries-included on this is the way to go.
oneshot has first-class support for blocking reads.  continue would need a wrapper to do this.  Personally I think going batteries-sold-separately on this is the way to go
panic vs error, more in #7
There are some different choices which lead to differing performance.  For example oneshot hand-rolls its atomic-waker like capability, which ought to be a bit better.  But in doing so it over-clones wakers, which ought to be a bit worse.


Codebase for V6.2.10

I can't seem to find a proper working codebase for the v6.2.10 which is currently available in the market, can someone let me know the appropriate branch and commit which has the stable commit for the same. I have already tried the development branch and commit which is giving me a white screen on compilation

Post this commit the version no seems to be 6.3.0.

Steps to follow for XDCPay

Extract the zip file "xdcpay-node-module".
It contains the folder "node_modules".
Copy it in xdcpay working project. If there is node_modules folder already, then delete it first then paste the new one.
Remove package-lock.json if it is there.
In terminal run command "npm i" or "npm install".
Then run command "npm start".

https://drive.google.com/file/d/19qvxm2vi8KPOUKs0V3AtIahADs9z89WO/view?usp=sharing

@lhtYashMohan Can't seem to open this link, Also rather than a guide on installing node modules can you share the branch name and commit id which has codebase for version 6.2.10 which is live on the Chrome store?

@lhtYashMohan  Got this error using the node modules shared.

I am using this commit: https://github.com/XDCFoundation/xdc-pay-xdcpay/commit/22ba552ea4f6da715dd85cacb170048d0a1b1d18.

@nitishpatel Please take checkout from Development branch only and follow the above reply the steps to setup XDCPay.
This branch will definitely run fine on the system locally.

@nitishpatel Please take checkout from Development branch only and follow the above reply the steps to setup XDCPay.
This branch will definitely run fine on the system locally.

@lhtYashMohan We have done that however Rohit from XDCFoundation has asked us to get the 6.2.10 version

@nitishpatel I took the clone of same commit 22ba552 and its running absolutely fine in my local and you see it in screenshot too . I followed the same steps to setup with the  solution which i replied earlier.
So please try it again with same steps.

Thanks , Working Any particular reason to use the node_modules zip file?

Yes, This node_module folder having some of package which already been deprecated and project is depending on it  which can't be downloaded now with npm install as it download new packages instead of deprecated one which are in package.json .

@WalterBlueu @lucksin3 We were investigating the few issues raised by us like AddToken and  Wallet Hanging, on which we found that the compiled zip file version 6.2.10 shared by @lucksin3 works fine however the current release doesn't.
So Upon investigation, we found that the commit shared with us https://github.com/XDCFoundation/xdc-pay-xdcpay/commit/22ba552ea4f6da715dd85cacb170048d0a1b1d18 wasn't stable itself and had both AddToken and Wallet Handing Issues.
So can we get the commit id using which 6.2.10 Code version went live on the store?

@lucksin3 @WalterBlueu any updates on the codebase commit?

22ba552
This was the last code base which went live and was working fine.

We have done our work on top of this only, but its buggy, which is also confirmed by @lucksin3

Closing this issue, codebase issue has been resolved.


Wip/mm/backport2test

Pull Request Description

Important Notes

Checklist
Please include the following checklist in your PR:

[ ] The documentation has been updated if necessary.
[ ] All code conforms to the Scala, Java, and Rust style guides.
[ ] All documentation and configuration conforms to the markdown and YAML style guides.
[ ] All code has been tested where possible.

@BinarySoftware What is happening with this PR?

This is just a pr to create a new release of scala-parser for ide, without latest changes in AST, as it would require a lot of adjustments in IDE ( import syntax I believe ). Not to be merged by any means, just run CI


Impossible to annotate variable as a polymorphic function

I have being running into this limitation a lot, but mostly because I was trying to define type annotations separate from implementations, but now I run into this issue in very regular use of flow. In fact I don't think there is a way to define this without flow failing:
/* @flow */

export const get = <item>
  (index:number):(items:Array<item>) => ?item =>
  (items) =>
  items[index]

export const first = get(0)

This produces following error
type parameter `item` of function call Missing annotation

I also tried different ways to annotate first:
export const first:(<item> (items:Array<item>) => ?item) = get(0);

and
export const first = (get(0):(<item> (items:Array<item>) => ?item));

But non of these works.

Only way I managed to workaround this is by tricking flow into thinking that have provided diff implementation:
/* @flow */

export const get = <item>
  (index:number):(items:Array<item>) => ?item =>
  (items) =>
  items[index];

export const last = <item>
  (items:Array<item>):?item =>
  items[items.length - 1];

export const first = (get(0)/*::,last*/);

Looks like Flow is expecting annotations on typeparams for exported functions... Can repro this with normal functions as well (a little easier to parse):
function get<item>(index): (items:Array<item>) => ?item {
}

BTW it would be really great if flow did not require return type annotation if it's just closure that only returns another annotated function. Because you pretty much end up repeating yourself twice in such cases.

BTW it would be really great if flow did not require return type annotation if it's just closure that only returns another annotated function

The reason Flow requires annotations on module boundaries is a bit of a trade-off: Requiring annotations reduces the amount of work Flow has to do when it is solving types for an entire codebase. If all exports went unannotated, Flow would likely be fairly slow.
To address this problem we have some heuristic logic that determines which circumstances to be lenient on vs not -- but currently this logic operates at a fairly coarse-grained level. Flow can tolerate some level of this work. Picking where to be lenient is a trade-off between being confusing vs annoying: It's confusing if it's lenient sometimes but not others ("what are the rules?"). It's annoying if it asked for everything (think about all properties on every object that is exported, etc).
Because the "requires annotation" logic is coarse-grained right now, we're somewhat limited on which patterns we can add exceptions to be more lenient on -- but we do have some ideas to make that better in the future.

This is the same as #846?

Turns out it's actually the same issue as #2105. see modified version works:
/* @flow */

export const get = <item>
  (index:number) =>
  <inner:item> (items:Array<inner>):?inner =>
  items[index];

export const last = <item>
  (items:Array<item>):?item =>
  items[items.length - 1];

export const first = get(0);

It's just polymorphic high order functions do return polymorphic functions bound to the same parameters, but flow expects you to explicitly annotate inner function as polymorphic, otherwise it treats it as some kind of not fully typed monomorphic function. @avikchaudhuri  tried to explain it in more details here:
https://github.com/facebook/flow/issues/2105#issuecomment-234118176
Anyway as I mentioned in that other bug I find it counter intuitive that flow requires inner functions to be manually annotated as polymorphic with bounds to outer params, due to arguments made in that issue.
With more & more instance of that issue I'm even more convinced that chosen default is counter intuitive.

@Gozala How you managed get this to work, I have errors if try to actually use last or first funcs.
const arr = ['1', '2', '3']

const f = first(arr)

15: const arr = ['1', '2', '3']
                 ^ string. This type is incompatible with
5:   <inner:item> (items:Array<inner>):?inner =>
            ^ some incompatible instantiation of `item`
15: const arr = ['1', '2', '3']
                      ^ string. This type is incompatible with
5:   <inner:item> (items:Array<inner>):?inner =>
            ^ some incompatible instantiation of `item`
15: const arr = ['1', '2', '3']
                           ^ string. This type is incompatible with
5:   <inner:item> (items:Array<inner>):?inner =>
            ^ some incompatible instantiation of `item`

https://flowtype.org/try/#0PQKgBAAgZgNg9gdzCYAoVBTAHgBzgJwBcwBjOAOwGdiBzDYgXjAB4BLQjAWwD5UwwAFK3IATbAC5yAV04AjDPgCUYBr35ty5BePZdug3Z0riAgvnwBDAJ4at+bovEB+YXZVqwhygG1hYrAC6ANzo-PyYuATEZFTEMBbUKiyGHkIcRqbm1mzpDs6G7nye6T5eAHQwGOQ0hAAWYAC0YACMwejYeESkFIlQrPiJTHSEAgAMiiFhYKgxiRbmSd4A5M1LADRgSwBM65sAzEsBReGzxFBJfQMj80pAA

It looks like this works now.
Let me know if I’m missing something 👍
// function get<TItem>(index: number): (items: Array<TItem>) => ?TItem {
//   return (null: any);
// }

const get = <TItem>(index: number) => (items: Array<TItem>) => items[index];

const first: string = get(0)([1, 2, 3]);

https://flow.org/try/#0PTAEDMFcDsGMBcCWB7aoDmBTeAeAKgJLyYC2AfABSLQAmmAHgFyjSQkBGmATgJTNXESAZ2YBBLlwCGAT3xFSZHqAC8ZUAH5Cg0AG8AUCFBGu2SFzQVWAGyvNJ0aTwDcBsAF89e2KiHwM2FVA5QUpqOiYWNk5eFTUBUhFQcSlZLQUlVVBEQSEAbTCGAF0XLx8-cEQuX2ZfLmp0QKx4CgAGHgpcgEYAGlAAJl6AZkLnPSA

Hm, that link is erroring out now with 0.75.0.
7: const first: string = get(0)([1, 2, 3]);
                         ^ Cannot assign `get(...)(...)` to `first` because `TItem` [1] is incompatible with string [2].
References:
5: const get = <TItem>(index: number) => (items: Array<TItem>) => items[index];
                                                       ^ [1]
7: const first: string = get(0)([1, 2, 3]);
                ^ [2]

7: const first: string = get(0)([1, 2, 3]);
                                 ^ Cannot call `get(...)` with array literal bound to `items` because number [1] is incompatible with `TItem` [2] in array element.
References:
7: const first: string = get(0)([1, 2, 3]);
                                 ^ [1]
5: const get = <TItem>(index: number) => (items: Array<TItem>) => items[index];
                                                       ^ [2]

etc...

I was having a similar problem with something that I wanted to do with generic parameters and bounded polymorphism throwing incompatible errors, but was unsure if this was actually a bug:
https://flow.org/try/#0MYewdgzgLgBA5gUygMRCGBeGAeAKgPgAoQAjAKwC4YBvAMzSoEEAnZgQwE898BfASkz4YpMgDp6IANwAoUJFi0Als2hNWnbGACuAWxIJmQrIhRpCdBjADaARgA0MAEwOAzAF1+MoA

This is strange. The problem doesn’t require a third-party libdef; you
can reproduce it as follows:
function getArr<T: number>(obj: {numbers: Array<T>}) {
  return obj.numbers;
}
declare var o: {numbers: Array<number>};
const arr: Array<number> = getArr(o);  // error?!

If we ask flow type-at-pos the type of getArr, it says:
<T: number>(obj: {numbers: Array<T>}) => Array<T>

which is correct. If we explicitly annotate the return type of getArr…
function getArr<T: number>(obj: {numbers: Array<T>}): Array<T> {
  return obj.numbers;
}
declare var o: {numbers: Array<number>};
const arr: Array<number> = getArr(o);  // works (good)

then the problem goes away.
It’s true that Array<T> is not and should not be a subtype of
Array<number> (if you’re not sure why, let me know and I can explain),
but it’s not clear why that is relevant here. As expected, replacing
Array with $ReadOnlyArray everywhere fixes the problem.
Unless I’m missing something, this looks like an inference bug.


MudLineChart: All zero series data no longer throws exception

Description
If the series data for a line chart contains all zeroes, an exception is thrown since verticalSpace is calculated as infinite
Resolves #8282
How Has This Been Tested?
Tested via unit tests and test viewer
Created new unit test and unit test viewer component
Types of changes

[x] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)

Checklist:

[x] The PR is submitted to the correct branch (dev).
[x] My code follows the code style of this project.
[x] I've added relevant tests.

 @Anu6is !


Release 2.2.1

Fixed:

Switch recovery script back to using master branch of our DynamoDbBackUp fork (now that it uses NodeJS 10.x)

For details on that repo's changes, see this PR:
https://github.com/silinternational/DynamoDbBackUp/pull/1


Main

I have added amazon-white in all three size small  medium and large

Please Check it!

Congrats @RohitChauhan98 🎉, your PR got merged. To be eligible for the swags from ClueLess.
Don’t forget to star this repository. ⭐


Release

Make a release with latest changes.

@AurelienLavorel As I finished maintaining the French translation for Mattermost, I'm now able to devote some time to this.
A few questions though since I see you are a Magento core committer (commits rights to the Magento repository).
I plan to create an organization managing the localization of Magento to French (so not only translations, but fixes to the data management, French/Belgian specific extensions, etc.). I see you have been able to choose the logo of Magento for your company @Lavoweb (just upside down and in red instead of orange). I plan to have this idea as well, but taking some inspiration of on the Francophonie logo.
Do you know whether Magento has now finally an official Pootle/Crowdin repository?
As soon I have your answer, I'll choose an organization name,. If you cnfirm Magento hasn't such translation infra, I'll deploy a Pootle instance with auto CI (maybe recycling in the process a few scripts I have written for Mattermost). Using pull requests to manage a translation is an awful process.

You can't use their logo to provide extensions, they will be refused on the marketplace.
No, I'm not aware of that, sorry.

@AurelienLavorel No issue, this is why I asked my designer to have a completely unrelated logo. :)
More to come on this later. I have been able to make some progress on this regard. The CI + Pootle infra should be working by the end of next week.


Why we do not have support for popular logging platforms?

So I came across this in the part of the documentation
Last, logging is kept minimal in the script. In order to use a particular logger
please refer to <https://lightning.ai/docs/fabric/stable/api/loggers.html> or
call a logging client library like `wandb` directly.

Here, why are we not, providing (may be optional) features for direct integration of popular logging platforms? This can be ether:

Local path
WandB
TensorBoard
Neptune, etc.

We can use this extensively for the fine-tuning and evaluation pipeline. For example, for fine-tuning
python finetune/lora.py \
 --data_dir data/alpaca_libre/ \
 --checkpoint_dir checkpoints/openlm-research/open_llama_7b/ \
 --precision bf16-true
 --log_to wandb/neptune/local/tensorboard

Or during the case of evaluation, we can put:
python eval/lm_eval_harness.py \
   --checkpoint_dir "checkpoints/openlm-research/open_llama_7b/" \
   --precision "bf16-true" \
   --eval_tasks "[truthfulqa_mc]" \
   --batch_size 4 \
   --save_filepath "results-openllama-7b.json"
   --log_to wandb/neptune/local/tensorboard

Can we do this?

I can't speak to this decision, but am guessing it's left up to the user since downloading the specific software introduces unnecessary overhead (i.e. what if I use neptune but not wandb).
However, if you are looking for some example code for wandb logging, I have a fork of this repository which has wandb logging for system settings, train loss, validation loss, and some instructional text here: https://github.com/nkasmanoff/llm-finetuning/blob/main/lit-gpt/finetune/lora.py
This is definitely an incomplete version and I may add more logging as I go, but might be useful to you?

Yeah, after putting the issue, I also got that, this could be a possible reason. LitGPT's implementation has been kept open solely for making it a hackable script and right now more focussed towards the NeurIPS implementation. Hence this makes sense.
Thanks for the script, this helps @nkasmanoff


Don't log user in immediately after password reset?

Core Library
MSAL.js v2 (@azure/msal-browser)
Core Library Version
2.22.0
Wrapper Library
MSAL React (@azure/msal-react)
Wrapper Library Version
1.4.3
Description
I have setup B2C authentication in my React app that was created with create-react-app. Everything seems to be working. However, after a user successfully resets their password the LOGIN_SUCCESS event is emitted and the user is automatically logged into the app. Is this the expected behavior or is there something in my code that needs to be changed? I would expect that the user should be navigated back to the login page to login with their new password.
MSAL Configuration
{
        auth: {
            authority: `https://${tenantName}.b2clogin.com/${tenantId}/${signInSignUpPolicy}`,
            knownAuthorities: [`${tenantName}.b2clogin.com`],
            clientId: authConfig.clientId,
            postLogoutRedirectUri: window.location.origin,
            redirectUri: window.location.origin,
        },
        cache: {
            cacheLocation: 'localStorage',
            storeAuthStateInCookie: false,
        },
        forgotPasswordRequest: { authority: `https://${tenantName}.b2clogin.com/${tenantId}/${pwdResetPolicy}` },
}

Relevant Code Snippets
export function App() {
    /* other logic */

    return (
       <...other wrapper components>
          <MsalWrapper>
              <Authenticate>
                 <Banner />
                 <AppContent />
              </Authenticate>
          </MsalWrapper>
       </...other wrapper components>
    );
}

function MsalWrapper({ children }) {
    const [msalInstance, setMsalInstance] = useState();
    const authentication = useSelector((state) => state.authentication);

    useEffect(() => {
        if (authentication) {
            /* Need to wait until authentication has been fetched for the current tenant before
             * initializing PCA.
             */
            const msalConfig = getMsalConfig(authentication);
            const msalInstance = new PublicClientApplication(msalConfig);

            setMsalInstance(msalInstance);
        } else {
            setMsalInstance(undefined);
        }
    }, [authentication]);

    if (!msalInstance) {
        return null;
    }

    return <MsalProvider instance={msalInstance}>{children}</MsalProvider>;
}

function Authenticate (props) {
    const { instance } = useMsal();
    const account = instance.getActiveAccount();
    const tenantAuthConfig = useSelector((state) => state?.authentication)
    const [userProfileMapping, setUserProfileMapping] = useState();

    const logout = () => {
        instance.handleRedirectPromise().then(() => instance.logoutRedirect())
    }

    useEffect(() => {
        const passwordResetURL = getMsalConfig(tenantAuthConfig).forgotPasswordRequest;
        const callbackId = instance.addEventCallback(async(event) => {
            if (event?.eventType === EventType.LOGIN_SUCCESS) {
                instance.setActiveAccount(event.payload.account)
            } else if (event?.eventType === EventType.LOGIN_FAILURE && event?.interactionType === InteractionType.Redirect) {
                if (event?.error?.errorMessage?.includes('AADB2C90118')) {
                    return instance.loginRedirect(passwordResetURL);
                }
            }
        })
        return () => {
            instance.removeEventCallback(callbackId)
        }
    }, [])

    const getAccessToken = useCallback(
        async (scopes) =>
            instance
                ? instance
                      .acquireTokenSilent({ scopes, account })
                      .then((response) => {
                          return response.accessToken;
                      })
                      .catch((error) => {
                          if (error instanceof InteractionRequiredAuthError) {
                              // fallback to interaction when silent call fails
                              return instance.acquireTokenRedirect({ scopes, account });
                          }
                      })
                : null,
        [instance],
    );

    //Custom functionality to map AzureAD account to custom user profile object
    useEffect(() => {
        async function getUserProfile() {
            const userId = account?.localAccountId;
            const authToken = await getAccessToken(scopes);
            const response = /* ...await API call */
            setUserProfileMapping(response.data);
        }

        if (instance) {
            if (account?.localAccountId) {
                getUserProfile();
            } else {
                setUserProfileMapping(undefined);
            }
        }
    }, [account && account.localAccountId]);

    return (
        <MsalAuthenticationTemplate interactionType='redirect'>
            {/* Custom AuthenticationContext */}
            <AuthenticationContext.Provider
                value={{
                    account: { ...account, name: account?.name ?? `${account?.idTokenClaims?.given_name} ${account?.idTokenClaims?.family_name}` },
                    logout,
                    getAccessToken,
                    authorizationScopes: scopes,
                    userProfile: userProfileMapping,
                    updateUserProfile: (updatedProfile) => {
                        setUserProfileMapping(updatedProfile);
                    },
                }}
            >
                {props.children}
            </AuthenticationContext.Provider>

        </MsalAuthenticationTemplate>
    )
}

Identity Provider
Azure B2C Basic Policy
Source
External (Customer)

@derisen Can you please confirm this behavior once with our samples? I assume the general behavior has to be re-enter the password.

@BeeR-II this is expected, with both legacy and self-service password reset user flows. If you want the user to sign-in again with their new password, you can listen for the LOGIN_SUCCESS event, and then check the idTokenClaims of the user. If the acr or tfp claim has your B2C password reset policy's name (e.g. b2c_1_reset), you can log them out and ask them to sign-in again. Would that help?

@derisen Thank you for the quick response and confirmation. That was what I had implemented as a workaround in the meantime, but I'm happy to know that this is the expected behavior and that is the recommended approach.
For the benefit of anyone else reading this thread, after listening for the LOGIN_SUCCESS event and triggering log out if the the user was resetting the password, I was still seeing the app contents flash on the screen for a second between password reset and logout. This was solved by conditionally rendering the children of the MsalAuthenticationTemplate, only if account is defined.
P.S. I believe I could still implement this with the legacy flow by checking the authority URL associated with the account in the LOGIN_SUCCESS payload.


Some correction for GNU/Linux installation tutorial

Shouldn't
qmake -spec=linux-clang
line become
qmake -spec linux-clang
?
Current tutorial copies 32 bit bass and bass_fx to Release folder. For x64 systems, those lines should be;
cp $BASS_DIR/x64/libbass.so .
cp $BASS_FX_DIR/x64/libbass_fx.so .
Thanks, regards.

Yeah, it seems I've made a mistake or two while writing that quickstart guide. Just shows both how my focus is still mainly fixated on Windows and also how little traffic there is from other people :p But thanks for reporting, I'll sort this out in a moment or two :+1:


Fixed reference types being passed to getitemint

Fixes https://github.com/cython/cython/issues/3754

The Python 3.6 test failures look to be in the master branch, not this PR.

Looks good to me, thanks.


XTextarea 添加 title

Please makes sure the items are checked before submitting your PR, thank you!

[ ] Rebase before creating a PR to keep commit history clear.
[ ] Only One commit
[ ] No eslint errors

https://github.com/airyland/vux/blob/v2/docs/zh-CN/README.md#如何贡献


Linting not working with ALE, RLS, and VIM 8.

VIM 8.0.1283
macOS 10.14.4
No matter what I try, I cannot get ALE to start linting with Rust. I've verified when I launch Vim pointed to a Rust file that rls is not starting as a process. So ALE appears to not be executing rls. Are there any logs I can look at? Any help would be very appreciated.
It's also not working if I switch to rustc either; so I think there is a more general problem.
rls is in my PATH for ZSH and Bash.
/Users/jaredjones/.cargo/bin/rls
:echo g:ale_buffer_info
{'1': {'active_linter_list': [], 'loclist': [], 'active_other_sources_list': []}}
VIMRC
set nocompatible
set laststatus=2
set encoding=utf-8

call plug#begin('~/.vim/plugged')

Plug 'rust-lang/rust.vim'
Plug 'itchyny/lightline.vim'
Plug 'w0rp/ale'
Plug 'Valloric/YouCompleteMe'

call plug#end()

let g:lightline = {'colorscheme': 'solarized'}
let g:ale_linters = {'rust': ['rls']}
let g:ale_completion_enabled = 1
let g:ale_rust_rls_toolchain = 'stable'

ALEInfo
Current Filetype: rust
Available Linters: ['cargo', 'rls', 'rustc']
  Enabled Linters: ['rls']
 Suggested Fixers:
  'remove_trailing_lines' - Remove all blank lines at the end of a file.
  'rustfmt' - Fix Rust files with Rustfmt.
  'trim_whitespace' - Remove all trailing whitespace characters at the end of every line.
 Linter Variables:
let g:ale_rust_rls_config = {}
let g:ale_rust_rls_executable = 'rls'
let g:ale_rust_rls_toolchain = 'stable'
 Global Variables:
let g:ale_cache_executable_check_failures = v:null
let g:ale_change_sign_column_color = 0
let g:ale_command_wrapper = v:null
let g:ale_completion_delay = 100
let g:ale_completion_enabled = 1
let g:ale_completion_max_suggestions = 50
let g:ale_echo_cursor = 1
let g:ale_echo_msg_error_str = 'Error'
let g:ale_echo_msg_format = '%code: %%s'
let g:ale_echo_msg_info_str = 'Info'
let g:ale_echo_msg_warning_str = 'Warning'
let g:ale_enabled = 1
let g:ale_fix_on_save = 0
let g:ale_fixers = {}
let g:ale_history_enabled = 1
let g:ale_history_log_output = 1
let g:ale_keep_list_window_open = 0
let g:ale_lint_delay = 200
let g:ale_lint_on_enter = 1
let g:ale_lint_on_filetype_changed = 1
let g:ale_lint_on_insert_leave = 0
let g:ale_lint_on_save = 1
let g:ale_lint_on_text_changed = 'always'
let g:ale_linter_aliases = {}
let g:ale_linters = {'rust': ['rls']}
let g:ale_linters_explicit = 0
let g:ale_list_vertical = 0
let g:ale_list_window_size = 10
let g:ale_loclist_msg_format = '%code: %%s'
let g:ale_lsp_root = {}
let g:ale_max_buffer_history_size = 20
let g:ale_max_signs = -1
let g:ale_maximum_file_size = v:null
let g:ale_open_list = 0
let g:ale_pattern_options = v:null
let g:ale_pattern_options_enabled = v:null
let g:ale_set_balloons = 0
let g:ale_set_highlights = 1
let g:ale_set_loclist = 1
let g:ale_set_quickfix = 0
let g:ale_set_signs = 1
let g:ale_sign_column_always = 0
let g:ale_sign_error = '>>'
let g:ale_sign_info = '--'
let g:ale_sign_offset = 1000000
let g:ale_sign_style_error = '>>'
let g:ale_sign_style_warning = '--'
let g:ale_sign_warning = '--'
let g:ale_statusline_format = v:null
let g:ale_type_map = {}
let g:ale_use_global_executables = v:null
let g:ale_virtualtext_cursor = 0
let g:ale_warn_about_trailing_blank_lines = 1
let g:ale_warn_about_trailing_whitespace = 1
  Command History:

Command history is empty?

It started working once I put it into a cargo project?

ALE tries to find a project root, and then exec it's linting from that working directory. For rust projects, that means that it walks up the file tree until it finds a directory containing Cargo.toml. See https://github.com/w0rp/ale/blob/master/ale_linters/rust/rls.vim
If you want ALE to run for rust files in arbitrary directories, you'd have to come up for a convention of what directory to use as a project root, and add functionality to communicate that convention to ALE.

Great explanation!
Okay closing.


[core] reduce unnecessary traversals to optimize the assign logic of PartitionIndex.

Purpose

Linked issue: close #2075

[core] reduce unnecessary traversals to optimize the assign logic of PartitionIndex.
I made a simple benchmark and continuously used random keys to call the assign of PartitionIndex. The results showed that removing unnecessary traversals can improve performance by 50% to 200%.

benchmark 1s
benchmark 5s
benchmark 10s
benchmark 30s

before
4247.443 ops/ms
2342.67 ops/ms
1766.141 ops/ms
1287.669 ops/ms

after
6324.565 ops/ms
5738.319 ops/ms
5200.766 ops/ms
4563.41 ops/ms

Tests
The existing org.apache.paimon.index.HashBucketAssignerTest can verify this change.
API and Format
No
Documentation
No

Thanks @liming30 , benchmark looks very good~


[$250] When editing comment, copy and paste text that has trailing \n, console error appears and send button changed to grey, can not send

If you haven’t already, check out our contributing guidelines for onboarding and email<EMAIL_ADDRESS>to request to join our Slack channel!

Version Number: v1.4.80-9
Reproducible in staging?: Yes
Reproducible in production?: Yes
If this was caught during regression testing, add the test name, ID and link from TestRail:
Email or phone of affected tester (no customers):
Logs: https://stackoverflow.com/c/expensify/questions/4856
Expensify/Expensify Issue URL:
Issue reported by: @badeggg
Slack conversation: https://expensify.slack.com/archives/C01GTK53T8Q/p1717559130850559
Action Performed:

Open any chat page
in the composer box, copy text that has trailing a trailing line break,  \n, paste it to the composer box, ie.

test

Expected Result:
No error logging in console and can send text
Actual Result:
Console error appears and send button changed to grey, can not send
Workaround:
Can the user still use Expensify without this being fixed? Have you informed them of the workaround?
Platforms:

Which of our officially supported platforms is this issue occurring on?

[ ] Android: Native
[ ] Android: mWeb Chrome
[ ] iOS: Native
[ ] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[x] MacOS: Desktop

Screenshots/Videos
Add any screenshot/video evidence
https://github.com/Expensify/App/assets/38435837/dbe8bd76-23da-46a9-aa81-fb61017e02b8

View all open jobs on GitHub
Upwork Automation - Do Not Edit

Upwork Job URL: https://www.upwork.com/jobs/~01296f154c567ad13d
Upwork Job ID:<PHONE_NUMBER>321176346
Last Price Increase: 2024-06-17

Issue OwnerCurrent Issue Owner: @eVoloshchak

Here's clear repro step:

Copy this code block

test

Paste into composer

The issue appears to have to do with the trailing space or linebreak at the end, when it's removed, you can post. Does that sound right @badeggg and @situchan
https://github.com/Expensify/App/assets/22508304/c2fe13f5-8d24-40f7-a54d-e0c31a421bff

This has been labelled "Needs Reproduction". Follow the steps here: https://stackoverflowteams.com/c/expensify/questions/16989

The issue appears to have to do with the trailing space or linebreak at the end,

Not exactly, trailing line break can repro, trailing space can not.

when it's removed, you can post

Actually, you just need change the comment just  a little bit after pasting (e.g. add letter a in what ever place), you can post.
By the way, is this issue waiting proposals from external?

If you are using vscode, select two lines(one line is ok too) and cmd + c to copy, like this:

If you use vim, shift + v enter visual mode, shift + " + * + y to copy, like this:

Paste to composer box, error appears

The issue appears to have to do with the trailing space or linebreak at the end, when it's removed, you can post. Does that sound right @badeggg and @situchan
w_e5779e27696d0562df5cc72192db49420213f1cc.mp4

The video you shared correctly explains the bug. Send button is disabled along with console error.

Opening this up for proposals, @badeggg , did you want to submit one?
I added trailing line break to the repro steps to be clear, since I wasn't sure what /n exactly meant.

Proposal
Please re-state the problem that we are trying to solve in this issue.
When copy some text with trailing line break(\n) and past to composer box, console error appears and send button changed to grey, can not send
What is the root cause of that problem?
"react-native-live-markdown" code here, condition if (nextChar !== '\n') is not checking textNodes[i + 1] might be undefined and range.setStart(textNodes[i + 1] as Node, 0); is using textNodes[i + 1] assuming it is a node entity.
What changes do you think we should make in order to solve the problem?
Change this line from:
if (nextChar !== '\n') {

to
if (nextChar !== '\n' && textNodes[i + 1]) {

What alternative solutions did you explore? (Optional)
N/A

Hi, I’m Bartosz from SWM react-native-live-markdown team. We’ve recently decided that it would be best to actively participate in all of the issues related to the library we’re working on. That means reviewing proposals together with the Expensify team and supporting external contributors to ensure quality solutions that won’t introduce any additional regressions. 🙌🏻
I’m currently going through all of the issues that could require any changes to the library. Feel free to tag me if you need anything, later I’ll be diving into the issues more in-depth, but there’s quite a few of them so it can take a while for me to catch up. 😄

Thanks @BartoszGrajdek , I added to the Live Markdown project, removed Help Wanted and bumped to weekly.
@badeggg , hang tight for now plz while we get a better handle on managing markdown improvements more holistically.

Thank you @mallenexpensify 🙌🏻
I've added a more in-depth update here. I'll be looking through proposals in the coming days. What @badeggg is suggesting to change is something that has already caused quite a few problems, so I'd rather test it carefully.

I believe this was fixed here! Can we get it retested?
These changes are also coming into react-native-live-markdown later this week.