summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Merge "Clarify gerrit trigger approval can be dict or list of dicts"7.0.0Zuul2022-09-301-6/+7
|\
| * Clarify gerrit trigger approval can be dict or list of dictslotorev vitaly2022-09-121-6/+7
| | | | | | | | Change-Id: I239c933c42b3298d85514055e49a586644972755
* | Merge "Detect and handle auth proxy redirects"Zuul2022-09-291-22/+56
|\ \
| * | Detect and handle auth proxy redirectsJames E. Blair2022-09-221-22/+56
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If the Zuul web UI is placed behind an authorizing proxy system, such as Apache mod_auth_mellon for SAML, then when the service provider token times out, users will not receive any indication that has occurred. If they are watching the status page, it will just silently fail to update. Switching to another page may bring it to their attention, unless we already have cached data, in which case there still may be no indication. In these cases, the authorizy proxy sends a redirect (HTTP 303) instead of the normal response, but since our requests are async background requests from JS, they are subject to CORS rules and because they arrive without an Access-Control-Allow-Origin header, the response is unavailable to us. (Even if they do arrive with that header (say by the use of apache mod_headers with "always set"), the ultimate target of the redirect also needs to have that header, which is very unlikely in the case of an ID provider.) Even though we have no information about the response due to the CORS restrictions, we can detect this situation, at least with mod_auth_mellon, and possibly others, by adding the X-Requested-With header. This can be used to indicate that the request is from JS instead of the user, and in this case, mod_auth_mellon returns a 403 instead of a 303. We do have access to the 403 response (unlike the 303) so we can detect this case. In other words after receiving an undefined response (which could be DNS, network, or CORS error), we can narrow that down by repeating the request with the X-Requested-With header, and if we then get a 403, we can be fairly certain the first error was CORS and that we need to re-authenticate. We still don't have access to the redirect target that the auth proxy wants us to use, so the best we can do is to just reload the page and let the auth proxy perform a redirect based on the normal user request that this appears as. Why not always include X-Requested-With? That's because without that header, the browser considers most of our GET requests to be "simple" which means that they do not require pre-flight checks (where the browser performs an OPTIONS request before executing the actual GET). Adding that header to every GET would double the number of HTTP requests in normal operation (even for sites without auth proxies), so it is worth our while to keep our simple GET requests simple. Change-Id: I7c82110d033550c451d21306de94f223a5fcceb2
* | | Merge "Create link to previous buildset span"Zuul2022-09-283-13/+26
|\ \ \
| * | | Create link to previous buildset spanSimon Westphahl2022-09-193-13/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Create a link to the previous buildset span on gate reset. To make this work we'll start the buildset span when the buildset is created instead of only when we set the configuration. This change also adds the `is_remote` flag of the span context of related links. This is required for creating a `SpanContext` in order to deserialize the links. Change-Id: If3a3a83739c1472659d71d05dcf67f84ddce4247
* | | | Merge "Trace node request phase"Zuul2022-09-284-3/+17
|\ \ \ \ | |/ / /
| * | | Trace node request phaseSimon Westphahl2022-09-194-3/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since we are mainly interested in the time taken until the request is failed or fulfilled we won't create a span for full the lifetime of the node request. Change-Id: Ia8d9aaaac3ab4a4791eace2024c1ecb1b9c7a6bd
* | | | Merge "doc: fix liveness probes path rendering"Zuul2022-09-281-3/+3
|\ \ \ \
| * | | | doc: fix liveness probes path renderingTristan Cacqueray2022-08-021-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This change removes the extra '/' from the documentation page. Change-Id: I94eda49da7f88d339b645751d6f3d2973812af55
* | | | | Merge "Trace merge requests and merger operations"Zuul2022-09-285-26/+104
|\ \ \ \ \ | | |/ / / | |/| | |
| * | | | Trace merge requests and merger operationsSimon Westphahl2022-09-195-26/+104
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The span info for the different merger operations is stored on the request and will be returned to the scheduler via the result event. This also adds the request UUID to the "refstat" job so that we can attach that as a span attribute. Change-Id: Ib6ac7b5e7032d168f53fe32e28358bd0b87df435
* | | | | Merge "Add span for builds and propagate via request"Zuul2022-09-285-21/+72
|\ \ \ \ \ | |/ / / /
| * | | | Add span for builds and propagate via requestSimon Westphahl2022-09-195-21/+72
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Change-Id: Ib10452862e7aa1355502bb381d3ff07c65ac7187 Co-Authored-By: James E. Blair <jim@acmegating.com> Co-Authored-By: Tristan Cacqueray <tdecacqu@redhat.com>
* | | | | Merge "Add tracing tutorial"Zuul2022-09-277-1/+302
|\ \ \ \ \ | |/ / / /
| * | | | Add tracing tutorialJames E. Blair2022-09-197-1/+302
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This adds a tutorial for enabling tracing along with a simple all-in-one Jaeger tracing server. Change-Id: I2c0e9b63730e4981c1b9acb67f8a4f90c38395ed
* | | | | Merge "Fix instance check when refreshing dependencies"Zuul2022-09-271-1/+1
|\ \ \ \ \
| * | | | | Fix instance check when refreshing dependenciesSimon Westphahl2022-09-261-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 2022-09-23 10:01:32,395 ERROR zuul.Scheduler: Exception processing pipeline post in tenant foobar Traceback (most recent call last): File "/opt/zuul/lib/python3.10/site-packages/zuul/scheduler.py", line 2089, in process_pipelines refreshed = self._process_pipeline( File "/opt/zuul/lib/python3.10/site-packages/zuul/scheduler.py", line 2157, in _process_pipeline self.process_pipeline_trigger_queue(tenant, pipeline) File "/opt/zuul/lib/python3.10/site-packages/zuul/scheduler.py", line 2350, in process_pipeline_trigger_queue self._process_trigger_event(tenant, pipeline, event) File "/opt/zuul/lib/python3.10/site-packages/zuul/scheduler.py", line 2380, in _process_trigger_event pipeline.manager.refreshDeps(change, event) File "/opt/zuul/lib/python3.10/site-packages/zuul/manager/__init__.py", line 296, in refreshDeps for dep_change_ref in item.change.commit_needs_changes: AttributeError: 'Branch' object has no attribute 'commit_needs_changes' Change-Id: I740d277c59764acfe982a24e3c5e972e8d3179d6
* | | | | | Merge "web: Even "better" hidden expandable content"Zuul2022-09-271-24/+16
|\ \ \ \ \ \
| * | | | | | web: Even "better" hidden expandable contentIan Wienand2022-09-191-24/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | To recap, a PF DataList doesn't have a built-in way to hide the "expandable content" toggle, so on the console page the items -- which have a mixture of expandable content and not -- don't line up. In I33fdafb4e5b98e546c8615a3d65f52c944521cf7 I tried to fix this by using a visibility:hidden toggle, based on ideas from the comments in the inline github issue. What I didn't realise is this doesn't work quite correctly on very narrow (mobile) views. The problem is that the class hierarchy needs to look like <row> <control> <toggle button /> </control> <content> <cell /> <cell /> ... </content> </row> The reason for this is that the <content> is a grid placed *next* to the <control>. So when it squishes up, it should look like |-- | | > | name | | <magnifying> <status> | | <time> |---| With my first attempt, the hidden toggle ">" had all the right classes, but was part of the content. This looks fine when all the content is in a horizontal line; but when it gets to a very small page width we end up with a hidden toggle button in a single column *above* the name, pushing everything down | > hidden button < | name | <magnifying> <status> | <time> This leads to a large gap between items and misalignment on small width devices. Upon further reflection, it has struck me that we don't *have* to use the React compontents, and what we need to do here is build our own datalist item from the PF classes directly, as if we were writing with PF in HTML. We do this here, adding the hidden to the expandable button. This works on all my testing, and the generated output via the browsers console inspector looks the same as using the React components. Obviously if PF merge a change where we can do this via a prop to the compontent it is much more idiomatic to React code, but this should work fine too. Change-Id: I2048554f46b6ef3ec5410967e00400a593c572d7
* | | | | | | Merge "doc: Fix Nodepool monitoring stats"Zuul2022-09-271-0/+2
|\ \ \ \ \ \ \
| * | | | | | | doc: Fix Nodepool monitoring statsJoshua Watt2022-08-031-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The current_requests and per tenant stats were incorrect categorized under the `zuul.nodepool.requests` stat when they are actually under `zuul.nodepool` Change-Id: Ica458384979e265da25c4ad59e6d219c1f940bd5
* | | | | | | | Merge "zuul-stream: Add variable to disable writing streaming files"Zuul2022-09-275-13/+56
|\ \ \ \ \ \ \ \ | |_|_|/ / / / / |/| | | | | | |
| * | | | | | | zuul-stream: Add variable to disable writing streaming filesIan Wienand2022-09-145-13/+56
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Upon further discussion we recently found another case of leaking console streaming files; if the zuul_console is not running on port 19885, or can not be reached, the streaming spool files will still be leaked. The prior work in I823156dc2bcae91bd6d9770bd1520aa55ad875b4 has the receiving side indicate to the zuul_console daemon that it should remove the spool file. If this doesn't happen, either because the daemon was never there, or it is firewalled off, the streaming spool files are left behind. This modifies the command action plugin to look for a variable "zuul_console_disable" which will indicate to the library running the shell/command task not to write out the spool file at all, as it will not be consumed. It is expected this would be set at a host level in inventory for nodes that you know can not or will not have access to zuul_console daemon. We already have a mechanism to disable this for commands running in a loop; we expand this with a new string type. The advantage of this is it leaves the library/command.py side basically untouched. Documentation is updated, and we cover this with a new test. Change-Id: I0273993c3ece4363098e4bf30bfc4308bb69a8b4
* | | | | | | | Merge "Handle reviews by anonymous github users"Zuul2022-09-231-1/+11
|\ \ \ \ \ \ \ \
| * | | | | | | | Handle reviews by anonymous github usersDr. Jens Harbott2022-03-261-1/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Some github users may choose not to publish their real name and/or email address in their profile. Instead of creating an ugly message like[0] Reviewed-by: None <None> try to work up something from the data we have available. [0] https://github.com/osism/ansible-defaults/commit/ed2b2ffa8a32a5b5fdc060a44d17f12655d6cbcf Signed-off-by: Dr. Jens Harbott <harbott@osism.tech> Change-Id: Ife4c325c278860c47b70b37462ebd7b1d6b97755
* | | | | | | | | Merge "Remove support for Ansible 2"Zuul2022-09-2352-1668/+13
|\ \ \ \ \ \ \ \ \
| * | | | | | | | | Remove support for Ansible 2James E. Blair2022-09-1452-1668/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Versions 2.8 and 2.9 are no longer supported by the Ansible project. Change-Id: I888ddcbecadd56ced83a27ae5a6e70377dc3bf8c
* | | | | | | | | | Merge "Tracing: implement span save/restore"Zuul2022-09-235-25/+401
|\ \ \ \ \ \ \ \ \ \ | | |_|_|_|_|/ / / / | |/| | | | | | | |
| * | | | | | | | | Tracing: implement span save/restoreJames E. Blair2022-09-195-25/+401
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This adds methods to allow us to save and restore spans using ZooKeeper data. Additionally, we subclass the tracing.Span class so that we can transparently handle timestamps which are stored as floating point numbers rather than integer nanoseconds. To exercise the new features, emit spans for QueueItems and BuildSets. Because most of our higher-level (parent) spans may start on one host and end on another, we save the full information about the span in ZK and restore it whenever we do anything with it, including starting child spans. This works well for starting a Build span given a BuildSet, since both objects are used by the executor client and so the span information for both is available. However, there are cases where we would like to have child spans and we do not have the full information of the parent, such as any children of the Build span on the executor. We could duplicate all the information of the Build span in ZK and send it along with the build request, but we really only need a few bits of info to start a remote child span. In OpenTelemetry, this is called trace propogation, and there are some tools for this which assume that the implicit trace context is being used and formats information for an HTTP header. We could use those methods, but this change adds a simpler API that is well suited to our typical json-serialization method of propogation. To use it, we will add a small extra dictionary to build and merge requests. This should serialize to about 104 bytes. So that we can transparantly handle upgrades from having no saved state for spans and span context in our ZK data, have our tracing API return a NonRecordingSpan when we try to restore from a None value. This code uses tracing.INVALID_SPAN or tracing.INVALID_SPAN_CONTEXT which are suitable constants. They are sufficiently real for the purpose of context managers, etc. The only down side is that any child spans of these will be real, actual reported spans, so in these cases, we will emit what we intend to be child spans as actual parent traces. Since this should only happen when a user first enables tracing on an already existing system, that seems like a reasonable trade-off. As new objects are populated, the spans will be emitted as expected. The trade off here is that our operational code can be much simpler as we can avoid null value checks and any confusion regarding context managers. In particular, we can just assume that tracing spans and contexts are always valid. Change-Id: If55b06572b5e95f8c21611b2a3c23f7fd224a547
* | | | | | | | | | Merge "Add support for configuring and testing tracing"Zuul2022-09-2210-0/+365
|\ \ \ \ \ \ \ \ \ \ | |/ / / / / / / / / | | | | | | | | / / | |_|_|_|_|_|_|/ / |/| | | | | | | |
| * | | | | | | | Add support for configuring and testing tracingJames E. Blair2022-09-1910-0/+365
| | |_|_|_|/ / / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This adds support for configuring tracing in Zuul along with basic documentation of the configuration. It also adds test infrastructure that runs a gRPC-based collector so that we can test tracing end-to-end, and exercises a simple test span. Change-Id: I4744dc2416460a2981f2c90eb3e48ac93ec94964
* | | | | | | | Merge "Add semaphores to REST API"Zuul2022-09-215-4/+141
|\ \ \ \ \ \ \ \
| * | | | | | | | Add semaphores to REST APIJames E. Blair2022-09-075-4/+141
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This adds information about semaphores to the REST API. It allows for inspection of the known semaphores in a tenant, the current number of jobs holding the semaphore, and information about each holder iff that holder is in the current tenant. Followup changes will add zuul-client and zuul-web support for the API, along with docs and release notes. Change-Id: I6ff57ca8db11add2429eefcc8b560abc9c074f4a
* | | | | | | | | Merge "Log more info on gerrit 403 errors"Zuul2022-09-193-11/+45
|\ \ \ \ \ \ \ \ \
| * | | | | | | | | Log more info on gerrit 403 errorsJames E. Blair2022-09-063-11/+45
| |/ / / / / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If Gerrit returns a 403 on submit, log the text we get in reply to help diagnose the problem. Change-Id: I8c9b286bb63ba1703a6a8f3cd6cd9a4b86e62cf2
* | | | | | | | | Merge "Use json view for complex artifact metadata"Zuul2022-09-191-1/+12
|\ \ \ \ \ \ \ \ \ | |_|/ / / / / / / |/| | | | | | | |
| * | | | | | | | Use json view for complex artifact metadataJames E. Blair2022-09-051-1/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If a job returns nested metadata (ie, a value that is a dict or list), the build page will crash when attempting to display this because it expects metadata values to only be scalars. The docs and code both say that values can be "anything". Update the build page so that if the metadata value is an object (ie, not a primitive scalar), we use a JSON view to display it. Also, if the value is not an object, use toString so that we will display boolean values. Change-Id: I609f70ec60399c69b5f8715b97c43f513c7360a1
* | | | | | | | | Merge "web: better non-expandable console padding"Zuul2022-09-171-6/+11
|\ \ \ \ \ \ \ \ \
| * | | | | | | | | web: better non-expandable console paddingIan Wienand2022-09-151-6/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Inspried by comments in [1]; put a disabled and non-visible button styled in the same way as the expandable content button here as padding for items that don't expand. [1] https://github.com/patternfly/patternfly-react/issues/7950#issuecomment-1239895122 Change-Id: I33fdafb4e5b98e546c8615a3d65f52c944521cf7
* | | | | | | | | | Merge "web: console: make magnifying glass also clickable"Zuul2022-09-171-1/+1
|\ \ \ \ \ \ \ \ \ \ | |/ / / / / / / / /
| * | | | | | | | | web: console: make magnifying glass also clickableIan Wienand2022-09-151-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This makes the magnifying glass also clickable in the console view. Change-Id: I0081bd19a336390572050d4bf3d8b456a71ca7d2
* | | | | | | | | | Merge "web: refactor console item generation"Zuul2022-09-171-22/+23
|\ \ \ \ \ \ \ \ \ \ | |/ / / / / / / / /
| * | | | | | | | | web: refactor console item generationIan Wienand2022-09-151-22/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A small refactor on the item generation to only create either an expandable version or not; not both. Change-Id: Ifabbd6775b516ca5829a691f5a19e325c30a786c
* | | | | | | | | | Merge "web: update whitespace around logo"Zuul2022-09-162-23/+2
|\ \ \ \ \ \ \ \ \ \ | |/ / / / / / / / /
| * | | | | | | | | web: update whitespace around logoIan Wienand2022-09-142-23/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The current logo has a lot of whitespace around it and is offset with the viewbox. I've imported this into inkscape, selected just the logo and re-exported it with no whitespace, then ran it through the minimizer at [1]. I've set the height to 1.5em -- the icons in the same bar have a height of 1em; to my eye this look good just a bit bigger than that. [1] https://jakearchibald.github.io/svgomg/ Change-Id: Idf4e676d33a4626c0b80e06986d8b24b41924065
* | | | | | | | | | Merge "web: remove unused class from brand tag"Zuul2022-09-161-1/+1
|\ \ \ \ \ \ \ \ \ \ | |/ / / / / / / / /
| * | | | | | | | | web: remove unused class from brand tagIan Wienand2022-09-141-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Change Ib1b6be1b554b30ce7a7d2aacae476cefbed63782 modified the CSS so that this inherits via <Page>; this explicit class isn't needed any more. Change-Id: I36dd2869c4b95eea57d3cd8024311606429bf025
* | | | | | | | | | Merge "web: build/autohold: fix props input"Zuul2022-09-161-1/+1
|\ \ \ \ \ \ \ \ \ \ | |/ / / / / / / / /
| * | | | | | | | | web: build/autohold: fix props inputIan Wienand2022-09-131-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I am currently getting the below error in my console about the type passed to AutoholdModal. Convert the change to a string. Warning: Failed prop type: Invalid prop `change` of type `number` \ supplied to `AutoholdModal`, expected `string`. in AutoholdModal (created by ConnectFunction) in ConnectFunction (at Build.jsx:273) in Build (created by ConnectFunction) in ConnectFunction (at Build.jsx:254) in section (created by PageSection) < .. and so on ..> Change-Id: I9c9a5edfa18f0344ac4a50c62c798a5d4e404c18