Add vlast.m mask instruction?

The "V" instruction set provides the vfirst.m instruction for getting the index of the first mask bit.
But there is no instruction for getting the index of the last mask bit. That means there is no vlast.m.
Example use case: memrchr()
Similarly, the mask modification instructions (such as vmsbf.m) are left biased. Perhaps it also makes sense to add variants that work from the right.

Mask variants counting "from the right" expose VLEN differences.

On 2020-03-20 10:57 a.m., Krste Asanovic wrote:

Mask variants counting "from the right" expose VLEN differences.

However:

The vpopc.m instruction counts the number of mask elements of the
active elements of the vector source
mask register

This implies vl applies to vpopc.m.
Similarly, does vfirst.m not use vl to determine the point that the scan
for a set bit finishes?
In any case, there is no reason that  vlast.m could not use vl to
establish the  last element, and then it is does not expose VLEN any
more than any other instruction.

The following loop lives-out "c" variable, and now that we have vfirst.m to find the first lane set, why don't we have vlast.m to find the last lane set for this case? Here "c" expect the last lane because only the newest update is valid.
    for (int i = 0; i < num; i++) {
        if (a[i] == b) {
            c = a[i];
        }
    }

This could be added, but it does not really work well with length-agnostic stripmining when loops are stripmined in the forward direction.   Consider the example loop, which does not have a "break".  Each strip could have one or more matches with b, and we can find the last match in that strip and set a mask bit, but that would not really help with the overall loop. For the example loop, you would simply stripmine with a VLMAX vector of partial matches recording any match index and corresponding value of c.  At the end of the stripmine loop, you would max-reduce the index vector then read out the c value at the corresponding lane index.  I don't see how using flags would make this go faster, unless you knew the whole vector fit in VLMAX.
The existing "set X first" flag instructions are used for while loops that need to exit, but don't want to wait for scalar code to see and handle exit.  The "find last" loop structure shown has to execute all loop iterations anyway.

I tried to write assembly as below based on the idea you just presented:
    la          a0, num
    ld          s1, a                # a[]
    la          a1, b                # b
    vmv.s.x     v3, c                # initial c value to v3[0]
loop:
    vsetvli     t0, a0, e32          # t0 = vl, a0 = N, 32-bit
    vle32.v     v1, s1               # v1 = v_a
    vmseq.vx    v0, v1, a1           # a[i] = b?
    li          t1, 0                # initialize slidedown value to be zero
    vlast.m     t1, v0, v0.t         # last index of a[i] = b lane, t1 remains zero if v0 is none
    vslidedown  v3, v1, t1           # slide v_a down until v[0] is the last (no change if t1 = 0)
    sll         t2, t0, 2            # Multiply
    add         s1, s1, t0           # Bump Pointer
    sub         a0, a0, t0           # Decrement count by vl
    bnez        a0, loop             # Any more?

    vmv.x.s     a2, v3               # live-out c from v3[0]

I could not make this go faster but it looks like we just need to add on the two li and vslidedown instructions, and this kind of loop has to execute all loop iterations anyway.

The C code you gave:
for (int i=0; i<num; i++) {     if (a[i]==b)     {         c = a[i];     } }
reduces to "if any a[i]==b, c=b", which does not actually
need the index, so I assumed a more complex case where index of last
match is returned:
for (int i=0; i<num; i++) {     if (a[i]==b)     {         c = i;     } }
The assembly code for the method I described looks like this:
    # a0 = num
    # s1 = a
    # a1 = b
    # a2 = c

    vsetvli t0, a0, e32, ta,ma  # Agnostic on first iteration
    mv a3, t0    # Remember largest vector length used
    vid v2       # Put element index into v2, assume 32b for indices
    vmclr.m v3   # Clear "Found" flag

  loop:
    vle32.v v1, (s1)
    vmseq.vx v0, v1, a1
    vmerge.vvm v4, v4, v2, v0.t # Remember new found index
    vmor.mm v3, v3, v0          # Remember this element position has found match
    vadd.vx v2, v2, t0          # Bump indices
    sub a0, a0, t0
    slli t2, t0, 2
    add  s1, s1, t2
    vsetvli t0, a0, e32, tu,mu # retain tail and masked-off elements
    bnez a0, loop

    vsetvli x0, a3, e32 # Recover largest vector length used
    vfirst.m t0, v3  # Any matches?
    bltz t0, exit   # If not, skip assignment to c

    vmv.s.x v1, x0               # Initialize scalar for reductions
    vmv.vv v0, v3                # Move "found" mask to v0
    vredmaxu.vs v1, v4, v1, v0.t # Find max index over matches.
    vmv.x.s a2, v1               # Get index in scalar

   exit:

Note the loop runs at full vector speed with no cross-lane operations or reductions.  It's only the final reduction step that gets the max final index.
The vfirst will be faster than vpopc on most implementations when determining "any match?" as it can early out.
The second and later iterations use a "mu,tu" setting because you need to retain the partial reduction values in v4.  Some implementations might benefit from adding "ta" to the other vector instructions (this would be an example needing fine-grained switching of agnostic setting).  The other vector instructions are umasked so "ma/mu" choice is moot.

Hi Krste,
It looks like you are assuming "last" index being "max" index.
However, if the loop is reversed:
for (int i=num - 1; i >= 0; i--) { if (a[i]==b) {return i; } }
which is quite similar to "memrchr" Gsauthof mentioned, vlast can be same functional as vfirst in forward looping.

The natural way to implement the backwards search is with a negative stride and vfirst.m.
I agree that might be less likely to run well on some implementations than using positive unit-stride memory loads, but some implementations might optimize negative unit-stride, and if the memory accesses in loop were not unit-stride then probably equal throughput regardless of sign of stride.
For the case where the while loop (i.e., data-dependent exit) only has negative unit stride, I could see that vlast.m might be helpful but would also need matching vms*l  functions for general while loop case (and possibly some different form of fault-only-first instructions).  When the loop also has strided or scatter-gather accesses, it will be difficult to map the loop, and it would probably only really work to implement as negative stride code.
I don't feel this is a strong case to provide vlast.m (only useful for while loops with only negative unit-stride memory accesses in loop), but am happy to look at other example uses.

I'm going to close for v1.0 as no real use case presented.


Add "Edit project" command to Project menu

Currently (in VS 2017 RC), the Edit Project command is only available in a project's right-click menu. Could this possibly be added to the Project menu in the menu bar as well? This will make it easier for me to access this command using only the keyboard. Thanks!

Yep, definitely.
@333fred I think we should reuse the existing edit project command, and add it to both Project and Project context menus. The vsct is located /src/appid/inc/SharedCmdPlace.vsct in the VS tree, see my commit 655368c7 for an example.

This was fixed in #1065.


Consider bumping version

Commit fdc675e upgraded a few dependencies, including vueify 9.2.3 required to use Vue 2.0, but hasn't bumped the package version.
The only way to use vue-brunch with Vue 2.0 support is to install it from git.
Please consider bumping the vue-brunch version and publishing it.

Sorry about this, i have a lot of repos to maintain so tend to do development in waves. I will get right on this once i get back from work.

Upon closer inspection, it would be better to maintain support for 1.x for the time being (allowing time for people to migrate) so will start working on a 2.x branch instead.

I have reverted these changes for now, i will keep you posted.

Don’t quote me on that, but the new vueify is compatible with both 1.x and
2.x.
The problem with the published version is that it is not compatible with
2.x, so publishing the package with upgraded deps is a win-win.
On 16 August 2016 at 14:30:22, Nathaniel Blackburn<EMAIL_ADDRESS>wrote:
Upon closer inspection, it would be better to maintain support for 1.x for
the time being (allowing time for people to migrate) so will start working
on a 2.x branch instead.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/nblackburn/vue-brunch/issues/2#issuecomment-240100420,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAqHyO079CF7-99OEr1tEI_IML1FhVVZks5qgbpggaJpZM4JlTxz
.

Please don't revert the changes, or move them in a separate branch at least, or I can't use this package with vue 2.0 anymore and my code is broken.

Updated master with 1.x changes and created a dev branch which has updates for 2.x.


/skip command admin only

Issue found by @Cat66000
The /skip command is admin-only and the error message throw is not clear
TODO :

Change /skip to a vote skip and grant the permission to everyone
Create a /forceskip admin-only

/skip & /forceskip are now available :)

For /skip, half of the people present in the voice channel must make the order, the bot is obviously not taken into account in the calculation.


Show legend for postcommit job duration.

Couldn't find a way to filter postcommit job duration on go/beam-metrics, suspecting b/c legend is disabled.

r: @Abacn


interest check on basic auth for templates routes

Due to the way I have my instance deployed, I’d like to protect the web UI routes with basic auth. Is there interest in incorporating an optional admin password for routes that render templates?  If so, I can open a draft PR for more discussion based on the early implementation I have.

I'm not against this.
If we were to include basic authentication it would be best to make it an opt-in feature. Ideally with a UI to configure and change the Basic Authentication setup which then gets printed into the config.yaml file where all other server settings are persisted.

I'm not against this.
If we were to include basic authentication it would be best to make it an opt-in feature. Ideally with a UI to configure and change the Basic Authentication setup which then gets printed into the config.yaml file where all other server settings are persisted.

I'm of the opinion to keep it simple - a lot of the "features" seemingly have cluttered the code, but 🤷♂.  Like @tmack8001 said, I'd definitely make it opt-in though. Worst case, just make a auth branch and maintain any master updates?  There are several users now so if this isn't a wide spread feature I don't want it breaking basic functionality.


Continuous imu

Well, it works now. Idk if it's state of the art anymore, but it's state of the working.

hehe, looks good


Update example with Octokit Checks API methods

Octokit supports creating and updating checks by using create_check_run and update_check_run: https://rdoc.info/gems/octokit/Octokit/Client/Checks

Why: the example is outdated and the cited gem now supports appropriated methods.

What's being changed: use create_check_run and update_check_run of the used gem instead of post and patch to the API.

Check off the following:

[x] I have reviewed my changes in staging. (look for the deploy-to-heroku link in your pull request, then click View deployment)
[x] For content changes, I have reviewed the localization checklist
[x] For content changes, I have reviewed the Content style guide for GitHub Docs.

@matiasalbarello Thanks so much for opening a PR! I'll get this triaged for review ⚡

Very good and nice

It looks like our new action inadvertently closed this 🙃 Sorry about that! Reopening and triaging this for review 💛


skimage error when opening 3D tiffs

Hello, first of all thanks for the ice tool.
I am trying to work with flowdec but got a relatively simple error:
from skimage.io import imread
image = imread('test_small.tif')
TiffPage 0: TypeError: read_bytes() missing 3 required positional arguments: 'dtype', 'count', and 'offsetsize'
I do realize that the error is not from flowdec but from the underlying tifffile library, the problem is that to solve the error I need to update tifffile as posted here but flowdec does not support the latest skimage. I guess is a version issue, any ideas?
I'm using this:
python ir 3.6.13
skimage 0.17.2
tifffile 2020.9.3
I have to say that it took a while to get flowdec working since there were many issues with TF anf the drivers and versions etc etc.
any ideas are welcome,
Alvaro

Hi, I'm adding to this issue. Is there a chance flowdec can be used with a newer Python version? I tried to use the aicsimageio library to read/load data but had an error (which I tried to solve but got more errors). I tested creating an environment with python 3.8 and had a smooth install of aicsimageio.

@alcrevenna I see your location is Monterotondo, I think we may be working for the same organisation at different sites :)


Extend webkit browser plugin interface

Please wait with merging until Ozgur also had a chance to look at this


Unchanged files with check annotations

If a checkstyle report contains issues for files not modified in the PR, these issues are reported in the PR at the end, under a section "Unchanged files with check annotations ".
It would be great to be able to only annotate the files modified in the PR.
I have no idea if this is something that has to be done:

In the previous step (prune the checkstyle reports before this Github action intervenes)
By this Github action
Some setting somewhere in Github 🤔

I open the issue here in case anything can be done about it here.
Great Github action btw! 👍

More info about this github feature: https://developer.github.com/changes/2019-09-06-more-check-annotations-shown-in-files-changed-tab/


Housekeeping and static code analysis

@fabikonsti I added some static code analysis and moved to the pyproject.toml. Maybe you can have a quick look. I can do the changes for your code also, afterwards, were only minor changes.

@fabikonsti I added some static code analysis and moved to the pyproject.toml. Maybe you can have a quick look. I can do the changes for your code also, afterwards, were only minor changes.

Looks good. I think both PRs can be merged into the main. In the policy gradient PR, I added torch to the requirements.txt. This file does not exist anymore. Hence, we must add it to the pyproject.toml as well.


Remove/generecize includes on homepage

The two includes at the bottom of the homepage are OTF specific.

Definitely a thing that needs to be fixed.


Oracle Free Tier 4 core - 24 GB VM

Yes, oracle offers a very generous 24 GB with 4 ARM Core VM. It can be broken down into multiple smaller instances too. I am using it currently and I believe many people will find it useful!
Image from Oracle Free Tier:

Excerpt from Oracle Always Free Resources:

Available Shapes
Micro instances (AMD processor): All tenancies get up to two Always Free VM instances using the VM.Standard.E2.1.Micro shape, which has an AMD processor.
Ampere A1 Compute instances (Arm processor): All tenancies get the first 3,000 OCPU hours and 18,000 GB hours per month for free for VM instances using the VM.Standard.A1.Flex shape, which has an Arm processor. For Always Free tenancies, this is equivalent to 4 OCPUs and 24 GB of memory.

Imho worth adding to readme.

some people claim the ARM machine also has faster networking, which would be another benefit


File size validation

While I'm sure it's controversial if file size in metadata is reliable like #100, I think file size validation is still   a good feature for convenience.
So I've roughly monkey-patched valid? of Attacher class.
module Refile
  class Attacher
    def valid?
      @errors = []
      @errors << :invalid_extension if valid_extensions and not valid_extensions.include?(extension)
      @errors << :invalid_content_type if valid_content_types and not valid_content_types.include?(content_type)
      @errors << :exceeds_allowed_size if @metadata[:size] and @metadata[:size] > 1024 * 1024 # file size should be within 1MB
      @errors << :too_large if cache.max_size and size and size >= cache.max_size
      @errors.empty?
    end
  end
end

I'd like to know if there's better way to validate the size of the file to be uploaded or if you are planning to add file type validation feature.

We already have validation of size, simply set max_size in your backend. It's the line below the one you added ;)

It's actually documented in the README:

Backends also provide the option of restricting the size of files they accept. For example:
Refile.cache = Refile::Backend::S3.new(max_size: 10.megabytes, ...)

Ahh, yes true, it's exactly my bad. I should have read a bit more :sob:
Anyway thanks for the information!


Make use of SHA256 digests explicit

Some platforms do not default to using SHA256 for digests, instead
using MD5. On one of those platforms, a token will fail verification
at the provider since it explicitly verifies using SHA256.

/lgtm


LM Studio partial support

What happened?
Hi,
LM Studio, with a locally running model, is working by using OpenAI with a Preset of Ollama or Lama Cpp and changing the port to the default LM Studio one (1234). The prompts are being generated but always end up with the error "Unknown API response. Code: 200, Body:".
Could you please tell me how to fix this or add support for responses being generated by LM Studio ?
Thanks for the great plugin !
Nicolas
Relevant log output or stack trace
Unknown API response. Code: 200, Body:

Steps to reproduce

Run LM Studio with a model locally
Start a server in LM Studio
Configure CodeGPT to target that server (OpenAI + Ollama or Lama Cpp Preset + change port to 1234)

CodeGPT version
2.4.0
Operating System
Windows

Thank you for reporting!
The error appears to be related to the OkHttp library and how it processes the event streams. For some reason, LM Studio seems to append '%' at the end of the final response, causing OkHttp to fail. I am not yet sure what the fix is.

Maybe @lmstudio-ai  can sort this out on their end...

https://github.com/langchain4j/langchain4j/issues/670 related issue.
The error java.lang.IllegalArgumentException: byteCount < 0: -1 can be reproduced by removing the empty newlines from the mocked response: LocalCallbackServer.java#L111

Temporary fix: https://github.com/ai-for-java/openai4j/commit/e09682d0dfb1c260073248665edc85d19b473393
Will be included in the next release on monday (11 March)

Same problem here, any suggestions on how to temporarily fix it?

Hello, everyone and especially @lucacri & @DiAifU.
If it's still relevant - because LM Studio has OpenAI-like server API - CodeGPT partially supports it via "Custom OpenAI" provider, I just checked it.
Settings

Start LM Studio Server and remember model name

Select Custom OpenAI provider in CodeGPT

Point your Custom AI provider to localhost

Important! For code completions you model should support FIM pattern
Result demo

Awesome, thank you!
We could add a preset template for it, similar to how others are done:
https://github.com/carlrobertoh/CodeGPT/blob/master/src/main/kotlin/ee/carlrobert/codegpt/settings/service/custom/template/CustomServiceTemplate.kt


Moving an opaque custom type and replacing it by an alias to the moved custom type is considered a breaking change

Quick Summary: Moving an opaque custom type and replacing it by an alias to the moved custom type is considered a breaking change.
SSCCE
Imagine we have a published package exposing module Exposed
module Exposed exposing (CustomType)

type CustomType = Constructor

and we then

Move CustomType to a non-exposed module NotExposed
Replace the CustomType in Exposed by an alias to NotExposed.CustomType

module NotExposed exposing (CustomType(..))

type CustomType = Constructor

----

module Exposed exposing (CustomType)

import NotExposed

type alias CustomType = NotExposed.CustomType

This change is, according to elm diff and elm bump, considered to be a breaking change, even though it can't introduce compiler errors, as the type was opaque to begin with.
This can be a problem, because it turns some internal refactorings into breaking changes. In the context for which I am creating this issue, I am refactoring the jfmengels/elm-review package, and am trying to avoid breaking changes, as that will require all packages that use my package to be updated to the new version.
This behavior incentives package authors (or me at least) to turn custom types into aliases to internal custom types, just in case we need to do so later, to avoid unnecessary breaking changes.
Proposal
Make changing an opaque custom type into an alias to something a non-breaking change. I believe there are some cases where the change might result in a minor change, for instance when the aliased element is a record (meaning it can now be used as a function).
The other way around should also not be considered a breaking change, turning an alias to a custom type into the previously non-exposed custom type. If after that change the custom type is opaque, then this warrants a patch change. Otherwise, if it is not opaque, this should be a minor change, as we introduced the possibility to import and use the type's constructors.
Version details

Elm: 0.19.1
Browser: NA
Operating System: Linux Ubuntu

Additional Details
I believe this issue can be batched with https://github.com/elm/compiler/issues/1978

Also happened when I changed a type alias into an opaque type

Related / duplicate of https://github.com/elm/compiler/issues/1895


Parse (active) view

Parse the active view so they can also be used as options.
import capture

options = capture.parse_active_view()
capture.capture(**options)

Technical artists can also specify a specific camera and panel using capture.parse_view(panel, camera).

So clean, thanks Roy. Have you tested it, it works and all? Could you add a few tests to tests.py?

Have tested it manually. Will commit tests in a bit.

Tests are added.

Great work; we'll be able to add a bunch of more tests, once the apply_view is implemented as well. They should take each other out 1-1.


Fix warnings

Looks like this change is not compatible with Xcode 9

We're using Xcode 10.1. How important is legacy Xcode support? Usually iOS teams are good about upgrading to the latest stable release

I can just upgrade the Xcode to 10.1 in bitrise to see what warnings surface. Thanks a lot for this @bootstraponline.

We're using Xcode 10.1. How important is legacy Xcode support? Usually iOS teams are good about upgrading to the latest stable release

can you update the travis.yml to only run with xcode 10?

Travis is RIP. I think we should standardize on Bitrise.
https://news.ycombinator.com/item?id=19218036
Travis has always been painful on mobile, now it'll never get any better. If I get this working on Bitrise, is it necessary to revert the changes still? Xcode makes them automatically so undoing them for each commit seems a bit painful.

Travis is RIP. I think we should standardize on Bitrise.
https://news.ycombinator.com/item?id=19218036
Travis has always been painful on mobile, now it'll never get any better. If I get this working on Bitrise, is it necessary to revert the changes still? Xcode makes them automatically so undoing them for each commit seems a bit painful.

we could evaluate that but right now we are relying on Travis CI for all the submissions.

To be more precise, anything that breaks Travis may risk being reverted by our automation system.

I will work on fixing the CI process for eDistantObject

I setup the bitrise job here:
https://app.bitrise.io/app/29ae3acccf8b3a0f#/workflow
I pushed a new commit with the requested revisions.

I setup the bitrise job here:
https://app.bitrise.io/app/29ae3acccf8b3a0f#/workflow
I pushed a new commit with the requested revisions.

awesome, thanks!


replace use of cl_oo_abap_doc_reader

#160
#108
files in deps/ added temporarily for syntax check, they will be removed later

its alive! 👽


Friday Mix being incorrectly looked up on Spotify

The Friday mix by Djanaba is being looked up on Spotify despite it being unlikely to exist. The result is an offer completely unrelated song being returned.
Bot:

Triplej History:

for now I would propose a block list for playlist names. This is to be provided in yaml at build time and it will simply skip any special mixes


process.env Support

Summary
In my App I need to know the User's home directory, usually stored in $HOME
But process.env is basically empty in RN-MacOS
Motivation
I expect process.env to work in a framework like RN-MacOS. Otherwise, how would I be able to determine the user's name and home dir location?
Basic Example
When I render {JSON.stringify(process.env)} in my App.js, it prints {"NODE_ENV":"development"}
Open Questions
No response

I think this is an issue with node.js ? If you use the same API outside of React Native on macOS, do you get a useful return?

NodeJS always has the process.env set. (That is why I expect it to work)
To test on your terminal: node -e "console.log(JSON.stringify(process.env))"

Is there any workaround to determine the user's home directory? Right now, that is the only env variable I need 🤷♂

process is a node object.  Its not something available in react-native - on any platform.
I assume it would be relatively trivial to write a nativemodule to provide the information you need to the JS.

Closing as this seems resolved. The best course of action is to write a native module to support the desired behavior as it's unlikely React-Native will want to support this.


Digest mismatch when fetching module version v1.9.0

Description
When using golang to fetch version 1.9.0 of cosign, the computed digest is not consistent between different environments. This causes portability issues in go.sum of projects using cosign:
verifying<EMAIL_ADDRESS>checksum mismatch
	downloaded: h1:hzLtZh62rPrGfPUk3XwG6qHwxI6bLC1S6seYUGRE420=
	go.sum:     h1:E1Kkc6I99dNCGfjwU0B7XTJNEpltNi2GUVEQcswY2Ow=

SECURITY ERROR
This download does NOT match an earlier download recorded in go.sum.
The bits may have been replaced on the origin server, or an attacker may
have intercepted the download attempt.

Depending on your environment the hashes may be reversed.
Here's a simple reproducer:
mkdir -p /tmp/test{1,2}/{test,cache,modcache}
cd /tmp/test1/test
go mod init test1
GOCACHE=/tmp/test1/cache GOMODCACHE=/tmp/test1/modcache GOPROXY="direct" go get<EMAIL_ADDRESS>cat go.sum

cd /tmp/test2/test
go mod init test
GOCACHE=/tmp/test2/cache GOMODCACHE=/tmp/test2/modcache GOPROXY="https://proxy.golang.org,direct" go get<EMAIL_ADDRESS>
echo 'ANY OUTPUT BELOW MEANS A PROBLEM:'
diff /tmp/test1/test/go.sum /tmp/test2/test/go.sum
diff -r /tmp/test1/modcache /tmp/test2/modcache

The output of the diff commands is:
1c1
< github.com/sigstore/cosign v1.9.0 h1:hzLtZh62rPrGfPUk3XwG6qHwxI6bLC1S6seYUGRE420=
---
> github.com/sigstore/cosign v1.9.0 h1:E1Kkc6I99dNCGfjwU0B7XTJNEpltNi2GUVEQcswY2Ow=
diff -r<EMAIL_ADDRESS><EMAIL_ADDRESS>1c1
< {"Version":"v1.9.0","Time":"2022-06-03T13:47:07Z"}
\ No newline at end of file
---
> {"Version":"v1.9.0","Time":"2022-06-03T10:54:54Z"}
\ No newline at end of file
Binary files<EMAIL_ADDRESS>and<EMAIL_ADDRESS>differ
diff -r<EMAIL_ADDRESS><EMAIL_ADDRESS>1c1
< h1:hzLtZh62rPrGfPUk3XwG6qHwxI6bLC1S6seYUGRE420=
\ No newline at end of file
---
> h1:E1Kkc6I99dNCGfjwU0B7XTJNEpltNi2GUVEQcswY2Ow=
\ No newline at end of file
Only in /tmp/test1/modcache/cache: vcs
diff -r<EMAIL_ADDRESS><EMAIL_ADDRESS>7c7
< 	LDFLAGS="$(LDFLAGS)" goreleaser release --parallelism 1 --timeout 120m
---
> 	LDFLAGS="$(LDFLAGS)" goreleaser release --timeout 120m

The version in the proxy appears to be older.
A workaround for users is to use a consistent value for GOPROXY across all known environments. Ideally though, the git tag should never be moved but that's outside the control of users.

Based on the diff output in the description, it looks like the git tag may have been moved to accommodate https://github.com/sigstore/cosign/commit/a4cb262dc3d45a283a6a7513bb767a38a2d3f448

I also experience this

Older version, closing ticket


[BUG] Annoying crash when you click leave

Acknowledgement of preliminary instructions

[X] I have read the preliminary instructions, and I am certain that my problem has not already been addressed.

What problem did you encounter?
Whenever i click "leave game" it gives me the classic "roblox crashed, were sorry" I know its not really much of a issue since if anyone else was getting this bug, you were probably about to leave anyways, i'm pretty sure "disable desktop app" is the reason why, because when i leave without the option on, it doesn't display the error, I know at best, its a inconvenience but i still want a way to fix this little bug.

https://github.com/pizzaboxer/bloxstrap/wiki/Roblox-crashes-when-leaving-a-game


Analysis

Merging now to create new branch for issue #25 based on feedback

remember to close the milestone too.


Add fuzztest

Library name
fuzztest
Library description
Google fuzzing library
Source repository URL
https://github.com/google/fuzztest
Project homepage (if different from the source repository)
No response
Anything else that is useful to know when adding (such as optional features the library may have that should be included)
No response

This would be very nice, please consider it


Separate licenses with OR instead of /

Refs: https://github.com/rust-lang/cargo/pull/4898

bors r+


Add : Happy Number Algorithm in Maths Section in Java Python C and C++

Is your feature request related to a problem? Please describe.
I want to include algorithm for Happy Number in Java , Python C and C++
Describe the solution you'd like
The happy number can be defined as a number which will yield 1 when it is replaced by the sum of the square of its digits repeatedly. If this process results in an endless cycle of numbers containing 4, then the number is called an unhappy number.
For example, 32 is a happy number as the process yields 1 as follows
3^2+2^2= 13
1^2+3^2= 10
1^2+0^2= 1
@Kumar-laxmi Please assign me the issue for SSOC . I will give proper documentation and complete it as soon as possible.

@Kumar-laxmi Please assigne me the issue for SSOC. I will do it in java , python , C , C++

@Kumar-laxmi  sir please assign me this issue. I want to work upon it using c, c++, java .As a beginner in open source i think this would be a good start for me.

Greetings Sir, please assign me this issue, I will do it using both naive and effective approach.

@Kumar-laxmi please assign this task to me to contribute under the program SSoC 2.0.
I can solve this task in C, C++, PYTHON & JAVA programming languages.

@Kumar-laxmi please assign me this issue

@Kumar-laxmi please assign me this issue, I will do it in Java, Python, C, and C++.

@Kumar-laxmi It would be really helpful if you could assign this issue to me . I would be able to do this in any language C, C++,Java or Python

@Kumar-laxmi Pls assign me this issue, I have completed it in C, CPP, Java, Python. I just need to start the PR.

Assigned!
@sagnik-datta-02 : C, C++, Java & Python

@Kumar-laxmi Ok Thanks!


Create & expose setTempMonth & setTempYear helpers

won't do, not really useful since react setstate can take a callback


Better 404 page in the website

Funny ideas are welcome :)

TODO label is supposed to be absolutely necessary for one of the releases.

Also this could just be in the already #5 issue....... We'll end up with tons of duplicates again.

@ahmadnassri can join us on this too

#5 made sense when everything had to be built from scratch for the first time. Now that things are coming closer to their final shape, for specific tasks on the website we should open specific issues.


How to make EAN-8 Code in Non Flat Format ?

I want EAN-8 In this style, In JsBarcode EAN-13 Comes With This Style.

Hi, any updates on this? Our project kind of wants to have this non-flat format for EAN8. It would be really great if this can be implemented :) Thanks!

@johnwesleysalvador use this one https://github.com/saaiful/JsBarcode, it's a fork with flat support.

https://github.com/lindell/JsBarcode/releases/tag/v3.9.0


Display Incentive Calculation Next to Permits

Looks like #714 totaled up incentives and then rendered as a single comment at the end. Great!
We should update the style: https://github.com/ubiquity/ubiquibot/issues/375
The comment should also include details around how the number was calculated for us to be able to debug for the next few months as we tweak incentives.

let me consolidate them in an one method.

Originally posted by @wannacfuture in https://github.com/ubiquity/ubiquibot/pull/657#discussion_r1308674763

Isn't it good to be done on #714 ?

Cool I didn't see that. I think as long as they just calculate everything visibly then we're good!

@devpanther check out

The comment should also include details around how the number was calculated for us to be able to debug for the next few months as we tweak incentives.

@devpanther check out

I should look at https://github.com/ubiquity/ubiquibot/issues/375 right?,

@devpanther check out

I should look at #375 right?,

All of them but espeically #773


Adapt to yiisoft/log changes

Q
A

Is bugfix?
❌

New feature?
✔

Breaks BC?
✔/❌

Fixed issues
-

Depends on yiisoft/log#73

https://github.com/yiisoft/log-target-syslog/blob/master/.github/workflows/build.yml#L31 should be adjusted to remove 7.4.

👍


Sorry but...

I am probably being extremely stupid, but I can't seem to get this guard to work.
Here's the Guardfile:
guard 'process', :name => "Test", :command => "ls" do
  watch('Gemfile')
end

In the guard output, I only see:
Starting process Test
Started process Test

And then when I save the Gemfile:
Stopping process Test
Stopped process Test
Starting process Test
Started process Test

Wasn't the output from "ls"  supposed to be shown in the guard window?
I tried also with "echo 'xxx' > test.txt"  as a command, but I didn't see any test.txt file generated in the directory.
I am obviously missing something, right?

This is caused by our use of IO#popen (where we don't actually do anything with the output), I think this is what causes issue #3 as well which I am looking into currently.


fix: typo This pattern does not cover all possiblities

Fix typo in word possiblities -> possibilities.

Thanks!


Fix static prefix validation

This PR fixes #209.
When we use default --static-prefix option, the CLI skips any validation  and use None as the static prefix.

Codecov Report

Merging #210 into master will increase coverage by <.01%.
The diff coverage is 100%.

@@            Coverage Diff             @@
##           master     #210      +/-   ##
==========================================
+ Coverage   51.88%   51.89%   +<.01%
==========================================
  Files          96       96
  Lines        4847     4848       +1
==========================================
+ Hits         2515     2516       +1
  Misses       2332     2332

Impacted Files
Coverage Δ

mlflow/cli.py
79.76% <100%> (+0.24%)
:arrow_up:

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 52672e5...a385db5. Read the comment docs.

@andrewmchen could you help to review? 😇

Yes, thanks for the fix!


SyncPeriod does not work if controller is created WithEventFilter(predicate.GenerationChangedPredicate{})

Bug Report

What did you do?
Create a manager with SyncPeriod.
	s := time.Second * 10
	mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{
		Scheme:                 scheme,
		MetricsBindAddress:     metricsAddr,
		Port:                   9443,
		HealthProbeBindAddress: probeAddr,
		LeaderElection:         enableLeaderElection,
		LeaderElectionID:       "7b10c258.runtime-deployment-controller.com",
		SyncPeriod:             &s,
	})

and setup the reconciler with this manager
func (r *MyReconciler) SetupWithManager(mgr ctrl.Manager) error {
	return ctrl.NewControllerManagedBy(mgr).
		For(&package.MyKind{}).
		WithEventFilter(predicate.GenerationChangedPredicate{}).
		Complete(r)
}

and created an object of type MyKind.

What did you expect to see?
The reconciler should run every 10 seconds.

What did you see instead? Under which circumstances?
The reconciler does not run periodically.
But, if  WithEventFilter(predicate.GenerationChangedPredicate{}) is commented, then the reconciler runs every 10 seconds.

Environment
Operator type:

Kubernetes cluster type:
Rancher Desktop 1.5.1
Kubernetes version 1.24.3

$ operator-sdk version
sigs.k8s.io/controller-runtime v0.12.3

$ go version (if language is Go)
go version go1.19 darwin/amd64

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.3", GitCommit:"816c97ab8cff8a1c72eccca1026f7820e93e0d25", GitTreeState:"clean", BuildDate:"2022-01-25T21:25:17Z", GoVersion:"go1.17.6", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"24", GitVersion:"v1.24.3+k3s1", GitCommit:"990ba0e88c90f8ed8b50e0ccd375937b841b176e", GitTreeState:"clean", BuildDate:"2022-07-19T01:10:03Z", GoVersion:"go1.18.1", Compiler:"gc", Platform:"linux/amd64"}

Possible Solution

Additional context

This seems to be an issue related with controller-runtime. IMO though predicates filter the specific events getting queued for the controller to act on, SyncPeriod should still be respected.

Created an issue in controller-runtime
https://github.com/kubernetes-sigs/controller-runtime/issues/1990

Hey, I see this issue is in backlog, and not yet fixed. do we have any workaround for this.


Network Switching issue - button does not work.

The network switching button does not work.
https://user-images.githubusercontent.com/88632652/130189112-5051c8a3-0c3d-4bea-a7ec-24fcb4ef23b5.MOV

The network switching button does not work.
IMG_3457.MOV

Switching network requires you to connect to metamask first. Could you try to click the "connect metamask" button and then check if the issue still persists?

@Dutchessofcrush Could you also check issue #3 ?

This is still an issue. Steps to recreate: Go to the dApp. Click "connect to Metamask". 2. nothing happens 3. connect manually in Metamask 4. Mertamask shows that is connected. 5. Click on a collection - get error "Connect to Metamask first"

This is still an issue. Steps to recreate: Go to the dApp. Click "connect to Metamask". 2. nothing happens 3. connect manually in Metamask 4. Mertamask shows that is connected. 5. Click on a collection - get error "Connect to Metamask first"

Could you shoot a video of clicking "connect to metamask" with nothing happened and click the metamask icon and display the metamask setting? It will be also great to take a screenshot of the console message. Thanks


pth generation

how to generate file smpla_packed_info.pth, i can only get access to siml_packed_info.pth, seems like there used to have link https://github.com/Arthur151/ROMP/releases/download/V2.0/ to provide these pth file, how can i generate it myself now?

how to generate file smpla_packed_info.pth, i can only get access to siml_packed_info.pth, seems like there used to have link https://github.com/Arthur151/ROMP/releases/download/V2.0/ to provide these pth file, how can i generate it myself now?

Hi, do you still have this file (siml_packed_info.pth), the link is 404 and can not be downloaded now. Thank you so much.


Add banner feature to qiskit theme

In this PR:

[x] add optional purple gradient banner to all pages
[x] add optional "Learn more" link to banner
[x] update readme
[x] works for mobile view
[ ] snapshot tests for banner component

I'm struggling to figure out how to add new snapshots for this component, any help appreciated!

@javabster is only add the images in the snapshot test?

@MaldoAlberto the issue I'm facing is that new screenshots are not being generated for the announcement banner tests 😅 I'm not sure what's going wrong, possibly because the docker setup is not realising that the option has been set in the conf.py? I'm not really sure

@javabster  I saw the images from announcement is not created,  because not exist a html file to obtain the snapshot, the others I found in example_docs/docs/_build/html

yeah I don't really understand what is happening with these snapshots tbh, when I was doing my dev work locally I was able to build with the announcement banner in the example_docs, but for some reason when I try run the snapshots workflow (I'm trying to follow the instructions in the contributing guide) the banner isn't getting generated for some reason? I'm trying to figure out how the docker image is getting built but I'm a bit lost tbh.
Also no idea why the CI snapshots keep failing when the "actual" images look exactly the same as the originals 😅

I found the path for the announcement is example_docs/docs/_ecosystem_build/index.html but the others are in
example_docs/docs/_build/
and yes the error is weird say the size of the image is different for one pixel

Looks good! I only have one suggestion but it's non-blocking.

If I'm not mistaken, I need to add the announce snapshots

I adjusted the padding of the banner and made it so that users can configure the text used for the link (it defaults to "Learn more" unless specified in conf.py)

Issue created to add snapshot tests: https://github.com/Qiskit/qiskit_sphinx_theme/issues/533

@javabster I'm sorry I'm just seeing your comment in slack about padding! Can we increase top/bottom padding from 14px to 16px?


split stdout and stderr ?

At current configuration, we only have 1 output option - that stdout and stderr  can only be written in same log file. I think it might be better if jobby have feature to split the stdout and stderr in different log file.

Closed by #103.


[ENH] Update Helm validation script include extracted images

…es and display in summary.

Reference Issues or PRs

What does this implement/fix?
Put a x in the boxes that apply

[ ] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds a feature)
[ ] Breaking change (fix or feature that would cause existing features not to work as expected)
[ ] Documentation Update
[ ] Code style update (formatting, renaming)
[ ] Refactoring (no functional changes, no API changes)
[ ] Build related changes
[ ] Other (please describe):

Testing

[ ] Did you test the pull request locally?
[ ] Did you add new tests?

How to test this PR?

Any other comments?

The end result looks like this:

https://github.com/nebari-dev/nebari/actions/runs/11192761281/attempts/1#summary-31117309003

These are the containers we identified for 2024.9.1:
| busybox:1.36                                                        |
| docker.io/bitnami/minio:2021.4.22-debian-10-r0                      |
| docker.io/bitnami/postgresql:11.11.0-debian-10-r31                  |
| docker.io/bitnami/postgresql:11.14.0-debian-10-r17                  |
| docker.io/bitnami/redis:7.0.4-debian-11-r4                          |
| docker.io/busybox:1.32                                              |
| docker.io/grafana/grafana:10.4.1                                    |
| docker.io/grafana/loki-canary:2.9.4                                 |
| docker.io/grafana/loki:2.9.4                                        |
| docker.io/grafana/promtail:2.9.3                                    |
| docker.io/nginxinc/nginx-unprivileged:1.24-alpine                   |
| gcr.io/google_containers/volume-nfs:0.8                             |
| ghcr.io/dask/dask-gateway-server:2022.4.0                           |
| k8s.gcr.io/autoscaling/cluster-autoscaler:v1.23.0                   |
| kiwigrid/k8s-sidecar:1.24.3                                         |
| maxisme/traefik-forward-auth:sha-a98e568                            |
| quansight/conda-store-server:2024.3.1                               |
| quay.io/argoproj/argocli:v3.4.4                                     |
| quay.io/argoproj/workflow-controller:v3.4.4                         |
| quay.io/jupyterhub-ssh/sftp:0.0.1-0.dev.git.142.h402a3d6            |
| quay.io/jupyterhub-ssh/ssh:0.0.1-0.dev.git.149.he5107a4             |
| quay.io/jupyterhub/configurable-http-proxy:4.6.2                    |
| quay.io/jupyterhub/k8s-network-tools:4.0.0-0.dev.git.6694.h6ebb8922 |
| quay.io/keycloak/keycloak:15.0.2                                    |
| quay.io/kiwigrid/k8s-sidecar:1.26.1                                 |
| quay.io/nebari/nebari-jupyterhub:2024.9.1rc1                        |
| quay.io/nebari/nebari-jupyterlab:2024.9.1rc1                        |
| quay.io/nebari/nebari-workflow-controller:2024.7.1                  |
| quay.io/prometheus-operator/prometheus-config-reloader:v0.73.2      |
| quay.io/prometheus-operator/prometheus-operator:v0.73.2             |
| quay.io/prometheus/alertmanager:v0.27.0                             |
| quay.io/prometheus/node-exporter:v1.8.0                             |
| quay.io/prometheus/prometheus:v2.51.2                               |
| registry.k8s.io/kube-scheduler:v1.28.13                             |
| registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.12.0       |
| registry.k8s.io/pause:3.10                                          |
| registry.k8s.io/pause:3.8                                          |
| rook/ceph:v1.14.7                                                   |
| traefik:2.9.1                                                       |
| quay.io/nebari/nebari-dask-worker:2024.9.1rc1                       |

@joneszc has the script we used to generate that list.

@joneszc, it would be great to compare your script outputs with the idea above, as I think some images are missing, such as the /registry ones in there. Even if this does not go directly to this PR I think we could extend this later to have a broadly view of all images

@joneszc, it would be great to compare your script with the idea above, as I think some images are missing, such as the /registry ones in there. Even if this does not go directly to this PR, I think we could extend this later to have a broad view of all images.
I am happy to chat about if you need

Hello @viniciusdc @tylergraff ,
Rather than using a script I'm using kubectl to collect pods at two stages: 1) immediately following deployment of Nebari; and 2) after launching a jupyterlab user node
kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec['initContainers', 'containers'][*].image}" | tr -s '[[:space:]]' '\n' | sort | uniq -c
I devoted time several months ago to creating a branch for enabling pin-pointed specification, mostly leveraging terraform overrides, of each container-image used by Nebari.  Not sure if it's is helpful for this PR, but the following nebari-config.yaml example shows possible overrides for each container-image and at least serves as a reference for where (i.e. in which chart) each image is invoked, as of a few releases past.
provider: aws
namespace: dev
nebari_version: 2024.6.1
project_name: nebari-test
domain: nebari-test.test.net
ci_cd:
  type: none
terraform_state:
  type: remote
security:
  keycloak:
    initial_root_password: <pwd>
    overrides:
      ## https://github.com/MetroStar/nebari/blob/eks-private-cluster-dev/src/_nebari/stages/kubernetes_keycloak/template/modules/kubernetes/keycloak-helm/values.yaml
      ## https://github.com/codecentric/helm-charts/blob/keycloak-15.0.2/charts/keycloak/values.yaml
      image:
        # The Keycloak image repository
        repository: quay.io/keycloak/keycloak
        # Overrides the Keycloak image tag whose default is the chart version
        tag: ""
        #tag: "15.0.2"
      extraInitContainers: |
        - command:
          - sh
          - -c
          - |
            wget --no-check-certificate https://github.com/aerogear/keycloak-metrics-spi/releases/download/2.5.3/keycloak-metrics-spi-2.5.3.jar -P /data/ &&
            export SHA256SUM=9b3f52f842a66dadf5ff3cc3a729b8e49042d32f84510a5d73d41a2e39f29a96 &&
            if ! (echo "$SHA256SUM  /data/keycloak-metrics-spi-2.5.3.jar" | sha256sum -c)
              then
                echo "Error: Checksum not verified" && exit 1
              else
                chown 1000:1000 /data/keycloak-metrics-spi-2.5.3.jar &&
                chmod 777 /data/keycloak-metrics-spi-2.5.3.jar
            fi
          image: alpine:latest
          name: initialize-spi-metrics-jar
          securityContext:
            runAsUser: 0
          volumeMounts:
            - name: metrics-plugin
              mountPath: /data
      pgchecker:
        image:
          # Docker image used to check Postgresql readiness at startup
          repository: docker.io/busybox
          # Image tag for the pgchecker image
          tag: 1.32
      postgresql:
        ## https://github.com/bitnami/charts/blob/main/bitnami/postgresql/values.yaml
        image:
          registry: docker.io
          repository: bitnami/postgresql
          tag: 11.11.0-debian-10-r31
          digest: ""
  authentication:
    type: password
default_images:
  jupyterhub: quay.io/nebari/nebari-jupyterhub:2024.5.1
  jupyterlab: quay.io/nebari/nebari-jupyterlab:2024.5.1
  dask_worker: quay.io/nebari/nebari-dask-worker:2024.5.1
jhub_apps:
  enabled: true
theme:
  jupyterhub:
    hub_title: Nebari - test
    welcome: Welcome! Learn about Nebari's features and configurations in the
      documentation. If you have any questions or feedback, reach the team on
      Nebari's support
      forums.
    hub_subtitle: Your open source data science platform, hosted on Amazon Web Services
amazon_web_services:
  kubernetes_version: '1.29'
  region: us-east-1
  #ec2_keypair_name: _keypair
  #eks_endpoint_private_access: true
  #eks_endpoint_public_access: false
  node_groups:
    general:
      instance: m5.2xlarge
      min_nodes: 1
      max_nodes: 1
      gpu: false
      single_subnet: false
      permissions_boundary:
    user:
      instance: m5.xlarge
      min_nodes: 0
      max_nodes: 5
      gpu: false
      single_subnet: false
      permissions_boundary:
    worker:
      instance: m5.xlarge
      min_nodes: 0
      max_nodes: 5
      gpu: false
      single_subnet: false
      permissions_boundary:
  #existing_subnet_ids:
  #  - subnet-XXXXXXXXXX
  #  - subnet-ZZZZZZZZZZ
  #existing_security_group_id: sg-xxxxxxxxx
cluster_autoscaler:
  ## https://staging.artifacthub.io/packages/helm/cluster-autoscaler/cluster-autoscaler/9.19.0
  overrides:
    image:
      # image.repository -- Image repository
      repository: k8s.gcr.io/autoscaling/cluster-autoscaler
      # image.tag -- Image tag
      tag: v1.23.0
ingress:
  terraform_overrides:
    # https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.8/guide/service/annotations/
    #load-balancer-annotations:
    #  service.beta.kubernetes.io/aws-load-balancer-internal: "true"
    #  service.beta.kubernetes.io/aws-load-balancer-subnets: "subnet-XXXXXXXXXX,subnet-ZZZZZZZZZZ"
    traefik-image:
      image: traefik
      tag: 2.9.1
conda_store:
  #extra_settings: {}
  #extra_config: ''
  image: quansight/conda-store-server
  image_tag: 2024.3.1
  nfs_server_image: gcr.io/google_containers/volume-nfs
  nfs_server_image_tag: "0.8"
  #default_namespace: nebari-git
  #object_storage: 200Gi
  overrides:
    ## https://github.com/MetroStar/nebari/blob/eks-private-cluster-dev/src/_nebari/stages/kubernetes_services/template/modules/kubernetes/services/minio/values.yaml
    ## https://github.com/bitnami/charts/blob/main/bitnami/minio/values.yaml
    minio:
      image:
        registry: docker.io
        repository: bitnami/minio
        tag: 2021.4.22-debian-10-r0
    ## https://github.com/MetroStar/nebari/blob/eks-private-cluster-dev/src/_nebari/stages/kubernetes_services/template/modules/kubernetes/services/postgresql/values.yaml
    ## https://github.com/bitnami/charts/blob/master/bitnami/postgresql/values.yaml
    postgresql:
      image:
        registry: docker.io
        repository: bitnami/postgresql
        tag: 11.14.0-debian-10-r17
        digest: ""
    ## https://github.com/MetroStar/nebari/blob/eks-private-cluster-dev/src/_nebari/stages/kubernetes_services/template/modules/kubernetes/services/redis/values.yaml
    ## https://github.com/bitnami/charts/blob/master/bitnami/redis/values.yaml
    redis:
      image:
        registry: docker.io
        repository: bitnami/redis
        tag: 7.0.4-debian-11-r4
        digest: ""
argo_workflows:
  #enabled: true
  #https://github.com/MetroStar/nebari/blob/eks-private-cluster/src/_nebari/stages/kubernetes_services/template/modules/kubernetes/services/argo-workflows/values.yaml
  #https://github.com/argoproj/argo-helm/blob/argo-workflows-0.22.9/charts/argo-workflows/values.yaml
  overrides:
    #images:
    #  # -- Common tag for Argo Workflows images. Defaults to `.Chart.AppVersion`.
    #  tag: ""
    controller:
      image:
        # -- Registry to use for the controller
        registry: quay.io
        # -- Registry to use for the controller
        repository: argoproj/workflow-controller
        # -- Image tag for the workflow controller. Defaults to `.Values.images.tag`.
        tag: ""
        #tag: "v3.4.4"
    ## executor controls how the init and wait container should be customized
    #executor:
    #  image:
    #    # -- Registry to use for the Workflow Executors
    #    registry: quay.io
    #    # -- Repository to use for the Workflow Executors
    #    repository: argoproj/argoexec
    #    # -- Image tag for the workflow executor. Defaults to `.Values.images.tag`.
    #    tag: ""
    server:
      # -- Deploy the Argo Server
      #enabled: true
      # -- Value for base href in index.html. Used if the server is running behind reverse proxy under subpath different from /.
      ## only updates base url of resources on client side,
      ## it's expected that a proxy server rewrites the request URL and gets rid of this prefix
      ## https://github.com/argoproj/argo-workflows/issues/716#issuecomment-433213190
      #baseHref: /
      image:
        # -- Registry to use for the server
        registry: quay.io
        # -- Repository to use for the server
        repository: argoproj/argocli
        # -- Image tag for the Argo Workflows server. Defaults to `.Values.images.tag`.
        tag: ""
        #tag: "v3.4.4"
  nebari_workflow_controller:
    enabled: true
    image: quay.io/nebari/nebari-workflow-controller
    image_tag: 2024.5.1
monitoring:
  enabled: true
  overrides:
    # https://github.com/MetroStar/nebari/blob/eks-private-cluster/src/_nebari/stages/kubernetes_services/template/modules/kubernetes/services/monitoring/values.yaml
    # https://github.com/prometheus-community/helm-charts/blob/main/charts/kube-prometheus-stack/values.yaml
    prometheus:
      ## Configuration for alertmanager
      ## ref: https://prometheus.io/docs/alerting/alertmanager/
      alertmanager:
        ## Settings affecting alertmanagerSpec
        ## ref: https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api.md#alertmanagerspec
        alertmanagerSpec:
          ## Image of Alertmanager
          image:
            registry: quay.io
            repository: prometheus/alertmanager
            tag: v0.27.0
            sha: ""
      ## Using default values from https://github.com/grafana/helm-charts/blob/main/charts/grafana/values.yaml
      grafana:
        image:
          # -- The Docker registry
          registry: docker.io
          # -- Docker image repository
          repository: grafana/grafana
          # Overrides the Grafana image tag whose default is the chart appVersion
          tag: ""
          #tag: "10.4.1"
          sha: ""
          pullPolicy: IfNotPresent
        ## Sidecars that collect the configmaps with specified label and stores the included files them into the respective folders
        ## Requires at least Grafana 5 to work and can't be used together with parameters dashboardProviders, datasources and dashboards
        sidecar:
          image:
            # -- The Docker registry
            registry: quay.io
            repository: kiwigrid/k8s-sidecar
            tag: 1.26.1
            sha: ""
      ## Manages Prometheus and Alertmanager components
      prometheusOperator:
        enabled: true
        ## Prometheus-operator image
        image:
          registry: quay.io
          repository: prometheus-operator/prometheus-operator
          # if not set appVersion field from Chart.yaml is used
          tag: ""
          #tag: "v0.73.2"
          sha: ""
          pullPolicy: IfNotPresent
        ## Prometheus-config-reloader
        prometheusConfigReloader:
          image:
            registry: quay.io
            repository: prometheus-operator/prometheus-config-reloader
            # if not set appVersion field from Chart.yaml is used
            #tag: "v0.73.2"
            tag: ""
            sha: ""
      ## Configuration for kube-state-metrics subchart
      ## https://github.com/prometheus-community/helm-charts/blob/main/charts/kube-state-metrics/values.yaml
      kube-state-metrics:
        image:
          registry: registry.k8s.io
          repository: kube-state-metrics/kube-state-metrics
          # If unset use v + .Charts.appVersion
          tag: ""
          #tag: "v2.12.0"
          sha: ""
          pullPolicy: IfNotPresent
      ## Configuration for prometheus-node-exporter subchart
      ## https://github.com/prometheus-community/helm-charts/blob/main/charts/prometheus-node-exporter/values.yaml
      prometheus-node-exporter:
        # Default values for prometheus-node-exporter.
        image:
          registry: quay.io
          repository: prometheus/node-exporter
          # Overrides the image tag whose default is {{ printf "v%s" .Chart.AppVersion }}
          tag: ""
          #tag: "v1.8.0"
          pullPolicy: IfNotPresent
          digest: ""
      ## Deploy a Prometheus instance
      prometheus:
        enabled: true
        ## Settings affecting prometheusSpec
        ## ref: https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api.md#prometheusspec
        prometheusSpec:
          ## Image of Prometheus.
          image:
            registry: quay.io
            repository: prometheus/prometheus
            tag: v2.51.2
            #tag: v2.53.1
            sha: ""
    loki:
      loki:
        storage:
          type: s3
        commonConfig:
          replication_factor: 1
        # Not required as it is inside cluster and not exposed to the public network
        auth_enabled: false
        # The Compactor deduplicates index entries and also apply granular retention.
        compactor:
          # is the directory where marked chunks and temporary tables will be saved.
          working_directory: /var/loki/compactor/data/retention
          # minio s3
          shared_store: s3
          # how often compaction will happen
          compaction_interval: 1h
          # should delete old logs after retention delete delay
          # ideally we would want to do storage based retention, but this is not
          # currently implemented in loki, that's why we're doing time based retention.
          retention_enabled: true
          # is the delay after which the Compactor will delete marked chunks.
          retention_delete_delay: 1h
          # specifies the maximum quantity of goroutine workers instantiated to delete chunks.
          retention_delete_worker_count: 150
        limits_config:
          # The minimum retention period is 24h.
          # This is reasonable in most cases, but if people would like to retain logs for longer
          # then they can override this variable from nebari-config.yaml
          retention_period: 60d
        schema_config:
          configs:
            # list of period_configs
            # The date of the first day that index buckets should be created.
            - from: "2024-03-01"
              index:
                  period: 24h
                  prefix: loki_index_
              object_store: s3
              schema: v11
              store: boltdb-shipper
        storage_config:
          boltdb_shipper:
              # Directory where ingesters would write index files which would then be
              # uploaded by shipper to configured storage
              active_index_directory: /var/loki/compactor/data/index
              # Cache location for restoring index files from storage for queries
              cache_location: /var/loki/compactor/data/boltdb-cache
              # Shared store for keeping index files
              shared_store: s3
        image:
          # -- The Docker registry
          registry: docker.io
          # -- Docker image repository
          repository: grafana/loki
          # -- Overrides the image tag whose default is the chart's appVersion
          # TODO: needed for 3rd target backend functionality
          # revert to null or latest once this behavior is relased
          tag: null
          #tag: "2.9.4"
          ## -- Overrides the image tag with an image digest
          #digest: null
      # Configuration for the write pod(s)
      write:
        # -- Number of replicas for the write
        # Keeping cost of running Nebari in mind
        # We don't need so many replicas, if people need it
        # they can always override from nebari-config.yaml
        replicas: 1
      read:
        # -- Number of replicas for the read
        replicas: 1
      backend:
        # -- Number of replicas for the backend
        replicas: 1
      minio:
        # We are deploying minio from bitnami chart separately
        enabled: false
      monitoring:
        selfMonitoring:
          grafanaAgent:
            installOperator: false
        lokiCanary:
          image:
            # -- The Docker registry
            registry: docker.io
            # -- Docker image repository
            repository: grafana/loki-canary
            # -- Overrides the image tag whose default is the chart's appVersion
            tag: null
            #tag: "2.9.4"
            ## -- Overrides the image tag with an image digest
            #digest: null
            ## -- Docker image pull policy
            #pullPolicy: IfNotPresent
      # Configuration for the gateway
      gateway:
        image:
          # -- The Docker registry for the gateway image
          registry: docker.io
          # -- The gateway image repository
          repository: nginxinc/nginx-unprivileged
          # -- The gateway image tag
          tag: 1.24-alpine
          ## -- Overrides the gateway image tag with an image digest
          #digest: null
          ## -- The gateway image pull policy
          #pullPolicy: IfNotPresent
      sidecar:
        image:
          # -- The Docker registry and image for the k8s sidecar
          repository: kiwigrid/k8s-sidecar
          # -- Docker image tag
          tag: 1.24.3
          ## -- Docker image sha. If empty, no sha will be used
          #sha: ""
          ## -- Docker image pull policy
          #pullPolicy: IfNotPresent
    # https://github.com/grafana/helm-charts/blob/3831194ba2abd2a0ca7a14ca00e578f8e9d2abc6/charts/promtail/values.yaml
    promtail:
      image:
        # -- The Docker registry
        registry: docker.io
        # -- Docker image repository
        repository: grafana/promtail
        # -- Overrides the image tag whose default is the chart's appVersion
        tag: null
        #tag: 2.9.3
        ## -- Docker image pull policy
        #pullPolicy: IfNotPresent
    # https://github.com/bitnami/charts/blob/440ec159c26e4ff0748b9e9866b345d98220c40a/bitnami/minio/values.yaml
    minio:
      image:
        registry: docker.io
        repository: bitnami/minio
        tag: 2021.4.22-debian-10-r0
        ### Specify a imagePullPolicy
        ### Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent'
        ### ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images
        ###
        #pullPolicy: IfNotPresent
        ### Optionally specify an array of imagePullSecrets.
        ### Secrets must be manually created in the namespace.
        ### ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
        ### e.g:
        ### pullSecrets:
        ###   - myRegistryKeySecretName
        ###
        #pullSecrets: []
        ### Set to true if you would like to see extra information on logs
        ###
        #debug: false
jupyterhub:
  #volume_mount_init_image: "busybox:1.31"
  volume_mount_init_image: busybox:1.31
  # https://github.com/MetroStar/nebari/blob/eks-private-cluster/src/_nebari/stages/kubernetes_services/template/modules/kubernetes/services/jupyterhub/values.yaml
  # https://github.com/jupyterhub/zero-to-jupyterhub-k8s/blob/main/jupyterhub/values.yaml
  overrides:
    hub:
      db:
        type: sqlite-pvc
        pvc:
          storage: 1Gi
      baseUrl: "/"
      networkPolicy:
        ingress:
          - ports:
              - port: 10202
            from:
              - podSelector:
                  matchLabels:
                    hub.jupyter.org/network-access-hub: "true"
      service:
        extraPorts:
          - port: 10202
            targetPort: 10202
            name: jhub-apps
    proxy:
      secretToken: "<placeholder>"
      service:
        type: ClusterIP
      chp:
        image:
          #name: quay.io/jupyterhub/configurable-http-proxy
          name: quay.io/jupyterhub/configurable-http-proxy
          #tag: 4.6.2 # https://github.com/jupyterhub/configurable-http-proxy/releases
          tag: 4.6.1
          #pullPolicy:
          #pullSecrets: []
        networkPolicy:
          egressAllowRules:
            cloudMetadataServer: false
            dnsPortsPrivateIPs: false
            nonPrivateIPs: false
            privateIPs: false
          egress:
            - ports:
              - port: 53
                protocol: UDP
              - port: 53
                protocol: TCP
              - port: 10202
                protocol: TCP
            - to:
              - ipBlock:
                  cidr: <IP_ADDRESS>/0
    scheduling:
      userScheduler:
        enabled: true
        image:
          # IMPORTANT: Bumping the minor version of this binary should go hand in
          #            hand with an inspection of the user-scheduelrs RBAC resources
          #            that we have forked.
          #name: registry.k8s.io/kube-scheduler
          name: registry.k8s.io/kube-scheduler
          #tag: "v1.28.11" # ref: https://github.com/kubernetes/website/blob/main/content/en/releases/patch-releases.md
          tag: "v1.28.10"
          #pullPolicy:
          #pullSecrets: []
      podPriority:
        enabled: true
      userPlaceholder:
        enabled: false
        replicas: 1
        #image:
        #  name: registry.k8s.io/pause
        #  # tag is automatically bumped to new patch versions by the
        #  # watch-dependencies.yaml workflow.
        #  # If you update this, also update prePuller.pause.image.tag
        #  tag: "3.10"
    imagePullSecrets:
      - extcrcreds
    singleuser:
      defaultUrl: "/lab"
      startTimeout: 600  # 10 minutes
      profileList: []
      storage:
        type: static
        extraVolumeMounts:
          - mountPath: "/home/shared"
            name: home
            subPath: "home/shared"
      networkTools:
        image:
          #name: quay.io/jupyterhub/k8s-network-tools
          name: quay.io/jupyterhub/k8s-network-tools
          #tag: "set-by-chartpress"
          tag: 4.0.0-0.dev.git.6548.h9b2dfe22
      cpu:
        limit: 1
        guarantee: 1
      memory:
        limit: "1G"
        guarantee: "1G"
      networkPolicy:
        enabled: false
    # prePuller relates to the hook|continuous-image-puller DaemonsSets
    prePuller:
      pause:
        image:
          #name: registry.k8s.io/pause
          name: registry.k8s.io/pause
          # tag is automatically bumped to new patch versions by the
          # watch-dependencies.yaml workflow.
          # If you update this, also update scheduling.userPlaceholder.image.tag
          tag: "3.10"
    # cull relates to the jupyterhub-idle-culler service, responsible for evicting
    # inactive singleuser pods.
    #
    # The configuration below, except for enabled, corresponds to command-line flags
    # for jupyterhub-idle-culler as documented here:
    # https://github.com/jupyterhub/jupyterhub-idle-culler#as-a-standalone-script
    #
    cull:
      enabled: true
      users: false
      removeNamedServers: false
      timeout: 1800
      every: 600
      concurrency: 10
      maxAge: 0
jupyterhub_ssh:
  jupyterhub_ssh_image:
    name: quay.io/jupyterhub-ssh/ssh
    tag: 0.0.1-0.dev.git.136.ha610981
  jupyterhub_sftp_image:
    name: quay.io/jupyterhub-ssh/sftp
    tag: 0.0.1-0.dev.git.142.h402a3d6
dask_gateway:
  dask_gateway_image:
    name: ghcr.io/dask/dask-gateway-server
    tag: "2022.4.0"
  dask_controller_image:
    name: ghcr.io/dask/dask-gateway-server
    tag: "2022.4.0"
forward_auth:
  traefik_forwardauth_image:
    name: maxisme/traefik-forward-auth
    tag: "sha-a98e568"
certificate:
  type: self-signed


Email Extract Performance

I have been using this extractor for a while and recently have noticed that some sites really hamper performance. Originally I thought this was to do with curl and slow responses, but I used Blackfire to track the issue down to the preg_match_all within EmailExtractor->extract. It seemed like when the extractor was given a DOM that contained a base64 encoded string (e.g. PNG), the preg_match_all was taking MUCH longer than usual.
I messed around with the regex and I'm getting much better performance from:
preg_match_all('/[a-z0-9_-+]{1,256}+@[a-z0-9-]{1,256}+.([a-z]{2,3})(?:.[a-z]{2})?/i', $dom, $matches);
Basically limiting the user and domain to max. 256 characters. A crawl that was taking over 1 hour is now taking about 1 minute. Not sure if you want to implement this, but thought I'd flag it because it took me ages to track down.
Thanks for the good work!

Improving the performance of the regex is always good.
But your regex does not allows all the characters from the current regex, and it looks too strict.
For example:

"." (period) in string before<EMAIL_ADDRESS>"_" (underscore) in string after<EMAIL_ADDRESS>subdomain after<EMAIL_ADDRESS>long domain extensions<EMAIL_ADDRESS>(I need to fix my own regex for this one)
etc...

If you make a PR with a regex with limited length, and provide some unit tests, I would be happy to merge it.

I actually got the regex from this SO post:
https://stackoverflow.com/questions/8175644/why-does-this-regex-take-so-long-to-find-email-addresses-in-certain-files
I'll see if I can have a play with the Regex based on your comments.
Thanks :)


Add reimbursement account draft

Details
Fixes an issue with manually adding a bank account
cc @sketchydroide @mananjadhav @ravindra-encoresky
Fixed Issues
$ https://github.com/Expensify/App/issues/13163
PROPOSAL: GH_LINK_ISSUE(COMMENT)
Tests

Login
Create a Workspace + > New Workspace
Add a bank account Workspace > Connect bank account
Select Connect manually
Follow this SO for the credentials to use tap Save & continue
Verify that you can get past the Company step and see the Personal information step

[x] Verify that no errors appear in the JS console

Offline tests
N/A
QA Steps
Same as test steps

[ ] Verify that no errors appear in the JS console

PR Author Checklist

[x] I linked the correct issue in the ### Fixed Issues section above
[x] I wrote clear testing steps that cover the changes made in this PR

[x] I added steps for local testing in the Tests section
[x] I added steps for the expected offline behavior in the Offline steps section
[x] I added steps for Staging and/or Production testing in the QA steps section
[x] I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[x] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
[x] I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).

[x] I included screenshots or videos for tests on all platforms
[x] I ran the tests on all platforms & verified they passed on:

[x] iOS / native
[x] Android / native
[x] iOS / Safari
[x] Android / Chrome
[x] MacOS / Chrome
[x] MacOS / Desktop

[x] I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
[x] I followed proper code patterns (see Reviewing the code)

[x] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
[x] I verified that comments were added to code that is not self explanatory
[x] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[x] I verified any copy / text shown in the product was added in all src/languages/* files
[x] I verified any copy / text that was added to the app is correct English and approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
[x] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[x] I verified the JSDocs style guidelines (in STYLE.md) were followed

[x] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[x] I followed the guidelines as stated in the Review Guidelines
[x] I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
[x] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[x] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[x] I verified that if a function's arguments changed that all usages have also been updated correctly
[x] If a new component is created I verified that:

[x] A similar component doesn't exist in the codebase
[x] All props are defined accurately and each prop has a /** comment above it */
[x] The file is named correctly
[x] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[x] The only data being stored in the state is data necessary for rendering and nothing else
[x] For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
[x] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
[x] All JSX used for rendering exists in the render method
[x] The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

[x] If a new CSS style is added I verified that:

[x] A similar style doesn't already exist
[x] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG)

[x] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[x] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[x] I have checked off every checkbox in the PR author checklist, including those that don't apply to this PR.

PR Reviewer Checklist
The reviewer will copy/paste it into a new comment and complete it after the author checklist is completed

[ ] I have verified the author checklist is complete (all boxes are checked off).
[ ] I verified the correct issue is linked in the ### Fixed Issues section above
[ ] I verified testing steps are clear and they cover the changes made in this PR

[ ] I verified the steps for local testing are in the Tests section
[ ] I verified the steps for expected offline behavior are in the Offline steps section
[ ] I verified the steps for Staging and/or Production testing are in the QA steps section
[ ] I verified the steps cover any possible failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[ ] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
[ ] I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).

[ ] I checked that screenshots or videos are included for tests on all platforms
[ ] I included screenshots or videos for tests on all platforms
[ ] I verified tests pass on all platforms & I tested again on:

[ ] iOS / native
[ ] Android / native
[ ] iOS / Safari
[ ] Android / Chrome
[ ] MacOS / Chrome
[ ] MacOS / Desktop

[ ] If there are any errors in the console that are unrelated to this PR, I either fixed them (preferred) or linked to where I reported them in Slack
[ ] I verified proper code patterns were followed (see Reviewing the code)

[ ] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick).
[ ] I verified that comments were added to code that is not self explanatory
[ ] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[ ] I verified any copy / text shown in the product was added in all src/languages/* files
[ ] I verified any copy / text that was added to the app is correct English and approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
[ ] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[ ] I verified the JSDocs style guidelines (in STYLE.md) were followed

[ ] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[ ] I verified that this PR follows the guidelines as stated in the Review Guidelines
[ ] I verified other components that can be impacted by these changes have been tested, and I retested again (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar have been tested & I retested again)
[ ] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[ ] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[ ] I verified that if a function's arguments changed that all usages have also been updated correctly
[ ] If a new component is created I verified that:

[ ] A similar component doesn't exist in the codebase
[ ] All props are defined accurately and each prop has a /** comment above it */
[ ] The file is named correctly
[ ] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[ ] The only data being stored in the state is data necessary for rendering and nothing else
[ ] For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
[ ] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
[ ] All JSX used for rendering exists in the render method
[ ] The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

[ ] If a new CSS style is added I verified that:

[ ] A similar style doesn't already exist
[ ] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG)

[ ] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[ ] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[ ] I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots/Videos

Web
https://user-images.githubusercontent.com/22219519/204668831-ce0368ed-536d-4c5c-a551-d1b7bb7de6c2.mov

Mobile Web - Chrome
https://user-images.githubusercontent.com/22219519/204668210-da5b6754-71f2-406f-84ca-5a2246f99f38.mov

Mobile Web - Safari
https://user-images.githubusercontent.com/22219519/204668225-5272360d-3a4c-4916-98c1-fe64c252bfff.mov

Desktop
https://user-images.githubusercontent.com/22219519/204668234-7e70ea91-285e-495e-b8f0-1a1300de1d75.mov

iOS
https://user-images.githubusercontent.com/22219519/204668255-b546fa74-4509-4353-b36a-168eeaebb741.mov

Android
https://user-images.githubusercontent.com/22219519/204668271-59f0b63c-f287-4e36-bc9d-3e0a23d212f6.mov

Reviewer Checklist

[ ] I have verified the author checklist is complete (all boxes are checked off).
[ ] I verified the correct issue is linked in the ### Fixed Issues section above
[ ] I verified testing steps are clear and they cover the changes made in this PR

[ ] I verified the steps for local testing are in the Tests section
[ ] I verified the steps for Staging and/or Production testing are in the QA steps section
[ ] I verified the steps cover any possible failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[ ] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)

[ ] I checked that screenshots or videos are included for tests on all platforms
[ ] I included screenshots or videos for tests on all platforms
[ ] I verified tests pass on all platforms & I tested again on:

[ ] iOS / native
[ ] Android / native
[ ] iOS / Safari
[ ] Android / Chrome
[ ] MacOS / Chrome
[ ] MacOS / Desktop

[ ] If there are any errors in the console that are unrelated to this PR, I either fixed them (preferred) or linked to where I reported them in Slack
[ ] I verified proper code patterns were followed (see Reviewing the code)

[ ] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick).
[ ] I verified that comments were added to code that is not self explanatory
[ ] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[ ] I verified any copy / text shown in the product was added in all src/languages/* files
[ ] I verified any copy / text that was added to the app is correct English and approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
[ ] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[ ] I verified the JSDocs style guidelines (in STYLE.md) were followed

[ ] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[ ] I verified that this PR follows the guidelines as stated in the Review Guidelines
[ ] I verified other components that can be impacted by these changes have been tested, and I retested again (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar have been tested & I retested again)
[ ] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[ ] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[ ] If a new component is created I verified that:

[ ] A similar component doesn't exist in the codebase
[ ] All props are defined accurately and each prop has a /** comment above it */
[ ] The file is named correctly
[ ] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[ ] The only data being stored in the state is data necessary for rendering and nothing else
[ ] For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
[ ] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
[ ] All JSX used for rendering exists in the render method
[ ] The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

[ ] If a new CSS style is added I verified that:

[ ] A similar style doesn't already exist
[ ] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG)

[ ] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[ ] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[ ] I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots/Videos

Web

Mobile Web - Chrome

Mobile Web - Safari

Desktop

iOS

Android

Build and deploy apps for testing don't work at the moment , so we merged without those passing. Not an emergency,

Our test build tests are failing right now.
https://expensify.slack.com/archives/C03TQ48KC/p1669663948577029?thread_ts=1669663809.552769&cid=C03TQ48KC

@luacmartins Do we need to QA this or it was not deployed?

I think this will be covered with the QA for #9580

🚀 Deployed to staging by @Luke9389 in version: 1.2.34-0 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

@mvtglobally yes, please QA this

🚀 Deployed to production by @luacmartins in version: 1.2.34-1 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅


Add ability to verify health before continuing to next node

We recently used this operator and it seems like it reboots nodes too quickly - it doesn't wait until pods are ready before proceeding to the next node.  It would be good to either offer a health endpoint we can pass to let the operator know a node is up and ready, or do a check to see if there are any unready pods on the node that was just rebooted.  Right now we intend to write our own controller to check to see if there are any unhealthy pods and then set the paused annotation if there are any unready pods.

I think @robszumski mentioned a similar behavior would be useful to handle corner-cases where some heavy skews/incompatibilities happen between CL components (i.e. docker) and k8s versions (too-new OS with too-old k8s, or viceversa). Such a knob would allow to start OS upgrades in such case on some of the node nodes, but stopping it before affecting the cluster as a whole.

Another example would be the stack crash kernel update. It causes certain java applications to crash. The above proposal of checking for unready pods would limit the impact to a single node as opposed to causing a full outage.

We need to think through if we should simply look at the node itself or pods on it. To be super defensive, I could see a situation where end-user pods cause the update to stop progressing, but that might not be desired. Happy to hear y'alls thoughts.

Yeah, but it could also enable some use cases that right now stop us from running certain workloads on CoreOS. Imagine running an HA setup of Vault or similar keystore. If a node reboots that is running Vault, it will require users to enter their passwords before it is ready. In the current state, all nodes would reboot without knowing this HA setup is degraded and take down the keystore. Similarly, if you need to have a certain number of database running at a time, but it takes those databases half an hour to warm and become ready, you could easily break the desired state of your cluster.  With this feature all those issues would be solved. You'd just need to alert on the cluster updates being paused until manual intervention.
One way to resolve this is to know what version the cluster was on, capture what pods are currently not ready, and halt  updates until pods that where ready prior to the update are ready after the update.

During a coordinated auto-update a chosen node should reboot and the operator should wait until that node returns and the update-agent pod starts and changes the node annotations so this encompasses Kubernetes' notion of Node Ready and also shows at least that agent pod was able to run. https://github.com/coreos/container-linux-update-operator/blob/master/pkg/operator/operator.go#L46
Judging node readiness (or another imaginary tier of readiness) based on whether the entire pod workload is running is plausible but has its own problems. We see this class of issue on cluster automation tests that try to require complete pod readiness:

At what moment does update-agent check whether pods on the same node are healthy. It might be scheduled very early and no other pods are running so the check can be a NoOp based on timing.
A single pod failing or having some issue is surprisingly common in steady state clusters when nobody is paying attention. Does that merit halting the auto-update rollout? Depends. You may be the operator and the app doesn't belong to your team.

My suggestion would be for the controller to store the os version and number of unready pods of a cluster. If a node updates, it keeps itself marked as paused until the controller verifies the new version didn't increases the number of faulty pods. If it does, provide notification hooks to email or webhook, or report it on the health status of the controller so that users can alert on it.
And I'd imagine this would be an optional feature.

What you describe is a broader issue that has been asked in different forms for a long time. Its one of the main challenges to building atop infrastructure with rolling updates - how to add safeguards for specific use-cases:

locksmithd provided coordination and general system health checks
cluo provides coordination and general Kubernetes node healthiness checks

When applications have specific healthiness definitions, you can write that custom logic and indicate to the system that an auto-update was not successful (need to find those docs). With locksmithd this was usually a systemd unit. In Kubernetes, we need to define that customization hook and when something goes into CLUO and when its custom.

halt updates until pods that where ready prior to the update are ready after the update
controller to store the os version and number of unready pods of a cluster

I see these as non-starters. Kubernetes state is constantly changing and reconciling. A snapshot of what was running before isn't associated with what will be running on the node after an update in the general case.

I see these as non-starters. Kubernetes state is constantly changing and reconciling. A snapshot of what was running before isn't associated with what will be running on the node after an update in the general case.

Agreed, in a highly dynamic cluster with a lot of automated CI/CD this will constantly change.

I think Kubernetes provides a good enough api to be able to infer that an update is causing unusually large numbers of errors. But luckily it seems like there's a fairly straightforward way for us to do this ourselves: add the paused annotation whenever our deployments are not fully available, and alert if that state remains for too long. Might not be the best logic, as it will pause and prevent updates when we deploy apps ,  but it should get us by.

Updated my comment to note how people add custom health checks with systemd. Suggested the analog would be a user health check pod which is configured to run before the update-agent (through some means). You can do your own checks, decide the node is not healthy enough to your liking. Then either update-agent does run (halts the rollout) or receives the signal that a custom checker considered the node unhealthy and is able to trigger a rollback (new functionality).

Should we include node draining into this converstation? Right now I believe use the kubelet to inform pods forcefully that they need to exit and use the kubelet's grace period. If we used the drain functionality in the API, this might hint to the scheduler more gracefully.

the operator should wait until that node returns and the update-agent pod starts and changes the node annotations so this encompasses Kubernetes' notion of Node Ready and also shows at least that agent pod was able to run

Thanks for the note @dghubble, this is enough for my CL->docker->kubelet case.

Actually, if the agent stops the nose update if draining fails, that could solve my use case - I would just need to set a pod disruption budget in Kubernetes 1.7. Will the agent continue patching a node if draining fails?

The more I think about it, the more I think this is actually the same as https://github.com/coreos/container-linux-update-operator/issues/50
If pod disruption budget is set, per the document for Kubernetes a drain will fail. This is the proper signal that a reboot is not appropriate.

Any interest in testing the new before-reboot and after-reboot required annotations in v0.3.0? https://github.com/coreos/container-linux-update-operator/blob/master/doc/before-after-reboot-checks.md
This feature allows you to write a custom health check that runs before a node is allowed to reboot or after a node has rebooted (but before its marked schedulable).

We're actually working on implementing that right now.  So far it seems like this completely solves our issue, but will let you know once we've tested fully. Thanks!

Thanks! I'm closing for now since the feature is released. Feel free to re-open or file any issues!