Upgrade to Sentinel

This PR will replace Sentry with Sentinel.

[x] Migrations for the Sentinel layout
[x] Sentinel versions of our own interfaces (Authentication, Accountmanagement, etc.)
[x] Tests for the migrations and interfaces
[x] Point the services to the new Sentinel versions

I'm not sure how to update the users passwords. Either every user needs to reset their password, which means that Sentry will be needed. Or this has to go into a major version up, with no backwards compatibility. So i'd like some input on that matter.
Follows #501
Related to #498
Besides a security audit, this is about finished. The only thing left is removing all the old Sentry classes and their tests.

@BackEndTea How to get existing accounts to convert over. One suggestion to me was this:

add a field to existing user accounts identifying them as "legacy"
when a legacy account tried to log in we redirect them to a page where they can update their password for Sentinel (build something that sends them a token via email)
update the field once people have added a new password

I was surprised to find out that i was able to log in just fine with my old information when i changed between Sentinel and Sentry.
So after looking around a bit i found this:
The Sentry Hashing function:
	public function hash($string)
	{
		// Usually caused by an old PHP environment, see
		// https://github.com/cartalyst/sentry/issues/98#issuecomment-12974603
		// and https://github.com/ircmaxell/password_compat/issues/10
		if ( ! function_exists('password_hash'))
		{
			throw new \RuntimeException('The function password_hash() does not exist, your PHP environment is probably incompatible. Try running [vendor/ircmaxell/password-compat/version-test.php] to check compatibility or use an alternative hashing strategy.');
		}

		if (($hash = password_hash($string, PASSWORD_DEFAULT)) === false)
		{
			throw new \RuntimeException('Error generating hash from string, your PHP environment is probably incompatible. Try running [vendor/ircmaxell/password-compat/version-test.php] to check compatibility or use an alternative hashing strategy.');
		}

		return $hash;
	}

The Sentinel one
    public function hash($value)
    {
        if (! $hash = password_hash($value, PASSWORD_DEFAULT)) {
            throw new RuntimeException('Error hashing value. Check system compatibility with password_hash().');
        }

        return $hash;
    }

At least for the native hashing. So if we use the native hashing functionality there is no need to add a 'legacy' field etc and make users reset their passwords. If we go that route this can basically be implemented already. I'd like to add something that destroys all sessions when the upgrade happens for good measure.
Though in that case i'd like someone else to take a look at this and test it out locally.
If someone is inclined to do so, i use this locally to change between Sentry and Sentinel on the fly
$sentinel = true;
        if ($sentinel) {
            $app[Sentinel::class] = function () {
                return (new \Cartalyst\Sentinel\Native\Facades\Sentinel())->getSentinel();
            };

            $app[AccountManagement::class] = function ($app) {
                return new \OpenCFP\Infrastructure\Auth\SentinelAccountManagement($app[Sentinel::class]);
            };

            $app[IdentityProvider::class] = function ($app) {
                return new \OpenCFP\Infrastructure\Auth\SentinelIdentityProvider($app[Sentinel::class], new IlluminateSpeakerRepository(new User()));
            };

            $app[Authentication::class] = function ($app) {
                return new \OpenCFP\Infrastructure\Auth\SentinelAuthentication($app[Sentinel::class], $app[AccountManagement::class]);
            };
        } else {
            $app[AccountManagement::class] = function ($app) {
                return new SentryAccountManagement($app['sentry']);
            };

            $app[IdentityProvider::class] = function ($app) {
                return new SentryIdentityProvider($app['sentry'], new IlluminateSpeakerRepository(new User()));
            };

            $app[Authentication::class] = function ($app) {
                return new SentryAuthentication($app['sentry']);
            };
        }

When I went back and looked at some of my scribbled notes when I was attempting to switch things over, I did see that in terms of hashing the password Sentinel was a drop-in replacement for Sentry. The changes were to any code that spoke to Sentry, and once we centralized all the auth/acl stuff I felt like we were in a much better place to do this.
I will ask for someone to do a security audit -- we had one maybe 18 months ago and it was very useful.

There are currently two failing tests, which refer to tests for console actions, both of which are complaining about setting headers. I'm guessing the console commands need updating to use Sentinel

It looks like it was an error with the tests Mocking Sentry hard coded instead of the AccountManagementInterface.
And while on the Subject of the tests for console actions, it may be smart to use the Symfony KernelTestcase for those in the future. But thats outside of the scope for this PR

Okay folks, I think it is time to decide on go vs no-go on this feature.
@BackEndTea if you can fix the conflicts it's complaining about here, I vote for pushing this feature. I am simply unsure if this qualifies as a v2 release or not

👍
If you can checkout master, deploy the application, create a user and login, then merge upgrade/sentinel, run script/update and everything works okay, then it's probably okay to stay within 1.x. Since it looks like Sentinel is a drop-in for Sentry, then it looks like no password shenanigans need to be accounted for.
The "public interface" that we version semantically seems to be "the experience for the CFP organizer". If that didn't change (they just upgrade as normal) then we're good to stay in a major.
I think we should save 2.x for something super special and magical like #618 😀

After resolving the conflicts and merging into current master, I get the following errors in the tests
vendor/bin/phpunit --configuration phpunit.xml
PHPUnit 6.4.4 by Sebastian Bergmann and contributors.
Runtime:       PHP 7.1.11 with Xdebug 2.5.5
Configuration: /Users/chartjes/Sites/opencfp/phpunit.xml
............................................................................................................... 111 / 416 ( 26%)
..........................................FFF........................SS........................................ 222 / 416 ( 53%)
............................................................................................................... 333 / 416 ( 80%)
...................................................................................                             416 / 416 (100%)
Time: 1.82 minutes, Memory: 318.00MB
There were 3 failures:

OpenCFP\Test\Integration\Infrastructure\Auth\SentinelUserTest::checkResetPasswordCodeWorks
Failed asserting that false is true.

/Users/chartjes/Sites/opencfp/tests/Integration/Infrastructure/Auth/SentinelUserTest.php:84

OpenCFP\Test\Integration\Infrastructure\Auth\SentinelUserTest::getResetPassWordCodeWorks
Failed asserting that false is true.

/Users/chartjes/Sites/opencfp/tests/Integration/Infrastructure/Auth/SentinelUserTest.php:100

OpenCFP\Test\Integration\Infrastructure\Auth\SentinelUserTest::attemptResetPasswordWorks
Failed asserting that false is true.

/Users/chartjes/Sites/opencfp/tests/Integration/Infrastructure/Auth/SentinelUserTest.php:122
--
There were 2 skipped tests:

OpenCFP\Test\Integration\MigrationsTest::oldUsersGetActivated

/Users/chartjes/Sites/opencfp/tests/Integration/MigrationsTest.php:45

OpenCFP\Test\Integration\MigrationsTest::adminsGetPromoted

/Users/chartjes/Sites/opencfp/tests/Integration/MigrationsTest.php:71

But logging in did work! So I think once we get the test suite completely working we should be okay

Some other things currently are not working:

deleting talks
logging out

It needs some more testing I think...

I fixed those bugs, and upped unit test coverage to about as high as i can get it, without starting to write unit tests for a lot of things that are outside of the scope for this PR.
A lot of things are now tested in both unit and integration tests, but i prefer to keep them both. Since the integration tests will show us our errors in interfacing with Sentinel.

I am still not able to get the tests to pass despite them passing on Travis. I wish I could figure out why.
composer install
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Nothing to install or update
Package guzzle/guzzle is abandoned, you should avoid using it. Use guzzlehttp/guzzle instead.
 Took 0.9698s
vendor/bin/phpunit --configuration tests/Integration/phpunit.xml.dist
PHPUnit 6.4.4 by Sebastian Bergmann and contributors.
Runtime:       PHP 7.1.11 with Xdebug 2.5.5
Configuration: /Users/chartjes/Sites/opencfp/tests/Integration/phpunit.xml.dist
............................................................................................................................................... 143 / 183 ( 78%)
...........FFF........................SS                                                                                183 / 183 (100%)
Time: 2 minutes, Memory: 316.00MB
There were 3 failures:

OpenCFP\Test\Integration\Infrastructure\Auth\SentinelUserTest::checkResetPasswordCodeWorks
Failed asserting that false is true.

/Users/chartjes/Sites/opencfp/tests/Integration/Infrastructure/Auth/SentinelUserTest.php:84

OpenCFP\Test\Integration\Infrastructure\Auth\SentinelUserTest::getResetPassWordCodeWorks
Failed asserting that false is true.

/Users/chartjes/Sites/opencfp/tests/Integration/Infrastructure/Auth/SentinelUserTest.php:100

OpenCFP\Test\Integration\Infrastructure\Auth\SentinelUserTest::attemptResetPasswordWorks
Failed asserting that false is true.

/Users/chartjes/Sites/opencfp/tests/Integration/Infrastructure/Auth/SentinelUserTest.php:122
--
There were 2 skipped tests:

OpenCFP\Test\Integration\MigrationsTest::oldUsersGetActivated

/Users/chartjes/Sites/opencfp/tests/Integration/MigrationsTest.php:45

OpenCFP\Test\Integration\MigrationsTest::adminsGetPromoted

/Users/chartjes/Sites/opencfp/tests/Integration/MigrationsTest.php:71

@chartjes
Its kinda hard debugging this for me. Could you run vendor/bin/phpunit --configuration tests/Integration/phpunit.xml.dist --stop-on-failure tests/Integration/Infrastructure/Auth/SentinelUserTest.php
And check what the database looks like, especially the reminders and users table.

The fix for being unable to delete talks is in a separate PR: #727

@BackEndTea resolved the talk deletion bug and that has been merged.

Thank you to EVERYONE for all their help with what is a major change of things behind the scenes.

Thanks @chartjes for merging, and thanks to everyone for helping with this.


Test comparing two different reports in the test tab

When issue https://github.com/wearefrank/ladybug-frontend/issues/782 has been fixed, test it.


Not Working on IE 11

I have a wordpress site that I am incorporating your AOS library into. I am having issues with the elements with AOS applied not showing up on IE 11 (it works fine on Edge). It doesn't look like the CSS is switching from opacity: 0; to opacity: 1; . I saw a ticket opened a few weeks ago with the same issue but it wasn't resolved. I am using your latest cdn version without any additional functions applied.
Also, I'd like to note that I pulled up your AOS "sample" page in IE 11 and there it is working fine..... ????

Hey, that old issue was there for a few months and I didn't get any answer from it's creator so I closed it. It's good that you have a working example that replicated this issue. Let me check what's wrong. I'll get back to you with more informations soon.

Ah it's about SVG.. Have you tried to add AOS on parent element instead of SVG itself? That might resolve your issue.

I think the problem is that IE11 doesn't support CSS animations on SVGs. Wrap them in div and apply animation to div and everything should work as expected :) If this helps you please close this issue.

Thanks! This fixed it my issue.
Additional note: one other thing I noticed in IE is that the header animations housed in the viewport upon page load, which I want to render upon page load, don't render until the user starts to scroll. (Obviously animates in upon page load in every other browser I've tested, Edge included)
In my own personal case, I've incorporated another css library for the logo and subtitle, but this is breaking on my rotating gears in the background because I have my animation iteration set to infinite, so therefore they are "infinitely" zooming in. This is minor (for one browser) in this example because these are supporting elements. I'm no developer :O, but maybe this is a relatively simple fix you could address in your next release?
Thanks for the great library!


Add discord link in footer

Why does the linter display so many errors when I only modified one line?


Bug: Fuel Flows label Imporpely displayed

Context
Note: This is a cosmetic issue that does not impact functionailtiy
Need to discuss if this bug needs to be fixed before the May BETA. If this bug must be fixed before the BETA release it must be resolved before the end of 12.4.
The MP Fuel Flows Label is impropely displayed in the modal. The label has additional padding and is not aligned like the other labels. This issue was spotted in the workspace and should be confirmed that it is not happening in global.
Steps to Reproduce

Login into ECMPS
Navigate to the MP module
Select systems as a section
Select view/edit and scroll down

The Fuel flow label has more padding than other labels.
Fuel Flow Label Display

Bug fixed


nbench: init at 2.2.3

@GrahamcOfBorg build nbench

Success on aarch64-linux (full log)
Attempted: nbench
Partial log (click to expand)
post-installation fixup
shrinking RPATHs of ELF executables and libraries in /nix/store/2q80y2vz5m83fz0lcd0xgw89qzf0l1jv-nbench-byte-2.2.3
shrinking /nix/store/2q80y2vz5m83fz0lcd0xgw89qzf0l1jv-nbench-byte-2.2.3/bin/nbench
cannot find section .dynamic
strip is /nix/store/qjrnv0qw44bw1hc23zhfh26xd1c25dfs-binutils-2.30/bin/strip
stripping (with command strip and flags -S) in /nix/store/2q80y2vz5m83fz0lcd0xgw89qzf0l1jv-nbench-byte-2.2.3/bin
patching script interpreter paths in /nix/store/2q80y2vz5m83fz0lcd0xgw89qzf0l1jv-nbench-byte-2.2.3
checking for references to /build in /nix/store/2q80y2vz5m83fz0lcd0xgw89qzf0l1jv-nbench-byte-2.2.3...
cannot find section .dynamic
/nix/store/2q80y2vz5m83fz0lcd0xgw89qzf0l1jv-nbench-byte-2.2.3

Success on x86_64-linux (full log)
Attempted: nbench
Partial log (click to expand)
post-installation fixup
shrinking RPATHs of ELF executables and libraries in /nix/store/dhzdy96wsngsdp35jccvlphngy2zz64i-nbench-byte-2.2.3
shrinking /nix/store/dhzdy96wsngsdp35jccvlphngy2zz64i-nbench-byte-2.2.3/bin/nbench
cannot find section .dynamic
strip is /nix/store/n4hb93w6j076xcjw5pm09rdmc09s075b-binutils-2.30/bin/strip
stripping (with command strip and flags -S) in /nix/store/dhzdy96wsngsdp35jccvlphngy2zz64i-nbench-byte-2.2.3/bin
patching script interpreter paths in /nix/store/dhzdy96wsngsdp35jccvlphngy2zz64i-nbench-byte-2.2.3
checking for references to /build in /nix/store/dhzdy96wsngsdp35jccvlphngy2zz64i-nbench-byte-2.2.3...
cannot find section .dynamic
/nix/store/dhzdy96wsngsdp35jccvlphngy2zz64i-nbench-byte-2.2.3

Success on aarch64-linux (full log)
Attempted: nbench
Partial log (click to expand)
/nix/store/2q80y2vz5m83fz0lcd0xgw89qzf0l1jv-nbench-byte-2.2.3

Success on x86_64-linux (full log)
Attempted: nbench
Partial log (click to expand)
post-installation fixup
shrinking RPATHs of ELF executables and libraries in /nix/store/dhzdy96wsngsdp35jccvlphngy2zz64i-nbench-byte-2.2.3
shrinking /nix/store/dhzdy96wsngsdp35jccvlphngy2zz64i-nbench-byte-2.2.3/bin/nbench
cannot find section .dynamic
strip is /nix/store/n4hb93w6j076xcjw5pm09rdmc09s075b-binutils-2.30/bin/strip
stripping (with command strip and flags -S) in /nix/store/dhzdy96wsngsdp35jccvlphngy2zz64i-nbench-byte-2.2.3/bin
patching script interpreter paths in /nix/store/dhzdy96wsngsdp35jccvlphngy2zz64i-nbench-byte-2.2.3
checking for references to /build in /nix/store/dhzdy96wsngsdp35jccvlphngy2zz64i-nbench-byte-2.2.3...
cannot find section .dynamic
/nix/store/dhzdy96wsngsdp35jccvlphngy2zz64i-nbench-byte-2.2.3


[BO] Store settings

What settings do we want to add to a store for management of wishlists.
My initial thoughts are the following:

Bool - Ability to enable/disable wishlists
Bool - Do wishlist names have to be unique per customer
Option - When loading a wishlist into the basket, should it override the existing basket, add the items to it, or Prompt the user as to what they want to do.

Not sure the best approach to store settings for Vendr packages at the moment.
It could be a separate node under Vendr settings, but would probably require a "Wishlist" node injects under each store). It would also be a config file similar to the Order Editor Config in Vendr core.
I don't think Wishlist names need to be unique per customer. From what I have seen in other ecommerce systems it is mosly used when having multiple wishlists per customer, e.g. you could create a wishlist "Christmas", "Birthday", etc. When adding a product to wishlist you could get an overlay/modal where the customer can select a wishlist to add this product.
I think wishlists should affect existing baskets/carts, but wishlist order lines usually have a "Add to cart" button and sometimes a feature like "merge wishlist with basket".

As a start I don't think we need to worry much about settings. The developer can decide whether to use wishlists or not. It would be great to go with default settings and later look further at which part that need to be configurable, but I guess if isn't crucial for an initial release.
Maybe @mattbrailsford has some thoughts on how Vendr packages should handle settings.

I was thinking about this yesterday and wondering if there should be a plugin solution for this. Either rendering new blocks in the store settings, or something like content apps. I'd need to give it some more thought though.

Yeah, it would help if we can inherit from a base class in Vendr core or maybe something similar as we payment provider settings. We should also consider that some settings are store specific (but I think Vendr at the moment doesn't have soem global settings at the moment - the ones in settings section are store specific). I guess this is okay, although it in some cases might require to enter same value in a settings property on multiple stores.
Maybe it would be great to have the by default under the "Settings" tab on the store settings node. In some cases for Reviews or Wishlist maybe we want to inject our own tree node to store the settings here.
Regarding payment provider I have some additonal issues here, where it would be great to be able to group these a bit more:
https://github.com/vendrhub/vendr/issues/64
https://github.com/vendrhub/vendr/issues/65
https://github.com/vendrhub/vendr/issues/105

The reason I suggested about the unique wishlist names per customer is that I had that exact requirement from a client, so I'd be keen to keep that as a setting if we can.

Ahh, yes  I think the wishlist names doesn't need to be unique, but per customer it probably don't make sense to have mutliple wishlists with same name.
Not sure we need a setting for this, it could probably be handled in the service or repository.
However we might also consider if anonymous customers can create wishlists (in some ecommerce systems this is possible) and in this scenario we don't have a customer reference by default.

Currently I don't think we have a standard dag to handle settings for add-ons in Vendr expect for payment providers.
We could store some settings in web.config or in Order Editor Config or a specific config file in the plugin. However sometimes we want to modify the settings from backoffice and per store. It could be useful to add properties in backoffice e.g  in store settings node and allow some grouping + sorting.

I am not sure about the setting "Ability to enable/disable wishlists".
If the package was installed in a project, I guess wishlists are supported to be used. Furthermore it this was an option, it should probably be considered, what happens if wishlists were enabled and later disabled. In that case I guess we don't want some wishlist specific stuff in "Commerce" section and the customers won't be able to see wishlists?
Not sure it is big requirement though. As a start if would be great to keep it simple and with minimum settings/configurations.


fix put push

Hello, with these changes I'm able to put push and change the location from saga but I still cannot rollback route change in redux inspector. I'm pretty new to redux / saga. If someone more experimented could watch.

Thanks a lot for PR. I will try to figure this out in the near future


Adjust font size dinamically

Hello, Dr. David.
Thanks for the great work you always do.
After doing some testing, I realized that it would be nice to be able to adjust the font size dynamically, so I created this pull request to make it relatively simple. When you get a chance, I'd appreciate it if you could look at it.
Several test result:
3840 x 2160: font size = 1

2704 x 1520: font size = 0.7

1376 x 910: font size = 3.2

Thanks, it's a good idea indeed! I'll check that next week :)

This is cool!
While you are at it and if you have time, could you also adjust as a function of the resolution

the thickness of bboxes and of skeletons, and
the size of the keypoints?
Thanks again

Little remark: instead of
if fontSize == 'auto' or fontSize == 'Auto':
you can do if fontSize.lower() == 'auto' so that it is case insensitive
Can you also test if it looks as good with videos taken in portrait mode?

Hello, I've updated the thickness.
Now, thickness will adjust based on font size. And the size of the keypoints is still set to thickness+4 (I tested several values, and I believe +4 works best).
The thickness should be an integer, so it can't be a float (since a float allows decimal points, which is less flexible than I expected).
I also tested it in a portrait video, and I believe it's good enough!
Detail results

3840 x 2160 : font size = 1, thickness = 3, size of keypts = 7

2704 x 1520: font size = 0.7, thickness = 2, size of keypts = 6

1376 x 910: font size = 3.2, thickness = 1, size of keypts = 5

1080 x 1920 (portrait): font size = 3.5, thickness = 1, size of keypts = 5

Thank you! A few questions:

I feel like the font size should be set as a function of the maximum dimension (width or height), rather than as a function of their multiplication, because it is quite hard to read the values of the last image on the screen of a small laptop
In general, image quality is okay, but we lose a lot of information in the videos, which makes everything blurrier. Lines are often not very well rendered, so I think it is better to have them a bit too thick than the opposite
I do not see the text outline in the first image but I don't understand why since you did not change the "tickness+1" variables. Do you have any idea why it is like this?
It would be ideal if you managed to have a few parameters in the functions as possible (getting rid of min and max if this is possible, and potentially grouping base and scale under the same parameter)
Since it is used for writing the angles and drawing the lines, and that these functions are in the main process.py file, I would put these functions there rather than in the common.py file

Hello, I appreciate your valuable feedback!
Here is the answer:

Now, the font size will adjust based on the maximum dimension, but I'm not sure if it fits your intention.
Great idea! Now, the line thickness will be at least 2, while the text remains the same as before (for readability).
You're right. It should be adjusted to another value. I thought +1 was enough, but actually, it wasn't. Sorry for missing that. So, I set the value to thickness * 3. I believe this will give us better readability.
I removed a few parameters, but the features remain the same as before. I hope it fits your intention.
I moved the functions to process.py from common.py.

Detail results

3840 x 2160 : font size = 0.78, thickness = 3

2704 x 1520: font size = 0.55, thickness = 2

1376 x 910: font size = 0.28, thickness = 1 for texts, 2 for lines

1080 x 1920 (portrait): font size = 0.39, thickness = 1 for texts, 2 for lines


feat: rendering only not-required value-typed properties as nullable

Description

This change will cause the CSharpRenderer to only render question marks after non-required value-typed properties. Now it's renderer always, required or not.

Related issue(s)
Resolves #748

Although I'm not entirely satisfied with my change at src/generators/csharp/CSharpRenderer.ts:58. It feels like the CommonModel.isRequired(propertyName: string) should be doing what I've done after the || operator. It would be hard to make, though

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

12 of 12 (100.0%)  changed or added relevant lines in 2 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage decreased (-0.05%) to 92.036%

Totals

Change from base Build<PHONE_NUMBER>:
-0.05%

Covered Lines:
2805

Relevant Lines:
2903

💛  - Coveralls

/rtm

/rtm


Cannot run Spoon on particular Test Class when declared in afterEvaluate

Cannot run a particular test case when declared afterEvaluate in build gradle,
afterEvaluate {
        apply plugin: 'spoon'
        spoon {
            // for debug output
            debug = true
            adbTimeout = 60
            className = 'com.junit.suite.JunitTestSuite'
        }
    }

It works propery when i dont use afterEvaluate.
How can i fix this?

I have the same issue, we have apk renaming for our project so we need to apply spoon after evaluation.
It seems that config setting is completely ignored if used in afterEvaluate, is there any way around this?

Hello, guys, any updates?

Is there still any support for this question? I have the same issue with Spoon for this.

The problem is that when plugin is applied, it adds hooks on every test variant to create spoon tasks. When you apply it in afterEvaluate, test variants are already created and plugin code is executed immediately (before spoon config is changed).
If you deal with a case described by @originx, you might try putting apply plugin: 'spoon' after you add closures that modify application variants. So, instead of using afterEvaluate, you just do
application.variants.all { variant ->
  // rename apk...
}
apply plugin: 'spoon'
spoon {
  // edit the config
}

It should work for this particular case.

Thanks @roman-mazur this works for me 👍 and also thanks for the quick response

@roman-mazur Today I was switching branches and came back to my branch with the spoon gradle plugin. And I got the same error again.
I was investigating this and I saw that if you first out comment the application.variants.all it will generate the standard app name apk spoon is working with. (so this works) After I uncomment the application.variants.all the tests are running again, but because the standard apk is already generated this will of course work, If I delete it and rerun than I got the same error that it could not find the apk.
So to summarise the issue:
This doesn't work with fresh install:
application.variants.all { variant ->
  // rename apk...
}

apply plugin: 'spoon'
spoon {
  // edit the config
}

This works:
Step 1:
//application.variants.all { variant ->
// rename apk...
//}

apply plugin: 'spoon'
spoon {
  // edit the config
}

Run the application.
Step 2:
application.variants.all { variant ->
  // rename apk...
}

apply plugin: 'spoon'
spoon {
  // edit the config
}

Rerun the application
Any clue or idea for this?


Result::unwrap() - Content: duplicate entry with key m_Name (from LowPolyUltimatePack.unitypackage)

When trying to extract https://assetstore.unity.com/packages/3d/props/low-poly-ultimate-pack-54733 in Windows 10: .\unitypackage_util.exe LowPolyUltimatePack.unitypackage dump
Got:
thread 'main' panicked at 'called `Result::unwrap()` on an
`Err` value: Error("content: duplicate entry with key \"m_Name\"", line: 23157, column: 3)', src\commands.rs:46:58

Any way that I can help debugging further?

The way I debug these is to run unitypackage_util from source, with cargo run -- "/Volumes/Samsung X5/UnityPackages/Low Poly Ultimate Pack.unitypackage" dump with some println's uncommented.
See https://github.com/barcoderdev/unitypackage_util/blob/a7af585ebd4d2512a1925cc9bb8fb2665f2b7fae/src/commands.rs#L76
println!("guid: {:?}", guid);

println!("checking pathname");

println!("checking asset.meta");

println!("checking asset");

This shows me what file it was working on when it crashed.  From there I extract the package to disk and examine the yaml manually, usually the {guid}/asset file.
For this package I'm getting:
...
guid: "6b53164a4c6c8744680ea57a798e6aa1"
guid: "6b5559adca910d540a4fe673a1727602"
guid: "6b5559adca910d540a4fe673a1727602"
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Error("content: duplicate entry with key \"m_Name\"", line: 23157, column: 3)', src/commands.rs:46:58
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

6b5559adca910d540a4fe673a1727602/pathname shows the file with the issue is Assets/polyperfect/Low Poly Ultimate Pack/06 - Castle.unity
Searching 6b5559adca910d540a4fe673a1727602/asset (a yaml file) for m_Name: finds this:
--- !u!114 &1709481619
MonoBehaviour:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID:<PHONE_NUMBER>}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID:<PHONE_NUMBER>}
  m_Name:
  m_EditorClassIdentifier:
  m_Name:
  m_Name:
  m_Name:
  m_Name:
--- !u!114 &1709481620
MonoBehaviour:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID:<PHONE_NUMBER>}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID:<PHONE_NUMBER>}
  m_Name:
  m_EditorClassIdentifier:
  m_Name:
  m_Name:
  m_Name:
  m_Name:

These are the source of duplicate entry with key \"m_Name\""
From here I'd research if serde has a way to handle duplicate keys, which could be a bit tricky to implement.  Or I'd be lazy and regex it out somehow in the asset_yaml_cleanup function in lib.rs.

Lazy, hacky regex fix it is!  I added an incrementing id to m_Name (m_Name, m_Name1, m_Name2, etc).
I think a proper fix for this would be to have defined types in the yaml to json process, instead of using serde_yaml::Value, with a custom deserializer to account for duplicate keys.
Another issue popped up with asset.meta missing an importer type.
unitypackage_godot and unitypackage_util have been updated.  LowPolyUltimatePack now loads.
@alfredbaudisch Can you verify?

@barcoderdev it works! Thanks!

Will this be fixed before the new links?


Guide Needed for Script Debugging on HoloLens 2

Describe the Issue
This issue was discussed in PR 3964, but it's too important to lose.
Currently it is difficult (if not impossible) to debug Unity behavior scripts after they've been deployed as IL2CPP to HoloLens 2. We need a step-by-step guide on how to debug scripts on device in order to track down bugs that only occur outside the editor.
From the previous discussion:

.Net  backend is still available in Unity 2018 but removed in 2019.

There was a disussion (April 3 through 9th) about debugging on Holo 2. Early in that discussion there was a suggestion to use .Net backend and check the "Unity C# Projects" checkbox. It was mentioned as a temporary workaround until we had "improved debugging for 2019", though no information was provided about the improvement coming at that time. (In addition, currently MRTK is not working with Unity 2019.)

Someone mentioned this article as a guide for debugging IL2CPP at runtime, but someone else mentioned this approach is not currently working on HoloLens 2. (It was never explained why this approach isn't currently working on HoloLens 2.)

Additional context
If at possible, it's critical that we get this guidance published by 5/1/2019 to support global events starting at that time.

The recommendation is currently to still use the .NET backend, since there isn't a great solution for debugging using IL2CPP other than directly reading the compiled C++ code. I think it's a great idea to have a guide, however I would say we need this when we require MRTK to run on Unity 2019, so it's not Urgency-Now.

Assigning to @keveleigh to try and drive this issue.

I'm sorry but I do need to disagree about this not being needed soon. While Unity 2018 still allows .Net back-end, current MRTK strongly urges users not to use it. Please see the whole discussion and reasons for PR #3964.
If the current guidance is to use .Net Back-end, okay. But we need that documented clearly. We also need, as part of that same guidance, a commitment to a new approach starting with 2019. And it would be great if there could be some kind of hints as to what that approach might be.
I want to make sure we're all on the same page that we already have customers attempting to use Unity 2019 with MRTK. I know that is not our current target, but I would like to understand if we should be specifically instructing customers not to use 2019 at this time? Since we are working toward 2019 support (see #3962, #3951, #3999 and possibly more) shouldn't we also be working on the documentation / guidance for how to debug in 2019?
Again, I would sincerely like to ask for this document to be created by mid-May at the latest in support of our global hack events. Thanks for considering.

I think this is needed soon.

Hi Joost van Schaik put together an almost complete guide:
https://dotnetbyexample.blogspot.com/2019/03/debugging-c-code-with-unity-il2cpp.html
I think this might be a pretty good starting point for a documentation

I actually linked to that article in my original post above. As I stated there, someone internal mentioned to me that the process he outlined in that article wasn't currently working on HoloLens 2. I'm hoping @keveleigh can look into that discussion and determine what might be blocking.

Here's documentation on how to debug C# scripts in Unity: https://docs.unity3d.com/Manual/ManagedCodeDebugging.html
On UWP with IL2CPP, you just need to make sure that Internet Client, Internet Server and Private Networks capabilities are enabled in the app manifest. I works great debugging remote ARM64 laptops and HoloLens 1. I haven't tried debugging HoloLens 2 yet but I don't see why it wouldn't work.

I've opened a PR into the docs to add this guide: https://github.com/MicrosoftDocs/mixed-reality/pull/1276

Guide published at https://docs.microsoft.com/en-us/windows/mixed-reality/managed-debugging-with-unity-il2cpp. Please leave additional feedback on that guide via the "Feedback" buttons at the bottom of the page.


Do not load AWS SNS client. Refactor tests to not rely on SNS client

This PR refactor tests to not rely on SNS client being loaded and configured by the app.
It also disables the client.

Once the tests are successful (needs some edits to test_send_to_providers), this looks good. Also, should we consider removing other clients we're not using like mmg?


Read BMS charge/discharge limits

Read charge/discharge limits from the BMS settings instead of using a hard coded value.
This command is not in the LTT protocol document, but the app does set these so it should be possible to read.

[ ] ANT BMS
[x] Daly --> Not available. See https://github.com/Louisvdw/dbus-serialbattery/discussions/550#discussioncomment-5741834
[ ] ECS
[x] HLPdataBMS4S --> Not applicable. See https://github.com/Louisvdw/dbus-serialbattery/pull/505#issuecomment-1532012110
[x] Jkbms
[x] Jkbms BLE
[ ] Life/Tian Power
[ ] LLT/JBD
[ ] MNB
[ ] Renogy
[x] Seplos --> Not available. See https://github.com/Louisvdw/dbus-serialbattery/pull/530#issuecomment-1531940064
[ ] Sinowealth

Does this also mean the ability to change these?

This is to read the value that is set in the BMS. You can change them in the BMS using the bluetooth software, and then the updated values will pull through. Is that what you mean by changing them?

I was hoping we could somehow set the values via VenusOS.  I'm noticing the voltage limit on mine is now set at 13.8v or so, I was running 14v before.
Are you aware if it's possible to run both BT and  UART?  or split the serial signal and use both BT and UART adapters?

That 13.8V is coming from the driver and not the BMS. That is what this ticket is about, but reading it from the BMS and not the settings in the code. https://github.com/Louisvdw/dbus-serialbattery/wiki/How-to-install#how-to-increase-the-default-limits
If you want to change that, you can edit the cell min/max voltage in the utils.py file.
You can't run both BT and UART->USB at the same time. UART works on a single master <--> slave comms concept. If your BMS have RS485, that can have multiple slaves, but then you have more ports that just the UART already.
One user did wire in a small transfer switch, so he can switch between BT and the USB-UART connection with the switch. You need a 2 pole Y switch and switch the RX/TX wires.

Ok, thanks.

I have three 230a lithium batteries with three 150a JBD BMSs. I have edited the min/max voltages to 2.5 and 3.65 in utils.py, however, I have not been able to get the batteries to charge up to 14.6.  The BMS is set for 3.65.  The battery does not seem to want to charge over 13.5volts or 3.375 volts.  The smarthsunt shows the battery as only 75% full.  There are no current error in the logs.

@coca7 check in your Remote Console -> SerialBattery -> Parameters -> CVL. This should be 3.65V x amount of cells (14.6V in your case). If it is (which I expect it is) then the driver is doing what it should.
Most likely what is happening is that your cells in your battery is not perfectly balanced. The JBD will raise an alert and stop the charging when a cell reach 3.65V on it's default settings and there is always one cell reaching that sooner than the others (even on well balanced cells). That is why for normal opperation I suggest you use 3.45V per cell and not 3.65V.
100% SOC is not on the cell voltage but on the capacity. You don't want the cells to reach 3.65V.
If your battery charge to 13.5V, look at the Min/Max cell voltage graph in VRM. I expect you will see one cell reaching 3.65V while the rest are still at 3.3V. The min and max should be close to each other on a well balanced battery.

What did you set your capacity for the smartshunt? If this is a new battery then you will have to give it a few cycles to balance everything and get the SOC up correct.

@Louisvdw The battery is new, but I’ve had it for a few weeks.  All the cells were within .5-1v of each other when I started.  I set the capacity on the smartshunt to 690 AH, which is sum of my 3 230AH batteries in parallel.  I think you have a point about the individual cells getting full.  I did notice that the cells do not all discharge at an equal rate.

Hello
Thank you for your work.
Can you please help me?
I instal the driver on my CreboGx like in the wiki and for my first time with puty it worked well.
But now i whant to chance the CVL and DCL limits and i don't understand how i can do this.
I Download the driver to my pc and change the data like in the wiki. But how can i now instal this driver on my CreboGx.
Thank you

@smagicld can you help here? We need the registers for "max charge current" and "max discharge current". Many thanks.

Hi
The JBD FW supports something like max discharge and charge current.
but JBD is very cheap made (at least the BMS board's I've tested) - it will not limit the current to max value - it will disable charging / discharging port for certain time (release time set in seconds) whenever the current is over the set limit.
you cen set it here:

@smagicld Many thanks for your response, we would to read this fields over TTL/RS232/UART. Can you help us with the registers we have to read?

BMSconfigParam(
                name: "Charge overcurrent",
                unitType: "10mA",
                valueType: Int(0),
                commandCode: BMScommandCode.CHGOC_val,
                checkFunctions: [FilterFunction(function: checkIfValueGreaterThan, parameter: 0)],
                lastValueReadTimestamp: nil, valueHasBeenModified: false, value: nil, newValue: nil,
                exampleRealReadResponse: [0xDD, 0x28, 0x00, 0x02, 0x1B, 0x58, 0xFF, 0x8B, 0x77], // (7000 + 0)
                supportedFromVersion: 0
            ),

         BMSconfigParam(
                name: "Discharge overcurrent",
                unitType: "10mA",
                valueType: Int(0),
                commandCode: BMScommandCode.DSGOC_val,
                checkFunctions: [FilterFunction(function: checkIfValueGreaterThan, parameter: 0)],
                lastValueReadTimestamp: nil, valueHasBeenModified: false, value: nil, newValue: nil,
                exampleRealReadResponse: [0xDD, 0x29, 0x00, 0x02, 0xE4, 0xA8, 0xFE, 0x72, 0x77], // (negative value. displayed 7000. written: 58536. callculation: 65536 - 7000 = 58536)
                supportedFromVersion: 0
            ),

    case CHGOC_val = 0x28
    case DSGOC_val = 0x29

@Louisvdw Does it help you ?

Hi All,
Can you have any advise on making JK-BMS to request the Inverter to apply a linear charging scheme like in the image below?

Mine with PYLON CAN bus protocol will always be imposed with a stressful charging scheme like in the image below:

Please advise with thanks!
Best regards,
Ngoc

@paulsteigel I don't see any correlation of your request with this topic. Please open a discussion. Additionally it's not fully understandable what you mean.

@paulsteigel I don't see any correlation of your request with this topic. Please open a discussion. Additionally it's not fully understandable what you mean.

Many thanks Mr. Manuel,
Please be sorry for the wrong posting, please delete or remove with thanks. I tried to find a way to ask the inverter (Dye, LuxPower) to  apply a linear charging to the battery rather than applying a fixed charging scheme with constant power.
If you can, please advice me on this with thanks.
Best regards
Ngoc

@paulsteigel that is implemented by the Pylontech battery. You cannot change it on your side, they will have to code that as part of the Pylontech CANbus implementation.

@paulsteigel that is implemented by the Pylontech battery. You cannot change it on your side, they will have to code that as part of the Pylontech CANbus implementation.

If you can, please advice me on the routine to inform the Inverter (via PYLON Can bus protocol) to apply a proper charge scheme to the battery.
For example (I assume the routine as below):
Microcontroller will monitor the SOC when is reach 80%, it will start informing the inverter about new Current limit (x A) instead of the limit set by the BMS (y A)

Please ask your questions in the discussion section

This was implemented for most BMS where the intel was given.


riff system install optionally to map the image coordinates to a user's docker registry

See https://github.com/projectriff/riff/issues/688#issuecomment-415800900 for background.

I propose to map all images of the form registry/user/xxx (where registry can be any host, typically docker.io or gcr.io and user can be any user, typically istio or knative-releases) to somehost/someuser/xxx where somehost is the private registry and someuser is a suitable user in the private registry. There are two restrictions implicit in this mapping:

image names (the xxx bit) are preserved
there will be no collisions between public docker registries (e.g. docker.io/isto/thing.yaml and gcr.io/knative-releases/thing.yaml) or between users in a single registry (e.g. gcr.io/knative-serving/release.yaml and gcr.io/knative-eventing/release.yaml).

Suggested syntax (with no single letter switch abbreviations):
$ riff system install --privateRegistry=somehost --privateUser=someuser

Given other discussions, I'm not sure the need for --privateRegistry and --privateUser would stay, but if it does, I'd drop the "private" part. The fact that it is sometimes used for private registries is just one use case. I may as well want to use an alternate (public) registry.

could we add registry and user to the manifest instead of using separate flags? I'm assuming we would be using the registry to specify the yaml files anyway.

@trisberg I don't think that would be usable. The idea is that the customer downloads a .tgz file from Pivnet which contains the manifest and the YAML files. So the customer won't really be in the game of editing the manifest.

I guess I'm not quite following this then - wouldn't the manifest already have the registry and user settings in the image or are we talking about doing a replace of the registry/user part?

@trisberg The .tgz file will refer to certain public docker registries, but a customer who doesn't allow their runtime to access the internet will push all the images to a different private registry (but won't be expected to edit the .tgz file). So, yes, we do need to replace the registry/user part of the image names because we don't know the registry names and users that customers will choose.

To identify which strings in YAML files represent image names that should be mapped, we add another switch to point at an "image manifest" which lists the image names in an array:
$ riff system install --registry=somehost --registryUser=someuser --images=/path/to/image/manifest

The image manifest is a YAML file of the form:
manifestVersion: 0.1
images:
  - gcr.io/knative-releases/github.com/knative/build/cmd/creds-init@sha256:b5dff24742c5c8ac4673dc991e3f960d11b58efdf751d26c54ec5144c48eef30
  - <etc.>

Implementation:

[ ]  image mapper utility
[ ]  image manifest
[ ]  support images of the form username/path
[ ]  decide what to about images of the form localhost[:port]/user/path

Split out mapping of hierarchical image names to issue 724.

DockerHub Support
user/path, docker.io/user/path, and index.docker.io/userpath are treated as equivalent entries in the image manifest (so you only need to specify at most one of them and it doesn't matter which) and when they need mapping, are three all mapped to somehost/someuser/path.

Changing the design to introduce a new subcommand for image relocation:
riff image relocate

This would take either a manifest or a YAML file as input and output.
Editing the title to match.

What do you mean "take a YAML file as input"? Do you mean a file that could be kubectl applyed?
Also, that command would grab the image bits, right?

What do you mean "take a YAML file as input"? Do you mean a file that could be kubectl applyed?

Yes, for example a bus YAML.

Also, that command would grab the image bits, right?

No. I'm scoping this issue to do relocation of image names only for now. So you can relocate a single YAML file or a whole manifest of YAML files.


Integrate Firebase

[ ] Crashlytics
[ ] Analytics
[ ] Remote config for force update

Hi @hashirshoaeb , would like to work on this, can you assign it to me?


Minor fix

the "self" is not right here, since we do have "project" defined locally

Same here, thanks for the feedback!


feat: router creates its own orb DID for didcomm v2

Signed-off-by: Filip Burlacu<EMAIL_ADDRESS>

Codecov Report

Merging #86 (a146443) into main (cd33f38) will decrease coverage by 1.05%.
The diff coverage is 84.67%.

@@            Coverage Diff             @@
##             main      #86      +/-   ##
==========================================
- Coverage   89.78%   88.72%   -1.06%
==========================================
  Files           6        7       +1
  Lines         548      665     +117
==========================================
+ Hits          492      590      +98
- Misses         30       40      +10
- Partials       26       35       +9

Impacted Files
Coverage Δ

cmd/hub-router/startcmd/start.go
85.79% <81.03%> (-0.88%)
:arrow_down:

pkg/aries/public_did.go
86.84% <86.84%> (ø)

pkg/restapi/operation/operation.go
94.11% <100.00%> (-0.11%)
:arrow_down:

Continue to review full report at Codecov.

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


SocketTimeoutException

Hi all,
First of all, thank you a lot for the nice client. Very useful.
I make some large requests to OpenAI, and even with the GPT 3.5 Turbo model, the responses are sometimes slow, and I receive a java.net.SocketTimeoutException: timeout exception.
Would it be possible to make the timeout configurable or longer?

tanks

What version are you using, I tried, but it didn't work


[4.2] Mark swift sections as 1 byte aligned

Cherry pick of 94ffb3404b952e158c36d968cb8ff1c51caa0667 from master for 4.2.
The C compiler on some platforms (such as s390x) assumes that the
data pointed to by symbols meets certain alignment requirements.
The swift sections do not necessarily meet these alignment
requirements so this change adds alignment attributes to them to
force the compiler to emit the instruction sequences and relocations
required to address unaligned data.
This fixes a 'R_390_PC32DBL target misaligned' warning issued by
gold on s390x.

@swift-ci Please test


Run js but get a wrong result

Platform: linux

i write a program about reading a file from local,then console it.
but when i run it with script,it show me undefined.
fs.readFile('sample2.txt', 'utf8', function(err, data) {     console.log(data); });

does your script and file are located in the root directory of project? if not, you need to specify current work dir in script-options or specify path to sample2.txt

my script and file are located in the root directory of project.
it runs with subline text very well.

Run if(err) { console.error(err) } to find out what the error is in your callback.

there is no error.The same code runs with sublime text3 very well.can you understand?


Bug: normal_window_opacity, active_window_opacity, and window_shadow not working

After upgrading to yabai-v5.0.2 these features have not been working.
Yabai version: yabai-v5.0.2
macOS version: Monterey 12.6.1
SIP: Disabled

It works for me fine :/

It works for me fine :/

What yabai version/ macOS are you on?

Completely restarted installation process and is now working normally again.


How to automatically commit into a git repository

I want to commit changes to a Git repository in an automated fashion.
Ideally, I want to periodically run a script that creates a new commit if there are changed files. No commit is created if nothing changes.

This is something I did it before in the https://github.com/zmoog/refurbished-history repository. Here's the step from the workflow scrape.yml:
    - name: Commit and push if it changed
      run: |-
        git config user.name "Automated"
        git config user.email<EMAIL_ADDRESS>        git add -A
        timestamp=$(date -u)
        git commit -m "Latest data: ${timestamp}" || exit 0
        git push

Let's draft a simple script that walks into the Obsidian directory and commit every changes to a list of vaults:
#!/bin/bash

# make the script exit immediately if a command returns a non-zero exit status
set -e

# list of Obsidian vaults we want to sync
vaults=("vault-name")

for vault in $vaults
do
    # echo "cd-ing into ${HOME}/Library/Mobile\ Documents/iCloud~md~obsidian/Documents/${vault}"
    # ls -ltr "${HOME}/Library/Mobile Documents" | grep -i mobile
    cd ${HOME}/Library/Mobile\ Documents/iCloud~md~obsidian/Documents/${vault}

    # set git options for this repository only
    git config user.name "Automated"
    git config user.email<EMAIL_ADDRESS>
    git add -A
    timestamp=$(date -u)
    git commit -m "Latest data: ${timestamp}" || exit 0
    git push
done

Not sure HOME is available as environment variable in cron, we may need to replace it with /Users/${USER}

I am creating a simple cron expression to run my sync script at the top of the hour:
0 * * * * /Users/zmoog/bin/sync-obsidian.sh

The for loop wasn't working at all!

loop the right way
use continue instead of exit to continue iterating over vaults when there's nothing to commit

#!/bin/bash

# make the script exit immediately if a command returns a non-zero exit status
set -e

# list of Obsidian vaults we want to sync
vaults=("Elastic" "Knowledge")

for vault in ${vaults[@]}
do
    # walk into the vault directory
    cd /Users/${USER}/Library/Mobile\ Documents/iCloud~md~obsidian/Documents/${vault}

    # TODO: check this is a Git repository
    #

    # set git options for this repository only
    git config user.name "Automated"
    git config user.email<EMAIL_ADDRESS>
    # add everything changed to the stage
    git add -A

    # commit everything changed
    timestamp=$(date -u)
    git commit -m "Latest data: ${timestamp}" || continue

    # push the commit to the remote repo
    git push
done

Steps to add a new Obsidian vault named "Maintenance".
$ gh repo create zmoog/obsidian-vault-maintenance --private
✓ Created repository zmoog/obsidian-vault-maintenance on GitHub

cd /Users/${USER}/Library/Mobile\ Documents/iCloud~md~obsidian/Documents/Maintenance

#
git remote add origin git@github.com:zmoog/obsidian-vault-maintenance.git

# set git options for this repository only
git config user.name "Automated"
git config user.email<EMAIL_ADDRESS>
# add everything changed to the stage
git add -A

#
git commit -m "Latest data: ${timestamp}"

#
git push -u origin main


[RESTEASY-1832] Eliminate System.out.println

Eliminate System.out.println and similar stuff from codebase
https://issues.jboss.org/browse/RESTEASY-1832

Update of AsyncBenchTest.java to use logger, it's ignored tests and make sense to see the output ;)
Thanks @asoldano for pointing that out


Fix  end-to-end tests under js-ipfs

Extracted from https://github.com/ipfs/ipfs-webui/pull/1713

Right now e2e tests do not pass against js-ipfs:
npm ci && npm run build && E2E_IPFSD_TYPE=js npm run test:e2e

Note: we are unable to ship webui with js-ipfs without fixing this.
In theory, it is ok to ship release that only works with go-ipfs and fix this later, using tribute rotation, but would be way better to ship release to both JS and GO.

For reference:
(node:22646) [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.
 FAIL  test/e2e/navigation.test.js
  Navigation menu
    ✓ should work for Status page (152 ms)
    ✓ should work for Files page (246 ms)
    ✕ should work for Explore page (16 ms)
    ✓ should work for Peers page (373 ms)
    ✓ should work for Settings page (434 ms)

  ● Navigation menu › should work for Explore page

  console.error
    Unhandled error

      at process.uncaught (../../node_modules/jest-config/node_modules/jest-jasmine2/build/jasmine/Env.js:248:21)
      at processEmit [as emit] (../../node_modules/signal-exit/index.js:161:32)
      at handleError (../../node_modules/jest-environment-puppeteer/lib/PuppeteerEnvironment.js:17:11)
      at ../../node_modules/puppeteer/vendor/mitt/src/index.ts:81:75
          at Array.map (<anonymous>)
      at Object.emit (../../node_modules/puppeteer/vendor/mitt/src/index.ts:81:56)

  console.error

      at process.uncaught (../../node_modules/jest-config/node_modules/jest-jasmine2/build/jasmine/Env.js:249:21)
      at processEmit [as emit] (../../node_modules/signal-exit/index.js:161:32)
      at handleError (../../node_modules/jest-environment-puppeteer/lib/PuppeteerEnvironment.js:17:11)
      at ../../node_modules/puppeteer/vendor/mitt/src/index.ts:81:75
          at Array.map (<anonymous>)
      at Object.emit (../../node_modules/puppeteer/vendor/mitt/src/index.ts:81:56)

 PASS  test/e2e/files.test.js
  Files screen
    ✓ should have the active Add menu (245 ms)
    ✓ should allow for a successful import of two files (497 ms)

 PASS  test/e2e/explore.test.js
  Explore screen
    ✓ should have Project Apollo Archive as one of examples (71 ms)
    ✓ should open arbitrary CID (534 ms)

 PASS  test/e2e/status.test.js
  Status page
    ✓ should have Status menu item (21 ms)
    ✓ should inform it is sucessfully connected to IPFS (22 ms)
    ✓ should display Peer ID of real IPFS node (27 ms)

  console.error
    Unhandled error

      at process.uncaught (../../node_modules/jest-config/node_modules/jest-jasmine2/build/jasmine/Env.js:248:21)
      at processEmit [as emit] (../../node_modules/signal-exit/index.js:161:32)
      at handleError (../../node_modules/jest-environment-puppeteer/lib/PuppeteerEnvironment.js:17:11)
      at ../../node_modules/puppeteer/vendor/mitt/src/index.ts:81:75
          at Array.map (<anonymous>)
      at Object.emit (../../node_modules/puppeteer/vendor/mitt/src/index.ts:81:56)

  console.error

      at process.uncaught (../../node_modules/jest-config/node_modules/jest-jasmine2/build/jasmine/Env.js:249:21)
      at processEmit [as emit] (../../node_modules/signal-exit/index.js:161:32)
      at handleError (../../node_modules/jest-environment-puppeteer/lib/PuppeteerEnvironment.js:17:11)
      at ../../node_modules/puppeteer/vendor/mitt/src/index.ts:81:75
          at Array.map (<anonymous>)
      at Object.emit (../../node_modules/puppeteer/vendor/mitt/src/index.ts:81:56)

 PASS  test/e2e/settings.test.js
  Settings screen
    ✓ should show config of IPFS node (83 ms)

 PASS  test/e2e/peers.test.js (14.634 s)
  Peers screen
    ✓ should have a clickable "Add connection" button (216 ms)
    ✓ should confirm connection after "Add connection"  (1345 ms)
    ✓ should have a peer from a "Local Network" (10212 ms)

Test Suites: 2 failed, 5 passed, 7 total
Tests:       6 failed, 20 passed, 26 total
Snapshots:   0 total
Time:        48.063 s, estimated 83 s
Ran all test suites.

GO tests seem to be flaky too :(
https://app.circleci.com/pipelines/github/ipfs/ipfs-webui/830/workflows/e38bc1d3-f5e4-4576-acb7-b9c8417b9fb6/jobs/4936
Might be Travis. Try slowing down/bumping timeouts.

@lidel : I know I don't have the full context here, but I don't want fixing tests to be optional.  If we need help here from Go folks, lets call it out (and at the latest at the next Triage session).  Basically, I'm worried about this being at P3.

@BigLep  I agree that e2e tests should not be optional.
Filled as P3 because initially the issue was limited to js-ipfs interop (which we dont use in ipfs-desktop, so low priority), but since then I confirmed flaky tests occur for go-ipfs sometimes, so bumping to P1.
Puppeteer (tool used for e2e test orchestration in real browser) has been  getting buggier with each release, seems to be  effectively deprecated for a while. We planned to move to playwright (more modern replacement), but  our GUI team got dissolved and here we are today.
I don't think it's productive to spend time on fixing puppeteer. We've already spent too much time on it.
Switching to playwright should fix flakiness – could be a task for a tribute familiar with JS ecosystem.

@lidel : sounds good.  Is the switch to Playwright something we should ask our "IP JS" tribute to do, or does it require someone with more browser experience?  Either way, I assume we'll need a tracking task for this work and that this issue (#1737) will be dependent on?

Any JS person with some frontend exp could work on that
Note to self: some of js-ipfs regressions may be related to https://github.com/ipfs/js-ipfs/issues/3289

wontfix. we're decoupling from js-ipfs