Versioned API support

I'd like this to be more of a conversation starter about this topic, is it a needed feature? Does anybody else have this issue? The proposed solutions are just really quick ideas around the topic.
Feature Suggestion
Usually, APIs are evolving during their lifetimes with different versions. In the current form, every version of an API spec will (and should) have its own API entity in backstage. However, all of these versions of APIs are actually tied to a component. From the POV of a service, it provides 1 API with different versions, but it is rendered right now as the service provides all the versions (which is technically true) but the user experience in finding the correct version can be bad if you have a lot of versions for your API.
I suggest that API specs could have a similar model like groups and users. Where I could see 1 "parent" API and I would be able to choose which version of that API I'd like to see.
example:

with entities:

Possible Implementation
I think there could be a couple of ways to do this.
One idea is to introduce a new entity kind, stg like GroupApi. These could have a spec.apis array, where you should list your regular API entities. With this approach, it might be more clear to create frontend components for the GroupApis.
Another idea is to extend the current API entity with a spec.versions array, where you could list the other versions of this API spec. In this case, handling on the frontend might not be as clean, there would be not a clear distinction between regular API specs and GroupApi specs.
As a POC I was able to kinda hack around and create something like I mentioned above. For this, I used the API entity's existing spec.owner field. Where 1 API is actually owning other APIs and the top-level parent API is owned by a team/user. If you set up your APIs like this, then there is a possibility to create a frontend component that takes advantage of the useRelatedEntities hook to list all the entities that the current API owns.
It is a hack since the official documentation states that the spec.owner field should be only user or groups. In this case, I used an api as an owner.
In the current form API entities' spec.definition is a required field, however, the parent API will not have a direct definition so you'd need to use some dummy texts.
An unsolved problem with this is handling the frontend for it, we could update the ApiDefinitionCard to handle the versioning, but it should handle the cases where the API is just a regular API and where it is a parent API.

The catalog, in general, as you and @dkichler note above, explicitly does not deal with versions. This includes APIs. The catalog is not meant to contain a perfect index of all versions of all artifacts of all variations of all software components in all slightly different environments - its entities are rather meant to be the higher level "ideas" of things; essentially at a granularity that humans talk about them.
For a service, the catalog does indeed not deal with the different deployed versions of that service. There may come a point where a new backwards-incompatible major version of the service is released, or when it's split into several smaller services, where you might consider also changing the entity structure to reflect that. But the main purpose of these entities is effectively to serve as "anchors" to tie functionality and relations onto, and to hold enough foreign key material to make sensible lookups in other systems to find more granular data.
This philosophy translates to APIs as well. No matter how many patch/minor versions you make of an API, it's still effectively the same API in the eyes of the catalog. There may perhaps be a myApiV1 and a myApiV2 when you are at the point that they are majorly diverging so much that they effectively are completely different APIs perhaps even served by different services.
For this reason, I think that the definition field may have been a mistake in the first place. It has led to this type of thinking that it has to perfectly reflect an exact version of the API. But actually, it was only ever meant to be lightly informative, probably of a recent version of the API, to make it easy for engineers to quickly have a peek at it and interact with it. But I think that that use case might have been better served in other ways than to store the actual schema in the entity itself. So I vote to actually remove - or make optional - this field in a future version of the API kind. Let's see if that pans out - it's just my personal opinion :)

So to clarify, I want to push back against the formulation

every version of an API spec will (and should) have its own API entity in backstage

and encourage people to NOT do that :)

I agree @freben - I think versioning should be a part of the entity model itself, whereby an entity can have a traceable lineage of versions all associated with the top-level entity.

Apologies, replied before I read your initial reply explaining the reasoning on why versioning is not part of the entity model.  It makes sense - bringing versioning into the model would come with a massive amount of complexity.  Certainly there is still plenty of value in a "lightly informative, probably of a recent version of the API" (or service).

So to clarify, I want to push back against the formulation

every version of an API spec will (and should) have its own API entity in backstage

and encourage people to NOT do that :)

At Snyk we're using a rolling date- and stability-based API versioning scheme. It's not so much myAPIv1 and myAPIv2 but myAPI?version=2022-06-08~experimental and myAPI?version=2022-05-05~ga. API consumers can choose the version they want to interact with.
Not representing this in Backstage would be very unfortunate, as it's already such a useful catalog of services and their APIs. Especially APIs; our instance is rendering OpenAPI documentation using Swagger UI.

its entities are rather meant to be the higher level "ideas" of things; essentially at a granularity that humans talk about them.

My counter-argument to this (I'm admittedly very biased here!): humans also need to talk about changes in components over time. In a distributed system that's seeing significant use, it's more likely that an old version of a component deprecates and sunsets and a new version emerges and takes over responsibility as a gradual process. During this transition time, I would expect that consumers of that component will need information about both the old and the new version.
It's entirely possible to represent a linear timeline of versions with distinct entity names -- it's just that the UI wouldn't represent this very well, what seems to be missing then is a way of "grouping" these multiple versions. If there were a metadata field or convention that could add this dimension, it would be a quite powerful extension to the existing data model.
I'm not entirely clear on the complexities this would bring though -- what challenges would you face in adding this dimension?

Thanks for your detailed reply!
I do appreciate that there are underlying needs to find more detailed information along a lot of axes in relation to entities. and indeed we do expose a very rich set of information in our views, and link out to extended details in different subsystems or cloud provider pages etc. So the end user experience should definitely be to have all of the information they need at their fingertips. Or in some cases, a cleverly digested summary of it, linking out to the full actual data elsewhere.
So we want to achieve the same thing; the main question is, should the implementation of that need be to specifically put that data into the catalog, or to have it elsewhere. After all, the catalog is just a low level backend service, not a user facing system.
My view on the catalog is heavily centered around the engineer end user experience. As in, the people that go through the chore of actually sourcing data into the catalog. In all honesty, asking them to maintain yaml files by hand and getting all of the data and relations right, is a pretty tall order, one that I'm acutely aware of. :) There was a pretty serious balancing act going on in the design there, gauging power and expressiveness vs customisability vs maintenance cost etc. We want to burden engineers as little as possible, letting them express the most vital pieces of information only where necessary, and then get out of their way.
I think it's safe to say that it'd be desirable to avoid having end users (again, not frontend users, but yaml users, so to speak) to have to sit and copy-paste largish yaml blocks and carefully hand tweak them and invent names for them, for every API change, basically just to appease Backstage. And then when their service declared that it depends on ApiV1.1.2, but later they tweak their code to talk to ApiV1.1.3 - now they have to remember to update their dependency in the yaml file to the other version of that entity, and oh the other team forgot to make an entity of that version so we need to contact them ... etc.
It'd probably turn out to be frustrating. We want the experience to be delightful and ultimately increasing productivity. A feeling of a small investment that gets them big value by unlocking the Backstage ecosystem, as it were. As you know, "selling" a system like this onto an org full of busy engineers, is largely a social engineering exercise as much as a technical one.
So the alternative to that would be some form of automation. Mirroring data from an external system into the catalog - for example, for library type components, you could go to artifactory and ensure that there's an entity present for every single actual published version of the library. But then the question becomes - why? Why mirror that data in the first place? How do you fill in things like the owner field on those spidered things? There ARE some cases where you do want to mirror things, as we do for example for users and groups, but that should be limited to a very, VERY small set of things where you know that the implications of doing so are actually worth the (tangible) cost and where doing so brings large enough value to the Backstage ecosystem or other consumers of the catalog - where they conceivably could instead have looked up that same info themselves from the authoritative system if they needed it.
Remember, putting something into the catalog implies a number of things. One of them is that they bloat search and similar discovery use cases. As a user, you're in an incident scenario, and you have a hunch that the service foo that you think you transitively depend on may be the culprit. So you go to search and start typing foo and get eighteen hits. Hm, now what? :) You yourself alluded to grouping, which would get around this, but I fear that such a feature would take some significant effort and affects more systems such as the frontend, scaffolding, search, etc etc etc. Another cost is just the plain suitability aspect. In fairness I think that the catalog is pretty custom built around its current scope and use case, and is a pretty poor performer when it comes to - as an example - being an artifact index, or an API gateway/index, etc. There are perfectly suitable products for those other needs, and we want to leverage those and not reinvent what they do, much in the same way that we generally prefer frontend plugins that show the critical most useful pieces of info but then link out to the third party system instead of reinventing their entire UI.
So winding back a bit. What we focus on, is to have these "hook" entities that represent the high level concepts, and then we very carefully craft the web of connections to other authorities that have the rest of the info.
Now, on that topic. It may be that you desire things to be in the catalog because it implies ease of consumption (from the REST API standpoint basically). And that is understandable and a common thing that we hear. Even at Spotify, my feeling has for the longest time been that we are great at building islands of functionality but could be a bit better at focusing on the edges between those pieces. And that's where graphql enters the picture. Internally we have a legacy graphql layer available to the frontend, that mirrors the catalog and many many other systems. From the entity nodes you can resolve a ton of different things, not by asking the catalog, but by descending into those external systems looking data up by the entity ref. This is where we want to go with the open source product as well, but as you may be aware we have just an embryo of it and haven't yet had time to focus on making it into a proper product. This is a direction we believe in; an "edge" linking layer on top of the catalog, rather than putting any and all data INTO the catalog itself.
Does that make sense? I got a bit rambling there, please feel free to ask for clarification or offer disagreement :) I like the discourse.

@Rugvip I would like to explore that option of api definitions not sitting directly in the api entity as well.
Some people from our organization who have started to adopt backstage assumed that API definitions were more similarly dealt with as TechDocs rather than a component or resource. I wonder if there could be some benefit of having a base concept that tech docs and api definitions shared, which could deal with the shared need of things like addons, versioning, generation, publishing etc.

@webark hmm, possibly. There's definitely a bit of overlap, but also some pretty large differences. Could also be that it's more of a common service situation where they're available for reuse by all plugins, for example like UrlReaders. Breaking things into smaller single-purpose atoms that then get composed back together tends to be a bit easier to evolve.

Hi, I think versioned API support would be a really sensible feature. Do you have any update regarding this feature?

I would be happy with environmental support. The use case here being that we have a deployment process that goes through a number of environments (e.g. test, uat, prod) and that the documentation in one of these environments is always out of sync.
For example, we update an API and spec, as soon as it enters the pipeline, backstage it breaks prod documentation. If we do not update specs until we push to prod, then the lower environments end up broken
Having something like a lifecycle tag preserve docs in the experimental stage separately from production would allow the pushing of updates through lower environments without changing production docs until ready. Then automating updates to the  catalog files to put in production lifecycles when pushing to prod
would be trivial
At least that would be intuitively how I would expect lifecycles to work, and it would get at least part way to the goal of the OP without the kludge of becoming a SCM tool

Bit of extra context over in #20209

At Zalando we are also struggling with the same shortcoming of the API kind and API docs plugin.
Our legacy API portal treats APIs as something that has a history of semantic versions - and if users forget to update the version add new revisions. We automatically track every API that is deployed - in tests and production systems -, and keep the API definition in our database forever as part of an API history.

Since the API model in Backstage binds to a single API spec, we are currently forced to create one API entity per API revisions instead of one API entity per API history, i.e. a collection of related API revisions. This creates two problems:

We need to create a unique API name for every revision, which leads to unstable names and links from API perspective, that users cannot reference in APIs in discussions, and worse
We need to remove inactive API revision to prevent overloading of the catalog as well as the human perception, because the number of API revisions has grown to multiple hundred of thousands in our company.

To represent our legacy API portal information in Backstage compatible with the current API docs plugin, we suggest to add an optional #/spec/versions-array that enables to bind the API definition to a distinct version while at the same time relax #/spec/definition to be optional as in the following example:
apiVersion: backstage.io/v1alpha1
kind: API
metadata:
  name: api-repository-api
  description: API Repository API (external)
specs:
  type: openapi
  lifecycle: production
  owner: api-management-team
  system: api-repository
  versions:
    - version: 0.2.7
      revision: 1 # optional suggestion
      href: https://backstage.zalando.net/api-revisions/api-repository-api:0.2.7-1
    - version: 0.2.6
      revision: 2 # optional suggestion
      href: https://backstage.zalando.net/api-revisions/api-repository-api:0.2.6-2
    - ...

The data structure may contain also a definition on each version, however, resolving the API as yaml or json from a hypertext reference seems to be more preferable for us since it provides a cleaner separation of concerns. With this information the API definition view of the plugin can now easily show a version-menu to select another version than the last (active). To complete the feature, the API definition view can also support a version suffix :{version}-{revision} to directly point to a distinct API version.
Another extension would be to provide a state for each version that allows to distinguish between API revisions that are provided by staging and/or production services or have been retired.

Wonder if we should look at decoupling the inline schema from the API entity, and having the definition and versions resolved in a different way. Something similar to the above, but maybe it's taken care of by an entirely different service rather than this stored in the Catalog? Not sure.

other alternative is to use the purpose built tools like apicurio and integrate it via the plugin.

Backstage assumes that you running a SaaS service! What if your developping sw as a vendor, that is used by 100's of customers, not all of them will have same version running at the same time in production. Still support and design maintenance would be delivered, meaning that S/W developpers daily needs to lookup things in different versions of all entities. I understand for Spotify this is not an issue but any S/W vendor with large customer base it is.

Are there any plans to implement this feature?

We don't have intentions to pick this up, it is not currently on our roadmap.
This is what we think needs to be done
https://github.com/backstage/backstage/issues/11027#issuecomment-1752843513
If someone would like to contribute, PRs are welcome 🙏

We don't have intentions to pick this up, it is not currently on our roadmap. This is what we think needs to be done #11027 (comment)
If someone would like to contribute, PRs are welcome 🙏

That would solve for APIs (which is what this issue title is about), but that wouldn't solve the broader catalog versioning gap as mentioned here. It would be nice to have it solved more generically for other entities as well, such as docs, components and entities relations, etc...

I think that general catalog versioning is a separate subject then api spec, docs, etc. Anything that shares the same "support document" like specs and docs should get piped through the same process i see, and be able to store multiple times. (a versioned api spec or doc is just multiple specs associated by a specified key after all)

With this information the API definition view of the plugin can now easily show a version-menu to select another version than the last (active). To complete the feature, the API definition view can also support a version suffix :{version}-{revision} to directly point to a distinct API version.

What about the provides/consumes relationships ? Ideally components should be able to specify which version of the API they produce or consume.

Another extension would be to provide a state for each version that allows to distinguish between API revisions that are provided by staging and/or production services or have been retired.

This would collide with spec.lifecycle field.
I was thinking more on a "common to all kinds" version field that would specify the entity version and allow adding relationships to specific versions, or the generic/default version (latest). Different versions would also be able to define different labels, annotations, lifecycle, relationships and such. The version dropdown field would be conditionally added to every entity page that has multiple versions.
Off course, this would add more complexity on the descriptors which would also have to be taken into consideration.

Versioning the entire catalog is a paradigm shift in how the system operates, and the data is stored, grouped, and aggregated. Closing the loop between your api spec, components, and tracing service Id say would be a better fit if that's the need of your organization. Then you can pull those kind of fields and relationships dynamically based on the tracing data.

I wonder if a combination of metadata on annotations* and decoupling the API spec from the API entity would solve this nicely. You could put version on your provides/consumes relationship with a concise 'namespace:kind/name@version' or something and then that could be resolved to pull the correct version. We'd probably want to be clear that this is content versioning not entity versioning. Rereading the above thread, I think freben's comment above rings true for versioning entities in the catalog.
Using metadata on relations and a common 'VersionResolverService' might also make this usable for tech docs and content versioned stuff?

metadata on relations is something I'm working on but currently isn't possible.

Wow, not even a workaround, sounds terrific, time to ditch backstage.

I think this feature would raise popularity of backstage even more, because I think many companies, which do not work against one master branch would leverage

yea. We currently generate versions of our spec when we build services, and we store them on S3 and have a service we can query to get them.
So we were able to just overwrite the api spec render to provide a dropdown, and add a versions block to the api spec.
I still feel the long term solution is to treat docs and specs the same. The same in that they are "associated assets" that get generated via the same type of build triggers that are used to tech docs for instance, and can publish them in similar ways. Each time they build, a new one is generated anyway. versioning just becomes connecting the existing versions that are generated using the techdocs cli, or in the real time builder that is available for tech docs already.
(this could also be used for SBOMs for example too. but don't want to 🧵 too much)

We built a custom Kind which acts as an addition to the API kind. it has a kv map from version to file.
And displaying it has a dropdown to select version you wanna look at.

We built a custom Kind which acts as an addition to the API kind. it has a kv map from version to file.
And displaying it has a dropdown to select version you wanna look at.

Cool. In our case we are following same strategy proposed by @tkrop in https://github.com/backstage/backstage/issues/11027#issuecomment-1748608197: still using API kind but extending the spec field so that we can display the dropdown

@webark @jjwedemyer any packages published that others could use? Thanks


Video size is always 0.0 if a downloadable encoding available with HLS

Description
LEARNER-5087

@salman2013 I have added test cases. Please have a look.

@saeedbashir please fix the minor comment then it can be merge. Thanks


Multiple slides, single transition?

Is there currently a way to make a carousel with multiple slides to transition to a slide as if it is adjacent?
For instance, on a carousel with 5 slides, if I'm on slide 1 and click on the dot for slide 5, the carousel slides through all the slides in between - 4 slides fly by.
I'd like the ability for a carousel to slide from slide 1 to 5 in a single animation, as if 5 was adjacent (no slides in between).
Happy to do a PR if the functionality doesn't already exist.

Not super elegant, but I put this together in a pinch: https://github.com/LukeAskew/slick/compare/kenwheeler:master...master

You don't need a carousel to achieve this :)


All my projects are gone! PLS HELP!

Describe the bug
All projects i have been working on are gone. Can i get it back, did cost me 10M tokens so far...
Link to the Bolt URL that caused the error
https://bolt.new/~/sb1-l2mf3z
Steps to reproduce
I need to have my projects back i;ve been working on
Expected behavior
see above
Screen Recording / Screenshot
a
Platform
MaC OS - Chrome
Additional context
a

I had the same issue, it appears chats do not persist between browser sessions, this was confirmed by a contributor in another issue posted. The fix for me was this.
Go to https://stackblitz.com/ and login with your bolt.new account or GitHub login.
Go to Collections on the left hand side and click Bolt Collection.
Open up the Bolt collection you had originally created on bolt.new, it should have the same chat/project name.
When it opens, on the top left hand side click "Open In Bolt.new | AI"
Your chat is now visible again in bolt.new
Hopefully browser persistence will be added soon, I thought I had lost several hours of work. Hope this helps.

LEGEND! GOT IT BACK! THANKS!


'.zmetadata' Issue on page /load_data.html

I'm trying to follow the tutorial for accessing data with intake and s3 and I have an error with the line
"dataset = catalog.level1.shots(url=shot.url, group='amc').to_dask()"
It produces a Keyerror: '.zmetadata' either locally or in a Colab  notebook.
I didn't manage to find a solution yet. Has someone already had this issue ?

It seems to be linked to the latest version 2.0.0 of the intake-xarray module. Version 0.7.0 seems to work.


[Bitwarden] Add vault timeout and password reprompt for other sensitive values

Description
Issue #5139
What was done:

[X] Added a Vault Timeout feature (thought it was implemented with the reprompt feature)

Repurposed the Skip Reprompt preference for this
This feature works by saving the last activity time every time a CLI command is run, and comparing it when accessing the Search Vault command

[X] Added password reprompt for fields like Notes, Card and Identity Details, this matches Bitwarden's behaviour
[X] Display lock reason in the unlock form
[X] Refactored the vault actions

Moved them into separate files and used context to avoid passing the selected item around

Screencast
Vault timeout

Reprompt
https://user-images.githubusercontent.com/7235666/227747126-3c9eb008-af01-4731-82a4-8c9597e451d0.mp4
Checklist

[X] I read the extension guidelines
[X] I read the documentation about publishing
[X] I ran npm run build and tested this distribution build in Raycast
[X] I checked that files in the assets folder are used by the extension itself
[X] I checked that assets used by the README are placed outside of the metadata folder

Doesn't work in my fresh installation. Found some logs:
time:2023-03-27T20:49:02Z,type:exception,key:extension_bitwarden.search__5fdb86d3-dfcc-45a7-8969-8113b51434ab,message:Error: Command failed with exit code 1: /usr/local/bin/bw lock You are not logged in. time:2023-03-27T20:49:00Z,type:cmdLoading,ext:bitwarden,cmd:search,dev:false,mode:view,launchType:userInitiated time:2023-03-27T20:48:01Z,type:cmdUnloading,ext:bitwarden,cmd:search,dev:false,mode:view,launchType:userInitiated time:2023-03-27T20:48:01Z,type:exception,key:extension_bitwarden.search__5fdb86d3-dfcc-45a7-8969-8113b51434ab,message:Error: Command failed with exit code 1: /usr/local/bin/bw lock You are not logged in. time:2023-03-27T20:48:00Z,type:cmdLoading,ext:bitwarden,cmd:search,dev:false,mode:view,launchType:userInitiated time:2023-03-27T20:43:33Z,type:cmdUnloading,ext:bitwarden,cmd:search,dev:false,mode:view,launchType:userInitiated time:2023-03-27T20:43:33Z,type:exception,key:extension_bitwarden.search__5fdb86d3-dfcc-45a7-8969-8113b51434ab,message:Error: Command failed with exit code 1: /usr/local/bin/bw lock You are not logged in.
I use my own server and all settings is correct - server address and API credentials. I even tried to change API key.
if I try to run command manually in terminal, it works:
⟩ /usr/local/bin/bw lock
Your vault is locked.

⟩ bw status
{"serverUrl":"https://bw.XXX.YY","lastSync":"2023-03-26T09:44:33.216Z","userEmail":"XXXXX@gmail.com","userId":"XXXX","status":"locked"}`

Doesn't work in my fresh installation. Found some logs:
time:2023-03-27T20:49:02Z,type:exception,key:extension_bitwarden.search__5fdb86d3-dfcc-45a7-8969-8113b51434ab,message:Error: Command failed with exit code 1: /usr/local/bin/bw lock You are not logged in. time:2023-03-27T20:49:00Z,type:cmdLoading,ext:bitwarden,cmd:search,dev:false,mode:view,launchType:userInitiated time:2023-03-27T20:48:01Z,type:cmdUnloading,ext:bitwarden,cmd:search,dev:false,mode:view,launchType:userInitiated time:2023-03-27T20:48:01Z,type:exception,key:extension_bitwarden.search__5fdb86d3-dfcc-45a7-8969-8113b51434ab,message:Error: Command failed with exit code 1: /usr/local/bin/bw lock You are not logged in. time:2023-03-27T20:48:00Z,type:cmdLoading,ext:bitwarden,cmd:search,dev:false,mode:view,launchType:userInitiated time:2023-03-27T20:43:33Z,type:cmdUnloading,ext:bitwarden,cmd:search,dev:false,mode:view,launchType:userInitiated time:2023-03-27T20:43:33Z,type:exception,key:extension_bitwarden.search__5fdb86d3-dfcc-45a7-8969-8113b51434ab,message:Error: Command failed with exit code 1: /usr/local/bin/bw lock You are not logged in.
I use my own server and all settings is correct - server address and API credentials. I even tried to change API key.
if I try to run command manually in terminal, it works:
⟩ /usr/local/bin/bw lock
Your vault is locked.

⟩ bw status
{"serverUrl":"https://bw.XXX.YY","lastSync":"2023-03-26T09:44:33.216Z","userEmail":"XXXXX@gmail.com","userId":"XXXX","status":"locked"}`

That's odd, I don't see how these changes could affect the self-hosted server support.
I'm trying to setup a server to test it.
Where did you found these logs?

@jomifepe Extension Diagnostic:

Sorry, I'm not sure if this PR is the problem.
I decided to go back to Raycats after a few months on Alfred, installed the extension and immediately found this rather voluminous PR... But I have already used this extension with my server before and everything worked.
Thanks.

@jomifepe Extension Diagnostic:
Sorry, I'm not sure if this PR is the problem. I decided to go back to Raycats after a few months on Alfred, installed the extension and immediately found this rather voluminous PR... But I have already used this extension with my server before and everything worked.
Thanks.

Just saw the issue, the vault tries to lock while unauthenticated, open a PR to fix this.

@jomifepe Extension Diagnostic:
Sorry, I'm not sure if this PR is the problem. I decided to go back to Raycats after a few months on Alfred, installed the extension and immediately found this rather voluminous PR... But I have already used this extension with my server before and everything worked.
Thanks.

Should be fixed now, try it out


Error running external on Azure

Found your Medium post some months ago. Got the API working on Azure and running for a couple of months now, thanks for that.
But.. I tried to update the API today and pushed the new code to Azure and ended up with http 500 error codes. Seems to be an error in the http_asgi.py if i am not mistaken. This is the error i got from the Application Insights.
Do you know what the problem might be?
Exception while executing function: Functions.my-appname <--- Result: Failure Exception: TypeError: '<' not supported between instances of 'NoneType' and 'int' Stack: File "/azure-functions-host/workers/python/3.9/LINUX/X64/azure_functions_worker/dispatcher.py", line 402, in _handle__invocation_request call_result = await self._loop.run_in_executor( File "/usr/local/lib/python3.9/concurrent/futures/thread.py", line 58, in run result = self.fn(*self.args, **self.kwargs) File "/azure-functions-host/workers/python/3.9/LINUX/X64/azure_functions_worker/dispatcher.py", line 611, in _run_sync_func return ExtensionManager.get_sync_invocation_wrapper(context, File "/azure-functions-host/workers/python/3.9/LINUX/X64/azure_functions_worker/extension.py", line 215, in _raw_invocation_wrapper result = function(**args) File "/home/site/wwwroot/my-appname/__init__.py", line 230, in main return AsgiMiddleware(app).handle(req, context) File "/azure-functions-host/workers/python/3.9/LINUX/X64/azure/functions/_http_asgi.py", line 146, in handle return self._handle(req, context) File "/azure-functions-host/workers/python/3.9/LINUX/X64/azure/functions/_http_asgi.py", line 152, in _handle asgi_response = self._loop.run_until_complete( File "/usr/local/lib/python3.9/asyncio/base_events.py", line 642, in run_until_complete return future.result() File "/azure-functions-host/workers/python/3.9/LINUX/X64/azure/functions/_http_asgi.py", line 65, in from_app await app(scope, res._receive, res._send) File "/home/site/wwwroot/.python_packages/lib/site-packages/fastapi/applications.py", line 212, in __call__ await super().__call__(scope, receive, send) File "/home/site/wwwroot/.python_packages/lib/site-packages/starlette/applications.py", line 119, in __call__ await self.middleware_stack(scope, receive, send) File "/home/site/wwwroot/.python_packages/lib/site-packages/starlette/middleware/errors.py", line 181, in __call__ raise exc File "/home/site/wwwroot/.python_packages/lib/site-packages/starlette/middleware/errors.py", line 159, in __call__ await self.app(scope, receive, _send) File "/home/site/wwwroot/.python_packages/lib/site-packages/starlette/exceptions.py", line 87, in __call__ raise exc File "/home/site/wwwroot/.python_packages/lib/site-packages/starlette/exceptions.py", line 76, in __call__ await self.app(scope, receive, sender) File "/home/site/wwwroot/.python_packages/lib/site-packages/starlette/routing.py", line 659, in __call__ await route.handle(scope, receive, send) File "/home/site/wwwroot/.python_packages/lib/site-packages/starlette/routing.py", line 259, in handle await self.app(scope, receive, send) File "/home/site/wwwroot/.python_packages/lib/site-packages/starlette/routing.py", line 61, in app response = await func(request) File "/home/site/wwwroot/.python_packages/lib/site-packages/fastapi/routing.py", line 216, in app solved_result = await solve_dependencies( File "/home/site/wwwroot/.python_packages/lib/site-packages/fastapi/dependencies/utils.py", line 465, in solve_dependencies response = response or Response( File "/home/site/wwwroot/.python_packages/lib/site-packages/starlette/responses.py", line 50, in __init__ self.init_headers(headers) File "/home/site/wwwroot/.python_packages/lib/site-packages/starlette/responses.py", line 77, in init_headers and not (self.status_code < 200 or self.status_code in (204, 304))

We were getting this error recently as well. It appeared to be an issue between Starlette and FastAPI. This was not in an Azure function, but just running FastAPI locally using uvicorn.
The (magical) fix for us was to reinstall all the dependencies in the virtual environment, but I'm not sure how that works within an Azure Function app. You could try to version pin your dependencies in requirements.txt, potentially even including Starlette at it's most recent stable version, even though it's a dependency of FastAPI.

I have the issue with starlette==0.18.0 but not with starlette==0.17.1
Maybe due to this change https://github.com/encode/starlette/pull/1397 to fix https://github.com/encode/starlette/issues/1178


[JS]: Refactor Data, Vectors, Visitor, Typings, build, tests, dependencies

It's the big one; The Great ArrowJS Refactor of 2018. Thanks for bearing with me through yet another huge PR. Check out this sweet gif of all the new features in action. With streaming getting to a good place, we've already started working on demos/integrations with other projects like uber/deck.gl :tada:
The JIRAs
In addition to everything I detail below, this PR closes the following JIRAs:

ARROW-2828: Refactor Vector Data classes
ARROW-2839: Support whatwg/streams in IPC reader/writer
ARROW-2235: Add tests for IPC messages split across multiple buffers
ARROW-3337: IPC writer doesn't serialize the dictionary of nested Vectors
ARROW-3689: Upgrade to TS 3.1
ARROW-3560: Remove @std/esm
ARROW-3561: Update ts-jest
ARROW-2778: Add Utf8Vector.from
ARROW-2766: Add ability to construct a Table from a list of Arrays/TypedArrays

The stats
The gulp scripts have been updated to parallelize as much as possible. These are the numbers from my Intel Core i7-8700K CPU @ 3.70GHz × 12 running Ubuntu 18.04 and node v11.6.0:
$ time npm run build
[22:11:04] Finished 'build' after 39 s

real	0m40.341s
user	4m55.428s
sys	0m5.559s

$ npm run test:coverage
=============================== Coverage summary ===============================
Statements   : 90.45% ( 4321/4777 )
Branches     : 76.7% ( 1570/2047 )
Functions    : 84.62% ( 1106/1307 )
Lines        : 91.5% ( 3777/4128 )
================================================================================

Test Suites: 21 passed, 21 total
Tests:       5644 passed, 5644 total
Snapshots:   0 total
Time:        16.023s

The fixes

Vector#indexOf(value) works for all DataTypes
Vector#set(i, value) now works for all DataTypes
Reading from node streams is now fully zero-copy
The IPC writers now serialize dictionaries of nested Vectors correctly (ARROW-3337)
DictionaryBatches marked as isDelta now correctly updates the dictionaries for all Vectors that point to that dictionary, even if they were created before the delta batch arrived
A few arrow2csv fixes:

Ignore stdin if it's a TTY
Now read all the Arrow formats from stdin
Always show the help text when we don't understand the input
Proper backpressure support to play nicely with other Unix utilities like head and less

Fixes an unfiled bug we encountered last week where JS would throw an error creating RowProxies for a Table or Struct with duplicate column names

The upgrades

New zero-copy Message/RecordBatchReaders!

RecordBatchReader.from() will peek at the underlying bytes, and return the correct implementation based on whether the data is an Arrow File, Stream, or JSON
RecordBatchFileReader now supports random-access seek, enabling more efficient web-worker/multi-process workflows
RecordBatchStreamReader can now read multiple tables from the same underlying socket
MessageReader now guarantees/enforces message body byte alignment (this one even surfaced bugs in node core and the DOM streams polyfill)

New RecordBatchWriters

Adds RecordBatchJSONWriter, RecordBatchFileWriter and RecordBatchStreamWriter
Adds static RecordBatchWriter.writeAll() method to easily write a Table or stream of RecordBatches
Both sync and async flushes based on the WritableSink

Full integration with platform I/O primitives

We can still synchronously read JSON, Buffers, Iterable<Buffer>, or AsyncIterable<Buffer>
In node, we can now read from any ReadableStream, fs.FileHandle
In the browser, we can read from any ReadableStream or ReadableByteStream, or the Response returned from the fetch() API. (Wrapping the FileReader is still todo)
We also accept Promises of any of the above
New convenience methods for integrating with node or DOM streams

throughNode()/throughDOM()
toReadableNodeStream()/toReadableDOMStream()
pipe()/pipeTo()/pipeThrough()

Generic type parameters inherited from DataType now flow recursivelyconst table = Table.from<{ str: Utf8, i32: Int32, bools: List<Bool> }>(data);
table.get(0); // will be of type { str: string, i32: number, bools: BoolVector }

New simplified Data class
New simplified, faster Visitor class with support for optional, more narrow visitT implementations

New specialized Visitor implementations to enable runtime reflection (e.g. dynamically lookup the Vector constructor for a given DataType)

New abstract Chunked base class for the applicative (concat) operation

public chunkedInst.chunks field is the list of inner chunks

New Column class extends Chunked, combines Field with the chunks (provides access to the field name from the Schema)
RecordBatch#concat(...batchesOrTables) now returns a Table
Table now extends Chunked, so it inherits:

Table#slice(from, to)
Table#concat(...batchesOrTables)
Table#getChildAt(i) exists, alias of getColumnAt(i)

Table#getColumn[At]() returns a Column

The breaking changes

All the old IPC functions are gone, but the new APIs will live for much longer
Table#batches is now Table#chunks, which it inherits from Chunked (maybe controversial, open to aliasing)
Table#batchesUnion is now just... the Table instance itself (also maybe controversial, open to aliasing)
DataType#TType is now DataType#typeId -- it should have always been this, was a typo. Easy to alias if necessary.
The complicated View classes are now gone, logic centralized as specialized Visitors

The tests

Tests no longer rely on any C++ or Java generated integration files
Integration tests have been moved into bin/integration.js, and they finish much quicker
The tsconfig files have been tweaked to speed up test run time and improve the async debugging experience
A streaming RecordBatchJSONWriter has been implemented so we can easily debug and validate written output

The JSON results are also tested against the corresponding binary representation, similar to the integration tests

A suite of test-data helpers have been added to auto-generate data for validation at runtime

They produce the underlying Arrow VectorData buffers, as well as the expected plain-JS-value representation for verification
This allows us to test all possible type configuration combinations, e.g. all types Dictionary-encode, all types serialize when nested, etc.

A suite of IO test helpers has been added

We use memfs to mock the file system, which contributes to test performance improvements
This enables us to easily test all the flavors of io primitives across node and browser environments

A vscode debugging launch configuration has been added to ease the process of contributing more tests (and because I've been asked for mine so often)

The build

Faster
Node 11+ (needs Symbol.asyncIterator enabled)
Closure-compiler upgrades and build enhancements mean we can auto-generate the externs file during compilation, rather than maintaining it by hand

Misc

Added arrow2csv to js/bin/arrow2csv, so anybody with the JS project dependencies installed can easily view a CSV-ish thing (cat foo.arrow | js/bin/arrow2csv.js)

Todos

Docs/Recipes/Examples
Highlight/write more tools (like arrow2csv)
Flesh out the RecordBatchWriters a bit more
Gather feedback on the new RecordBatchReader APIs

Codecov Report

Merging #3290 into master will decrease coverage by 0.06%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master    #3290      +/-   ##
==========================================
- Coverage   88.58%   88.51%   -0.07%
==========================================
  Files         539      539
  Lines       72987    72968      -19
==========================================
- Hits        64654    64588      -66
- Misses       8228     8273      +45
- Partials      105      107       +2

Impacted Files
Coverage Δ

go/arrow/math/int64_avx2_amd64.go
0% <0%> (-100%)
:arrow_down:

go/arrow/memory/memory_avx2_amd64.go
0% <0%> (-100%)
:arrow_down:

go/arrow/math/float64_avx2_amd64.go
0% <0%> (-100%)
:arrow_down:

go/arrow/math/uint64_avx2_amd64.go
0% <0%> (-100%)
:arrow_down:

go/arrow/math/float64_amd64.go
33.33% <0%> (-33.34%)
:arrow_down:

go/arrow/math/int64_amd64.go
33.33% <0%> (-33.34%)
:arrow_down:

go/arrow/math/uint64_amd64.go
33.33% <0%> (-33.34%)
:arrow_down:

go/arrow/math/math_amd64.go
31.57% <0%> (-31.58%)
:arrow_down:

go/arrow/memory/memory_amd64.go
28.57% <0%> (-28.58%)
:arrow_down:

cpp/src/arrow/python/numpy_to_arrow.cc
93.03% <0%> (-0.84%)
:arrow_down:

... and 8 more

Continue to review full report at Codecov.

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

@trxcllnt This seems to include some unwanted commits. Can you rebase on latest master?

@xhochy I've tried doing git rebase apache/master, but each time it rebases all the way back to the initial commit, then fails with a merge conflict on the README.md file. I'm happy to give it another shot if you have any tips (also available in slack).

@trxcllnt Also had a look at this and I don't know what's going wrong here. Really puzzled.

I can look at fixing this tomorrow. How much do you care about maintaining the commit history?

The problem is that this patch started before the Parquet monorepo merge. Something about the merged repo history confuses rebase when the base commit is before the merge

Done. Please git reset --hard to that commit

Thanks @wesm, I pulled and it all looks good. We can do feedback in followup PRs or discussions on the mailing list. Let me know if I can help point out where things are, or if you have any questions about what's going on.
The generated-data-tests are a great place to start. In addition to comprehensive tests across all the kinds of I/O primitives we want to support, I've tried to add as many real-world scenarios as possible (like reading and writing multiple tables to the same stream), which come from use cases at Graphistry. If you're curious about how the I/O tests work, check out ipc/helpers.ts. That's helper functions to generate and validate each I/O primitive.
Here's a checklist to build and test locally:

install/update to node v11.x (nvm install node will update to the latest)
$ cd arrow/js && rm -rf node_modules && npm install to ensure libraries are up to date
$ npx gulp will clean, build, and test everything

While there are always things to improve, I feel good this is ready to merge. I've been updating the Graphistry codebase to use the new APIs with no issues, and I've started work (tweet) on libraries to integrate with other tools in the node ecosystem.


html-webpack-plugin 5 peer dep

Please, can you update the package.json definition to support html-webpack-plugin 5?
"peerDependencies": {
    "html-webpack-plugin": "^3 || ^4 || ^5"
},

Otherwise:
npm ERR! code ERESOLVE
npm ERR! ERESOLVE unable to resolve dependency tree
npm ERR!
npm ERR! While resolving<EMAIL_ADDRESS>npm ERR! Found<EMAIL_ADDRESS>npm ERR! node_modules/html-webpack-plugin
npm ERR<EMAIL_ADDRESS>from the root project
npm ERR!
npm ERR! Could not resolve dependency:
npm ERR! peer<EMAIL_ADDRESS>|| ^4.0.0" from<EMAIL_ADDRESS>npm ERR! node_modules/html-inline-css-webpack-plugin
npm ERR!   html-inline-css-webpack-plugin@"*" from the root project

Thank you.

As additional detail. Using filter option, nothing is emitted inside the HTML file, eve if the filter does match.

Hi @daniele-orlando , I've updated the peer dependencies and released a new version to NPM. For the filter issue, can you provide a minimal demo to reproduce that?

As additional detail: using filter option, nothing is injected inside the HTML file, even if the filter does match; but the matched files are deleted from the filesystem.

@Runjuu I'm experiencing the same problem with the following example:
new HTMLInlineCSSWebpackPlugin({
        filter: (fileName) => {
            return fileName.includes('critical')
        },
        styleTagFactory: ({ style }) => {
            return `<style type="text/css">${style}</style>`;
        },
        leaveCSSFile: true,
        replace: {
            removeTarget: true,
            target: '<!-- inline_css_plugin -->',
        },
    }),

The weird part is that if I set the filter for the negative, the other files are included inline:
return !fileName.includes('critical')

UPDATE: I went to try other versions and in the 1.3.2 is the last one working. Hope it helps.


fix(portmapper): enforce timeouts for upnp

Closes #2876

What do you think of merging #2880 into this PR, then merging this? I think that's probably how we should do this.

What do you think of merging #2880 into this PR, then merging this? I think that's probably how we should do this.

yes, please do


DRC issue with nangate45/bp_multi

Describe the bug
Detailed route leaves the design with 3 DRCs (previously 0).
Expected Behavior
No DRCs are expected.
Environment
[WARNING] Your current OpenROAD version is outdated.
It is recommened to pull the latest changes.
If problem persists, file a github issue with the re-producible test case.
kernel: Linux 5.8.7-050807-lowlatency
os: Ubuntu 20.04.6 LTS (Focal Fossa)
cmake version 3.24.2
-- The CXX compiler identification is GNU 9.4.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- OpenROAD version: v2.0-9491-g3aee924c6
-- System name: Linux
-- Compiler: GNU 9.4.0
-- Build type: RELEASE
-- Install prefix: /usr/local
-- C++ Standard: 17
-- C++ Standard Required: ON
-- C++ Extensions: OFF
-- The C compiler identification is GNU 9.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Found Python: /home/harsh/work/harsh/sor/OpenROAD-flow-scripts/flow/.venv/bin/python3.8 (found version "3.8.10") found components: Interpreter
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE
-- Performing Test C_COMPILER_SUPPORTS__-Wall
-- Performing Test C_COMPILER_SUPPORTS__-Wall - Success
-- Performing Test CXX_COMPILER_SUPPORTS__-Wall
-- Performing Test CXX_COMPILER_SUPPORTS__-Wall - Success
-- Performing Test C_COMPILER_SUPPORTS__-Wno-array-bounds
-- Performing Test C_COMPILER_SUPPORTS__-Wno-array-bounds - Success
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-array-bounds
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-array-bounds - Success
-- Performing Test C_COMPILER_SUPPORTS__-Wno-nonnull
-- Performing Test C_COMPILER_SUPPORTS__-Wno-nonnull - Success
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-nonnull
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-nonnull - Success
-- Performing Test C_COMPILER_SUPPORTS__-Wno-maybe-uninitialized
-- Performing Test C_COMPILER_SUPPORTS__-Wno-maybe-uninitialized - Success
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-maybe-uninitialized
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-maybe-uninitialized - Success
-- Performing Test C_COMPILER_SUPPORTS__-Wno-format-overflow
-- Performing Test C_COMPILER_SUPPORTS__-Wno-format-overflow - Success
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-format-overflow
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-format-overflow - Success
-- Performing Test C_COMPILER_SUPPORTS__-Wno-unused-variable
-- Performing Test C_COMPILER_SUPPORTS__-Wno-unused-variable - Success
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-unused-variable
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-unused-variable - Success
-- Performing Test C_COMPILER_SUPPORTS__-Wno-unused-function
-- Performing Test C_COMPILER_SUPPORTS__-Wno-unused-function - Success
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-unused-function
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-unused-function - Success
-- Performing Test C_COMPILER_SUPPORTS__-Wno-write-strings
-- Performing Test C_COMPILER_SUPPORTS__-Wno-write-strings - Success
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-write-strings
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-write-strings - Success
-- Performing Test C_COMPILER_SUPPORTS__-Wno-sign-compare
-- Performing Test C_COMPILER_SUPPORTS__-Wno-sign-compare - Success
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-sign-compare
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-sign-compare - Success
-- Performing Test C_COMPILER_SUPPORTS__-Wno-deprecated
-- Performing Test C_COMPILER_SUPPORTS__-Wno-deprecated - Success
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-deprecated
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-deprecated - Success
-- Performing Test C_COMPILER_SUPPORTS__-Wno-c++11-narrowing
-- Performing Test C_COMPILER_SUPPORTS__-Wno-c++11-narrowing - Failed
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-c++11-narrowing
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-c++11-narrowing - Failed
-- Performing Test C_COMPILER_SUPPORTS__-Wno-register
-- Performing Test C_COMPILER_SUPPORTS__-Wno-register - Failed
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-register
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-register - Success
-- Performing Test C_COMPILER_SUPPORTS__-Wno-format
-- Performing Test C_COMPILER_SUPPORTS__-Wno-format - Success
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-format
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-format - Success
-- Performing Test C_COMPILER_SUPPORTS__-Wno-reserved-user-defined-literal
-- Performing Test C_COMPILER_SUPPORTS__-Wno-reserved-user-defined-literal - Failed
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-reserved-user-defined-literal
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-reserved-user-defined-literal - Failed
-- Performing Test C_COMPILER_SUPPORTS__-fpermissive
-- Performing Test C_COMPILER_SUPPORTS__-fpermissive - Failed
-- Performing Test CXX_COMPILER_SUPPORTS__-fpermissive
-- Performing Test CXX_COMPILER_SUPPORTS__-fpermissive - Success
-- Performing Test C_COMPILER_SUPPORTS__-x
-- Performing Test C_COMPILER_SUPPORTS__-x - Failed
-- Performing Test CXX_COMPILER_SUPPORTS__-x
-- Performing Test CXX_COMPILER_SUPPORTS__-x - Failed
-- Performing Test C_COMPILER_SUPPORTS__c++
-- Performing Test C_COMPILER_SUPPORTS__c++ - Failed
-- Performing Test CXX_COMPILER_SUPPORTS__c++
-- Performing Test CXX_COMPILER_SUPPORTS__c++ - Failed
-- Performing Test C_COMPILER_SUPPORTS__-Wno-unused-but-set-variable
-- Performing Test C_COMPILER_SUPPORTS__-Wno-unused-but-set-variable - Success
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-unused-but-set-variable
-- Performing Test CXX_COMPILER_SUPPORTS__-Wno-unused-but-set-variable - Success
-- TCL library: /usr/lib/x86_64-linux-gnu/libtcl.so
-- TCL header: /usr/include/tcl/tcl.h
-- TCL readline library: /usr/lib/x86_64-linux-gnu/libtclreadline.so
-- TCL readline header: /usr/include/x86_64-linux-gnu
-- Found SWIG: /usr/bin/swig (found suitable version "4.1.0", minimum required is "3.0")
-- Using SWIG >= 4.1.0 -flatstaticmethod flag for python
-- Found Boost: /usr/local/lib/cmake/Boost-1.80.0/BoostConfig.cmake (found version "1.80.0")
-- boost: 1.80.0
-- Found Python3: /usr/include/python3.8 (found version "3.8.10") found components: Development Development.Module Development.Embed
-- Found ZLIB: /usr/lib/x86_64-linux-gnu/libz.so (found version "1.2.11")
-- spdlog: 1.8.1
-- Found BISON: /usr/bin/bison (found version "3.5.1")
-- Found Doxygen: /usr/bin/doxygen (found version "1.8.17") found components: doxygen dot
-- STA version: 2.4.0
-- STA git sha: 3275a304e17092895b7d7721148edc7dc67ba3aa
-- System name: Linux
-- Compiler: GNU 9.4.0
-- Build type: RELEASE
-- Build CXX_FLAGS: -O3 -DNDEBUG
-- Install prefix: /usr/local
-- Found FLEX: /usr/bin/flex (found version "2.6.4")
-- TCL library: /usr/lib/x86_64-linux-gnu/libtcl.so
-- TCL header: /usr/include/tcl/tcl.h
-- Check if compiler accepts -pthread
-- Check if compiler accepts -pthread - yes
-- SSTA: 0
-- STA executable: /scratch/harsh/sor/OpenROAD-flow-scripts/tools/OpenROAD/src/sta/app/sta
-- GPU is not enabled
-- TCL library: /usr/lib/x86_64-linux-gnu/libtcl.so
-- TCL header: /usr/include/tcl/tcl.h
-- Found re2: /opt/or-tools/lib/cmake/re2/re2Config.cmake (found version "9.0.0")
-- Found Clp: /opt/or-tools/lib/cmake/Clp/ClpConfig.cmake (found version "1.17.7")
-- Found Cbc: /opt/or-tools/lib/cmake/Cbc/CbcConfig.cmake (found version "2.10.7")
-- Found Eigen3: /usr/local/share/eigen3/cmake/Eigen3Config.cmake (found version "3.4.0")
-- Found SCIP: /opt/or-tools/lib/cmake/scip/scip-config.cmake (found version "8.0.1")
-- GUI is enabled
-- Charts widget is not enabled
-- Found Boost: /usr/local/lib/cmake/Boost-1.80.0/BoostConfig.cmake (found version "1.80.0") found components: serialization
-- Found OpenMP_CXX: -fopenmp (found version "4.5")
-- Found OpenMP: TRUE (found version "4.5")
-- Could NOT find VTune (missing: VTune_LIBRARIES VTune_INCLUDE_DIRS)
-- Found Boost: /usr/local/lib/cmake/Boost-1.80.0/BoostConfig.cmake (found suitable version "1.80.0", minimum required is "1.78")
-- TCL library: /usr/lib/x86_64-linux-gnu/libtcl.so
-- TCL header: /usr/include/tcl/tcl.h
-- Found Boost: /usr/local/lib/cmake/Boost-1.80.0/BoostConfig.cmake (found version "1.80.0") found components: serialization system thread
-- Found Boost: /usr/local/lib/cmake/Boost-1.80.0/BoostConfig.cmake (found version "1.80.0")
-- TCL readline enabled
-- Tcl Extended disabled
-- Python3 enabled
-- Configuring done
-- Generating done
-- Build files have been written to: /tmp/tmp.xX09ZehTA3

To Reproduce
Please use this testcase:
https://drive.google.com/file/d/1DS6PoxeLgn3ZzLdMYHI9JfBRiv9PjsmZ/view?usp=sharing
Relevant log output
N/A
There are 3 DRC errors with this branch. Maybe the investigation needs to wait until this Pr is merged:

https://github.com/The-OpenROAD-Project/OpenROAD/pull/3668

Screenshots
N/A
Additional Context
No response

@openroadie This is not specific to your changes in this PR. These 3 violations keep appearing every now and then with small changes upstream. The solution to this issue is not straight forward right now but I am looking into it. Tackling this issue would require adapting new strategies for such violations at the end of routing.

@maliberty I am currently testing with introducing new ripup mode where I rip up neighboring nets to the marker. I am bloating the marker by 4 times its size and ripping all the nets in that area. It's still in development.

@osamahammad21 will that bloat become another strategy variable or will you do it all the time?


Give iframe parent control over tab layout

Issue: currently reports are displayed in an iframe and when you scroll the report you lose track of the Tabs.
Solution: give SeaSketch information to render its own tab layout.
Requirements:

Give SeaSketch information on tabs on load of iframe, such that it can render the tab layout and report does not.
Support a context menu (3 dot menu) that SeaSketch can put to the far right of the tabs.
Allow SeaSketch to trigger change of report page displayed when clicked.

Event changes:

seasketch init message - add renderTabs: boolean property for SeaSketch to signal intent to render tabs and report layout should not .
report init ready response that follows will include:

tabs: [{ tabId: string, accessGroups: string[], tabName: string, localization: Record<locale, label>

accessGroups is an indication of which groups should have access to this report

assume If tabs undefined, then there are no available tabs
See how SeaSketch passes sketch attribute localization for example data structure

changeTab event - tab ID.  triggers report tab change

Need to review iframe API to make this spec more exact, it's off the top of my head.

@underbluewaters I'm open to suggestion on how the report should signal to seasketch who should be able to view/use a given tab.  We had talked about an adminOnly property that can be provided for each tab, but that seems pretty inflexible.  What if we have a specific subset of community members that should have access to a tab, instead of or in addition to admins?  Maybe that's not the concern of the reporting side to control.  I proposed here accessGroups: string[] instead.  I'm just thinking of a structure that won't require breaking changes later necessarily.

Groups is a better idea. Admins should be able to see everything anyways. I wouldn't want to use the group label since that could change, but I could make a short unique string id for groups available for copying from the admin interface.


Refine bash major version check

The previous bash version check, bash --version | grep ... , may not work when the output is not in English (for example, it didn't work when the output was in Italian).
For the same reason, I've modified also the line 113, to output the first command output of bash --version without checking for the content.
This addresses Issue #649

LGTM, thanks for contributing!


Paste authenticator code

Currently we can paste our password into runelite which is a great QOL feature.
Can we be able to paste our authenticator codes?

This seems to be functionality already built into the game.


Show Katex: I made a quick  for Katex this morning

Hi, I thought it would be easier to use for non-programmers inside HTML pages.
<katex-element>\sqrt{x}</katex-element>
https://github.com/georges-gomes/katex-element

Only for recent browsers.
Not working 100% but happy to work it out

Cheers

Nice!  It's probably best to keep this as an external library.  If you want, please add a link to your project in https://github.com/KaTeX/KaTeX/blob/master/docs/libs.md.

Pull request done 👍 I guess you can just close this issue :D
Have a nice day all!

@georges-gomes thanks for the pull request and for making this custom element.


FCM registration token colon not allowed

I'm getting the following error when calling CreateOrUpdateInstallationAsync:

ArgumentException:  The path sb://xxxxxxxxx.servicebus.windows.net/splashnotifdev/installations/xxxxxx:xxxxxxxxxxxxx?api-version=2017-04&" contains character(s) that are not allowed by Service Bus. Entity segments can contain only letters, numbers, periods (.), hyphens (-), and underscores (_)..TrackingId:98f12ac0-c905-4a63-a68d-c77f61cdb1ad_G5,TimeStamp:6/1/2019 3:16:11 PM

Where the installationId obtained from Firebase's onSuccessListener is a token with colon in it.
The token appears to be similar to a GCM token but prefixed with a few characters and a colon, e.g. (rest of the token masked):
dTxbVurMB3E:APA91bFsadfjklasfhjdsajkfdhaslkfhdjklsafhjklasdhlhasklfhjkasfhdjlkasfhdasjkdhf
Note that I am not calling this from Android, but passing the token to a .NET backend which calls the CreateOrUpdateInstallationAsync() method. I've also tried urlencoding the token or replacing : with %3a, which only leads to an Unauthorized error (despite the SAS working correctly, e.g. for Apns registrations).

UnauthorizedAccessException: The remote server returned an error: (401) Unauthorized. Reason: 40104: Invalid authorization token audience..TrackingId:7cf7cb94-9041-486c-8ccd-72e4f1d68d40,TimeStamp:2019-06-01T15:25:41.5055837Z

This is by design. The token provided by FCM is not intended to be used as the installation ID. The token value can change over time, while the intention of the installation ID is to uniquely identify a particular app installation. The installation ID should be stable, while the FCM token should be specified as a property of the installation and updated frequently.

@brannon does this mean that for fcm, we can only use registrations and not installations?

@marcobaldo no, it means you shouldn't use the FCM token as the installation ID. They are not the same thing. The installation ID can be any valid value. People typically use a GUID. It should be a value that you know and control.
The FCM token is not a value that you control and it contains characters that are not valid for use in the installation ID. The FCM token will change occasionally and unexpectedly.
When you create (or update) the installation you should set the PushChannel property to the value of the FCM token.

@brannon that makes so much more sense.


Increase range hint for StyleBoxFlat border_width, corner_radius and expand_margin

Decrease the range that is visible in the sliders for better usability in dragging (the upper bound matches shadow_size). The value that can be entered manually is now unlocked, so you can enter a value as high as desired.

This closes https://github.com/godotengine/godot-proposals/issues/11006.

Thanks!


Batch Job didn't wait delayed time

Laravel Version: ^8
PHP Version: 7.4
Database Driver & Version: Mysql 8

Description:
$jobs[] =  (new FirstJob)->delay(now()->addSeconds(90));
$jobs[] =  (new SecondJob)->delay(now()->addSeconds(120));
Bus::batch([$jobs])->->dispatch();
the first job dispatched without waiting to it's delayed time
Steps To Reproduce:

Laravel uses "sync" queue driver by default. Did you try to run it with some another driver?

Laravel uses "sync" queue driver by default. Did you try to run it with some another driver?

Yes I tried with redis
the issue here they add them as a chain but the first one dispatched first
https://github.com/laravel/framework/blob/6216534f14c7cb8bdfa213e5f7e3d357119a4579/src/Illuminate/Bus/Batch.php#L161-L197


subscribe to topics - Do not merge yet

It's working but I'll clean up some code before

example:
// inside the register success event
gcm.subscribe({
            topic: "/topics/global",
            success: onSuccessTopic,
            error: onErrorTopic
});

// callback functions
function onSuccessTopic(e){
    console.log("success topic");
}
function onErrorTopic(e){
    console.log("error topic");
}

added the same syntax for unsubscribe

ready to merge

Thanks, why would you want to subscribe to a topic within the success handler of registerPush()?
Why not make it completely separate calls, like so:
gcm.subscribe({
            senderId: "SENDER_ID",
            topic: "/topics/global",
            success: function(event) { ... },
            error: function(event { ... }
});

and
gcm.unsubscribe({
            senderId: "SENDER_ID",
            topic: "/topics/global",
            success: function(event) { ... },
            error: function(event { ... }
});

Also please make any additional relevant properties available in the event callbacks.

I've just put it in there because I wanted to be sure that it is registered to the push before subscribing to a channel. It can be used outside already. I've added the senderId to the function call and separated the getToken() function so you can even use that to just get the token.
Also I've added the topic to the callback again. Both functions (subscribe/unsub) return void so there isn't really much to add there


Vaultwarden 1.27

Upgrade chart to Vaultwarden v1.27. Chart major version change as SMTP settings are not backwards compatible (see README for details). Thanks @lord-kyron for the initial code to handle SMTP upgrades (#36).
Closes #35
Closes #31

Note that this PR also deprecates the bitwardenrs chart, users are encouraged to migrate to the vaultwarden chart instead.


Don't enable RibbonClientHttpRequestFactory by default

This should be opt-in as Ribbon's RestClient is deprecated.

/cc @twicksell and @jkschneider

One last thought on this: Isn't the use of RibbonClientHttpRequestFactory already an opt-in because you must annotate your rest template bean with @LoadBalanced? It seems redundant to also have to opt-in with an environment property as well.
What is the behavior when the property ribbon.http.client.enabled is false but a RestTemplate has been annotated with @LoadBalanced? Is there a plan to use an alternate request factory that uses some other mechanism for load balancing?

@tkvangorder The commons LoadBalancerInterceptor kicks in. It uses the standard spring wired http client. RibbonClientHttpRequestFactory was mostly a request from Netflix. When I met with them last week, we decided it should be opt in.

Gotcha, makes sense.

Is there any ClientHttpRequestFactory provided by default to use with restTemplate for service discovery (use of http://serviceId/something) instead of RibbonClientHttpRequestFactory?

@vajda Could you please clarify the question? RibbonClientHttpRequestFactory is what provides the functionality that allows you to use client names (e.g. serviceId) in your requests. Are you looking for a non-Ribbon alternative?

@vajda & @jkschneider We have two implementations:

The commons LoadBalancerInterceptor just reconstructs the url and lets vanilla spring handle the http connection. This is the default. It is not a ClientHttpRequestFactory but a request interceptor.
The spring cloud netflix RibbonClientHttpRequestFactory which uses the netflix ribbon client to for http. This is not enabled by default. You must use ribbon.http.client.enabled=true to use it. This is the only ClientHttpRequestFactory we have.

@spencergibb @jkschneider
A question I have: Since the Netflix ribbon http client has been deprecated and the code hints at using the Netflix Netty client instead, are there any plans to add a RibbonNettyClientHttpRequestFactory when using the AsyncRestTemplate?

From what I understand, they don't use it either:

https://github.com/Netflix/ribbon/issues/248#issuecomment-209131962
https://github.com/Netflix/ribbon/issues/243

What I can see happening is a reactive http client coming in Spring 5 via Boot 2 that we would integrate with.

Makes sense, thanks for the clarification.

@spencergibb Thanks for clarification.


Python on riscv

Hi
Python on riscv is going to be a game changer.  We don't have a python cross compiler for riscv

Thanks for your suggestion. Currently CPython has already been ported to the RV64GC platform. python can be run using an interpreter.
I wonder if you are mentioning some specific python compilers or modules? Would you like to paste the url of tools/softwares you mentioned?

Actually I was thinking of a python cross compiler for riscv.


Support Custom Policy on GenerateJteWorker

This is related to https://github.com/casid/jte/pull/256
Runtime compiled templates are working fine.
However, we precompile templates for non-development environments using the gradle plugin, and even with both the library and plugin on version 3.0.3, this happens.
* What went wrong:
Execution failed for task ':oak-konsole:generateJte'.
> There was a failure while executing work items
   > A failure occurred while executing gg.jte.gradle.GenerateJteWorker
      > Failed to compile components/OakSelect.kte, error at line 16: Illegal HTML attribute name data-${dataControllerTarget}-target! Expressions in HTML attribute names are not allowed.

Looking at how the TemplateEngine is initiated here
https://github.com/casid/jte/blob/62159c17baabc89379992d08f8ca9a10b51dc013/jte-gradle-plugin/src/main/java/gg/jte/gradle/GenerateJteWorker.java#L26-L38
I don't see anything that allows for passing in our HotwirePolicy.  Is there a way to do so that I'm not seeing.  If not, could you support one?

Problem is, that the generate task does not have access to project classes yet.
You could change your build to use the precompile task, which has the property htmlPolicyClass.
Since this is gradle, you could probably add a htmlPolicy property to gg.jte.gradle.GenerateJteTask. But then you would have to duplicate your policy class.

I split my Gradle projects into sub-projects. For example, JTE is in a 'views' sub-project, your policy could be in a 'shared' sub-project that 'views' depends on, and your server code in a 'server' sub-project that depends on both.
For the data that should be passed in to JTE template rendering, I put interfaces in the 'views' project and have model classes in the 'server' project implement them.

Checking things before I make changes, but looking here
https://github.com/casid/jte/commit/ee6ae33707ba2315f3cce4ddf40ff1ad190a1478#diff-7c5716f58e03a18d258b4117d29790f25e14f0c2ddc98cb301b2ea144189e220R39
The JteExtension class already has place for HtmlPolicy, but we've tried it out - nothing happens - and looking through the code and the recent PR from @edward3h it doesn't appear to be connected up to the actual TemplateEngine, unless I'm missing some typical gradle indirection

I'm a bit slow, now that I've been digging into the code and docs together with your feedback I can see what's happening.  Will keep trying to get this part to work and report back here

@casid you can close this issue, we have it working with precompile.  We did duplicate the policy class, as having the project gradle aware of the one buried in the application source code was a bit awkward for a few reasons, but that's a very minor tradeoff.
generate ends up being no use to use.  What is the intended use-case there?


How to watch/match Event::Applied, Event::Deleted and Event::Restarted on multiple watchers of different types

    let secrets: Api<Secret> = Api::namespaced(client.clone(), "default");
    let secrets_watcher = watcher(secrets, ListParams::default().labels("owner!=helm"));

    let certs: Api<crd::Certificate> = Api::namespaced(client, "default");
    let certs_watcher = watcher(certs, ListParams::default());

    let mut combo_stream = stream::select_all(vec![
        try_flatten_touched(secrets_watcher)
            .map_ok(Watched::Secret)
            .boxed(),
        try_flatten_touched(certs_watcher)
            .map_ok(Watched::Certificate)
             .boxed(),
    ]);

This works, but it is not possible to find what actually happened, apply, delete or restart.
My idea was to iterate over watchers.try_next().await and get exact events with resources, but I can't achieve this:
let watchers = vec![secrets_watcher.boxed(), certs_watcher.boxed());
let mut combo_stream = stream::select_all(watchers);

So, this was my idea, but of course elements in the vector are of different types so this won't compile. What type of the vector it should actually be to accept watcher of any kind of resource?

You could map the Event's K into your Watched enum`:
let mut combo_stream = stream::select_all(vec![
    secrets_watcher.map_ok(|ev| match ev {
        Event::Applied(obj) => Event::Applied(Watched::Secret(obj)),
        Event::Deleted(obj) => Event::Deleted(Watched::Secret(obj)),
        Event::Restarted(objs) => Event::Restarted(objs.into_iter().map(Watched::Secret).collect()),
    }).boxed(),
    certs_watcher.map_ok(|ev| match ev {
        Event::Applied(obj) => Event::Applied(Watched::Certificate(obj)),
        Event::Deleted(obj) => Event::Deleted(Watched::Certificate(obj)),
        Event::Restarted(objs) => Event::Restarted(objs.into_iter().map(Watched::Certificate).collect()),
    }).boxed(),
]);

That said, I'm not sure that I'd actually recommend going this direction. If you just want to watch two different types then two completely separate watcher chains will probably end up clearer. If this is some kind of ownership (or primary-and-auxilary), a Controller (or its big brother applier) is probably closer to what you want.

Thank you so much. I am still learning Rust ;)


Add ejson support

Fixes #2 (better late than never).
Example usage:
syncrets sync vault://vault-a/secret/ ./out.ejson

The resulting out.ejson file can be used with the ejson tool as you would expect, for example:
ejson output
cat ./out.ejson

{"_public_key":"a9d52487a1232e5c292a9680f4a44a84ea302ba05ff12d2e9d11662d20fc0139",
"secret":{"foo":{"bar":"EJ[1:3F3LGN6axp2BB42kcsaxHKSX8MT0XT5WJOgBbA3J7jc=:21NJJuRdHJ2LXqIVXEmHcsqNKZEJZz0D:7zeyImRAOcOXlYveAQSNSxUzviyeNg==]"}}}%

ejson decrypt
export EJSON_KEYDIR=~/.ejson/keys; ejson decrypt ./out.ejson

{"_public_key":"a9d52487a1232e5c292a9680f4a44a84ea302ba05ff12d2e9d11662d20fc0139",
"secret":{"foo":{"bar":"foobar"}}}%

Yeesh, almost a year from when I started working on this PR to when I found hobby time again to finish it off. Yikes.

Glad to see you're finding hobby time for this! 😁


Add a note about the lack of transformations in v6, give a presets example.

Sorry for the initially blank message, I hit return instead of backspace while editing the title... So:
See https://phabricator.babeljs.io/T6711
In their current state, the docs are not very helpful for newcomers.
The only mention of the lack of transformations post v6 is in the .babelrc section, and you must navigate too many pages to get Babel to perform what you'd expect it to do (i.e. more than syntax validation).
This may make #609 superfluous.

Hopefully you're in a bad day...

I'm not going to go back and forth on this for two hours when I'm already working on rewriting all of this.

Hopefully for the best.
I hoped that my perspective as a new Babel user[†] would be useful to you. I'm basically the target audience of these pages, advanced users don't need them.
The tutorial in its current form allows to follow along on the command line, interactively discovering the cli tool, and it's rather good IMO.
A NPM scripts-based workflow would be much more cumbersome.

†. I've actually submitted a Babel patch in the past, but it was for a bug encountered by the user of a lib of mine that exports a default IIFE, among other module options, I hadn't used Babel personally.

I hoped that my perspective as a new Babel user[†] would be useful to you. I'm basically the target audience of these pages, advanced users don't need them.

Of course it's useful, but I gone through hundreds of individual people's problems, and not installing things locally is a huge issue (especially after 6.0 was released). This documentation needs to teach users the best practices.

The tutorial in its current form allows to follow along on the command line, interactively discovering the cli tool, and it's rather good IMO.
A NPM scripts-based workflow would be much more cumbersome.

Many users will stop reading documentation as soon as they get something running. If you get them doing that too early, many will never read the parts that explain what they actually should be doing. So even though it might be a few more steps to follow initially, it pays of in the long run because everyone ends up doing things the right way.

I'm sorry I didn't sit down and explain this all right away, but I go through hundreds of issues and it becomes exhausting to have to explain myself to every single person. In the future please just trust that as the maintainer of a project I know what I'm talking about.
And please don't go saying mean things about me on twitter just because I wasn't willing to drop 20 minutes of my time to write out a lengthy response on a relatively inconsequential issue.
This is why people burn out on projects.

And please don't go saying mean things about me on twitter...

Not very proud of that one, sorry. The exchange was painful to me and I needed to vent, but I should have refrained, and I apologize.
People burn out because:

They are overworked, and it looks like you may be reaching capacity. Running such a large and growing project as a two men show must be exausting.

They don't get the respect they think they're due. In that regard, you reaped what you sowed. Bossing around volunteer contributors is not how you earn respect. If what you did at the begining of this thread is representative, it's not surprising you're running into point 1. Possibly a vicious cycle.

I know you're busy, this is a big project, that's why I didn't object, at least initially, to the terseness of your first request, even though I found it off-putting. That's not why I objected, though. While I agree that the page needs an overhaul, adding -D to the then current version made it worse and I don't wanted my name associated with that.
Architecturally-speaking, trimming down the core and pushing functionality to plugins makes a lot of sense, but applying the same treatment to babel-cli turned it into a tool not meant for standalone interactive use, which is a bit damning. At best now it can annoy the "Standard" JS folks, but that's it (-;
So you're left with the option of littering the current directory (what I suggested), which is not very good. What makes it worse is that the tutorial doesn't give any context on where to run the commands. Saving the dependencies adds more garbage, which is why I objected to it.
The alternative is to build a full npm project with suitable options pre-installed, as a playground. It raises the barrier of entry, though, and makes the workflow more cumbersome. You may want to create a babel-playground repo, to be cloned for that usage.
To ease said workflow, I just realized that you could run a shell in the npm run-script environment. Here's a first attempt at doing in a cross platform way. Maybe there's a way to do it already, but I couldn't find one.
https://github.com/pygy/npm-run-shell
Obviously WIP, not yet tested anywhere beside my Mac laptop.

But the core of the issue is elsewere. babel-cli,  there's a interactivity promise in that name that's currently not fulfilled.
For it to make sense again you'd either need to rename it or to add a reasonable default preset, like ES$currentYear.


psutil missing

python3 ./yara_mem_usage.py ~/rules.yar
Traceback (most recent call last):
  File "./yara_mem_usage.py", line 9, in <module>

    import os, psutil
ModuleNotFoundError: No module named 'psutil'

https://github.com/Neo23x0/panopticon/blob/master/requirements.txt

https://github.com/Neo23x0/panopticon/commit/50058a1fd734495adf7cc1bc8651b747c8fa8ef3


Config option for table name

Is there a config option to choose a different table name than the default "activity_log" for the migration? Would be great to have.

I'll look into this next week.

Had a look, the problem is that this would require a dynamic table name in the Activity model, which isn't so simple to set up.
I'm planning on doing some refactoring on this package (probably for 3.0) and will add the option in there. I can't give any guarantee on when this is going to happen though.

Like @sebastiandedeyne siad we'll add it in the next major version of the package. Unfortunately we can't give you an ETA on when that might happen.
If you need this submit a PR.


Settings schema error after I installed

It is installed..

But not available on my plugin list..

Hi @Ridermansb , the setting schema issue is fixed in https://github.com/logseq/logseq/pull/6711#event-7379002428
Also this plugin is not available in the plugin list and should just work after installed

Yep, fixed. Thanks @pengx17


possible to get google search results?

I only see something for google customsearch which from my understand is a custom search for your site.
I'm looking to get results as if I search google.com for javascript for example. Interested in first 100 results from past 24 hours.
Is there an example I'm missing? or is it not possible with this api.

Check out the samples/customsearch directory.
Also, some of the following links may be useful.

Relevant StackOverflow post
Google Custom Search
Using REST with Google Custom Search

Let us know if you have any further questions!

Sorry, there's no API for Google Search results.


Updated the effects section to grab the actual label and localize it

This change makes the status effects human readable and localized. Prior to this, it was just using the effect ids which was especially a problem with effects added through SUCC as they have a generated GUID. This also required the removal of the toLower on the id compare which was unnecessary and would have broken on any status effect with an id that wasn't lowercase since defaults_statuses is populated directly from CONFIG.statusEffects anyway.
As an aside, IMO it would be cleaner if _effects and everything down the chain just used the contents of statusEffects rather than the ids. Right now, we convert the array of effects into an array of ids and then use that array of ids to look up the effect back in the original array. I wanted to minimize my changes, though, so I left it as is. Just a suggestion for something to look at if you're looking to clean up the code at any point.

I just noticed that attributes have the same issue. Assuming you take this PR, I'll make another that fixes those to be localized as well.

Are you able to raise the PR with both changes? I'll be happy to merge both changes in one PR.
thanks for heping :)

Sure thing. It shouldn't take me long. I'll try to get it done tomorrow. Happy to help. 🙂

There you go. Let me know if you have any questions.

I need to adjust other stuffs an I'll release this change soon. Thanks for the help.


add notes to cert-manager-istio-csr advisories

I found that the upstream project ignored these vulns because of they mentioned they do not import tagged releases in go.mod: https://github.com/cert-manager/istio-csr/pull/344/files

there is a typo here https://github.com/wolfi-dev/advisories/pull/9184/files#diff-3a47020c11afb4996715268bb0e175857be0957f60979b01fcd2f99fe1d72555R110


A couple more peephole arithmetic optimizations.

0 & x -> x; 0
-1 | x -> x; -1
a ^ x == b -> x == (a ^ b) (with a, b constant) and similarly for !=
x >= MinInt + 1 -> x != MinInt and
x < MinInt + 1 -> x == MinInt
x <= MaxInt - 1 -> x != MaxInt and
x > MaxInt + 1 -> x == MaxInt

Review by @nicolasstucki

Refer to this link for build results (access rights to CI server needed):
https://scala-webapps.epfl.ch/jenkins/job/scalajs-pr/3229/
https://scala-webapps.epfl.ch/jenkins/job/scalajs-matrix-build/4200/
Test PASSed.

Refer to this link for build results (access rights to CI server needed):
https://scala-webapps.epfl.ch/jenkins/job/scalajs-pr/3230/
https://scala-webapps.epfl.ch/jenkins/job/scalajs-matrix-build/4201/
Test PASSed.

LGTM


Drop support for numpy 1.21

This is in accordance with NEP 29 and https://jax.readthedocs.io/en/latest/deprecation.html
Looks like we need to update some kokoro scripts first.

The CI builds should now work if you retrigger them.

I think we will need to update dockerfiles too?

I think we will need to update dockerfiles too?

Perhaps, please do so if it's needed.

I am updating the docker images after which the CI builds will pass. I'll report back once it's done. Please don't submit this until then

The Dockerfiles have been updated. You can retrigger the CI in about 5 minutes and hopefully the tests will pass.

Re-triggered the tests


manifest for tag testgomake missing in repository metallb/controller

We use flux to deploy our clusters. Flux is reporting this error every minute. Maybe you can fix the manifest for the testgomake image or just delete it:
ts=2019-09-03T12:39:55.436504901Z caller=repocachemanager.go:223 component=warmer canonical_name=index.docker.io/metallb/controller auth={map[]} warn="manifest for tag testgomake missing in repository metallb/controller" impact="flux will fail to auto-release workloads with matching images, ask the repository administrator to fix the inconsistency"

I don't understand what Flux is trying to say here. I searched Docker Hub and git for testgomake, and I didn't find any matches. So AFAICT so far, it's Flux that needs to be fixed, not metallb.
Happy to look again if you can point me at exactly what is making Flux angry.

https://github.com/fluxcd/flux/issues/2517#issuecomment-542196756
"It is quite likely that the DockerHub UI filters out the image because the manifest is corrupt, while it is still accessible (and listed as a tag) for Docker API calls."
Can you take care of this?

Still an issue


chore: cleanup dependencies

What kind of change does this PR introduce?
Chore
What is the new behaviour?

Remove unused @vitest/istanbul-coverage dep
Replace json-schema with @types/json-schema dep

Does this PR introduce a breaking change?
No
Other information:
Please check if the PR fulfills these requirements:

[ ] Tests for the changes have been added
[ ] Docs have been added / updated
[ ] Relevant Changeset has been added

coverage: 100.0%. remained the same
when pulling 46d60a7158ed718dd350240cd712c91072d38df5 on remove-istanbul-dep
into 7588db7936f6356107e2236ae746bc050e6789a1 on master.


Could hide the legend when "IPlottable.IsVisible = false"

Like ScottPlot.Demo.WPF.WpfDemos.ToggleVisibility，Could hide the legend？

Hi liang16, thanks for a suggestion! I will do this.
note to self: edit this line so only visible plottables are obtained
https://github.com/swharden/ScottPlot/blob/6e9a9ac35254210636be16abecff4ad147f8370e/src/ScottPlot/Plot/Plot.Render.cs#L88

Hi liang16, thanks for a suggestion! I will do this.
note to self: edit this line so only visible plottables are obtained
https://github.com/swharden/ScottPlot/blob/6e9a9ac35254210636be16abecff4ad147f8370e/src/ScottPlot/Plot/Plot.Render.cs#L88

I just fixed it and will post a new (pre-release beta) package on NuGet this weekend. Thanks @liang16!

I just fixed it and will post a new (pre-release beta) package on NuGet this weekend. Thanks @liang16!


Allow install on CentOS 8.4

I'm running CentOS Linux release 8.4.2105 and get Kubernetes install is not supported on centos 8.4.

Fixed in https://github.com/replicatedhq/kURL/releases/tag/v2021.06.17-0.


missing File.reader initialization on Seek()

Currently, if you call Seek() before Read(), it returns the default value of 0 which results in unexpected behavior. I noticed this when passing a File to http.ServeContent.  Since it calls Seek() to generate the file size before copying the data to the ResponseWriter, the response body would be empty.

I've added a few checks to the existing test function. Let me know if you want them separated.


About the  Preparing RLBench dataset.

Thanks for your great work!
Are there any annotations(segmentation mask, depth) in the Preparing RLBench dataset?

Hi, @buttomnutstoast @jesbu1 @nickgkan.
In the RLbench datasets, I found you load the image and point cloud from the processed dataset.
What can I do if I want to project the point cloud to the depth map and it seems no intrtic and extrinsic matrix in the datasets folder and processed dataset file (Peract_packaged.zip).

This is the script we use for packaging the data https://github.com/nickgkan/3d_diffuser_actor/blob/master/data_preprocessing/package_rlbench.py. The extrinsics and intrinsics can be found inside the env code, e.g. here https://github.com/nickgkan/3d_diffuser_actor/blob/master/utils/utils_with_rlbench.py.


Cant upload.

When uploading any file as any user, zipline outputs this in docker logs
[Error: EACCES: permission denied, open '/zipline/uploads/cIiv14.png'] {
errno: -13,
code: 'EACCES',
syscall: 'open',
path: '/zipline/uploads/cIiv14.png'
}
The path /zipline/uploads has 777 permissions and is chowned by root.
I have no idea why its doing this and why it cant write (docker runs as root, and 777 makes everyone be able to write/read".
Any help?

Fixed, it actually wasnt 777.

Hw you changed the permission to 777 I wasn't able to do so! I git this error chmod: Uploads: Operation not permitted

Hw you changed the permission to 777 I wasn't able to do so! I git this error chmod: Uploads: Operation not permitted

Run the command as root, or use any SFTP client and change them in there

Hw you changed the permission to 777 I wasn't able to do so! I git this error chmod: Uploads: Operation not permitted

Run the command as root, or use any SFTP client and change them in there

I did I run it as an ADMIn but I get the same error I'm using the DOcker version I might try it on WSL!


az apim list Fails

This is autogenerated. Please review and update as needed.
Describe the bug
Command Name
az apim list
Errors:
The command failed with an unexpected error. Here is the traceback:

No module named 'azure.mgmt.apimanagement.models.api_management_client_enums'
Traceback (most recent call last):
  File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-umfcm_n2\knack\knack\cli.py", line 206, in invoke
  File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-umfcm_n2\azure-cli-core\azure\cli\core\commands\__init__.py", line 523, in execute
  File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-umfcm_n2\azure-cli-core\azure\cli\core\__init__.py", line 292, in load_arguments
  File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-umfcm_n2\azure-cli\azure\cli\command_modules\apim\__init__.py", line 28, in load_arguments
  File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-umfcm_n2\azure-cli\azure\cli\command_modules\apim\_params.py", line 11, in <module>
ModuleNotFoundError: No module named 'azure.mgmt.apimanagement.models.api_management_client_enums'

To Reproduce:
Steps to reproduce the behavior. Note that argument values have been redacted, as they may contain sensitive information.

Put any pre-requisite steps here...
az apim list

Expected Behavior
Environment Summary
Windows-10-10.0.18362-SP0
Python 3.6.6
Shell: powershell.exe

azure-cli 2.0.76

Extensions:
aks-preview 0.4.18
azure-devops 0.12.0

Additional Context

I get the same exact error message.  At first I thought may be this is in preview, but it is not. Actually, not only az apim list, basically any command throws the same exception.

@AshWilliams Looks like this has since been fixed and I can confirm that there is no error now. Apologies for no updates on this issue sooner. Unless you are still seeing this error on your end, I believe this could be closed.


GithubInsights - README plugin - markdown link processing fixed for certain markdown files

Please REVIEW&MERGE
Fixed a bug in the markdown link processing that could cause incorrect URL generation for certain markdown files.
My previous PR did not fully fixed markdown README references given in relative notation (eg. '../../../README.md' or './mysubfolder/README,md')
This should fix it.
It's possible we discover other problems in the future. It's not a simple task to override all links.
@sblausten You cannot hardcode 'github.com' , you have to use extracted domain, because there is a possibility of Github Enterprise on a custom domain (eg. mygit.mycompanydomain.com). If you find other not working examples, please post them here to create general-working solution.
:heavy_check_mark: Checklist

[ ] Added tests for new functionality and regression tests for bug fixes
[x] Added changeset (run yarn changeset in the root)
[ ] Screenshots of before and after attached (for UI changes)
[ ] Added or updated documentation (if applicable)

@Xantier added

Thank you.


ela-compil 404 link in README

The link in the README for ela-compil is returning a 404 error: https://elacompil.recruitee.com/
@gralin, can you please send us a new one?

I'm sorry for this @fredj , please use https://ela.pl for now and once we have a new landing page for recruitment I will let you guys know.


typo

a small typo

Hi @4c74356b41, I'm your friendly neighborhood Microsoft Pull Request Bot (You can call me MSBOT). Thanks for your contribution!

This seems like a small (but important) contribution, so no Contribution License Agreement is required at this point. Real humans will now evaluate your PR.

TTYL, MSBOT;

@4c74356b41 : Thanks for your contribution to the Azure documentation! The author, @azdocprs, has been notified to review your proposed change.

Thanks for pointing that out, @4c74356b41. Accepting the PR.

#sign-off


pull request for e2e test at 11/09/2016 03:56:09

:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

optest/docs/updated_at.md
:white_check_mark:Succeeded

Details

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


Can't save more than 4 groups

Hello,
thank you for this great extension. It fits my browsing habits very well.
I have a lot of browser windows which I use like sessions but I can't save more than 4 of them.
Excuse me for the image, it's from HiDPI screen.

Hey @yegorius, it's definitely not clear at the moment but you should be able to scroll that list of tab groups if there are more.  Please let me know if that's not the case though, there could be something else going on.

Yes, it feels like I can create additional group, but I can't see it and can't scroll to it. This could be a HiDPI screen issue.

Might be HiDPI, could also be something else. Would you be up for sharing a screenshot of the Tabbie console here?

Right click on the Tabbie icon
Click on inspect popup
Take a screenshot of the developer console window that appears

Would be interested in seeing if there are any errors there.

Oh I see. The problem shows up only with one particular window with a lot of tabs. Other windows can be saved with no issues.

Oh my! You're the first person to report this, and I had a feeling it would happen eventually.
The chrome sync API which Tabbie uses has a limit. There's enough tabs saved here to reach that limit.
If you don't mind me asking, could you describe how many tabs you've got open in each tab group?

I'll need to figure out the best way to handle this too, currently the tabs will be synced across browsers. Is that something you would use?

There are 23 tabs in that window. Tab groups sync would be a killer feature. Right now I use the same laptop at home and at work, but I used to have a desktop PC which I sold because I couldn't sync tab groups efficiently :)

@yegorius unrelated, are you using i3 for your manager with ubuntu? What hardware are you using BTW?

Still thinking about how best to solve this, I could add a setting to use local storage so you could save a lot more data. You'd lose the ability to sync these between machines though.
Or I've been thinking about creating a backend to store the data, so you'd be able to sync as many machines as needed. I'd have to host it somewhere so there would be a cost involved with that. Is this a feature you'd be willing to pay for if it worked well?

Having the exact same issue. I use chrome too heavily. Sometimes 6-8 windows suming upto 150-250 tabs for some crazy reasearch stuffs. And hence unable to save those tabs.
Moreover developer console shows the same error.

Right now I don't need the sync feature because I use the same laptop at work and at home. I would rather rely on local storage in my case. But I think tab groups sync is a great feature and other people might need that.
Offtopic: I use i3 with ArchLinux on Dell XPS 15 9550 and 4K screen

One possible solution could be like this:

Give an option to the user to select storage backend:
a) local, no sync, unlimited space
b) chrome internal store, with sync, limited space
Fail fast. If a user selects internal storage and saves too many tabs, such that QUOTA_BYTES_PER_ITEM exception is raised, show a warning immediately, so that user can save tabs by other means (because I used to loose my tabs a few times this way).

Same issue here, but no errors. I can save the tabs and they'll be added to the list, but when I open Tabbie again the entry is gone.

Alright guys, here we go, I've published updated Tabbie:  https://chrome.google.com/webstore/detail/eiigehbpamofgandbmmokoahhkhbmbld/