Send/Receive: Add BIP21 support

Closes #405.
Currently supported:

[X] Send
[ ] Receive

CC @roeierez
While implementing BIP21 features is fairly straightforward, there are some questions related to the interface which we would like to expose to the user that need some clarification:
Send

Do we need a separate method to send via BIP21 or should we reuse existing methods (specifically send_payment or pay_onchain) and rework their logic?
If we reuse existing methods, how should the interface look like? Here's the main alternatives we thought of:

// Option 1
pub struct PrepareSendRequest {
    pub invoice: Option<String>,
    pub bip21: Option<String>,
}

// Option 2
pub enum PrepareSendRequest {
    Bip21 { bip21: String },
    Bolt11 { bolt11: String },
}

// Option 3
pub struct PrepareSendRequest {
    pub input: String, // Gets parsed by the SDK, which then returns the appropriate output type
}

In either one of the cases, the PrepareSendResponse should look something like:
// Option 1
pub struct PrepareSendResponse {
    pub invoice: Option<String>,
    pub bip21: Option<String>,
}

// Option 2
pub enum PrepareSendResponse {
    Bip21 { bip21: String },
    Bolt11 { bolt11: String },
}

In order to make the output more comprehensible. Like in the request, only one field can be set at once.
Receive

With regards to the interface, same question. New method, or altering receive_payment/receive_onchain's logic?

In case we keep the same method, we thought adding a flag to the input should be enough; something like:

// Option 1
pub struct PrepareReceivePaymentRequest {
    pub payer_amount_sat: u64,
    pub use_bip21: bool,
}

// Option 2 (discouraged)
pub enum PrepareReceivePaymentRequest {
    Bip21 { payer_amount_sat: u64 },
    Bolt11 { payer_amount_sat: u64 },
}

For the inputs, and:
// Option 1
// Note this is *NOT* PrepareReceivePaymentResponse
pub struct ReceivePaymentResponse {
    pub id: String, // Swap id
    pub invoice: String,
    pub bip21: String,
}

// Option 2
pub struct ReceivePaymentResponse {
    pub id: String, // Swap id
    pub invoice: Option<String>,
    pub bip21: Option<String>,
}

// Option 3
pub enum ReceivePaymentResponse {
    Bip21 { bip21: String },
    Bolt11 { bolt11: String },
}

For the outputs, choosing whether we return both the invoice and the bip21 url, or only one of the two.

@hydra-yse I had a chat with @kingonly to understand better the requriement and one of the key goals here is to make it as simple as we can for the devs not requiring them to fully understand specs and protocols.
Here is a suggestion aligned with the above, let me know what you think:
PrepareSendPaymentRequest {
  pub destination: string // didn't find the right name yet but it should get all payment methods (bolt11, bip21, liquid address)
}

PrepareSendPaymentResponse {
  pub parsed_destination: InputType // parsed input  that the sdk is going to pay for (bolt11, liquid address)
  pub fees_sat: u64 // The corresponding fees. If we are going to pay to a liquid address then only the lowball onchain fees.
}

@roeierez Sure I agree, if the goal here is to make this as direct as possible then I agree we should merge all fields into one. Regarding the output, while returning a field InputType is not as direct and comprehensible we assume that the usual case is to just pass the result directly into send_payment, so there shouldn't be any issues there. More advanced users can then still pattern match into the field for more specific use-cases.

@roeierez Sure, if the goal here is to make this as direct as possible then I agree we should merge all fields into one. Regarding the output, while returning a field InputType is not as direct and comprehensible we assume that the usual case is to just pass the result directly into send_payment, so there shouldn't be any issues there. More advanced users can then still pattern match into the field for more specific use-cases. What about receive? Are you still discussing?

I still think on the receive yes. if for receive (with a flag) we return bip21 then the returned fees should be changes as well as we have two use cases. That's the point I am trying to simplify. If we would return liquid address then no issues becaue the payer has only one choice of paying.

@hydra-yse had a discussion with @kingonly and we got something well defined.
For the receive

We should add another optional parameter that will define the receive method (bolt11, bip21) bolt11 is the default.
If user asked for bip21 with X amount then we will put the X amount as the bip21 parameter and in the case we receive to that onchain address we assume no fees on the receiver.

Does it work for you?

Seems to be conflicts


The format of Device Identification Strings

Could you please clarify the format of a device identification string. Is it documented enough to parse it in third-party applications?

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 4d12a22f-cf0a-53e1-e276-ac12ad5e0da9
Version Independent ID: d42e71ea-3561-bbb3-5041-3d69136540fb
Content: Device identification strings - Windows drivers
Content Source: windows-driver-docs-pr/install/device-identification-strings.md
Product: windows-hardware
Technology: windows-devices
GitHub Login: @tedhudek
Microsoft Alias: tedhudek

Hi @AlexKoshulyan,
Thanks for the feedback and apologies for the delay.
Device identification strings should not be parsed.  They are meant only for exact (usually case insensitive) string comparisons and should be treated as opaque strings.


CSV reports to be able to save with specific path/file name

At the moment it looks like extension doesn't support to specify the name for file published in the Azure Devops artifacts.
It looks like follows

<Standard name> <some guid>.csv
There is requirement to have specifi name for every file. Is it possible to provide variable value to fill the name?

HI @martindz I will have a look at it. It is not so easy as you might think because of the retry stage/job mechanism.

We use the approach with Cred Scanner and looking for similar functionality. We run Cred scanner centrally against all projects and repos, later on we provided visualization through Powerbi.

Added the option to specify custom report names


install cask  failed

brew install caskroom/cask/brew-cask
==> Tapping caskroom/cask
Cloning into '/usr/local/Library/Taps/caskroom/homebrew-cask'...
remote: Counting objects: 3203, done.
remote: Compressing objects: 100% (3128/3128), done.
remote: Total 3203 (delta 79), reused 691 (delta 58), pack-reused 0
Receiving objects: 100% (3203/3203), 5.81 MiB | 6.00 KiB/s, done.
Resolving deltas: 100% (79/79), done.
Checking connectivity... done.
Tapped 1 formula (3182 files, 24M)
Error: Cannot write to /usr/local/Cellar

Are you able to install any other Homebrew formulae? If not, you should report this issue on their repo, as it has nothing to do with us.

I'm sorry to reply to the late,I have already installed Homebrew.

I'm sorry to reply to the late,I have already installed Homebrew.

That was not @jawshooah’s question. He was asking if you can install anything else. Run brew install z1, for example, does it succeed? If it does, then the issue isn’t ours, and it very much looks like it isn’t.

1 Run brew uninstall z later, if you do not want it.


There's a very small white gap at bottom for TextInput when using autofill - @rushatgabhane

If you haven’t already, check out our contributing guidelines for onboarding and email<EMAIL_ADDRESS>to request to join our Slack channel!

Action Performed:

Open app
Use autofill on the login screen
Navigate to Settings>Payments>Add Debit card
Use autofill

Expected Result:
Autofill should match the box
Actual Result:
There's a very small white gap at bottom for TextInput when using autofill
There is Discovered while testing this PR #7099
Workaround:
unknown.
Platform:

Where is this issue occurring?

Web
iOS
Android
Desktop App
Mobile Web

Version Number: 1.1.33-0
Reproducible in staging?: Y
Reproducible in production?: Y
Logs: https://stackoverflow.com/c/expensify/questions/4856
Notes/Photos/Videos: Any additional supporting documentation

Upwork job URL: https://www.upwork.com/jobs/~01909f315eb8bc7426
Issue reported by: @rushatgabhane
Slack conversation: https://expensify.slack.com/archives/C01GTK53T8Q/p1642714377248800
View all open jobs on GitHub

Triggered auto assignment to @francoisl (Engineering), see https://stackoverflow.com/c/expensify/questions/4319 for more details.

Triggered auto assignment to @trjExpensify (External), see https://stackoverflow.com/c/expensify/questions/8582 for more details.

Triggered auto assignment to Contributor-plus team member for initial proposal review - @rushatgabhane (Exported)

Triggered auto assignment to @stitesExpensify (Exported), see https://stackoverflow.com/c/expensify/questions/7972 for more details.

I read the issue and contributing guide.
I logged to app(https://new.expensify.com/) to facing issue but there is no option to add debit card for me. And in mobile there is no any options to add payment method. Maybe its about my region.

Therefore, I could not examine it with the inspect tool.
But first thing came to my mind was try to change background color completely with input:-webkit-autofill.
If I can make the gap visible, I believe other ideas will come to my mind. :)

@okansahin I reckon debit card is hidden under a beta. I was able to access it on main though

@okansahin I reckon debit card is hidden under a beta. I was able to access it on main though

Hello,
Web
I read contributing guide and tried to got issue on desktop and mobile but there is no option "Add debit card" in payment settings on https://new.expensify.com . I don't know maybe it's relational with my region. In mobile view of chrome, no any option.

![IMG_CF4235E8FADC-1](https://user-images.githubusercontent.com/1966034/151867251-adc196e7-7977-4d01-98f0-dab1a95c1ae7.jpeg)
The first thing came in my mind is try to change completely change auto fill background with input:-webkit-autofill selector for web.
If I make the problem visible I believe I can produce any other ideas.
If I have an error my flow, please correct me to reproducing the problem.
React Native,
I tried to run the project in simulator. But It gives me missing package error react-native-blob-util, after I added it, then gives me the error on the below image. I know hermes engine is for android  🤔
and after @rushatgabhane's reply I tried on production I react the "Add Bank Card" but there is no gap for my autofill on zipcode, I can't tried the others because I don't have saved card.
And for password on login with autofill,

As a result, more time is required to make the problem visible. I believe that I can easily get used to the project. I am familiar with the tools and methods used in this project.
Thank you

@okansahin as @rushatgabhane mentioned, it's probably a beta issue. Try updating this line to always return true and see if you can see the debit card option on the dev build.
With regards to your iOS build I would recommend reaching out in the private slack room.

Hello,
I run the project. It was my fault with my environment, I was a little hasty. It's okay now.
But I still can't see the problem. Someone can tell me exact system(browser, os etc.) which is this gap is visible. Or Is this issue fixed?
@stitesExpensify Can you please send me invite to Slack? I'm interested and want to fix this.
Safari on iOS Simulator

Safari on MacOS

Chrome on MacOS

Will reply in a bit

@okansahin try the in built autofill on Android for the password page. It is the most easily visible.

Can you please send me invite to Slack? I'm interested and want to fix this.

To join #expensify-open-source, just email<EMAIL_ADDRESS>with the subject Slack Channel Invite and include a link to your Upwork profile.

@okansahin are you planning to submit a proposal for this job, and if so, do you want to then apply for it on Upwork here?

@trjExpensify I reproduce this gap only on android's login screen(it's not reproducible in adding payment card screen) when password is visible. If you confirm that, I will try to find a way. Otherwise could you give me exact version/device which this gap is reproducible?

@okansahin cool, I'll update you on that within 30 mins

it's not reproducible in adding payment card screen

@okansahin I agree.

Thank you @rushatgabhane
I will look up to it, and let you know that I can fix or not.

Hi @okansahin any update here?

Hello @stitesExpensify sorry for delay. I was busy with my other tasks.

it's not reproducible in adding payment card screen

@okansahin I agree. Feel free to submit a proposal for the Android issue.

@rushatgabhane when I reviewed the DOM I detected this gap occurs in Add Debit Card screen too. If you want to reproduce this everytime, please set password input visible before autofill.
The real problem is line-height. BaseTextInput's default line-height is 20, I set it to 25 to seeing this clearly. Somehow android's autofill feature bypasses the line height if secureTextEntry is true. You can see in video below that what I'm talking about.
https://user-images.githubusercontent.com/1966034/154512539-7a246130-3ad1-4a67-8175-6bae66ae2961.mov
I tested this actions in Add Debit Card too, and the results is same.
PROPOSAL
I don't know why coders use lineHeight in their projects but I never use it and I never had a problem while I apply a design to frontend because I don't use lineHeight, the paddings and font size are enough I think. But I might be miss something, I would be happy if someone could teach me otherwise.
My suggestion is bypassing the lineHeight in inputStyles if passwordHidden state is true in BaseTextInput.
Here is a test result without lineHeight property.
https://user-images.githubusercontent.com/1966034/154514893-2808011a-cdd6-46f6-8f7e-7838d294c7da.mov
Thank you

Any review on my proposal? Because I have free time right now and want to seize on time, if there is any trouble. @stitesExpensify @rushatgabhane

The real problem is line-height

@okansahin That makes sense to me, and thanks for the exact repro steps.

My suggestion is bypassing the lineHeight in inputStyles if passwordHidden state is false in BaseTextInput.

That seems like a hacky fix. Why not get rid of lineHeight entirely?

@rushatgabhane Yes! Actually, my suggestion is this. But I didn't suggest it because you could tell me that it will affect so many TextInputs. I can figure out which views could be affect and set it with padding way and test and show all affected TextInputs.

Actually, that might not be a good idea. source - https://github.com/Expensify/App/issues/7541#issuecomment-1049365558

@rushatgabhane So then how about my proposal?

Any update here for @okansahin, @rushatgabhane?
The Upwork job expired, so here's the new one: https://www.upwork.com/jobs/~0176b58cfaaf71ab72

I have checked the upwork job post description..
I can say that i need to know which library this project is using now? And if the styled-component was used, it can be fixed by adjusting the css.
If this input field is using another library something like native-base, material UI, I need to check the Input field component.

So then how about my first proposal?

I don't think we should go ahead with a hack

Hey @vignbenjamin435, we'd want this issue to be fixed without any extra libs. Yes, feel free to post a proposal which uses some css.

Hi Rusat.
thank you for your message.
I agree with your suggestion. I can fix this problem without using any
extra libs
I can fix this problem using css.
On Thu, 3 Mar 2022 at 00:32, Rushat Gabhane @.***>
wrote:

Hey @vignbenjamin435 https://github.com/vignbenjamin435, we'd want this
issue to be fixed without any extra libs. Yes, feel free to post a proposal
which uses some css.
—
Reply to this email directly, view it on GitHub
https://github.com/Expensify/App/issues/7470#issuecomment-1057496106,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AX7T7YWPUZXRH7MINASKLX3U573CTANCNFSM5NFF52EA
.
Triage notifications on the go with GitHub Mobile for iOS
https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675
or Android
https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.
You are receiving this because you were mentioned.Message ID:
@.***>

@vignbenjamin435 alright, excited for your proposal.
Make sure that you read contributing.md
before posting a proposal

Ok. Now i am checking it seriously😊.. After i check, i will let you know.
On Thu, 3 Mar 2022 at 01:05, Rushat Gabhane @.***>
wrote:

@vignbenjamin435 https://github.com/vignbenjamin435 alright, excited
for your proposal.
Make sure that you read contributing.md
https://github.com/Expensify/App/blob/317cce57c2853eed5757b4b842581828a0648fb5/CONTRIBUTING.md
before posting a proposal
—
Reply to this email directly, view it on GitHub
https://github.com/Expensify/App/issues/7470#issuecomment-1057523247,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AX7T7YRJB3HZEURQ7CFQYE3U5762ZANCNFSM5NFF52EA
.
Triage notifications on the go with GitHub Mobile for iOS
https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675
or Android
https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.
You are receiving this because you were mentioned.Message ID:
@.***>

I have checked all documents....Just now i am willing to contribue..
From now on, I am going to work on your project full time.. I am full time
freelancer
On Thu, 3 Mar 2022 at 01:11, Benjamin Vignon @.***>
wrote:

Ok. Now i am checking it seriously😊.. After i check, i will let you know.
On Thu, 3 Mar 2022 at 01:05, Rushat Gabhane @.***>
wrote:

@vignbenjamin435 https://github.com/vignbenjamin435 alright, excited
for your proposal.
Make sure that you read contributing.md
https://github.com/Expensify/App/blob/317cce57c2853eed5757b4b842581828a0648fb5/CONTRIBUTING.md
before posting a proposal
—
Reply to this email directly, view it on GitHub
https://github.com/Expensify/App/issues/7470#issuecomment-1057523247,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AX7T7YRJB3HZEURQ7CFQYE3U5762ZANCNFSM5NFF52EA
.
Triage notifications on the go with GitHub Mobile for iOS
https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675
or Android
https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.
You are receiving this because you were mentioned.Message ID:
@.***>

Do you have any suggestions for me to write an acceptable offer?

@okansahin fixing this using some css would be nice

@okansahin fixing this using some css would be nice

I already do that with CSS. A class which resets lineHeight will be applied to TextInput if it's is password visible secure input. The JS part just a conditional classname.

👋 @stitesExpensify @rushatgabhane, where are we at with the path forward for this issue?

sorry, I don't 100% like any proposals here. Maybe @stitesExpensify has a different opinion

@rushatgabhane How kind proposals do you like 😀 I found the source of the problem which I think was the main issue, and sent a proposal like you said with css only. But you don't like, it's weird.

@okansahin I'm sorry that I didn't communicate with you properly here.
We have many text inputs that can be autofilled. How will you fix it for inputs like debit card. We can't use your proposal for it. Please correct me if I'm wrong :)

@okansahin fixing this using some css would be nice

I already do that with CSS. A class which resets lineHeight will be applied to TextInput if it's password is visible secure input. The JS part is just a conditional classname.

@rushatgabhane I think you didnt read this. As I said before the line height reset class will be applied only for secure inputs in @android. So it's not relational the other inputs.

Sorry if I'm missing something, but as stated in the issue, we also need to fix it for inputs in debit card page. https://github.com/Expensify/App/issues/7470#issue-1118937295
Those inputs don't have secureTextEntry, so your proposal won't fix it right?

@okansahin any update?

@okansahin bump

@trjExpensify I think it's time to double this issue, doesn't look like any proposals are moving forward here.

Doubled the Upwork job to $500 here: https://www.upwork.com/jobs/~0132057b0680124108

@Expensify/contributor-plus feel free to pick this up. Unassigning because I'll be OOO.
There are no untriaged proposals here.

Due a double up today in Upwork. Actioned on that here.

@michaelhaxhiu oops 😂

Hi! We solved your issue, the solution was sent to Upwork

Went through the history, waiting for proposals.

Doubled the price on Upwork here

Doubled!

Hi! Uploaded our solution, waiting for approval. Sent proposal to Upwork

Hi, @WelbexIT,
Please take a look at the contribution guidelines. You need to send a proposal here, with how you plan to solve this with the technical details. One of the team members will review it here in Github and once approved, you'll be hired via Upwork to start working on it.

Proposal:
This issue is happening because text input has a fixed height and we are adding component to more the defined height,
https://github.com/Expensify/App/blob/5ab06b4efc77fb36c3aa7993f70ed96e7f31d65d/src/components/TextInput/BaseTextInput.js#L206-L211
Here we passing height = componentHeightLarge = 52  value to the parent, and child we are adding borderwidth = 1 , so total (2px will be minus from the 52)
so text input height will be 50
(I have logged height using on layout and this is the response for parent and child,
parent = 51.80952453613281
child = 50.28571319580078),
https://github.com/Expensify/App/blob/5ab06b4efc77fb36c3aa7993f70ed96e7f31d65d/src/styles/styles.js#L716-L726
Here we are total using 51 height (top + bottom + lineheight, 23 + 8 + 20),thats why textinput goes little bit up from the bottom due to paddingBottom 8, reduce it by 2 and component looks fine, but I am not sure this is the right solution,
What i think best is we can add on layout to parent of the textinput component, and use that height for the textinput
Proposed changes
1.https://github.com/Expensify/App/blob/5ab06b4efc77fb36c3aa7993f70ed96e7f31d65d/src/components/TextInput/BaseTextInput.js#L16
import variables from '../../styles/variables';
2.https://github.com/Expensify/App/blob/5ab06b4efc77fb36c3aa7993f70ed96e7f31d65d/src/components/TextInput/BaseTextInput.js#L25-L35
height: variables.componentSizeLarge,
3.https://github.com/Expensify/App/blob/5ab06b4efc77fb36c3aa7993f70ed96e7f31d65d/src/components/TextInput/BaseTextInput.js#L205-L211
onLayout={event => this.setState({height: event.nativeEvent.layout.height})}

https://github.com/Expensify/App/blob/5ab06b4efc77fb36c3aa7993f70ed96e7f31d65d/src/components/TextInput/BaseTextInput.js#L259-L266
{ height: this.state.height },
Result:
https://user-images.githubusercontent.com/35371050/168695082-ea616517-2810-4a03-afbe-eb8dfad6bb7b.mp4

Reviewing @jayeshmangwani's proposal.
@WelbexIT are you keen on submitting the proposal here?

I checked @jayeshmangwani's proposal and for the lack of any better proposal, I feel we can go ahead with this.
@stitesExpensify do you see any challenges with setLayout?
Note that I am not able to reproduce this on Web and iOS (Android build isn't working for me). So @mvtglobally are you able to reproduce this on all platforms as mentioned in the GH body.

Not overdue, Melv. Next steps is for @stitesExpensify to review the proposal. 👍

Same again, Melvin. @stitesExpensify can you address this please, so we can move the proposal forward?

:wave: Apologies for the delay I was on vacation and then got covid so I've been OOO for a long time 😬
I think that @jayeshmangwani proposal looks good! Happy to move forward with it

@stitesExpensify Adding a proper confirmation, we're going ahead with @jayeshmangwani's proposal.
🎀 👀 🎀
C+ reviewed

@mananjadhav @stitesExpensify PR has been raised

I should’ve commented on the PR. I am in process of reviewing your PR only and testing it. I’ll update by eod today.

I tried the solution but it didn't fix the issue on mWeb also we should fix https://github.com/Expensify/App/issues/8981 here

@jayeshmangwani just wanted to make sure you see this ^

@stitesExpensify I am not sure but are you saying that I need to check this https://github.com/Expensify/App/issues/7470#issuecomment-1146848162 ?

@stitesExpensify I am not sure but are you saying that I need to check this https://github.com/Expensify/App/issues/7470#issuecomment-1146848162 ?

Yes, @jayeshmangwani.

@thesahindia I have tried with safari and chrome and it's working on my side, can you please send me the device/browser where are you getting that this solution is not working?
cc: @mananjadhav @stitesExpensify
Thanks!

@jayeshmangwani, the background color change is to make it more visible, you also have to use autofill or you need to change the input color so you can see the gap.
Keep the background red for the parent container and change the {backgroundColor: 'aliceblue'} here for the input
https://github.com/Expensify/App/blob/284e0bada7851288be011e2898c91fa81234cc3e/src/components/TextInput/BaseTextInput.js#L259
this way you will see the gap.

@mananjadhav @stitesExpensify
I have tried with this PR and I am not getting a white gap at the bottom using autofill, if you get time then can you please check PR once on your side and see the difference in mWeb, I have tried on my side and attached a video for the mWeb in PR too

Hmm okay let me test and get back.
@thesahindia Would you mind sharing some more information on your device/browser type for mWeb ?

I tried this on Android chrome. In ios safari it's working fine.

@mananjadhav were you able to retest here?

Sorry for the delay here @jayeshmangwani. I was OOO earlier and then had to change my machine.
While the change works as expected for most cases, but as @thesahindia pointed out, it doesn't fix the corners of the input and Android Chrome.
Here are the screenshots for your reference:

I've zoomed the page on the web to clearly see the gap in the corners and for Android you can use Pixel Android Simulator itself. Can you please add the fix for this? and update once done.
Thank you for your patience.

@mananjadhav Thanks for testing proposal,
I am trying to solve this issue for android

Thank you @jayeshmangwani. And also the corner areas gap for the input.

@trjExpensify sorry for the delay I have tried with different styling, but I think the root cause for the react-native-web is different, I have tried this issue by creating a new project for react-native-web, but that's working fine. so I am yet trying to figure it out for the web.

Thank you for the update

@mananjadhav @stitesExpensify
Updates for the issue,
I tested a few cases with react-native-web and I found that when we wrap a view/textinput in the parent view with the borderWidth then we are getting a slight UI white space around the child, it doesn't matter if we pass the flex or width/height same as a parent there will be little white space around child view, and I am trying from several days and I did not get any success yet, my proposal is not working for the android web then I think we should open this issue for the proposals rather than blocking until I found any solution.
a simple example that I have tested
<View
     style={{
            height: 50,
            width: 300,
            borderRadius: 10,
            backgroundColor: 'red',
            borderWidth: 1,
            overflow: 'hidden'
      }}>
          <View style={{backgroundColor: "#fff", flex: 1}} />
  </View>

Android

Android Chrome

in the above example, android took the full height and width of the parent component, but the android web has a small gap at the left, right, and bottom, we can see the red part of the parent component

Thanks for the comment @jayeshmangwani. Let me take an opinion internally and get back to you.

Internal Slack thread here https://expensify.slack.com/archives/C02NK2DQWUX/p1656334993341279

What are the next steps here? Seems like the consensus in the thread is to proceed with the PR and open a new issue for android mWeb, right?

Yeah @trjExpensify. I am going to review this again and test on rest of the platforms.
@jayeshmangwani FYI, based on the internal discussion, we think we should move this task ahead by testing, reviewing and merging this one for all the platforms. For Android mWeb, create a new issue. Can you probably merge the latest main branch changes so that we can move this forward.

@mananjadhav
Thanks for the update, I have merged the latest main branch and pushed it.

Currently Reviewing and retesting it.

@jayeshmangwani I did a second round of the tests on all the platforms. I still couldn't find the change where the corners are fixed. Could you please point me to that change? or send me the screenshots of the tests that you performed? I can see those corners in Mac Safari as well as Web Chome (first screenshot in this comment )

Proposal

Here actual problem for the white corner border is caused by the border radius of text input as our text input component <BaseTextInput> is already wrapped in view that has border-radius of variables.componentBorderRadiusNormal so the simple solution would be to set text input border-radius to 0

Note: In the latest code (v1.1.82-5) I'm not able to get the top and bottom gap, I'm only able to reproduce all 4 corner visible white gap that was due to text input borderRadius

Solution

Here set borderRadius: 0, <- It will remove the inner gap of text input make more consistent to parent view

https://github.com/Expensify/App/blob/ce899227ca6d3823e2865a5e194b429f1263db30/src/styles/styles.js#L721-L731
Result
Web Chrome without fix can see white corner

Web Chrome with fix no visible corner

iPhone App without fix

iPhone App with fix no visible corner

Safari mobile without fix

Safari mobile with fix no visible corner

Safari web without fix

Safari web with fix no visible corner

Android App without fix

Android App with fix no visible corner

Chrome mobile without fix

**Chrome mobile with fix no visible corner but I can still see tiny top & bottom white gap **

@mananjadhav Thanks for testing PR, yes I have not added code for the border, as this was not the issue of the height, but I found that this issue is happening because we are adding borderRadius to child and parent both, and in that scenario, the child is not taking the full height/width and we can see 1 pixel of parent's view, so I would suggest that we can remove the child's(TextInput) borderRadius because we have already borderRadius and borderWidth to the parent component
Here we are passing the borderRadius
https://github.com/Expensify/App/blob/8718a905ce72ae1b3f9336c0e6bc1bf920e650f9/src/components/TextInput/BaseTextInput.js#L215
https://github.com/Expensify/App/blob/8718a905ce72ae1b3f9336c0e6bc1bf920e650f9/src/styles/styles.js#L759-L773
so, I am suggesting we should remove borderRadius from here
https://github.com/Expensify/App/blob/8718a905ce72ae1b3f9336c0e6bc1bf920e650f9/src/styles/styles.js#L721-L731
-       borderRadius: variables.componentBorderRadiusNormal,

this is a basic example for explaining the above behavior,
here we have 2 view components with the same height and width, and parent has borderwidth 1 and child has borderwidth 0, so technically child black color should cover the entire view, but if you check this you will see a blue pixel from the parent
<View style={{
        height: 50,
        width: 100,
        borderRadius: 10,
        backgroundColor: 'blue',
        borderWidth: 1,
        borderColor: "red",
        overflow: "hidden",
     }}>
        <View style={{
            height: 50,
            width: 100,
            borderRadius: 10,
            backgroundColor: 'black',
            borderWidth: 0,
        }} />
</View>

@jayeshmangwani The change looks fine, can you please add and update the PR?

@mananjadhav can you check my proposal as I identify the actual root cause and provide a solution very first https://github.com/Expensify/App/issues/7470#issuecomment-1184258850

@jayeshmangwani is already assigned here. @dhairyasenjaliya, search other issues with the help wanted label.

yeah can understand :)

@mananjadhav PR updates, Thanks!

@jayeshmangwani Will test today.

PR hit staging a couple of hours ago, Melv.

Unfortunately, there was a regression caused by this PR and it is being reverted now.

@marcaaron can you link the issue where we are tracking the regression ? I can also take a look

@jayeshmangwani We'll have to check the regression and fix this. Its happening because onLayout is taking the full height of the View.

@jayeshmangwani We'll have to check the regression and fix this. Its happening because onLayout is taking the full height of the View.

@mananjadhav Okay I will check this regression in 2-3 days I am not working few days so , please can we wait next 3 days, Thanks

@mananjadhav Thanks for waiting on this regression,
I have checked this issue and found that at WorkspaceInvitePage this issue is happening because we are passing minHeight style to containerStyles, if we are passing minHeight to containerStyles then onLayout calling constantly with a new height every time,
and I think 2 ways to handle this issue,

we will change minHeight to height, as we are already passing numberOfLines in the WorkspaceInvitePage TextInput so height is always bound in 4 lines

https://github.com/Expensify/App/blob/a06358cef3ab1951fcbb5c256c003acdf238d447/src/pages/workspace/WorkspaceInvitePage.js#L297-L307
https://github.com/Expensify/App/blob/a06358cef3ab1951fcbb5c256c003acdf238d447/src/styles/styles.js#L2343-L2345
+height: 115
-minHeight: 115

we are getting issue in the autofill , and autofill always will be in single line, so when we pass multiline prop to TextInput then no need to add onlayout and dynamic height,

please let me know your thoughts on the above 2 proposed solutions

@mananjadhav
Hey, have you got a chance to check my proposed changes for the regression?

@jayeshmangwani I did check. While the prop thing looks good, would you mind checking one change for me? what if we remove the onLayout code and only retain the border change. Do you think that'll work?

@mananjadhav checked without onLayout but a white gap is visible,
without onLayout code

with onLayout code

This was reverted, so I'm removing the payment hold from the title and the label.

@mananjadhav these are the changes we will need to make,
https://github.com/Expensify/App/blob/e57e113e8ead6ae7ad0068c91593504dc101b160/src/components/TextInput/BaseTextInput.js#L214-L221
+{...!this.props.multiline ? {
+  onLayout: event =>
+      this.setState({height: event.nativeEvent.layout.height})
+  } : {}
+}

https://github.com/Expensify/App/blob/e57e113e8ead6ae7ad0068c91593504dc101b160/src/components/TextInput/BaseTextInput.js#L260-L267
+!this.props.multiline && {height: this.state.height},

https://github.com/Expensify/App/blob/e57e113e8ead6ae7ad0068c91593504dc101b160/src/styles/styles.js#L731-L741
- borderRadius: variables.componentBorderRadiusNormal,

it will cover all the single line inputs

Thanks for the updated proposal @jayeshmangwani. This one should work. @stitesExpensify anything you'd like to check?

Looks good to me!

@jayeshmangwani Can you submit the PR with the updated fix?

@mananjadhav PR raised
cc: @stitesExpensify

@jayeshmangwani for this one do you mind uploading a video of Web and 1 Mobile platform that covers the whole app different screens just to be sure we're not breaking anything? I'll take a look at the PR after that.

@mananjadhav sure , I am away from work for 2 days , I will upload on Tuesday

@mananjadhav I am uploading videos for web and android to Gdrive due to video size, please check these updated videos
web
https://drive.google.com/file/d/1zfoyvIIqQ4kMSXrf49VA_Ws6lcbBvRby/view?usp=sharing
Android
https://drive.google.com/file/d/1IyJItxEOku422YYFOdHxDQpGny-QqNgU/view?usp=sharing

quick update, I am testing this (also while generally using the app), to ensure that we don't break anything. It should be ready to merge in this week.

PR under review and in final stages of approval.

👋 Alrighty, time to settle up! To confirm..
$250 - @rushatgabhane for reporting
$4,000 - @jayeshmangwani for the fix
$2,000 - @mananjadhav for C+ (1/2 because of the revert here)
Let me know if that's accurate!

Sounds right to me, @trjExpensify

Alrighty, let's do this!

@jayeshmangwani settled up!
@rushatgabhane - contract sent
@mananjadhav - contract sent

@trjExpensify Thanks!

Accepted @trjExpensify


fixed url relativity

spoiler.css and spoiler.js were being pulled from root '/'.  This fix makes them acknowledge the 'root' parameter of the _config.yml (so, for example, if your blog is hosted at somedomain.com/blog, it'll pull spoiler.css from somedomain.com/blog/spoiler.css instead of somedomain.com/spoiler.css)

Sure, this could serve as a good starting point with that, absolutely.

Awesome thanks for this 🎉


Tree should differentiate between selecting/clicking an item or its twistie

Selecting ITree or the triangle in front of it is currently the same things... One should be able to tell them apart

Done!


Get Coordinates of Absolute Positioned Object on Map

I've made a marker that I place position absolute on the map. This way, I can move the map around and the marker stays in place. I'm trying to make it so users set a location, kind of like Uber. However, the problem I'm facing is I'm not sure how to then get the coordinates of where the marker was positioned. Here is what the screen currently looks like with the absolute positioned marker:

I can attach a code sample if necessary

you could position the marker in the center of the map and use onRegionChange to get the map's center coordinate

@thomasbaldwin Would you mind sharing an code example of how you solved this? absolute position + retrieving cordinates

Read onRegionChangeComplete event docs.

Please share the Code @thomasbaldwin

Please share the Code @thomasbaldwin


Fix node10 deprecated warning from azurepipelines

This PR will fix issue  that was being highlighted in Azure pipelines.

Node version is updated from 10 to 18
Task version is updated from 1.2.3 to 1.3

@SomaticIT Please review above PR to fix the warning raised by Azure pipelines that check changed files is using deprecated node version 10.


limit and offset dose not work with getPlaylist

spotifyApi.getPlaylist(parsed.user, parsed.id,{ limit : 100, offset : 100 })
.then(function(data) {
}, function(err) {
return console.log('Something went wrong!', err);
});
will still print the first 100 songs.

@claytja The options supported for the get playlist endpoint are fields and market (see documentation page).
If you want to paginate through the tracks you need to use the getPlaylistTracks() function.


Windows support

The Swift toolchain recently added official support for Windows, so it would be nice to have swiftenv support it. Or would that be impossible given that swiftenv is written in Bash?

I don't think bash would be a blocker, bash is available on Windows. Installing other development tools such as git bring bash terminal along too.
At the moment, swiftenv should already work with Windows providing swift versions have been installed in ~/.swiftenv/versions/<version> with a usr/bin directory containing the binaries (custom installation). I would imagine that aliasing ~/.swiftenv/versions/5.3 to /c/Library/Developer/Toolchains/unknown-Asserts-development.xctoolchain would allow using swiftenv with these Windows toolchains with prior versions of swiftenv.
I've taken a look at what it would take to support both installing from these new Windows binaries, and being able to switch between the versions and have a limited proof of concept working, however it would appear that it won't be possible to support these binaries in their current form due to the following:

The installer appears to be GUI only (invoking it from terminal, even with --help and other flags launches GUI).
Swift 5.3 is installed into /c/Library/Developer/Toolchains/unknown-Asserts-development.xctoolchain (these toolchain names do not appear to be unique nor contain version identifier unlike the macOS toolchains).

However given the caveats, installing the Swift package manually allows it to be known by swiftenv with a couple of minor changes to libexec/swiftenv-versions and libexec/swiftenv-prefix:
$ ./libexec/swiftenv versions
* system
  unknown-Asserts-development

$ env SWIFT_VERSION=unknown-Asserts-development ./libexec/swiftenv prefix
/c/Library/Developer/Toolchains/unknown-Asserts-development.xctoolchain

$ env SWIFT_VERSION=unknown-Asserts-development ./libexec/swiftenv exec swift --version
compnerd.org Swift version 5.3 (swift-5.3-RELEASE)
Target: x86_64-unknown-windows-msvc


min and max value issue on lobend/hibend

https://sfzformat.com/opcodes/lobend
https://sfzformat.com/opcodes/hibend
It's said in the specs, the range for lobend and hibend is -8192 to 8192 atm, which is not correct.
The range should be -8192 to 8191, and the center value is 0
sfizz has these minor issue :

When the pitch bend data at max (8191) and lobend/hibend at 8192, the region still play, which it shouldn't.
When the pitch bend data at min (-8192) and lobend/hibend at -8191, the region still play, which it shouldn't.

Example :
<region>
sample=snare.wav
loop_mode=one_shot
key=60
lobend=-8191
hibend=-8191

This is about limited value ranges, and is the same deeper issue as #697 #696
It needs to modify opcode specifications such that values out-of-range don't reset to default.

Not sure it's only this, I'm pretty sure I have some flaky rounding going on for bending in particular..


chore(CI): add Node 22 to test matrix

Add windows-latest to test matrix

Related to #168

Add node 22 to node-version (current stable release)

Adding windows to test matrix produce an error.
Since I have no windows machine I will investigate this in a later PR.

The issue on Windows was caused by path not normalised. Now all CI checks should be green.


Compatibility with CKAN 2.8.0

Hello,
is it possible to use archiver with CKAN 2.8.0? Starting CKAN gives me the error
"ImportError: No module named celery_app"

Closed in #55


Use file globbing to resolve manifests

Following up to https://github.com/aspnet/MetaPackages/pull/127.
Now that we have an updated CLI with the changes we needed, we can at least use file globbing to resolve the manifest names. This can go into preview2 but is also not necessary.

Closed in https://github.com/aspnet/MetaPackages/commit/35ec06975d3b3738e83c6381d587c7c1d9e2eaf1


Linear Volume not working with alsa mixer

Hi,
Im using a HifiBerry DAC on a raspberry pi with librespot's alsa mixer option.
I'm noticing logarithmic volume control even with --linear-volume enabled.
This means 0-80% volume is extremly quiet. The volume in alsamixer is inconsistent with the spotify connect volume (see screenshots).
If i omit --linear-volume the problem is even worse, meaning 0-95% is quiet...
Almost if its doing log compensation twice, what makes me think that this might be a bug.
Options:
--backend alsa --device hw:0,0 --mixer alsa --mixer-name Digital --linear-volume --enable-volume-normalisation --initial-volume=40

Note that 50% is only 13% in alsa.

To reach ~50% i need to almost max-out the spotify volume.
Is my understanding wrong? I thought enabling --linear-volume would mean 50% in spotify corresponds to 50% in alsa.

Ah, I now see (https://github.com/librespot-org/librespot/pull/245#issuecomment-430247445) that I never got down to merging the stuff from vollibrespot in here. I'll get down to opening a PR soon(ish)

Awesome, thanks for your work!

PS - if you are in a hurry - I should have some pre-compiled stuff over at ashthespy/Vollibrespot that you can play with in the meantime..

Take your time, at the moment i checked out https://github.com/librespot-org/librespot/pull/430 to test gapless playback anyways.

I have just found out that this problem isnt librespot exclusive:
If i use amixer -q sset Digital 50%
the gets set to 14%.
So it doesnt seem like this is a bug in librespot, sorry.
Any idea how i can fix this?

@JPW21 you should check out the -M aka mapped volume.

@ashthespy Any news for that PR? :)

@JPW21 haven't made/found the time yet - next week should be possible!


Change label for number of connected devices from "Clients" to "Viewers"

This label is displayed in the lower right corner of the Workbench.

Fixed by this commit: https://github.com/evothings/evothings-studio/commit/250f00dc4b9d3254031c7f7ea9ced2f58aef7b13


chore: bumped base image digest

Codecov Report

Merging #524 (b8a35fc) into main (08bc585) will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##             main     #524   +/-   ##
=======================================
  Coverage   70.10%   70.10%
=======================================
  Files          17       17
  Lines         950      950
=======================================
  Hits          666      666
  Misses        263      263
  Partials       21       21


[release-1.15] fix: do not build OIDC config unless enabled (#4021)

This is a cherry pick of #4021 so that the OIDC config is only built when needed

/cc @creydr

/test reconciler-tests


Cluster unavailable when I shutdown one of controlplane nodes

Hi, I have a very strange situation with a production cluster.
13 bare metal servers
6 servers have "controlplane,worker,etcd" roles
7 servers have only worker role
I created the cluster with RKE, with the following conf:
nodes:
    .......

kubernetes_version: "v1.14.6-rancher1-1"

services:
  kubelet:
    extra_args:
      max-pods: 800
      node-status-update-frequency: "4s"
  kube-api:
    extra_args:
      default-not-ready-toleration-seconds: "10"
      default-unreachable-toleration-seconds: "10"
  kube-controller:
    extra_args:
      node-monitor-grace-period: "16s"
      node-monitor-period: "2s"

The cattle-cluster-agent is running on one of master nodes.
If I shutdown this node, all cluster is unavailable in rancher.
I can access with kubectl, and if I check on nodes I see the powered off node as "NotReady".
If I check the cattle-system namespace the pod cattle-cluster-agent is "Running".
If I try to kill the pod manually from kubectl, I see the pod status a "Terminating" and a new  pod as "Pending".
Inside that pod, I see:
Normal  Scheduled  3m    default-scheduler  Successfully assigned cattle-system/cattle-cluster-agent-77f8b7456c-c24dq to X.X.X.X

The scheduler assigned the pod to the NotReady node!
I tried with another cluster on AWS and I don't have this situation:
I see the cattle-cluster-agent with state "unknown" but the cluster is still visible on Rancher
So, I have 3 questions:

Why If a single node goes down I have the cluster "unavailable" on Rancher?
Why the cattle-cluster-agent workload doesn't have default tolerations?
Why it continues to schedule the pod to the NotReady node?

Can you help me debugging this situation?
Thanks

Can you please supply the information requested in the issue template? In this case the Rancher version used would be helpful. Is it created in RKE (what version) and then imported?

Hi @superseb ,
The cluster is created with RKE, in date 2019-02-20 (so with the current RKE version at that date).
it's then upgraded to K8S version 1.14.6 with last RKE version (0.2.8).
Rancher version 2.2.8, deployed with helm in a different RKE cluster of 3 dedicated hosts.
Docker version 18.9 / 19.3.
Let me know if you need other information.

I also tried on the aws test cluster to add tolerations to the cattle-cluster-agent workload, like:
  - effect: NoExecute
    key: node.kubernetes.io/not-ready
    operator: Exists
    tolerationSeconds: 10
  - effect: NoExecute
    key: node.kubernetes.io/unreachable
    operator: Exists
    tolerationSeconds: 10

and it works as I expect:

I didn't try yet on the production cluster, let me know it this is the right way to fix this.

I also saw a strange thing:
On the cattle-cluster-agent of the production cluster (but it's the same on the RKE cluster where rancher is running) there is an empty line in toleration:

In new workloads instead, I see there a label "no tolerations", with no empty lines.
If it can help, this is the yaml of the cattle-cluster-agent workload:
apiVersion: apps/v1beta2
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "10"
    kubectl.kubernetes.io/last-applied-configuration: '{"apiVersion":"extensions/v1beta1","kind":"Deployment","metadata":{"annotations":{},"name":"cattle-cluster-agent","namespace":"cattle-system"},"spec":{"selector":{"matchLabels":{"app":"cattle-cluster-agent"}},"template":{"metadata":{"labels":{"app":"cattle-cluster-agent"}},"spec":{"affinity":{"nodeAffinity":{"preferredDuringSchedulingIgnoredDuringExecution":[{"preference":{"matchExpressions":[{"key":"node-role.kubernetes.io/controlplane","operator":"In","values":["true"]}]},"weight":100},{"preference":{"matchExpressions":[{"key":"node-role.kubernetes.io/etcd","operator":"In","values":["true"]}]},"weight":1}],"requiredDuringSchedulingIgnoredDuringExecution":{"nodeSelectorTerms":[{"matchExpressions":[{"key":"beta.kubernetes.io/os","operator":"NotIn","values":["windows"]}]}]}}},"containers":[{"env":[{"name":"CATTLE_SERVER","value":"XXXXXXX"},{"name":"CATTLE_CA_CHECKSUM","value":""},{"name":"CATTLE_CLUSTER","value":"true"},{"name":"CATTLE_K8S_MANAGED","value":"true"}],"image":"rancher/rancher-agent:v2.2.8","imagePullPolicy":"IfNotPresent","name":"cluster-register","volumeMounts":[{"mountPath":"/cattle-credentials","name":"cattle-credentials","readOnly":true}]}],"serviceAccountName":"cattle","tolerations":[{"operator":"Exists"}],"volumes":[{"name":"cattle-credentials","secret":{"secretName":"cattle-credentials-3afaafe"}}]}}}}'
  creationTimestamp: "2019-02-20T10:13:27Z"
  generation: 10
  labels:
    app: cattle-cluster-agent
  name: cattle-cluster-agent
  namespace: cattle-system
  resourceVersion: "149456485"
  selfLink: /apis/apps/v1beta2/namespaces/cattle-system/deployments/cattle-cluster-agent
  uid: 29e536d1-34f8-11e9-be3d-4c5262213d5b
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: cattle-cluster-agent
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
    type: RollingUpdate
  template:
    metadata:
      annotations:
        cattle.io/timestamp: "2019-09-25T20:08:15Z"
      creationTimestamp: null
      labels:
        app: cattle-cluster-agent
    spec:
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - preference:
              matchExpressions:
              - key: node-role.kubernetes.io/controlplane
                operator: In
                values:
                - "true"
            weight: 100
          - preference:
              matchExpressions:
              - key: node-role.kubernetes.io/etcd
                operator: In
                values:
                - "true"
            weight: 99
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: beta.kubernetes.io/os
                operator: NotIn
                values:
                - windows
      containers:
      - env:
        - name: CATTLE_CA_CHECKSUM
        - name: CATTLE_CLUSTER
          value: "true"
        - name: CATTLE_K8S_MANAGED
          value: "true"
        - name: CATTLE_SERVER
          value: XXXXXXXX
        image: rancher/rancher-agent:v2.2.8
        imagePullPolicy: IfNotPresent
        name: cluster-register
        resources: {}
        securityContext:
          capabilities: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /cattle-credentials
          name: cattle-credentials
          readOnly: true
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      serviceAccount: cattle
      serviceAccountName: cattle
      terminationGracePeriodSeconds: 30
      tolerations:
      - operator: Exists
      volumes:
      - name: cattle-credentials
        secret:
          defaultMode: 420
          secretName: cattle-credentials-3afaafe
status:
  availableReplicas: 1
  conditions:
  - lastTransitionTime: "2019-02-20T10:13:27Z"
    lastUpdateTime: "2019-02-20T10:13:27Z"
    message: Deployment has minimum availability.
    reason: MinimumReplicasAvailable
    status: "True"
    type: Available
  - lastTransitionTime: "2019-02-20T10:13:27Z"
    lastUpdateTime: "2019-09-25T20:08:18Z"
    message: ReplicaSet "cattle-cluster-agent-77f8b7456c" has successfully progressed.
    reason: NewReplicaSetAvailable
    status: "True"
    type: Progressing
  observedGeneration: 10
  readyReplicas: 1
  replicas: 1
  updatedReplicas: 1

I tried on the test cluster and when I power off a node:

With the empty line (as RKE creates the workload) the pod stays in "unknown" and no other pods is scheduled
Without the empty line (and without other additional tolerations rules) the pod stays in "unknown" but a new pod is scheduled and running.

So, I think that this empty line in toleration is the main issue.
Let me know.

@superseb do you need other information?

i have same problem on 3 master and 3 worker nodes.
cattle-cluster-agent work on one of worker node, and when it stops, i have message "This cluster is currently Unavailable"
but other nodes still work, and k8s cluster works too

kubectl scale deployment --replicas=3 -n cattle-system cattle-cluster-agent

@Axizdkr try to remove the default toleration. It should work (for me it works).

can reproduce with a 3 node cluster provisioned with rke v0.3.1 & rancher 2.3.2 (via helm), later upgraded via rke to 0.3.2 to use: kubernetes_version: "v1.16.2-rancher1-1"
once i disconnect the node where cattle-cluster-agent is running on from the network, rancher (UI/API) becomes unavailable and the cattle-cluster-agent is not rescheduled onto another node.

I've same issue too, just shutdown 1 host (It's a worker + etcd) then:

I can't use kubectl because of "Unable to connect to the server: net/http: TLS handshake timeout"
Can't delete node because of "Get /api/v1/nodes: net/http: TLS handshake timeout"
Is there any way to remove that node without remove cluster?
Thanks,

This should be solved with https://github.com/rancher/rancher/issues/24636


chore: add circleci to check for missing rules

:tada: This PR is included in version 1.0.0 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


Compatibility Issue with Updated Environment Versions

Hello,
First of all, I would like to express my appreciation for the dsac* project. It looks like a fantastic tool, and I am eager to try it out. However, I am facing some compatibility issues due to the limitations of my GPU hardware.
Currently, I am using the following versions:

PyTorch: 1.12.0
CUDA: 11.8
OpenCV: 4.10

When I attempt to run the test code, I encounter the following error:
File "test.py", line 6, in <module>
    import dsacstar
ImportError: /miniconda3/envs/t16c102/lib/python3.8/site-packages/dsacstar-0.0.0-py3.8-linux-x86_64.egg/dsacstar.cpython-38-x86_64-linux-gnu.so: undefined symbol: _ZN2cv6String8allocateEm

I understand that this issue is related to the OpenCV version. Could you please let me know if there is a possibility of supporting these updated environment versions? Your assistance would be greatly appreciated.
Thank you for your time and support.

Hi! The code can be adjusted for OpenCV 4.x but it requires some changes. We did this for ACE which also uses the DSAC* C++ extension - but the ACE version only supports the RGB forward function (i.e. no end-to-end training and no RGB-D mode). Maybe it is still useful as an example of how to port from OpenCV 3.x to 4.x.
Best,
Eric


[Bug] Invalid formatting of render function in tests when running prettier via eslint-plugin-ember + eslint-plugin-prettier

🐞 Describe the Bug
Prettier is trying to format tests written as .gts in a way that is invalid. I'm not sure if I have something configured incorrectly or if this is a bug with the library but I figured I'd add this here in case anyone else runs into this before I can get an example repo set up to confirm.
Edit: It seems this is related to https://github.com/gitKrystan/prettier-plugin-ember-template-tag/issues/20 and is likely a bug that is from using eslint-plugin-prettier.
Using prettier directly results in the correct formatting but using prettier through eslint-plugin-prettier does not. eslint-plugin-prettier also reports some somewhat confusing errors but they do go away if things are formatted correctly using prettier directly.
🔬 Minimal Reproduction
See examples below. I'll try to get an example repo set up and add a link here.
😕 Actual Behavior
Prettier wants render in my test formatted as:
await render([
  <template>
    <Button @onActivate={{onActivate}}>
      Click me!
    </Button>
  </template>
]);

🤔 Expected Behavior
Prettier should format call to render as:
await render(<template>
  <Button @onActivate={{onActivate}}>
    Click me!
  </Button>
</template>);

Which causes the following error:
TypeError: (0 , _util.unwrapTemplate)(...).asLayout is not a function
    at new OutletComponentDefinition (http://localhost:4200/assets/vendor.js:4343:152)
    at http://localhost:4200/assets/vendor.js:5795:76
    at http://localhost:4200/assets/vendor.js:31666:37
    at track (http://localhost:4200/assets/vendor.js:39488:7)
    at valueForRef (http://localhost:4200/assets/vendor.js:31665:44)
    at Assert.evaluate (http://localhost:4200/assets/vendor.js:34016:48)
    at UpdatingVMImpl._execute (http://localhost:4200/assets/vendor.js:36184:16)
    at http://localhost:4200/assets/vendor.js:36158:63
    at runInTrackingTransaction (http://localhost:4200/assets/vendor.js:38991:21)
    at UpdatingVMImpl.execute (http://localhost:4200/assets/vendor.js:36158:51)

🌍 Environment
{
  "@glint/core": "^1.0.2",
  "@glint/environment-ember-loose": "^1.0.2",
  "@glint/environment-ember-template-imports": "^1.0.2",
  "@glint/template": "^1.0.2",
  "ember-template-imports": "^3.4.2",
  "eslint-plugin-ember": "^11.10.0",
  "eslint-plugin-prettier": "^4.2.1",
  "prettier": "^2.8.8",
  "prettier-plugin-ember-template-tag": "^0.3.2",
}

➕ Additional Context

I agree that this is an issue with the eslint-plugin-ember/eslint-plugin-prettier integration, related to https://github.com/gitKrystan/prettier-plugin-ember-template-tag/issues/20. If it were exactly the same issue, however, we'd see Insert [__GLIMMER_TEMPLATE( and not just Insert [. I think what is happening is that https://github.com/gitKrystan/prettier-plugin-ember-template-tag/issues/20 is fixed via the fix for https://github.com/ember-cli/eslint-plugin-ember/issues/1659, but there is a bug in the fix:
I think these regexes incorrectly assume that the intermediate [__GLIMMER_TEMPLATE(...)] form of template tag always occurs on one-line.
https://github.com/ember-cli/eslint-plugin-ember/blob/900e0026a1f23313108549b0ea5d6240c7c85c0c/lib/preprocessors/glimmer.js#L18-L21

@gitKrystan FWIW I do see the Insert [__GLIMMER_TEMPLATE( stuff if I move things around a little bit.
For example:

Interesting! I still suspect that regex is related somehow.
I forgot to mention that I added tests for this after you opened this issue (https://github.com/gitKrystan/prettier-plugin-ember-template-tag/pull/83) bc it's definitely something this plugin should avoid breaking.
 If so, we should move this conversation to https://github.com/ember-cli/eslint-plugin-ember/issues/1659 or a new issue in that repo so that the correct people see it.

 If so, we should move this conversation to ember-cli/eslint-plugin-ember#1659 or a new issue in that repo so that the correct people see it.

yes that is the case. Running prettier directly does the right thing

After investigating a little bit more it seems using prettier-plugin-ember-template-tag through eslint via eslint-plugin-prettier is more broken than I had initially realized.
For example, the regular TypeScript code in a .gts file is linted/formatted correctly but the content inside the <template> tags does not seem to be linted or formatted at all.

Again, running prettier directly with yarn prettier ./app/components/button.gts does still do the right thing:
import Component from '@glimmer/component';
import { on } from '@ember/modifier';

interface Signature {
  Element: HTMLButtonElement;
  Args: {
    isDisabled?: boolean;
    onActivate?: () => void;
  };
  Blocks: {
    default: [];
  };
}

export default class ButtonComponent extends Component<Signature> {
  get isDisabled() {
    return this.args.isDisabled ?? false;
  }

  handleClick = () => this.args.onActivate?.();

  <template>
    <button disabled={{this.isDisabled}} type='button' {{on 'click' this.handleClick}}>
      {{yield}}
    </button>
  </template>
}

declare module '@glint/environment-ember-loose/registry' {
  export default interface Registry {
    Button: typeof ButtonComponent;
  }
}

It does however work with inline comments (which was the problem earlier). So this my test line of my config:
await render(<template><Greeting @hello="hi" @to="me"/></template>);

which stays in tact after all. But when I ripped it apart:
await render(
  <template>
    <Greeting @hello="hi" @to="me"/>
  </template>
);

it turned into, only the opening [ (see the entire code for this file at the end):
    await render([
  <template>
    <Greeting @hello="hi" @to="me"/>
  </template>
);

When this is indented:
    await render(
      <template>
        <Greeting @hello="hi" @to="me"/>
      </template>
    );

will be formatted as above:
    await render([
      <template>
        <Greeting @hello="hi" @to="me"/>
      </template>
    ]);

entire code:
import { render } from '@ember/test-helpers';
import { module, test } from 'qunit';
import { setupRenderingTest } from 'ember-qunit';

import Greeting from 'ember-app-gts/components/greeting';

module('Rendering | <Button>', function (hooks) {
  setupRenderingTest(hooks);

  test('it renders with defaults', async function (assert) {
    await render(
      <template>
        <Greeting @hello="hi" @to="me"/>
      </template>
    );

    assert.dom().hasText('hi to me');
  });
});

apparently the indentation has an effect on this.

I fixed it in my app by updating eslint-plugin-ember and adding the right config: https://github.com/ember-cli/eslint-plugin-ember?tab=readme-ov-file#gtsgjs


Option to take simple arrays

ngTagsInput is great but has one major deficiency, or rather, requires one major improvement. Which is to take a simple array instead of requiring the array (or worse, changing the array) to be an array of objects.
https://github.com/monterail/angular-tagger for example takes a simple array instead of requiring an object array.

+1
@sebastiannm How do you make this change? I'd like to do it aswell.

@mohag519 I will provide a PR today. I just remove all the [display/value] stuff

https://github.com/mbenford/ngTagsInput/pull/679

This issue was selected to be spring-cleaned by a script. More information can be found here.
If anyone thinks this was a mistake and this issue should be reopened, please leave a message below explaining why. Before doing so, please consider reading the CONTRIBUTING file.


Fix error classes

Error names were a bit mixed up, now they're properly tested and the extension has also been updated to the latest and greatest! ✨

@nirebu the linting now correctly ignores vendor/bundle, thanks for pointing that out 👍

Thanks @elia !


added instructions on how to use merge

Added some instructions with the hope it helps some of the new folks.

 Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.

Also looks like the CLA needs signing.

👍🏾 for the merge -h suggestion.

Added usage function to merge script along with command line arguments.

LGTM, will merge once @sellout signs off.


jquery-scrollify

I am using jquery-scrollify on a website and my navigation is in a modal, I am using bootstrap 4 too. My problem is when the site is viewed on a mobile, on pages where I don't use scrollify my modal can scroll but on pages where I am using scrollify my modal does not scroll but the background/body does. Can anyone help as I am going round in circles. I either need to disable scrollify on a mobile or stop the body/background scrolling when the modal is open.

The issues raised here need to relate to Scrollify itself. To get support with your own projects please post your questions on https://stackoverflow.com


Add the launcher submodule

Source code for the launcher
Some nits change added as comments

@alexmwu @jkl73 be sure to "merge" not "squash" this so we keep the commit history.


out_channels vs reduced_size

Hi,
In the class CausalCNNEncoder( ), line 207: linear = torch.nn.Linear(reduced_size, out_channels). Before this line, the size of tensor should be (batch_size, out_channels). When passing this tensor to the linear layer torch.nn.Linear(in_features, out_features, bias=True), shouldn't in_features= out_channels and out_features=reduced_size? So line 207 should be: linear = torch.nn.Linear(out_channels, reduced_size).
Perhaps I am misinterpreting the meaning of these two variables. Hope you could help me with this question. Thanks in advance!

Hi!  The code is actually written as intended: the output of CausalCNN is a time series with a number of channels that is equal to reduced_size. The AdaptiveMaxPool1d and SqueezeChannels layer remove the time variable, leaving a vectorial representation of size reduced_size, which is then fed to the linear layer outputting the final vectorial representation of size out_channels.

Thank you for the reply. But I am still unclear about the output of CausalCNN. Sorry for the annoyance if my question is completely off.
The last layer of CausalCNN is:
layers += [CausalConvolutionBlock(channels, out_channels, kernel_size, dilation_size )]
where out_channels=320 defined in default_hyperparameters.json file.
This indicates that the output of CausalCNN = out_channels = 320. Section S2.2 of your paper also stated that:

number of output channels of the causal network (before max pooling): 320.

Since AdaptiveMaxPool1d and SqueezeChannels does not change the length of the time series, so the input to Linear should still be 320. But the code states Linear(reduced_size, out_channels) , where reduced_size=160 defined in default_hyperparameters.json file. So they don't seem to match?
Thanks again, and looking forward to your answer!

No worries! The issue actually lies in the paper, where we switched by mistake for the univariate case the parameters before pooling (which should be 160) and the size of the final representations (which should be 320). We will point out this problem in this repository, thanks for reporting it!
Regarding the code, it does work as intended. The out_channels variable used in the CausalCNN network is actually equal to the reduced_size parameter of the config size (from the constructor of CausalCNNEncoder).
So the output of CausalCNN has shape (B, reduced_size, L) where B is the batch size and L is the length of the input time series. AdaptiveMaxPool1d(1) shrinks the temporal dimension to 1, so its output has shape (B, reduced_size, 1). This does correspond to the input size of the final linear layer, whose output has shape (B, out_channels).

Thank you! It is clear now!


Remove note about tf.keras.experimental.export_saved_model.

tf.keras.experimental.export_saved_model is deprecated. And model.save with 'tf' option works fine.

We will not be encouraging one liner changes as this is expensive process, thank you for your interest.
CC @mihaimaruseac

@rthadur @mihaimaruseac
I think this line is very important and misleading us. Why don't you reconsider about this change?
Thank you.

The issue is that minor changes that can be done in <1 minute still require hours of CPU/GPU time for CI, so we are trying to reduce that, especially in October when there is Hacktoberfest and we receive a lot of PRs.

On the other hand, since this is already after 2.0 was released, let's merge this.

@rthadur @mihaimaruseac Thank you!
And I apologize that I didn't consider about CI cost.
How can we contribute about documentation changes? (e.g. PullRequest to documentation branch)

The best approach is to fix multiple documentation issues in a file, adding docstrings, documenting all parameters, etc.


E2E test on modules V2

Things to do first
-> push std to pypi
Who
florent (new)
guillaume (experienced)
pouriya (medium)
What

quickstart
cookiecutter V2 met pytest

add test for a std::len

convert a v1 to v2 (guillaume)

instructions

quickstart
developer getting started

Additional task for @edvgui (not yet, I'll ping you):
6. Add a new v1 module using the cookiecutter template and import it from the project -> compile. Then convert it to a v2 module and make sure the project still compiles.


⚠ Bofrost.fr has degraded performance

In fe6226e, Bofrost.fr (https://www.bofrost.fr) experienced degraded performance:

HTTP code: 200
Response time: 1075 ms

Resolved: Bofrost.fr performance has improved in bf13f7a.


Fix SMS Example

The SMS example was using the = sign to pair key values in the SendSMSRequest struct which causes errors. Amended to use the colon symbol instead.

Codecov Report

Merging #17 into master will not change coverage.
The diff coverage is n/a.

@@         Coverage Diff          @@
##           master   #17   +/-   ##
====================================
  Coverage      26%   26%
====================================
  Files          16    16
  Lines         316   316
====================================
  Hits           84    84
  Misses        228   228
  Partials        4     4

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 f1c005b...80cbe7e. Read the comment docs.


Remove version: Ruihu.Apifox version 2.5.13

[Automated] It returns code over 400 in all urls
Microsoft Reviewers: Open in CodeFlow

Close with reason: Duplicate;


Asset Automation 2024-07-18T16:36:09.114Z

feat(assets): Asset Automation 2024-07-18T16:36:09.114Z

This is a test PR.


Fix: MultiQC - edgeR problem

The problem is (from my understanding) the way collect() works is it returns a list object only if the channel atleast emits one value, otherwise it just remains an empty channel, which causes the process to be skipped or hang.
And toList() returns empty list [] when channel is empty (this is no problem) and list of lists when it have more than one emission i.e. like [['a', 'b', 'c']]. When this is given to a input as file it just creates a input.(num of entires) file with actual paths.
Tested this fixes (not very extensive though) and seems to work. I believe it should be suffice (of course correct me if I am wrong) :)

Impressive @senthil10


Building 1.63.0 or newer on macOS fails.

What version of gRPC and what language are you using?
1.63.0 1.64.0
What operating system (Linux, Windows,...) and version?
macOS
What runtime / compiler are you using (e.g. python version or version of gcc)
clang
What did you do?
Try to build 1.63.0 or 1.64.0 (older versions are fine).
What did you expect to see?
Builds fine
What did you see instead?
Build fails with
Undefined symbols for architecture arm64:
 "_google__protobuf__EnumOptions_msg_init", referenced from:
     __upb_EnumDefs_New in enum_def.c.o
     __upb_EnumDefs_New in enum_def.c.o
     __upb_EnumDefs_New in enum_def.c.o
 "_google__protobuf__EnumValueOptions_msg_init", referenced from:
     __upb_EnumValueDefs_New in enum_value_def.c.o
     __upb_EnumValueDefs_New in enum_value_def.c.o
     __upb_EnumValueDefs_New in enum_value_def.c.o
 "_google__protobuf__ExtensionRangeOptions_msg_init", referenced from:
     __upb_ExtensionRanges_New in extension_range.c.o
     __upb_ExtensionRanges_New in extension_range.c.o
     __upb_ExtensionRanges_New in extension_range.c.o
 "_google__protobuf__FeatureSetDefaults_msg_init", referenced from:
     _upb_DefPool_SetFeatureSetDefaults in def_pool.c.o
     _upb_DefPool_SetFeatureSetDefaults in def_pool.c.o
 "_google__protobuf__FeatureSet_msg_init", referenced from:
     _upb_DefBuilder_AddFileToPool in def_pool.c.o
     __upb_FieldDef_Create in field_def.c.o
     __upb_DefBuilder_GetOrCreateFeatureSet in def_builder.c.o
     __upb_DefBuilder_DoResolveFeatures in def_builder.c.o
     __upb_DefBuilder_DoResolveFeatures in def_builder.c.o
 "_google__protobuf__FieldOptions_msg_init", referenced from:
     __upb_FieldDef_Create in field_def.c.o
     __upb_FieldDef_Create in field_def.c.o
 "_google__protobuf__FileDescriptorProto_msg_init", referenced from:
     __upb_DefPool_LoadDefInitEx in def_pool.c.o
     __upb_DefPool_LoadDefInitEx in def_pool.c.o
 "_google__protobuf__FileOptions_msg_init", referenced from:
     __upb_FileDef_Create in file_def.c.o
     __upb_FileDef_Create in file_def.c.o
 "_google__protobuf__MessageOptions_msg_init", referenced from:
     __upb_MessageDefs_New in message_def.c.o
     __upb_MessageDefs_New in message_def.c.o
     __upb_MessageDefs_New in message_def.c.o
 "_google__protobuf__MethodOptions_msg_init", referenced from:
     __upb_MethodDefs_New in method_def.c.o
     __upb_MethodDefs_New in method_def.c.o
     __upb_MethodDefs_New in method_def.c.o
 "_google__protobuf__OneofOptions_msg_init", referenced from:
     __upb_OneofDefs_New in oneof_def.c.o
     __upb_OneofDefs_New in oneof_def.c.o
     __upb_OneofDefs_New in oneof_def.c.o
 "_google__protobuf__ServiceOptions_msg_init", referenced from:
     __upb_ServiceDefs_New in service_def.c.o
     __upb_ServiceDefs_New in service_def.c.o
     __upb_ServiceDefs_New in service_def.c.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Anything else we should know about your project / environment?
Fix:
--- CMakeLists.txt.orig	2024-05-16 01:01:03.000000000 +0000
+++ CMakeLists.txt
@@ -3682,6 +3682,7 @@ target_include_directories(upb_json_lib
 )
 target_link_libraries(upb_json_lib
   ${_gRPC_ALLTARGETS_LIBRARIES}
+  grpc++_unsecure
   utf8_range_lib
   upb_message_lib
 )
@@ -3883,6 +3884,7 @@ target_include_directories(upb_textforma
 )
 target_link_libraries(upb_textformat_lib
   ${_gRPC_ALLTARGETS_LIBRARIES}
+  grpc++_unsecure
   utf8_range_lib
   upb_message_lib
 )

Thank you for this report. Can you clarify what targets were you trying to build? Please confirm if you obtained gRPC from our GitHub repository or from some other place.

Facing the same problem - building the shared library on macOS with all dependencies provided externally. Using protobuf 27
I can see homebrew's test bot is also experiencing this:
https://github.com/Homebrew/homebrew-core/pull/170194

Anything else we should know about your project / environment?
Fix:
--- CMakeLists.txt.orig	2024-05-16 01:01:03.000000000 +0000
+++ CMakeLists.txt
@@ -3682,6 +3682,7 @@ target_include_directories(upb_json_lib
 )
 target_link_libraries(upb_json_lib
   ${_gRPC_ALLTARGETS_LIBRARIES}
+  grpc++_unsecure
   utf8_range_lib
   upb_message_lib
 )
@@ -3883,6 +3884,7 @@ target_include_directories(upb_textforma
 )
 target_link_libraries(upb_textformat_lib
   ${_gRPC_ALLTARGETS_LIBRARIES}
+  grpc++_unsecure
   utf8_range_lib
   upb_message_lib
 )

This doesn't work (for shared builds) because it creates a cyclic dependence, as grpc++_unsecure itself depends on those two libraries.

@veblush Does something need to change with respect to how we're vendoring upb?

I guess this is all targets with cmake argsuments: -DBUILD_SHARED_LIBS=ON -DgRPC_ABSL_PROVIDER=package -DgRPC_BENCHMARK_PROVIDER=package -DgRPC_CARES_PROVIDER=package -DgRPC_PROTOBUF_PROVIDER=package -DgRPC_RE2_PROVIDER=package -DgRPC_SSL_PROVIDER=package -DgRPC_ZLIB_PROVIDER=package.

Does this work without providing the additional arguments? -DBUILD_SHARED_LIBS=ON  to be specific?

Does this work without providing the additional arguments? -DBUILD_SHARED_LIBS=ON to be specific?

I removed all the "package" specs and things compile on osx now. I'm assuming that the vendored upb (v26.1 since https://github.com/grpc/grpc/commit/34a7e76359370286a0eb1508172afd59e4d11359, until the so-far-unreleased https://github.com/grpc/grpc/commit/62401f643ceab374aae8a43ee93fc234e8acef8f bumped to v27.0) refers to symbols in protobuf that don't exist anymore or have been renamed.
That said, vendoring protobuf (much less all the other packages) is not an option for distribution, aside from the fact that the option -DgRPC_PROTOBUF_PROVIDER="package" provides "official" support for doing that, and it has been working for years.
One thing that surprises me, is that the failure is essentially the same no matter if the system-provided protobuf is older or newer than (or even the same as!) the vendored one:

grpc version
vendored protobuf
system protobuf
Result

1.63.1
26.1
25.3
❌

1.64.2
26.1
27.2
❌

1.64.2
26.1
-
✅

1.64.2
26.1
26.1
❌❓❗

I haven't diffed the third_party/upb folder to see if it actually matches upb 26.1, but it's strange that there seems to be no combination of system protobuf that makes this work.
Finally this problem only seems to appear on osx, definitely not on linux (not sure about windows yet, running into #35794 there).

I guess this is all targets with cmake argsuments: -DBUILD_SHARED_LIBS=ON -DgRPC_ABSL_PROVIDER=package -DgRPC_BENCHMARK_PROVIDER=package -DgRPC_CARES_PROVIDER=package -DgRPC_PROTOBUF_PROVIDER=package -DgRPC_RE2_PROVIDER=package -DgRPC_SSL_PROVIDER=package -DgRPC_ZLIB_PROVIDER=package.

Does this work without providing the additional arguments? -DBUILD_SHARED_LIBS=ON to be specific?

@yashykt  building it as a static library appears to work - is only the shared variant on macOS - when built against an external protobuf.  But that would still be a regression, I think it's quite common to use grpc as a shared library
Also interesting that this only happens on macOS, but it could also be one of those cases where it's an issue on all platforms and only the macos linker surfaces this

I suspect the missing symbols are in descriptor.upb_minitable.c - which is built into the grpc and grpc_unsecure cmake targets.
The symbos are not built nor referenced in  the upb_textformat_lib or upb_json_lib targets, so the linker on macOS complains when creating the dylib shared libraries for those targets.
Reasons it doesn't fail in other scenarios:

When all libraries are static (macOS or other) - the executable will link against grpc which also links against both upb_json_lib and  upb_textformat_lib - so the linker can see all symbols when creating the executable.
When we are building shared libraries on Linux, the linker does not error out for "undefined references". On Linux, when creating shared libraries, the linker ignores undefined references (that is, --allow-shlib-undefined, see docs). When creating an executable, the missing symbols in upb_textformat_lib and upb_json_lib are visible and provided by libgprc.so so it works.
On Windows these two targets are explicitly set to be static, even if libgrpc isn't.

So there is a bit of circular dependency here:

libgprc.so and .dylib link against libupb_json_lib and libupb_textformat_lib
but those libraries refer to symbols that are only linked into libgrpc.so

I suppose one could pass -undefined dynamic_lookup when creating those two libupb targets, such that it behaves more like Linux - if those targets are not supposed to be used in a standalone manner (they're not "public") and are always brought in via libgrpc - then the downstreams consumers will link successfully - but it still begs the question as to whether this is the best approach.
TL;DR - on macOS, add this somewhere in the CMakeLists.txt - and it works:
            target_link_options(upb_textformat_lib PRIVATE -Wl,-undefined,dynamic_lookup)
            target_link_options(upb_json_lib PRIVATE -Wl,-undefined,dynamic_lookup)

So there is a bit of circular dependency here:

Yeah, there's a library layering problem there IMO. But good point about -Wl,-undefined,dynamic_lookup, I'll try that.

Any progress on this issue? I am currently struggling source building the gRPC Conan package with clang 18.1.8 on macOS.


Review gem dependencies for upgrade opportunities and security concerns.

Review gem dependencies for upgrade opportunities and security concerns. Restrict gems from pulling in major version updates.

@cbisnett
In the process of adding Appraisal, we've incremented the required ActiveSupport version to >= 4.2.2.
At this time, there are no gem-related security concerns to address.
I'm going to close this Issue as resolved unless you think of anything else we should address. Thanks!


feat: adds piped to the cluster

Description of the change
Adds piped project that can replace the inividious project

🦙 MegaLinter status: ✅ SUCCESS

Descriptor
Linter
Files
Fixed
Errors
Elapsed time

See detailed report in MegaLinter reports
Set VALIDATE_ALL_CODEBASE: true in mega-linter.yml to validate all sources, not only the diff
MegaLinter is graciously provided by


Automate and improve issues transfer

Following your suggestion to open an issue to make a sugestion, here's one idea:
"Automate and improve issues transfer"
Here's a goal:

be able to move all the issues of one repo to another (over 10K issues of the same org)
It should not send notifications
It should mimic the behavior of the github "transfer issue" button : create redirects, keep comments, all PR/interactions
keep milestones, labels, assignees ...

We got a few parts here and there:

https://docs.github.com/en/graphql/reference/mutations#transferissue
https://docs.github.com/en/rest/reference/issues#create-an-issue

we can pass labels ans miletsones

https://docs.github.com/en/github/managing-your-work-on-github/transferring-an-issue-to-another-repository

through the UI, magic "transfer issue" button
This will create a redirection from the old rep URL to new rep URL and this is a must.

https://github.com/ahadik/git_mover
https://gist.github.com/jonmagic/5282384165e0f86ef105

does not notify

But no definite solution! What would be your take on it?
Maybe this could be a nice experiment to stream about.

Awesome for this idea to start an episode!

we have this org to do some testings :

https://github.com/Another-Practice-Organization

two repositories

https://github.com/Another-Practice-Organization/repository1
https://github.com/Another-Practice-Organization/repository2

Github support confirmed me this endpoint is still working ans won't create notifications: https://gist.github.com/jonmagic/5282384165e0f86ef105
But also confirmed this endpoint https://docs.github.com/en/graphql/reference/mutations#transferissue is the way to "transfer" issues

Sounds great, thanks for confirming! I'd prefer to use the official transfer issue APIs, it will make it future proof and more usable to others, does that work for you?
I'd suggest we rename the repositories

template-issues-source
template-issues-target

Then create some issues in the source, with labels, milestones, assignees
then create some of the labels and milestones in the target repositories to make sure the script handles conflicts correctly.
Next we have to create a script that creates a new repository based on an existing one, including issues, labels, milestones, and collaborators, for our use case. We could make this part of the show, or the first part of it, might be interesting in and of itself?
How is your availability? I'm trying to do two shows per week, I've nothing scheduled after this week yet:
https://www.twitch.tv/gregorcodes/schedule

Nice!
The transfer issue API would be the way;
I think for a few scenarios, having the redirect links is necessary (from the old issue in old repo to the new issue in new repo); it would have been a requirement in my case.
The repositories have been renamed (and I discover in the process the "template repository" option)
Ok to generate some content in both, I'll do it later today;
I'd also like to add "projects" as well while we're at it... what do you think?

Next we have to create a script that creates a new repository based on an existing one

Or "targets another repository" instead of "creates a new repository" ;)
we'll transfer issue from template-issues-source to existing template-issues-target
(the script  could have a flag to create a new repository first though)
like @Zimmi48 mentionned we'll have to check for notifications (what they are when we transfer the issue/comment/assign) AND the rate limitations for mass transfer (I'm thinking of 10k issues transfer); is there such a thing as an organization/repository wide notification setting that we could toggle with the script?

As for the show I'll try to watch it live (any time after 1PM PDT) or post-live for sure!

the rate limitations for mass transfer

That's a good point. One of the advantages of the issue import API was precisely to get higher rate limits. Notification-triggering actions generally have lower rate limits. As I note in the blog post mentioned above, "the GitHub API was limiting issue creation to 300, after what it refused any new posting for the next 30 minutes" before I converted it to use the issue import API.

Nice post and details on this blog post
I didn't know about the updated_at field! And good job keeping the numberings as well. In the use case I've in mind it won't be possible and that's why a transfer with redirects will do the trick.

This API does not allow you to choose the author of issues / comments
and that's why we should avoid this API then. The transfer feature on the other end (triggered through the UI at least) does move a lot of things like one would like!

sorry I'm a little late, but I'm planning on doing a show tomorrow at 1pm, you are all welcome to join! I'll post details soon. But I'll focus on creating a script that will copy an existing repository including issues, labels, assignees and milestones, as a means of preparation for another show about the actual issue transfer script

Massive issue transfers from anywhere to anywhere without triggering notifications is also possible with the issue import API but it doesn't keep the authors of the issue and comments (see https://gist.github.com/jonmagic/5282384165e0f86ef105 / https://www.theozimmermann.net/2017/10/bugzilla-to-github/ for details).

I only now realize this is not the original request by @xavt. The issue import API is not helpful when the source of the issues is another repository, because the import API does not close existing issues in that source repository.
I'm happy to make a separate show about the issue import API once it's documented by GitHub and considered stable. Until then it's better to reach out to support directly, because they have much more information on the APIs than I do.
@Zimmi48 Can you reach out to support and ask them about the state of the issue import API, if there is any plan to make it official?

I created an issue for tomorrows show at 1pm Pacific Time. @xavt would you like to join?

@gr2m hi! Well I stumbled into the community and making every effort to be righty within the community. I may have upset some people along the way. I want learn as much as possible but here are my priorities. Secure email w/ ProtonVPn<EMAIL_ADDRESS>I need an API key, I also think I had one with google but am a little reluctant to be outside of GitHub or DevHub. I am sure I can get a lot out of it

Secure email w/ ProtonVPn<EMAIL_ADDRESS>
I'm not sure what that means? Is the email domain @protonvpn.com? Can you join 15 min before the show (12:45pm pacific time) to chat? I just want to make sure we are on the same page with today's episode

I hope I can get back there

@johnjsatter I got an error message

Yea. It’s not set up yet. I’m sorry. This is the only place I can communicate

On Thursday, I'll do a show on actually creating the script:
https://github.com/gr2m/helpdesk/issues/20
You can ask questions there if you like, before and after the show


Update Generic Pages “ぺーじ１”

Automatically generated by Netlify CMS

👷 Deploy Preview for strong-beijinho-c4d917 processing.

Name
Link

🔨 Latest commit
0753fd8b5877a1e13c30bdad74ce014b8387842f

🔍 Latest deploy log
https://app.netlify.com/sites/strong-beijinho-c4d917/deploys/65eab7d9366dcc00084c73ed


Wizard Contract Fix

About the PR
Fixes wizard contract instantly ghosting after selecting role
Adds new categories to wizard uplink
Why / Balance

Technical details

Media

[ ] I have added screenshots/videos to this PR showcasing its changes ingame, or this PR does not require an ingame showcase

Breaking changes

Changelog

real


Update Readme.md

I have added  the last line

Thank you for your contribution, but I don't think this will fit with our project


Community Meeting September 20, 2023

Overview
At 10am Eastern, 7am Pacific, 2pm UTC; find your time
Video call link: https://meet.google.com/ved-ivnv-aen
dial-in: (US) +1<PHONE_NUMBER>
PIN: 873 550 579#
More phone numbers: https://tel.meet/ved-ivnv-aen?pin=7872592963542&hs=1
Add topics you'd like to discuss below!

We should probably revisit the error wrapping discussion and make a final decision.
Summarizing:

Decide we want to adopt this error handling strictly and enforce its use everywhere.
Decide we don't want to adopt it and remove it entirely.
Do nothing.
Do something in between, e.g. decode to use the error wrappers for errors that are more likely to be customer facing, but don't enforce it strictly everywhere, (and somehow document this to help contributors including ourselves understand it)

To explain what we mean by the error wrapping:
DRAMA123 := e.NewError("DRAMA123", "Some drama", e.ErrorExitStatus)
...
return nil, DRAMA123.CausedBy(err)

versus:
return nil, fmt.Errorf(“Some drama caused by %w”, err)

Advantages:

Clear, unique and potentially google-able error codes.

Disadvantages:

A potential maintenance burden of creating and maintaining all the unique errors, usually separate from where they're used.
An unfamiliar technique which new contributors will need to understand and adapt to.

Doing nothing has disadvantages also:

The noisy lint output which we continually ignore. (This could be addressed separately.)
The untidiness and maintenance burden of the ongoing inconsistency.

Today, our policy rules emit an object for a violation/warning. This object contains the following:

code: The unique code for the policy rule, includes the package name.
msg: The error message.
collections: A list of collections the policy rule belongs to.
effective_on: A timestamp for when the policy rule is actually effective.
term:  Optional. An identifier for the particular failure, e.g. the name of the missing required task.

code, collections, and effective_on can be statically determined by inspecting the policy source.
Although msg comes from an annotation, it often is modified by the policy rule to include more information. (String formatting).
term is very much dynamically determined at runtime.
Also, in order to be able to show successes, the cli parses the policy rules in order to gather annotations, pkg name, etc. In other words, it already knows the value of code, collections, and effective_on for each policy rule.
Let's ignore term for a moment. It's not widely used (but it's very helpful in some cases!). We could, in theory, simply return a string from the policy rules. Everything else could be filled in directly by the cli.
For supporting term, we could continue to accept an object.
I propose the following formats as being valid things the policy rule can return and still enjoy the full set of behavior they do today:

<string>: just the error message.
{"msg": <string>}: Error message wrapped in an object. Let's keep backwards compatibility and why not?
{"msg": <string>, "term": <string>}: Same as above but with the optional term attribute.

I also propose dropping the failure_msg custom annotation. Just define this within the policy rule instead.
One of the benefits of this approach is that it lowers the entry barrier for policy authors.
Consider this policy rule:
# METADATA
# title: Known attestation type found
# description: >-
#   Confirm the attestation found for the image has a known
#   attestation type.
# custom:
#   short_name: known_attestation_type
#   failure_msg: Unknown attestation type '%s'
#   solution: >-
#     Make sure the "_type" field in the attestation is supported. Supported types are configured
#     in xref:ec-cli:ROOT:configuration.adoc#_data_sources[data sources].
#   collections:
#   - minimal
#   - redhat
#   depends_on:
#   - attestation_type.pipelinerun_attestation_found
#
deny contains result if {
	some att in lib.pipelinerun_attestations
	att_type := att._type
	not att_type in lib.rule_data("known_attestation_types")
	result := lib.result_helper(rego.metadata.chain(), [att_type])
}

It could be rewritten as:
# METADATA
# title: Known attestation type found
# description: >-
#   Confirm the attestation found for the image has a known
#   attestation type.
# custom:
#   short_name: known_attestation_type
#   solution: >-
#     Make sure the "_type" field in the attestation is supported. Supported types are configured
#     in xref:ec-cli:ROOT:configuration.adoc#_data_sources[data sources].
#   collections:
#   - minimal
#   - redhat
#   depends_on:
#   - attestation_type.pipelinerun_attestation_found
#
deny contains result if {
	some att in lib.pipelinerun_attestations
	att_type := att._type
	not att_type in lib.rule_data("known_attestation_types")
        result := sprintf("Unknown attestation type '%s'", [att_type])
}

But the main benefit here is that we remove the duplicated logic between success and violations/warnings when it comes to determining code, collections, and effective_on.

We have an open issue around exploring the format of git commits. Let's talk about it.
options:

do nothing, git commit messages "are what they are"
enforce strict adherence to conventional commit formats similar to other RHTAP projects
establish a minimal content that must be present in git message summary or body

https://drive.google.com/file/d/1jzEiBysEuKfcJmKb5COBXTZAlunBBkyG/view?usp=drive_link


Bug: Android 12 and bottom navigation bar

Hey there,
thanks for the plugin!
I recently discovered an issue with Android 12 and bottom navigation bars. In this case the plugin returns e.g. 41 pixel for the bottom inset, although there is no real inset.
Is this something that can be fixed? Or can I detect the navigation bar somehow?
I am thankful for all inputs :)

I have experience the same issue on Android 11 on a Nokia 8.1. There is a bottom inset, even though the app view stops before the safe area:

Try await SafeArea.setImmersiveNavigationBar();. That fixed the problem for us!

Try await SafeArea.setImmersiveNavigationBar();. That fixed the problem for us!

Amazing, thanks a lot for your fast response! 🚀 That worked as well for me. Many thanks!


Feature request: support for "plugins" key in config.json

Please add a button to the Plugins screen for each plugin (next to the UNINSTALL) to support for enabling/disabling the loading of installed plugins.  This would manage the "plugins" key in config.json.

That would be nice 👍

This would manage the "plugins" key in config.json.
Not really to the topic, but even after extensive use of google, what is that plugin key? Can’t find any info on syntax and where it belongs.

It belongs at the top-level object:
{
  "bridge": {
    ...
  },
  "plugins": [
    "homebridge-config-ui-x",
    "homebridge-hue"
  ],
  "platforms": [
    {
      "platform": "config",
      ...
    },
    {
      "platform": "Hue",
      ...
    }
  ]
}

When present, it whitelists the plugins to load at the very start of homebridge (before parsing the platforms and accessories arrays).  This is particularly useful when running multiple instances of homebridge on the same server, with a single install directory (typically /usr/lib/node_modules) for all plugins.  You only want each instance to load "their" plugins, and ignore the plugins for the other instances.
Look at the log to understand homebridge's startup sequence:

Homebridge first reads config.json:[5/24/2019, 2:58:01 PM] Loaded config.json with 0 accessories and 2 platforms.

Then, it loads the plugins (allowing them to register themselves):[5/24/2019, 2:58:01 PM] ---
[5/24/2019, 2:58:01 PM] Loaded plugin: homebridge-config-ui-x
[5/24/2019, 2:58:01 PM] Registering platform 'homebridge-config-ui-x.config'
[5/24/2019, 2:58:01 PM] ---
[5/24/2019, 2:58:01 PM] Loaded plugin: homebridge-hue
[5/24/2019, 2:58:01 PM] Registering platform 'homebridge-hue.Hue'

Then, it initialises the platform plugins mentioned in platforms (and the accessory plugins mentioned in accessories):[5/24/2019, 2:58:01 PM] ---
[5/24/2019, 2:58:01 PM] Loading 2 platforms...
[5/24/2019, 2:58:01 PM] [Config] Initializing config platform...
[5/24/2019, 2:58:01 PM] [Hue] Initializing Hue platform...

Load homebridge-otgw.OTGW
Load homebridge-ws.WS

Thank you very much for that excellent explanation.  I had a look on the homebridge github page but couldn’t find anything about it. Going to implement this today. Thanks again.

+1 for this, with many instances and many different plugins it can become very tedious to find the right plugin/instance, especially when using the config-ui-x panels.
But I guess with config-x being a separate server now it would make more sense to support multiple Homebridge instances right from one config-ui-x instance..

+1 for this.

The solution to this feature request will land in the next release. While not exactly what was asked for, it achieves the same goal.
It will require Homebridge 1.3.0-beta.47 or later to support the new disabledPlugins array (https://github.com/homebridge/homebridge/pull/2775).
As part of these changes users will be able to toggle enable/disable a plugin, their config will be able to remain in the config.json and not stop Homebridge from loading.

The solution to this feature request will land in the next release. While not exactly what was asked for, it achieves the same goal.
It will require Homebridge 1.3.0-beta.47 or later to support the new disabledPlugins array (https://github.com/homebridge/homebridge/pull/2775).
As part of these changes users will be able to toggle enable/disable a plugin, their config will be able to remain in the config.json and not stop Homebridge from loading.

Thanks, @oznu.

Thanks, @oznu.