docker:promote

it would be great to have a docker promote or something of similar nature where we could specify a from and to docker registry in order to use d-m-p to pull images from say a staging registry, tag and push to another registry.
Similar to this action..
docker pull staging:5000/rawlingsj/example:v1
docker tag staging:5000/rawlingsj/example:v1 docker.io/rawlingsj/example:v1
docker push docker.io/rawlingsj/example:v1

+1 - but not urgent :)

In this respect it would be probably also good to add an additional registry related property in addition to docker.registry, so that two registries could be specified: One for pulling and one for pushing. This would be needed for e.g mvn docker:build docker:push where docker:build might pull the base image from an explicitely specified registry.
E.g. the autopull could work similar to the push: For a FROM my/base in the Dockerfile and -Ddocker.pullRegistry=pullFromMe:5000 specified, d-m-p would do:

Pull pullFromMe:500/my/base
Tag pullFromMe:500/my/base --> my/base
Docker build
Remove tag

Of course version number would need to be taken into account, too and the pull would also only happen when not already locally existent.  Much like the tagging logic when doing pushes.

Yeah that sounds great.

docker.pull.registry and docker.push.registry have been introduced with 0.13.8 so this already works.
I still dare a litte bit to implement a dedicated goal for merely using Maven to transfer a Docker image from one registry to another because it doesn't has to do much with building images or running containers as part of an application build.
For me it feels more natural to have another, non-build related too for this since I really doesn't use an build configuration.
You still can simulate this by defining a more or less empty <build> section for an image like
<build>
   <name>myimage</name>
   <from>baseFromSomewhere</from>
</build>

and then use
mvn package docker:build docker:push \
     -Ddocker.pull.registry=fromRegistry:5000 \
     -Ddocker.push.registry=toRegistry:5000

This would exactly mimic the desired behaviour.
@rawlingsj Does this makes sense to you ? If yes, I'd like to close this issue in order to keep d-m-p focussed on the building of stuff.

As I said, in order to work agains feature bloat, I'd like to close this one.
@rawlingsj please insist, if this is not ok for you and reopen the issue in case.


⚠ Bofrost.de has degraded performance

In d3cdf9c, Bofrost.de (https://www.bofrost.de) experienced degraded performance:

HTTP code: 200
Response time: 1995 ms

Resolved: Bofrost.de performance has improved in 2b1f8fd after 58 minutes.


Remove "as vm" best practice for ng-controller

This PR updates the parts of the styleguide where as vm is promoted.
Context
Currently the styleguide recommends to use as vm for controllers that are loaded using ng-controller:

This is not a best practice and should ideally be replaced with:

to allow nesting of controllers.
The new syntax is also conform to Angular 2's default setting.

+1

Is this something related to https://github.com/johnpapa/angular-styleguide/issues/309?

Not so fast! :-)
We've been doing fine with "as vm" for a long time. Why should the Style Guide suggest otherwise?
What, pray-tell, is your actual recommendation for the alternative. In your example, you're actually making TWO changes

To the name of the controller (you've added the 'Controller' particle where we tend to omit it)
To the name of the variable within the template (e.g., from 'vm' to 'avengers').

These are different style points and deserve separate treatment.
You're also not specific about the guidance for the variable name. Should the 'Controller' particle always be stripped? Can the variable name ever be abbreviated (as I've seen done in other examples)? What is my obligation when the name of the controller changes?
I'd like to see more than the simple declaration that it is "not a best practice". Where are your reasons? What are the consequence (pro/con)? Where are the citations?
No, just saying "to allow nesting of controllers" is not a reason. You have to show what you mean by nesting controllers and how it interferes with that approach. Then you have to show that "nesting controllers" is itself a common and worthy practice. And then you have to show that using a different name for every VM isn't the PITA (especially as the VM controller names change) that most of us have found it to be relative to just calling it vm and moving on with our lives.
No, "to conform to Angular 2's default settings" is neither a sufficient reason nor a citation.  Show us where the Ng team (or anyone) has discussed the merits of one approach versus the other. My quick web search didn't turn up anything. How can this alternative be a "best practice" without supporting evidence? Doing what the Ng team happens to be doing now in Ng 2 (where?) is not a particularly good argument.

Btw, I'm not seeing this as an "Ng 2 default setting" anyway as it has a quite different style of template construction. We're talking Ng 1.x here, right? It's worth observing that the Ng team itself has not asked John to change his recommendation.

A big reason I'd be reluctant to accept a PR such as this ... is that it doesn't communicate ... and a Style Guide is about communication. I think I know what you problems you're trying to solve. But that's not the point. A PR should include language and reasoning that communicates to the reader the "why" as well as the "how". You're making a change to a previous style; the burden of explanation is even higher. At least some mention of pros/cons is in order. This PR, on the other hand, simply punches in a few words. I don't feel that is sufficient.
Finally, just to be clear that I'm not ducking the issue, you can see that I puzzled through this myself in  #309 . I came to no conclusion other than that we should watch it.
We need more experience and clearer guidance before we make a change. And when we make a change, that change should convey some wisdom in addition to laying down a "rule".
I appreciate your best intentions. Let's execute a little better before proceeding.  Thanks.

The style guide does say "Controller" suffix, as per discussions with Igor.
Your preference to use "avengers" instead o "vm" is fine, but it's not always better or clear cut. Its a style. By default vm is fine most of the time in my experience, and very clear. if you need more context, by all means, rename it. But it's not going to be the base case for the style guide.
Thanks for the feedback.

I'll add that if you want to extend the style guide by showing how one would solve the problem of nested controller scopes in the HTML, that is an idea I'm all behind. Please feel free to revise and submit. It would need a WHAT, WHY, and HOW.

The style guide does say "Controller" suffix, as per discussions with Igor
So hard to keep up :-)

@johnpapa — A section for nested controllers makes sense. Will add a PR for this.
@wardbell — Thanks for the tips! Will use them in the upcoming PR. :+1:


Unify ACL handling between storage and bigquery

From: https://github.com/GoogleCloudPlatform/gcloud-python/pull/986#discussion_r34596696
The notion of ACLs might be pertinent for other discovery-based APIs, too (e.g., why does pubsub not have it?)

@tseaver Is this ever going to happen? (I.e. is it feasible?)

Because storage has separate APIs for its ACLs, it may not be feasible to unify the two.

Can we move from "may not" to "will" or "won't" and then close this our (it it's "won't") or commit to it.

I'd say "let's not".


[Feature Request] Add a FoundryVTT system background image.

Some other systems provide a default background image that is used for display on the systems page as well the default background on worlds created with said system. I think that adding a default image would improve the quick readability of worlds created with the pf2e system and add a polished look to the system in the system tab.

i nominate this community use art: https://paizo.com/community/blog/v5748dyo5la2u?Sneak-Peek-Curse-of-the-Crimson-Throne


Windows Tags

Describe your use-case which is not covered by existing documentation.
I'm assuming this has been discussed previously somewhere, but I can't find anything about it.
Why can we not specify windows tags by version? For linux based containers, each jenkins version gets its own tag, as well as latest. Ideally we would get the same for windows. This would make it a lot easier to see if there is a new base jenkins version when we pull the latest image to do an upgrade (especially as the image seems to constantly get updates without jenkins changing - I assume these are pulled in from the windows base image...?), or stick to specific LTS releases if needed.
Reference any relevant documentation, other materials or issues/pull requests that can be used for inspiration.
No response

Reopening until validation with the next Weekly and LTS releases in two days.

Tags containing the Jenkins version are now published, allowing to use and pin a specific Jenkins version, see images published since today: https://hub.docker.com/r/jenkins/jenkins/tags?page=1&name=windows
Tags before (Java 11 only for Windows releases < 2.431):

jdk11-hotspot-windowsservercore-2019
windowsservercore-2019 (short tag default JDK)

Tags now (Java 17, default JDK since Windows release 2.431):

2.432-jdk17-hotspot-windowsservercore-ltsc2019
jdk17-hotspot-windowsservercore-ltsc2019
2.432-windowsservercore-ltsc2019 (short tag default JDK)
windowsservercore-ltsc2019 (short tag default JDK)

A Java 11 image is published again since this weekly release 2.432, but since it's not the default JDK anymore there is no more "short" tags for it:

2.432-jdk11-hotspot-windowsservercore-ltsc2019
jdk11-hotspot-windowsservercore-ltsc2019

[!Warning]
Notice that "ltsc" has been added to the tag name.
Previous releases contained only "2019" and were based on 1809 Temurin images anyway, cf #1775


[Bug] Can not call discovery and retrieve metadata via HTTP/2 any more

Which version of Microsoft.IdentityModel are you using?
6.15.1
Where is the issue?

[X] M.IM.Protocols

Is this a new or an existing app?
a. The app exists and I have upgraded to a new version of Microsoft.IdentityModel.* I got new version after updating Microsoft.AspNetCore.Authentication.JwtBearer to v 7.0.0
Repro
Try to expose discovery endpoint, which only works on HTTP/2
Expected behavior
Being able to call discovery endpoint and get metadata using HTTP/2
Actual behavior
Call to discovery endpoint to get metadata is only done via HTTP/1.1
Possible solution
Change the code on https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/blob/dev/src/Microsoft.IdentityModel.Protocols/Configuration/HttpDocumentRetriever.cs#L123 using one of these solutions:

Set httpRequest.Version to httpClient.DefaultRequestVersion.
Provide an option/setting to be able to set the httpRequest.Version
Revert back HttpDocumentRetriever code to use HttpClient.GetAsync

@nfarrokhi I understand 1 and 2, but am not following #3.
Can you help us out?

I've created PR #2809 to address this problem, also mentioned in #2808


[BUG] "chaingreen farm summary" linux returns all zero's for data

Describe the bug
Serious problems out of the box, no such problems on 'flax'
The thing was synced in 12 hours, fine but the problem is the 'farm summary' never shows the plots, the 'plots check' shows everything ok,
To Reproduce
It's appears that all the 'guts' of the 'farm' is missing from the code.
chaingreen farm summary
Farming status: Farming
Total chaingreen farmed: 0.0
User transaction fees: 0.0
Block rewards: 0.0
Last height farmed: 0
Plot count: 0
Total size of plots: 0.000 GiB
Estimated network space: 313.871 PiB
Expected time to win: Unknown
Note: log into your key using 'chaingreen wallet show' to see rewards for each key
( ok not all is zero, the 'space' fills in but everything else is zero, I have 1,000's of plots, and they all work fine with chia, hpool, and flax. )
Expected behavior
Well I expected to  see it work by now, last week I knew that only 'flax' was working, but this week I wanted to try one more time to get 'chaingreen' working, but still it seems there are massive internal problems
OS: [e.g. Linux]
Additional context
Add any other context about the problem here.

Seriously, how can the 'status' be 'farming' when there are no plots?
How did they manage to break code directly copied over from chia?


Create hard-coded Getting Here Visual Story (V2)

Desktop mockup
Mobile mockup
We want this page in the website, under a toggle (https://github.com/wellcomecollection/wellcomecollection.org/issues/9842).
We suggest building the newer components in Storybook first to review them as we go with Dom, but if it's simple enough, it might not be that necessary.
Do review what could match components in the complex version of the page
What/why
Building a hard-coded visual story will enable us to

get valuable peer review
use the content ourselves on a variety of devices and screen sizes
identify design optimizations including spacing, image sizing and composition

Done when

Live prototype using existing content is available for review

Closing this as a first version was deployed and is actively used for review. Follow-up tickets have been created to ensure continuous review.


change name

@pfi79 can you please update this also in fabric?

@pfi79 can you please update this also in fabric?

Yeah, I'm doing that right now.

https://github.com/hyperledger/fabric/pull/4750
sorry but we would like to have it today
so already started working on it earlier
just have some issues I need to solve


Code has to be refactored

Code logics and identifier names has to be refactored.

Note: The refactoring based on Issue 14 will be closed.
Refactoring is a constantly occurring task, so we'll continue to operate it as a permanent branch rather than an issue.


Hi @simakazi, thanks for reporting the issue. From the logs I can see:

          Hi @simakazi, thanks for reporting the issue. From the logs I can see:

OutlineProxyController[8974]: updated unix socket owner to<PHONE_NUMBER>,1002

This means we failed to get the current user's uid (the first number<PHONE_NUMBER> which is equivalent to -1) and grant the required permissions to rw /var/run/outline_controller. This needs further investigation (for example, maybe the uid has been changed). As a workaround, could you try adding your current user to the outlinevpn group (we should already created this group) and restart the machine?
usermod -aG outlinevpn "$USER"

Originally posted by @jyyi1 in https://github.com/Jigsaw-Code/outline-client/issues/1526#issuecomment-1370365189

Uploading outline-0.67.2 2.zip…

Closing as duplicate of #1526


Add an open source license

Could you please add an open source license to this repo? Usually this is in a file named LICENSE. I would recommend something very liberal like the MIT one. You can put your own name as the copyright holder. It's just that without this, your code can't legally be assumed to be open source, AFAIK.

I have just added a MIT license as you suggest.


Add "From React.Component to hooks"

Good article!
I wonder if this should be under an 'advanced' sub-heading, & my Medium link under 'basic'?

I may not be the best person to judge the complexity of my own article but I feel it may be intermediate to advanced. It's up to you but having those sub-categories feels like a good idea :)


Cannot install under Ubuntu 18.04 LTS - apt.dockerproject.org has no canidates for bionic

Is this a BUG REPORT or FEATURE REQUEST?: bug
Environment:

Baremetal/VMs clusters

OS:

root@k8s-master01-dev:~# uname -a
Linux k8s-master01-dev 4.15.0-29-generic #31-Ubuntu SMP Tue Jul 17 15:39:52 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

root@k8s-master01-dev:~# lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 18.04 LTS
Release:	18.04
Codename:	bionic

Version of Ansible:

ansible 2.5.2
  config file = /kubespray/ansible.cfg
  configured module search path = [u'/kubespray/library']
  ansible python module location = /usr/lib/python2.7/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.15rc1 (default, Apr 15 2018, 21:51:34) [GCC 7.3.0]

Kubespray version: 2.5.0
Output of ansible run (relevant snippet):
TASK [docker : ensure docker-engine repository public key is installed] ********
Tuesday 24 July 2018  16:32:22 +0000 (0:00:02.729)       0:01:34.176 **********

changed: [k8s-node04-dev] => (item=58118E89F3A912897C070ADBF76221572C52609D)
changed: [k8s-node03-dev] => (item=58118E89F3A912897C070ADBF76221572C52609D)
changed: [k8s-master01-dev] => (item=58118E89F3A912897C070ADBF76221572C52609D)
changed: [k8s-node01-dev] => (item=58118E89F3A912897C070ADBF76221572C52609D)
changed: [k8s-node02-dev] => (item=58118E89F3A912897C070ADBF76221572C52609D)

TASK [docker : ensure docker-engine repository is enabled] *********************
Tuesday 24 July 2018  16:32:24 +0000 (0:00:01.283)       0:01:35.459 **********

An exception occurred during task execution. To see the full traceback, use -vvv. The error was: apt.cache.FetchFailedException: E:Failed to fetch https://apt.dockerproject.org/repo/dists/ubuntu-bionic/InRelease  403  Forbidden [IP: <IP_ADDRESS> 443], E:The repository 'https://apt.dockerproject.org/repo ubuntu-bionic InRelease' is not signed.
failed: [k8s-node04-dev] (item=deb https://apt.dockerproject.org/repo ubuntu-bionic main
) => {"changed": false, "item": "deb https://apt.dockerproject.org/repo ubuntu-bionic main\n", "module_stderr": "Traceback (most recent call last):\n  File \"/tmp/ansible_KumodZ/ansible_module_apt_repository.py\", line 551, in <module>\n    main()\n  File \"/tmp/ansible_KumodZ/ansible_module_apt_repository.py\", line 543, in main\n    cache.update()\n  File \"/usr/lib/python2.7/dist-packages/apt/cache.py\", line 543, in update\n    raise FetchFailedException(e)\napt.cache.FetchFailedException: E:Failed to fetch https://apt.dockerproject.org/repo/dists/ubuntu-bionic/InRelease  403  Forbidden [IP: <IP_ADDRESS> 443], E:The repository 'https://apt.dockerproject.org/repo ubuntu-bionic InRelease' is not signed.\n", "module_stdout": "", "msg": "MODULE FAILURE", "rc": 1}

This was earlier reported in #2957 and promptly dismissed as a third party issue, but I think it deserves a bit more thinking.
The docker-engine dependency is apparently included just in case one wishes to install a really-really-really old version of docker, going back to v1.13. That version of Docker has long been left out as recommended for use with Kubernetes.
I understand that some installations might need it, and it's great that Kubespray supports that. But it feels unecessary to include the repository as a required step for installations that do not have that version available. By looking over the Kubespray tasks, as far as I can tell, the only reason for adding apt.dockerproject.org as a repository is to make sure the docker-engine package is not installed before going ahead and installing the newest supported version of Docker.
Whether Docker devs decide to support current or future versions of their legacy is their choice. But I don't see any reason why Kubespray should fail when that legacy package is not even available :)
Best regards!

Hello, is there any progress on this issue? I think it is reasonable to expect that Kubespray will work out of the box with Ubuntu 18.04 LTS.

I got the same problem。After docker-engine repo installed, I cann't use "apt update" 。
# apt update
Hit:1 http://us-west-2.ec2.archive.ubuntu.com/ubuntu bionic InRelease
Hit:2 http://us-west-2.ec2.archive.ubuntu.com/ubuntu bionic-updates InRelease
Hit:3 http://us-west-2.ec2.archive.ubuntu.com/ubuntu bionic-backports InRelease
Hit:4 https://download.docker.com/linux/ubuntu bionic InRelease
Err:5 https://apt.dockerproject.org/repo ubuntu-bionic InRelease
  403  Forbidden [IP: <IP_ADDRESS> 443]
Get:6 http://security.ubuntu.com/ubuntu bionic-security InRelease [83.2 kB]
Reading package lists... Done
E: Failed to fetch https://apt.dockerproject.org/repo/dists/ubuntu-bionic/InRelease  403  Forbidden [IP: <IP_ADDRESS> 443]
E: The repository 'https://apt.dockerproject.org/repo ubuntu-bionic InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.

Then I found that the ubuntu-bionic doesn't exists under https://apt.dockerproject.org/repo/dists
Index of /repo/dists/
../
debian-jessie/                              12-Apr-2017 19:11  -
debian-stretch/                             12-Apr-2017 19:11  -
debian-wheezy/                              12-Apr-2017 19:11  -
raspbian-jessie/                            12-Apr-2017 19:11  -
ubuntu-precise/                             11-Jan-2017 21:23  -
ubuntu-trusty/                              12-Apr-2017 19:11  -
ubuntu-utopic/                              01-Dec-2016 19:42  -
ubuntu-vivid/                               01-Dec-2016 19:42  -
ubuntu-wily/                                08-Dec-2016 19:40  -
ubuntu-xenial/                              13-Apr-2017 23:23  -
ubuntu-yakkety/                             12-Apr-2017 19:11  -
ubuntu-zesty/                               27-Apr-2017 19:42  -

Docker on Bionic works fine, but for whatever reason apt.dockerproject.org doesn't contain the packages, whereas download.docker.com does (and the Docker docs state that the latter is correct: https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-using-the-repository).
If no-one beats me to it I can take a look at a PR to switch things over, unless any of the maintainers have a reason not to?

I'm trying to patch related tasks in a private fork, but even if the legacy docker-engine tasks are skipped, the repo new Docker repo added for Ubuntu 18.04 does not work.
root@k8s-master01-dev:~# apt update
Hit:1 http://tjpr-mirror.tjpr.net/ubuntu bionic InRelease
Hit:2 http://tjpr-mirror.tjpr.net/ubuntu bionic-updates InRelease
Hit:3 http://tjpr-mirror.tjpr.net/ubuntu bionic-backports InRelease
Hit:4 http://tjpr-mirror.tjpr.net/ubuntu bionic-security InRelease
Hit:5 https://download.docker.com/linux/ubuntu bionic InRelease
Reading package lists... Done
Building dependency tree
Reading state information... Done
24 packages can be upgraded. Run 'apt list --upgradable' to see them.
N: Skipping acquire of configured file 'stable/binary-i386/Packages' as repository 'https://download.docker.com/linux/ubuntu bionic InRelease' doesn't support architecture 'i386'

Funny enough, mine is a 64bit kernel. So, even if you get past apt.dockerproject.org checks, the new repos need to be fixed to include the system architecture (32bits or 64bits).
In short, it appears this will require more than just skipping a few checks. Kubespray for Ubuntu 18.04 is really messed up.
If anything, an update to README or release notes informing users of this incompatibility would be welcome.

I managed to get Kubespray working with Ubuntu 18.04 on Vagrant. Here is the Vagrantfile with the complete set of modifications.
Specifically, to solve this issue, I had the set the docker_version, docker_versioned_pkg ansible variables to the proper values but also set dockerproject_repo_info.pkg_repo and dockerproject_repo_info.repos to nothing so the docker-engine check is skipped. Here are the changes:
  docker_version: '18.03',
  docker_versioned_pkg: {
    'latest': 'docker-ce',
    '18.03': 'docker-ce=18.03.1~ce~3-0~ubuntu'
  },
  dockerproject_repo_info: {
    pkg_repo: '',
    repos: []
  }

The other changes in the vagrant file is to use bento/ubuntu-18.04 VM image, define the above variable changes in extra_vars scope, and use the extra_vars like this: ansible.extra_vars = extra_vars.
One caveat with this workaround is that the docker version I use is 18.03, which is beyond what the kubernetes build tests with (currently 1.11.2 to 1.13.1 and 17.03.x). So far, I have not had problems with  it but I suspect we might as we test more.

Thank you, @gopinatht! Noting on kubernetes tested versions is an important point here. Makes it obvious that Kubernetes itself is not ready for Ubuntu 18.04, so it makes sense that Kubespray just won't be right now.
I'm not sure how to use extra_vars that way. Is that an external file passed to the command line? Where do I define that?

@juliohm1978 Checkout the Vagrantfile link I provided in my previous comment: https://gist.github.com/gopinatht/0cc3fb89314c44288c8b3ff652d9ec7c That shows how to set the variables and use extra_vars. It's a complete file that you can use as is with Kubespray master today. I tested this on my Mac.
About your other comment about readiness, I would not go so far as to say K8S is not ready for Ubuntu 18.04. It's just that we have not found an easy way to deploy Docker 17.03 on Bionic. This is because docker made a choice to only provide 18.03 and 18.06 in its docker-ce repo for bionic currently.
I really do not see why Docker 17.03 will not work properly in Bionic. If anyone has ideas for installing Docker 17.03 easily on bionic, we might be able to submit a simple patch to kubespray to work with it.

Got it. I'm not using Vagrant, so with a couple of adjustments it works.
Saved the contents to a file extra_vars.json:
{
  "docker_version": "18.03",
  "docker_versioned_pkg": {
    "latest": "docker-ce",
    "18.03": "docker-ce=18.06.0~ce~3-0~ubuntu"
  },
  "dockerproject_repo_info": {
    "pkg_repo": "",
    "repos": []
  }
}

and used the command line:
ansible-playbook cluster.yml -b -i inventory.ini -e @extra_vars.json

Installation succeeded.
Thanks again!

@juliohm1978 No worries. Thanks for sharing your approach!

The extra_vars.json workaround can also be used with kubespray cli by adding the --ansible-opts argument:
kubespray deploy --ansible-opts "-e @extra_vars.json"

@tangentspace is the Kubespray CLI still an active project? The last PR Merge was on Nov 19, 2017. I would love to use it if it is an active project but it does not look like it and I remember reading somewhere that it will be deprecated at some point.

Just wanted to drop by for a quick note.
We are working on a k8s installation under 18.04 and I have to admit there are issues with the new version of Ubuntu -- namely, we had particular problems with how Kubespray configures k8s for DNS resolution. Its default resolvconf_mode: docker_dns tries to use the hosts /etc/resolv.conf which, now has only one entry and is managed by netplan.
nameserver <IP_ADDRESS>

<IP_ADDRESS> ends upin the pod/container's resolv.conf and nothing resolves anywhere. We had to revert back to the classic host_resolvconf mode to make it work under Ubuntu 18.04.

@juliohm1978 Thanks for sharing! Did you find an easy way to install docker 17.03 or earlier in Ubuntu 18.04?

Why kubespray want to use https://apt.dockerproject.org/repo/dists/ instead of https://download.docker.com/linux/ubuntu/dists/ ?

no docker repo distribution list for bionic beaver
https://apt.dockerproject.org/repo

Yes that's why I propose to change it...
Le ven. 17 août 2018 à 12:56, Jeffer Prince<EMAIL_ADDRESS>a
écrit :

no docker repo distribution list for bionic beaver
https://apt.dockerproject.org/repo
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/kubernetes-incubator/kubespray/issues/3023#issuecomment-413830367,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AA-D4nHtEyxz4-sMrItATIpJykZ8JZv4ks5uRqFKgaJpZM4VdKFJ
.

@ltupin could you propose a PR to change this ?


Error with adding assets

Hello,
I was just wondering if I could get some help with a little thing I'm struggling with. So whenever I add stuff onto the source code, like the main menu screen, app icons, etc, It doesn't show up. It only shows the default pictures that I replaced. This problem just kind of comes and goes, sometimes it happens, sometimes it wont. So I was just looking for some help on this problem that I keep having.
-Thank you!

please add a picture so that i could understand what your talking about.
Have a nice day!
Magniill.


[REQUEST] Add "module colour" option to settings menus

It would be helpful to be able to group together modules by giving them a dedicated colour.
E.g. if I have two wavetable oscillators each with a couple of LFOs modulating their parameters it would be good to be able to quickly see in the main list which modules are affecting each other instead of them all being green and having to remember which ones are interacting.

Thats a good idea :)


[🐛 BUG] Update content behaves differently with debug mode on/off

What went wrong? 🤔
I'm working on a LLM chatbot example, I'm using update_content to update the partial while streaming response from the LLM. However, while it works, it only works well in debug mode. While turning debug mode off, the update becomes "chunky".  (see the video attached).

Debug off, streaming and update_content seems to be very "chunky/jumpy"
https://github.com/user-attachments/assets/39cebd87-95eb-4a65-8e38-1581032a7686

Debug on, streaming and update_content works
https://github.com/user-attachments/assets/7fb47928-b991-4ee5-b5be-caabd1954386

Env:
Taipy is installed from source, commit 2f33ab1e3cdbc2f91553fe16ff60ea8eeab73422
Ubuntu server 20.04
(Also tested on windows 10)
p.s. I'm not using chat control, because I can't get the streaming response work with it.
Expected Behavior
No response
Steps to Reproduce Issue
Here is the sample code
import os
import base64
from dotenv import load_dotenv
import openai

from taipy.gui import State, Gui, invoke_callback, get_state_id, invoke_long_callback, notify
import taipy.gui.builder as tgb

from PIL import Image

load_dotenv()

def on_init(state):
    state.conv.update_content(state, "")
    state.messages_dict = {}
    state.messages = [
        {
            "role": "assistant",
            "style": "assistant_message",
            "content": "Hi, how can I help you today?",
        },
    ]
    state.gpt_messages = []
    state.model_host = ""
    state.model_port = ""
    state.model_name = ""
    state.vlm_models = ["model1", "model2", "custom"]
    state.selected_model = "model1"
    new_conv = create_conv(state)
    state.conv.update_content(state, new_conv)
    state.latest_response = 0
    state.client = openai.Client(base_url=f"http://{state.model_host}:{state.model_port}/v1",api_key="null")

def update_state(state: State, resp: str):
    state.messages[-1]["content"] += resp
    if state.latest_response > 4:
        state.conv.update_content(state, create_conv(state))
        state.latest_response = 0
    else:
        state.latest_response += 1

def stream_message(gui, state_id, client, messages, model_name):
    print(f"Stream Message: {state_id}")
    response = client.chat.completions.create(
        messages=messages,
        model=model_name,
        stream=True,
    )

    for chunk in response:
        resp = chunk.choices[0].delta.content
        if resp is None:
            break

        invoke_callback(
            gui,
            state_id,
            update_state,
            [resp],
        )

def get_status(state: State, status: bool):
    if status:
        print("Done")
        state.latest_response = 0
        state.conv.update_content(state, create_conv(state))
        state.gpt_messages.append({
            "role": "assistant",
            "content": [{"type": "text", "text": state.messages[-1]["content"]}],
        })

        # notify(state, "success", "Heavy set function finished!")
    else:
        print("Something went wrong")
        notify(state, "error", "Something went wrong")

def create_conv(state):
    messages_dict = {}
    with tgb.Page() as conversation:
        for i, message in enumerate(state.messages):
#            text = message["content"].replace("<br>", "").replace('"', "'")
            text = message["content"]
            messages_dict[f"message_{i}"] = text
            tgb.text(
                "{messages_dict['" + f"message_{i}" + "'] if messages_dict else ''}",
                class_name=f"message_base {message['style']}",
                mode="md",
                id=f"message_id_{i}",
            )
            tgb.text("", mode="pre")
        # tgb.text(
        #     "{latest_response}",
        #     class_name="message_base assistant_message",
        #     mode="md",
        # )
    state.messages_dict = messages_dict
    return conversation

def encode_image(image_path):
    with open(image_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode("utf-8")

def create_gpt_conv(state):
    messages = []
    if state.system_prompt != "":
        _m = {
            "role": "system",
            "content": [{"type": "text", "text": f"{state.system_prompt}"}],
        }
        messages.append(_m)

    if state.query_image_path != "":
        base64_image = encode_image(state.query_image_path)
        _m = {
            "role": "user",
            "content": [
                {"type": "text", "text": f"{state.query_message}"},
                {
                    "type": "image_url",
                    "image_url": {"url": f"data:image/jpeg;base64,{base64_image}"},
                },
            ],
        }
        for existing_message in state.gpt_messages:
            image_exists = len([x for x in existing_message["content"] if x["type"] == "image_url"]) > 0
            if image_exists:
                existing_message["content"].pop(1)
            messages.append(existing_message)
    else:
        _m = {
            "role": "user",
            "content": [{"type": "text", "text": f"{state.query_message}"}],
        }
        messages.extend(state.gpt_messages)
    messages.append(_m)

    state.gpt_messages = messages

    return messages

def send_message(state):
    client = openai.Client(base_url=f"http://{state.model_host}:{state.model_port}/v1",api_key="null")
    messages = create_gpt_conv(state)
    if state.query_image_path == "":
        state.messages.append(
            {
                "role": "user",
                "style": "user_message",
                "content": state.query_message,
            }
        )
    else:
        state.messages.append(
            {
                "role": "user",
                "style": "user_message",
                "content": f"{state.query_message}\n![user_image]({state.query_image_thumbnail_path})",
            }
        )
    # state.conv.update_content(state, create_conv(state))
    state.messages.append(
        {
            "role": "assistant",
            "style": "assistant_message",
            "content": "",
        }
    )
    invoke_long_callback(
        state=state,
        user_function=stream_message,
        user_function_args=[gui, get_state_id(state), client, messages, state.model_name],
        user_status_function=get_status,
        user_status_function_args=[]
    )
    # notify(state, "info", "Sending message...")
    state.query_message = ""
    state.query_image_path = ""
#    state.image_uploaded = False

def upload_image(state):
    try:
        state.image_uploaded = True
        global index
        # Open the original image
        original_image = Image.open(state.query_image_path)

        # Save the original image
        original_image.save(f"images/original_example_{index}.png")

        state.query_image_path = f"images/original_example_{index}.png"
        state.latest_image_path = f"images/original_example_{index}.png"
        # Resize the image to create a thumbnail
        thumbnail_image = original_image.copy()
        thumbnail_image.thumbnail((300, 300))

        # Save the thumbnail
        thumbnail_image.save(f"images/thumbnail_example_{index}.png")

        # Update the state to point to the thumbnail
        state.query_image_thumbnail_path = f"images/thumbnail_example_{index}.png"

        # Increment the index for the next image
        index = index + 1
    except Exception as e:
        state.image_uploaded = False
        notify(
            state,
            "error",
            f"An error occurred: {str(e)}",
        )

def reset_chat(state):
    state.messages = []
    state.gpt_messages = []
    state.query_message = ""
    state.query_image_path = ""
    state.latest_image_path = ""
    state.image_uploaded = False
    state.query_image_thumbnail_path = ""
    state.latest_response = 0
    state.conv.update_content(state, create_conv(state))
    state.selected_model = "model1"
    on_init(state)

def vlm_model_config(name):
    config = {
        "model1": {
            "model_host": "placeholder",
            "model_port": "placeholder",
            "model_name": "placeholder",
        },
        "model2": {
            "model_host": "placeholder",
            "model_port": "placeholder",
            "model_name": "placeholder",
        },
        "custom": {
            "model_host": "",
            "model_port": "",
            "model_name": "custom",
        }
    }
    return config.get(name)

def enlarge_image(state):
    with tgb.Page() as bigimage:
        tgb.image(
            "{state.latest_image_path}",
            width="800px"
        )
    state.bigimage.update_content(state, bigimage)
    state.show_bigimage_dialog = True

def close_image(state, id: str, payload : dict):
    state.show_bigimage_dialog = False

def update_model_info(state):
    config = vlm_model_config(state.selected_model)
    state.model_host = config["model_host"]
    state.model_port = config["model_port"]
    state.model_name = config["model_name"]

if __name__ == "__main__":
    index = 0
    query_image_path = ""
    latest_image_path = ""
    query_image_thumbnail_path = ""
    query_message = ""
    messages = []
    gpt_messages = []
    messages_dict = {}
    model_host = ""
    model_port = ""
    model_name = ""
    system_prompt = ""
    latest_response = 0
    show_bigimage_dialog = False
    image_uploaded = False
    vlm_models = ["model1", "model2", "custom"]
    selected_model = "model1"
    client = openai.Client(api_key="")

    with tgb.Page() as page:
        with tgb.layout(columns="300px 1"):
            with tgb.part(class_name="sidebar"):
                tgb.text("## VLM ChatBot", mode="md")
                tgb.button(
                    "New Conversation",
                    class_name="fullwidth plain",
                    id="reset_app_button",
                    on_action=reset_chat,
                )
                tgb.html("br")
                with tgb.part(render="{image_uploaded}"):
                    tgb.image(
                        content="{latest_image_path}", width="240px", class_name="image_preview", on_action=enlarge_image
                    )

            with tgb.part(class_name="p1"):
                with tgb.expandable("Model: {selected_model}",class_name="card-spacing-half-padding h4", expanded=False):
                    with tgb.layout(columns="1 1 1 1"):
                        tgb.selector(
                            value="{selected_model}",
                            lov="{vlm_models}",
                            label="Select a model",
                            on_change=update_model_info,
                            dropdown=True,
                        )
                        tgb.input(
                            "{model_host}",
                            label="Host IP",
                            change_delay=-1,
                        )
                        tgb.input(
                            "{model_port}",
                            label="Host Port",
                            change_delay=-1,
                        )
                        tgb.input(
                            "{model_name}",
                            label="Model Name",
                            change_delay=-1,
                        )
                    tgb.input(
                        "{system_prompt}",
                        label="System Prompt",
                        change_delay=-1,
                        multiline=True,
                        class_name="fullwidth",
                    )
                with tgb.part(height="600px", class_name="card card_chat"):
                    tgb.part(partial="{conv}")

                with tgb.part("card mt1"):
                    tgb.input(
                        "{query_message}",
                        on_action=send_message,
                        change_delay=-1,
                        label="Write your message:",
                        class_name="fullwidth",
                        multiline=True,
                        lines_shown=3
                    )
                    tgb.file_selector(
                        content="{query_image_path}",
                        on_action=upload_image,
                        extensions=".jpg,.jpeg,.png",
                        label="Upload an image",
                    )
                    # tgb.text("Max file size: 1MB")
            tgb.dialog(
                open="{show_bigimage_dialog}",
#                title="Stop on-going vLLM serving",
#                labels=["Stop"],
                on_action=close_image,
                partial="{bigimage}",
            )

    gui = Gui(page)
    conv = gui.add_partial("")
    bigimage = gui.add_partial("")
    gui.run(
        title="🤖VLM ChatBot",
        dark_mode=True,
        margin="0px",
        host="<IP_ADDRESS>",
        port=34545,
    )

Solution Proposed
No response
Screenshots

refers to the attached video

Runtime Environment
No response
Browsers
No response
OS
No response
Version of Taipy
No response
Additional Context
No response
Acceptance Criteria

[ ] Ensure new code is unit tested, and check code coverage is at least 90%.
[ ] Create related issue in taipy-doc for documentation and Release Notes.

Code of Conduct

[X] I have checked the existing issues.
[ ] I am willing to work on this issue (optional)

@AlexandreSajus Could you check this issue?

@AlexandreSajus Could you check this issue?

We already discussed this on Discord. I think this is expected behavior. Debug mode has to consume performance somewhere (R&D should know more), and this causes any real-time application to be slower. I'm not sure this is an issue.

Kindly allow me to help u to solve the bug

@KunjShah95 You are already assigned to another issue. For hacktoberfest, we only assign issues one at a time. Please submit a PR on the other issue first, or remove your assignment.
Thank you.

i wanrt to work on this issue as i have removed my previous issue

Assigned

hey there, this seems interesting and would love to work on this! Can this issue be assigned to me?

@quest-bot embark

Hi @jrobinAV , Please assign this to me.

hey @jrobinAV @AlexandreSajus Could you please assign this to me , I am interested in working on this issuse

Can you please assign this to me?

@noobHappylife I think we should help you use the chat control with streaming and all your problems will disappear :-)
Partial does not seem to be a good fit for what you're trying to do.
I'm not sure slowing down the refresh of partials so that it can show streaming data in a more convincing manner will help the Taipy community :-)

@noobHappylife I think we should help you use the chat control with streaming and all your problems will disappear :-) Partial does not seem to be a good fit for what you're trying to do. I'm not sure slowing down the refresh of partials so that it can show streaming data in a more convincing manner will help the Taipy community :-)

Sure it's understandable, perhaps a chat control is the way forward. Looking forward to have a working example with chat streaming. Thank you.

Here is a chat streaming example
import datetime
import re
import time
import typing as t

import requests  # type: ignore[import-untyped]

import taipy.gui.builder as tgb
from taipy.gui import Gui, Icon, State, get_state_id, invoke_callback, invoke_long_callback

# The Wikipedia API used to generate content for a date
wiki_url = "https://en.wikipedia.org/api/rest_v1/feed/onthisday/{type}/{month}/{day}"
event_types = {
    "happen": "events",
    "passé": "events",
    "born": "births",
    "né": "births",
    "dead": "deaths",
    "mort": "deaths",
}
user_agent = "https://taipy.io/demo"

# the list of messages
messages: list[tuple[str, str, str]] = []  # (Message id, message, sender)

# the users
users = [
    ["wikipedia", Icon("https://www.wikipedia.org/static/apple-touch/wikipedia.png", "Wikipedia")],
    ["taipy", Icon("https://docs.taipy.io/en/latest/assets/images/favicon.png", "Taipy")],
]

def on_init(state: State):
    # Do not share the message list with other users
    state.messages = []

def add_image_to_message(state: State, idx: int, text: str, image_url: str):
    msg_content: str = state.messages[idx][1]
    pos = msg_content.find(text)
    if pos > -1:
        msg_content = msg_content[: pos + len(text)] + f"\n\n![{text}]({image_url})" + msg_content[pos + len(text) :]
        set_message(state, msg_content, idx)

def update_message_with_image(gui: Gui, state_id: str, message_idx: int, text: str, image: dict):
    if src := image.get("source"):
        time.sleep(0.2)
        invoke_callback(
            gui,
            state_id,
            add_image_to_message,
            [message_idx, text, src],
        )

def update_message(state: State, json, event_type: str, for_date: str, idx: int):
    if isinstance(json, dict):
        # response header
        set_message(state, f"{event_type} for {for_date}: \n", idx)

        for event in json.get(event_type, []):
            time.sleep(0.2)
            # update response
            append_to_message(state, f"\n* {event.get('year', '')}: {event.get('text', '')}", idx)
            invoke_long_callback(
                state=state,
                user_function=update_message_with_image,
                user_function_args=[
                    gui,
                    get_state_id(state),
                    idx,
                    event.get("text", ""),
                    event.get("pages", [{}])[0].get("thumbnail", {}),
                ],
            )

def set_message(state: State, message: str, idx: t.Optional[int] = None):
    if idx is not None and idx < len(state.messages):
        msg = state.messages[idx]
        state.messages[idx] = (msg[0], message, msg[2])
    else:
        idx = len(state.messages)
        state.messages.append((f"{len(state.messages)}", message, users[0][0]))
    state.refresh("messages")
    return idx

def append_to_message(state: State, message: str, idx: int):
    if idx < len(state.messages):
        msg = state.messages[idx]
        state.messages[idx] = (msg[0], f"{msg[1]}{message}", msg[2])
        state.refresh("messages")
    return idx

def request_wikipedia(gui: Gui, state_id: str, event_type: str, month: str, day: str):
    idx = invoke_callback(
        gui,
        state_id,
        set_message,
        ["requesting Wikipedia ..."],
    )
    request = wiki_url.format(type=event_type, month=month, day=day)
    req = requests.get(request, headers={"accept": "application/json; charset=utf-8;", "User-Agent": user_agent})
    if req.status_code == 200:
        # display response
        invoke_callback(
            gui,
            state_id,
            update_message,
            [req.json(), event_type, f"{day}/{month}", idx],
        )
    else:
        invoke_callback(
            gui,
            state_id,
            set_message,
            [f"requesting Wikipedia failed: {req.status_code}", idx],
        )

def send_message(state: State, id: str, payload: dict):
    args = payload.get("args", [])

    # display request
    state.messages.append((f"{len(state.messages)}", args[2], args[3]))
    state.refresh("messages")

    # analyse request
    request = args[2].lower()
    type_event = None
    for word in event_types:
        if word in request:
            type_event = event_types[word]
            break
    type_event = type_event if type_event else "events"

    month = None
    day = None
    for m in re.finditer(r"(\d\d?)", request):
        if month is None:
            month = m.group()
        elif day is None:
            day = m.group()
            break
    if month is None:
        month = f"{datetime.datetime.now().month}"
    if day is None:
        day = f"{datetime.datetime.now().day}"

    # process request
    invoke_long_callback(
        state=state,
        user_function=request_wikipedia,
        user_function_args=[gui, get_state_id(state), type_event, month, day],
    )

if __name__ == "__main__":
    with tgb.Page() as page:
        tgb.chat(
            "{messages}",
            users=users,
            on_action=send_message,
            height="80vh",
        )

    gui = Gui(page)
    gui.run(title="🤖Wikipedia ChatBot")

you can ask what happened in 11 05 ?

@FabienLelaquais this is the other way around. When debug mode is on, this is better. When it is off (the normal behavior), there is a weird behavior (less performance?).


Re-enable and fix tweet posting test

This test was temporarily commented out, more than a year ago. With this patch it's now replaced with two new up to date working ones covering the current state of the tweeting functionality, moving to the new RSpec syntax, and refactoring a little for clarity.

🎅🏻


Exclude already downloaded file

How to use the exclude to check page has been already downloaded and skip it?
Is there a way to check the create timestamp of directory/file ?

How to use the exclude to check page has been already downloaded and skip it?

An already visited URL will never be pushed to the download queue. This is built-in standard behavior no need to do anything specific

Is there a way to check the create timestamp of directory/file ?

Not at the moment. If this is something you need feel free to open an issue to discuss it


Decoupled compute/storage architecture for Vearch

Try the new architecture in next version, e.g. on top of CubeFS.

Yes，this feature is under planning，the next version will support distributed file system（such as CubeFS）for data storage


Create ru_ru.json

Created ru_ru.json

You're a legend -- thanks for this. I'll add it to the project soon. :)

I have translated only the basic.
As soon as there is time, I'll translate the part related to the commands.


Fix Apiary spec and align it with js-ipfs API

This issue corresponds to the "API alignment" milestone: https://github.com/ipfs/pm/issues/227
A quick look upon the blueprint shows a number of issues (curl command used as expected request body etc). Additionally, the spec should be completely aligned to the js-ipfs implementation, which needs to be checked.
There are a number of open issues regarding the API which might be addressed in this effort. I'll be linking as I go,

curl command used as expected request body

Where is this happening?

@RichardLitt in many places, first example I can find here: https://github.com/ipfs/http-api-spec/blob/91922f0f4a400d279d2a8a009475c44c1a96e95c/apiary.apib#L36-L40
body is supposed to be the response body from the API call rather than the command that would return the body.

Fair. I'm not sure why I did this - can't find the documentation in the past issues. Would be good to fix. A lot of this code was influenced by the fact that I couldn't figure out how to do it automatically, or wasn't.

Status report: :(
go-ipfs API implementation seems to be built on top of the CLI commands (or maybe actual Core API). But operations do not translate very well to HTTP endpoints in some cases.
js-ipfs seems to have implemented Go endpoints, except it usually offers less functionality than Go regarding options and operations modifiers.
Headers and return objects and values differ among implementations sometimes. There is no consistency regarding which Content Type this API uses (text plain sometimes, json others etc).
HTTP API tries to be an RPC API and is by no means a REST API. Apiary (or Swagger) are designed to document APIs which try to be RESTful, making the process more painful and generating suboptimal documentation. There are also some endpoints which are impossible to accurately document right now because they're just weird (things taking ?arg=key&arg=value for example).
Because of this, there is little possibility (IMHO) that we can use API docs to auto-generate any serious test suite (let alone to test both implementations). Doing it is going to require to fight with lots of quirks.
Therefore I'm in the process of thinning the apiary doc into a minimal usable set for the users that works both for js-ipfs and go-ipfs and that is not as long as now (longer -> more maintenance). That is:

Get apiary to generate code/curl for the main endpoint example correctly and have apiary fake-api endpoints behave as the ipfs daemon would where its possible.
Drop examples about calls with wrong parameters (where we mostly return 500s, which is also wrong and confusing) and example which just show flags being used with different values (apiary is not well suited for even this in RPC-like APIs)
Write down inconsistencies for each endpoint

I'll bring this discussion to the next all hands. Questions open:

Is Apiary the right format/place to document our type of API?
v1 HTTP API: Decoupling HTTP API from Core and go for a strict RESTful, or JSON-RPC.

Linking related issues:
#108
#116

go-ipfs API implementation seems to be built on top of the CLI commands (or maybe actual Core API). But operations do not translate very well to HTTP endpoints in some cases.

go-ipfs 'networked API' (currently over HTTP) was designed to be an API that is friendly to be mounted over any pipe/socket, then, due to browser requirements (more like restrictions) it had to be hammered into what we have today as an HTTP API
Lots of very important context: https://github.com/ipfs/http-api-spec/issues/116

js-ipfs seems to have implemented Go endpoints, except it usually offers less functionality than Go regarding options and operations modifiers.

They are just not implemented yet

HTTP API tries to be an RPC API and is by no means a REST API. Apiary (or Swagger) are designed to document APIs which try to be RESTful, making the process more painful and generating suboptimal documentation. There are also some endpoints which are impossible to accurately document right now because they're just weird (things taking ?arg=key&arg=value for example).

One of the big questions is, can we really have a canonical API for RPC and REST? Battle experience says no.

After our monday conversation and the pain of manually dealing with Apiary I opted for writing a tool to simply generate the docs from Go.
This materializes in the above's pull request (https://github.com/ipfs/website/issues/156) and deprecates Apiary (and this repo) by removing the references from the website.
By autogenerating the API reference directly from go code we get:

No maintenance costs and hunting people down to keep docs up to date
Nice documentation for developers which is actually useful and integrated with the website

It provides a good base for addressing stuff in #116 . For the moment I'm considering Apiary spec "fixed".

I opted for writing a tool to simply generate the docs from Go.

This sounds to me like the right approach. I wish we had more of a canonical source to look at, however, as this won't catch differences in the go implementation that should be in every IPFS implementation. However, it is probably a better use of our tooling to do this. I think that the ipfs/specs should cover what I want, anyway.

No maintenance costs and hunting people down to keep docs up to date

I like this.
Deprecating this repo sounds fine. We should pull out any issues that we want covered, though, before closing them and putting a notice up. We should also remove references to the HTTP API.

Also, good work!


fix: change styles for the requestee

Details

Fixed Issues

$ https://github.com/Expensify/App/issues/25931
PROPOSAL: https://github.com/Expensify/App/issues/25931
Tests

Logged in as user A request money from user B.
Log in as user B.
Go to the request details.
Verify that the styles for the user B are the same as for user A but:

there's no chevrons, items are not clickable

items are not highlighted on hover

the cursor is default

[x] Verify that no errors appear in the JS console

Offline tests

N/A
QA Steps

Logged in as user A request money from user B.
Log in as user B.
Go to the request details.
Verify that the styles for the user B are the same as for user A but:

there's no chevrons, items are not clickable

items are not highlighted on hover

the cursor is default

[x] Verify that no errors appear in the JS console

PR Author Checklist

[x] I linked the correct issue in the ### Fixed Issues section above
[x] I wrote clear testing steps that cover the changes made in this PR

[x] I added steps for local testing in the Tests section
[x] I added steps for the expected offline behavior in the Offline steps section
[x] I added steps for Staging and/or Production testing in the QA steps section
[x] I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[x] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
[x] I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).

[x] I included screenshots or videos for tests on all platforms
[x] I ran the tests on all platforms & verified they passed on:

[x] Android / native
[x] Android / Chrome
[x] iOS / native
[x] iOS / Safari
[x] MacOS / Chrome / Safari
[x] MacOS / Desktop

[x] I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
[x] I followed proper code patterns (see Reviewing the code)

[x] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
[x] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[x] I verified that comments were added to code that is not self explanatory
[x] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[x] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method

[x] If any non-english text was added/modified, I verified the translation was requested/reviewed in #expensify-open-source and it was approved by an internal Expensify engineer. Link to Slack message:

[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
[x] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[x] I verified the JSDocs style guidelines (in STYLE.md) were followed

[x] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[x] I followed the guidelines as stated in the Review Guidelines
[x] I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
[x] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[x] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[x] I verified that if a function's arguments changed that all usages have also been updated correctly
[x] If a new component is created I verified that:

[x] A similar component doesn't exist in the codebase
[x] All props are defined accurately and each prop has a /** comment above it */
[x] The file is named correctly
[x] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[x] The only data being stored in the state is data necessary for rendering and nothing else
[x] If we are not using the full Onyx data that we loaded, I've added the proper selector in order to ensure the component only re-renders when the data it is using changes
[x] For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
[x] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
[x] All JSX used for rendering exists in the render method
[x] The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

[x] If any new file was added I verified that:

[x] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[x] If a new CSS style is added I verified that:

[x] A similar style doesn't already exist
[x] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG))

[x] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[x] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[x] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[x] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[x] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[x] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.
[x] I have checked off every checkbox in the PR author checklist, including those that don't apply to this PR.

Screenshots/Videos

Web

not visible in the screenshot, but the cursor is default

Mobile Web - Chrome

Mobile Web - Safari

Desktop

not visible in the screenshot, but the cursor is default

iOS

Android

I am not sure this is bug but IMO when hover on text, cursor should be I-beam as text is selectable and copiable
https://github.com/Expensify/App/assets/108292595/0fddb074-92d4-49ad-a849-469d855326ea

@shawnborton can you please confirm - https://github.com/Expensify/App/pull/25952#issuecomment-1695936435

That makes sense to me, yup.
Also @situchan, please use the @expensify/design team handle from here on out instead of just tagging me directly. Thanks!

@shawnborton I can change it easily by changing cursor styles for MenuItem component - but is it ok to change it for all the components? We're using MenuItems here:

and here we're having inactive list items - should the cursor be changed to I-beam when hovering over the list items' text?

I feel like this needs to be done separately (out of scope for this PR) as already happens on production

@mountiny what do you suggest? should be fixed here or separately?

@situchan but it's a one-liner 😃 it's ready and I can push it now, but I just wanted to make sure before I do that

Good point, let's just leave this out for now and not worry about it.

so we're leaving it as it is? no need to push the changes now?

correct. I will checklist shortly

@situchan @koko57 thanks for pushing this ahead, will merge once the checklist is done

@situchan Quick heads up that this PR is clean-up for a high-priority internal initiative. It'd be great if you can prioritize this PR over your other reviews. Thanks!

on it now

Reviewer Checklist

[x] I have verified the author checklist is complete (all boxes are checked off).
[x] I verified the correct issue is linked in the ### Fixed Issues section above
[x] I verified testing steps are clear and they cover the changes made in this PR

[x] I verified the steps for local testing are in the Tests section
[x] I verified the steps for Staging and/or Production testing are in the QA steps section
[x] I verified the steps cover any possible failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[x] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)

[x] I checked that screenshots or videos are included for tests on all platforms
[x] I included screenshots or videos for tests on all platforms
[x] I verified tests pass on all platforms & I tested again on:

[x] Android / native
[x] Android / Chrome
[x] iOS / native
[x] iOS / Safari
[x] MacOS / Chrome / Safari
[x] MacOS / Desktop

[x] If there are any errors in the console that are unrelated to this PR, I either fixed them (preferred) or linked to where I reported them in Slack
[x] I verified proper code patterns were followed (see Reviewing the code)

[x] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick).
[x] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[x] I verified that comments were added to code that is not self explanatory
[x] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[x] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method
[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
[x] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[x] I verified the JSDocs style guidelines (in STYLE.md) were followed

[x] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[x] I verified that this PR follows the guidelines as stated in the Review Guidelines
[x] I verified other components that can be impacted by these changes have been tested, and I retested again (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar have been tested & I retested again)
[x] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[x] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[x] If a new component is created I verified that:

[x] A similar component doesn't exist in the codebase
[x] All props are defined accurately and each prop has a /** comment above it */
[x] The file is named correctly
[x] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[x] The only data being stored in the state is data necessary for rendering and nothing else
[x] For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
[x] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
[x] All JSX used for rendering exists in the render method
[x] The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

[x] If any new file was added I verified that:

[x] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[x] If a new CSS style is added I verified that:

[x] A similar style doesn't already exist
[x] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG)

[x] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[x] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[x] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[x] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[x] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[x] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.
[x] I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots/Videos

Web
https://github.com/Expensify/App/assets/108292595/1140c22c-e577-4e7a-acb5-9731237fd792

Mobile Web - Chrome
https://github.com/Expensify/App/assets/108292595/b20c300b-cc58-4103-aa49-6f16e9de5a49

Mobile Web - Safari
https://github.com/Expensify/App/assets/108292595/92d4d2df-edee-4c37-9ecb-f38cbf97ca2f

Desktop
https://github.com/Expensify/App/assets/108292595/f29deb27-da3c-41ca-8581-d8d00c039864

iOS
https://github.com/Expensify/App/assets/108292595/000bb1d5-fd91-4f6a-8f82-9ba4a062af07

Android
https://github.com/Expensify/App/assets/108292595/a461e52a-2723-4499-9811-1b57d49c937e

:hand: This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release.

🚀 Deployed to staging by https://github.com/mountiny in version: 1.3.60-0 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
failure ❌

🕸 web 🕸
success ✅

🚀 Deployed to staging by https://github.com/mountiny in version: 1.3.60-0 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

🚀 Deployed to production by https://github.com/luacmartins in version: 1.3.60-3 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅


How to migrate from APIv1 Dropbox.Client to APIv2?

Long story short: I am currently using Dropbox Datastore API 1.2.0, after datastores were deprecated I switched to using files in the user's Dropbox folder to store my JSON data (permission type: app folder). Now that APIv1 was completely deprecated in June 2016, I'd like to switch to APIv2.
After long time of googling around and finding several authentication methods and mostly outdated information about the API, I am totally confused on how to migrate. Also the official Dropbox developer pages for JS SDK are still empty.
My App uses following for authentication:
var client = new Dropbox.Client({
    "key": apiKey
});

client.authenticate(null, (error) => {
    if (!!error) {
        throw error;
    }
    // ... init app
});

I use readdir(), readFile() and writeFile() from the API - so I have a quite small setup.
From what I've seen in the current JS SDK, the whole authentication process looks a lot more "manual". Is there no Dropbox client who handles the redirect and token for me - is it more complicated now to get my app authenticated?
Is it actually a good idea to migrate, since the SDK is not officially released?

Thanks for the post @pianomister ! We haven't updated the official Dropbox site with the final information on this SDK, but you can certainly go ahead and migrate to it and use it in production.
Also, you're right that this SDK doesn't do as much of the authorization and token storage/management for you, but I'll be sure to pass this along as a feature request. For reference, there was some discussion on this in https://github.com/dropbox/dropbox-sdk-js/issues/48 . In short, especially since this library is built to work in multiple environments, there isn't a single right way to do this. For the sake of the feature request though, are you using this in a standard browser environment where local storage would be a good fit for storing the access token?
There's an auth example here that may be helpful to get you started.
And for the functionality you mentioned specifically, the equivalent of readdir would be filesListFolder and filesListFolderContinue, readFile would be filesDownload, and writeFile would be filesUpload.

Hey @greg-db,
thanks a lot for your response! I am using the API for a web-based application, running in standard browser environment and as home screen web app on iOS. So, localstorage would fit as a storage solution - same as the old API.
I also read the discussion in #48 which you adressed. I am wondering about the responses that the comfortable solution provided in the older API is considered as "not broadly used". Are we still talking about a JS API which, alongside with JS Server solutions like node or use in web-based cross-platform apps, is made to be run in web browsers? :)
Also programmers who are not familiar with the API may get stuck right with authentication process, before they are able to use the powerful capabilities of Dropbox, causing frustration. Providing a simple authentication solution would not hurt in my eyes, and those who can not use localstorage or cookies for storage, do not have to use it, thanks to the more manual options of authentication handling.
Meanwhile I am thinking about taking the old Dropbox Client code base and migrating it to the new API calls.

Thanks for the additional feedback! That was a bit of miscommunication in #48, but I've sent this along to the rest of the team internally, including your comments here.

Are there any plans to release a migration guide for this SDK? Like was what done with the API documentation that shows v1 to v2 mappings.
June is fast approaching and I've been tasked with migrating a client from v1 to v2. This is the closest ticket I found on the topic and it's pretty old. Thanks

I'm not aware of any plans to write and release a migration guide for migrating between the old and new JavaScript SDKs in particular, but I'll be sure to pass this along as a feature request.
The best way to get started is to work through the readme, and review the examples.
For reference though, the API v2 HTTP endpoints map consistently to the API v2 SDK methods, so the general migration guide may still be useful.
And of course if you run in to any issues or have any questions just let us know and we'll be happy to help!

I would like a migration guide like the requested here.
Too, how to adapt code that uses the AuthDrivers Popup and Cordova. For example, there is an authenticateWithCordova that seems to replace the Corvoda AuthDriver, but there is no an authenticate or equivalent for the Popup AuthDriver. Didn't find references to this in docs.
thanks

Thanks for the request @IagoSRL . I'm sending it along to the team.

This issue is resolved, and should be closed


fix(BoardControls): update Export to copy columns with default name

What is the motivation for this pull request?
fix(BoardControls): update Export to copy columns with default name
What is the current behavior?
If column name is blank, export to markdown column is also blank
What is the new behavior?
If column name is blank, export to markdown column is renders default name (e.g., Column 1)
Checklist:

[x] Conventional Commits
[x] Tests
[ ] Documentation

Codecov Report

Merging #1275 (d88b73e) into master (d0b2a7f) will not change coverage.
The diff coverage is 100.00%.

:exclamation: Your organization is not using the GitHub App Integration. As a result you may experience degraded service beginning May 15th. Please install the Github App Integration for your organization. Read more.
@@            Coverage Diff            @@
##            master     #1275   +/-   ##
=========================================
  Coverage   100.00%   100.00%
=========================================
  Files           95        95
  Lines          926       927    +1
  Branches       131       132    +1
=========================================
+ Hits           926       927    +1

Impacted Files
Coverage Δ

src/components/BoardControls/utils/transform.ts
100.00% <100.00%> (ø)


Support reserving of IP address

This PR adds support of reserving IP addresses against a virtual machines MAC address. It enables the system to have a static IP address.
This feature is supported for those virtual networks managed by libvirt and has DHCP enabled.
As a pull request owner and reviewers, I checked that:

[x] Appropriate testing is done and actually running
[x] Appropriate documentation exists and/or is up-to-date:

[x] Content of the docs/source is reflecting the changes

/approve
I'll probably have to change a bit some things in there, in order to make it easier to reserve/fix IPs from another part of the code tree, but it should be easy enough.
Thank you @psathyan for that proposal!


language-plutus-core: add fixN

This adds Roman's marvellous n-ary fixpoint operator to the standard library. We still can't typecheck it, since it has non-normalized types in it, but it seems to work!
My tests could probably be made into actual property tests that check that the functions are equivalent to the Haskell variants, but I have some other things I need to do today, so I'll leave that for the future.
Defining the test examples is something of a battle too. I have some ideas to make this better, but for later.

Updated.

There is also some stuff in here that can be simplified once https://github.com/input-output-hk/plutus-prototype/pull/152 lands.

I did the simplifications.


Expense Tracker Flutter app running issue fixed

Title and Issue number
Expense Tracker
Close #4143

Checklist:

[X] I have mentioned the issue number in my Pull Request.
[X] I have commented my code, particularly in hard-to-understand areas
[X] I have created a helpful and easy to understand README.md
[X] I have made the desired changes in this PR

@MohitGupta121 I had removed .DS_Store file and made this new PR
Please review my PR and add labels for gssoc23 , level1
Thank You.


Add Swipes and Typing for Appium based on JSON input

Do this in accordance with the new JSON files from Carlos

Done for Live Mode as good as its going to be. Definitely need original screen size parameters in JSON file in future.

File Mode updated for this sprint. Closing but will definitely need to revisit swiping in the next sprint.
Also we need to come to a consensus with regards to typing. Typing is implemented for both Live and File mode and fully presentable after refactoring based on JSON input, but we need to discuss how we are deciding the string variable to be typed.


Refactor ClientIvc

The goal is to make ClientIvc more flexible and intuitive, primarily through making recursive folding verification an internal component to the class. E.g. given 10 circuits in circuits, I'd like to be able to do this:
ClientIvc ivc;
ivc.initialize(circuits[0]);
for (auto circuit : circuits) {
    ivc.accumulate(circuit);
}
proof = ivc.prove();

where proof, if verified, establishes knowledge of a witness satisfying all 10 circuits. This is currently not the case in general because there is nothing establishing that all but the last fold was done correctly. It works only in the special case of the aztec private function execution where every other circuit is a kernel containing two recursive folding verifications. If we instead build a single recursive folding verification into each call to accumulate (as we already do with the recursive merge verifier) then we can achieve the simple syntax above and it will be valid for arbitrary circuits. This also has the desirable side effect of removing the details of the IVC scheme from the aztec kernel which affords the backend more flexibility (e.g. to fold more than one instance at a time).

This was implemented a long time ago now and has since gone through yet another redesign


Prepare for v5.3.4

///////////////////⚡///////////////////
🏭 🍂 🏎 🌵 📲
///////////////////⚡///////////////////
I don't have a mouse hooked up, so I can't copy image URLs.

          1 Warning

:warning:
Tests were not updated

  Generated by :no_entry_sign: Danger


Host vs Origin headers for CORS preflight request

I'm using Zuul with Spring Cloud Camden SR5 and Spring Boot 1.4.4.RELEASE
My frontend is React.js application served by a Node Express server. My API is behind zuul.
The frontend can be accessed via https://test.mydomain.com and the API (Zuul) via https://api-test.mydomain.com
In Zuul I do have a CORS filter that sets the CORS header (properly?):
if(corsAllowedOrigin.contains(host)){
        log.debug("{} is allowed", origin);
        response.setHeader("Access-Control-Allow-Origin", origin);
    }
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", allowHeaders);
response.setHeader("Access-Control-Expose-Headers", exposeHeaders);
chain.doFilter(req, res);

With React.js I use Fetch to make HTTP calls to the API.
Before each GET or POST request, the browser does an OPTIONS request with the following headers:

Host: api-test.mydomain.com
Origin: https://test.mydomain.com

When I was using Spring Cloud Brixton.SR6 and Spring Boot 1.3.4.RELEASE that worked fine.
Now however I'm getting a 403 and the error message is Invalid CORS request.
Using a REST client I noticed that if I change the headers so that Host == Origin then I'm getting a 200 OK
From the CORS spec I could find:

In addition to checking the Origin header, resource authors are strongly encouraged to also check the Host header. That is, make sure that the host name provided by that header matches the host name of the server on which the resource resides. This will provide protection against DNS rebinding attacks.

Is that the reason why I'm now getting a 403? How can I have my API running on a different host without failing the OPTIONS requests?

note: It only happens if the header Access-Control-Request-Method is set

It seems I can solve the problem if I add CORS filter to each individual service behind the edge service. That is if I make sure the Access-Control-Allow-Origin header is populated by each service.
Before the update I only had a CORS filter on my edge service (Zuul) and I thought it was the way to go. Surely it seems wasteful if I need to configure CORS for each service? Is that the way to go?

Could you provide a sample that reproduces the problem?

If you create a simple rest controller:
@RestController
@RequestMapping("/foo")
public class FooController {
     @GetMapping(path = "/hello")
     public String hello(){
        return "hello"
     }
}

If you do an OPTIONS request with the following headers:

Access-Control-Request-Method=GET
Host: api-test.mydomain.com
Origin: https://test.mydomain.com

You get a 403 - Invalid CORS request
Now I see how this is perhaps the desired behaviour (although it wasn't like that with Spring Boot 1.3.4).
Now let's say I want to have this service behind a Zuul proxy:
@SpringBootApplication
@EnableZuulProxy
@EnableCircuitBreaker
public class EdgeServiceApplication {

	public static void main(String[] args) {
		SpringApplication.run(EdgeServiceApplication.class, args);
	}

	@Bean
	public WebMvcConfigurer corsConfigurer() {
		return new WebMvcConfigurerAdapter() {
			@Override
			public void addCorsMappings(CorsRegistry registry) {
				registry.addMapping("/**").allowedOrigins("https://test.mydomain.com");
			}
		};
	}

I was hopping that the CORS configuration in Zuul is enough. However I am still getting 403 if query the controller through Zuul. The only way I could fix it was to add the CORS mapping config to all my microservices.
Is that the desired behaviour?

This is slightly confusing to me since CORS should not come into play when Zuul is making the request to the service.  Maybe Zuul is forwarding on some headers from the browser request that it perhaps shouldn't since it is not making a cross domain request?

yes I am talking about a cross domain request.
My front-end is running on https://test.mydomain.com and the browser is making a request to https://test-api.mydomain.com.
https://test-api.mydomain.com points to an AWS ELB that connects to Zuul (I observe the same problem when running locally)
Before doing a GET or POST the browser makes a preflight request OPTIONS to Zuul. Then I don't know what is the expected behaviour.
Should Zuul forward the OPTIONS request to the downstream service? Should Zuul respond to the OPTIONS request on behalf of the service (my gut tells me that this is wrong. How can ZUUL know what to reply without talking to the service?)
I'm not saying there is a bug in Spring or Zuul; I'd like to understand what is happening since this is a change a behaviour compared to a previous version. I am expected to add CORS configuration to all my downstream services or is there a way to do it centrally in Zuul?

@cesartl  I have the same problem, I add a ZuulFilter and find out the request doesn't reach the ZuulFilter. I also try to add CORS  configuration to  my downstream services but it still give 403 response.

@ryanjbaxter I understand what you mean about Zuul not making a CORS request but how should Zuul respond to an OPTIONS preflight request? Should it forward it without the CORS? headers to the downstream services?
@ysjiang4869 Not sure this is the same issue. If add CORS configuration to my downstream services it works perfectly. My point is that I was hoping to configure CORS only once in Zuul, rather than on every single service.

@cesartl I need to look into this some more

I solved the problem by add the following code in my edge service
`
@Bean
public FilterRegistrationBean corsFilter() {
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    CorsConfiguration config = new CorsConfiguration();
    config.setAllowCredentials(true);
    config.addAllowedOrigin("*");
    config.addAllowedHeader("*");
    config.addAllowedMethod("*");
    source.registerCorsConfiguration("/**", config);
    FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
    bean.setOrder(0);
    return bean;
}

`
Referred to Filter based CORS support

@cesartl does @ysjiang4869's suggestion work?  If not I can maybe spend some time today.

yes it does. Before I was using my own implementation of a CORS filter instead of org.springframework.web.filter.CorsFilter.CorsFilter. That could explain why it didn't work.

Great, is it ok to close this then?

Sure, thanks for your help

Having a CORS filter in zuul doesn't work. It works when every edge service has a CORS filter.

both @ysjiang4869 and I managed to have CORS working with a single filter on the Zuul (i.e. the edge service)

Solution suggested by @ysjiang4869 works fine, thank you!

I had a similar problem and thought I had configured CORS correctly for Spring, but the line I was missing was config.addAllowedHeader("*"); - without that, adding the Access-Control-Request-Method caused the issue noted here.
Thanks for the help!


[DRAFT] MGDOBR-441: Shard may never delete resources if it crashes after sending DELETING status call

=== DRAFT ===
This is to gather opinions before I spend much time writing tests.
https://issues.redhat.com/browse/MGDOBR-441
PR owner checklist
Please make sure that your PR meets the following requirements:

[x] Your code is properly formatted according to this configuration.
Run mvn clean verify -DskipTests so that imports are correctly set.
[x] Your commit messages are clear and reference the JIRA issue e.g: "[MGDOBR-1] - $clear_explanation_of_what_you_did"
[x] The layers in the kustomize folder have been updated accordingly.
[ ] All new functionality is tested
[x] Pull Request title is properly formatted: MGDOBR-XYZ Subject
[x] Pull Request contains link to the JIRA issue
[x] Pull Request contains link to any dependent or related Pull Request
[x] Pull Request contains description of the issue
[x] Pull Request does not include fixes for issues other than the main ticket

PR reviewer(s) checklist

[ ] Check if code and Github action workflows have been modified and if the modification is safe
[ ] If the modification is safe, add the safe to test label

How to trigger pipelines and use the bots:

Run the end to end pipeline
Annotate the pull request with the label: safe to test. If you want to run the pipeline again, remove and add it again.

Rebase the pull request
Comment with: /rebase.

Deploy BOT
Comment with `/deploy <dev,stable> when the PR has been merged to deploy to a target environment.

Hi @robpblake @r00ta you're both probably the most knowledgeable in this area so I'll ask your opinions.
The issue is that the Operator sends a status update to the Manager that "something" is going to happen before the "something" has actually completed. This is nice (and solved another issue) but means if the Operator dies before the "something" has completed it is never picked up again and completed when the Operator comes back to life.
This PR now also returns PROVISIONING/DELETING resources to the Operator (i.e. the "something" that may not have completed). I then check whether the status of the CRD is READY i.e. fully reconciled before asking Kubernetes to do its thing. If the CRD is not READY it suggests a reconciliation is already in progress which should prevent the same CRD being worked on by multiple invocations of our Operator<->Manager polling loop.
WDYT (before I write loads of tests to be told my approach stinks)?

Closing due to the revelation provided by @r00ta.
I'll open a new PR in due course.


ISPN-7224 getAllCacheEntries with byte[] throws ClassCastException

https://issues.jboss.org/browse/ISPN-7724

Oops thanks for the fixes :) Darn typos.

Pulling...

Integrated into master.

Also cherry picked into 9.0.x


(FACT-2220) Add Aix disks fact

CLA signed by all contributors.

jenkins please test this on aix61-POWERa

jenkins please test this on aix61-POWERa


log thread identities for garbage collection

Connected to #1404.

@0xbase12 The above changes are deployed on your SlipStream test instance.


[test] Introduce JUnit 5 and AssertJ dependencies

This pull request implement #2657, which introduces JUnit 5 and AssertJ dependencies in the root pom, including:

Use junit-bom in dependency management to pin JUnit 5 versions for all modules
Introduce AssertJ as global test dependency
Bump maven-surefire-plugin version to 3.0.0-M5, which has better support for JUnit 5

Actually the project is already using JUnit 5 (see the import here), which is a transitive dependency of Flink test utils. This pull request makes the dependency clearer and under managed.


Fix Net 5 Preview filename

Based on pattern of Net 1.0 - Net Core 3.0, the filename should be preview1, not preview.1

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

Thanks, the preview version formatting has changed for 5.0 so preview.N is correct. The versioned md files will use this new convention.


Create dev branch

@rajcrk could you create a dev branch so we could raise PR to the dev branch instead of the main

Thank you


Truly global .env configuration.

It seems to me that in virtually every situation you want to load the .env file if it is available in the working directory or project root. I'd love to have support for this in a way that just enables this cross-project and cross-pycharm-feature.
Especially for those who manage many projects the best workflow you can currently have (as far as I know) is the following

for each new project
For each run configuration template that you plan to use (which can easily be 5+)
edit the run configuration by 1. going to the envfile tab 2. enabling envfile 3. click +. 4. Navigate to the correct folder. 5 Select the .env file

After this you still have to manually load the .env config for some pycharm elements like the terminal.
I think that this concept of a cross-project default configuration can easily prevent 100 clicks for every new project in just the setup.
Additionally letting people pick the .env file using a path in plaintext rather than a file picker would also drastically lower the time it takes to do the setup.

Yes!  If I right-click on a unittest module, class, or function and run/debug it, it automatically creates a new run configuration. if it doesn't exist yet. So, I can easily have 20 different run configurations.
This requested feature is really a deal-breaker for me.
At this point, it seems the simplest way is to edit the activate script in the virtual environment. It's an ugly way to do it, but it works.

Hello,
Same here, we have many many java projects, and it's tiresome for each one to specify the file.
If you have a .env at the root level of your project, it could be automatically loaded without any risks I think, like NPM does.
Thanks

Agreed, load default dot env file at root directory is very useful feature

I guess that is related to #31

So who is working on this or what is involved in moving the ball forward? I can help write tests, documentation or code but this would be helpful in the management many projects.


chore: update renovate.json

This PR

improves renovate configuration.

Notes
Removed rules that matched existing presets and added new presets.

https://docs.renovatebot.com/presets-config/#configrecommended
https://docs.renovatebot.com/presets-default/#automergetypes
https://docs.renovatebot.com/presets-default/#automergestablenonmajor
https://docs.renovatebot.com/presets-npm/#npmunpublishsafe

Same as https://github.com/open-feature/js-sdk/pull/751... I only request no sha-based action updates :sweat_smile: