[feature request] update reactively and add a refresh button for assets

description
After creating new asset files in the project, the assets tab will not update reactively and has no refresh button now. Adding a refresh button and updating assets reactively will increase DX.
expected

add a refresh button
update assets' states reactively

to confirm

how to watch the creation and deletion of assets ( need to find an appropriate way )
should the states of assets in the preview drawer be updated reactively? ( It could rely on vite hmr )

不知道是否可以参考老版的 vite-plugin-vue-devtools 中的代码？ 我曾提交过一个pr，里面包含了file watch的功能。
希望对你有帮助: ) vite-plugin-vue-devtools #183


crash when i edit typst

when i choose open, then choose a folder, app will be crashed, don't know why.
Device: Samsung Galaxy tab s7, OneUI 5.1.1

fixed in 0.21.2


cranelift: Added fp and, or, xor, not ops to interpreter.

https://github.com/bytecodealliance/wasmtime/pull/4920
@afonso360

Also, again. sorry for being very late. I think I can use more time this week.

I think there is some bitcast tests are missing. I am going to work on some bitcast tests before I start working implement float bitops on x86


Issue When selecting

I have a weird issue which I totally not understand. Maybe I'm missing something.
var excel = new ExcelQueryFactory("products.xlsx");
//get all products with discount
var discounts = from s in excel.Worksheet() where
    s["Discount/Premium"].Cast<string>().StartsWith("-") select s;
//Select products with a YTM higher than 3
var applicable = from b in discounts where
    b["YTM"].Cast<double>() > 3.0 select b;
MessageBox.Show(discounts.Count().ToString()); //<- returns 51
MessageBox.Show(applicable.Count().ToString()); //<- returns 14826

products.xlsx got around 50'000 Rows/Products
There are 51 products with discounts
There are 14'000 products with "YTM > 3.0" - HOW can this be?

To my my knowledge, I'm searching YTM products in discounts. How can I get 14'000 products from 51?!? Am I missing something?
Best regards, Julian

This sounds like the same issue as #120.


Improve documentation a11y

Fix #119

Upgrade Sphinx and fix doc build warnings
Use higher contrast pygment styles
Add Sphinx copy button extensions
Add .readthedocs.yaml

:books: Documentation preview :books:: https://shot-scraper--120.org.readthedocs.build/en/120/

Thanks for this, really nice set of fixes.

I'm happy you appreciated the PR.
BTW thanks for 'shot-scraper', I used it to take the djangoproject.com screenshots for my DjangoCon US 2023 talk
https://www.paulox.net/2023/10/17/djangocon-us-2023/#slides

Awesome!


(BKR-1472) Unwrap Markdown

Hard wrapping on Markdown text was applied inconsistently between (and within) docs; all hard wrapping has been removed.
Split from #1513

What's the advantage to completely unwrapping as opposed to having a limit?
Other than that, I'm fine with this. It'll need to be rebased to be ready to merge though.

There are pitfalls to hard-wrapping Markdown in particular:

Though uncommon, it can lead to unexpected formatting outcomes. Especially when modifying the wrapping, where block-defining syntax can get wrapped onto a new line. For example, if an inline hyphen is hard-wrapped onto a new line it will break the paragraph by starting a list. Same for a number of other block-level formatting characters.
Changes to line content require re-wrapping. While software tools can accomplish this, see above. Single-word changes that result in re-wrapping show extraneous whitespace changes in wrapped adjacent lines. In a long paragraph, this can result in dozens of lines modified for a single word change.
Hard-wrapping of indented blocks requires re-indenting (not necessarily handled properly by generic tools), and can lead again to surprise formatting outcomes.
Hard-wrapping without a standard line-length results in inconsistent raw formatting across and within files. If the hard-wrapping is longer than the developer's editor wrapping length, it can result in hanging lines. If it matches perfectly, the developer must check the wrapping to match it, because their editor's soft-wrapping will visually match the document's hard-wrapping. If it's shorter, the developer may not notice; if they apply hard wrapping it may not match.

While I'm opposed to hard wrapping, my preferences don't drive this project and this is a big change just for whitespace; I understand. At the least we should adopt hard-wrapping guidelines as part of the Markdown formatting doc so that things are more consistent moving forward.

hehe, I preferred having a hard-wrap before this, but your simple argument in #1518 on it (here unless it's moved around since then) convinced me, let alone all the points you make here.
I'm in favor of this, but it'll need to be rebased before it can be merged.

Rebased and ready for a clean, fast-forward merge.


Add support for bold text

Convert *example* to \textbf{example}. For some reason, the code was present, but commented out. I adapted the tests as well. All tests that passed previously, still pass.

I was needing the bold too, perhaps there's a reason it was commented.
We should use an other strategy to do bolds?

I was needing the bold too, perhaps there's a reason it was commented.

Yes, probably there is a reason. Maybe @jxxcarlson knows it? At least there are a lot of tests, and the proposed change did not break random ones.

We should use an other strategy to do bolds?

You can always use LaTeX syntax directly in your AsciiDoc file, although this is not really nice because it ties the document to LaTeX.

Tell me what you would like to have and I can probably take care of it tonight
(Give me an example of the syntax)

On Jun 20, 2015, at 9:00 PM, Benjamin Lipp<EMAIL_ADDRESS>wrote:
I was needing the bold too, perhaps there's a reason it was commented.
Yes, probably there is a reason. Maybe @jxxcarlson https://github.com/jxxcarlson knows it? At least there are a lot of tests, and the proposed change did not break random ones.
We should use an other strategy to do bolds?
You can always use LaTeX syntax directly in your AsciiDoc file, although this is not really nice because it ties the document to LaTeX.
—
Reply to this email directly or view it on GitHub https://github.com/asciidoctor/asciidoctor-latex/pull/34#issuecomment-113846003.

I see -- you should certainly be able to do this is really important.

I must have goofed. Sorry about that!  Merged your pull request.

thanks @jxxcarlson !
I'm trying to make it possible to write a thesis or dissertation with Asciidoc, without knowing Latex. It will use the Brazilian latex template behind the scenes.

Good luck!  Please let me know if you have problems.
Within the context of the project, I will do what I can
to help.
Jim

On Jun 20, 2015, at 9:49 PM, Eduardo de Santana Medeiros Alexandre<EMAIL_ADDRESS>wrote:
thanks @jxxcarlson https://github.com/jxxcarlson !
I'm trying to make it possible to write a thesis or dissertation with Asciidoc, without knowing Latex. It will use the Brazilian latex template https://github.com/abntex/abntex2/blob/master/doc/latex/abntex2/examples/abntex2-modelo-trabalho-academico.tex behind the scenes.
—
Reply to this email directly or view it on GitHub https://github.com/asciidoctor/asciidoctor-latex/pull/34#issuecomment-113848586.

Thanks for merging, @jxxcarlson!


Remove 'compare-gradle-builds' plugin from distribution

🎉

Strictly speaking, removing the tooling model breaks the compare plugin in older versions of Gradle, when people are trying to upgrade. Which might be ok. Alternatively, we would keep the tooling model and deprecate its use.


Active Directory Integration not working

Rancher Server Setup

Rancher version: 2.6.2
Installation option (Docker install/Helm Chart):Helm

If Helm Chart, Kubernetes Cluster and version (RKE1, RKE2, k3s, EKS, etc):RKE2

Proxy/Cert Details:let´s encrypt

Information about the Cluster

Kubernetes version:v1.21.4
Cluster Type (Local/Downstream):Local

If downstream, what type of cluster? (Custom/Imported or specify provider for Hosted/Infrastructure Provider)

Describe the bug

I’ve got Rancher HA and trying to get AD provider working. I keep getting authentication failed error even though the credentials work. I verified the credentials in a separate LDAP client (ldapsearch).  Using the NETBIOS\username and UPN name format. I just can’t get this config working.
Expected Result

Should be able to enable the  Microsoft AD provider.

yeah same here! It seems to be broken... I was only able to login with an account whose given name was just one word. Then it would work, but if I've set first and last name then it does not work.
In the end I just deployed keycloak and used their SAML provider for Rancher. Really sad tho...


iOS hasStrings and the clipboard notification

Description
Uses the iOS hasStrings method that's being added in the engine in https://github.com/flutter/engine/pull/19859 to avoid iOS's clipboard notification.
Related Issues
Closes https://github.com/flutter/flutter/issues/60145
Depends on https://github.com/flutter/engine/pull/19859
Depends on https://github.com/flutter/engine/pull/20393
Depends on https://github.com/flutter/engine/pull/20531 and more to come for other platforms
Tests
I added the following tests:
TODO
Breaking Change
None

PR triage: Looks like the engine side was submitted. Is this ready?

No, I need to add hasStrings to all the other platforms in addition to iOS.  I have an Android PR at https://github.com/flutter/engine/pull/20393 and will follow up with the others.  I've added this to the description.

Bad bot. :)

This PR is hanging around for awhile while I finish all the engine dependencies, I'm probably confusing the bot.

PR triage update from @justinmc: "I need to do a PR for Windows and a PR for Fuchsia."


Update succeeds when no items are updated

Currently an update call can complete successfully but not update any rows in the database. While the UPDATE command executed was technically successful, there is no indication given as to how many rows were updated. This makes it difficult to tell the client wether or not the item was actually updated or not. Vapor will return a 200 status and the model that was supposedly updated (but actually wasn't).
PostgreSQL UPDATE
An UPDATE in PostgreSQL will update any rows that pass the condition. After the command has completed PostgreSQL will return the count of updated items. From the PostgreSQL docs (link):

On successful completion, an UPDATE command returns a command tag of the form
UPDATE count

If you try to perform an update where none of the rows in the table meet the condition then PostgreSQL will return UPDATE 0. According to the PostgreSQL docs, it is not an error if no rows are updated.
Proposal
I propose that postgresql should throw if the update returns with the message UPDATE 0.
Throwing seems like the best mechanism to tell the caller that no rows were updated. I can't think of a situation where it is desirable for an update call to succeed if no rows are updated. Maybe someone else can think of a situation where this would be acceptable.
Initially this would have the effect of Vapor returning a 500 error. I would be ok with that, but think it would be ideal to end up with a 404. I think that work would need to be done in Fluent to translate the "No rows updated" error into a "no row with ID" error (since the only condition Fluent adds on an update is the ID).
Sample Code
To provide a starting point, here is some example code.
postgresql/PostgreSQLConnection+Query.swift line 85
case .close(let response):
    if case let PostgreSQLMessage.CloseResponse.command(commandMessage) = response, commandMessage == "UPDATE 0" {
        // didn't update any rows
        throw PostgreSQLError(identifier: "query", reason: "No rows updated.")
    }
    break

Personally, I think we should stick with Postgres' behavior here and return the number of updated rows, but make this not an error. If we do not mark the return value as @discardableResult, the user will get a warning if they ignore it, so they can make an educated decision themselves. If we were throwing, it would be hard to distinguish between legitimate database errors (connection issues, etc.) and simply a call that didn't change anything, even though the two are fairly different types of errors.

@MrMage I think that is a sensible approach.
Do you think it makes sense to ultimately return a 404? We could throw an error at the Fluent level if the retuned count is 0.

I am not an expert on how Fluent handles these things (I think returning a 404 error for empty SELECT queries was discussed before, but I don't know what the result of that was). As mentioned, I would rather not throw an error at all in this case.

PostgresNIO now supports accessing the affected row count for update queries: https://github.com/vapor/postgres-nio/pull/95


Provide "server" class the correct auth details

This pull request adds a constructor to the VirtualminClient class in order to pass the correct auth details to it's parent VirtualServersClient.
A PHPDoc comment within the single commit explains this better.

That isn't required.
From PHP manual:
http://php.net/manual/en/language.oop5.decon.php
Note: Parent constructors are not called implicitly if the child class defines a constructor. In order to run a parent constructor, a call to parent::__construct() within the child constructor is required. If the child does not define a constructor then it may be inherited from the parent class just like a normal class method (if it was not declared as private).

Are you having a situation where this isn't happening? Which version of php?

I'm using PHP 7. It turns out I had a bug in my own code that didn't supply the auth details to the correct classes.
Today I decided to look at the same code with a new "set of eyes" and discovered and fixed the bug preventing the wrapper from running.
Oh and thanks for the PHP manual reference, I thought constructors weren't inherited and that you needed to call the parent constructor first. I'll be refactoring my own code too.
Thanks again! 👍


[Spec Deviation] Default rest field type should be “pure type”.

Duplicates https://github.com/ballerina-platform/ballerina-lang/issues/13181


[syncthing] Make addon work with integration

Which addon?

Syncthing
Is your feature request related to a problem? Please describe.

The addon should work with the HA integration
Describe the solution you'd like

Describe alternatives you've considered

Additional context

See Homeassistant Post on forum.

closed by mistake.
Note for me: https://community.home-assistant.io/t/syncthing-addon/320452/7?u=poeschl

Looks like my #414 is somewhat of a dupe/overlap...


Add "discard 1 gold"-cost to the cost framework

Don't see discarding more than 1 gold as a cost or discarding different types of tokens as a cost happening soon, so I kept it simple.
Edit: Hmm, probably better to do it right the first time, have it take type and amount arguments...

This could be made more generic, but like you said, there doesn't seem to be a reason to yet - it's mostly just discarding 1 gold from the card. 👍

On third thought, I'll keep it like this for now. Easy enough to fix later if it ever becomes an issue.


Make idea.project and idea.module extensions instead of fields

I know this is a very specific problem, but I started to use the idea-ext plugin.
This plugin adds a hierarchy of extensions to the idea.project and idea.module fields.
Unfortunately as project and module are fields, not extensions themselves, the accessor generation for kotlin DSL does not recognize these added extensions and thus produces not accessors for them.
By making project and module extensions, accessors would be generated.
Alternatively if #16107 is going to be done, the idea-ext plugin could use that facility to contribute its accessors.

Still relevant


Generate random verses

Hello,
I saw issue #38 which talks about retrieving random verses, so I decided to implement that here.
I don't think we want to get a truly random verse (something like Leviticus 22:17),
so I made a JSON file which holds verse references, and each reference is under a topic.
Additions

Make the endpoint /?random=verse which retrieves a random verse.
Enable the users to choose a topic of their own by passing the topic name as a value in place of "verse".
i.e. - /?random=hope
Create a JSON file which holds all of the references. Each reference has its own topic.

Changes

Encapsulate the database query logic into a method.

Since using the endpoint /?random=verse would call the / path, I put all of the database query logic into a method of its own and called it under / and /:ref, respectively.
Let me know what you think!
I'd be glad to look over the code and make any changes accordingly.

This is really cool, and thanks for your work!
One principle of bible-api.com is that it's just the raw data -- no commentary. I'm not convinced we should add a curated list of verses as I'm in no way qualified to maintain it. Nor am I sure who to trust to maintain it.
So I'm inclined to not accept this PR as-is for that reason.
I am open to discussion about this, though, as I also wonder what the utility of a purely random verse would be. I am aware some people make games using bible-api so perhaps it could be useful for that!
The code itself looks ok, with exception of your inconsistent indentation-style (4 spaces in multiple places).
I'll leave this open in case you want to discuss. If you want to rework it to return an actual purely random verse, then I think that would be acceptable and would allow us to close #38.

Thank you for the reply!
You're right about the spacing inconsistencies, I should have checked that before pushing the changes.
Since the PR is still open, I'll make a commit so the indentations are 2 spaces each.
I see what you're saying about the curated list of verses; although I wouldn't consider it a commentary, deciding which verses fall under which topic is relatively subjective, and I could see maintenance getting finicky. If we were to implement it, it would probably be best to use some solid base of information to refer to, like a third-party concordance of some sorts, but I think at at that point it just wouldn't be raw data anymore.
I'm impartial as to whether its topical or just raw data, so I'll see if I can come up with something that returns a purely random verse!

I've written some logic to generate a purely random verse this time.
It was a little tricky because the number of books vary from translation to translation.
Because the database queries I wrote here are similar to one another, I considered writing a method like find_length which would find the number of books, chapters, and then verses for a translation, but instead of writing some strange and convoluted regular expression to repeat, I just wrote each database query as is. They're relatively long, but I think the flow/intention is clear.
What I did decide to refactor was the 404 response when a translation isn't found.
The same code was already written in the original logic when trying to get a verse, so I didn't want to double it up in the get_random_verse method.
I think that's about it for the logic, but if there's anything I'm missing, just let me know.

Hello,
I've deleted the JSON file and adjusted the translation_id code.
I'm not sure if comments on the review send a notification, so I thought I'd just write a comment here too 👍

Sorry I've been busy, but I plan to take another peek at this in the next few days, merge it, and deploy! Thanks!

That was a blast 🚀
Thank you!

I just realized today that I never got around to deploying this. Yikes!
Sorry it took so long, but you can now use this on the site:
https://bible-api.com/?random=verse

Awesome!


Competitive Programming concept linked list

Description 📜
Very well explanation of Traversing in linked list is explained with sample code. This concept one can used in competitive coding and understanding the concept too.
Issues Fixes # <1226>

Type of change 📝

[x] Doc#umentation (Content Creation in the form of codes or tutorials)

Domain of Contribution 📊

[x] Competitive #Programming

Checklist ✅

[x] I follow Contributing Guidelines & Code of conduct of this project.
[x] I have performed a self-review of my own code or work.
[x] I have commented my code, particularly in hard-to-understand areas.
[x] My changes generates no new warnings.
[x] I'm GWOC'21 contributor

Screenshots / Gif (Optional) 📸

Hey @veerviren , Seems like you've raised the PR to main branch. You must raise to Competitive_Programming branch(probably your domain branch).

@ravireddy07 it possible to change branch of this pr or should i create new pr


Added ability to edit accept terms url

Should we add documentation for the use case of updating accept terms URL?


Fix rule criteria comparison for falsy criteria pattern values

This pull request fixes a bug with criteria comparison of falsy pattern values.
Previously, if a falsy value was provided for a pattern (e.g. number 0), comparison would fail since we incorrectly assumed criteria pattern is not provided and cast it to None.
This fixes bug described in #2600.

And this is why kids checking for falsy values can be a trap :P

+1


FilterMutectCalls crashes when vcf is empty (when running on a sge cluster run)

Hi Brad et al,
When running bcbio on an sge cluster I get the following error. It looks like this is due to the VCF file being empty for one of the small chromosome scaffolds "chr14_GL000009v2_random". This issue is similar to #2829 but I'm currently running on the hg38 build with mostly default parameters.
Details below, thanks again for a fantastic tool!
Warren
command:
java -Dsamjdk.use_async_io_read_samtools=false -Dsamjdk.use_async_io_write_samtools=true -Dsamjdk.use_async_io_write_tribble=false -Dsamjdk.compression_level=2 -Xms681m -Xmx6818m -XX:+UseSerialGC -Djava.io.tmpdir=/shared/pipeline-user/test_data/cll_5_tumor/work/bcbiotx/tmpl2aen8h4 -jar /shared/pipeline-user/bcbio/anaconda/share/gatk4-<IP_ADDRESS>-1/gatk-package-<IP_ADDRESS>-local.jar FilterMutectCalls --reference /shared/pipeline-user/bcbio/genomes/Hsapiens/hg38/seq/hg38.fa --variant /shared/pipeline-user/test_data/cll_5_tumor/work/bcbiotx/tmpl2aen8h4/CLL006_tumor-chr14_GL000009v2_random_0_122919-raw.vcf.gz --output /shared/pipeline-user/test_data/cll_5_tumor/work/bcbiotx/tmpl2aen8h4/CLL006_tumor-chr14_GL000009v2_random_0_122919-raw-filt.vcf.gz
some of the output:
12:40:05.745 INFO  FilterMutectCalls - Done initializing engine 12:40:05.907 INFO  ProgressMeter - Starting traversal 12:40:05.907 INFO  ProgressMeter -        Current Locus  Elapsed Minutes    Variants Processed  Variants/Minute 12:40:05.909 INFO  FilterMutectCalls - Starting pass 0 through the variants 12:40:05.980 INFO  FilterMutectCalls - Finished pass 0 through the variants 12:40:06.005 INFO  FilterMutectCalls - Starting pass 1 through the variants 12:40:06.017 INFO  FilterMutectCalls - Shutting down engine [May 24, 2019 12:40:06 PM UTC] org.broadinstitute.hellbender.tools.walkers.mutect.filtering.FilterMutectCalls done. Elapsed time: 0.02 minutes. Runtime.totalMemory()=691404800 java.lang.IllegalArgumentException: log10 p: Values must be non-infinite and non-NAN
YAML:
`details:

algorithm:
aligner: bwa
ensemble:
numpass: 2
aligner: bwa
ensemble:
numpass: 2
mark_duplicates: true
recalibrate: true
remove_lcr: true
svcaller:

cnvkit
lumpy
manta
tools_on:
gemini
damage_filter
variant_regions: /shared/pipeline-user/bcbio/genomes/Hsapiens/hg38/coverage/capture_regions/Exome-NGv3.bed
variantcaller:
mutect2
vardict
vcfanno:
gemini
somatic
analysis: variant2
description: CLL006_tumor
files:
/shared/pipeline-user/test_data/input/ERR315865_1.fastq.gz
/shared/pipeline-user/test_data/input/ERR315865_2.fastq.gz
genome_build: hg38
metadata:
phenotype: tumor`

Thanks, I know this is stupid but do you think you could pass on the empty VCF file so I can test and fix this? It is helpful to have the actual failing file so I can definitely reproduce.

CLL006_tumor-chr14_GL000009v2_random_0_122919-raw.vcf.gz
Hi @roryk , sure, here is the file and the two commands I used:
mkdir -p /shared/pipeline-user/test_data/cll_5/work/bcbiotx/tmpjgip15hg
java -Dsamjdk.use_async_io_read_samtools=false -Dsamjdk.use_async_io_write_samtools=true -Dsamjdk.use_async_io_write_tribble=false -Dsamjdk.compression_level=2 -Xms681m -Xmx6818m -XX:+UseSerialGC -Djava.io.tmpdir=/shared/pipeline-user/test_data/cll_5/work/bcbiotx/tmpjgip15hg -jar /shared/pipeline-user/bcbio/anaconda/share/gatk4-<IP_ADDRESS>-1/gatk-package-<IP_ADDRESS>-local.jar Mutect2 --annotation ClippingRankSumTest --annotation DepthPerSampleHC --reference /shared/pipeline-user/bcbio/genomes/Hsapiens/hg38/seq/hg38.fa --annotation MappingQualityRankSumTest --annotation MappingQualityZero --annotation QualByDepth --annotation ReadPosRankSumTest --annotation RMSMappingQuality --annotation FisherStrand --annotation MappingQuality --annotation DepthPerAlleleBySample --annotation Coverage --read-validation-stringency LENIENT -I /shared/pipeline-user/test_data/cll_5/work/align/CLL006_tumor/CLL006_tumor-sort-recal.bam --tumor-sample CLL006_tumor -L /shared/pipeline-user/test_data/cll_5/work/mutect2/chr14_GL000009v2_random/CLL006_tumor-chr14_GL000009v2_random_0_122919-regions-nolcr.bed --interval-set-rule INTERSECTION -O /shared/pipeline-user/test_data/cll_5/work/bcbiotx/tmpjgip15hg/CLL006_tumor-chr14_GL000009v2_random_0_122919-raw.vcf.gz
java -Dsamjdk.use_async_io_read_samtools=false -Dsamjdk.use_async_io_write_samtools=true -Dsamjdk.use_async_io_write_tribble=false -Dsamjdk.compression_level=2 -Xms681m -Xmx6818m -XX:+UseSerialGC -Djava.io.tmpdir=/shared/pipeline-user/test_data/cll_5/work/bcbiotx/tmpjgip15hg -jar /shared/pipeline-user/bcbio/anaconda/share/gatk4-<IP_ADDRESS>-1/gatk-package-<IP_ADDRESS>-local.jar FilterMutectCalls --reference /shared/pipeline-user/bcbio/genomes/Hsapiens/hg38/seq/hg38.fa --variant /shared/pipeline-user/test_data/cll_5/work/bcbiotx/tmpjgip15hg/CLL006_tumor-chr14_GL000009v2_random_0_122919-raw.vcf.gz --output /shared/pipeline-user/test_data/cll_5/work/bcbiotx/tmpjgip15hg/CLL006_tumor-chr14_GL000009v2_random_0_122919-raw-filt.vcf.gz

Warren;
Thanks much for this report and apologies about the issue. This looks related to #2832 and we were able to reproduce when the MuTect2 associated .stats file has 0 callable reads. The latest development has a workaround which avoid this by flooring this stat at 1. It also leaves the intermediate files in the work directory (instead of transactional directory) to make it easier to debug if it still fails. If you still have issues after updating please share the input *.vcf.gz and *.vcf.gz.stats files to FilterMutectCalls and we can investigate more. Thanks again and hope this gets your analysis done.

Much appreciated @chapmanb and @roryk for your work on this! Run completed with no problems!


ZIO 2 support

Web socket tests are temporarily disabled as sttp does not support ZIO 2.

Codecov Report

Merging #809 (548ca78) into main (2f0eb65) will decrease coverage by 1.80%.
The diff coverage is 44.44%.

@@            Coverage Diff             @@
##             main     #809      +/-   ##
==========================================
- Coverage   52.01%   50.21%   -1.81%
==========================================
  Files          69       69
  Lines        2082     2091       +9
  Branches       65       60       -5
==========================================
- Hits         1083     1050      -33
- Misses        999     1041      +42

Impacted Files
Coverage Δ

zio-http/src/main/scala/zhttp/http/Cookie.scala
68.22% <ø> (ø)

zio-http/src/main/scala/zhttp/http/Response.scala
68.96% <0.00%> (-10.35%)
:arrow_down:

.../scala/zhttp/http/headers/HeaderConstructors.scala
20.48% <ø> (ø)

...main/scala/zhttp/http/headers/HeaderModifier.scala
11.76% <ø> (ø)

...io-http/src/main/scala/zhttp/service/Handler.scala
43.75% <ø> (ø)

...la/zhttp/service/client/ClientInboundHandler.scala
71.42% <0.00%> (ø)

...io-http/src/main/scala/zhttp/service/package.scala
100.00% <ø> (ø)

...ala/zhttp/service/server/ServerSocketHandler.scala
0.00% <0.00%> (-30.77%)
:arrow_down:

...o-http/src/main/scala/zhttp/socket/SocketApp.scala
0.00% <0.00%> (-26.48%)
:arrow_down:

...p/src/main/scala/zhttp/socket/SocketProtocol.scala
0.00% <ø> (-26.09%)
:arrow_down:

... and 19 more

Continue to review full report at Codecov.

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

I think the benchmarks are expected to not pass, but please let me know if I'm missing something there (i.e. a generalization that would let them pass with a non-main branch).

I think the benchmarks are expected to not pass, but please let me know if I'm missing something there (i.e. a generalization that would let them pass with a non-main branch).

Yes benchmarks fail on forked PR please ignore https://github.com/dream11/zio-http/issues/619

@jdegoes Thanks!
We can merge this PR and make sure it's updated with every change in the main branch. The websocket client work is being developed in #794 and should be out soon so we won't need to have sttp dependency.
Would you require a maven release also? The challenge that I see could be with versioning since ZIO http is still in RC.

@tusharmath Yes, I need a Maven release, and it will help the ecosystem as well to have something available for testing.
This is my first PR (based on @kitlangton and @adamfraser's work), but expect many more to come!

I would suggest for versioning we do: ZIO HTTP 2.0-RC. So there will exist the ZIO HTTP 1.x line, and the ZIO HTTP 2.x line. Obviously folks will continue using 1.x for around 6 months but the future will be 2.x


call packet.GetSequence() rather than passing the func as argument

Description
closes: #XXXX

Before we can merge this PR, please make sure that all the following items have been
checked off. If any of the checklist items are not applicable, please leave them but
write a little note why.

[x] Targeted PR against correct branch (see CONTRIBUTING.md)
[ ] Linked to Github issue with discussion and accepted design OR link to spec that describes this work.
[ ] Code follows the module structure standards.
[ ] Wrote unit and integration tests
[ ] Updated relevant documentation (docs/) or specification (x/<module>/spec/)
[ ] Added relevant godoc comments.
[ ] Added a relevant changelog entry to the Unreleased section in CHANGELOG.md
[ ] Re-reviewed Files changed in the Github PR explorer
[x] Review Codecov Report in the comment section below once CI passes

I need to add the changelog.

Codecov Report

Merging #1130 (825bba6) into main (f0b94df) will increase coverage by 0.03%.
The diff coverage is 83.33%.

@@            Coverage Diff             @@
##             main    #1130      +/-   ##
==========================================
+ Coverage   79.76%   79.80%   +0.03%
==========================================
  Files         151      151
  Lines       10902    10907       +5
==========================================
+ Hits         8696     8704       +8
+ Misses       1780     1778       -2
+ Partials      426      425       -1

Impacted Files
Coverage Δ

modules/apps/27-interchain-accounts/module.go
55.12% <75.00%> (+1.79%)
:arrow_up:

modules/apps/transfer/keeper/relay.go
88.15% <100.00%> (+1.13%)
:arrow_up:

modules/core/04-channel/keeper/packet.go
95.79% <100.00%> (ø)


nm: Support backend specific configuration

Introducing backend specific configuration allowing user to define
specific settings in nmstate schema.
The get_json_value_difference() has been modified to accept
stringlized boolean or integer.
Add support of these NM configures:
* connection.id
* connection.uuid
* ipv4.may-fail
* ipv6.may-fail
Example yaml:
---
interfaces:
  - name: eth1
    type: ethernet
    backend-specific:
      networkmanager:
        connection.id: WAN
        ipv4.may-fail: false
    ipv4:
      enabled: true
      dhcp: true

Unit test case included to check get_json_value_difference().
Integration test cased included to test NM specific settings, one of
test case is marked as tier 1 due as it is required by openshift
machine-config-operator1.

Maybe we can simplify the syntax by just passing directly the attributes that are unknown so we have
---
interfaces:
  - name: eth1
    type: ethernet
    ipv4:
      may-fail: no
      enabled: true
      dhcp: true
    connection:
       id: WAN

If they are not part of the schema the are passed to the backend directly, so there is no need for explicit backend stuff at the interface.

This config will not be serialized and hence not been verified, we are
providing best effort for them.

Why it cannot be serialized and checked ?

New patch uploaded. The backend specific setting will be verified also now.

@cathay4t it allow to pass other flags that are not the ones on the PR description ? the idea is to not limit it.

@qinqon The dbus interface of NetworkManger require property type(array, u32, i32, i64,u64, bool), so we cannot allow arbitrary properties. I can expand more if you need anything else.

We decided to take another approach to solve this ipv4.may-fail opton of NM.


[V1.1] added delete multiple persons feature

Coverage increased (+0.1%) to 92.293% when pulling 1eecd0d522641e4d978fe89d85056f07e1ed762e on aziziazfar:v1.1_DeleteMultiplePersons into 6cd5adc0931f164d002f7519c68da91dc11420a3 on CS2103AUG2017-T15-B4:master.

Coverage increased (+0.1%) to 92.308% when pulling 85689624b23148d644e754dc4d023b8c59311322 on aziziazfar:v1.1_DeleteMultiplePersons into 6cd5adc0931f164d002f7519c68da91dc11420a3 on CS2103AUG2017-T15-B4:master.


Use the "withFileTypes" options with fs.readdir().

For #14983.

[x] Pull request represents a single change (i.e. not fixing disparate/unrelated things in a single PR).
[x] Title summarizes what is changing.
~[ ] Has a news entry file (remember to thank yourself!).~
[x] Appropriate comments and documentation strings in the code.
[x] Has sufficient logging.
~[ ] Has telemetry for enhancements.~
~[ ] Unit tests & system/integration tests are added/updated.~
~[ ] Test plan is updated as appropriate.~
~[ ] package-lock.json has been regenerated by running npm install (if dependencies have changed).~
~[ ] The wiki is updated with any design decisions/details.~

There aren't any tests already for findInterpretersInDir(), but I don't mind adding some. 😄

Codecov Report

Merging #14994 (6eb5fde) into main (dac8669) will increase coverage by 0%.
The diff coverage is 35%.

@@           Coverage Diff           @@
##            main   #14994    +/-   ##
=======================================
  Coverage     65%      65%
=======================================
  Files        557      560     +3
  Lines      26215    26358   +143
  Branches    3727     3745    +18
=======================================
+ Hits       17060    17160   +100
- Misses      8459     8501    +42
- Partials     696      697     +1

Impacted Files
Coverage Δ

src/client/common/utils/text.ts
49% <0%> (-2%)
:arrow_down:

...rc/client/pythonEnvironments/common/commonUtils.ts
52% <33%> (-26%)
:arrow_down:

.../pythonEnvironments/common/externalDependencies.ts
61% <100%> (-3%)
:arrow_down:

src/client/tensorBoard/helpers.ts
77% <0%> (-6%)
:arrow_down:

src/client/interpreter/activation/service.ts
76% <0%> (-3%)
:arrow_down:

src/client/common/installer/productInstaller.ts
43% <0%> (-1%)
:arrow_down:

src/client/common/utils/decorators.ts
78% <0%> (-1%)
:arrow_down:

src/client/linters/bandit.ts
46% <0%> (ø)

src/client/telemetry/index.ts
76% <0%> (ø)

... and 12 more

Codecov Report

Merging #14994 (6eb5fde) into main (dac8669) will increase coverage by 0%.
The diff coverage is 35%.

@@           Coverage Diff           @@
##            main   #14994    +/-   ##
=======================================
  Coverage     65%      65%
=======================================
  Files        557      560     +3
  Lines      26215    26358   +143
  Branches    3727     3745    +18
=======================================
+ Hits       17060    17160   +100
- Misses      8459     8501    +42
- Partials     696      697     +1

Impacted Files
Coverage Δ

src/client/common/utils/text.ts
49% <0%> (-2%)
:arrow_down:

...rc/client/pythonEnvironments/common/commonUtils.ts
52% <33%> (-26%)
:arrow_down:

.../pythonEnvironments/common/externalDependencies.ts
61% <100%> (-3%)
:arrow_down:

src/client/tensorBoard/helpers.ts
77% <0%> (-6%)
:arrow_down:

src/client/interpreter/activation/service.ts
76% <0%> (-3%)
:arrow_down:

src/client/common/installer/productInstaller.ts
43% <0%> (-1%)
:arrow_down:

src/client/common/utils/decorators.ts
78% <0%> (-1%)
:arrow_down:

src/client/linters/bandit.ts
46% <0%> (ø)

src/client/telemetry/index.ts
76% <0%> (ø)

... and 12 more


Run npm audit fix

Codecov Report

Merging #511 (36e2a28) into master (6272f87) will not change coverage.
The diff coverage is n/a.

@@            Coverage Diff            @@
##            master      #511   +/-   ##
=========================================
  Coverage   100.00%   100.00%
=========================================
  Files            1         1
  Lines           11        11
  Branches         2         3    +1
=========================================
  Hits            11        11

Continue to review full report at Codecov.

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


frontend app not working

Hi, I like your repo and I'd like to contribute & test pykoi.
I've installed pykoi, conda, and git repo and I've got some problems with running frontend app
I assume it's the matter of the Node.js version and I'd like to know which version is compatible with frontend Node
Thank you

Ty!

Close the ticket.

issue should be resolved now.


Adding the Footer

Adding the Footer of Contact Us page and Important Links sections.

Please assign this to me


After app refresh it got not updated bundle (cache?)

Environment
MAC OS 10.14.6
"dependencies": {
    "react": "16.9.0",
    "react-native": "0.61.5"
  },
  "devDependencies": {
    "@babel/core": "^7.8.4",
    "@babel/runtime": "^7.8.4",
    "@haul-bundler/babel-preset-react-native": "^0.16.0",
<EMAIL_ADDRESS>"^0.17.0",
    "@haul-bundler/cli": "^0.17.0",
    "@react-native-community/eslint-config": "^0.0.7",
    "babel-jest": "^25.1.0",
    "eslint": "^6.8.0",
    "jest": "^25.1.0",
    "metro-react-native-babel-preset": "^0.58.0",
    "react-test-renderer": "16.9.0"
  },

module.exports = {
  presets: ['module:@haul-bundler/babel-preset-react-native'],
};

import {withPolyfills, makeConfig} from<EMAIL_ADDRESS>
export default makeConfig({
  bundles: {
    index: {
      entry: withPolyfills('./index'),
    },
  },
});

Description
After launching app, changing code and refreshing it in simulator (cmd + r), nothing happens.
Looks like bundler always sends an initial bundle, and do not updating it.
If i kill bundle process and re-launch it, i will see an updated code.
Reproducible Demo
I have faced this issue with completely new project.

do react-native init App
install "haul" according to "Getting started" documentation
change App.js
press refresh

==================================

open simulator

change code

press refresh

Nothing...

kill process

Repeat

Yup, something is wrong. It looks like it's not watching for changes.

@zamotany Any chance you might be able to point me in the right direction so that I could try to figure out the issue?

@zamotany, hi again!
Is there some workaround to use haul right now with react 61.5?
Looks like haul v16 does not work with it, so....
Can you suggest something how to work, till it is not fixed? :D

@jgornick I suggest first to try downgrading to 0.15.0. There was huge dependency update, which might have broken it.
When I was testing it myself, it looked like the webpack wasn't picking up the changes to the file. Compiler status should changes from idle -> running -> idle but it never did. You can try adding some console logs here to see if the event was emitted from the compiler: https://github.com/callstack/haul/blob/master/packages/haul-core/src/server/Server.ts#L71 - it will be emitted initially for initial compilation and should for the rebuild as well. You can add console log here as well: https://github.com/callstack/haul/blob/master/packages/haul-core-legacy/src/compiler/worker/runWebpackCompiler.js#L198

This looks like a minor issue, but the dev process without reload is a real pain :c

The problem was solved after creating custom babel config according to the recipe.
Now after saving file haul recompiles bundle, and after app refresh you see the changes without killing/reloading haul process.
@zamotany, @jgornick, i assume that the problem lies in default config.module.rules,
hope this will help in investigation.
At least we found workaround to develop with haul without a pain
export default makeConfig({
  bundles: {
    index: {
      entry: withPolyfills('./index.ts'),
      transform({ config }) {
        config.module.rules = [
          {
            test: /\.tsx?$/,
            exclude: '/node_modules/',
            use: [
              {
                loader: 'babel-loader',
              },
              {
                loader: 'ts-loader',
              }
            ]
          },
          ...config.module.rules,
        ];
      },
    },
  },
});

Closing this issue. We've confirmed that this is no longer happening (at least with the default config).


Working with non-stringy data

Forgive my ignorance... I'm applying this library with React and I really don't see a way to have non-stringy content in a message, but perhaps I've overlooked something (other than splitting a message into multiple pieces, which isn't very manageable/flexible).
Consider perhaps being able to do something like, using $$ to keep the example simple ( is an XML-like primitive exposed by JSX):
$$('Hello {countryName}!', {
  countryName: {$$('countryForLanguage')}
});
=> ['Hello ', USA, '!']

Or perhaps something more flexible:
$$('Hello {countryFunc, call, {USA}}!', {
  countryFunc: name => {name}
});
=> ['Hello ', USA, '!']

$$('Hello {countryFunc, call, {USA}, {UK}}!', {
  countryFunc: (name1, name2) => {name1} & {name2}
});
=> ['Hello ', USA & UK, '!']

I'm currently working on a post-processing tool for JSX to automatically extract and transform JsxText tokens into Intl messages and trying to find a way to allow using JSX elements as the substitution values so an example like :
const foo = Hello, {user.name}

Would get translated into:
const foo = { i18n("Hello, {exp_543}", {exp_543: {user.name}}) }

As was mentioned above, this wouldn't work because all arguments are essentially stringified so the example would print Hello, [Object object].
This would work, though, if there was an API to return an array of the formatted contents (strings, numbers or placeholders) before they all get stringified and joined into a single string. So the example would result in ["Hello, ", {type: "strong", props: {children: "Name"}}] and we could let React take care of converting that to HTML. This way there's no XSS danger and I think the API would be generally nicer to use.

@guncha The React elements can be trivially traversed and serialized to whatever format you prefer, so I would suggest that you write this serialization method yourself.

@guncha That's very similar what I'm doing in jsLingui babel plugins. Feel free to take a look at test cases.
I think it should be possible to create custom plugin which does similar transformation, but ends up with react-intl syntax.

@tricoder42, thanks for the links - I'm glad someone else has the same idea.
@syranide, can React elements be serialized though? How would you serialize an onClick handler? And even if they could, would I then have to parse the resulting string to find the React elements and reconstitute them? Seems like a very roundabout, not to mention expensive, way to achieve the same thing.
Anyway, I briefly looked at the implementation of the _format method on the MessageFormat class and it basically iterates over the parsed pattern and concatenates the parts to the result string. It could just as easily just push the parts into an array and return that.
Then again, after seeing how much intl-messageformat does at runtime to parse and compile every single message that's shown to the user, I'm thinking there has to be a better way - i.e., do all that work at compile time.

@guncha I'll answer your questions if you don't mind, because I've been dealing with this stuff.

can React elements be serialized though? How would you serialize an onClick handler?

I'm extracting only children of react elements and leaving elements itself in the code. It looks like this:
// Original:
<Trans>Read more.</Trans>

// After transformation:
<Trans id="Read <0>more.</0>" components={[]}>

The id is final msgId which is extracted to message catalogs.
Advantages: a) you don't have to update messages and translations after you change element attributes, b) you can use both built-in and custom elements and c) you extract whole phrase in one piece.
Disadvantages: a) you need to cycle through components in runtime and render them, b) it might be confusing to loose element name (although that could be easily fixed).

Then again, after seeing how much intl-messageformat does at runtime to parse and compile every single message that's shown to the user, I'm thinking there has to be a better way - i.e., do all that work at compile time.

Indeed, message can be parsed and compiled into pure JS function at compile time. The main benefit isn't performance, but bundle size because MessageFormat parser is a huge dependency.
I'm compiling message in lingui-cli/api/compile.js. It might need a bit of modification because I'm using messageformat-parser instead of intl-messageformat, but I think the resulting output should be the same because both libs work with Intl MessageFormat.

Thanks a lot for explaining your solution, @tricoder42. I really like the usability of the Hello <0>world</0> tags from the perspective of developers and translators. And yes, the re-parsing of the translated string to replace the elements is not great, but this could be addressed by extending the messageformat parser and formatter to handle it. Not sure if my work would approve of using such experiments in production, but it would be an interesting project 😄

For anyone interested, I went ahead and forked intl-messageformat-parser and intl-messageformat to add support for tags as was discussed above. In addition, it's also possible to use object arguments (React elements) for the substitutions.
new MessageFormat("{user} made <0>{count, plural, =1 {a comment} other {a few comments}}</0>")
    .formatRaw({
        0: content => {content},
        user: <UserAvatar user={user} />,
        count: 2
    })
// the result is equivalent to =>
[<UserAvatar user={user} />, " made ", a few comments]

I opted to use a callback for the tags to make this framework agnostic.  The implementation tends to allocate a few more arrays, but otherwise is comparable performance wise. There's no re-parsing of the interpolated results so there's no XSS risk.


Timezone conversion issue

Hi, i have an issue while converting a giving date or time for a specific timezone, using faker DateTime.
The issue is: it always convert the date for a given timezone, exact one hour prior.
This is my code:
$date = new \DateTime($start_time, new \DateTimeZone('GMT')); //start_time will be db pulled time $date->setTimezone(new \DateTimeZone('EDT'));  $start_time = $date->format('H:i');
Now the $start_time will be one hour earlier than given timezone Eastern Daylight Time(EDT).
Any suggestion?

fixed by #1231


feat: Adding parameter allowed_perc_error to contain statement

Adding the parameter allowed_perc_error

Codecov Report
Attention: Patch coverage is 97.43590% with 1 lines in your changes are missing coverage. Please review.

Project coverage is 88.02%. Comparing base (8fd0987) to head (deac940).
Report is 2 commits behind head on master.

Files
Patch %
Lines

deirokay/statements/builtin/contain.py
97.43%
0 Missing and 1 partial :warning:

:exclamation: Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@            Coverage Diff             @@
##           master      #61      +/-   ##
==========================================
+ Coverage   87.62%   88.02%   +0.39%
==========================================
  Files          35       35
  Lines        1673     1720      +47
  Branches      266      277      +11
==========================================
+ Hits         1466     1514      +48
+ Misses        132      131       -1
  Partials       75       75

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


remove connection-based session handling

also remove method mismatch hook
I confirm that this contribution is made under the terms of the license found in the root directory of this repository's source tree and that I have the authority necessary to make this contribution on behalf of its copyright owner.
@baldersheim please review

thanks


Operator documentation

I stumbled now around half an hour through the docsrc/content folder and I miss the following .fsx files:
https://gusty.github.io/FSharpPlus/reference/fsharpplus-operators.html
And all its subfiles, such as: https://gusty.github.io/FSharpPlus/reference/fsharpplus-operators-seq.html
Any idea, where they are?

I just realized some days ago that there is a mess in the docs, because it doesn't delete the old docs.
So old docs are still there, although not linked anymore form the home.
I think the solution is as easy as drop the gh-pages branch and create it again from scratch.

I did a doc cleanup. Those files don't make noise anymore.

Nice 😄

Thanks ^-^


Brian Childress - New Completion for step 2 Carbon Tutorial

I had to install Yarn because the first time I pushed to the original it failed the ci-check and wouldn't allow any code updates to go through, they were still on my local. I installed yarn and re-pushed the changes should be there now.
@josefaidt

🙌 there it is! Looks good, Brian! Keep it up


Glitches in v7

The list of features after the incantation in a notebook:
Features are given as underlined links. Underlining should be suppressed.
Features are not properly linked to their docs. This is a bug in _featuresPerModule, easy to fix. The wrong line is if mLoc == baseLoc else, line 782. It should be if mId == (app.org, app.repo, app.relative).
Various typos in the docs and the new share tutorial.

Done


Implemented a function that let's you call a function only once even across restarts

added a utils directory with a utils.py. Within I implmented callOnce(func).
When a function is passed to it, it will only execute it if a function with that name has never been executed before.
The benifit is that if your code need to set something up you can just put that in a function (foo()) and you can put callOnce(foo) in your script. When your PR is merged this setup function will be called. When the bot restarts callOnce(foo) will not execute foo() again. Your setup is done only the first time around.
If you need to set up directories or download packages, you can put it into a function and make a callOnce() call at the beginning of your script. If the function has been called before (during the current execution or any previous run) it won't be called again.

Well, apparently @chaosbot seems to think it'll work just fine.

It reads the file into the set and at the end it overwrites the file by dumping the set into it. Pretty inefficient, but it should work.

@hank-der-hafenarbeiter Yeah, but "the file" is in source control. If the code that deploys new versions of the bot is doing its job properly, the contents of that file will be reset to [""] every time new code gets deployed (because that's what the master branch of the repository says that file is supposed to contain).


Can not start music from home assistants own media

What version of Music Assistant has the issue?
2022.8.4
The problem
It has been an issue before, but now  i can not start music (from spotify via music assistant) from home assistant own media browser.
How to reproduce
all the time
Relevant log output
No response
Additional information
No response
What version of Home Assistant Core are your running
2022.8.6
What type of installation are you running?
Home Assistant OS
On what type of hardware are you running?
Raspberry Pi

The same problem for me. 2022.8.5

I assume you mean MUSIC ASSISTANT>>BROWSE>>SPOTIFY>>ALBUM/ARTIST/TRACKS/PLAYLIST ??
If so, that works fine for me. You need to provide more info. Exactly what you are trying to do, confirm you are using Spotify Premium, look for errors in the logs etc...

The problem is when i use Home Assistants own Media browser and select Music Assistant it wont start the music
i have the premium

Any errors in the logs? I just went to HA MEDIA>>MUSIC ASSISTANT>>PLAYLISTS and selected a Spotify playlist and it worked fine to a Google Home speaker. Can you try that?

Logger: homeassistant.components.websocket_api.http.connection
Source: custom_components/mass/media_source.py:118
Integration: Home Assistant WebSocket API (documentation, issues)
First occurred: 14.41.16 (1 occurrences)
Last logged: 14.41.16
[547825131504] 'NoneType' object has no attribute 'url'
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/components/websocket_api/commands.py", line 199, in handle_call_service
await hass.services.async_call(
File "/usr/src/homeassistant/homeassistant/core.py", line 1713, in async_call
task.result()
File "/usr/src/homeassistant/homeassistant/core.py", line 1750, in _execute_service
await cast(Callable[[ServiceCall], Awaitable[None]], handler.job.target)(
File "/usr/src/homeassistant/homeassistant/helpers/entity_component.py", line 204, in handle_service
await service.entity_service_call(
File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 676, in entity_service_call
future.result()  # pop exception if have
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 930, in async_request_call
await coro
File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 713, in _handle_entity_call
await result
File "/usr/src/homeassistant/homeassistant/components/cast/media_player.py", line 628, in async_play_media
sourced_media = await media_source.async_resolve_media(
File "/usr/src/homeassistant/homeassistant/components/media_source/init.py", line 146, in async_resolve_media
return await item.async_resolve()
File "/usr/src/homeassistant/homeassistant/components/media_source/models.py", line 90, in async_resolve
return await self.async_media_source().async_resolve_media(self)
File "/config/custom_components/mass/media_source.py", line 118, in async_resolve_media
return PlayMedia(player.active_queue.stream.url, f"audio/{content_type}")
AttributeError: 'NoneType' object has no attribute 'url'

I go to MEDIA, MUSIC ASSISTANT AND MY PLAYLIST then to a Google Chrome cast audio and this error pops up

Same problem :(

OK so I understand a playlist or a direct Spotify track results in the above error. What if you try and play a local music file (if you have one)

Local files works fine

Ok will have to wait and see what @marcelveldt thinks

As the error indicates a url issue you could also check your internal IP. Go to Settings --> System --> Network --> Home Assistant URL --> Local network (set to automatic or use your internal HA IP). If it is automatic change is to http://your.ip:8123

I have tried that now, and stil same problem :(

I’m running out of ideas. Have you tried disabling Spotify in the MA config and reloading the integration, wait for all the Spotify data to disappear and then re-adding it?

Have not tried that. I Will try later :)

Did not work :(

Now it suddenly works 😱

Keep testing it and see if it is all good. If not please continue to try and work out what is causing the issue.

I seems to work now, the only thing i noticed is, if i activate shuffle, then it start random playlists, when i select a specific playlist 🤷

You shuffle the queue not the playlist. If there are existing tracks in the queue then your selected playlist will be shuffled in with those tracks.

Just checking if this is now resolved?


Formatting "if statement with delete and comma" is not idempotent

I have been exploring using esformatter with minified JS and ran into an issue with reformatting already formatted content. I noticed that esformatter does not maintain the same indentation but uses a new one. The following code toggles between 2 indentations when esformatter formats it:
Gist: https://gist.github.com/twolfson/e3433283b0f37ef36854
var obj;
if (
  delete obj.hello
  , 'world') {
  // more code
}

var obj;
if (
delete obj.hello
  , 'world') {
  // more code
}

now it should work as expected! sorry for the huge delay. will release a new version soon including this fix.

Glad to see it patched eventually :tada:

I have run the latest esformatter against the minified script. Everything is consistent except for 1 line between the first and second run. Everything is consistent after the second and third rerun which is great. I will open an issue for the bug. Thanks again for the fix!


Error MSB4019 with node-gyp rebuild

After setting up my Windows 10 machine successfully according to the instructions in 'Setup your machine' I followed tutorial 1 but got the following error with node-gyp rebuild for the buffer-util and utf-validate modules:
error MSB4019: the imported project C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.Cpp.Default.props was not found
According to https://github.com/Microsoft/nodejs-guidelines/blob/master/windows-environment.md this occurs when older versions of Visual Studio or C++ Build tools were already installed (which was the case on my machine). The solution was to set the environment variable VCTargetsPath to C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140 (or a similar path).
Perhaps this could be added to the 'Known Issues' Wiki page.

Known issue page updated. Thanks!


Add endpoint to simulate market order liquidity

Add an endpoint that if provided order details will return how many units can be executed based on the current order book state.

@LCyson since we don't have parallelism yet, there must be an ordering between contract A and B. If A runs first, it will place the order before B runs. That placed order will cause this liquidity check to return 0 when B runs


StartTrace and ContinueRemoteTrace

This PR adds two new functions to the trace package that make it possible to initiate traces from code not running within a service:

StartTrace creates a new client trace and initializes the context so that it gets propagated to remote services when requests are made using a tracing HTTP or gRPC client.
ContinueRemoteTrace behaves similarly to StartTrace but accepts a parent trace ID as argument and creates a server side trace . This makes it possible to continue traces asynchronously (for example in an adapter reading traced messages from a queueing system).

Codecov Report

Merging #95 (2cdee58) into main (8fddf36) will decrease coverage by 0.29%.
The diff coverage is 86.04%.

@@            Coverage Diff             @@
##             main      #95      +/-   ##
==========================================
- Coverage   92.93%   92.64%   -0.30%
==========================================
  Files          28       28
  Lines        1303     1333      +30
==========================================
+ Hits         1211     1235      +24
- Misses         67       71       +4
- Partials       25       27       +2

Flag
Coverage Δ

micro
92.64% <86.04%> (-0.30%)
:arrow_down:

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

Impacted Files
Coverage Δ

trace/span.go
95.04% <83.78%> (-4.96%)
:arrow_down:

trace/grpc.go
90.24% <100.00%> (-0.46%)
:arrow_down:

trace/http.go
88.57% <100.00%> (-0.62%)
:arrow_down:

trace/log.go
100.00% <100.00%> (ø)

Continue to review full report at Codecov.

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


HAML templates rendered as HTML via ui-router.

I'm trying to get my app ready for deployment so I'm running some tests with  rails s -e production and now I've hit an annoying problem. I use Angular as my JS Framework and I have this as my home state, and I've put my _search.html.haml file in the public/templates folder
.config([
  '$stateProvider',
  '$urlRouterProvider',
  function($stateProvider, $urlRouterProvider) {

  $urlRouterProvider.otherwise('home');

  $stateProvider
    .state('home', {
      url: '',
      templateUrl: 'templates/_search.html.haml',
      controller: 'searchCtrl'
    })
  }
])

When I visit my homepage the template does get rendered but the output is HTML. My views/layouts/application.html.haml is also a HAML file but that gets redered as a HAML file and works as expected.
Also when I put this in my layouts/application.html.haml
= render :partial => "layouts/search"

And put the _search.html.haml template file in the layouts folder the template gets rendered as HAML.
So it looks like when a template is being called through a Angular state it gets rendered as HTML, while when it's called through a HAML action it gets rendered as HAML.
Any ideas why this is happening?

uh this sounds like an implementation problem with how you are rendering things. Should be asked on stackoverflow.
Why are you trying to deliver haml files to the front end though and not the html?


ROX-19233: Fix verify connections from external sources (WIP)

Description
A detailed explanation of the changes in your PR.
Feel free to remove this section if it is overkill for your PR, and the title of your PR is sufficiently descriptive.
Checklist

[ ] Investigated and inspected CI test results
[ ] Unit test and regression tests added
[ ] Evaluated and added CHANGELOG entry if required
[ ] Determined and documented upgrade steps
[ ] Documented user facing changes (create PR based on openshift/openshift-docs and merge into rhacs-docs)

If any of these don't apply, please comment below.
Testing Performed
Here I tell how I validated my change
TODO(replace-me)
Use this space to explain how you validated that your change functions exactly how you expect it.
Feel free to attach JSON snippets, curl commands, screenshots, etc. Apply a simple benchmark: would the information you
provided convince any reviewer or any external reader that you did enough to validate your change.
It is acceptable to assume trust and keep this section light, e.g. as a bullet-point list.
It is acceptable to skip testing in cases when CI is sufficient, or it's a markdown or code comment change only.
It is also acceptable to skip testing for changes that are too taxing to test before merging. In such case you are
responsible for the change after it gets merged which includes reverting, fixing, etc. Make sure you validate the change
ASAP after it gets merged or explain in PR when the validation will be performed.
Explain here why you skipped testing in case you did so.
Have you created automated tests for your change? Explain here which validation activities you did manually and why so.
Reminder for reviewers
In addition to reviewing code here, reviewers must also review testing and request further testing in case the
performed one does not seem sufficient. As a reviewer, you must not approve the change until you understand the
performed testing and you are satisfied with it.

/test all

/test ?

/test ocp-4-10-qa-e2e-tests
/test ocp-4-12-qa-e2e-tests
/test ocp-4-13-qa-e2e-tests

/test ocp-4-10-qa-e2e-tests
/test ocp-4-13-qa-e2e-tests

/test ocp-4-10-qa-e2e-tests
/test ocp-4-13-qa-e2e-tests

/test ocp-4-10-qa-e2e-tests
/test ocp-4-13-qa-e2e-tests

/test ocp-4-10-qa-e2e-tests
/test ocp-4-13-qa-e2e-tests

4be408e was not flaking

/test ocp-4-13-qa-e2e-tests

d7c783b also not flaking

/test ocp-4-13-qa-e2e-tests

/test ocp-4-13-qa-e2e-tests

There is no cluster that can be used for testing this:
WARN[[20](https://prow.ci.openshift.org/view/gs/origin-ci-test/pr-logs/pull/stackrox_stackrox/7600/pull-ci-stackrox-stackrox-master-ocp-4-13-qa-e2e-tests/1696802013318221824#1:build-log.txt%3A20)23-08-30T09:42:40Z] Found 1 conditions for ClusterClaim:
  *[2023-08-30T08:42:40Z]NoClusters: No clusters in pool are ready to be claimed

@vjwilson I am adding you to this PR as FYI

/test ocp-4-10-qa-e2e-tests
/test ocp-4-13-qa-e2e-tests

/test ocp-4-10-qa-e2e-tests
/test ocp-4-13-qa-e2e-tests

/test ocp-4-10-qa-e2e-tests
/test ocp-4-13-qa-e2e-tests

/test ocp-4-10-qa-e2e-tests
/test ocp-4-13-qa-e2e-tests

/retest

/test ocp-4-10-qa-e2e-tests
/test ocp-4-13-qa-e2e-tests

/test ocp-4-10-qa-e2e-tests
/test ocp-4-13-qa-e2e-tests

/test ocp-4-10-qa-e2e-tests
/test ocp-4-13-qa-e2e-tests

/test ocp-4-10-qa-e2e-tests
/test ocp-4-13-qa-e2e-tests

/test ocp-4-10-qa-e2e-tests

/test ocp-4-13-qa-e2e-tests

Last failure unrelated. Trying again to get 5 successful executions
/test ocp-4-10-qa-e2e-tests

Last run passed. Let's run this again
/test ocp-4-10-qa-e2e-tests


Add HTML report tool

Fixes  #312
Shows the HTML report in a new window/tab
The icon is pretty basic (but from the fugue set) alternative suggestions appreciated.
Also havnt set any status field as I dont think it needs one - thoughts?
The tool isnt included by default, and there are no UI tests. Maybe the tutorial could cover adding this to one of the panels?
Note that the report wont look right until this change is merged:
https://github.com/zaproxy/zaproxy/pull/5164

@kingthorin I actually asked for @dscrobonia's review on this - I'd like to have his input on it before its merged :/

Uh oh, crud sry!

No worries, I'll make it more obvious next time :)
@dscrobonia - looks like undoing this could be tricky with the branch protections we now have :/ OK to review the merged code? Happy to address any concerns you have..

I guess I can't "roll back" but I could do a reversing PR if necessary. Sorry guys!

No need to roll it back at this point. Simple enough.


Benchmark.realtime_block's ensure can be interrupted by a MiqQueue TimeoutError

It looks like it's possible for the ensure block in Benchmark.realtime_block to be interrupted by a TimeoutError from the queue, causing the timing results to never get reset:
grep -E "#31387" log/evm.log | grep -o "total_time=>[0-9]*\.[0-9]*"
total_time=>3.7621521949768066
total_time=>4.0121684074401855
total_time=>4.326230525970459
total_time=>4.696136236190796
total_time=>9.155161142349243
total_time=>9.155161142349243
total_time=>9.165400743484497
total_time=>9.184295654296875
total_time=>9.196443557739258
total_time=>9.208587408065796
total_time=>9.2324378490448
total_time=>9.241880178451538
total_time=>9.256477355957031
total_time=>9.270721673965454
total_time=>9.284515619277954
total_time=>9.29817533493042
total_time=>9.32113242149353
total_time=>9.343579292297363
total_time=>9.35648775100708
total_time=>10.613795042037964
total_time=>14.181613206863403
total_time=>14.181613206863403
total_time=>14.884168148040771
total_time=>18.260033130645752
...
total_time=>1974.3429281711578
total_time=>1974.3602719306946
total_time=>1974.374357700348
total_time=>1974.3870587348938
total_time=>1974.399513244629
total_time=>1975.1172680854797
total_time=>1979.7663094997406
total_time=>1979.7663094997406
total_time=>1979.7774863243103

This test will sometimes fail:
diff --git a/gems/pending/spec/util/extensions/miq-benchmark_spec.rb b/gems/pending/spec/util/extensions/miq-benchmark_spec.rb
index 63f874a..8db2f82 100644
--- a/gems/pending/spec/util/extensions/miq-benchmark_spec.rb
+++ b/gems/pending/spec/util/extensions/miq-benchmark_spec.rb
@@ -51,6 +51,23 @@ describe Benchmark do
     expect(timings[:test3]).to be_within(0.5).of(500)
   end

+  10_000.times do |i|
+    it "Timeout raising within .realtime_block #{i}" do
+      begin
+        result, timings = Timeout.timeout(0.000000000001) do
+          Benchmark.realtime_block(:test1) do
+            Benchmark.realtime_block(:test2) do
+            end
+            "test"
+          end
+        end
+      rescue TimeoutError
+      end
+
+      expect(Benchmark.in_realtime_block?).to be_falsey
+    end
+  end
+

It's horrible but we can make MiqQueue's rescue of TimeoutError be responsible for clearing the Benchmark thread local variable in case it "may have been" interrupted the ensure block.
I'd rather we not use Timeout.timeout.  😢

cc @Fryguy

:( It is what it is

Saw this again in production, it's annoying.
Wanted to find mitigation and I think I found (ugly) solution: https://github.com/ManageIQ/manageiq-gems-pending/pull/263
There is no global fix, there are other cleanups Timeout can mess...
This might be fixable in Ruby itself, if injecting exception into a thread could wait until it's not handling/propogating another exception.


Consul KV and Vault for SSL certificate storage

This issue is a feature proposal, discussion thread, and progress tracker for said feature.
2. What are you trying to do?
I propose two new storage backends for SSL certificate:

Consul KV
Vault

currently Caddy supports only disk or in-memory storage, both of these are far from ideal in an
environment with hundreds of certificates being served by redundant machines, SaaS businesses are a good example here. It is easy to spam the certificate issuer if each of those machine has its own storage. There are ways to work around this limitation with shared volumes but at the very least it is inconvenient and prone to human errors or inconsistent configuration.
There are also community supported plugins available but they have their own development lifecycle, decisions around feature and behaviour, and usual obligations for the maintainers that come with an open source project.
Native support for these storages will tie previously mentioned loose ends and declare the standards.
Proposed changes
tls block has an undocumented directive storage which lets one change the storage backend. This doc proposes a backwards compatible change to storage directive as follows:
tls {
  storage [name] {
    key value
    ...
  }
}

The content of the block will be a map which will be passed down to the storage backend as it is.
caddytls.Storage interface will be updated to provide a new method:
ValidateConfig(map[string]string) error

which will be called as part of setup to validate the additional configuration provided to storage directive and can raise an error if the configuration is not understood by the storage driver.
caddytls.StorageConstructor will be updated to accept the configuration as second parameter:
type StorageConstructor func(caURL *url.URL, config map[string]string) (Storage, error)

These changes together will provide scaffolding necessary for more complex storage backends than
disk or in-memory.
Consul KV
Consul KV storage backend is the simpler one. Possible configuration options are:

Attribute
Possible Value
Required
Description

Host
valid URL
yes
Consul Host URL including the protocol and port

Prefix
any string
yes
KV path prefix under which the certificates will be stored

Token
any string
no
Consul ACL token with permissions to read and write under prefix

Datacenter
any string
no
Consul datacenter

Auth
tuple (username, password)
no
basic auth credentials for Consul client

TLS
tuple (certificate, key) or trust or off
no
TLS configuration. On by default

AES Key
32 characters long string
no
used to encrypt the contents. contents will be stored in plain text if not provided

All of these values can also be sourced from environment if set under keyspace CADDY_TLS_CONSUL_
Vault
Vault backend is a slight bit more complex than Consul KV. Possible configuration options are:

Attribute
Possible Value
Required
Description

Host
valid URL
yes
Vault Host URL including the protocol and port

Path
any string
yes
Vault backend path under which the certificates will be stored

Auth
tuple (method, argument)
yes
Argument can be omitted if AWS or GCP auth is used

TLS
tuple (certificate, key) or trust or off
no
TLS configuration. On by default

Read only
true or false
no
False by default, set to true if backend does not support writing to it (e.g. PKI)

All of these values can also be sourced from environment if set under keyspace CADDY_TLS_VAULT_
Problems
Following problems with Vault backend are not solved and any idea would be appreciated.

No shared locking mechanism
If token auth is used and Caddy fails to renew the token there is no reasonable course of actions to prevent downtime

If this is something that can add value for Caddy community I am willing to work on it.
If, for any reason, this addition cannot be accepted please feel free to close the issue otherwise I'll appreciate if a maintainer can assign it to me.
Lets discuss.

I recently wrote a consul-loader plugin for caddy.  I would be interested in helping.

Hi, thanks for writing this up; nice proposal.
One thing that I want to finish upgrading in Caddy is its storage API. Right now it interacts with the file system directly but it would be good to abstract that away for any of Caddy's storage needs to enable this. It's partway done, but not all the way. It would be nice if it worked for more than just caddytls.
As for the Caddyfile syntax: nested blocks are not supported, so within the tls directive, the storage configuration will need to be flattened. That, or use a different directive.

Right now it interacts with the file system directly but it would be good to abstract that away for any of Caddy's storage needs to enable this. It's partway done, but not all the way. It would be nice if it worked for more than just caddytls.

@mholt I'll be happy to work on that, but I'm not sure if I understand the problem completely.
Do you mean that any part of Caddy which require storage should use one universal storage abstraction?

Right, I need to go into more detail. Caddy uses disk storage for a few things: right now, mainly managed certificates (and their related metadata) and caching OCSP staples. Plus a few other things but the primary reason for abstracting away the file system is to run Caddy distributed, and that basically means anything in the .caddy folder should go through some sort of interface.
POSIX has a pretty standard interface that we could imitate, but I don't know if it would be difficult to make that work with non-file-systems, like KV stores or networky things. I like how generalizable the POSIX FS interface is, and I want to avoid a very specific interface with methods like "GetSite()" or "ListCertificateFiles()" and stuff like that. Do you think a POSIX-like interface could be satisfied by KV stores, Kubernetes setups, etc?

@mholt In my opinion POSIX specification is unnecessarily complicated for our use case. I think an  interface as simple as
Put(key string, value []byte) error
Get(key string) ([]byte, error)
Delete(key string) error

is adequate.
It will work with any backend, disk backed or remote, doesn't matter.
I'd like to debate it though.

Unfortunately, Caddy requires a little more information, at least, the way things are implemented right now. For example, it scans the list of folders containing ACME CA account information to get the most recently used email address, to use that when negotiating certificates, if no email is provided. We could re-engineer this so that the most recent email used is stored as a KV itself, but keep that kind of thing in mind...
I agree that your interface is much simpler, but it's not sufficient even if we re-engineer a couple of functions that require iterating certain kinds of keys. Some operations will require obtaining a distributed exclusive lock, while others require trying to obtain a lock but doing something else if a lock is already in use by another instance. The current prototype interface implemented in caddytls/storage.go has TryLock(name string) (Waiter, error) and Unlock(name string) error but these don't generalize very well.
Then when a lock is released, all waiters need to be notified...

it scans the list of folders containing ACME CA account information to get the most recently used email address, to use that when negotiating certificates, if no email is provided

@mholt This is a driver specific detail, consumer of the interface shouldn't know about it. so lets add another method to the interface and lets say ACME wraps the storage interface and exposes the storage operations supported by ACME.
type Storage interface {
  Put(key string, value []byte) error
  Get(key string) ([]byte, error)
  Delete(key string) error
  List(prefix string, recurse bool) (map[string][]byte, error)
}

type ACME struct {
  storge Storage
  // ...
}

func (a *ACME) GetEmailAddr() (string, error) {}
func (a *ACME) ListAllCertificates() ([]Cert, error) {}

and same thing for other packages.
Like David Wheeler said — All problems in computer science can be solved by another level of indirection. we wrap Storage in a more specific interface or struct as needed.
Distributed locks are not supported by all storage backends (vault!) so I propose that the the lock mechanism be made into a separate abstraction of its own. This will also allow us to use different storage backend and lock provider (disk and consul, for example). I think an interface like
type Locker interface {
  // Block until the lock is acquired or error out
  Lock(name string) (Waiter, error)

  // Return immediately with or without acquiring the lock, or error out.
  // Waiter will yield immediately If the lock couldn't be acquired.
  TryLock(name string) (Waiter, error)

  Unlock(name string) error
}

Having said all of this, I realise it is a bit of work and refactoring but it will greatly improve the underlying design.

I like where this is going, with the understanding that distributed locking is required no matter what the storage provider backend, so something has to implement it.
So how do you feel about this? Is this something you're willing to help undertake? :D

@mholt sure. I'll be glad to work on it. let me hack something together this weekend and put it up for discussion.
On a side note, would you entertain the possibility to implement first class distributed locking support in Caddy? I have been thinking about it and I believe it shouldn't be hard using go-discover and memberlist

Sounds good to me. I will be happy to review!

On a side note, would you entertain the possibility to implement first class distributed locking support in Caddy? I have been thinking about it and I believe it shouldn't be hard using go-discover and memberlist

That's interesting; I feel like this would probably be a separate implementation? Also, is the discovery mechanism the same as first-class distributed locking support? Or are you saying that you'd want first class service discovery beneath distributed locking.

This will be a separate implementation, yes.

is the discovery mechanism the same as first-class distributed locking support? Or are you saying that you'd want first class service discovery beneath distributed locking.
No. Discovery mechanism will only find other Caddy nodes that are going to share the storage.

Node discovery is only a bit of sugar to make configuration and deployment easier for people.
I'll quickly jot down what's on my mind, please excuse any oversight.
go-discover will discover other Caddy nodes and pass the information to memberlist. Cluster membership and failure detection is managed by memberlist package.
We trade consistency and become a leaderless (AP) cluster. Consistency does not matter as much as availability. In worst case we will end up provisioning more than one certificate but all of them will be valid, the storage will retain the last written certificate.
A node will broadcast the message (lock) when it need the lock, the cluster will vote in favor (grant) or against (deny) the node.
Since we are trading off consistency, a lock is granted if:

Whole cluster granted the lock
Majority granted the lock, minority is in other partition
Minority granted the lock, majority is in other partition
Majority granted the lock, minority denied

Lock is denied if:

Whole cluster denied the lock
Majority denied the lock, minority is in other partition
Majority denied the lock, minority granted
Minority denied the lock, majority is in other partition

Lock are granted with timeout and cannot be renewed. A node holding an expired lock will need to drop it ask for it again.
If a lock is denied then the node can choose to wait in queue for lock or continue with this knowledge.
Lock is released by broadcasting the message (release).
A node which has voted in favor of a lock must deny any subsequent request for the same lock until the lock is released or times out.
With abstraction around lock mechanism this will become another lock provider, people can still choose to utilize other lock providers, such as consul, if they wish.
This is all an idea and I probably missed a huge bunch of corner cases but I can discuss it in detail if it look interesting.

Does the discovery need to be built-in? It seems pretty heavyweight, considering that I think the majority of users won't use it. And it sounds like something separate from just enabling pluggable locking/storage. Can we do the pluggable locking/storage first and separate?

@mholt discovery is actually the lightest and most trivial part in this.
And sure, pluggable storage and locking first and separate. I tore apart the codebase this weekend but didn't much time to work on it, I'll think about discovery and distributed locking when I'm done writing the abstraction.

Not sure if useful but here's another consul implementation https://github.com/pteich/caddy-tlsconsul. I made a Google CDS  implementation that has some, rather naive iirc, locking.

go-discover seems to tie this to cloud providers. What about a non cloud use-case? Multiple caddy instances that "just" want to share the TLS certs?

@miekg the option to provide caddy with the addresses of other nodes is always there, I brought up go-discover because it automates everything.

I'm sorry about lack of communication here, it is a big piece and I only get to work on it over the weekend.

Could you add AWS S3 as well?

Related: with PR #2015, Caddy now supports synchronizing renewals between multiple instances as long as they use the same certificates on disk. In other words, if they mount the $CADDYPATH/acme folder as part of the file system, they will not duplicate renewals and they will safely share the same storage. So, if that is helpful to you, the next release (0.10.11) would be a good time to upgrade.

TLDR: synchronization via shared file system? Like local ext4 or NFSv4?

TLDR: synchronization via shared file system? Like local ext4 or NFSv4?

Yes, the files must be mounted locally as part of the file system. But if the disk is shared (e.g. a NAS) multiple Caddy instances can safely share those certificates.

Since this issue was written, https://github.com/pteich/caddy-tlsconsul has been implemented. @Gufran does this cover your usecases?

The use case no longer exist but I believe https://github.com/pteich/caddy-tlsconsul would've solved it.

I think we can close this then.