Trust registry for agents ** More information required

An agent can either be registered as an issuer with a public DID or as a verifier without a public DID associated with a multi-use invitation.
Issuers - public DID

[ ] Retrieve a list of issuer public DIDs from ledger written by the Yoma Transaction Endorser DID

Verifiers - non-public DID

[ ] Manage list of verifiers and related context to be able to make connections in the front-end database? This requires more thought on how we want to engineer this.

Trust Registry UI/UX

[ ] Clearly show if yoma members the various ecosystem agent as part of trust registry and in which role they are acting in; issuer/verifier or both

closes #76

spec here

Relevant questions to answer
Questions:

Can two versions of the same schema be registered at the same time in the trust registry? (I tend to think so but unsure)
Is there a disctinction between schemas that can be issued with, and schemas that can be verified with?

closes #76


Update the regex for instruction name.

Previous "\w+" cannot match invalid name, such as "apt-get", which may be introduced by mistake.
Use "\S+" to be more robust.
Signed-off-by: limjcst<EMAIL_ADDRESS>Maintainers will complete the following section:

[x] Commit messages are descriptive enough
[x] "Signed-off-by:" line is present in each commit
[x] Code coverage from testing does not decrease and new code is covered

/packit build

Looks great!
Thanks, @limjcst!!!

Release notes:

instructions with special characters are not skipped anymore


【Feature addition request】define list component

Can you be a little more specific?

I want
For example
<md-card>
  <md-dl>

name

Taro

from

Japan

  </md-dl>
</md-card>

@kgtkr something like this maybe ?

I did not know that
thank you

@kgtkr If that is what you've searched, please close this issue yourself.

OK


HTML table with highlightable rows

index.html is currently organized using HTML lists.  What about a formal table, so that we can shade every other row and even have hoverable rows?  This might help a user read a specific row of interest.
From the Bootstrap 5 page, they have this example, which I think would like nice.
<table class="table table-striped table-hover">
  ...
</table>

@KVentayen, what do you think?

I think this is a good idea.


Sherpa for RPi (arm) - How to deploy?

Hi!
How can I get Sherpa on arm for RPi?
THX

Hi @74cmonty. I'm not sure I understand, Sherpa runs as a docker container, so you would need to image your RPi to have docker installed /w the Sherpa image in order to run it. However, to honest, I'm not experienced with running docker in RPi.


Example scenario - HPC SaaS

:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

docs/example-scenario/apps/hpc-saas.md
:white_check_mark:Succeeded
View

docs/example-scenario/apps/media/architecture-diagram-hpc-saas.png
:white_check_mark:Succeeded
View

docs/example-scenario/data/data-warehouse.md
:white_check_mark:Succeeded
View

docs/example-scenario/data/images/architecture-diagram-data-warehouse.png
:white_check_mark:Succeeded
View

For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.


Support JPEG XL

If I understand correctly, wayshot by default save files as png and we can save as jpg extension too. I don't know if this is possible or would be enchantment you wanted in your project, but saving screenshots as  JPEG XL (jxl) files would be awesome.
Very nice project!

Yep this is possible and I'm willing to work on it once I gain enough knowledge about encoding with jxl.

https://github.com/image-rs/image/issues/1765
https://github.com/image-rs/image/issues/1765
Related issues. I do not want to do any custom encoding / decoding right now to keep the codebase simple and easy to understand. If it does get implemented in image-rs then I'd be more than happy to expose libwayshot API calls for JXL.

Yeah, JPEG XL is the real deal, especially with the recent 0.10 speedups of reference libjxl implementation, see here:
https://cloudinary.com/blog/jpeg-xl-and-the-pareto-front

My quick tests show that using is really-really fast (Hyprland, wayshot compiled with -march=native, Ryzen 5600):

zune-image supports jpeg xl, but that's another story, right?

That doesn't seem very fast from the numbers shown -- again I might be mistaken in my interpretation.
I'm generally against adding new crates to the dependency graph unless unavoidable. Does zune support interop with image crate types?

There are a few zune- crates behind feature flags for image-rs, so there is at least some reference of interop between those.
While jxl is cool, it shines brighter when encoding complex stuff like real world photos in high resolution, like shown in the article. And in lossy but visually lossless scenarios.

If we implement png optimization, then jxl gets less attractive for desktop screenshot case. Still an image format to look at, because it's like jpeg, but better in everything, and with lossless mode. Just needs more time and adoption (hello, Google Chrome).


laravel 8 combatibility

I have created a fix for #7. Could you please check if it works for you (it works on a local test install of laravel 8) and merge this pr?
Thank you very much.

Thanks! Yeah it works!


General questions about projector and the app state in event sourcing system

Hi, first of all, I like the v2 docs. The Getting familiar with event sourcing part helps a lot for me.
I am still learning DDD & event sourcing, my first question is:
Base on the aggregate example, we use an accounts table to recording the account balance. But we have all events already and can reconstituteFromEvents() to the aggregate, so we know the balance number actually, can we just use the aggregate ? Or the accounts table is a kind of snapshot in the event sourcing system ?
The other question is about projector. If two projectors want to handle one event, how will they execute in sequence ? Follow the items of projectors array ?
Thanks.

Hi, first of all, I like the v2 docs. The Getting familiar with event sourcing part helps a lot for me.

Great to read this is useful for you! 👍

Base on the aggregate example, we use an accounts table to recording the account balance. But we have all events already and can reconstituteFromEvents() to the aggregate, so we know the balance number actually, can we just use the aggregate ? Or the accounts table is a kind of snapshot in the event sourcing system ?

Great question, I had the same question too when learning all this.
The only function of the aggregate is to decide which events should get written. It should not try to write any other state itself, nor should other parts of your system depend on the internal state of the aggregate.
So, the aggregates is responsible for deciding if the balance may change. If other parts of your system are interested in the actual balance, create a projection that persist the balance and query that.

The other question is about projector. If two projectors want to handle one event, how will they execute in sequence ? Follow the items of projectors array ?
I think so.


Use a relative URL for the FreeRTOS-Kernel submodule.

The url option for the FreeRTOS-Kernel submodule can just be ../FreeRTOS-Kernel.git rather than the full github URL. This would help organizations that would like to mirror both of these repos without having the FreeRTOS-Kernel submodule always point at github, which is not desirable.

@chrisnc Thanks for bringing this issue up. I have merged the PR that addresses this issue, and will mark this as closed.

The GitHub web UI does not seem to play well with relative URL — the link is dead that user cannot click through. (See the attached. Cloning works, it's just the UI.) I'm going to revert the change in PR #27. @chrisnc Thank you for the suggestion though.

Given that you have to navigate into the FreeRTOS directory before seeing this, it seems less severe to me? A (more) prominent link to FreeRTOS-Kernel in the README or description of this repo might be more generally useful. One of the links you added in the reverting PR is broken: https://github.com/FreeRTOS/FreeRTOS/commit/42c627b2b88cb3b487fea983d8b566a8bbae54fa#r37685464

Can this be revisited/un-reverted? GitHub finally fixed the issue with links to submodules with relative URL paths in the web UI: https://github.community/t/support-linking-relative-urls-on-submodules/2078/21
Here's an example someone posted in that thread that originally did not work, but now does: https://github.com/apmorton/submoduledemo
Let me know if I should open a new issue.

Hi @chrisnc,
I tried testing this in PR #661, and it was harder to clone from forks unless the submodule has been forked as well. Also, there was only one submodule when this issue was created, but there are about 20 now, not all under the FreeRTOS organization. Making just the kernel a relative submodule won't be all that useful, and neither would making all the FreeRTOS submodules into relative links, as there are still the submodules under AWS and those that are third party.
If you would like to use relative submodules for mirroring the repositories internally, we'd recommend:

Using git submodule set-url to set the custom URL.
Committing your changes to your internal repository.
Rebasing or merging your changes when updating from upstream, and keep an eye out for changes that overwrite the submodule URLs, such as with a pre-commit hook.

However, since there are a lot more submodules now, doing so might be more cumbersome for you than leaving them as is.

Hi @chrisnc,
I will close this issue as our current number of submodules means that it is no longer practical to use relative submodules. You can try our suggestions in our earlier post for your specific use case.
Please open a new issue if you have other feature requests or suggestions.
Thank you


Greynoise helper ip address list handling

Background
This PR closes out this ticket: https://app.asana.com/0/1202406151216690/1202661861360317
Changes

I've added ip_addresses which handles the list that ip returns. I've also added some light error handling to prompt the user to switch to the other method.

Testing
These are unit tests associated with the ip_addresses list handling change. This functionality was also tested in the panther console, by creating a detections rule and creating data that looks like what is below. I ran two pieces of code in the Rule Function, and created four test cases.
ip = noise.ip_address('p_any_ip_addresses')
ctx = noise.context('p_any_ip_addresses')
if isinstance(ip, str) and ip == "<IP_ADDRESS>.4" and 'IP' in ctx.keys():
     return True

   ips = noise.ip_addresses('p_any_ip_addresses')
   ctx = noise.context('p_any_ip_addresses')
   if isinstance(ips, ImmutableList) and 'IPs' in ctx.keys():
       return True

I expected that when the ip_addresses passes which returns a list, the string test should return the correct error message and visa versa.

@dashaaa I'm running into an odd issue in the Panther Console. When using ip_address the normal behavior is that the object is a string. Now, when I using ip_addresses the type returned is not a list, instead it is something else for our case let's say it is type object. Despite the type not being list, when I do a comparison between what is returned by ip_addresses and the expected value, it checks out. This is issue doesn't exist in my unit tests.

@rleighton yes, I used panther-analysis-tool to upload my helpers to my running dev instance.

@rmarathay - I spoke with others on the Detections team and we think the right thing to do here is to find a way to do this without introducing a dependency on panther_core. Can we change the checks you're doing to instead just check to see whether it's iterable?
We should be able to implement such a check using something similar to how this example does. Ideally, we don't need to pull in a new library, but if that's the only option we can discuss how we can coordinate that.

this branch is no longer relevant we have a ticket to track what needs to happen here: https://app.asana.com/0/1203249028618692/1202661861360317/f


Feature request: prometheus metrics

It would be very convenient to have at least healthiness metrics exposed so that it was possible to have prometheus alerts for the cases when:

the bouncer cannot connect to api
bouncer cannot start

fixed in https://github.com/crowdsecurity/cs-firewall-bouncer/pull/199


Add nightly test with expanded set of unit test markers and platform matrix

Motivated by #521, we should add a nightly GHA workflow with an expanded set of test markers and platform matrix.
Suggested markers beyond the default:

--experimental --live-corpus
on Py 3.8+ (pytorch-related tests not yet supported on 3.7)

Don't add --expensive mark, as that is known to require more resources than can succeed on GHA runners.
CC: @atolopko-czi

Good suggestion. I'm marking as P1 as the original issue does not replicate on GA. Please feel free to change if you disagree since this seems to be an issue that applies to developers only (i.e. census engineers).

Resolved for now by running experimental tests on all supported GHA job matrix options, which means all except Python 3.7. If unit test run time is too long, we will first address by attempting to reduce test times. If we cannot, then the full test matrix will be moved to a nightly build, per this issue.


[FLINK-26624][Runtime] 1.17 backport  Running HA (hashmap, async) end-to-end test failed on azu

What is the purpose of the change
(Running HA (hashmap, async) end-to-end test failed on azure due to unable to find master logs.)
Brief change log

1.17 backport PR, modify  verify_num_occurences_in_logs.sh, Changed uniq to sort -u

Verifying this change

This change is already covered by existing test.

Does this pull request potentially affect one of the following parts:

Dependencies (does it add or upgrade a dependency): (no)
The public API, i.e., is any changed class annotated with @Public(Evolving): (no)
The serializers: (no)
The runtime per-record code paths (performance sensitive): (no)
Anything that affects deployment or recovery: JobManager (and its components), Checkpointing, Kubernetes/Yarn, ZooKeeper: (no)
The S3 file system connector: (no)

Documentation

Does this pull request introduce a new feature? no)
If yes, how is the feature documented? (not applicable)

I changed uniq to sort -u and the results are shown in the figure below:

Thanks for picking this one up, @victor9309 . Can you provide backports for this issue? 1.18, 1.17 should be good enough.

Thanks @XComp for the review.  I changed the 1.17 and 1.18 branch commit code


[1.4-preview] Crashes client when loading.

RecursiveCraft crashes my client when trying to load it on the 1.4-preview branch.
[01:33:33] [Main Thread/WARN] [tML]: Silently Caught Exception:
System.NullReferenceException: Object reference not set to an instance of an object.
   at RecursiveCraft.RecursiveCraft.UpdateInventoryState() in RecursiveCraft.cs:line 151
   at RecursiveCraft.RecursiveCraft.ApplyKey(orig_Update orig, Main self, GameTime gameTime) in RecursiveCraft.cs:line 158
   at Microsoft.Xna.Framework.Game.Tick() in D:\a\tModLoader\tModLoader\FNA\src\Game.cs:line 543
   at Microsoft.Xna.Framework.Game.RunLoop() in D:\a\tModLoader\tModLoader\FNA\src\Game.cs:line 886
   at Microsoft.Xna.Framework.Game.Run() in D:\a\tModLoader\tModLoader\FNA\src\Game.cs:line 415
   at Terraria.Program.LaunchGame_(Boolean isServer) in tModLoader\Terraria\Program.cs:line 229
   at Terraria.Program.LaunchGame(String[] args, Boolean monoArgs) in tModLoader\Terraria\Program.cs:line 194
   at MonoLaunch.<>c__DisplayClass2_0.<Main>b__0() in tModLoader\Terraria\MonoLaunch.cs:line 60
   at System.Threading.Thread.StartCallback()

[01:33:33] [Main Thread/FATAL] [Terraria]: Main engine crash
System.NullReferenceException: Object reference not set to an instance of an object.
   at RecursiveCraft.RecursiveCraft.UpdateInventoryState() in RecursiveCraft.cs:line 151
   at RecursiveCraft.RecursiveCraft.ApplyKey(orig_Update orig, Main self, GameTime gameTime) in RecursiveCraft.cs:line 158
   at Microsoft.Xna.Framework.Game.Tick() in D:\a\tModLoader\tModLoader\FNA\src\Game.cs:line 543
   at Microsoft.Xna.Framework.Game.RunLoop() in D:\a\tModLoader\tModLoader\FNA\src\Game.cs:line 886
   at Microsoft.Xna.Framework.Game.Run() in D:\a\tModLoader\tModLoader\FNA\src\Game.cs:line 415
   at Terraria.Program.LaunchGame_(Boolean isServer) in tModLoader\Terraria\Program.cs:line 229

client.log
I also tried re-building it myself on preview and that didn't help either.

You have a lot of mods enabled, and with this mod alone I am not affected by this issue
Can you try to reduce the number of mods enabled ? seems like some of the mods like Magic Storage aren't working anymore on preview

Hmm... I tried disabling some of the other mods, and the issue went away, but the interesting part is that I can no longer recreate the crash with the same mod list...


I think I've just successfully found a bug

Please refer to example/zk-found-bug.ether/README.md

Pulled, thanks!


[Bug] Web Interface Issue on mobile

Hi there,
By pure chance was using Mountain on mobile and noticed that clicking triggers select and not open.
So it only works as a top directory browser.
Thank you for making this.
**Edit: Typo on "too"->"top"

Hi there,
By pure chance was using Mountain on mobile and noticed that clicking triggers select and not open. So it only works as a too directory browser.
Thank you for making this.

Hi, what phone are you using?

Ups, my bad, Brave Browser on Android.

Seem like double click is not working on touch, changing drag behavior to fix this.

The latest dev image should fix problem with select, still need more testing :D

Worked! I can now double click to open the folder. Otherwise I needed to change the url on top to change folder every time 😅.
To deselect I'm doing the "Select -> Select none".
Not sure when it started to happen but currently I do not see the current folder indicator (attaching image on edit).

Mobile UI still have a lot of bugs, will improve later 😂

Fixed header menu, breadcrums, control buttons on small screen


#308: Improve BC file formatting

Fixes #308

@veenstrajelmer,
I made an initial setup. Would you please check it out and see if this works for you?
Note that the functionality in this branch, is only functional for INI files (so no polyfiles yet).
I will work on that next, if I have a green light from you.
1. For all INI files it is possible to do the following:
ext_model = ExtModel(filepath="some_file_path.ext")
ext_model.serializer_config.number_of_decimals = 3
ext_model.save()

All float values of the properties will be written with 3 decimals.
2. For all INI files that have a datablock (ForcingModel) it is possible to do the following:
forcing_model = ExtModel(filepath="some_file_path.bc")
forcing_model.serializer_config.number_of_decimals = 3
forcing_model.serializer_config.number_of_decimals_datablock = 2
forcing_model.save()

All float values of the properties will be written with 3 decimals.
All float values inside the datablock will be written with 2 decimals.
3. Additional notes

These settings are by default not set (None).
If these settings or not set, the full original float value will be used.
The setting does not influence the data in the data model; it is only used for serialization.
The current implementation does not have breaking changes.

Note that I have created a separate PR for the rest of the files: #417

I have decided to keep formatting the time columns: I had an initial implementation for it which was small enough, but then I noticed that for example a harmonic forcing has "minutes" as unit of the harmonic component. We might want to create a separate issue for this and think about the design. I believe it is out of scope for now.

@veenstrajelmer, I also did some performance testing with the script that you gave me.
I run the tests for each version 3 times.

To improve the performance further, I will create a separate issue.


Set it up #4

Updated Setup.py

Ok Sir, Thank You
On 12/24/18, Shikhar Johri<EMAIL_ADDRESS>wrote:

Merged #24 into master.
--
You are receiving this because you authored the thread.
Reply to this email directly or view it on GitHub:
https://github.com/johri002/Automatic-leaf-infection-identifier/pull/24#event-2043039023


Change the first day of the week on the clock module calendar?

So right now Sunday is the default first day of the week. Is it possible to change this to Monday?

This depends on your system locale. Check your env var LC_TIME by running the locale command. If it's something like en_US.UTF-8 then you'll have Sunday as first day of the week.
Change your system locale to something that has Monday as first day of the week (like en_GB.UTF-8, de_DE.UTF-8, etc.) then restart Waybar.

Ah, got it. I was wondering why it didn't work, but then realized that I had to uncomment it from /etc/locale.gen and regenerate it. Works properly now, thanks!


Add clustering-visualization

Description
Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change.
Fixes # (issue)
Type of change
Please delete options that are not relevant.

[ ] 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)
[ ] This change requires a documentation update

How has this been tested?
Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration

[ ] local build the book
[ ] review the artifacts from local build
[ ] local build the slides if appliable
[ ] Unit test if appliable

Checklist:

[ ] My code follows the style guidelines of this project
[ ] I have performed a self-review of my own code
[ ] I have commented my code, particularly in hard-to-understand areas
[ ] I have made corresponding changes to the documentation
[ ] My changes generate no new warnings
[ ] I have applied tests that prove my fix is effective or that my feature works
[ ] New and existing unit tests pass locally with my changes
[ ] Any dependent changes have been merged and published in downstream modules

Please delete all text and keep only the visualization demo.
Upload the html and its demos to COS.
Add it to the appropriate section


feat: Crossplane Kubernetes Provider

What does this PR do?
Adds the Crossplane Kubernetes Provider to the crossplane addon.
Motivation
I am intending to use this provider myself. It would be helpful to have it easily toggled as part of the addons.
More

[x] Yes, I have tested the PR using my local account setup (Provide any test evidence report under Additional Notes)
[x] Yes, I have added a new example under examples to support my PR
[ ] Yes, I have created another PR for add-ons under add-ons repo (if applicable)
[x] Yes, I have updated the docs for this feature
[x] Yes, I ran pre-commit run -a with this PR

Note: Not all the PRs require a new example and/or doc page. In general:

Use an existing example when possible to demonstrate a new addons usage
A new docs page under docs/add-ons/* is required for new a new addon

For Moderators

[ ] E2E Test successfully complete before merge?

Additional Notes

@bobdoah thanks or the PR! Please follow community guidelines to open an issue first.
Some minor comments, otherwise looking good to me. There are some CI issues that need to be addressed.
@vara-bonthu can you please review?

I've pinned it at v.0.4.1 and (hopefully) fixed the example issue.


generators: add conditional generators

:heart: Thank you for your contribution!
Description
closes https://github.com/inveniosoftware/invenio-rdm-records/issues/1226
Add general conditional generators for re-usability.
Checklist
Ticks in all boxes and 🟢 on all GitHub actions status checks are required to merge:

[ ] I'm aware of the code of conduct.
[ ] I've created logical separate commits and followed the commit message format.
[ ] I've added relevant test cases.
[ ] I've added relevant documentation.
[ ] I've marked translation strings (for relevant code).
[ ] I've followed the CSS/JS and React guidelines (for relevant code).
[ ] I've followed the web accessibility guidelines (for relevant code).
[ ] I've followed the user interface guidelines (for relevant code).
[ ] I've identified the copyright holder(s) and updated copyright headers for touched files (>15 lines contributions).
[ ] I've NOT included third-party code (copy/pasted source code or new dependencies).

Third-party code
If you've added third-party code (copy/pasted or new dependencies), please reach out to an architect.
Reminder
By using GitHub, you have already agreed to the GitHub’s Terms of Service including that:

You license your contribution under the same terms as the current repository’s license.
You agree that you have the right to license your contribution under the current repository’s license.

We should indeed 👼🏼


Create sending-ethernet-frames.md

Adding a line about possibility of multiple NBLs in a send request.

This seems like a small (but important) contribution, so no Contribution License Agreement is required at this point. We will now review your pull request.
Thanks,
Microsoft Pull Request Bot

Thanks for the PR.  This one is pending a bit of internal investigation, hope to have it up soon

@jtippet Is this accurate?

:shipit:


Add iam open id connect provider

Also fixes #2458

Coverage decreased (-0.1%) to 93.427% when pulling cd8027ce9db403ac2460d8bd1e534a300ae232db on edekadigital:add-iam-open-id-connect-provider into 4dd347e1fee396562ea05e3b497b111508de5dd0 on spulec:master.

Looks great; thank you!


Confidence

Added confidence outputs, fixed subpixelmaxima bug, created some tests relating to the function, and other small fixes.

I should merge it into development branch.


Move check from rpmlint spec parser to spec-cleaner as autofixes

rpmlint spec parser does check for more errors than we do in spec-cleaner, we should mimic the content and directly fix it.

https://github.com/rpm-software-management/rpmlint/blob/master/SpecCheck.py

[ ] comparison-operator-in-deptoken
[ ] non-break-space
[ ] make-check-outside-check-section
[ ] rpm-buildroot-usage
[ ] setup-not-in-prep
[ ] buildprereq-use
[ ] broken-syntax-in-scriptlet-requires
[ ] buildarch-instead-of-exclusivearch-tag
[ ] deprecated-grep
[ ] non-utf8-spec-file

Make check is pointless - even borked on the rpmlint side
Setup not in prep - even tho it works I tried it on all specs we have in distro and it was not done..

rpm buildroot usage is out as osc does not allow shorted builds


[WIP] Add NPM package set generated by node2nix

Motivation for this change
The node-packages set is horribly broken and does not work properly with newer versions of Node.js 5.x/npm 3.x and onwards. This pull request is a WIP replacing the package set with expressions generated by node2nix that has better support for newer npm versions (and still retains compatibility with npm 2.x).
How to use the generated packages by node2nix
Installing a NPM package for node.js 4.x:
$ nix-env -f all-packages.nix -iA npmPackages_4_x.grunt-cli

Installing a NPM package for node.js 5.x:
$ nix-env -f all-packages.nix -iA npmPackages_5_x.grunt-cli

The old npm2nix infrastructure is still in place, so both versions can be used.
This patchset is meant for the release-16.03 branch. If we want to apply this to master, we need to use an updated version of node2nix that computes that output hashes of the git repositories in a different way.
How to generate/update packages?
The files live in pkgs/development/node-packages. See the README file in the corresponding folder for more instructions. They should be straight forward.
You need to have node2nix installed first: https://github.com/svanderburg/node2nix
Things done

[x] Tested using sandboxing
(nix.useChroot on NixOS,
or option build-use-chroot in nix.conf
on non-NixOS)
Built on platform(s)

[x] NixOS
[x] OS X
[x] Linux

[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nox --run "nox-review wip"
[ ] Tested execution of all binary files (usually in ./result/bin/)
[ ] Fits CONTRIBUTING.md.

Both great and terrible, at the same time, thanks 😄
From here:

[09:18:25]  in fact, we basically can't afford another haskellPackages

See also https://github.com/NixOS/nix/issues/954.
As much as I love these autogenerated package sets, if every few weeks we get another >50000-line diff, usability of this repo will be hosed forever unless we decide to rewrite history once we solve the IFD issue. I don't know what to do, but I'd suggest we look pretty hard at whether there are better solutions than ginormous periodic autogenerated commits to nixpkgs. Ping @edolstra @obadz @peti etc.

We could fix this by improving import from derivation, like I did in #31. We could fix this by adding recursive nix, like I did in #213. We could fix this by allowing fetchTarball to work in restricted mode, like I suggested in the comments of #16130. The work has already been done, we just need @edolstra to sign off on one of these.

I'm not sure allowing fetchTarball in restricted mode is enough to really fix this, but it would definitely improve the situation over what we have today (and allow us to keep these giant commits elsewhere).

I'm afraid that for NPM packages, we have to cope with the fact that they are big.
In theory, I could split the generated expression from the node-packages.json file into multiple files, but the dependencies that each package requires need to be composed separately for each individual package (thanks to some awesome (not!) design decisions in npm), still making each file quite big. :-(
Also, splitting the expression into multiple files, probably means more redundant data for each of them.

Oops, forgot what repo we were in. Yes, NixOS/nix#52 or NixOS/nix#213 could fix this. Allowing fetchTarball in restricted mode would work as well, as we can then fetch the repo containing the npm packages (either the latest or a fixed rev).

(that's not as good as the other two solutions, as it requires something to regularly update the other repo, but it's also quicker)

@svanderburg not saying they don't need to be big; saying they shouldn't have to be in nixpkgs. The expressions are generated by some automated process, and Nix is great at managing automated processes that produce outputs (i.e., all our thousands of packages and builds), except when the outputs need to be consumed by Nix itself 😄
Basically, if I understand correctly, the 50000+ lines in this commit diff are the result of running a much much smaller script over some external (possibly untracked right now) state. My ideal would be to minimize the NPM expression by teaching Nix how to produce it, and then using the standard caching mechanism to avoid getting everyone to produce it every time. If you want to sound really nerdy, let's do our best to get closer to the actual Kolmogorov complexity of these 56464 lines of diff.
@shlevy yeah, I get it; it would be a great first step to support fetchTarball but ideally, I'd rather we not be making automated commits to other repos either and just represent the process explicitly. It seems fine to do this in smaller steps though.

I would have preferred if this PR had replaced npm2nix instead of being introduced as node2nix. After all npm2nix does indeed need to be replaced and this way I feel it might just take even longer until this happens.  Also new users will find a lot of references to npm2nix but nothing about node2nix
I am also undecided about having the generated packages. I'm afraid that if there isn't at least a concept for some automatic updates then these generated expressions will soon be as entirely outdated as those we currently have in nixpkgs which were created by npm2nix.

@gilligan Removing the old npm2nix generated package set isn't terribly difficult, but at the same time I don't want to overrush things.
What is our point of view regarding PRs that include generated Nix expressions? Should we from now on exclude generated packages from Nixpkgs altogether and store them elsewhere? As far as I know: in Nixpkgs, the fetch-bower function needs the fetch-bower NPM package to be available.
In NPM's case, managing a set of packages outside Nixpkgs is quite simple and something I have been doing for quite a while.

So far I observed two "negative observations". One is of them is that we now have two generated package sets that may be confusing to end-users. This problem will go away very quickly once I gathered enough feedback on the stability of my generated package set.
Gathering feedback is the main objective of this PR -- I wanted to show what the expressions generated by node2nix look like in Nixpkgs and how to "properly" package the the right set of NPM packages (that is: only end-user packages, and no libraries).
The other is a fundamental issue that applies to any generated package set. I'm not sure if this concern is a showstopper at the moment. I'm also very interested in seeing a more powerful/flexible solution making it possible to alleviate these issues, but currently none of them seem to be close for inclusion in Nix.

Due to lack of spare time, I was absent for a while in this discussion. I'm not sure if the complexity/size of the generated expressions is a showstopper, but if nobody objects, I'm planning to integrate this very soon in the upstream Nixpkgs.
For the people that are worried about the confusion of the availability of npm2nix: At the moment, the most important thing for me is to provide a practical solution (that covers my own use cases as well as a few other Nix users that I know) rather than imposing a specific solution to everybody.
We can also consider npm2nix to be "deprecated" and display a message when somebody tries to install a package from the attribute set generated by it. We can easily do this, by adding the following line to pkgs/top-level/node-package.nix:
builtins.trace "nodePackages are deprecated. Please consider using npmPackages"

This will encourage people to switch, but it does not force them. This warning will give people some space to actually make the transition.

Today, I have been trying to implement the proposed integration pattern described in this pull request.
Unfortunately, I noticed that npm2nix again does not work for neither the master branch nor the release-16.03 branch.
Although I can spend some time in trying to fix it, I think it is not really worth the effort.
So my question is: if I would remove npm2nix's stuff altogether and replace it by node2nix's generated packages (with the library packages removed). Would anyone object?

@svanderburg as for me I advocated for replacing npm2nix with your rewrite from the get go anyway so I am 👍 on you going forward with this.

I just updated my branch (that tracks release-16.03) to remove all the old npm2nix-related stuff and replace it by expressions generated by node2nix. Unfortunately, the sad story is that the costs of doing these generations (with node2nix) are quite expensive. Maybe a bit too expensive after what I learned by doing it a couple of times. :(
First, the time to generate these expressions (despite restricting the packages to end-user software only), takes a ridiculous amount of time. On my machine, it took about 30 minutes. Second, the code churn is huge (e.g. 50K+ lines of code change per package set).
While it is possible to proceed integrating this branch and getting rid of the broken npm2nix generated expressions, I'm slowly starting to doubt the usefulness of this planned approach and I have been thinking about something new.
Maybe it's better to restrict the set of NPM packages in Nixpkgs to the bare essentials -- node2nix and NPM packages that are in use by non-NPM projects only. For the remainder of the NPM packages, we should instruct end-users how to package them with node2nix.
I think is step is quite controversial, as some people were used to the fact that Nixpkgs offers them, which is no longer the case with the new proposed approach.
Second, if we would proceed, then the documentation becomes more important. We should clearly explain end-users what the preferred approach is. Moreover, IMO the biggest challenge is to get NPM packages packaged in Nix is that some have non-NPM dependencies. These expressions cannot be fully auto-generated and have to be augmented, something that is very confusing for people having only little hands-on experience with Nix.
I think most of you may probably agree in restricting the amount of NPM packages, but I can imagine that for some people this will be difficult to accept. Accurately mimicking NPM the Nix-way is very complicated and offering the same kinds of facilities we did earlier is simply too expensive.
What do you think?

Here's what I think about this (at least for Nixpkgs).
Disclaimer: I've only recently started using NPM, so if I made any assumptions here about NPM that are not true or overlooked some fundamental problem with NPM, please correct me!
Only package applications
The only thing that nixpkgs needs to make sure is that it is easy to package npm applications. The reason for this is that packaging libraries as nix derivations goes against what NPM itself offers: NPM has no concept an installed library, the only concept it has is "mirror all libraries into the current application and build them together", so I think nixpkgs should follow that same approach here.
Generate nix derivations from npm-shrinkwrap.json files
If we adopt the approach that we only want to node applications in nixpkgs, then we can rely on npm's dependency solver to resolve dependencies. We simply require that for each node application that we package in nixpkgs, there is a npm-shrinkwrap.json file.
If we have a npm-shrinkwrap.json file, that should mean that all dependencies are exactly nailed down, so we can write a derivation to fetch all dependencies of a npm package (this derivation does not even need to be generated, i think it could be written generically) and builds a npm cache directory by using npm cache add. The output of this derivation is the contents of the cache, and because our dependencies are fixed, this should have a fixed hash, so we can access network in this derivation.
In the derivation for the package, we then simply instruct npm to use the cache that we previously generated and run npm install. All native dependencies can be added to buildInputs to this derivation, as usual.
Developing node applications
With this approach, you can also easily develop node applications, since you just use npm install for that. Because native dependencies are buildInputs of the derivation for the application, they should also just work if you use nix-shell.

@svanderburg Forcing end-users to package npm projects themselves seems like it would make NixOS service modules for npm projects such as #17213 awkward.
It's a relief to see this stuff getting attention.

Would be wonderful if we can get this done until tomorrow :D Currently node packages are really broken.

i am in full support of reducing prepackaged npm modules packaged in nix to a bare minimum. The packages have always been out of date anyway. I think having an improved tooling for handling npm packaging is more important than having a wide range of prepackaged npm packages. Also from what I can tell the userbase for those seems very small.

Hi guys, since I got asked on IRC I thought I'd chime in here. At my company we have been using nix to build NPM packages for the last 6 months or so. However, npm2nix did not fit our needs for several reasons. I developed a tool nixfromnpm that does the same functions but with a number of improvements (see the readme for details). In addition, I maintain a very large set (2075 at current count) of node packages in this repo. I haven't spent a lot of time spreading the word about this repo or tool, but I would be happy to contribute the work I've done to addressing some of the issues here.

@copumpkin you wrote

As much as I love these autogenerated package sets, if every few weeks/days we get another >50000-line diff, usability of this repo will be hosed forever unless we decide to rewrite history once we solve the IFD issue. I don't know what to do, but I'd suggest we look pretty hard at whether there are better solutions than ginormous periodic autogenerated commits to nixpkgs.

I'd just point out that the above issues are some of the prime reasons why I wrote nixfromnpm...

hi @adnelson - thank you for chiming in.

I'd just point out that the above issues are some of the prime reasons why I wrote nixfromnpm...
How long does it take nixfromnpm to parse the node packages currently provided by nix?

I have tried nixfromnpm in the past and there are indeed a couple of benefits that it provides. First and foremost the ability to do incremental builds are great. Also nix-node-packages is great.
That being said I had some issues when I tried to nixify all dependencies of our (quite large) nodejs project. Since it has been a while I could try that again though. I also wish nixfromnpm would use npm3 with flattened dependencies by default.
Either way nixfromnpm is a great project. If we are to consider it as an alternative replacement to npm2nix instead of node2nix what would the implications of that be?

The speed issues were fixed by not checking for circular dependencies (there are only a tiny number of packages which have these issues, and I included docs on how to address these). Certainly there are remaining issues, especially with semver range resolution, and if you try to nixify a large project from scratch you'll probably run into at least one of them. But most could probably be addressed just by having more community involvement. Features like flattened dependencies, easier/better npm3 usage, etc would all be great to have for sure.
I'm not sure what the implications would be. We might for example merge nix-node-packages into nixpkgs and subsequent updates would happen as pull requests to that repo. Alternatively, nix-node-packages could be made a submodule of nixpkgs -- submodules are an approach my company uses a lot (in fact we have one for nixpkgs) but come with a cost of increased complexity and harder diffs.

I must admit that I have not tried nixfromnpm, so I don't know a lot about its capabilities.
From what I read, I noticed that it seems to make some trade-offs to make things faster (e.g. ignoring cyclic dependencies)
What I can say about node2nix is that I'm trying to simulate npm's behaviour as accurately as possible. Compatibility is one of the reasons I have started it, because it is highly desired by the people I work with. Many of them use npm without Nix and don't want to make tradeoffs in supporting Nix. As a matter of fact: some of them say that if it's not compatible with npm, they refuse to use any Nix-based solution.
Naturally, accurate compatibility comes at a price, such as not being able to share library dependencies among packages (as a sidenote: this is also not something the vanilla npm supports). This also results in a generation process that is slower than npm2nix. Moreover the expressions generated by node2nix are quite big.
Moreover, node2nix can also be optimised in certain areas to make regeneration less expensive -- I simply have to find more time to implement these optimisations. :)
The changes in this pull request should work fine. Its only disadvantage are the costs, i.e. the time to regenerate packages and the size of the generated expressions. Furthermore, we have to generate two expression sets: one that simulates npm 2.x's behaviour and one the simulates npm 3.x's flat module behaviour, because dependencies are organized in a completely different way.
This pull request is tracking the last stable branch 16.03, because the master/16.09-branch has a backward-incompatible change in the fetchgit{} function computing different output hashes of git checkouts.
I can easily fix node2nix to compute git hashes that are compatible with master and integrate this package set into master.
If we are willing to accept the costs that come with regeneration, then I think there is nothing holding us back integrating this patch set into master. The backwards-incompatibility with fetchgit and the costs of regeneration are the two reasons why I haven't proceeded integrating this change set sooner. :(

Meanwhile, I have created a branch of node2nix that fixes the fetchgit problem (but makes this node2nix branch incompatible with the Nixpkgs 16.03 branch):
https://github.com/svanderburg/node2nix/tree/fetchgit_fix
Corresponding node2nix issue:
https://github.com/svanderburg/node2nix/issues/7

Tomorrow, I will generate set of NPM packages with the modified node2nix tracking the master (future 16.09) branch. If nobody objects, it can integrated in a straight forward manner.

@svanderburg I'm not sure what you mean by "if it's not compatible with npm, they refuse to use any Nix-based solution." What does it mean for a solution to be "compatible with npm"? It's still a different tool at the end of the day. The buildNodePackage function that nix-node-packages uses still uses npm under the hood (in fact it's adapted from the buildNodePackage function which I believe you wrote, although quite heavily modified by now).
nixfromnpm doesn't automatically account for circularity, but with over 2000 packages that I have defined so far, only four of them are circular. I'm sure there are more examples out there, but I don't think it's at all a dealbreaker for making a solution that works.
I'm not going to jump in and oppose this per se (I only recently was made aware of it after all), but seeing as you said

I'm also very interested in seeing a more powerful/flexible solution making it possible to alleviate these issues, but currently none of them seem to be close for inclusion in Nix.

and seeing as there is such a solution, or at least something close to it...

In addition to accuracy and performance: how does nixfromnpm deal with npm 3.x's flat module installations? I also think it's desired to support newer versions of Node.js/NPM?

Tomorrow, I will generate set of NPM packages with the modified node2nix tracking the master (future 16.09) branch. If nobody objects, it can integrated in a straight forward manner.

What's the workflow look like for adding or updating a package that uses npm packages (but isn't necessarily itself listed on npm)? I'd really like to be able to get things like #17213 in.

@Ralith i'm afraid that this PR won't really change anything about the problems of #17213 - @svanderburg will correct me if I am wrong I guess.
I think the whole issue does yet again condense into the problem of including huge nix expression sets in nixpkgs - Just like for example for Haskell or other languages. @adnelson maintains nix-node-packages which I think provides great value. It would be nice to have an equivalent collection for use with node2nix but like I kept on mentioning the previously npm2nix generated set of npm packages including various libraries was utterly outdated and mostly broken.
For that reason I am in favour of reducing the amount of maintained npm packages to a minimum - however that does of course mean that if you want to include some tool with a lot of dependencies like in #17213 you end up with a huge chunk of generated nix expressions...
I don't know what the best way forward is for that ...

@Ralith If the package is a development project, then you should use node2nix directly on the package.json file of the development project.
For experimentation purposes with unstable/unreleased versions of NPM packages, you can also compose your own pkgs.json file (that defines an array of NPM dependency specifiers) referring (for example) to a git repository. You can use node2nix to generate an expression set and use Nix to directly deploy from the generated expressions, e.g.:
node2nix -i mypkgs.nix
nix-env -f default.nix -iA mypackage

I have created another pull request, that can be applied to the master branch: https://github.com/NixOS/nixpkgs/pull/18151
I think discussion should resume in the corresponding thread.

Despite the fact that we run npm inside a derivation, npm2nix (and node2nix) bypass its dependency management system. Instead, we "simulate" npm's dependency management ourselves (using Nix's features) and we run npm in the end to perform validation + running the build scripts that may have been included in an NPM package.

Yes, that's the same with nixfromnpm.

That may be true. In our case, however, all our private projects have dependencies on packages having circular dependencies.

I think circular dependency detection/solving is important because as you mention it's supported by npm. However, although nixfromnpm doesn't currently support it, it wouldn't be a huge challenge to do so. Due to it being a one-man project, and since as I said circularity "in the wild" is rare, I haven't spent the time tom implement this. But there's already a somewhat well-defined algorithm for solving circularity in cases where it occurs, and nixfromnpm can already detect circularity (to prevent infinite loops), so it is certainly feasible to support circularity solving in nixfromnpm. Of course, I realize that "it could support it with some work" is not the same as "it already supports it" :wink:

Well, I'm just trying to figure out what we want. node2nix is obviously not perfect, as it is (for example) expensive because it tries to be accurate, whereas your solution is probably faster but makes trade-offs in accuracy.

I might be misunderstanding but I don't think that it makes any trade-offs in accuracy.

I'm closing, because 16.09 branch is going to get created very soon. Instead, go to #18151, for further discussion, since this tracks the master branch.


Update README.md contribution guidelines

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Comparison is base (9850fb4) 86.28% compared to head (da257e7) 86.13%.

:exclamation: Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@            Coverage Diff             @@
##             main      #91      +/-   ##
==========================================
- Coverage   86.28%   86.13%   -0.16%
==========================================
  Files          27       27
  Lines        1269     1269
==========================================
- Hits         1095     1093       -2
- Misses        174      176       +2

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


Machine Learning Samples Issue

Section link1

Reason:
'inputs' is not defined
Suggestion:
Update code to
inputs={"uri":"sample_uri","data_asset":"sample_data_asset","local_data":"sample_local_data"}

Section link1

Reason:
MLClient.init() got multiple values for argument 'credential'
Suggestion:
Update code to
ml_client = MLClient(
            DefaultAzureCredential(authority=AzureAuthorityHosts.AZURE_CHINA),
            subscription_id,
            resource_group,
            workspace,
            **kwargs
        )

Section link1

Reason:
MLClient.init() got multiple values for argument 'credential'
Suggestion:
Update code to
workspace = <Machine Learning Workspace>
ml_client = MLClient(DefaultAzureCredential(),subscription_id,resource_group, workspace)

Section link1

Reason:
Unable to import 'command' package correctly
Suggestion:
Update code to
from azure.ai.ml.entities import AmlTokenConfiguration
from azure.ai.ml import command

@rohit-ganguly  @lmazuel @mayurid @shutchings for notification.

@jerryshia - thanks for making the issue. A fix for this is already underway. Our samples testing was disabled and I'm working through re-enabling it and getting all of them working properly.

fixed https://github.com/Azure/azure-sdk-for-python/pull/31907


Hub/Calendar/Contacts links not keyboard-accessible

Hello, blind screen reader user here. Thanks for Patchfox. Tried it out a while back, but having to reload the source folder as an extension was a blocker.
I notice that the links to the hub, composition screen, etc. can't be triggered by Enter. I can tab between them just fine, but nothing I do seems to make them appear.
If I tab to Compose, there does appear to be a Post item that I can activate via Enter, but that's about it.
Just skimmed your code. Maybe the global menu just needs a keydown handler for Enter on the links?
Thanks again.

@ndarilek thanks a lot for raising this issue. I'll try to improve the accessibility of patchfox, in the meanwhile, I suspect you might be better served by using Oasis which has many advantages over Patchfox for your use case. First, it doesn't use any client-side Javascript, so from the screen reader point of view it should be just simple, well structured HTML. Because of that, all the keyboard triggers should work as well.

I'm trying to fix that but apparently macOS makes it's own accessibility decision on what should be focusable. At the moment I'm a bit out of my depth. I'm trying to improve accessibility on Patchfox but I can't commit for a date to have this working correctly, mostly because it involves me learning what to do.
The recommendation above, Oasis, should work much better and I think it is a better option than Patchfox for users browsing through screen readers.
I just pushed a commit with some changes to the globalMenu package that should improve accessibility. I follow the instructions about it from MDN. I don't think it is working since I can't focus on them using the keyboard. I've learned that macOS has some accessibility quirks and will not allow all controls to be focused with a keyboard by default.
If you have the repository cloned over there, a pull and rebuild should get you working with the improved menu. I'd be keen to learn if it is working better.
My recommendation to use Oasis stands though, I rather have screen reader users switch to a product better suited to their uses than have them have a poor experience with Patchfox while I sort this out.

I received no feedback on this after the comments, so I'm closing it.
I'm taking care to improve accessibility in Patchfox, but I still believe that screen-reader users would be better used by Oasis.


How to do programmatic authentication with Dex?

@yanniszark @krishnadurai How do folks do programmatic authentication using DEX?
Here's the use case; suppose you are running code outside the cluster and you want to programmatically access a service running inside the cluster e.g.

Talk to the KFP API Server to submit a pipeline
Send an inference request to a model end point

My expectation would be that the client code can obtain a credential and add it as  an Auth Header in order to pass the AuthZ check performed at the ISTIO ingress-gateway.
For reference we follow this pattern on GCP.
Here are the instructions for doing programmatic authentication with IAP
https://cloud.google.com/iap/docs/authentication-howto
And for example here's the code in the KFP SDK for doing auth using IAP.
https://github.com/kubeflow/pipelines/blob/9ad7d7dd9776ce75a83712f5723db2ef93ba5c26/sdk/python/kfp/_auth.py#L41
@animeshsingh @jinchihe We might want to think about building a Kubeflow Auth library as part of a Kubeflow SDK so that each application (KFP, KFServing, etc...) doesn't have to implement it themselves.

@jlewi @yanniszark Here's an approach:
Using Dex's Cross-client trust and authorized party to generate tokens for the SDK from oidc-authservice app.

User logs into oidc-authservice, and has a separate UI page to generate a token for the SDK client, possibly embedded in kubeflow.
If a user chooses to generate a token in oidc-authservice, create a new OAuth client for the SDK client through the oidc-authservice backend. This can be done by using dex's grpc client with 'oidc-authservice' added to its trusted peers.
Further, using this information about the SDK client, a new token for the SDK client can be issued with 'oidc-authservice' in its audience.

Haven't tested this approach yet.

Yeah it's more complex than you'd expect as dex doesn't support the password grant flow. We've only been able to do it in flows that include the browser.

FWIW, argocd uses dex and lets you login just from the CLI. But I believe it's doing that by actually running a browser in the background.

@jlewi If IAP supports programmatic authentication, that means KFServing can use same istio ingress gateway.  kfserving-ingressgateway without auth for IAP is not for authentication purpose but only knative probe issue?

@Jeffwan  I don't know the answer to that question; I had have to defer to the kfserving folks.

I'm having issues with programatically authenticating using dex for an on-prem install. Is there any progress on this or some standard way of authenticating using dex?

Running into this issue as well, which is unfortunately preventing us from upgrading to 1.1.

@rafaelbarreto87 For our purposes, this was solved. See:
https://github.com/kubeflow/kubeflow/issues/5345

@rafaelbarreto87 For our purposes, this was solved. See:
kubeflow/kubeflow#5345

@ConverJens Thanks a lot! This solves for some of our use cases as well (i.e. deploying pipelines from shell)! Really appreciated.
Unfortunately, I think it would be great to have a more permanent and general solution for this (e.g. OAuth2) because some processes are not interactive and this method depend on the UI, which is something that could easily change. Either way, it's a workable solution for now, so thanks a lot again!

I agree

@rafaelbarreto87 For our purposes, this was solved. See:
kubeflow/kubeflow#5345

@ConverJens Thanks a lot! This solves for some of our use cases as well (i.e. deploying pipelines from shell)! Really appreciated.

@rafaelbarreto87 Happy to help!

Unfortunately, I think it would be great to have a more permanent and general solution for this (e.g. OAuth2) because some processes are not interactive and this method depend on the UI, which is something that could easily change. Either way, it's a workable solution for now, so thanks a lot again!

I agree. A more stable solution in necessary for the long term!

Here is a workaround to authenticate for kfp.Client() in Python:
import requests
import kfp

HOST = "http://localhost:8080/"
USERNAME =<EMAIL_ADDRESS>PASSWORD = "12341234"
NAMESPACE = "your-kf-ui-namespace"

session = requests.Session()
response = session.get(HOST)

headers = {
    "Content-Type": "application/x-www-form-urlencoded",
}

data = {"login": USERNAME, "password": PASSWORD}
session.post(response.url, headers=headers, data=data)
session_cookie = session.cookies.get_dict()["authservice_session"]

client = kfp.Client(
    host=f"{HOST}/pipeline",
    cookies=f"authservice_session={session_cookie}",
    namespace=NAMESPACE,
)

print(client.list_pipelines())

/cc @yanniszark @cventes

I have installed Kubeflow on EKS. I am having a Issue here. I want the yaml file to run using Kubeflow pipelines API. Ideally this commands uploads pipeline yaml file to dashbord. But due to Dex authentication I am not able to run it on specified address on SVC.
SVC=1234.amazonaws.com
PIPELINE_ID=$(curl -F<EMAIL_ADDRESS>${SVC}/apis/v1beta1/pipelines/upload | jq -r .id)

Where:
kubectl get ingress -n istio-system
NAME            HOSTS   ADDRESS                                                                  PORTS   AGE
istio-ingress   *      1234.amazonaws.com   80      18m

Please tell me what SVC should i give to make pipeline upload ?

@yanp Thanks for this snippet. I've tested it, but I cannot get it to work yet. As I am using kfp from a remote client, I set kubectl edit svc authservice -n istio-system to NodePort on 30080. Thus I am able to reach the Pod, but no cookies are fetched (assuming NAMESPACE = 'kubeflow' for default installation).
Any ideas what I am doing wrong?

http://ki-server3:30080/

Hi @tomalbrecht, were you able to authenticate the Web UI on browser using url http://ki-server3:30080/ and USERNAME/PASSWORD above?

@yanp
Well, no. Not with USERNAME /PASSWORD. Port 30080 points to istio-system/authservice. When opening http://ki-server3:30080/ I get  OKas an result. While opening https://ki-server3:31390 will point to dex and will ask for PASSWORD/USERNAME.
kubectl get svc -A | grep 8080
istio-system           authservice                                    NodePort       <IP_ADDRESS>   <none>        8080:30080/TCP                                                                                6d12h

But this pointed me to the right direction. Thank you. I have to use the service istio-system/dex for authentication (https://ki-server3:31390/in my setup).
Now at least I get the cookie, but struggling with SSL certification in kfp.Client connecting from client -> server.
Traceback (most recent call last):
  File "/Users/tom/workspaces/ws-trevisto/stack/tests/wip_pipeline.py", line 144, in <module>
    print(client.list_pipelines())
  File "/Users/tom/miniconda3/lib/python3.7/site-packages/kfp/_client.py", line 458, in list_pipelines
    return self._pipelines_api.list_pipelines(page_token=page_token, page_size=page_size, sort_by=sort_by)
  File "/Users/tom/miniconda3/lib/python3.7/site-packages/kfp_server_api/api/pipeline_service_api.py", line 1222, in list_pipelines
    return self.list_pipelines_with_http_info(**kwargs)  # noqa: E501
  File "/Users/tom/miniconda3/lib/python3.7/site-packages/kfp_server_api/api/pipeline_service_api.py", line 1327, in list_pipelines_with_http_info
    collection_formats=collection_formats)
  File "/Users/tom/miniconda3/lib/python3.7/site-packages/kfp_server_api/api_client.py", line 383, in call_api
    _preload_content, _request_timeout, _host)
  File "/Users/tom/miniconda3/lib/python3.7/site-packages/kfp_server_api/api_client.py", line 199, in __call_api
    _request_timeout=_request_timeout)
  File "/Users/tom/miniconda3/lib/python3.7/site-packages/kfp_server_api/api_client.py", line 407, in request
    headers=headers)
  File "/Users/tom/miniconda3/lib/python3.7/site-packages/kfp_server_api/rest.py", line 248, in GET
    query_params=query_params)
  File "/Users/tom/miniconda3/lib/python3.7/site-packages/kfp_server_api/rest.py", line 226, in request
    headers=headers)
  File "/Users/tom/miniconda3/lib/python3.7/site-packages/urllib3/request.py", line 76, in request
    method, url, fields=fields, headers=headers, **urlopen_kw
  File "/Users/tom/miniconda3/lib/python3.7/site-packages/urllib3/request.py", line 97, in request_encode_url
    return self.urlopen(method, url, **extra_kw)
  File "/Users/tom/miniconda3/lib/python3.7/site-packages/urllib3/poolmanager.py", line 330, in urlopen
    response = conn.urlopen(method, u.request_uri, **kw)
  File "/Users/tom/miniconda3/lib/python3.7/site-packages/urllib3/connectionpool.py", line 760, in urlopen
    **response_kw
  File "/Users/tom/miniconda3/lib/python3.7/site-packages/urllib3/connectionpool.py", line 760, in urlopen
    **response_kw
  File "/Users/tom/miniconda3/lib/python3.7/site-packages/urllib3/connectionpool.py", line 760, in urlopen
    **response_kw
  File "/Users/tom/miniconda3/lib/python3.7/site-packages/urllib3/connectionpool.py", line 720, in urlopen
    method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2]
  File "/Users/tom/miniconda3/lib/python3.7/site-packages/urllib3/util/retry.py", line 436, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='ki-server3', port=31390): Max retries exceeded with url: //pipeline/apis/v1beta1/pipelines?page_token=&page_size=10&sort_by= (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')])")))

Seems to be related to https://github.com/kubeflow/pipelines/issues/3095

@tomalbrecht I'm not sure about the ssl issue, but I had my port point to svc/istio-ingressgateway instead of  dex, following the doc: https://www.kubeflow.org/docs/started/k8s/kfctl-istio-dex/#accessing-kubeflow Hope it helps!

@yanp My fault. Port 31390 refers to svc/istio-ingressgateway and will forward to dex.
Did you change your gateway specs to use httpsRedirect: https://www.kubeflow.org/docs/started/k8s/kfctl-istio-dex/#secure-with-https?

@tomalbrecht No I didn’t do any customization. I’d recommend asking for more help on the slack channel https://www.kubeflow.org/docs/about/community/#slack-community-and-channels

@tomalbrecht BTW namespace for client should be the one showing up on web UI, not necessarily kubeflow

For the records. Using http instead of ssl does work as a workaround on my microk8s manifest installation.
httpsRedirect has to be disabled:
kubectl edit -n kubeflow gateways.networking.istio.io kubeflow-gateway
# set spec.hosts.tls.httpsRedirect: false

Then, the following code will work for me.
USERNAME =<EMAIL_ADDRESS>PASSWORD = "12341234"
NAMESPACE = "admin"
HOST = 'http://ki-server3:31380/'

session = requests.Session()
response = session.get(HOST)

headers = {
    "Content-Type": "application/x-www-form-urlencoded",
}

data = {"login": USERNAME, "password": PASSWORD}
session.post(response.url, headers=headers, data=data)
print(session.cookies.get_dict())
session_cookie = session.cookies.get_dict()["authservice_session"]

print(session_cookie)

client = kfp.Client(
    host=f"{HOST}/pipeline",
    cookies=f"authservice_session={session_cookie}",
    namespace=NAMESPACE
)

print(client.list_pipelines())

Thanks for your help @yanp

All of these solutions are very helpful and work, but any recommendations on how to do this in the reverse? Meaning once we have a cookie generated, is there anyway to validate that it is a valid cookie? For multi-user I am able to do this for a specific user but not a blanket user.

All of these solutions are very helpful and work, but any recommendations on how to do this in the reverse? Meaning once we have a cookie generated, is there anyway to validate that it is a valid cookie? For multi-user I am able to do this for a specific user but not a blanket user.

+1 for all the helpful solutions to auth, thank you.
Any recommendations on how to do this in the reverse? Meaning once we have a cookie generated, is there anyway to validate that it is a valid cookie? For multi-user KfP I am able to verify this but only for a specific user or namespace, and am looking for a way to verify a cookie.

+1 for all the helpful solutions to auth, thank you.
Any recommendations on how to do this in the reverse? Meaning once we have a cookie generated, is there anyway to validate that it is a valid cookie? For multi-user KfP I am able to verify this but only for a specific user or namespace, and am looking for a way to verify a cookie.

I was able to authenticate following this flow. Not sure if it's the correct path but it worked for me using this installation https://www.kubeflow.org/docs/started/k8s/kfctl-existing-arrikto/#add-static-users-for-basic-auth.
0) curl -v http://$SERVICE:$PORT
Response:
>> Found.

STATE=STATE_VALUE

1) curl -v "http://$SERVICE:$PORT/dex/auth?client_id=kubeflow-oidc-authservice&redirect_uri=%2Flogin%2Foidc&response_type=code&scope=profile+email+groups+openid&state=$STATE_VALUE"
Response:
>> Found

REQ=REQ_VALUE
2) curl -v 'http://$SERVICE:$PORT/dex/auth/local?req=REQ_VALUE' -H 'Content-Type: application/x-www-form-urlencoded' --data 'login=admin%40kubeflow.org&password=12341234'

3) curl -v 'http://$SERVICE:$PORT/dex/approval?req=$REQ_VALUE'

Response:
>> See Other.

CODE=CODE_VALUE

4) curl -v 'http://$SERVICE:$PORT/login/oidc?code=$CODE_VALUE&state=$STATE_VALUE'

Response:
>> set cookie authservice_session=SESSION

curl -v 'http://$SERVICE:$PORT/pipeline/apis/v1beta1/pipelines' -H 'Cookie: authservice_session=SESSION'

Response:
>> 200 OK { ... }

Thanks @maurogonzalez  for saving my day. this worked perfectly with my local kubeflow + dex in wsl2
converted into a nice little function to extract SESSION in my curl calls:
If your endpoint is not localhost:8080 you can call the function with host and port args.
dex_session () {         if [ $# -eq 0 ]; then HOST="localhost"; PORT="8080"; else HOST="$1"; PORT="$2";fi         STATE=$(curl -s http://${HOST}:${PORT} | grep -oP '(?<=state=)[^ ]*"' | cut -d \" -f1)         REQ=$(curl -s "http://${HOST}:${PORT}/dex/auth?client_id=kubeflow-oidc-authservice&redirect_uri=%2Flogin%2Foidc&response_type=code&scope=profile+email+groups+openid&state=$STATE" | grep -oP '(?<=req=)\w+')         curl -s "http://${HOST}:${PORT}/dex/auth/local?req=$REQ" -H 'Content-Type: application/x-www-form-urlencoded' --data 'login=admin%40kubeflow.org&password=12341234'         CODE=$(curl -s "http://${HOST}:${PORT}/dex/approval?req=$REQ" | grep -oP '(?<=code=)\w+')         curl -s --cookie-jar - "http://${HOST}:${PORT}/login/oidc?code=$CODE&state=$STATE" > .dex_session         echo $(cat .dex_session | grep 'authservice_session' | awk '{print $NF}') }

Here's something that I came up with:
import logging
import os

import requests
from urllib.parse import parse_qs

host = 'https://your.inference.service'

def get_auth_session_token(host):
    response = requests.get(host, verify=False, allow_redirects=False)
    location = response.headers['location']

    state = parse_qs(location)['state'][0]

    location_prefix, _ = location.split('state=')
    location = location_prefix + f'state={state}'
    url = host + location

    response = requests.get(url, verify=False, allow_redirects=False)
    location = response.headers['location']
    req_value = location.split('=')[1]

    with requests.Session() as s:
        data = {
            'login': os.getenv('KUBEFLOW_USERNAME', 'EMAIL-GOES-HERE'),
            'password': os.getenv('KUBEFLOW_PASSWORD', 'PASSWORD-GOES-HERE'),
        }

        url = f'{host}/dex/auth/local?req={req_value}'
        logging.debug(url)

        response = requests.post(url, data=data, verify=False, allow_redirects=False)
        location = response.headers['location']
        req_value = location.split('=')[1]

        url = f'{host}/dex/approval?req={req_value}'
        logging.debug(url)
        response = requests.get(url, verify=False, allow_redirects=False)
        location = response.headers['location']

        url = host + location
        response = requests.get(url, verify=False, allow_redirects=False)
        logging.debug(url)

        return response.headers['set-cookie']

如何通过java进行dex认证，访问kubeflow集群呢？

You can translate the Python code and do it in Java too. There's nothing
specific to Python in the code. :)
On Thu, Nov 11, 2021 at 3:11 PM LiuZhiYuan123456 @.***>
wrote:

如何通过java进行dex认证，访问kubeflow集群呢？
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/kubeflow/kfctl/issues/140#issuecomment-966046151, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/AAGSINAZC43RZKSPHV3GRELULNUAZANCNFSM4J3DGADQ
.
Triage notifications on the go with GitHub Mobile for iOS
https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675
or Android
https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

Thank you for help @benjamintanweihao I have idea

This worked for me for authentication with static user credentials on DEX
import os
from urllib.parse import urlparse, parse_qs

from requests_html import HTMLSession
import kfp

KF_SESSION_COOKIE_NAME = "authservice_session"
KF_UI_HOST = os.getenv("KF_PIPELINES_UI_ENDPOINT_ENV", "https://kubeflow.example.com")
USERNAME = os.environ["KF_USER_EMAIL"]
PASSWORD = os.environ["KF_USER_PASSWORD"]
NAMESPACE = os.environ["KF_USER_NAMESPACE"]

def get_auth_cookie_from_dex(url, username, password):
    """Get session cookie from Kubeflow login."""
    dex_local_auth_path = "/dex/auth/local"
    url = url.rstrip("/")
    html_session = HTMLSession()
    # First redirect to Dex Login Page https://kubeflow.example.com/dex/auth/
    response = html_session.get(url=url, allow_redirects=True)
    dex_login_paths = response.html.xpath("//a/@href")
    dex_local_path = [link for link in dex_login_paths if dex_local_auth_path in link]
    error_msg = "Only one local auth link is expected from DEX login page."
    assert len(dex_local_path) == 1, error_msg
    # Login on DEX with User credentials
    dex_login_url = f"{url}{dex_local_path[0]}"
    dex_request_token = parse_qs(urlparse(dex_login_url).query)["req"]
    response = html_session.post(
        url=dex_login_url,
        headers={"Content-Type": "application/x-www-form-urlencoded"},
        data=dict(login=username, password=password),
        allow_redirects=False
    )
    assert response.status_code == 303, "Login Failure. Please check credentials."
    # Access DEX approval path to get OIDC code and state
    dex_approval_url = f"{url}/dex/approval"
    response = html_session.get(
        url=dex_approval_url,
        params=dict(req=dex_request_token),
        allow_redirects=False
    )
    assert response.status_code == 303, "DEX Approval failed after successful login."
    # Access DEX OIDC path to generate session cookie
    dex_oidc_url = response.html.xpath("//a/@href")[0]
    response = html_session.get(
        url=dex_oidc_url,
        allow_redirects=False
    )
    assert response.status_code == 302, "DEX Auth session creation failed."
    # Extract session cookie
    cookie_jar = response.cookies.get_dict()
    session_cookie = cookie_jar[KF_SESSION_COOKIE_NAME]
    html_session.close()
    return session_cookie

auth_session_cookie = get_auth_cookie_from_dex(KF_UI_HOST, USERNAME, PASSWORD)

client = kfp.Client(
    host=f"{KF_UI_HOST}/pipeline",
    cookies=f"authservice_session={auth_session_cookie}",
)

print("Pipelines:\n" + client.list_pipelines().to_str() + "\n")
print("Experiments:\n" + client.list_experiments(namespace=NAMESPACE).to_str() + "\n")

This worked for me for authentication with static user credentials on DEX
import os
from urllib.parse import urlparse, parse_qs

import kfp
from requests_html import HTMLSession

KF_SESSION_COOKIE_NAME = "authservice_session"
KF_UI_HOST = os.getenv("KF_PIPELINES_UI_ENDPOINT", "https://kubeflow.example.com")
USERNAME = os.environ["KF_USER_EMAIL"]
PASSWORD = os.environ["KF_USER_PASSWORD"]
NAMESPACE = os.environ["KF_USER_NAMESPACE"]

def get_auth_cookie_from_dex(url, username, password):
    """Get session cookie from Kubeflow login."""
    dex_local_auth_path = "/dex/auth/local"
    url = url.rstrip("/")
    html_session = HTMLSession()
    # First redirect to Dex Login Page https://kubeflow.example.com/dex/auth/
    response = html_session.get(url=url, allow_redirects=True)
    dex_login_paths = response.html.xpath("//a/@href")
    dex_local_path = [link for link in dex_login_paths if dex_local_auth_path in link]
    error_msg = "Only one local auth link is expected from DEX login page."
    assert len(dex_local_path) == 1, error_msg
    # Login on DEX with User credentials
    dex_login_url = f"{url}{dex_local_path[0]}"
    dex_request_token = parse_qs(urlparse(dex_login_url).query)["req"]
    response = html_session.post(
        url=dex_login_url,
        headers={"Content-Type": "application/x-www-form-urlencoded"},
        data=dict(login=username, password=password),
        allow_redirects=False
    )
    assert response.status_code == 303, "Login Failure. Please check credentials."
    # Access DEX approval path to get OIDC code and state
    dex_approval_url = f"{url}/dex/approval"
    response = html_session.get(
        url=dex_approval_url,
        params=dict(req=dex_request_token),
        allow_redirects=False
    )
    assert response.status_code == 303, "DEX Approval failed after successful login."
    # Access DEX OIDC path to generate session cookie
    dex_oidc_url = response.html.xpath("//a/@href")[0]
    response = html_session.get(
        url=dex_oidc_url,
        allow_redirects=False
    )
    assert response.status_code == 302, "DEX Auth session creation failed."
    # Extract session cookie
    cookie_jar = response.cookies.get_dict()
    session_cookie = cookie_jar[KF_SESSION_COOKIE_NAME]
    html_session.close()
    return session_cookie

auth_session_cookie = get_auth_cookie_from_dex(KF_UI_HOST, USERNAME, PASSWORD)

client = kfp.Client(
    host=f"{KF_UI_HOST}/pipeline",
    cookies=f"{KF_SESSION_COOKIE_NAME}={auth_session_cookie}",
)

print("Pipelines:\n" + client.list_pipelines().to_str() + "\n")
print("Experiments:\n" + client.list_experiments(namespace=NAMESPACE).to_str() + "\n")

Here is a workaround to authenticate for kfp.Client() in Python:
import requests
import kfp

HOST = "http://localhost:8080/"
USERNAME =<EMAIL_ADDRESS>PASSWORD = "12341234"
NAMESPACE = "your-kf-ui-namespace"

session = requests.Session()
response = session.get(HOST)

headers = {
    "Content-Type": "application/x-www-form-urlencoded",
}

data = {"login": USERNAME, "password": PASSWORD}
session.post(response.url, headers=headers, data=data)
session_cookie = session.cookies.get_dict()["authservice_session"]

client = kfp.Client(
    host=f"{HOST}/pipeline",
    cookies=f"authservice_session={session_cookie}",
    namespace=NAMESPACE,
)

print(client.list_pipelines())

Hello all, I am trying this on-prem on Docker image. The localhost://8080 works separately but I can't access connection:
Tried:`
import requests
import kfp

HOST = "http://locahost:8080/"
USERNAME =<EMAIL_ADDRESS>PASSWORD = "12341234"
NAMESPACE = "kubeflow-user-example-com"

session = requests.Session()
response = session.get(HOST)

headers = {
    "Content-Type": "application/x-www-form-urlencoded",
}

data = {"login": USERNAME, "password": PASSWORD}
session.post(response.url, headers=headers, data=data)
session_cookie = session.cookies.get_dict()["authservice_session"]

client = kfp.Client(
    host=f"{HOST}/pipeline",
    cookies=f"authservice_session={session_cookie}",
    namespace=NAMESPACE
)

Error:
NewConnectionError: <urllib3.connection.HTTPConnection object at 0x7f4104615df0>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution
followed by
MaxRetryError: HTTPConnectionPool(host='pipelines-api.kubeflow.svc.cluster.local', port=8888): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f40fbf6e6d0>: Failed to establish a new connection: [Errno -2] Name or service not known'))
`
Tried quite some combinations of hosts :

http://pipelines-api.kubeflow.svc.cluster.local:8888 , as suggested here: https://stackoverflow.com/a/63842100/7027147
http://localhost:8080

Also tried User:
<EMAIL_ADDRESS>Same error message.
Kindly help me initiate a Pipeline with Kubeflow. Thanks in advance.

The Kubeflow docs explain how to do programmatic authentication with dex and Kubeflow Pipelines.
You can find the information and code examples on the "Connect the Pipelines SDK to Kubeflow Pipelines" page under the "Full Kubeflow (from outside cluster)" heading.
My only other tip is that you should catch errors when calling methods like kfp.Client.list_experiments() to handle the case that your session lasts long enough for your cookie to expire (and re-auth in that case).
I am going to close this issue for now, as those docs fully explain how to achieve what this issue is asking for.
/close


readline method in Sys::IO class is moved to Sys class.

readline method in Sys::IO class is moved to Sys class.

Implemented.


Event handlers fire when evt.stopPropagation() has been called

Current behavior
When you mount() an element and simulate a DOM event, the React event handler fires even if stopPropagation() has been called on the event. Example:
const Button = ({ onClick }) => (
  <button
    onClick={onClick}
    ref={ref => ref.addEventListener('click', evt => evt.stopPropagation())}
  >
    Click me
  </button>
);
const buttonWrapper = mount(<Button onClick={onClickSpy} />);
buttonWrapper.simulate('click');
expect(onClickSpy).not.toHaveBeenCalled(); // fails

Expected behavior
The React event handler shouldn't be called, because this doesn't reflect real-world behavior. React can't detect DOM events that don't propagate to the document.
Your environment
API

[ ] shallow
[x] mount
[ ] render

Version

library
version

enzyme
3.10.0

react
16.10.1

react-dom
16.10.1

react-test-renderer
16.10.1

enzyme-adapter-react-16
1.15.1

simulate is not actually simulating anything (it's a terrible API). All it's doing is invoking the onClick prop function in this case.

I guess that's true—the element-level click handler doesn't fire at all, so the evt.stopPropagation() line doesn't run.


Can detect images, but black screen (UE4.25p7)

Hi. I am running the ARKit 1.7 SDK samples project with image recognition. It builds fine, When I launch the application, The widget appears and it can detect images, and places a border around them, But the screen is black and now showing the image, Any ideas why?

Ok, Looks like this is a problem with the first launch when being deployed from the engine, once the permissions are set and you re-launch from android, it seems to work

Problem fixed here : https://youtu.be/BS9emzSvbaI


fix(query.go): actually propogate mixin runErr

What does this change

updates logic in query.go to return mixin errors

It appears we hadn't actually been returning mixin errors if they occurred during mixin build invocations (e.g. when assembling the mixin section of the invocation image Dockerfile).  This makes sure we capture such errors and halt the bundle build appropriately.
What issue does it fix
N/A
Notes for the reviewer
Note the changes in order to cover under test.  Open to suggestions on a different way.
Checklist

[x] Unit Tests
[x] Documentation - not impacted
[x] Schema (porter.yaml) - not impacted

Looking into the CI failure (cli-test)...

Unable to reproduce cli test error locally or via CI re-run 🤔 ... Blame Catalina?


Error on switching rollup example to rollup-plugin-vue2

We tried to set up an example with Rollup Pipe based on the rollup.pl example. We just changed 'rollup-plugin-vue' to 'rollup-plugin-vue2'. This leads to the follwing error:
~/src/mojolicious-plugin-assetpack$ morbo examples/rollup.pl
Server available at http://<IP_ADDRESS>:3000
[Sat Oct  6 14:22:07 2018] [warn] Installing rollup... Please wait. (npm install rollup)
npm WARN saveError ENOENT: no such file or directory, open '/home/glue/src/mojolicious-plugin-assetpack/examples/package.json'
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN enoent ENOENT: no such file or directory, open '/home/glue/src/mojolicious-plugin-assetpack/examples/package.json'
npm WARN examples No description
npm WARN examples No repository field.
npm WARN examples No README data
npm WARN examples No license field.

+<EMAIL_ADDRESS>added 3 packages from 34 contributors and audited 3 packages in 6.116s
found 0 vulnerabilities

[Sat Oct  6 14:22:14 2018] [warn] Installing vue-template-compiler... Please wait. (npm install vue-template-compiler)
npm WARN saveError ENOENT: no such file or directory, open '/home/glue/src/mojolicious-plugin-assetpack/examples/package.json'
npm WARN enoent ENOENT: no such file or directory, open '/home/glue/src/mojolicious-plugin-assetpack/examples/package.json'
npm WARN examples No description
npm WARN examples No repository field.
npm WARN examples No README data
npm WARN examples No license field.

+<EMAIL_ADDRESS>added 3 packages from 2 contributors and audited 8 packages in 3.107s
found 0 vulnerabilities

[Sat Oct  6 14:22:18 2018] [warn] Installing rollup-plugin-node-resolve... Please wait. (npm install rollup-plugin-node-resolve)
npm WARN saveError ENOENT: no such file or directory, open '/home/glue/src/mojolicious-plugin-assetpack/examples/package.json'
npm WARN enoent ENOENT: no such file or directory, open '/home/glue/src/mojolicious-plugin-assetpack/examples/package.json'
npm WARN examples No description
npm WARN examples No repository field.
npm WARN examples No README data
npm WARN examples No license field.

+<EMAIL_ADDRESS>added 5 packages from 5 contributors and audited 15 packages in 4.424s
found 0 vulnerabilities

[Sat Oct  6 14:22:23 2018] [warn] Installing rollup-plugin-commonjs... Please wait. (npm install rollup-plugin-commonjs)
npm WARN saveError ENOENT: no such file or directory, open '/home/glue/src/mojolicious-plugin-assetpack/examples/package.json'
npm WARN enoent ENOENT: no such file or directory, open '/home/glue/src/mojolicious-plugin-assetpack/examples/package.json'
npm WARN examples No description
npm WARN examples No repository field.
npm WARN examples No README data
npm WARN examples No license field.

+<EMAIL_ADDRESS>added 43 packages from 33 contributors and audited 78 packages in 12.252s
found 0 vulnerabilities

[Sat Oct  6 14:22:36 2018] [warn] Installing rollup-plugin-vue2... Please wait. (npm install rollup-plugin-vue2)
npm WARN saveError ENOENT: no such file or directory, open '/home/glue/src/mojolicious-plugin-assetpack/examples/package.json'
npm WARN enoent ENOENT: no such file or directory, open '/home/glue/src/mojolicious-plugin-assetpack/examples/package.json'
npm WARN examples No description
npm WARN examples No repository field.
npm WARN examples No README data
npm WARN examples No license field.

+<EMAIL_ADDRESS>added 3 packages from 3 contributors and audited 352 packages in 4.063s
found 0 vulnerabilities

(node:20645) UnhandledPromiseRejectionWarning: Error: Unexpected token (Note that you need plugins to import files that are not JavaScript)
    at error (/home/glue/src/mojolicious-plugin-assetpack/examples/node_modules/rollup/dist/rollup.js:3460:30)
    at Module.error (/home/glue/src/mojolicious-plugin-assetpack/examples/node_modules/rollup/dist/rollup.js:13361:9)
    at tryParse (/home/glue/src/mojolicious-plugin-assetpack/examples/node_modules/rollup/dist/rollup.js:13019:16)
    at Module.setSource (/home/glue/src/mojolicious-plugin-assetpack/examples/node_modules/rollup/dist/rollup.js:13092:33)
    at /home/glue/src/mojolicious-plugin-assetpack/examples/node_modules/rollup/dist/rollup.js:21761:20
(node:20645) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:20645) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

Any ideas?

If I can help coding a solution you can give me some hint what causes that error and I'll try to support your development. :-)

The usage of rollup-plugin-vue2 is kind of outdated as github states. We don't follow that path any longer.


Download MBSA (http://www.microsoft.com/en-us/download/details.aspx?id=7558) link broken

🛑 IMPORTANT: You can get your feedback addressed faster if you use the comment section for the article in which you encountered a problem (if available).
Link to article:
https://docs.microsoft.com/en-us/previous-versions/cc184924(v=msdn.10)?redirectedfrom=MSDN&source=docs
Problem:
Download MBSA (http://www.microsoft.com/en-us/download/details.aspx?id=7558) link broken at the page https://docs.microsoft.com/en-us/previous-versions/cc184924(v=msdn.10)?redirectedfrom=MSDN&source=docs

@chanmmn "We're no longer updating this content regularly."
#please-close


webhooks/airbrake: Enable custom topics and PMs to bot_owner.

This is a part of #8607. :)

@timabbott: FYI. I think there's a way to make this easier. Instead of having separate functions such as check_send_stream_message and check_send_private_message, we should just have a generic check_send_webhook_message function specifically for webhooks that sends a PM to the bot_owner if the stream argument passed to it is None. This will mean that the migration process will simply mean replacing all occurrences of check_send_stream_message with check_send_webhook_message. We could also handle the custom topic stuff in check_send_webhook_message.
Also, then, instead of writing tests for each webhook, we will just write a single test for check_send_webhook_message. What do you think? (If you agree, we probably shouldn't merge this, I had these ideas long after I had already pushed the PR lol). Thanks!

Yes, we should definitely just write a single test suite for check_send_webhook_message; that's exactly what I had in mine when I opened #8607 (with send_webhook_message as the name in that example for the generic function).  Probably check_send_... is a better name for consistency with the rest of the codebase.


Split Vocabulary stylesheets into their own repository

Description
Making a framework out of Vocabulary means supporting more than just Vue.js. The first step towards that is having a pure-CSS framework that is tooling-agnostic with a Vue component library merely wrapping over it.
Problems solved
This, in conjunction with #71 and #70 would make Vocabulary independent of Vue.js and integrable into many other CC sites that use WordPress or Lektor or something else.

The new repository can be found at creativecommons/vocabulary.


default

subset of @lazedo 's #42

xref failed with exit status: 1

compiler failed with exit status: 1

FWIW it's late and this PR needs more care and attention, but I have pushed anyway in case someone else has the time and will to move this forward

@andreineculau what was wrong with the original pull request and why is it failing this part?

hey @andreineculau could you please let us know what the current status of this PR is?

Status is that i have just started parental leave today so "if the gods allow" i will start closing down issues/PR soon one way or the other 🎉

@andreineculau congrats! :)


Protractor for hybrid apps - Release date needed - Urgent

@juliemr .. situation is critical in our project its not advisable to automate hybrid app in browser .. but the POC part is completed ..so we need the date of release of Protractor for hybrid apps .. hope you can understand the situation.

We're unable to give precise release dates. I know this can be frustrating, and we wish we could do everything as well. If you need something right away, you might want to look in to other temporary solutions or make your own patches.
You can follow along with progress on Protractor by following issues and commits. We use milestones to organize the features we're currently working on.


Create a new view for tests / exams

Create a new view that does not display if the answer is correct but rather displays the SMILES code of the answer
So a view like Èxercise.jsxcalledExam.jsxand in the bottom right your display the currently drawn smiles. this can be done by usingmolecule.toSmiles()`
We should be able to select and copy the smiles so that it can be pasted in another system.
There should also be an example on the home page showing the result of this view

@lpatiny
Do you want to store the Exam is taken flag in Browser indexdb? because you know if we store in the browser then if the user open new browser or even if he clear the browser data  he will see all the exams.

@lpatiny
can you explain this "There should also be an example on the home page showing the result of this view"

Add al ink like:

We may store locally but they idea is that they copy / paste their answer in another program (moodle)


DocsArchive-<IP_ADDRESS>Auto archive content

Please don't merge this PR until target archive repo PR https://github.com/OPS-E2E-PPE/docs-archive-test-target/pull/1067 is merged into live branch.
Auto archive content to https://github.com/opstest2/docs-archive-test-target.git

Docs Build status updates of commit 28cb06b:
:x: Validation status: errors
Please follow instructions here which may help to resolve issue.

File
Status
Preview URL
Details

:x:Error

Details

[Error: RepositoryUnauthorizedWithSourceCommit] Git data access to 'https://github.com/opstest2/docs-archive-test-source' (branch: Release_Archive_main_2022-02-22-01-14-33) is not authorized.. It looks like this might be the first time user: v-alji submitted a pull request to this repo. Before user can run builds in a pull request, he/she can enable 'v-alji' GitHub account in Docs by visiting Docs Portal (https://ops.microsoft.com). After enabling his/her account (v-alji), close and then reopen this pull request to start another build.

For more details, please refer to the build report.
If you see build warnings/errors with permission issues, it might be due to single sign-on (SSO) enabled on Microsoft's GitHub organizations. Please follow instructions here to re-authorize your GitHub account to Docs Build.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
Note: Your PR may contain errors or warnings unrelated to the files you changed. This happens when external dependencies like GitHub alias, Microsoft alias, cross repo links are updated. Please use these instructions to resolve them.
For any questions, please:Try searching the docs.microsoft.com contributor guidesPost your question in the Docs support channel


Number is not formatted by language code

In German or will print a decimal dot instead of a coma.

closed with #1.


Expand CUDA module APIs, fix locality graph out-of-bounds

Some small extensions to the CUDA APIs to support waiting on multiple futures.

@srirajpaul could you take a look at this small PR before I merge?

@agrippa  Sure. I never used HClib with GPU. Will use this pull request as an excuse to start using HClib with CUDA.