Store latest archive only

Storage URLs are currently of the form:
/username/timestamp.json

This changes it to
/username/archive.json

This simplifies things, don't need to keep all versions, just the latest. And makes the URLs more predictable for consumers.
I was trying to work on a script to rename the past stuff already uploaded to storage, but couldn't get download_storage.mts script working (due to lack of service role?) What would be the best workflow for this? Should be pretty simple I think, just:

list all objects
find the latest date for each username
cp it to /username/archive.json

could stop there, leave the old data in, or confirm this works/successfully copied, then delete the old stuff

don't need a service role, could just use the anon key, but i'll do it

Hey Defender next time I hope you can test stuff in a local db.

I renamed the existing storage archives and the users w multiple files failed because the name would've been duplicated, so I had to manually pick the latest one for each user and rename them.
The uploadToStorage function needs an update to replace an existing file instead of failing to update if there's a duplicate

Thanks for the review @TheExGenesis ! I think this is an important feature for people building on top of the archive, I don't know if I'll have a chance to setup the local DB/address this this week, but if anyone else wants to finish it up before I get to it feel free to.

I finished it, it was relatively quick


Is superagent producing a console.log for errors?

I am using superagent 3.5.1, installed via Yarn.
I am making a call to GitHub to create a webhook. If the webhook already exists, I get a 422 and that is fine. However, in that case, I have my own error handling and everything works. But, there is a console.log with the 422 that I'm not producing. It's confusing, seems like there's an error, although it is being handled.
Is this produced internally by superagent? If yes, is there a clean way for me to switch it off (without hacking console.log itself)?

Chrome developer tools is logging XHR failures automatically.

Thanks!
#todayilearned


As a user, in the Household Naming specifications, support null/empty for Name Connector and Name Overrun properties, so I can get a name with just the primary contact in it.

Hub post: https://powerofus.force.com/0D58000001xpNdD

This is an easily solvable use case already, per pre-SFDO Judi:
"In the meantime, what about a workflow rule that checks "Exclude from Household Name" when the contact is not the Primary Contact on the Household?"


Ember static example - path template updated

Hi, the path should be correct. There is no templates/ folder.


Added parsing and writing for BOM (Byte Order Mark) characters.

Issue: #18

added deprecated method PlaylistWriter.writeWithByteOrderMark()

It is deprecated because of this bit from the specification:
Playlist files MUST be encoded in UTF-8 [RFC3629].  They MUST NOT
contain any byte order mark (BOM); Clients SHOULD reject Playlists
which contain a BOM or do not parse as UTF-8.

@derjust

I like all of the implementation itself except for the way how it is exposed to the client/API:

In a way I think we should be able to read the stuff we are writing but that might be arguably implemented in a second PR.
But having reading in mind, ParsingMode pops to my mind. Whereas a simple enum might be not sufficient anymore I definitely prefer that over a dedicated method read/writeWithBom. Mostly because the next writeWithUnicorn is around the corner.
** So getting back to ParsingMode (which is now a bad name) something like that I would imagine:

ProcessingMode pm = new ProcessingMode.Builder()
    .withBom(true)
    .withUnknownTags(false);

Having HLS-land still be more of a wild-west territory I feel that this is more future proof and aligns with what is already there.
But I absolutely acknowledge that there are alot of "I" in this comment so there is little to backup my position ;-)

My reason for a differently named method is because I wanted it to be clear why it was deprecated. However, with your suggested builder approach, we could deprecate only the useBom() method in the builder which would be more clear. I will make that change.
We can read the playlists with a BOM. I even wrote a test for that. If a BOM is detected at the start of the stream, it is removed and ignored. The BOM has nothing to do with the actual playlist so it should not affect the output.
We may have to change this code around a little bit when we want to support writing multiple playlists delimited by ENDLIST tags.

+1
Maybe creating an issue for the bom/endlist situation.


Blog wink

Will there be a "wink" with a built-in default blog?

It's mentioned on the roadmap

I want to have a pre-built frontend as an example for people to use. I just don't have the time to maintain it yet :)


Add an opt-out field and refactor common stuff to a library so it can be used by upcoming repokid_reactor

This commit adds an opt-out field, which will be used by the upcoming repokid_reactor.  Also move everything that is commonly used to utils/roledata so that repokid CLI is not required to load common utils.

Coverage increased (+1.9%) to 38.284% when pulling fce650e3eed7f3dee586505cf3381cecb71a9830 on refactor into 581ad928b92a3a613bc0e82221bef383a5937dcf on master.

Coverage increased (+1.9%) to 38.284% when pulling 866bcac1708b5825e661ff0f0198c87b49397dd9 on refactor into 581ad928b92a3a613bc0e82221bef383a5937dcf on master.

Coverage increased (+1.9%) to 38.284% when pulling 5b660fce93faa4a886f27d20b1d5e079300c5507 on refactor into 581ad928b92a3a613bc0e82221bef383a5937dcf on master.

Coverage increased (+1.8%) to 38.175% when pulling 14f12b7c7af02d026398870eddc57eda86621cc4 on refactor into 581ad928b92a3a613bc0e82221bef383a5937dcf on master.

Coverage increased (+1.8%) to 38.175% when pulling c258dfad878f188dd67b2a38fead0805ed6531f8 on refactor into 581ad928b92a3a613bc0e82221bef383a5937dcf on master.


Provide a more useful message when I use the wrong secret format

What should we do?
We should give the user a more helpful error message when they encounter issues when using secrets.
This was reported by multiple people in internal channels over the past few days. See here and here.
This seems to be related to the switch to the mustache-style format when using secrets:
https://docs.camunda.io/docs/components/connectors/use-connectors/#using-secrets
The current error we show when people use the old secrets format is the following:

To mitigate this, we could add a link to the documentation page that explains how people can use the secrets correctly:
https://docs.camunda.io/docs/components/connectors/use-connectors/#using-secrets
Why should we do it?
To avoid confusion and ensure that our users are supported to quickly understand how they can fix the underlying issue.

Related to https://github.com/camunda/bpmnlint-plugin-camunda-compat/pull/133. What's missing is being able to show warnings instead of errors in the properties panel and to add the link to documentation.

Discussed today morning:

Let's not indicate warnings (or info) in the properties panel as an initial step. Instead keep them on the canvas + in the problems panel, and only focus the respective entry in the properties panel.

This requires two adjustments so we can ship it as part of @camunda/linting:

enable the rule and change the category to info in bpmnlint-plugin-camunda-compat (https://github.com/camunda/bpmnlint-plugin-camunda-compat/pull/137)
do not add the propertiesPanel property in ´@camunda/linting´


Update README

[ ] If this pull request closes/resolves/fixes an existing issue, replace the issue number. Fixes apache/skywalking#.
[ ] Update the CHANGES log.

Most features have been implemented, so, roadmap is not necessary. Users are recommended to try and deploy since 0.6

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

Project coverage is 47.70%. Comparing base (0da162e) to head (6b5cba9).
 Consider uploading reports for the commit 677cfc2 to get more accurate results

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #419      +/-   ##
==========================================
- Coverage   47.76%   47.70%   -0.07%
==========================================
  Files         173      173
  Lines       21586    21586
==========================================
- Hits        10310    10297      -13
- Misses      10403    10412       +9
- Partials      873      877       +4

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


Add git commit/push extra arguments option

This is an attempt to solve https://github.com/webpro/release-it/issues/245
@webpro I'm not sure what's the best way to test this, any idea?

Looking good! I'm just goin go to merge this. Thanks, @patrik-piskay!

Released in v7.1.0


Kindly help with this issue.

[04/06/2022 12:01:56] Initiating
[04/06/2022 12:02:16] Authenticating
[04/06/2022 12:02:19] Authentication Successful
[04/06/2022 12:02:19] Logging In - ETA 120 seconds
[04/06/2022 12:02:26] Login Success
[04/06/2022 12:02:26] Use save_to_device=True. As some URLs are active only for 24 hrs.
[04/06/2022 12:02:26] Account Username : xxxxxxxxxxx
[04/06/2022 12:02:27] Error occured.
Open github issue and upload error snapshot - https://github.com/suyashjawale/InstagramCLI/issues
Reason : Expecting value: line 1 column 1 (char 0)
<class 'json.decoder.JSONDecodeError'> init.py 201

I have reconfirmed my python being version 3.8.8-amd64 and InstagramCLI being version 1.0.14 but the problem still persists

Hi @Houou3 , thanks for pointing out the issue. As I checked, the API which was getting called before has now been decommissioned . Instagram uses different API for the same task now. I will update the code and publish the library soon. Will update you here when it is published.
Stay Tuned!

Hi @Houou3 , New version of InstagramCLI has been released. Please check now. if the issue still persists.


Automatic swagger generation

This PR adds two Gradle tasks to automatically scan the code base and generate a *.yaml specification:
./gradlew clean resolve
./gradlew mergeOpenApiFiles

Unfortunately I'm not savvy enough in Gradle and Kotlin to have those two tasks somehow depend on each other, so we need to execute them separately.
Also updated docs.

Really valuable PR, great :+1:
However I tried it and I got error with the first command ./gradlew clean resolve:
* What went wrong:
Execution failed for task ':extensions:catalog:federated-catalog-cache:resolve'.
> org.gradle.api.GradleException (no error message)

I think we should run those tasks with the CI, to verify their consistency

@ndr-brt mmh, it works on my machine, but i've seen this before, can you retry to run the task with either the --stacktrace or the --debug option? Don't remember which, but that should give you more info.
I also added a CI job to generate the spec.

Pretty long stacktrace.
First, java -version output:
openjdk version "11.0.11" 2021-04-20
OpenJDK Runtime Environment AdoptOpenJDK-11.0.11+9 (build 11.0.11+9)
Eclipse OpenJ9 VM AdoptOpenJDK-11.0.11+9 (build openj9-0.26.0, JRE 11 Linux amd64-64-Bit Compressed References 20210421_975 (JIT enabled, AOT enabled)
OpenJ9   - b4cc246d9
OMR      - 162e6f729
JCL      - 7796c80419 based on jdk-11.0.11+9)

then, stacktrace:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':extensions:iam:decentralized-identity:identity-did-core:resolve'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:145)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$$Lambda$1119/0x0000000000000000.accept(Unknown Source)
        at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:282)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:143)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:131)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
        at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:74)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:402)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:389)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:382)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:368)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$$Lambda$857/0x0000000000000000.execute(Unknown Source)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:61)
Caused by: org.gradle.api.GradleException
        at io.swagger.v3.plugins.gradle.tasks.ResolveTask.resolve(ResolveTask.java:440)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:58)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)
        at org.gradle.api.internal.tasks.execution.TaskExecution$2.run(TaskExecution.java:239)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
        at org.gradle.api.internal.tasks.execution.TaskExecution.executeAction(TaskExecution.java:224)
        at org.gradle.api.internal.tasks.execution.TaskExecution.executeActions(TaskExecution.java:207)
        at org.gradle.api.internal.tasks.execution.TaskExecution.executeWithPreviousOutputFiles(TaskExecution.java:190)
        at org.gradle.api.internal.tasks.execution.TaskExecution.execute(TaskExecution.java:168)
        at org.gradle.internal.execution.steps.ExecuteStep.executeInternal(ExecuteStep.java:89)
        at org.gradle.internal.execution.steps.ExecuteStep.access$000(ExecuteStep.java:40)
        at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:53)
        at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:50)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
        at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:50)
        at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:40)
        at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:68)
        at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:38)
        at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:48)
        at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:36)
        at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:41)
        at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:74)
        at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:55)
        at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:51)
        at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:29)
        at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:61)
        at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:42)
        at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:60)
        at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:27)
        at org.gradle.internal.execution.steps.BuildCacheStep.executeWithoutCache(BuildCacheStep.java:188)
        at org.gradle.internal.execution.steps.BuildCacheStep.lambda$execute$1(BuildCacheStep.java:75)
        at org.gradle.internal.execution.steps.BuildCacheStep$$Lambda$928/0x0000000000000000.apply(Unknown Source)
        at org.gradle.internal.Either$Right.fold(Either.java:175)
        at org.gradle.internal.execution.caching.CachingState.fold(CachingState.java:59)
        at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:73)
        at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:48)
        at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:38)
        at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:27)
        at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:36)
        at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:22)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:109)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$2(SkipUpToDateStep.java:56)
        at org.gradle.internal.execution.steps.SkipUpToDateStep$$Lambda$382/0x0000000000000000.get(Unknown Source)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:56)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:38)
        at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:73)
        at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:44)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:37)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:27)
        at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:89)
        at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:50)
        at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:114)
        at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:57)
        at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:76)
        at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:50)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.lambda$execute$2(SkipEmptyWorkStep.java:93)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep$$Lambda$439/0x0000000000000000.get(Unknown Source)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:93)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:34)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:38)
        at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:43)
        at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:31)
        at org.gradle.internal.execution.steps.AssignWorkspaceStep.lambda$execute$0(AssignWorkspaceStep.java:40)
        at org.gradle.internal.execution.steps.AssignWorkspaceStep$$Lambda$560/0x0000000000000000.executeInWorkspace(Unknown Source)
        at org.gradle.api.internal.tasks.execution.TaskExecution$3.withWorkspace(TaskExecution.java:284)
        at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:40)
        at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:30)
        at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:37)
        at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:27)
        at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:44)
        at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:33)
        at org.gradle.internal.execution.impl.DefaultExecutionEngine$1.execute(DefaultExecutionEngine.java:76)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:142)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:131)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
        at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:74)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:402)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:389)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:382)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:368)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$$Lambda$857/0x0000000000000000.execute(Unknown Source)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:61)
Caused by: java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at io.swagger.v3.plugins.gradle.tasks.ResolveTask.resolve(ResolveTask.java:427)
        ... 123 more
Caused by: java.lang.ExceptionInInitializerError
        at io.github.classgraph.ModulePathInfo.<init>(ModulePathInfo.java:136)
        at nonapi.io.github.classgraph.scanspec.ScanSpec.<init>(ScanSpec.java:231)
        at io.github.classgraph.ClassGraph.<init>(ClassGraph.java:67)
        at io.swagger.v3.jaxrs2.integration.JaxrsAnnotationScanner.classes(JaxrsAnnotationScanner.java:61)
        at io.swagger.v3.jaxrs2.integration.JaxrsApplicationAndAnnotationScanner.classes(JaxrsApplicationAndAnnotationScanner.java:10)
        at io.swagger.v3.oas.integration.GenericOpenApiContext.read(GenericOpenApiContext.java:558)
        at io.swagger.v3.jaxrs2.integration.SwaggerLoader.resolve(SwaggerLoader.java:251)
        ... 127 more
Caused by: io.github.toolfactory.jvm.Driver$InitializationException: Could not initiliaze DefaultDriver
        at io.github.toolfactory.jvm.DefaultDriver.throwException(DefaultDriver.java:324)
        at io.github.toolfactory.jvm.DefaultDriver.<init>(DefaultDriver.java:121)
        at nonapi.io.github.classgraph.utils.ReflectionUtils.<clinit>(ReflectionUtils.java:48)
        ... 134 more
Caused by: io.github.toolfactory.jvm.ObjectProvider$BuildingException: Unable to build the related object of io.github.toolfactory.jvm.function.catalog.GetDeclaredFieldsMethodHandleSupplier
        at io.github.toolfactory.jvm.ObjectProvider.getOrBuildObject(ObjectProvider.java:57)
        at io.github.toolfactory.jvm.DefaultDriver.initDeclaredFieldsRetriever(DefaultDriver.java:294)
        at io.github.toolfactory.jvm.DefaultDriver.<init>(DefaultDriver.java:105)
        ... 135 more
Caused by: java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at io.github.toolfactory.jvm.ObjectProvider.getOrBuildObject(ObjectProvider.java:51)
        ... 137 more
Caused by: java.lang.NoSuchMethodException
        at io.github.toolfactory.jvm.function.catalog.GetDeclaredFieldsMethodHandleSupplier$ForJava7.<init>(GetDeclaredFieldsMethodHandleSupplier.java:55)
        ... 141 more
Caused by: java.lang.NoSuchMethodError: java/lang/Class.getDeclaredFields0(Z)[Ljava/lang/reflect/Field; (loaded from jrt:/java.base by <Bootstrap Loader>) called from class java.lang.Class (loaded from jrt:/java.base by <Bootstrap Loader>).
        ... 142 more

could this be connected to OpenJ9 somehow?

It's a dependency version problem, the version 2.1.12 for io.swagger.core.v3:swagger-jaxrs2-jakarta doesn't exist (https://mvnrepository.com/artifact/io.swagger.core.v3/swagger-jaxrs2-jakarta) and so it missed some transitive dependencies.
Switching to 2.1.11 fixed everything.

ok, downgraded to 2.1.11. @ndr-brt could you re-check?

@paullatzelsperger now it's working flawlessly.
However, to define a single task:
tasks.register<GradleBuild>("openapi") {
    tasks = listOf("clean", "resolve", "mergeOpenApiFiles")
}

then it can be launched with
./gradlew openapi

@ndr-brt thanks a lot, that seems a lot easier. however, the mergeOpenApiFiles task must run **after all the resolve tasks`, else it potentially won't pick up all the YAML files. i think in gradle this is a task dependency. Could you point me in the right direction there?

woa, you're right, seems tricky, maybe better leave as it is at the moment

woa, you're right, seems tricky, maybe better leave as it is at the moment

if there's nothing else, can we merge (approve)?

While I took a quick look at the changes, I saw that the generated yaml files are checked in into git. Is that really how we want to provide this api documentation? Potentially, any PR merge could result in new yaml files. Shouldn't this be part of the ci pipeline to generate them and store them somewhere?
We could also provide an HTTP endpoint in the EDC through which we provide this documentation. I'm not sure if this is something that is really necessary, but would be a nice feature. Perhaps this could also be part of a new Issue/PR.

While I took a quick look at the changes, I saw that the generated yaml files are checked in into git. Is that really how we want to provide this api documentation? Potentially, any PR merge could result in new yaml files. Shouldn't this be part of the ci pipeline to generate them and store them somewhere?

Generally I agree, however that will probably not be possible in a generic way, much less in the short run. We'd need some Project Website with a possibility to upload files. For now, that's the low-hanging fruit, with the caveat that if anyone adds/changes REST endpoints, they need to regenerate and commit the YAML files.

We'd need some Project Website with a possibility to upload files, which is quite a bureaucratic task I imagine. For now, checking the files in is the low-hanging fruit, with the caveat that if anyone adds/changes REST endpoints, they need to regenerate and commit the YAML files.

I get your point. Should we maybe create a separate Issue for that, so that we can better discuss and address this topic? I don't see this also at the highest priority currently.

I get your point. Should we maybe create a separate Issue for that, so that we can better discuss and address this topic? I don't see this also at the highest priority currently.

I think there is two things here:

Snapshot builds: for those I think it's sufficient to have the yaml spec in the repo.
Releases: public available API doc should be made available during the release process - whenever a new release is created, the doc gets updated. Could be automated through CI.

Lets create a discussion first. To me, an issue would be a concrete work item, that comes out of a discussion. At this points it's unclear what exactly needs to be done.
Also, but less importantly, point 2 is time is still a ways off, so if we create an issue now, there is a danger it gets zombied.


add pricingTierSQLVMs to deploy-asc-standard

This PR fixes
fixes #334
This PR adds a setting to the Deploy-ASC-Standard definition which ensures that 'SQL servers on machines' is turned on as part of the Azure Security Center plan.  Image attached shows this setting as it appears in 'Azure Defender plans' in the portal.

This has been updated in our reference implementations. I will close this PR.


explain how to configure the rollup cli

I wanted to use this plugin w/ an existing rollup cli based build and it wasn't readily apparent how to do so. I'm trying to document how to do it so that the next person like me will have an easier time.

Thanks!


Compile RaF CD configuration to compiled data cluster (#13)

[x] This contribution adheres to CONTRIBUTING.md.

What does this Pull Request accomplish?
Compiles the Routing and Faulting configuration to the compiled settings cluster.
TODO This does not compile the status channel FIFO indices.
This will send the configuration data to the engine in order for it to respond to routing channel value changes and send connection messages to the SLSC Switch CDs.
What testing has been done?
Ran the current VI Tests to make sure nothing is broken, but have not validated the compile functionality.  Will likely validate during the Pull Request review and branch update.

[ ] Custom Device Routing and Faulting.xml: Add ActionVIOnCompile section to main page. Without the directive the compile code will not be called.

      <ActionVIOnCompile>
        <Type>To Common Doc Dir</Type>
        <Path>Custom Devices\Routing and Faulting\Windows\Routing and Faulting Configuration.llb\ActionVIOnCompile.vi</Path>
      </ActionVIOnCompile>

[ ] Initialize Routing and Faulting Custom Device.vi: We are currently still creating new sections instead of referencing the page GUIDs included in the Routing and Faulting System Explorer project. Before we start developing the user interface we should update the scripting library.

[ ] Rename Compile Routing and Faulting Config.vi to Compile Routing and Faulting Configuration.vi.
[ ] From Value-Connections Map.vi: Add a case around the code that skips everything if there is an error on the wire. Ideally we don't want to execute code when errors are present. Without error chaining we have to resort to case structure.

[ ] Rename From Value-Connections Map.vi to Compile Routing Channel States.vi. This VI is called by the higher level Complie Routing and Faulting Configuration.vi and is only used to compile the list of states and associated connections.
[ ] Rename Compile Communication Config.vi to Compile Communication Configuration.vi.
[ ] Compile the aliases in addition to compiling the routing channels in Compile Routing and Faulting Configuration. Create subVIs for Compile Aliases and Compile Routing Channels to prevent bloat in the compile VI.

[ ] Move Compile Routing Channels.vi to System Explorer >> SubVIs virtual folder.

[ ] Several VIs (Compile *.vi) have an additional user layer. Remove the "Fill" layer from these VIs.

[ ] The XML file fails to load due. I believe the ActionVIOnCompile directive goes under the main page section. Double check the schema (C:\Users\Public\Documents\National Instruments\NI VeriStand 2017\Custom Devices\Custom Device.xsd)


Unrecoverable exception - MongoError['Channel not found from the primary node: 'localhost:27019' { authenticated:0, connected:10, channels:10 } (Supervisor-1/Connection-2)']

ReactiveMongo Version (0.12.5-play26)
MongoDB version (3.4)
Operating System (Mongo Atlas/Ubuntu 17.04)
JDK (OpenJDK 1.8.0_131)
Library Dependencies

Playframework: 2.6
reactivemongo-iteratees: 0.12.5

Expected Behavior
When a replica set promotes a new primary, reactive mongo must be able to write to the new master without any interruption
Actual Behavior
When invoking GenericCollection#insert(...) once a new primary has been promoted after a an election. All subsequent writes will fail with the following error:
2017-08-23 16:35:16,899  ERROR application-akka.actor.default-dispatcher-55 reactivemongo.util.LazyLogger$LazyLogger.error - [Supervisor-1/Connection-2] Got an error, no more attempts to do. Completing with a failure...
reactivemongo.core.actors.Exceptions$ChannelNotFound: MongoError['Channel not found from the primary node: 'localhost:27019' { authenticated:0, connected:10, channels:10 } (Supervisor-1/Connection-2)']
Caused by: reactivemongo.core.actors.Exceptions$InternalState: null
	at reactivemongo.ConnectAll$IsMaster(71, {{NodeSet None Node[localhost:27017: Secondary (10/10 available connections), latency=1], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27018: Secondary (10/10 available connections), latency=2], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27019: Primary (10/10 available connections), latency=1], auth=Set() }})(<time:1503506110550>)
	at reactivemongo.IsMaster(71, {{NodeSet None Node[localhost:27017: Secondary (10/10 available connections), latency=1], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27018: Secondary (10/10 available connections), latency=2], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27019: Primary (10/10 available connections), latency=3], auth=Set() }}(<time:1503506110550>)
	at reactivemongo.ConnectAll$IsMaster(70, {{NodeSet None Node[localhost:27017: Secondary (10/10 available connections), latency=1], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27018: Secondary (10/10 available connections), latency=2], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27019: Primary (10/10 available connections), latency=3], auth=Set() }})(<time:1503506110550>)
	at reactivemongo.IsMaster(70, {{NodeSet None Node[localhost:27017: Secondary (10/10 available connections), latency=1], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27018: Secondary (10/10 available connections), latency=3], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27019: Primary (10/10 available connections), latency=3], auth=Set() }}(<time:1503506110550>)
	at reactivemongo.ConnectAll$IsMaster(69, {{NodeSet None Node[localhost:27017: Secondary (10/10 available connections), latency=1], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27018: Secondary (10/10 available connections), latency=3], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27019: Primary (10/10 available connections), latency=3], auth=Set() }})(<time:1503506110549>)
	at reactivemongo.IsMaster(69, {{NodeSet None Node[localhost:27017: Secondary (10/10 available connections), latency=4], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27018: Secondary (10/10 available connections), latency=3], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27019: Primary (10/10 available connections), latency=3], auth=Set() }}(<time:1503506110549>)
	at reactivemongo.RefreshAll({{NodeSet None Node[localhost:27017: Secondary (10/10 available connections), latency=4], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27018: Secondary (10/10 available connections), latency=3], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27019: Primary (10/10 available connections), latency=3], auth=Set() }})(<time:1503506110549>)
	at reactivemongo.ConnectAll({{NodeSet None Node[localhost:27017: Secondary (10/10 available connections), latency=4], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27018: Secondary (10/10 available connections), latency=3], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27019: Primary (10/10 available connections), latency=3], auth=Set() }})(<time:1503506110547>)
	at reactivemongo.ConnectAll$IsMaster(68, {{NodeSet None Node[localhost:27017: Secondary (10/10 available connections), latency=4], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27018: Secondary (10/10 available connections), latency=3], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27019: Primary (10/10 available connections), latency=3], auth=Set() }})(<time:1503506100554>)
	at reactivemongo.IsMaster(68, {{NodeSet None Node[localhost:27017: Secondary (10/10 available connections), latency=4], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27018: Secondary (10/10 available connections), latency=3], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27019: Primary (10/10 available connections), latency=3], auth=Set() }}(<time:1503506100554>)
	at reactivemongo.ConnectAll$IsMaster(67, {{NodeSet None Node[localhost:27017: Secondary (10/10 available connections), latency=4], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27018: Secondary (10/10 available connections), latency=3], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27019: Primary (10/10 available connections), latency=3], auth=Set() }})(<time:1503506100553>)
	at reactivemongo.IsMaster(67, {{NodeSet None Node[localhost:27017: Secondary (10/10 available connections), latency=4], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27018: Secondary (10/10 available connections), latency=3], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27019: Primary (10/10 available connections), latency=3], auth=Set() }}(<time:1503506100553>)
	at reactivemongo.ConnectAll$IsMaster(66, {{NodeSet None Node[localhost:27017: Secondary (10/10 available connections), latency=4], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27018: Secondary (10/10 available connections), latency=3], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27019: Primary (10/10 available connections), latency=3], auth=Set() }})(<time:1503506100552>)
	at reactivemongo.IsMaster(66, {{NodeSet None Node[localhost:27017: Secondary (10/10 available connections), latency=3], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27018: Secondary (10/10 available connections), latency=3], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27019: Primary (10/10 available connections), latency=3], auth=Set() }}(<time:1503506100552>)
	at reactivemongo.ConnectAll({{NodeSet None Node[localhost:27017: Secondary (10/10 available connections), latency=3], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27018: Secondary (10/10 available connections), latency=3], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27019: Primary (10/10 available connections), latency=3], auth=Set() }})(<time:1503506100551>)
	at reactivemongo.RefreshAll({{NodeSet None Node[localhost:27017: Secondary (10/10 available connections), latency=3], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27018: Secondary (10/10 available connections), latency=3], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27019: Primary (10/10 available connections), latency=3], auth=Set() }})(<time:1503506100551>)
	at reactivemongo.ConnectAll$IsMaster(65, {{NodeSet None Node[localhost:27017: Secondary (10/10 available connections), latency=3], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27018: Secondary (10/10 available connections), latency=3], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27019: Primary (10/10 available connections), latency=3], auth=Set() }})(<time:1503506090553>)
	at reactivemongo.IsMaster(65, {{NodeSet None Node[localhost:27017: Secondary (10/10 available connections), latency=3], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27018: Secondary (10/10 available connections), latency=3], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27019: Primary (10/10 available connections), latency=2], auth=Set() }}(<time:1503506090553>)
	at reactivemongo.ConnectAll$IsMaster(64, {{NodeSet None Node[localhost:27017: Secondary (10/10 available connections), latency=3], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27018: Secondary (10/10 available connections), latency=3], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27019: Primary (10/10 available connections), latency=2], auth=Set() }})(<time:1503506090553>)
	at reactivemongo.IsMaster(64, {{NodeSet None Node[localhost:27017: Secondary (10/10 available connections), latency=3], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27018: Secondary (10/10 available connections), latency=3], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27019: Primary (10/10 available connections), latency=2], auth=Set() }}(<time:1503506090552>)
	at reactivemongo.ConnectAll$IsMaster(63, {{NodeSet None Node[localhost:27017: Secondary (10/10 available connections), latency=3], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27018: Secondary (10/10 available connections), latency=3], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27019: Primary (10/10 available connections), latency=2], auth=Set() }})(<time:1503506090552>)
	at reactivemongo.IsMaster(63, {{NodeSet None Node[localhost:27017: Secondary (10/10 available connections), latency=3], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27018: Secondary (10/10 available connections), latency=3], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27019: Primary (10/10 available connections), latency=2], auth=Set() }}(<time:1503506090552>)
	at reactivemongo.ConnectAll({{NodeSet None Node[localhost:27017: Secondary (10/10 available connections), latency=3], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27018: Secondary (10/10 available connections), latency=3], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27019: Primary (10/10 available connections), latency=2], auth=Set() }})(<time:1503506090551>)
	at reactivemongo.RefreshAll({{NodeSet None Node[localhost:27017: Secondary (10/10 available connections), latency=3], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27018: Secondary (10/10 available connections), latency=3], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27019: Primary (10/10 available connections), latency=2], auth=Set() }})(<time:1503506090551>)
	at reactivemongo.ConnectAll$IsMaster(62, {{NodeSet None Node[localhost:27017: Secondary (10/10 available connections), latency=3], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27018: Secondary (10/10 available connections), latency=3], auth=Set(Authenticated(admin,eqs)) | Node[localhost:27019: Primary (10/10 available connections), latency=2], auth=Set() }})(<time:1503506080553>)

An example of this is like so:

  val reactiveMongoApi: ReactiveMongoApi

  val collectionName: String

  def db: Future[DefaultDB] = reactiveMongoApi.connection.database("eqs")

  def withCollection[T](op: JSONCollection => Future[T]): Future[T] =
    db.map(_.collection[JSONCollection](collectionName)).flatMap(op).recoverWith {
      case NonFatal(e) =>
        Logger.error(s"$e")
        Future.failed(new DbOperationFailedException(s"DB operation failed: ${e.getMessage}", Some(e)))
    }

}

@Singleton
class XDao @Inject() (val reactiveMongoApi: ReactiveMongoApi)(implicit exec: ExecutionContext) {

  val collectionName: String = "xs"

  def save(x: X): Future[X] = {
    val xId = x.copy(_id = Some(Id.generate))
    coll.insert(xId).flatMap {
      case wr: WriteResult if wr.ok => Future.successful(xId)
    }
  }

}

Reproducible Test Case
This is a very hard issue to reproduce. During our testing 90% of the time this has been pure luck we have got reactive mongo into the state. Tho in saying this these are the processes we have devised which provides the most likely instance of a failure:
We have managed to get it to fail by setting a connection time out to 5000ms and introducing an enormous amount of network lag to the primary. During this time we actively hit the above code with save requests. An example of our connection string would be mongodb://eqs:secret@localhost:27017,localhost:27018,localhost:27019/admin?authMode=scram-sha1&connectTimeoutMS=5000

Configure a 3 node replica set of mongo on ports 27017, 27018 and 27019
Shut down the 3 instances of mongo
Using toxiproxy and the cli create a proxy from port 27017 to 27027, 27018 to 27028 and 27019 to 27029
Start the replica set back up but setting the bind port to 27027, 27028 and 27029 respectively
Using toxiproxy inject 6000ms of lag

Footnote
After some investigation into this it turns out that in some instances, once a primary is no longer able to be connected to the connections will be drained and a new primary is seeked by asking all other instance which is the primary in the replica set.
If the old primary comes back online but after a new primary is elected (high latency issues for example) but the connections to the old primary have been drained, new connections will be made to both the old and new primary. HOWEVER the authentication seems to be using the old primary which may still be experiencing latency issues. Meaning you will have 10 active connections but none will be authenticated.
Our testing logs help to prove the above
Additional resources
reactive-mongo-log.txt
The only other known instance of this was https://groups.google.com/forum/?fromgroups#!searchin/reactivemongo/channel$20not$20|sort:relevance/reactivemongo/crcsB9AdobM/nn8jjnb0CwAJ

Hi,
As indicated in the guidelines only confirmed issue are accepted there.
Please use the Mailing list to ask question question/for help.
Best regards


[Question] Editing a value via customizer JavaScript API isn't saving (Or doesn't seem to be)

Issue description:
So I'm attempting to mass edit several settings via JavaScript (Think global color changer for example).
wp.customize.control('my-control').setting.set('#333')

Now this does work, BUT even on a normal refresh, the preview does not update on its own. Until I open the section that contains the control, then it works perfectly.
Even changing the color of the global switchers, it still updates on refresh, but only after I open the section by hand at least once.
I do remember that the framework does not load controls until the section is opened. What would be a decent workaround for this, @aristath ?
Thanks
Version used:
(Did you try using the develop branch from GitHub? There's a chance your issue has already been addressed there)
3.0.44
Using theme_mods or options?
theme_mod

@aristath any insight on this?

@aristath is this possible or is there a workaround?

With further investgiation, it looks like I needed to call:
control.actuallyEmbed();

Beforehand in-order for a control.settings.set call to work. And setting the value to the input link and calling trigger also made this work with postMessage.
Is there a way to do this without calling control.actuallyEmbed? I mean, it works, but with hundreds of controls, it is very slow.

Hmmm the reason this actuallyEmbed exists is to improve performance.
If you have a theme with hundreds of controls, then when the customizer first loads it has to init everything - including every single colorpicker. If you remove actuallyEmbed, a theme with 250 colorpickers can easily take 30s+ for the customizer's initial load. And I'm not talking about Kirki, that's using the plain Customizer API, no Kirki involved.
With actuallyEmbed that drops down to less than 10s.
What that method does is defer embedding the control and initializing its JS until its section is open.
I have an alternative colorpicker in https://github.com/kirki-framework/control-react-color/
It is built around the Kirki 4.0 API if you want to give that a try instead of the normal colorpickers (that is if you've already been experimenting with the develop branch of course...).
I'm not sure though about removing it... It's definitely doable, but it's there for a good reason.

@aristath Oh, I understand that after reading through the code and it makes sense why its done that way. I was wondering if there was a way to get postMessage to react without the control being embedded inside customizer. I don't necessarily want it removed.
And we are still working with v3 on the core theme. I haven't had the time to convert things over to v4 yet (time constraints which I'm sure you understand as well). I'll see if I can find some time for that this week, Since the theme I'm working on is about to go into production, I've been using the stable v3.

I was wondering if there was a way to get postMessage to react without the control being embedded inside customizer. I don't necessarily want it removed.

So postMessage isn't working until the section gets opened?
Yes, I know, I'm inexcusable... you posted this issue on August and in the 2 months since then I completely forgot about it.
I don't think that should be happening, it's definitely not the expected behavior. Gimme a few hours to investigate it, see why it happens.

I was wondering if there was a way to get postMessage to react without the control being embedded inside customizer. I don't necessarily want it removed.

So postMessage isn't working until the section gets opened?
Yes, I know, I'm inexcusable... you posted this issue on August and in the 2 months since then I completely forgot about it.
I don't think that should be happening, it's definitely not the expected behavior. Gimme a few hours to investigate it, see why it happens.

Correct. I've been scrubbing through the source trying to figure out why, but I can't put my finger on it.
If I set say a color via the JS API, nothing happens. Until I open the section, then postMessage works.
Even if call control.settings.set('#000') or something and make customizer save, it doesn't stick with postMessage or refresh. And on frontend, the change doesn't reflect either.

Just a note in case someone comes across this ticket. The discussion continued on https://gist.github.com/CaptJiggly/353e466e7b241457e4f7d53abc88ee2b#gistcomment-3041539
@CaptJiggly is this one OK to close?

Just a note in case someone comes across this ticket. The discussion continued on https://gist.github.com/CaptJiggly/353e466e7b241457e4f7d53abc88ee2b#gistcomment-3041539
@CaptJiggly is this one OK to close?

Yeah, its all good.


Spectral Deconvolution error, "flist" is null even with verified feature list

Basic information

My operating system: Windows 10
My MZmine version: MZmine 3.0.21-beta

What happened

Both modules of Spectral Deconvolution are non-functional for me
when I attempt to start the program, after running for a bit it produces the following error:

additionally the preview function doesn't actually display anything:

as additional information, I am following the suggested GCMS workflow. the ADAP feature resolver seemed to run without issue, and when I display the feature list it looks like this:

the summary of the process looks like this, I'm noticing it looks like there's no listed feature list as an input, so is this potentially the issue?

if i upload an mzxml file and a batch file, would that help in resolving this issue?

as an update, the spectral deconvolution error occurs regardless of whether the input comes from the ADAP peak detection or local minimum peak detection

Hi LoopyFig,
thanks for reporting.
As far as i know, @asmirn1 is already working on a fix.

@robinschmid @SteffenHeu I've made some changes to my fork of MZmine 3 to make the spectral deconvolution work. I'll check it and make a pull request.

Hi @asmirn1,
I'm currently testing MZmine3, trying to switch from MZmine2, and I face the same issue that @LoopyFig.
I'm running MZmine 3.1.0 portable (even tried pre-Release 3.1.1) with Win10.
Let me know if I can help you in debugging this problem and thanks a lot for your beautiful work to all of the contributors!!!
Have a good day

@LoopyFig @nic-Oban can you test the latest development build. We just merged a fix into version 3.1.3
https://github.com/mzmine/mzmine3/releases
Please report if this fixes both methods for your data.

Hi @robinschmid ,
thanks a lot for this release!
I just tested it on a dataset I know well and Multivariate curve resolution module is now working as expected I think. However, the preview is not available which make it still unusable on unknown chromatograms.
For Hierarchical clustering, I didn't used it much but it still throwing an error ('Unknown error' during peak decomposition. Cannot invoke "io.github.mzmine.datamodel.FeatureInformation.getAllPropoerties()" because the return value of "io.github.mzmine.datamodel.feature.FeatureListRow.getFeatureInformation()" is null) and no preview too.
Yesterday, I tested 3.1.1 release on an Ubuntu OS and I faced the same errors.
Thanks again for this fix and let me know if I can do anything more to help you.
Have a good day.

@asmirn1 parts were fixed others remain

@robinschmid I'll check the preview and the second algorithm.


Release 0.12.2

Codecov Report

:exclamation: No coverage uploaded for pull request base (release-0.12@2645b10). Click here to learn what that means.
The diff coverage is n/a.

@@               Coverage Diff               @@
##             release-0.12    #1909   +/-   ##
===============================================
  Coverage                ?   40.35%
===============================================
  Files                   ?      107
  Lines                   ?    13441
  Branches                ?        0
===============================================
  Hits                    ?     5424
  Misses                  ?     7538
  Partials                ?      479

Flag
Coverage Δ

unit-tests
40.35% <0.00%> (?)

Flags with carried forward coverage won't be shown. Click here to find out more.

/test-all
/test-ipv6-all
/test-ipv6-only-all

/test-ipv6-e2e
/test-ipv6-only-e2e
/test-windows-networkpolicy

jenkins-ipv6-ds-e2e and jenkins-ipv6-only-e2e are failing because of #1770

/test-windows-networkpolicy

/test-windows-networkpolicy

I haven't been able to run jenkins-windows-networkpolicy successfully. Failed several times with:
Step 7/12 : FROM antrea/base-ubuntu:2.14.0
toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit


AFHTTPRequestSerializer returns request with incorrect timeoutInterval

AFHTTPRequestSerializer.requestWithMethod:URLString:parameters:error: returns an NSMutableURLRequest with the default timeoutInterval set, instead of respecting the timeoutInterval that was set on the serializer.

+1 Same for me

Duplicate of #2563.

is it a duplicate?
I'm not subclassing AFHTTPRequestOperationManager and it happens too.

Yes, it's the same underlying cause.

Ok, I didn't said anything ;)


Question: Slide on click element?

Hello and thank you for this awesome module,
I got one question. I would like to slide from page 1 to page 2 on click on an input. I found in the documentation, this function: getNextPage(). But when I put: "@click="getNextPage()", it doesn't trigger the sliding.
Another method?
My code:
    <carousel id="demo_carousel">
      <slide class="slides_demo">
          <input type="button" @click="getNextPage()" value="Go" />
      </slide>
      <slide class="slides_demo">

This is next page

      </slide>
    </carousel>

And my method:
      methods: {
        getNextPage:function() {
          if (this.currentPage < this.pageCount - 1) {
            return this.currentPage + 1;
          }
          return this.loop ? 0 : this.currentPage;
        }
      }

Thanks for help :)

Hey @guillaumeduhan, I think this is related to #134 in that since 0.6.7 the scrolling features haven't been working as expected. I think someone is working on a fix, so I'll update you here once I test and merge!

Any idea if this has been resolved for you yet? The fix went out a while ago with v0.6.13, let me know if it's still happening and I'll switch this to a bug report!


better defaults for nested ordered lists (distinguish sublist numerals from parent list numerals)

When describing an ordered sequence of steps (e.g., in pseudocode in a draft), it's nice to present them as an ordered list (e.g. 1,2,3,4) rather than unordered (just bullets).  However, if there are sub-steps in such a presentation, the natural way to present them is with a nested ordered list.  But the nested list restarts with same numbering scheme as the outer list, which is pretty confusing.
For example, this text:
1. bar <- Retrieve config
1. foo <- baz(bar)
1. for qux in foo:
    1. Do thing A(qux)
    1. Do thing B(qux)
1. cleanup

renders as:
   1.  bar <- Retrieve config
   2.  foo <- baz(bar)
   3.  for qux in foo:
       1.  Do thing A(qux)
       2.  Do thing B(qux)
   4.  cleanup

Here are two better ways that it could render:
   1.  bar <- Retrieve config
   2.  foo <- baz(bar)
   3.  for qux in foo:
       3.1.  Do thing A(qux)
       3.2.  Do thing B(qux)
   4.  cleanup

or
   1.  bar <- Retrieve config
   2.  foo <- baz(bar)
   3.  for qux in foo:
       a.  Do thing A(qux)
       b.  Do thing B(qux)
   4.  cleanup

The format of an ordered list can be specified by the type= attribute, please see RFC 7991: The "xml2rfc" Version 3 Vocabulary.
I think what you are asking is a way for the outer list to be parametrized to supply a type= attribute for any inner list, so it does not have to be repeated for each inner list.  It would be easy to add something like type="a" (your second "better way").  Doing something for your first "better way" would require kramdown-rfc to generate the label on the outer list at each point an inner list is encountered (here: something like type="3.%d.", where the 3. is computed from the structure of the outer list, and values of type=, group=, and start=).  Second-guessing xml2rfc to this extent is a bit beyond kramdown-rfc's remit.  But I can certainly think about helping the second "better way" with pseudo-attributes of the form sub-type, sub-sub-type etc. that get inherited as type and sub-type to the next inner list.

@cabo if there is a way to do that from kramdown-rfc, that would be great.  You mention it as a way to parameterize the outer list itself, which would definitely be useful.  Even more useful (and simple, for my purposes) would be a document-wide setting that applies to all nested, ordered lists.
What i would like ideally is something in the YAML metadata block like:
nested-ordered-types: 1 a i A I

which would make the top-level ordered list type='1',  and the next-level ordered list type='a'.

Will the code need to consider intervening unordered lists?  Or can we start at 1 again if that happens?
1. one
2. two
   - two-left
      a. two-left-a
      b. two-left-b
   - two-right

nested-ordered-types: 1 a i A I

Those types can contain spaces, so a space-separated list won't work too well.  Probably needs to be

nested-ordered-types: ["1", a, i, A, I]

Will the code need to consider intervening unordered lists? Or can we start at 1 again if that happens?

I don't have much of an opinion here -- that seems pretty weird to me, if i'm doing nested ordered lists it's probably because i want to be able to refer to a particular sub-sub-*-item by its coordinates (e.g., "clause 3(b)iii", the way people talk about US legislation) , and i don't see how an intervening unordered list would fit in here.
I'd be fine with any of the following three choices:

an intervening unordered list is simply ignored.  So with ["1",a,i] and an ordered,unordered,ordered nesting, the first ordered would be "1", and the second ordered would be "a"
an intervening unordered list silently consumes a level of the hierarchy.  So with the same example, the first ordered would be "1" and the second ordered would be "i".
an intervening unordered list resets the rankings.  So with the same example, the first ordered would be "1" and the second ordered would also be "1".

OK, implementation-wise your number 1 (see what I did here :-) seems easiest.
It is also probably easiest to roll through the array, i.e., putting the shifted off current value back in at the end for the nested items.
Default then can simply be ["1"].

Is there a reason why we're not trying to follow what would happen from CommonMark? CommonMark puts out HTML, but we can follow how it does levels and nesting instead of inventing our own way.

On 19. Apr 2024, at 19:33, Paul Hoffman @.***> wrote:

Is there a reason why we're not trying to follow what would happen from CommonMark?

Yes.
Kramdown-rfc is based on kramdown, which is a dialect that was formed before common mark made decisions, often incompatible with existing markdown dialects.
In the hierarchy of objectives for kramdown-rfc, stability is very high, because I-Ds are often “dusty decks” that should continue to work after periods of time that are natural in the IETF, e.g., half a decade.
Where these considerations do not get in the way (and adding a YAML control certainly doesn’t), we can innovate.

CommonMark puts out HTML, but we can follow how it does levels and nesting instead of inventing our own way.

As far as I know, commonmark doesn’t do anything useful in the area of labeling nested ordered lists, or actually even in the way of supporting different numbering styles for single-level lists.
RFCXMLv3 has type=, so we are covered by using an IAL.
What is proposed here is to add some automation that would generate this attribute.
(Commonmark does do one thing that doesn’t have to do with nesting, which is extracting start numbers — that would be a great feature to have, but unfortunately it won’t be part of kramdown 1.
Well, we do have the start= attribute in RFCXMLv3 as well, and that can be addressed with an IAL, as can be group= for continuing numbering across interruptions.
Commonmark also has a broken 2 concept of tight vs. loose lists.
RFCXMLv3 has spacing=, which again can be accessed via an IAL.)
Grüße, Carsten

I have written the code, but
https://github.com/ietf-tools/xml2rfc/issues/1122
Will push this anyway after some more testing.

Now in 1.7.9:
1.7.9 Add option nested_ol_types
Set globally in {::options nested_ol_types="1, i, a" /} (markdown, not YAML header)
or for a single <ol in an IAL {: nested_ol_types="1 (%i) A"}
The value needs to be an array of <ol type= values, expressed as one of:

A YAML array
A string that will be split on commas (with optional blank space following)
A string that will be split on blank space

When testing this, an HTML rendering issue might cause some confusion:
https://github.com/ietf-tools/xml2rfc/issues/1122

1.7.10 now also takes nested_ol_types from YAML kramdown_options
As in
kramdown_options:
  nested_ol_types: 1, i, a

(overridden by ::options and by pseudo-attribute on <ol)

1.7.11 now also takes an option ol_start_at_first_marker
As in
kramdown_options:
  ol_start_at_first_marker: true

Default: false (for kramdown-rfc backward compatibility)
If true, an ordered list (<ol) will use the number in its first
marker (1 for 1. etc.) as the default value of the start= attribute.
(This increases commonmark compatibility, see https://github.com/cabo/kramdown-rfc/issues/227#issuecomment-2067148163)

I think the recent changes should address both the original observation and the discussion, so please close this if this works for you.
https://github.com/ietf-tools/xml2rfc/issues/1122 remains though, for now.

This works great.  Thank you, @cabo! Much appreciated.


Fix missing assertion in header tests

I do love it when my tests don't test anything
Also fixes the css selector used by changing from a to li as this element is not a link.

Well spotted @Top-Cat, would you mind updating the PR description showing that this PR fixes the missing assertion but also the incorrect CSS selector for --active in template.njk?
I'll share this with the team, but I'll be happy to have this merged. Thank you

This actually doesn't need a changelog entry since we don't ship tests to users 😅 Merging!


Genericize gazeProvider ref in GGVPointer

Overview
This private reference is currently pointing to the MRTK-implemented GazeProvider type. Since we allow devs to create their own, it'd be good to only reference the interface. It doesn't look like we had a specific dependency on our implementation.

/azp run

Any specific bug this was fixing, out of curiosity?

Filed an issue. This fixes https://github.com/microsoft/MixedRealityToolkit-Unity/issues/7566


Unity asset files is missing?

Hi, I saw that the plugin was updated today. I can only see 1 file in the unity assetstore. Is it intended?

This is correct. NatShare is now distributed from the NPM package registry, so the Asset Store package simply adds the package to your project's manifest.json.


AdminLTE for HTML5 server manager frontend?

Hi, I had some suggestions for the SE HTML5 server manager. I know this is a WIP at the moment and I do not know if any recent work was done on it so I'd thought I'll just share some suggestions to make development go faster.
If the fronted is holding you back from developing the HTML5 server manager then try out AdminLTE. This way you can focus on the back-end stuff and not waste time on making the interface work. Also like the SE client it would be nice if users can login on any device and change their password or view/change other information such as device limits or bandwidth use. It can also be made so users can use the web interface to manage their WireGuard keys as mentioned in the post I made in the WireGuard discussion.
Currently the only real features I feel like are missing from SE now is a HTML5 manager and some DHCP related features such as per-user static IPs/IP ranges and better IPv6 support (without having to setup a DHCPv6 server)
Also, I may be able to help with the HTML5 server manager development. Just let me know where you keep the current files for it and I'll take a look. Also I see you added a Sponsor button so I'll be checking that out too :)

Thank you very much!
I was aware of AdminLTE, but never tried it. The GUI is indeed the main reason why the web manager is considered "WIP".
All files for the interface are in src/bin/hamcore/wwwroot/admin, let me know whether you have any questions!

@davidebeatrici Does the web interface support PHP in any way? Would you be able to add support for PHP in any way? While AdminLTE does not require PHP I am just curious if it could.

Anything that runs client-side can be used.
Running server-side stuff (e.g. PHP code) is not possible right now, because the web server is pretty basic.


korean lang video upload issue

Package
filament/forms
Package Version
v3.0.63
Laravel Version
v10.25.2
Livewire Version
No response
PHP Version
8.2
Problem description
Hello, I enjoy laravel in Korea, and I am currently using filament to build a manager site.
I don't know why, but some video file names including Korean language are not uploaded.
If you rename the file to English and upload it with the special symbols in question, the function of uploading the file works normally.
Expected behavior
Files must be uploaded normally, regardless of language or file name length.
Steps to reproduce
I'll list some file names that have raised issues.

movie-1.mp4 => it's ok
마음의소리_1회_(가장의권위두개머리가몇개야)_(더빙판)NonDRM[HD] (편집본).mp4 => Not working File Upload

Reproduction repository
https://github.com/initred/filamentphp-korean-lang-video-upload-issue
Relevant log output
no log.

I suspect this is because the filename contains a period ..

@zepfietje I removed the period (.) from the file and tried again, but there is still a problem.
And I uploaded the file to the Reproduction repository.
I would appreciate it if you could reactivate this issue.

@initred  can you test if it is working with plain Livewire upload? https://livewire.laravel.com/docs/uploads
also test with filename: 마음의소리123.mp4

@wychoong I will test it and reply when I have time.

Yeah thanks for commenting, @wychoong.
Would be great to know if this is a Filament or Livewire issue, @initred.

@wychoong @zepfietje
I tested different names on the same file with livewire.
마음의소리_1회_(가장의권위두개머리가몇개야)_(더빙판)NonDRM[HD] (편집본).mp4
The above files export the logs below.
[2023-10-06 16:38:39] local.ERROR: League\Flysystem\Filesystem::write(): Argument #2 ($contents) must be of type string, null given, called in /var/www/html/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 375 {"exception":"[object] (TypeError(code: 0): League\\Flysystem\\Filesystem::write(): Argument #2 ($contents) must be of type string, null given, called in /var/www/html/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 375 at /var/www/html/vendor/league/flysystem/src/Filesystem.php:52)
[stacktrace]
#0 /var/www/html/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php(375): League\\Flysystem\\Filesystem->write()
#1 /var/www/html/vendor/livewire/livewire/src/Features/SupportFileUploads/TemporaryUploadedFile.php(143): Illuminate\\Filesystem\\FilesystemAdapter->put()
#2 /var/www/html/vendor/laravel/framework/src/Illuminate/Http/UploadedFile.php(36): Livewire\\Features\\SupportFileUploads\\TemporaryUploadedFile->storeAs()
#3 /var/www/html/app/Livewire/MovieUpload.php(23): Illuminate\\Http\\UploadedFile->store()
#4 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): App\\Livewire\\MovieUpload->saveMovie()
#5 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/Util.php(41): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#6 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\\Container\\Util::unwrapIfClosure()
#7 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\Container\\BoundMethod::callBoundMethod()
#8 /var/www/html/vendor/livewire/livewire/src/Wrapped.php(23): Illuminate\\Container\\BoundMethod::call()
#9 /var/www/html/vendor/livewire/livewire/src/Mechanisms/HandleComponents/HandleComponents.php(465): Livewire\\Wrapped->__call()
#10 /var/www/html/vendor/livewire/livewire/src/Mechanisms/HandleComponents/HandleComponents.php(108): Livewire\\Mechanisms\\HandleComponents\\HandleComponents->callMethods()
#11 /var/www/html/vendor/livewire/livewire/src/LivewireManager.php(96): Livewire\\Mechanisms\\HandleComponents\\HandleComponents->update()
#12 /var/www/html/vendor/livewire/volt/src/LivewireManager.php(34): Livewire\\LivewireManager->update()
#13 /var/www/html/vendor/livewire/livewire/src/Mechanisms/HandleRequests/HandleRequests.php(85): Livewire\\Volt\\LivewireManager->update()
#14 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(46): Livewire\\Mechanisms\\HandleRequests\\HandleRequests->handleUpdate()
#15 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Route.php(259): Illuminate\\Routing\\ControllerDispatcher->dispatch()
#16 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController()
#17 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(799): Illuminate\\Routing\\Route->run()
#18 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}()
#19 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#20 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle()
#21 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(78): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#22 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken->handle()
#23 /var/www/html/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#24 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle()
#25 /var/www/html/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(121): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#26 /var/www/html/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\\Session\\Middleware\\StartSession->handleStatefulRequest()
#27 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Session\\Middleware\\StartSession->handle()
#28 /var/www/html/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#29 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle()
#30 /var/www/html/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#31 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle()
#32 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#33 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(798): Illuminate\\Pipeline\\Pipeline->then()
#34 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(777): Illuminate\\Routing\\Router->runRouteWithinStack()
#35 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(741): Illuminate\\Routing\\Router->runRoute()
#36 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(730): Illuminate\\Routing\\Router->dispatchToRoute()
#37 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch()
#38 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()
#39 /var/www/html/vendor/livewire/livewire/src/Features/SupportDisablingBackButtonCache/DisableBackButtonCacheMiddleware.php(19): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#40 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Livewire\\Features\\SupportDisablingBackButtonCache\\DisableBackButtonCacheMiddleware->handle()
#41 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#42 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle()
#43 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(36): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#44 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()
#45 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#46 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle()
#47 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(99): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#48 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()
#49 /var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(49): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#50 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Http\\Middleware\\HandleCors->handle()
#51 /var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#52 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Http\\Middleware\\TrustProxies->handle()
#53 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#54 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then()
#55 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()
#56 /var/www/html/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle()
#57 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/resources/server.php(16): require_once('...')
#58 {main}
"}

Reproduction repository has been updated.

So this isn't a Filament issue actually?

ok, so i did a little source dive, it is a livewire issue and sad to say it might not be fixed able due to how it works internally
so the issue is when uploading a file, livewire will base64_encode the filename and it becomes extremely long (multibyte maybe?), so filesystem failed to store, and weirdly it silently failed https://github.com/livewire/livewire/blob/b25402aff4911dbccae5583308e94af4c9681ebb/src/Features/SupportFileUploads/TemporaryUploadedFile.php#L150-L157
usually max limit 255 chars https://serverfault.com/questions/9546/filename-length-limits-on-linux
and this sample file after base64 it becomes 270+ before lw's format in name. you can verify by shorten the korean filename and try again
there is a closed but not fixed issue https://github.com/livewire/livewire/issues/2834
@initred  i think you should submit a failing test there

@wychoong @zepfietje
Thank you always for your hard work.
I think this problem must be solved.
Clients don't care about file names.
I will try to register again with the livewire issue.
You must be busy, but thank you for taking the time to answer.
👍


options.plugins.title.font.size is ignored (3.0.0-beta.8 regression)

Expected Behavior
options.plugins.title.font.size should control the title's size. This worked in 3.0.0-beta.7.
Current Behavior
options.plugins.title.font.size is ignored in 3.0.0-beta.8. I was unable to find any documentation about this being a known breaking change, nor was I able to find any samples with customized title sizes.
Possible Solution
I saw that #8227 changed src/plugins/plugin.title.js and seemed to involve the font, but as a JS novice, I don't see what caused the bug.
Steps to Reproduce
Live example with 3.0.0-beta.7 where options.plugins.title.font.size works:
https://codepen.io/StephanTLavavej/pen/yLaGzYa
Live example with 3.0.0-beta.8 where options.plugins.title.font.size is ignored:
https://codepen.io/StephanTLavavej/pen/mdraBeo
Context
I work on Microsoft's C++ Standard Library implementation, and started using Chart.js last year to create a Status Chart tracking our GitHub progress, at https://microsoft.github.io/STL/ . (Thank you! I was learning JavaScript from scratch, and Chart.js made things very easy.) We're currently using Chart.js v2.9.4, but I have a branch where I'm eagerly testing each beta of v3.0.0 so I can react to breaking changes and be ready for the final release. That's how I noticed this regression.
Environment

Chart.js version: 3.0.0-beta.8
Browser name and version: Chrome 87.0.4280.141
Link to your project: https://github.com/StephanTLavavej/STL/tree/v3-pages is where I'm testing v3.0.0 betas

Fix verified with 3.0.0-beta.9 - thanks @LeeLenaleee!
https://codepen.io/StephanTLavavej/pen/MWjZxgQ
It seems that there's missing test coverage for title fonts, but if there are no plans to add such tests, I'm happy for this issue to be closed. :heart_eyes_cat:

Fix verified with 3.0.0-beta.9 - thanks @LeeLenaleee!
https://codepen.io/StephanTLavavej/pen/MWjZxgQ
It seems that there's missing test coverage for title fonts, but if there are no plans to add such tests, I'm happy for this issue to be closed. :heart_eyes_cat:

Unfortunately it's pretty hard to test those kinds of things since each browser is slightly different, so generating a baseline rendering image isn't possible. We work around this by using custom text sprites. That being said, there are tests that should be updated to match so I will update those.

Unfortunately it's pretty hard to test those kinds of things since each browser is slightly different, so generating a baseline rendering image isn't possible. We work around this by using custom text sprites. That being said, there are tests that should be updated to match so I will update those.


Add event to toggle handlers

Hi there, great library!
I have a use case for handling the click event of the hamburger component. I've gone ahead and suggested a way to incorporate it into the api, as a second argument to toggle and onToggled, let me know what you think!

Thanks for the PR! I was actually planning on removing onToggle in 3.0, in favor of:
useEffect(() => {}, [toggled])

Besided that, a few questions about this PR:

Can you explain a little bit about the use case?
How would you use/read the second variable (the click event) in this typical setup?

const [toggled, toggle] = useState(false)

<Hamburger toggled={toggled} toggle={toggle} />

Closing due to inactivity.

Just wanted to drop by saying that I need the click event to stop propagation. I know asking for something without contributing is not really the nicest thing to do, but this may help you prioritise new features.


Add files via upload

this is a technological institute of Ecuadorian Red Cross

@toninow Pull request merged. Thank you!


Message payload might not be a JSON object

We're currently documenting message payloads as if they're always JSON objects, but the reality is that it can be something else, for instance, a number. Here's an example:
https://ubidots.com/docs/api/mqtt.html#subscribe-to-a-variable
It says:

/v1.6/devices/{LABEL_DEVICE}/{LABEL_VARIABLE}/lv: This will return the last value of the variable as a single float value. This makes it easier to parse in microcontrollers.

That's especially important for IoT devices.

topics:
  accounts.1.0.action.user.signup:
    publish:
      $ref: "#/components/messages/userSignUp"
  accounts.1.0.event.user.signup:
    publish:
      payload:
        type: "string"
        description: "Simple response string"
        default: "test"

Seems to work for me already!?


SSL cert expiry on Violet Testnet

Is your feature request related to a problem? Please describe.
The SSL cert for testnet is expiring on Jan 15th. Figure out how SSL certs are renewed on Dokku.

Triage for SSL cert not being renewed
After some days of the cron-job being added, the SSL cert did not seem to be renewed.
Upon checking the cron-job's log, it seems to be running.

Command to check cron-job log: cat /var/log/dokku/letsencrypt.log
As per the logs, it tried to renew the SSL certificate for violet-test.net but it failed due to letsencrypt server's service being busy.
So, the SSL certificate was renewed manually by using following command;
dokku letsencrypt:enable <app_name>
We can see the expiry date for SSL cert of different apps by using following command;
dokku letsencrypt:list


git-like config: Allow .git/lab/lab config to override ~/.config/lab/lab

As stated in  https://github.com/zaquestion/lab/pull/414  I'd like to allow overrides between the global (~/.config/lab/lab) and local git-tree (.git/lab/lab) configs.  There is a problem with the way viper works that prevents us from doing this and viper would need to be modified with a new function.
Suppose I have two config files with the same name but in different directories:
.first/lab with contents
system]
        name = "first"

[override]
        addr = "<IP_ADDRESS>"

and .second/lab with contents

[system]
        name = "second"

and the following program that attempts to merge the configs:

package main

import (
        "fmt"

        "github.com/spf13/viper"
)

const defaultGitLabHost = "https://gitlab.com"

func main() {
        viper.SetConfigType("toml")

        // .first/lab
        viper.SetConfigName("lab")
        viper.AddConfigPath(".first")
        viper.ReadInConfig()

        // .second/lab
        viper.SetConfigName("lab")
        viper.AddConfigPath(".second")
        viper.MergeInConfig()

        fmt.Println(viper.GetString("system.name"))
        fmt.Println(viper.GetString("override.addr"))
        viper.Reset()
}

The expected output is:

second
<IP_ADDRESS>

However the actual  output is

first
<IP_ADDRESS>

This occurs because of the way viper searches for the config file:  The two AddConfigPath() calls results in a search path of [.first .second] for a file 'lab'.  MergeInConfig() will merge in the first match and it will not be .second/lab, but .first/lab.  IOW, because the file name is the same the .second/lab is never found by MergeInConfig.
The only way to fix this is to add functionality for a RemoveConfigPath() to viper:

// RemoveConfigPath removes a path for Viper to search for the config file in.
// Can be called multiple times to remove multiple search paths.
func RemoveConfigPath(out string) { v.RemoveConfigPath(out) }
func (v *Viper) RemoveConfigPath(out string) {
        if out == "" {
                return
        }
        absout := absPathify(out)
        jww.INFO.Println("removing", absout, "from paths to search")
        if stringInSlice(absout, v.configPaths) {
                for i, path := range v.configPaths {
                        if path == absout  {
                                v.configPaths = append(v.configPaths[:i], v.configPaths[i+1:]...)
                                break
                        }
                }
        }
}

I thought about changing the code for MergeInConfig(), however, deemed it too risky to existing users to change the behavior to a last-found-first approach.
In any case I'm going to have to solve the viper issue before I can solve number 3 in #407.

@prarit, two things:

I think your message's body is malformatted because you placed a '[' before the quotation mark "```" right in the first code :)
what if we proactively search for the existence of the files before passing it to viper? I mean, we know what are the config levels we have: user level with the config file in $HOME/.config/lab/ and the project level with .git/lab/, thus:

the code search for the user level, iff it exists, pass it to viper (SetConfigName() + ReadInConfig() maybe?) and place all config options there available in a structure
the code then searches for the project level, iff it exists, pass it to viper again and update all config options there available in the same structure.

Of course it would be better to have the option of using viper to do that, but what do you think about this approach while viper doesn't have it?

@prarit, two things:
1. I think your message's body is malformatted because you placed a '[' before the quotation mark "```" right in the first code :)

Hah :)  Thanks.  I didn't have a chance to go back and think about it.

2. what if we proactively search for the existence of the files before passing it to viper? I mean, we know what are the config levels we have: user level with the config file in $HOME/.config/lab/ and the project level with .git/lab/, thus:

* the code search for the user level, iff it exists, pass it to viper (`SetConfigName()` + `ReadInConfig()` maybe?) and place all config options there available in a structure

* the code then searches for the project level, iff it exists, pass it to viper again and update all config options there available in the same structure.

* rely on the "config" structure we've created and updated, instead of calling `viper.Get__()` throughout lab's code.

I think that would work.  I was debating about using viper.UnMarshall() in the #414  but wanted to concentrate on using toml first.

Of course it would be better to have the option of using viper to do that, but what do you think about this approach while viper doesn't have it?

After looking at the viper code, this works for my config examples above.

package main

import (
        "bytes"
        "fmt"
        "log"

        "github.com/spf13/viper"
        "github.com/spf13/afero"
)

const defaultGitLabHost = "https://gitlab.com"

func main() {
        viper.SetConfigType("toml")

        // .first/lab
        viper.SetConfigName("lab")
        viper.AddConfigPath(".first")
        viper.ReadInConfig()

        file, err := afero.ReadFile(afero.NewOsFs(), ".second/lab")
        if err != nil {
                log.Fatal(err)
        }

        viper.MergeConfig(bytes.NewReader(file))
        fmt.Println(viper.GetString("system.name"))
        fmt.Println(viper.GetString("override.addr"))
        viper.Reset()
}

Today there are three ways to get core config data:

Override via LAB_ env values
"dot" (ie the local directory)
~/.config/lab

I propose to change this to a more git-like experience of

Override via LAB_ env values
Optional --config <config_name> parameter that is NOT overriden by
any other config
~/.config/lab/
work tree local .git/lab/

This would allow, for example, a ~/.config/lab/lab.toml of
[core]
host = "gitlab.com"
user = "prarit"
token = "abcde12345"
comments = "true"
and a .git/lab/show_metadata.toml of
comments = "false"
then the .git/lab/show_metadata.toml would override the ~/.config/lab/lab.toml
setting of comments, ie) comments would be "false"
I'm working on some code atm and should have a MR available in the next few days as a WIP.

Just for the record, in the config overall you added loading of config files from the .git directory https://github.com/zaquestion/lab/blob/master/internal/config/config.go#L248-L250
I think this issue and the above comment is entirely related to the desired new merge functionality?

Yup, this issue and the above comment is related to the desired new merge functionality.

@prarit where did we land on this?

I think it was solved with 7dcf390188c61d8db988254a35c6bd439b779844, wasn't it @prarit ?


feat(imageLoader):Add an nth image loader strategy (#10)

Add an nth image loader, making the appearance of volumes much nicer when they are large by creating some detail everywhere immediately.

Added docs as requested.


Switch to node-js build engine for cljs tests

I have switched to node-js instead of phantomjs. Looks like there is some issue on travis with old phantomjs. I ran this commit twice on travis. Both time it ran fine. Please give this a try. This should fix #190 & #77

Reference to my build output - https://travis-ci.org/firesofmay/specter/builds/210090593

Awesome, that seems to have done the trick.

@nathanmarz Great :)