Possibility to use output.json in addition to output.xml

Problem:
Prefer to use a NOSQL database to store test reports. NOSQL databases typically require json format because its a relational database.
Solution:
Provide robotframework with the ability to use json rather than xml in the output file.
For example:
           # flag --output
          robot --output output.json ./tests

If its ok with the community, I would like to work on this. I created a pull request for tracking progress and questions along the way

Being able to use output.json instead of output.xml may be useful. Biggest possible benefits I see are:

JSON is a lot less verbose than XML, so output.json file would be a lot smaller than output.xml.
Because output.json would be smaller, writing it to disk during execution would be faster as well.
It is possible that processing output.json would be faster than processing output.xml. This is not certain, though, as our XML processing code is pretty well optimized and the underlying XML modules are pretty fast.

If processing output.json is faster than processing output.xml, then this feature is definitely a good idea. If it isn't, then we need to think are the other benefits big enough. This is something we can only know after prototyping this a bit.
I don't thing possibility to add data to a NOSQL database or to any other system is a good reason to add anything like this. It is already now possible to do that by parsing the information from output.xml using the standard XML modules or the robot.api.ExecutionResult API. Data being stored in JSON instead of XML doesn't really make a big difference.

The are two design decisions to be made:

How to enable this feature. I don't think any new command line option is needed. We just need to make it possible to say --output output.json and detect the type automatically. Also Rebot needs to be enhanced to allow using rebot output.json.

The output.json format. Because it would be a new external interface, it needs to be designed carefully. No need to think about that too much in the beginning, though. It is more important to test are there performance benefits or not. If there are, then we need to design the format more carefully.

There is also another option to reduce output size: write directly to tar.gz.
I think both reading and writing of output.xml would be fairly easy to modify to slso being able to read and write (the same xml) to output.tar.gz

https://docs.python.org/3/library/tarfile.html
(Zip and others also could work)

@mkorpela one reason why i am set on an json option is the possibilities of using NoSQL databases to easily store robotframework results.

Can you @teaglebuilt explain how this feature would help storing results in a db?

@pekkaklarck
JSON is the query language used in NOSQL databases.
Well, MongoDB for example, is technically BSON format which is relative to JSON. from what ive seen there are many complications to storing xml in a NOSQL database. These are some examples below,
Mongodb
Cassandra
Couch DB
They all require xml to be converted into JSON for storage. Unless you want to just save as a string which would not be able to query

@pekkaklarck with the possibility of output.json, we could essentially use NoSQL databases to store and query results. Then look into other possibilities of filtering and searching specific queries relative to the data in the output file

STATUS UPDATE: working on JSONELEMENTHANDLER, rebot accepting endswith(.json) on output file....

I still don't understand how Robot producing json output itself helps using any db. It is already now easy to read information from output.xml and write it to a db (or to a json file). If you have a db that accepts Robot's output.json as-is, then you avoid one step between test run and storing info to the db. Is that your motivation?

Great that you have some progress?

Have you already thought about the json format?

@teaglebuilt could you share the JSON format you're looking to produce?
I am also under a similar situation where I want to get the output as JSON format.
Parsing XML and converting that to JSON I found to be very quick and also the XML gets converted into python objects and then I can use it like suite.suites and so on.
So few things come to mind:

Can you share the JSON structure you're looking to output

Also, when I read the JSON output back into python for further processing, will it be converted into python objects?

I was looking at this for JSON structure and JSON to python objects:

https://json-schema.org/understanding-json-schema/
https://pypi.org/project/python-jsonschema-objects/0.0.13/

Also, please let me know if i can help.

So I've taken a fork and created a JSON Schema and added a "--json" option to rebot so you can convert your XML results into JSON.
There are a couple of things which I have done which are probably not consistent with robot.

In the JSON schema I have named what robot normally labels as "kw" as "keyword" because for me it's easier for other people to understand if it's spelt out fully.
In situations where it seemed appropiate to use a boolean I used a boolean. This is rather than "yes"/"no" for marking stats as critical / marking stats as "html" or not.
I have not fully broken down the objects in the schema. JSON schemas have the idea of inheritance, and quite a few of the objects share some of the same fields, but I thought they were encapsulated in a way which was easy to understand.
My python implementation is a little lazy. I haven't written documentation on my functions, and have strayed away from putting individual comments on lines (which I normally do, but was worried that the coding guidelines for robotframework wouldn't allow that). I also haven't written any acceptance tests. I plan on doing this, if there is interest in merging it in.
Most of my schema was derived from the XSD. I could be wrong, but based off of my interactions which robot objects, and with the XSD there is a mismatch between the two. I think my JSON schema corrects some of those wrongs, but if there's a difference (which to me seems likely) then the supporting code would need to be changed.

I appreciate that it's been said that this could be done as part of the robot output. I don't think it'd be hard to adapt what I've done to that. Having said that though, I figured that rather than attaching the JSON to the robot implementation it was better as rebot. If you want the format in something else (i.e: Xunit) you simply use rebot to fix it up.
I'm quite new to github, and haven't done any contribution before now.

Quick comments:

I agree keyword is more explicit than kw, but if it is repeated huge amount of times then saving 5 characters per usage can be quite a lot. One idea of the JSON output would be making the output file smaller.
Using Boolean values and not "yes" and "no" is definitely a good idea.
In the end JSON output should be activated simply by using --output output.json which should then also disable writing the normal output.xml flle. It should work both with robot and rebot.
This is such big change and RF 3.2 is so close that this can be earliest included to RF 3.3 (which may actually be RF 4.0).
The same schema and lot of the code could be reused to create a tool that can convert current ouput.xml files to output.json (and possibly also the other way around). That would be a great way to make sure the schema works well as it could be fine tuned freely. Once it's taken into use by RF itself, then all changes are subject to backwards compatibility consideration.

Okay, so I have updated my code. Robot will now output a .json file.

I have changed the properties back to kw and doc to be consistent with how robot is elsewhere. I've updated the schema to reflect these changes as well as the underlying code.
I've updated the JSON writer to not be dependent on requiring the entire output upfront (i.e: Moving away from a writer to the logger format). This allows robot to recognise if the output ends in .json and will output the results in JSON format. I've tested this against a couple of inputs and it looks good on the whole.
I'm in the middle of writing a JsonExecutionResultBuilder so that rebot can accept .json files in the schema format and make them available to as an ExecutionResult. If I'm correct then this will allow rebot to accept a mix of JSON and XML to merge. Hopefully this will also satisfy your requirement for a tool to be able to convert between the XML and JSON (as rebot will do this).

Should I open a pull request so you can track the changes, as I'm also renaming some functions (so robot can remain agnostic to what output format is chosen).

Another update, rebot is now able to accept the .json format as an input. This allows it to combine with either other XML files, or other JSON files. It can produce either XML output, or JSON output. I've tested it against a couple of examples so far and it seems to work fine.

It needs a little tidying still. I know robot prefers classes for the element handlers (which I have no done on my implementation).
It needs some unit tests and acceptance tests writing still.
I haven't run this on python2 yet. My expectation is that it should work, but I haven't gotten round to installing python2 to check yet.

Sounds great! Quick comments from me again:

A PR showing the code would be good. Doesn't need to be fully ready.
Example of the JSON output would be interesting. Perhaps a gist?
Have you done any performance measurements? I'm especially interested in the output.json processing speed.
Could you please inform people on the #devel channel in our Slack about this? I'm sure others would be interested. This would require a PR so that they can test it.
If changes are relatively small and benefits are big enough, we could possibly still get this into RF 3.2.

Ping @Muusssi!

Unfortunately I haven't found the time to progress this forward more.

I have opened a pull request: pull request
I have made a gist with the output of what I've been testing: JSON gist
I am interested in the speeds, but I haven't gotten around to doing this yet. I'll have a look this weekend.
I've not used Slack before, I'll look at how to do this at the weekend 😄
It would be nice to see if we could get it into RF 3.2

I like the idea to generate output in json format . i have similarly situation where i want output in json format so that i can upload test result in other external tracking system. May i request you to please update the RF3.2 release date.

RF 3.2 will be released very soon. This issue needs to wait for future versions.

I've been looking at this again today, I've updated it so the unit tests pass, but I'm suffering from encoding issues with strings for acceptance testing.

Sorry it's been so long since my last update. COVID-19 has only made me more busy (as I imagine it has many software engineers). I've come back and had a look at my code and realised it was left in a bit of a state (it would produce various different errors, and wasn't properly forming the models with the element handlers).
I've resolved these issues and I have been running some tests with rebot and found that I can convert freely between XML and JSON using rebot, and that the data trasformation between the two is consistent!! (Hooray) I have also ensured that the output from the JSON validates against the schema! (Hooray again).
I have also done some testing with timings, although these have been very limited tests. I was noticing, with a fairly basic robot file, that XML was marginally quicker.
XML: 0.033s
JSON: 0.036s
I don't know if this changes with larger robot files. I imagine this might change based off of the kind of hard disk you have available (I have an NVMe SSD) as the JSON implementation will store the results in memory and will write to disk when it's complete, rather than the XML implementation which looks like it writes to disk as it goes. This implementation is unfortunate as it makes the JSON implementation harder to do with the visitor pattern because you have to remember "where you are" between visits.
I'm increasingly finding that my implementation of the JSON is stable, but the other surrounding bits (like recognising the output file ends in ".json", and the addition of the "--json") don't quite work how I'd expect them to. So my next task is to ensure that the flows are working how I'd expect them to be. Afterwards I'll look to implement the other options that rebot supplies as it looks like some of the options around flattening are completed when the XML is loaded and is something I'll have to in the loading of the JSON. All in all, seems to be coming along nicely!
I have two questions.
In my pull request, I'm getting some failures that I wouldn't expect to be getting based off of the code I've changed. Are there known issues with the existing set of acceptance tests, or have I done something wrong (such that I'd be getting failures with the help lines)?
I'm getting failures in Python2 acceptance tests because there are a whole load of string classes robot has for dealing with unicode strings in Python2 and this grinds against my implementation. For recognition of the output ending in ".json" I have implemented a line of code like so:
output.lower().endswith(".json"). This stops working with the custom string classes because they don't have these functions available. These custom string classes appear to only be in python2 implementations because I only get the error here, not in python3 acceptance tests. Is this something I need to care about because python2 is now deprecated, or should I go to the effort of finding a way around this problem?

I've just run an example on my laptop (with a SATA SSD). This ia across 20 runs of the same robot script:
JSON = 3.6550284
XML = 3.6984686
My laptop has slower specs, but I think the notable difference is that it has a SATA SSD rather than an NVMe drive which benefits the performance of the JSON implementation.
This is the example robot file (simple): https://gist.github.com/Lemonlemmings/c6b33ea88e68327cc63afd5c6c793f26
Since it's been a while here is the outputted JSON from that run: https://gist.github.com/Lemonlemmings/cc92e26f3edd02ae40d700352ef63e77

Thank you for adding this feature , and expecting it to be released soon as I got a requirement to have the output.xml converted to output.json, Actually I'm  trying to develop the code for this conversion and facing difficulties and when I googled for solution I ended up in this link and happy to see such feature is being added, Expecting the release soon and have to thank and Congratulate this team for the good effort, Great work guys..!

To increase the parsing speed - maybe try other parsers? https://github.com/ultrajson/ultrajson or https://github.com/ijl/orjson.
I think I can check out the different options on our large output.xml files.

Related https://en.wikipedia.org/wiki/JSON_streaming

I took a look at the json PR. There are several things to consider.
I would like that also the old issue with output is fixed. This goes back to the time of implementing the current log.html data format.
There are two problems in my opinion:

Whole output must be read completely when processing it. This means that there is a memory spike. Pabot can somewhat currently solve this for humongous projects by removing keywords for partial results.
Output is broken when writing while file is stopped in the middle Data is not directly usable without fixing it.

I propose that the output.json when done would be Line-delimited JSON.
In a format that can be also partially processed even when writing has aborted.
Now when I tested the output.json PR everything is written in the same line
and has the same tree like structure as the original output.xml.
This means that reading problems are not handled.
In the best case scenario writing log.html from output.json would not have a memory spike.
Memory spike means that data processing requires RAM that might not be available.
Data would just flow from streaming json that is only partially read and transformed to model objects and from that directly to the format that log.html and report.html use.
Output.xml is also very verbose and replicates same elements.
For example keyword documentation is logged every time that a keyword is executed.
status elements also eat alot of space as one can check with this gist https://gist.github.com/mkorpela/0a38a0442e601766568eb7823297d44c

Thanks for your comment! Sorry it's been a while since I've posted anything. COVID has made things quite mad (I'm sure it has for everyone). I've posted up in the Slack, and I'm hoping to get this release into RF4.1.
In response to your points:
I agree loading a large project directly into memory isn't ideal. To save me a lot of time rewriting something from scratch I have found this library. I haven't done an implementation with it yet, but I think this would resolve your problem, it would only load something in when needed (if you do the loading correctly). The project mentions loading large JSON files very quickly, so that should be resolve the issue. One minor thing... that paticular project only supports Python3, and does not support Python2.7 (which RF4 will continue support for). With that in mind, I propose that I do an implementation with that library which will allow for two situations:

If Python3 is being used (i.e: That library is installed) then it will use the nicer streaming option
If Python2.7 is being used, and the JSON output is being activated it will simply load the output into memory (unfortunate, but this would go away with RF5 and Python2 support being dropped)

I have (slightly) resolved your problem with the output being broken if execution is stopped midway by using this lovely library. This means that for very large projects this JSON implementation won't consume lots of memory (like the implementation you tested).
Things that are leftover:

I need to finish my implementation for reading from the JSON (see above).
This needs testing in a range of scenarios, I think as a base run it would be good to run the acceptance tests with the JSON output (see how it compared)
I need to finish the little off the trimmings I have added elsewhere. Currently it will recognise if the output file ends in JSON, but the JSON flag itself isn't working how I'd expect it too.
Tests needs implementing in the unit and acceptance tests.

Quick comments:

Having this in RF 4.1 would be nice.
I'm fine this feature being Python 3 only even if the release would still support Python 2.
RF doesn't currently have any mandatory external dependency and I don't want that to change. Some features like YAML variable files only work if you install an external module, and we could use the same approach also with output.json.
Do you already have a JSON structure planned?

Hi, thanks for your comments.

I agree, I would like to see this in RF 4.1 as well!
I think I can make it so it's both Python 2 and Python 3 (one would be efficient, and the other not)
With the above comment in mind, I'm going to propose that I do the work to do JSON streaming using an external dependency (which is Python 3 only), and that I make the format work if you simply load all of the JSON into memory instead. Essentially meaning that if the library is imported that you don't have memory spikes when parsing JSON
I do already have a structure planned. It fairly closely matches the XML format. I have produced a schema (and the work I have done matches that schema) - https://github.com/Lemonlemmings/robotframework/blob/master/doc/schema/robot-10.schema.json (This schema is updated for the RF 4.0 changes)

I've been doing some additional work this weekend.

I've fixed the flags not working in the way I expect. The robot module has --json which is a flag which marks the output as JSON. It will also rename the default output from output.xml to output.json. For rebot --json is a path to the output. The only situation I see as being awkward (as it stands) is that rebot has no way of recognising if the input is a JSON output format if the filename doesn't end in .json. I'm not quite sure how to approach this problem without completely changing how rebot accepts arguments (which I was trying to avoid doing).
I have marked the library I use to do the JSON as being optional. I've noticed that it's MIT, and since it's a single file could easily be integrated into RF (to avoid the external dependency issue). I'm not sure what the approach would be here, but I'm happy to hear thoughts.
I have discovered that the libary I had found for using JSON slicing is fairly difficult to get installed. I think, for now, that the JSON input will cause a memory spike when it's being read in, and there's not a lot that can be done to avoid that without writing a JSON streamer (which I feel is out of scope). I guess if this is an issue for users, then they should be using the XML output (which has had a lot more optimisation than this code has).

In regards to my TODO list I have the following items left:

I need to implement flattening of keywords still. I'm a little confused as to how that would work exactly. I wouldn't mind a brief explanation. I think I can easily apply it to the JSON format with some recursive functions.
In a similar vein to the above, I have noticed the _omit_keywords function on the XmlExecutionResultBuilder class (which I think is normally ExecutionResultBuilder). It seems to only omit keywords, but I was wondering if this was purposeful, as this doesn't include removal of FOR, ITER, IF, or BRANCH. Is this is purposeful, then I can implement something similar. I felt it was odd to have a format which only removes keyword data, and not the surrounding structure.
Write acceptance tests for JSON output format. My current stance is to copy the existing tests for the XML format, and make them apply to the JSON format instead. I was thinking that it would be good to do some kind of back and forth with rebot, as rebot allows the JSON format to be converted into XML and back again (so there should be some tests to ensure that the format always produces the same results).

Issue #3902 proposes adding support for serializing executable `TestSuite´ objects into JSON and being able to recreate suites based on this data. The executable suite and the result suite are similar, they have a common base, and they should preferably use same JSON serialization approach as well. As you can read in comments of #3902, I propose supporting splitting a suite into multiple objects using line-delimited JSON that @mkorpela mentioned in an earlier comment to this issue.
Unfortunately splitting a suite into multiple objects as proposed in #3902 is problematic during execution. The problem is that when, for example, a suite starts we don't yet have all information (end time and status aren't known, child suites and tests may be dynamically modified, ...) and thus cannot write the final suite object even with placeholders for child elements. At least these possibilities could considered to avoid this problem:

Write a "one big object" during execution instead of splitting a suite. This approach has drawbacks:

All benefits of having multiple objects are lost.
If we also want to support splitting objects, we either need to write the "one big object" into a single line or needed to somehow detect during parsing when a multiline file has multiple objects and when just one object split to multiple lines.

Write the info we have and when the suite (or test or keyword) rewrite it. This is complicated because we need to move around the file and especially because new entries would generally be bigger and thus overwrite other data. Always rewriting the whole file would be inefficient and reserving extra space after each entry to allow expanding would be complicated.
When a suite (or test or keyword) ends, write a new entry with new and updated information. We'd just need a way to link the new and old entries. We could, for example, store id(obj) as and _id value to these objects just for this purpose.

Good catch @Lemonlemmings that ExecutionResultBuilder._omit_keywords doesn't omit FORs and IFs. They definitely should but luckily this bug doesn't affect functionality, only performance, and because these structures ought to be rare on the test case level not many is affected in general. Submitted #3903 about that anyway.

Hi,
Thanks for your comment.
In regards to using line delimited JSON there are also drawbacks. As you have noted, there would need to be some ID correlation between lines that you're writing in the JSON. It feels like you want to use JSON as a concatenative protocol when  JSON is a non-concatenative protocol. The XML execution format already fills this niche (and has been very well optimised for avoid memory spikes, and streaming).
I have managed a lot of the problems with the "one big object" using the jsonstreams module. This is a single python file which will let you "open" and "close" JSON while writing directly to disk. This means you don't have to worry about storing the JSON object you're building in memory (it is written directly to disk). I get quite unclear about licencing, but I believe that as the project is released under MIT (and also tests successfully against Python2 and Python3) and that it would be suitable for inclusion in the utils package in Robot. This would allow for "native" execution of the JSON execution output. My implementation also has an interface between the execution output and the jsonstreams library, which could be interchanged for an in-memory library, or perhaps even a HTTP library (which would be useful for the pabot rewrite as you can send objects back to a central server when they're closed).
The issue I face with the JSON is that you cannot really get around the fact that you have to load an entire JSON object into memory if you want to process it into the log or report files. This is an advantage that the multiple objects has over the "one big object" approach.
For my personal circumstances I have been using the JSON output format for roughly the past year (ever since I finished the original code). I run robot script in different configurations en-masse, and then pipe the one big JSON result (with only the test case JSON data) into an ELK stack. This lets me do analytics over the suites I have executed, and compare them to one another nicely. I would think that splitting the JSON into multiple objects would make this approach very difficult.

Upon further reading of your suggest, I realise I got the wrong impression of what you were looking at. I got the impression that you were looking to only use a line delimited JSON option, and looking to drop any potential "one big object" JSON.
What you're suggesting with your multiple objects is something we can achieve using the interface I have currently implemented. The "setup", "teardown", "tests", "root suite" and "suites" already have distinct code paths in my implementation, so potentially starting a new line would be possible when looking to execute any of these items. Are you proposing that when you're executing with JSON that you could also add an optional flag of --split that not only would execute with the JSON output, but would cause it to split on your objects for a new-line delimited JSON? If so, then this feels achievable alongside the "one big result" format we already have implemented. Having said that though, the jsonstreams module alone would not be enough to achieve what you want.

If you are confident that you'll always finish the robot suite, then you could accept that your multiple objects would be written to disk in the wrong order, and then have some code that reorders them after the suite has finished executing. You would write them in the order than the objects "close" or "end". Then you use the ID's you assign to reorder them after the execution has finished. It feels a little cheap, and wouldn't provide very useful information in the event of failure (although this is already the case for the jsonstreams which will leave the file without the necessary closing braces in the event of failure (although I think this is a quick fix to capture exceptions and ensure we close the object before raising the exception again.

I haven't thought about all possible details related to the possible new JSON serialization format so cannot really answer the questions you have regarding to it. In that usage writing JSON isn't a big problem, the hard part is reading it efficiently. That's why I was thinking to allow splitting JSON to multiple objects so that we didn't need to read the whole JSON into memory in one go. I added a comment to #3902 about how to do that in practice and how we could remove duplication also otherwise:
https://github.com/robotframework/robotframework/issues/3902#issuecomment-808405017

Using JSON as a serialization format for data is considerably simpler problem than using JSON for results, especially because we should be writing results to file during execution when we don't have all information available yet. It might thus be better to concentrate on the former first. We should nevertheless keep results in mind to avoid solutions that were not compatible with them if at all possible.

This is too big issue for RF 4.1 that is planned to have only smallish enhancements before the bigger RF 5.0 release. I move this into RF 5.0 scope instead. Then we don't need to care about Python 2 either making this implementation easier.

Hello . So after reading above comments came to know there was some progress in this json output . May I please know how can it be done or is there some direct way to do get this json output from robotframework instead of xml output? We in our company need this json output to feed to Zephyr to get test reports. Can anyone help me?

No progress lately and this isn't too high in the priority list at the moment. Would be a nice feature but implementing it properly is a rather big task. What you can do now is converting the output.xml to JSON yourself after execution.

Hello
Thank you so much for getting back to me. As you said I tried to convert an
output.xml to json and was successful with it.
But now the issue is that we need cucumber format json which is only
accepted by zephyr. Is there any solution to convert output.xml into a
cucumber format json?
Any ideas will be really helpful in progressing our work.
Thanks
Nithya
On Wed, Jul 6, 2022, 23:02 Pekka Klärck @.***> wrote:

No progress lately and this isn't too high in the priority list at the
moment. Would be a nice feature but implementing it properly is a rather
big task. What you can do now is converting the output.xml to JSON yourself
after execution.
—
Reply to this email directly, view it on GitHub
https://github.com/robotframework/robotframework/issues/3423#issuecomment-1176648632,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AZ57DFCLC4S4YHNN2A6X3PTVSXQ5FANCNFSM4J6H3PIQ
.
You are receiving this because you commented.Message ID:
@.***>

You'd need to study how the Cucumber JSON output looks like and generate JSON with same structure based on output.xml. Notice that if/when output.json is added to Robot, it is very unlikely that it would be compatible with Cucumber. Finally, there could be better approaches for Zephyr integration but that's not really the topic of this issue. I recommend you ask about this from other users on our Slack or Forum. You can find both via robotframework.org.

The plan is to add JSON serialization support to the result model in RF 7 (#4847). Writing output.json as part of execution is outside the scope of that issue, that's what this issue is all about, but it will define JSON format. The plan is also that Rebot could produce output.json after execution. That would mean that you can do
robot tests.robot
rebot --output output.json output.xml
rm output.xml

to get output.json instead of output.xml.
It would obviously be more convenient to be able to generate output.json already during execution, but that's a lot more complicated because it would need a separate JSON writer that can write information in pieces as soon as we have the info available. It would also need to support flattening and other such features that our existing XML writer does. I hope we get that done at some point, but that's too big task for RF 7.

JSON serialization support has now been added to Robot's result model (#4847) and also Rebot supports it so that the example in the above comment works. This is great, but obviously not as convenient than getting output.json directly as part of the execution.
We now already have the JSON format specified, so there's less to be designed when we return to this. Some of the key things that need to be done are listed below:

JsonLogger class that can write information to disk when suites, tests, keywords, etc. start and end. We probably need to create it ourselves similarly as we have created our XmlLogger. These classes should probably have same API so that it's easy to switch the logger without changing other code.
XmlLogger has a pretty ok API, but there probably are things that need to be fixed in it before adding another class that mimics it.
We need to decide on the top level output.json format. Current output.json created by Rebot only has suite information, but we need to add also statistics and errors there similarly as we have in output.xml. Probably it's enough to add a new root object with keys suite, statistics and errors. Current methods processing output.json files need to support both the "full" output.json files and files only containing suite information.
Result object should probably get its own to/from_xml and to/from_json methods for conveniently serializing it to different formats. The old save method should be preserved, though.

Let's see can we get this done already in RF 7.2. As mentioned above, the result model can nowadays be serialized to JSON and Rebot also supports JSON outputs, so we don't need to discuss about the suite structure anymore. We need to define the higher level result structure, but that's covered by #5160 that's already in RF 7.2 scope. The remaining task related to this issue is creating a logger that can write JSON incrementally. Also that has challenges like taking flattening into account, but I don't expect it to be too complicated.

After the latest changes this feature is now done and ready to be released as part of RF 7.2 beta 1. Implementing this properly was a bigger task than I anticipated, so hopefully the functionality is useful.


asdf install bitwarden lasts fails

When using the latest version of asdf, the install fails if latest is passed instead of a version. I've had a dig through the code and TBH I can't see what the root cause is and asdf makes if difficult to debug as it doesn't handle returned errors properly. I think it has something to do with the way that the list-all returns, maybe there is a string formatting issue.
$ asdf install bitwarden latest
No compatible versions available (bitwarden [0-9])
bitwarden  is already installed

Similar error from rtx
$ RTX_DEBUG=1 rtx install bitwarden latest
[DEBUG] rtx::config: Config:
  Files: ~/.tool-versions
  Installed Plugins: awscli, bitwarden, direnv, nodejs, python
[DEBUG] rtx::cli: rtx install bitwarden latest
[DEBUG] rtx::toolset::builder: Toolset: bitwarden@latest, direnv@latest, python@latest, awscli@latest, nodejs@latest
[DEBUG] rtx::runtimes: install bitwarden@latest latest
rtx bitwarden@latest installing
[DEBUG] rtx::cmd: $ /home/paul/.local/share/rtx/plugins/bitwarden/bin/install
rtx bitwarden@latest Downloading bw version latest from https://github.com/bitwarden/cli/releases/download/latest/bw-linux-latest.zip
rtx bitwarden@latest Error: bw version latest not found
rtx bitwarden@latest error ✗
Error:
   0: [bitwarden] script exited with non-zero status: exit code 1

Location:
   src/plugins/script_manager.rs:182

Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.
Run with RUST_BACKTRACE=full to include source snippets.

The bitwarden/cli repo has been archived as of May of last year

Archived
This repository is archived, please go to https://github.com/bitwarden/clients for future development.

This plugin should be updated to use the new repo

Resolved by #4 hopefully.


Bugfix/update index url

When I run tldr curl, the $configdir/index.json shows a redirect message.

<title>301 Moved Permanently</title>

301 Moved Permanently

nginx

There are two solutions for this,

change the index url (this PR)

use -L location in the curl command
$ curl -L tldr-pages.github.io http://tldr-pages.github.io/assets/index.json

I think we can simply change the url instead of following the redirect every time when we need index.json

See issue #18 and PRs #17 and #19

I believe this is addressed now, check the latest?


Css specifies emoji fonts for body text

Gitea version: 1.13.0
Can you reproduce the bug at https://try.gitea.io:

[x] Yes: https://try.gitea.io/explore/repos
[ ] No

Description
_base.less specifies the body and headings font family as:

-apple-system,BlinkMacSystemFont,system-ui,Segoe UI,Roboto,Helvetica,Arial, Apple Color Emoji,Segoe UI Emoji,Noto Color Emoji,Twemoji Mozilla, sans-serif

This looks fine on Chrome but I guess you didn't test on Firefox because Firefox prints all numbers as emoji. Everywhere. It's hideous.
Screenshots

Also see #12966 because that bug is about the same CSS line.

I am using FF but am not seeing what you see in screenshots, could you confirm the operating system and version of FF you are using?

Linux, Firefox beta 84.0. It's fine on a Windows virtual machine.
I guess the Noto Color Emoji is the first font installed on my system because it obviously has no Microsoft, Apple or Google fonts.

I'm seeing this as well, similar setup as @Oreolek

Is it only numbers? I guess one could use CSS unicode-range to just exclude glylphs 1-9 thought I wonder if there are better solutions.

Can someone test if putting sans-serif before the emoji fonts solves this?

@silverwind that works but it's not the proper way to define a font stack and might break something else down the line, possibly

What do you suggest? We can't really wrap all emoji in their own elements after all.

are they being used elsewhere? this is honestly the first time i noticed them. all other icons i've seen on the web interface seem to come from an icon font and are contained in elements

Emoji can of course appear anywhere where there is user content and we might even use them at some point in our own templates. I think it's unavoidable to have those fonts in the font stack.

Please try https://github.com/go-gitea/gitea/pull/13834.


Spike of passing the arg values to the callback

Currently working for the selected unit test. Still hardcoding the arg
names ([:w] in this case).
A lot still needs to be done, but proves our hypothesis.

Will reject this, given there's a proper implementation here https://github.com/amalbuquerque/interceptor/pull/3


Provide a way to run winui apps from dotnet cli

After MAUI now it's possible to build cross-platform GUI apps with .net. But when building apps with MAUI Blazor or MAUI Comet many people prefer vs code over vs 2022. With MAUI it is possible to build with dotnet cli for all the platforms except windows. Because building winui apps is not supported with cli. But why not? This is a great time to support it. dotnet build -t:Run -f net6.0-windows

Using dotnet run works for me for an unpackaged winui app

@ziaulhasanhamim Create a new WinUI project (empty project with separate packaging project). Then add the following lines to the project file:
<WindowsPackageType>None</WindowsPackageType>
<EnableMsixTooling>true</EnableMsixTooling>

Dotnet run (in the directory with the project itself, not the solution) shows some warning message about running as AnyCPU, but the app still starts.

Do have any idea if it works with MAUI?

Hey team, our use case for an internal app I'm building with MAUI is being significantly impaired by this. Please, please fix or provide a workaround. I've been fighting Windows for days to get something working, and I need to move on.

There currently seems to be a bug in the winui build scripts that still set the runtime identifier to win10-platform instead of win-platform when in AnyCPU configuration. To workaround that, you can addx64 (or the specific platform you want to use) to the csproj file.

@lhak could you be a little more specific? I believe I am already doing that - I build in both Debug and Release with the platform set to x64, and this is my pubxml:

bin\x64\Debug\net8.0-android\publish\
FileSystem
win10-x64
x64
Debug
net8.0-windows10.0.19041.0
false
false
True
true
C:\Users\\temp\Packages

@ajsuydam What error do you get? The issue I have observed is that "dotnet run" does not accept any parameters and reverts to AnyCPU configuration. The winui build scripts then set the runtime identifier to win10-platform (I think platform is derived from the system you are currently running on). This worked in the past, but does not work anymore with .net 8 (it should set it to win-platform) unless you set the UseRidGraph parameter to true.
So the workaround I have found is to set the Platform parameter directly in the csproj to avoid the AnyCPU configuration. Of course, this is not viable if you want to build for other platforms as well.

Where are you running dotnet run from? I get a myriad of errors depending on the answer to that question.

@ajsuydam I used "dotnet run" from the commandline


Try to clean up temp files recursively in TempFileSpace.java

For JDK 1.7 or later, it can use useful pattern which is combining java.nio.file.Files and java.nio.file.SimpleFileVisitor to do file operation.

Great! Thank you!

Thanks!!

I added this follow-up commit: https://github.com/embulk/embulk/commit/e94308854eaa4c09d2a0bb1dd50cc7205c490d31
This is the code style embulk is/will be using: https://github.com/airlift/codestyle


feat: cross compile amd64 Linux binaries with Musl

The seg fault in the related issue seems to be caused by a bug in glibc. The solution would be to use musl instead, since anyways static linking with glibc is discouraged.
In this PR, I modified the release CI to use a docker image called muslrust to cross compile the SP1 CLI amd64 Linux binaries with musl instead of glibc.
Closes #1355

are we going to have to wait till the next release to ship new binaries, or can we just change some files now?

@yuwen01 same as before, I haven't changed the event when the workflow is ran:
https://github.com/succinctlabs/sp1/blob/2d73382d149001b39ea3d4e7b9e07bddea3fc012/.github/workflows/release.yml#L5-L10
Is it needed?


Update backend README Fixes run-llama/LlamaIndexTS#198

Describe how to export your API key added during setup before running the backend server (this is required if you provided an OpenAI API key).

Closing due to inactivity
FastAPI readme template includes the guide to import the ENV
https://github.com/run-llama/LlamaIndexTS/blob/main/packages/create-llama/templates/types/simple/fastapi/README-template.md
Feel free to reopen if it still an issue


Windows should include time bounds

As a new operator of abacus, it can be confusing to understand exactly which time intervals are covered by each window. This would be simpler if windows self-described their own intervals. Since report documents include many sets of windows, a top-level description might help:
{
  "bounds": [
    {"start":<PHONE_NUMBER>000, "end":<PHONE_NUMBER>000},
    ...
  ],
  ...
}

Possibly related to #310.
WDYT?

@jmcarp
In the current implementation of abacus, the time windows are fixed and do not change. The structure seems to be complicated but it's simply a two-dimensional matrix. The time window bounds can be inferred based on the processed field of the document.
If the processed field is<PHONE_NUMBER>000 (2016-12-05T05:05:05.000Z) then these are the bounds and the slack is 5 days, then for a slack configuration of 5 days the window contents would look like this

Column →  Row ↓
0
1
2
3
4
5

0 (Second)
2016-12-5 5:05:05
2016-12-5 5:05:04
2016-12-5 5:05:03
2016-12-5 5:05:02
2016-12-5 5:05:01
2016-12-5 5:05:00

1 (Minute)
2016-12-5 5:00:00
2016-12-5 4:59:00
2016-12-5 4:58:00
2016-12-5 4:57:00
2016-12-5 4:56:00
2016-12-5 4:55:00

2 (Hour)
2016-12-5 5:00:00
2016-12-5 4:00:00
2016-12-5 3:00:00
2016-12-5 2:00:00
2016-12-5 1:00:00
2016-12-5 00:00:00

3 (Day)
2016-12-5
2016-12-4
2016-12-3
2016-12-2
2016-12-1
2016-11-30

4 (Month)
2016-12
2016-11

The above matrix has truncated minute and second window. They can grow huge if usage is submitted for every second or minute and the slack configuration is in days.
One of the reasons why bounds were not included in the windows is to reduce the size of the document which we learned while using in production environments. The size of the matrix grows based on the SLACK configuration. Also, these windows are available in every metric of every plan in a resource. With growing number of resources, we might end up with a super large document.


links in embedded pages not working

hi,
On our embedded API pages, I am seeing some links for the page navigation. It's being added by default. These inbuilt links are being shown on the GUI like below, once the user clicks on it "not found" error page is being rendered. How can we rectify or disable this inbuilt link on the pages?

@smitabh84 Which version of elements dev portal are you using?

Where do I check it, Nauman?

Hello!
Our team recently took over the stewardship of the elements repo.
Due the volume of un-triaged issues that are pretty old and the time it would take us to get caught up on all of them, we kindly ask that you open up a new ticket if this is still an issue you're struggling with.
If you open a new issue please include:

clear steps to reproduce that include example OAS specs, application setup, code, etc.
the error or issue you are experiencing
the expected behavior

We will be triaging any new tickets in a timely manner.
Thank you for understanding!


Adding namespace to the odom frames

Currently, you need to manually hard-code a namespace to the odom frame_id and child_frame_id. It would be nice if there is a parameter with which it is possible to set a namespace for these frames. Or is there already another available option to do that?

Added in PR #35
Parameters are accessible now via "odom_frame" & "odom_child_frame"


No error on elm-package.json version != tag

It seems that publishing does not verify the version field of elm-package.json matches the release number of the tag. As of this writing, I have a library at 1.2.0 that seems to be working fine, except that the version field is wrong.

Apparently this problem is fixed? This exchange suggests so.

Perhaps, someone should try it and see.

Doesn't my link above indicate that somebody as tried and seen?
Unless you mean that somebody should try the exact conditions that failed for you. That is, somebody should try it with your package. In which case that somebody would have to be you.

I believe this is fixed with my 0.19 binaries. If we can observe it again, we should open a new issue.


Slowdown when processing CMIP6 data

I noticed a significant slowdown of the the global mean tool especially when processing some CMIP6 data.
It seems more evident for models which have a big file which includes multiple years, while it is not evident when single year are processed.
I suspect this is due to the way the file list is being created, might deserve an important refactoring.

Good suggestions! I noticed considerable speedup setting chunks={'time': 12} (since we deal with monthly data).
I keep this issue open since there might be other issues related to multiple file opening worth to be investigated...

Further improvements associated with an improved time selection - which is actually partially missing - in performance indices.

Closed with #46


Export to HTML prompts for Python kernel, then fails

Applies To

[X] Notebooks (.ipynb files)
[ ] Interactive Window and/or Cell Scripts (.py files with #%% markers)

What happened?
While running through the golden scenario, I attempted to export the notebook to an HTML file.
Expected:
After clicking export to HTML, I am prompted to specify a file name. After entering one, the exported HTML file is then generated.
Actual:
After clicking export to HTML, I was prompted to specify a file name. After entering one, I was then prompted to specify a Python kernel. After selecting my current kernel (the golden scenario conda env), I received the error "Running cells with python 3.7.13 ('golden_scenario_env') requires notebook package."
I then tried again, and was not prompted to select a Python kernel, and the HTML file was then correctly generated.
I don't believe I should have been prompted to select a Python kernel at all. Recording here: https://msit.microsoftstream.com/video/79a60840-98dc-a27a-e9b5-f1ed287bbe75?st=1212
VS Code Version
Version: 1.70.2 (user setup) Commit: e4503b30fc78200f846c62cf8091b76ff5547662 Date: 2022-08-16T05:35:13.448Z Electron: 18.3.5 Chromium: 100.0.4896.160 Node.js: 16.13.2 V8: <IP_ADDRESS>-electron.0 OS: Windows_NT x64 10.0.22000
Jupyter Extension Version
v2022.7.1102252217
Jupyter logs
No response
Coding Language and Runtime Version
No response
Language Extension Version (if applicable)
No response
Anaconda Version (if applicable)
conda 4.12.0
Running Jupyter locally or remotely?
Local

@olguzzar I am very sorry for missing this issue. looks like we came across this issue much later.
I guess you have managed to get this working.
I do apologize for the late reply.
If this still exists, plese do let us know. and we'll be happy to re-open this, or feel free to create a new issue


PR for initial set up of YAML and ARM + Dan's Aedb 36 reminder email

YAML & ARM looks good to me ✔


Testing the dc_dgl installation result prompts ''CUDA: an illegal memory access was encountered''

Hi, I have updated the test script, could you try again?

This problem occurred.

could you provide more details about your software and hardware settings?

conda list：

CPU information：

GPU：NVIDIA k80

Can we not use the sampling results to judge whether the installation is successful because the sampling results change?
The following are two sampling results：

Indeed for your case, the installation is actually successful, and I think you can move on to the rest of ducati repo safely. As for the sampling result comparison, this is rather a (maybe too) rigid safety insurance. I willcheck what is going on and maybe improve this part later. Thank you for your report!

Thanks, I will close this question.

The following error occurs when running ‘run_allocate.py’:

The following error occurs when running ‘run_allocate.py’:

The line of code (load_graph.py L133) which causes your error is a standard DGL-UVA code without any modification.
# load_graph.py
...
126   sampler = dgl.dataloading.NeighborSampler(fanouts)
...
133             input_nodes, output_nodes, blocks = sampler.sample(graph, seeds)
...

What is your result of python run_sota.py?

There was an issue with UVA sampling with the 0.8.0 version of DGL using the k80 GPU, which was resolved before I upgraded to 1.0.2.

run 'run_sota.py' result:

Got it, then it seems that the problem is caused by using K80 with DGL v0.8 which is unfortunately our code base. Since several other people have successfully reproduced this repo with other GPUs, and we do not have future plan to rebase/refactor our code against new DGL releases, is it possible for you to try other GPU cards?


ghc-mod: "Unrecognized option --help, try --help"

All I know:
$ ./result/sw/bin/ghc-mod
.ghc-mod-wrapped: No command given (try --help)
$ ./result/sw/bin/ghc-mod  --help
.ghc-mod-wrapped: Parsing command line options failed: unrecognized option `--help'

(Haskell package)

@matthiasbeyer, which branch / channel are you on?

unstable

How did you install ghc-mod from the unstable channel? The package has been marked as "broken" there since 3508e627408355a4a32f7dd90726b86b91f84f3d from April 17th.

I installed it via the configuration.nix file.

I don't see how that could be possible: the package is marked broken. Any attempt to install it fives the following result:
$ nix-env -iA haskellPackages.ghc-mod
error: Package ‘haskell-ghc-mod-<IP_ADDRESS>’ in ‘/home/simons/.nix-defexpr/pkgs/development/haskell-modules/hackage-packages.nix:52243’ is marked as broken, refusing to evaluate.
For `nixos-rebuild` you can set
  { nixpkgs.config.allowBroken = true; }
in configuration.nix to override this.
For `nix-env` you can add
  { allowBroken = true; }
to ~/.nixpkgs/config.nix.

$ nix-env -iA nixpkgs.haskellPackages.ghcMod

works for me.

You are definitely not on (a recent version of) nixos-unstable. The attribute you installed, ghcMod, doesn't even exist anymore:
$ nix-env -iA haskellPackages.ghcMod
error: attribute ‘ghcMod’ in selection path ‘haskellPackages.ghcMod’ not found

Anyway, I guess the point is that ghc-mod is currently broken because of https://github.com/kazu-yamamoto/ghc-mod/issues/467, and the maintainers seems to be in no hurry releasing a fixed version. As of now, there is no way to use ghc-mod in Nix. People have apparently had success installing a current snapshot directly from the git repository, but there's no official release available that even compiles.

Jup. Just updated my channels and you're right.
I guess this can be closed now?

I'm afraid so. There's not much we can do at the moment. When the new version comes out, we'll re-enable the build ASAP.


Support to install with script?

Currently there's support for installation with brew, could we also provide scripts for installation?
I see we are using goreleaser. It also has a sibling project called godownloader which we can use to generate scripts
Just saying because I have noticed many projects provide this feature - it almost needs no other extra software like brew. People just need something like curl and that's it

We can support alternative way of installation as well. @karuppiah7890 thanks for letting know about this option, if possible kindly raise a PR


Some links in "Shared Concepts" documentation are broken

The three links generated by the <ident type="class">...</ident> element inside the Shared Concepts documentation don't work. The respective lines in the source code are:
https://github.com/music-encoding/music-encoding/blob/a81ac1d2a359242f871e5cac3f0160b40c3c7401/source/docs/02-shared.xml#L253
https://github.com/music-encoding/music-encoding/blob/a81ac1d2a359242f871e5cac3f0160b40c3c7401/source/docs/02-shared.xml#L688
https://github.com/music-encoding/music-encoding/blob/a81ac1d2a359242f871e5cac3f0160b40c3c7401/source/docs/02-shared.xml#L689
When clicking on any of the generated links (e.g., model.graphicprimitiveLike in https://music-encoding.org/guidelines/v4/content/shared.html#usersymbolsOverview), I'm getting a 404 error. Not sure what the correct solution would be here. If I can help fixing it, I will gladly open a PR for that.

Many thanks for reporting this, will check on it and come back to you:wink:

The code is ok, it's a problem in the static versions of the guidelines (v3/4).

A fix is ready in https://github.com/music-encoding/guidelines/pull/205


Build only one or some page

Is possible to build only one or some pages ?
something like
lume build post1.njk

No, Lume works with directories.
You could do it programaticaly, but only render the page, not save it:
const page = site.renderPage("post1.njk");


Add Cantonese Localization

When I see some of the Bluesky users complaining that they cannot understand either zh-CN or zh-TW and have to use English, I think it's necessary to complete the localization for Cantonese.
Cantonese (粵文) is the commonly used language in Hong Kong, Macau, and the local Chinese communities in Malaysia and Singapore.It's a unique language, with the majority of users being in Hong Kong, so this language file primarily follows Hong Kong's usage habits.
For compatibility reasons, I categorized it as "zh-HK" instead of "yue" to match more browsers and OS. At the same time, I simplified zh-CN and zh-TW to 'Simplified Chinese' and 'Traditional Chinese, as their current names are too long.
I completed 100% of the translation, and welcome any reviews as well.

Thanks to Bluesky user @quicpasta.bsky.social for the review (commit 388f7df).


SCB-135 Statistic data is wrong in govern api when different domains …

Codecov Report

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

@@            Coverage Diff            @@
##             master     #230   +/-   ##
=========================================
  Coverage          ?   68.71%
=========================================
  Files             ?       17
  Lines             ?     3558
  Branches          ?        0
=========================================
  Hits              ?     2445
  Misses            ?      937
  Partials          ?      176

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 57a0004...9c5424f. Read the comment docs.

Changes Unknown when pulling 9c5424f5ec614483985e2580f7107ea65c14598d on little-cui:master into ** on apache:master**.

Changes Unknown when pulling 1732f0167b4c2165272016310c4042eb8d69c751 on little-cui:master into ** on apache:master**.

Changes Unknown when pulling e8da2a0fc8b59d584484c0822586bc28f118122b on little-cui:master into ** on apache:master**.

Changes Unknown when pulling 445a0ee55fe8a39f7320895d9f74cc2900f760a1 on little-cui:master into ** on apache:master**.


Edit Theme button doesn't work after switching themes (oled to nord or vice versa)

Opened theming page, selected Nord from the drop down, then clicked the edit button. Nothing happens, no popup to ask for a name. When trying to click a theme tile, it says that i need to click edit first. But edit does nothing.

My branch


showLoader Not getting True

We implementing your directive but when the http request is made the showLoader is not getting true. It remain false.

It got fixed.


DFP Interstitial

How about a PublisherInterstitial ?

I believe you can simply use the AdMobInterstitial also for DFP interstitials, since their behavior and options are the same.


[bug] About InvenTree button broken again for 0.12.8

Please verify that this bug has NOT been raised before.

[X] I checked and didn't find a similar issue

Describe the bug*
Hi,
similar situation it seems like as in #5133, when checking out the version explicitly the About InvenTree button stops working while if you checkout the 0.12.x branch, everything works like expected.
Due to various reasons I haven't checked if the merged in solution for #5133 actually fixed the issue on the previous releases.
Steps to Reproduce

check out 0.12.8 on bare metal
start the server
About InvenTree Button crashes with a python exception.

Expected behaviour
The About InvenTree dialog should show the current selected version as well as other infos.
Deployment Method

[ ] Docker
[X] Bare metal

Version Information
0.12.8
Please verify if you can reproduce this bug on the demo site.

[ ] I can reproduce this bug on the demo site.

Relevant log output
IndexError at /about/
list index out of range
Request Method:	GET
Request URL:	http://inventree:8443/about/
Django Version:	3.2.19
Exception Type:	IndexError
Exception Value:
list index out of range
Exception Location:	/home/inventree/src/InvenTree/InvenTree/version.py, line 165, in inventreeBranch
Python Executable:	/home/inventree/env/bin/python3
Python Version:	3.10.12
Python Path:
['/home/inventree/src/InvenTree',
 '/home/inventree/env/bin',
 '/usr/lib/python310.zip',
 '/usr/lib/python3.10',
 '/usr/lib/python3.10/lib-dynload',
 '/home/inventree/env/lib/python3.10/site-packages',
 '/home/inventree/env/lib/python3.10/site-packages/odf',
 '/home/inventree/env/lib/python3.10/site-packages/odf',
 '/home/inventree/env/lib/python3.10/site-packages/odf',
 '/home/inventree/env/lib/python3.10/site-packages/odf',
 '/home/inventree/env/lib/python3.10/site-packages/odf',
 '/home/inventree/env/lib/python3.10/site-packages/odf',
 '/home/inventree/env/lib/python3.10/site-packages/odf']
Server time:	Wed, 01 Nov 2023 13:03:55 +0000
Error during template rendering
In template /home/inventree/src/InvenTree/templates/version.html, error at line 6

list index out of range
1	# Version Information:{% load inventree_extras %}
2	InvenTree-Version: {% inventree_version %}
3	Django Version: {% django_version %}
4	{% inventree_commit_hash as hash %}{% if hash %}Commit Hash: {{ hash }}{% endif %}
5	{% inventree_commit_date as commit_date %}{% if commit_date %}Commit Date: {% render_date commit_date %}{% endif %}
6	{% inventree_branch as branch %}{% if branch %}Commit Branch: {{ branch }}{% endif %}
7	Database: {% inventree_db_engine %}
8	Debug-Mode: {% inventree_in_debug_mode %}
9	Deployed using Docker: {% inventree_docker_mode %}
10	Platform: {% inventree_platform %}
11	Installer: {% inventree_installer %}
12	{% inventree_target as target %}{% if target %}Target: {{ target }}{% endif %}
13	Active plugins: {% plugins_info %}
14

I cannot seem to reproduce this on 0.12.8

Dixed


feat: Add metadata_options for node_groups

PR o'clock
Description
Add metadata_options in custom launch_template for managed node groups.
Useful for: https://docs.aws.amazon.com/eks/latest/userguide/best-practices-security.html
Checklist

[x] README.md has been updated after any changes to variables and outputs. See https://github.com/terraform-aws-modules/terraform-aws-eks/#doc-generation

@maxbrunet are you planning to rebase again?

@maxbrunet Please rebase and I will merge it right away.
Sorry that this one take so long, too.

Rebased. Thank you @antonbabenko!

Here it is! Thanks, @maxbrunet and @xr0n1ck for the work and lengthy discussion.
v17.18.0 has been just released.
🚀


Implement offsets for Zserio structures

Implement offsets for Zserio structures. They should be implemented completely transparently for users.
Rethink again the idea to use mutable private member in the generated data.

Current approach:

offset fields will be mutable in data,
offset fields will remain public since users who want to use only data wouldn't be able to access private members,
offset will be always reset during serialization, it will be properly documented that setting offsets manually is worthless.


Zend_Db_Statement does not allow calling static methods in sql server

I played around with geography library in sql server and encountered an edge case error.
The query
SELECT geography::Point(lat, lng, 4326) FROM Table

will result in an exception being thrown in Zend_Db_Statement::_parseParameters saying Invalid bind-variable name ':Point'
The offending code is a regex which splits the string on parameters
'/(\?|\:[a-zA-Z0-9_]+)/'

The solution is to add a negative lookbehind and exclude double ::
'/(\?|(?<!\:)\:[a-zA-Z0-9_]+)/'

I'm unsure if this will have any negative side effects since the code is shared between all database adapters.
A workaround in the present state is to wrap the entire statement using eval
EVAL('SELECT geography::Point(lat, lng, 4326) FROM Table')

I have also noticed this a year back, never got around to reporting it, just worked around it :/


Handle OMERO sessions and generate web links

Throws RuntimeExceptions instead of Checked exceptions
Fetches session uuid from omero
Generates complete links for web image viewer
Generates complete links for web image download

Codecov still fails to generate reports. Will merge nonetheless


Agola do not pass variables/secrets

What happened:
I'm trying to use variables/secrets, but they aren't passed to the run.
What you expected to happen:
When I use a variable/secret passed, it is available inside a run.
How to reproduce it (as minimally and precisely as possible):
checkout https://github.com/cirelli94/agola-example-go/tree/81202cf7727437317f096074b12d7e2a2209eded
push it on your own git service, set as remotesource
add it as project
add a "pippo" secret:
$ agola --token $AGOLA_USER_TOKEN -u $AGOLA_GATEWAY projectgroup secret create --projectgroup org/topolinia/topolinia-pg --name secrets -f secrets.yml
Here it is the file: https://github.com/cirelli94/agola-example-go/blob/master/secrets/secrets.yml
add a "pippo" variable:
$ agola --token $AGOLA_USER_TOKEN -u $AGOLA_GATEWAY projectgroup variable create --projectgroup org/topolinia/topolinia-pg --name variables -f variables.yml
Here it is the file: https://github.com/cirelli94/agola-example-go/blob/master/secrets/variables.yml
trigger a run, and check env steps results inside build go tasks
Anything else we need to know?:
Here it is a runned example
http://ci.ercole.io/org/topolinia/projects/topolinia-pg/agola-example-go.proj/runs/0000001g1q117-000000000000i

As you can see here, the project variable and secrets are added at the project.

Here it is the config.jsonnet reference to the point I use that variable:
https://github.com/cirelli94/agola-example-go/blob/83e38323e85e09239b2cd79f1f17da86a55c9f8f/.agola/config.jsonnet#L13
Environment:

Agola version: latest
Agola running environment (if useful to understand the bug): kubernetes

@cirelli94 Your variable name is variables (strange name), Not pippo. Take a look at the doc: https://agola.io/doc/concepts/secrets_variables.html#secrets

Thanks @sgotti, I understood my mistake!


time is not mentioned

while writing comment  user name ,date and time should be mentioned .
But here only time itself not mentioned
Both in inventory adjustment detail page , under customer comment page and vendour comment page

issue closed


Improve Event log to get statistics

If we want to use logs to get statistics, we need to improve current log implementation:

[ ] specify what's has been build in build
[ ] replace roundX with the scoring tile booster (e.g.  Score6)
[ ] specify the research area in up (e.g. up gaia)
[ ] list the full income
[ ] add gaiaform build
[ ] add income for lab (e.g. tech xxx up yyy), where techs are the effective tiles , not the position

TBC

I specifically changed the scoreX to roundX because it was much better in the logs. And also if we add a tally of VP earned through the game for each player, it will display much nicer.
That doesn't mean we can't do stats based on scoring tile booster, we can easily deduce it by matching roundX with the booster of roundX.
We should probably also add a statistics object in the game model in gaia-site.

Trust me, I have been doing business intelligence for almost 20 years. It's better to have better raw data, and work on the presentation, that do the opposite ;)

Doesn't bother me, as long as we do both at the same time.

Actually, the problem with tech tiles is similar (tech-gaia / techX). It would make sense to have both data stored (friendly name & raw tech / scoring tile).


White tiles overlay entire page after drawing ~200 markers

How to reproduce

Leaflet version I'm using: 1.3.1
Browser (with version) I'm using: Chrome 63.0.3239.132 (Official Build) (64-bit)
OS/Platform (with version) I'm using: Ubuntu 14.04 64 bit
step 1: Plot ~200 markers on the map.
step 2: Hover mouse over the page. White tiles appear over the contents of the page.

What behaviour I'm expecting and which behaviour I'm seeing
Expecting: Normal behaviour.
Seeing: White tiles appear over the contents of the page.
https://imgur.com/a/uoqcN - see first image.
Minimal example reproducing the issue
https://plnkr.co/edit/KrgvoR3FxxMxRgUsyaMf?p=preview
Research I've done so far
Looked though Leaflet bugs.
Looked (not thoroughly) through Chrome bugs.
Tested on other versions of Chrome:
60.0.3112.113 - reproduced.
63.0.3239.108 - not reproduced.
65.0.3325.181 - reproduced on Ubuntu 14.04, not reproduced on Windows 7, OS X, Ubuntu 14.04 (a different PC).
Tested on Firefox - not reproduced on any version I could get my hands on.
Turned-on Chrome rendering devtool:
https://imgur.com/a/uoqcN - see second image.
I think that the red color means OOM tiles, which sounds strange, because I have plenty (4 GB) of RAM free. (https://cs.chromium.org/chromium/src/cc/debug/debug_colors.cc?q=f:debug_colors.cc&sq=package:chromium&l=124)

Cannot reproduce on Chromium 66.0.3359.26 on Debian (with a Nvidia GT graphics card). :neutral_face:
BTW, what's your video hardware? It's a long shot, but this might be related to the GPU running out of GPU memory.

@IvanSanchez
My CPU is:

Intel(R) Core(TM) i3-4130 CPU @ 3.40GHz

And I use the integrated GPU:

4th Generation Core Processor Family Integrated Graphics Controller

For the GPU memory - chrome can show how much GPU memory is allocated, and I didn't see it go past ~30 MB. See first photo - https://imgur.com/a/N1fbt.
@designgears
After disabling hardware acceleration, the problem is still present.
See second and third photo - https://imgur.com/a/N1fbt.
BTW after disabling the hardware acceleration, Chrome needed to relaunch and it updated to 65.0.3325.181, and the problem is still present with and without hw accel.

Ping? :)

Closing as it's likely a GPU/browser bug we have no control over.


Fix _channel ref count issue

_channel ref obtain happened after the sync block exited, which might be a compiler bug. This PR mitigates this problem by making _channel a __block variable.

This change works for fixing issue #15033. Without this change I see the problem ~9 out of 10 times. With this change I haven't been able to reproduce a single time in 20 attempts.
It would be worth adding a comment about why the variable is marked __block because it seems extraneous given that there's no actual block.

Thanks! I'll definitely comment for this fix.

Interop tests - #14969


Fix EventBoundary crashing when the pointerupoutside, pointerout target is unmounted from the scene graph.

Description of change
In this example (before this PR is merged!), errors are thrown in the pointerout event dispatch because I remove each character on click. This is fixed by finding the most specific ancestor of the original target that is still mounted.

Additional change: Add getCoalescedEvents and getPredictedEvents to FederatedPointerEvent as they're new APIs and are needed to correctly implemented PointerEvent (was getting type errors).
Pre-Merge Checklist

[x] Tests and/or benchmarks are included
[x] Documentation is changed or added
[x] Lint process passed (npm run lint)
[x] Tests passed (npm run test)

Not sure why CodeCov is throwing a fit. I added more tests. Any idea @bigtimebuddy?

Fixed, I did describe.only but forgot to revert.


Moves updates cmd -> events

Fixes #362.
$ textile events --help
Usage:
  textile [OPTIONS] events [events-OPTIONS]

Subscribe to thread events/updates.
Use the --thread option to subscribe to events emmited from a specific thread.
Use the --type option to filter to specific event type(s). Omit for all
events (default), otherwise, use a comma-separated list of event types
(e.g., FILES,COMMENTS,LIKES).

Help Options:
  -h, --help             Show this help message

[events command options]
      -t, --thread=      Thread ID. Omit for all (default).
      -k, --type=        Comma-separated list of event types to include. Omit for all (default).

    Client Options:
          --api=         API address to use (default: http://<IP_ADDRESS>:40600)
          --api-version= API version to use (default: v0)

This also updates the API endpoints. So /events will return all events, and /events/:id will return events specific to the given thread. The type option (via the X-Textile-Opts header) should be an or'd list of event types (e.g., "FILES|COMMENTS|LIKES"). Spaces are trimmed, so "FILES | COMMENTS | LIKES" works too. From the cmd line, something like this also works: "FILES, COMMENTS, LIKES" or event FILES,COMMENTS,LIKES (no spaces or quotes).

There were the following issues with your Pull Request

Commit: b97564b50ff6805652295ebb651d7c625689be89
Commits must be in the following format: %{scope}: %{description}

This message was auto-generated by https://gitcop.com

There were the following issues with your Pull Request

Commit: b97564b50ff6805652295ebb651d7c625689be89
Commits must be in the following format: %{scope}: %{description}

This message was auto-generated by https://gitcop.com

There were the following issues with your Pull Request

Commit: b97564b50ff6805652295ebb651d7c625689be89
Commits must be in the following format: %{scope}: %{description}

This message was auto-generated by https://gitcop.com

oh forget it... dunno how to make the gitcop happy...

Nice @carsonfarmer. I still think we should go with sub. events sounds like your listing a resource, like comments or something whereas the behavior here is very different.

The Cop is appeased by changing any failed commit messages to be type: description

Do the "types" need to be uppercased? Or can I pass lowercase too?

Looking good though, thanks for jumping in

There were the following issues with your Pull Request

Commit: b97564b50ff6805652295ebb651d7c625689be89
Commits must be in the following format: %{scope}: %{description}

This message was auto-generated by https://gitcop.com

There were the following issues with your Pull Request

Commit: b97564b50ff6805652295ebb651d7c625689be89
Commits must be in the following format: %{scope}: %{description}

This message was auto-generated by https://gitcop.com

Aside from my inability to fix that errant commit...

I still think we should go with sub
Ok, changed!

Do the "types" need to be uppercased? Or can I pass lowercase too?
You can use lowercase as well (your question prompted me to add this).

Looking good though, thanks for jumping in
Thanks, should be gtg now.


[PP] Euterpe - Name of the artists

In the data coming from Euterpe, sometimes the name and the function of an artist is indicated and, sometimes, only its function is known. Even if every information is in the original datasets.
Example of a M27 Foreseen Individual Performance with a function but without a name :
http://data.doremus.org/performance/85123fb0-e6d4-3673-a3fb-80943399d4f4/5
In the same concert, example of a M27 Foreseen Individual Performance with a function and a name :
http://data.doremus.org/performance/85123fb0-e6d4-3673-a3fb-80943399d4f4/2
In the original data, everything is mentionned :
<intervenant id="10029" libelle="Jane Birkin" role="chant" />
                <intervenant id="11242" libelle="Nobuyuki Nakajima" role="direction musicale, piano" />
                <intervenant id="10292" libelle="Takuma Sakamoto" role="trompette" />
                <intervenant id="10293" libelle="Hoshiko Yamane" role="violon" />
                <intervenant id="10294" libelle="Ichiro Onoe" role="batterie" />

moved to https://github.com/DOREMUS-ANR/euterpe-converter/issues/8


I want to sort upcoming tasks by date

As a user, I want to sort upcoming tasks by date, so that I can filter out the latest/oldest tasks according to my needs.

#102


Flexible base class

We are using Rails with a multiple database setup which causes a minor issue with the Timescaledb gem. Timescaledb classes inherit from ActiveRecord::Base but in our case we need the base class to be Reporting::ApplicationRecord otherwise the wrong database is being connected to and we get errors.
I can currently get around this with an initializer something like this:
module TimescaledbExtension
  extend ActiveSupport::Concern

  included do
    self.abstract_class = true
    connects_to database: {writing: :reporting, reading: :reporting}
  end
end

Rails.configuration.to_prepare do
  Timescaledb::Chunk.include TimescaledbExtension
  Timescaledb::Hypertable.include TimescaledbExtension
  ...
end

Would it be possible to have the base class be ActiveRecord::Base by default but allow specifying a different class?

I encountered the same issue, but we have multiple TS databases.
looks like the easiest solution for now is to create base class (i.e. Timescaledb::ApplicationRecord) and inherit all TS models from it. then you can either change default database in your initializer using .connects_to(database: { ... }) or switch between databases via .establish_connection(database_name).
I've added an example of possible solution:

patch
diff --git a/lib/timescaledb.rb b/lib/timescaledb.rb
index 72ed0be..d9dea63 100644
--- a/lib/timescaledb.rb
+++ b/lib/timescaledb.rb
@@ -1,5 +1,6 @@
 require 'active_record'

+require_relative 'timescaledb/application_record'
 require_relative 'timescaledb/acts_as_hypertable'
 require_relative 'timescaledb/acts_as_hypertable/core'
 require_relative 'timescaledb/toolkit'
diff --git a/lib/timescaledb/application_record.rb b/lib/timescaledb/application_record.rb
new file mode 100644
index 0000000..303c40b
--- /dev/null
+++ b/lib/timescaledb/application_record.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+module Timescaledb
+  class ApplicationRecord < ::ActiveRecord::Base
+    primary_abstract_class
+  end
+end
diff --git a/lib/timescaledb/chunk.rb b/lib/timescaledb/chunk.rb
index a35cb44..f2a00ed 100644
--- a/lib/timescaledb/chunk.rb
+++ b/lib/timescaledb/chunk.rb
@@ -1,5 +1,5 @@
 module Timescaledb
-  class Chunk < ActiveRecord::Base
+  class Chunk < ::Timescaledb::ApplicationRecord
     self.table_name = "timescaledb_information.chunks"
     self.primary_key = "chunk_name"

diff --git a/lib/timescaledb/compression_settings.rb b/lib/timescaledb/compression_settings.rb
index 380669a..4b4fc4f 100644
--- a/lib/timescaledb/compression_settings.rb
+++ b/lib/timescaledb/compression_settings.rb
@@ -1,5 +1,5 @@
 module Timescaledb
-  class CompressionSetting < ActiveRecord::Base
+  class CompressionSetting < ::Timescaledb::ApplicationRecord
     self.table_name = "timescaledb_information.compression_settings"
     belongs_to :hypertable, foreign_key: :hypertable_name
   end
diff --git a/lib/timescaledb/continuous_aggregates.rb b/lib/timescaledb/continuous_aggregates.rb
index 272978a..f4ca3b8 100644
--- a/lib/timescaledb/continuous_aggregates.rb
+++ b/lib/timescaledb/continuous_aggregates.rb
@@ -1,5 +1,5 @@
 module Timescaledb
-  class ContinuousAggregate < ActiveRecord::Base
+  class ContinuousAggregate < ::Timescaledb::ApplicationRecord
     self.table_name = "timescaledb_information.continuous_aggregates"
     self.primary_key = 'materialization_hypertable_name'

diff --git a/lib/timescaledb/dimensions.rb b/lib/timescaledb/dimensions.rb
index 1d97f8d..7148d0e 100644
--- a/lib/timescaledb/dimensions.rb
+++ b/lib/timescaledb/dimensions.rb
@@ -1,5 +1,5 @@
 module Timescaledb
-  class Dimension < ActiveRecord::Base
+  class Dimension < ::Timescaledb::ApplicationRecord
     self.table_name = "timescaledb_information.dimensions"
 #    attribute :time_interval, :interval
   end
diff --git a/lib/timescaledb/hypertable.rb b/lib/timescaledb/hypertable.rb
index 317c428..ad540b5 100644
--- a/lib/timescaledb/hypertable.rb
+++ b/lib/timescaledb/hypertable.rb
@@ -1,5 +1,5 @@
 module Timescaledb
-  class Hypertable < ActiveRecord::Base
+  class Hypertable < ::Timescaledb::ApplicationRecord
     self.table_name = "timescaledb_information.hypertables"
     self.primary_key = "hypertable_name"

diff --git a/lib/timescaledb/job.rb b/lib/timescaledb/job.rb
index 86207c4..71d280e 100644
--- a/lib/timescaledb/job.rb
+++ b/lib/timescaledb/job.rb
@@ -1,5 +1,5 @@
 module Timescaledb
-  class Job < ActiveRecord::Base
+  class Job < ::Timescaledb::ApplicationRecord
     self.table_name = "timescaledb_information.jobs"
     self.primary_key = "job_id"

diff --git a/lib/timescaledb/job_stats.rb b/lib/timescaledb/job_stats.rb
index 41bab62..29de964 100644
--- a/lib/timescaledb/job_stats.rb
+++ b/lib/timescaledb/job_stats.rb
@@ -1,5 +1,5 @@
 module Timescaledb
-  class JobStat < ActiveRecord::Base
+  class JobStat < ::Timescaledb::ApplicationRecord
     self.table_name = "timescaledb_information.job_stats"

     belongs_to :job

@jonatas what do you think? (nice job btw)

I like it! I thought about these constraints a few days ago, but I never came to a real case! So let's move in this direction. Feel free to submit the PR!


Enabling of multiple file imports at once

Hi there, I started to use this package to prepare for a run of Tomb of Annihilation, but I saw that importing was limited to one file at once although your code definitely lets you import multiples. It seems like this was only a small change to do in the creation of the input elements, so I hope it's fine for you if I create this quick PR.

Thanks!


Cleanup scripts section in package.json

Fixes https://github.com/neo-project/neo-visual-tracker/issues/25

I'm still getting the "Errors exist after running preLaunchTask 'npm: watch'." dialog on this PR.
If I run 'npm run compile' from the command line, I get the following result:
PS> npm run compile

><EMAIL_ADDRESS>compile C:\Users\harry\Source\neo\seattle\visual-devtracker
> node scripts/compile.js

(node:27264) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'trim' of undefined
    at C:\Users\harry\Source\neo\seattle\visual-devtracker\scripts\compile.js:40:39
    at Object.<anonymous> (C:\Users\harry\Source\neo\seattle\visual-devtracker\scripts\compile.js:67:3)
    at Module._compile (internal/modules/cjs/loader.js:1121:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1160:10)
    at Module.load (internal/modules/cjs/loader.js:976:32)
    at Function.Module._load (internal/modules/cjs/loader.js:884:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:67:12)
    at internal/main/run_main_module.js:17:47
(node:27264) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:27264) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

running npm watch from command line doesn't appear to have any errors, but the output window gets reset so I can't capture all of it:
> cmd.exe /c node-sass src\panels\invoke.scss -o out/panels
  cmd.exe /c node-sass src\panels\invoke.scss -o out/panels : Rendering Complete, saving .css file...
  cmd.exe /c node-sass src\panels\invoke.scss -o out/panels : Wrote CSS to C:\Users\harry\Source\neo\seattle\visual-devtracker\out\panels\invoke.css
> cmd.exe /c node-sass src\panels\newwallet.scss -o out/panels
  cmd.exe /c node-sass src\panels\newwallet.scss -o out/panels : Rendering Complete, saving .css file...
  cmd.exe /c node-sass src\panels\newwallet.scss -o out/panels : Wrote CSS to C:\Users\harry\Source\neo\seattle\visual-devtracker\out\panels\newwallet.css
> cmd.exe /c node-sass src\panels\tracker.scss -o out/panels
  cmd.exe /c node-sass src\panels\tracker.scss -o out/panels : Rendering Complete, saving .css file...
  cmd.exe /c node-sass src\panels\tracker.scss -o out/panels : Wrote CSS to C:\Users\harry\Source\neo\seattle\visual-devtracker\out\panels\tracker.css
> cmd.exe /c node-sass src\panels\transfer.scss -o out/panels
  cmd.exe /c node-sass src\panels\transfer.scss -o out/panels : Rendering Complete, saving .css file...
  cmd.exe /c node-sass src\panels\transfer.scss -o out/panels : Wrote CSS to C:\Users\harry\Source\neo\seattle\visual-devtracker\out\panels\transfer.css
> cmd.exe /c browserify out\panels\claim.main.js -o out/panels/bundles/claim.main.js
> cmd.exe /c browserify out\panels\create.main.js -o out/panels/bundles/create.main.js
> cmd.exe /c browserify out\panels\invoke.main.js -o out/panels/bundles/invoke.main.js
> cmd.exe /c browserify out\panels\newwallet.main.js -o out/panels/bundles/newwallet.main.js
> cmd.exe /c browserify out\panels\tracker.main.js -o out/panels/bundles/tracker.main.js
> cmd.exe /c browserify out\panels\transfer.main.js -o out/panels/bundles/transfer.main.js
neo-visual-tracker can now be launched
neo-visual-tracker watching for incremental changes
> cmd.exe /c tsc -watch -p ./
> cmd.exe /c node-sass src\panels\claim.scss -wo out/panels
> cmd.exe /c node-sass src\panels\common.scss -wo out/panels
> cmd.exe /c node-sass src\panels\create.scss -wo out/panels
> cmd.exe /c node-sass src\panels\dialog.scss -wo out/panels
> cmd.exe /c node-sass src\panels\invoke.scss -wo out/panels
> cmd.exe /c node-sass src\panels\newwallet.scss -wo out/panels
> cmd.exe /c node-sass src\panels\tracker.scss -wo out/panels
> cmd.exe /c node-sass src\panels\transfer.scss -wo out/panels
> cmd.exe /c watchify out\panels\claim.main.js -o out/panels/bundles/claim.main.js
> cmd.exe /c watchify out\panels\create.main.js -o out/panels/bundles/create.main.js
> cmd.exe /c watchify out\panels\invoke.main.js -o out/panels/bundles/invoke.main.js
> cmd.exe /c watchify out\panels\newwallet.main.js -o out/panels/bundles/newwallet.main.js
> cmd.exe /c watchify out\panels\tracker.main.js -o out/panels/bundles/tracker.main.js
> cmd.exe /c watchify out\panels\transfer.main.js -o out/panels/bundles/transfer.main.js
  cmd.exe /c tsc -watch -p ./ :
  cmd.exe /c tsc -watch -p ./ : 11:17:31 AM - Starting compilation in watch mode...
neo-visual-tracker can now be launched
neo-visual-tracker watching for incremental changes
neo-visual-tracker can now be launched

If I run 'npm run compile' from the command line, I get the following result:
PS> npm run compile

><EMAIL_ADDRESS>compile C:\Users\harry\Source\neo\seattle\visual-devtracker
> node scripts/compile.js

(node:27264) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'trim' of undefined
    at C:\Users\harry\Source\neo\seattle\visual-devtracker\scripts\compile.js:40:39

Just pushed a fix for that.

latest changes fixed my npm compile issue

I'm still getting the errors exist dialog, though I am still able to run the extension by selecting the Debug Anyway option. There are two warnings in the compile spew (included in full below). One is for a missing license field in the project.json file and the other is a warning about fsevents not being supported on windows. That must be a dependency of a dependency, right?
> Executing task: npm run watch <

loading profile from ~\Source\scripts\profile.ps1

><EMAIL_ADDRESS>watch C:\Users\harry\Source\neo\seattle\visual-devtracker
> node scripts/compile.js -w

> cmd.exe /c npm install
  cmd.exe /c npm install : ><EMAIL_ADDRESS>install C:\Users\harry\Source\neo\seattle\visual-devtracker\node_modules\node-sass
> node scripts/install.js
  cmd.exe /c npm install : Cached binary found at C:\Users\harry\scoop\persist\nodejs\cache\node-sass\4.13.0\win32-x64-79_binding.node
  cmd.exe /c npm install : ><EMAIL_ADDRESS>postinstall C:\Users\harry\Source\neo\seattle\visual-devtracker\node_modules\node-sass
> node scripts/build.js
  cmd.exe /c npm install : Binary found at C:\Users\harry\Source\neo\seattle\visual-devtracker\node_modules\node-sass\vendor\win32-x64-79\binding.node
  cmd.exe /c npm install : Testing binary
  cmd.exe /c npm install : Binary is fine
E cmd.exe /c npm install : npm
E cmd.exe /c npm install : WARN<EMAIL_ADDRESS>No license field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY<EMAIL_ADDRESS>(node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for<EMAIL_ADDRESS>wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})
  cmd.exe /c npm install : added 763 packages from 978 contributors and audited 15120 packages in 40.344s
  cmd.exe /c npm install : 3 packages are looking for funding
  run `npm fund` for details
  cmd.exe /c npm install : found 0 vulnerabilities
> cmd.exe /c tsc -p ./
> cmd.exe /c node-sass src\panels\claim.scss -o out/panels
  cmd.exe /c node-sass src\panels\claim.scss -o out/panels : Rendering Complete, saving .css file...
  cmd.exe /c node-sass src\panels\claim.scss -o out/panels : Wrote CSS to C:\Users\harry\Source\neo\seattle\visual-devtracker\out\panels\claim.css
> cmd.exe /c node-sass src\panels\common.scss -o out/panels
  cmd.exe /c node-sass src\panels\common.scss -o out/panels : Rendering Complete, saving .css file...
  cmd.exe /c node-sass src\panels\common.scss -o out/panels : Wrote CSS to C:\Users\harry\Source\neo\seattle\visual-devtracker\out\panels\common.css
> cmd.exe /c node-sass src\panels\create.scss -o out/panels
  cmd.exe /c node-sass src\panels\create.scss -o out/panels : Rendering Complete, saving .css file...
  cmd.exe /c node-sass src\panels\create.scss -o out/panels : Wrote CSS to C:\Users\harry\Source\neo\seattle\visual-devtracker\out\panels\create.css
> cmd.exe /c node-sass src\panels\dialog.scss -o out/panels
  cmd.exe /c node-sass src\panels\dialog.scss -o out/panels : Rendering Complete, saving .css file...
  cmd.exe /c node-sass src\panels\dialog.scss -o out/panels : Wrote CSS to C:\Users\harry\Source\neo\seattle\visual-devtracker\out\panels\dialog.css
> cmd.exe /c node-sass src\panels\invoke.scss -o out/panels
  cmd.exe /c node-sass src\panels\invoke.scss -o out/panels : Rendering Complete, saving .css file...
  cmd.exe /c node-sass src\panels\invoke.scss -o out/panels : Wrote CSS to C:\Users\harry\Source\neo\seattle\visual-devtracker\out\panels\invoke.css
> cmd.exe /c node-sass src\panels\newwallet.scss -o out/panels
  cmd.exe /c node-sass src\panels\newwallet.scss -o out/panels : Rendering Complete, saving .css file...
  cmd.exe /c node-sass src\panels\newwallet.scss -o out/panels : Wrote CSS to C:\Users\harry\Source\neo\seattle\visual-devtracker\out\panels\newwallet.css
> cmd.exe /c node-sass src\panels\tracker.scss -o out/panels
  cmd.exe /c node-sass src\panels\tracker.scss -o out/panels : Rendering Complete, saving .css file...
  cmd.exe /c node-sass src\panels\tracker.scss -o out/panels : Wrote CSS to C:\Users\harry\Source\neo\seattle\visual-devtracker\out\panels\tracker.css
> cmd.exe /c node-sass src\panels\transfer.scss -o out/panels
  cmd.exe /c node-sass src\panels\transfer.scss -o out/panels : Rendering Complete, saving .css file...
  cmd.exe /c node-sass src\panels\transfer.scss -o out/panels : Wrote CSS to C:\Users\harry\Source\neo\seattle\visual-devtracker\out\panels\transfer.css
> cmd.exe /c browserify out\panels\claim.main.js -o out/panels/bundles/claim.main.js
> cmd.exe /c browserify out\panels\create.main.js -o out/panels/bundles/create.main.js
> cmd.exe /c browserify out\panels\invoke.main.js -o out/panels/bundles/invoke.main.js
> cmd.exe /c browserify out\panels\newwallet.main.js -o out/panels/bundles/newwallet.main.js
> cmd.exe /c browserify out\panels\tracker.main.js -o out/panels/bundles/tracker.main.js
> cmd.exe /c browserify out\panels\transfer.main.js -o out/panels/bundles/transfer.main.js
neo-visual-tracker can now be launched
neo-visual-tracker watching for incremental changes
> cmd.exe /c tsc -watch -p ./
> cmd.exe /c node-sass src\panels\claim.scss -wo out/panels
> cmd.exe /c node-sass src\panels\common.scss -wo out/panels
> cmd.exe /c node-sass src\panels\create.scss -wo out/panels
> cmd.exe /c node-sass src\panels\dialog.scss -wo out/panels
> cmd.exe /c node-sass src\panels\invoke.scss -wo out/panels
> cmd.exe /c node-sass src\panels\newwallet.scss -wo out/panels
> cmd.exe /c node-sass src\panels\tracker.scss -wo out/panels
> cmd.exe /c node-sass src\panels\transfer.scss -wo out/panels
> cmd.exe /c watchify out\panels\claim.main.js -o out/panels/bundles/claim.main.js
> cmd.exe /c watchify out\panels\create.main.js -o out/panels/bundles/create.main.js
> cmd.exe /c watchify out\panels\invoke.main.js -o out/panels/bundles/invoke.main.js
> cmd.exe /c watchify out\panels\newwallet.main.js -o out/panels/bundles/newwallet.main.js
> cmd.exe /c watchify out\panels\tracker.main.js -o out/panels/bundles/tracker.main.js
> cmd.exe /c watchify out\panels\transfer.main.js -o out/panels/bundles/transfer.main.js
  cmd.exe /c tsc -watch -p ./ : 8:22:51 AM - Starting compilation in watch mode...
neo-visual-tracker can now be launched
neo-visual-tracker watching for incremental changes

I'm still getting the errors exist dialog, though I am still able to run the extension by selecting the Debug Anyway option. There are two warnings in the compile spew (included in full below). One is for a missing license field in the project.json file and the other is a warning about fsevents not being supported on windows. That must be a dependency of a dependency, right?

This is the expected output (the npm install is considered successful even though those warnings are written to stderr, and the rest of the script ran fine).  Could something else be causing your vscode to think there are errors? (Maybe those .cs files in the sample_workspace folder?)  Can you try restarting vscode?  Maybe try deleting your out folder?

you were right about the C# files. If I don't do a dotnet restore, vscode reports a ton of errors in TestContract because the dependencies aren't available. So the solution there is to do the dotnet restore when vscode asks you on startup. I never do that since I didn't think it would make a difference.


update ShortGrainDropper

_groupByGrains = {};

Could this work be done in create_transformer_impl? If so, you wouldn't need to keep a _grainsToDrop member variable as it could be local to that func.

Refers to: src/Featurizers/ShortGrainDropperFeaturizer.h:194 in 405aaca. [](commit_id = 405aaca86010903de8b8b5fc84a65d638d682784, deletion_comment = False)

using GrainsSet                         = ShortGrainDropperTransformer::GrainsSet;

If you end up removed _grainsToDrop, remove this as well. In the implementation of create_transformer_impl, use the type defined in ShortGrainDropperTransformer.

Refers to: src/Featurizers/ShortGrainDropperFeaturizer.h:97 in 405aaca. [](commit_id = 405aaca86010903de8b8b5fc84a65d638d682784, deletion_comment = False)


Look at integrating Expo Image

"A cross-platform and performant React component that loads and renders images."
https://docs.expo.dev/versions/v48.0.0/sdk/image/

cc @beaucollins you mentioned this recently

This is the component (the one form Expo) that was a problem for low end Android phones.