How to mock the library in widget tests?

When testing a widget the _translations map is passed as null and throws a exception. It's possible to wrap the widget in a LocalizedApp widget and configure the localization, but I believe that testing a single widget should be more straightforward. Am I missing something here?
Example error:
The following NoSuchMethodError was thrown building ExpiredProductButton(dirty):
The method 'containsKey' was called on null.
Receiver: null
Tried calling: containsKey("mission")

I've just spent two hours configuring all the required things, but I've made the following approach:

Create a simple service class that would have a transaltion method (i.e. String safeTranslate(String key)).
Use DI/Service Locator to get said service in class
Call safeTranslate(key) every time I need a translation

Example:

Creating TranslateService

I use get_it and injectable as a service locator in my app.
import 'package:flutter_translate/flutter_translate.dart' as globalTranslate;
import 'package:injectable/injectable.dart';

/// Implementation that is registered in GetIt service locator
@RegisterAs(TranslateService)
@injectable
class TranslateServiceImpl implements TranslateService {
  @override
  String safeTranslate(String key) {
    try{
      return globalTranslate.translate(key);
    } catch(Exception){
      return "translation.error";
    }
  }
}

/// Abstract translate service
abstract class TranslateService {
  String safeTranslate(String key);
}

User DI/Service locator in tested class

At this point, you need to configure GetIt - go through their tutorials on pages linked above and all should be safe and sound. Two notes that are not mentioned in tutorials:

Make sure to add test/** source folder in build.yaml
run flutter packages pub run build_runner watch test once configured to generate test dependencies

import 'package:get_it/get_it.dart';
...

/// Class that will be tested
class TestedClass {
  /// Instance of TranslateService that is provided by GetIt (service locator)
  final TranslateService _translateService = GetIt.instance.get();

  // Some method that uses translation
  String doSomeStuff() {
    return _translateService.safeTranslate("translation_key")
  }
}

Testing a class that requires translation

Create your_class_test.dart file under test folder

/// Important: GetIt needs to be initialized in a top level function
@injectableInit
void configureInjection(String environment) =>
    $initGetIt(GetIt.instance, environment: environment);

void main() {

  configureInjection("Some env value");

  FlutterTest.test("Date formatter: today date", (){
    /// Translation service should be located once class is created
    final TestedClass testedClass  = TestedClass();
    String safeTranslation = testedClass.doSomeStuff(); <--- no exception here
    ...
  });

@VytorCalixto you can do following you can achieve it with Localization.load(<String,dynamic>{});


spec: clarify assignability for non-constant untyped boolean values

Consider the initialization of c in the following example:
http://play.golang.org/p/iwCeX6lwkg
package main
var (
	a, b int
	c    bool = a > b
)
func main() {}

We have an untyped boolean value result of the comparison operator ("Comparison
operators compare two operands and yield an untyped boolean value.")
Regarding the declaration of c in the example, the specification says
(https://golang.org/ref/spec#Variable_declarations):

(1) If a list of expressions is given, the variables are initialized with the
expressions following the rule for assignments.
(2) Otherwise, each variable is initialized to its zero value.

(3) If a type is present, each variable is given that type.
(4) Otherwise, each variable is given the type of the corresponding
initialization value in the assignment.  If that value is an untyped constant,
it is first converted to its default type; if it is an untyped boolean value,
it is first converted to type bool.

The example falls in the clauses (1) and (3). Clause (2) is not applicable,
because an initializer expression is given and (4) is not applicable, because a
type is present; in particular, the implicit conversion to bool in specified
by (4) does not take place.
Then, following (1) we consult the "rules for assignments"
(https://golang.org/ref/spec#Assignments)

In assignments, each value must be assignable to the type of the operand to
which it is assigned, with the following special cases:
(1) Any typed value may be assigned to the blank identifier.
(2) If an untyped constant is assigned to a variable of interface type or the
blank identifier, the constant is first converted to its default type.
(3) If an untyped boolean value is assigned to a variable of interface type or
the blank identifier, it is first converted to type bool.

The special case (1) is not applicable, because neither the assignments is to
the blank identifier, nor the assigned value is untyped.
The special case (2) is not applicable, because neither the assigned value is an
untyped constant (it's not a constant), nor it is assigned to a variable of an
interface type (the type is bool), nor to the blank identifier
The special case (3) is not applicable, because the untyped boolean value is not
assigned to a variable of an interface type, or the blank identifier.
Therefore, the initialization of c must be checked according to the
assignability criteria (https://golang.org/ref/spec#Assignability) :

A value x is assignable to a variable of type T ("x is assignable to T") in
any of these cases:
(1) x's type is identical to T.
(2) x's type V and T have identical underlying types and at least one of V or T is
not a named type.
(3) T is an interface type and x implements T.
(4) x is a bidirectional channel value, T is a channel type, x's type V and T have
identical element types, and at least one of V or T is not a named type.
(5) x is the predeclared identifier nil and T is a pointer, function, slice, map,
channel, or interface type.
(6) x is an untyped constant representable by a value of type T.

Clause (1) is not applicable because T is bool and the value is untyped
boolean.
Clause (2) is not applicable, because there is no way to derive an "underlying
type" (https://golang.org/ref/spec#Types) untyped boolean values.
Clause (3) is not applicable because bool is not an interface type.
Clause (4) is not applicable, because neither the expression's type, nor T is
a channel type.
Clause (5) it not applicable, because neither the expression if the nil, nor
T is one of the enumerated in the clause types.
Clause (6) is not applicable, because the expression is not an untyped constant.
In conclusion, I couldn't find a text the specification, which renders the above
example program as correct.  Similar issues arise with initializations and
assignments involving the additional untyped boolean values, yielded by type
assertions, receive operators, or map index operators.
The compilers (go, gccgo and gotypes) all accept the example program.
It seems there's an omission in the specification. One possible way to fix it is
to add to the assignability criteria a clause, which specifies that an untyped
boolean value is assignable to T if the underlying type of T is bool.

It may be sufficient to modify clause (6) (assignability) and replace constant with value.
Originally, untyped values were always constants. Untyped non-constant boolean values arrived later. We probably need to revisit the spec carefully in light of that.
Thanks for raising the point. Revisiting the spec carefully and clean up some of these open issues is on my list to do, but it's not urgent. We will get to it when we get to it.


lockToContainerEdges breaks sorting animation

Sorting animation is broken when using lockToContainerEdges
Codesanbox link -> https://codesandbox.io/s/blazing-cache-cn6tb?file=/src/index.js:828-848
Gif:

Add lockAxis="y"

@Dagmawi-Beyene thanks. It fixes the problem. I think this could be better documented in README.


Change Favicon in Browser to DAO Logo

Summary
As a DHO user I would like to see the logo of my DAO in the browser tab.
AC
Change logo in browser (favicon) to respective DAO logo

Hi @leonieherma1 , what we should do for the moment?? I mean the daos dont have custom logo for the moment... I think we would move this to blocked

@jmgayosso yes you can move it to blockes. Can we use a placeholder for now the new Hypha Logo

?

Sure

@jmgayosso yes you can move it to blockes. Can we use a placeholder for now the new Hypha Logo  ?

Sure, It Will be on the next deploy

@jmgayosso yes please add the hypha default icon while it is loading and check if you can make it load faster


Package Requested

[X] I would like someone else to build the manifest.
[ ] I would like help so I can submit the manifest.
[X] I have performed a search and couldn't find this package.
[X] I have checked that the installer for this package is not a script file
[ ] I think there is a new version available and I have provided the URL.

Please provide the following information
Publisher: https://github.com/Martchus
Publisher Url: https://github.com/Martchus/syncthingtray
Package Name: syncthingtray
Description: Tray application and Dolphin/Plasma integration for Syncthing
Package Version: 1.3.3
Installer URL: https://github.com/Martchus/syncthingtray/releases/download/v1.3.3/syncthingctl-qt5-1.3.3-x86_64-w64-mingw32.exe.zip
Current Package Identifier (for new versions):

Update to v1.4.10 would be great


tests/issue 73 add smoke tests for changelog and fix format of some json files

PR checklist:

Did you run ClangFormat ?
Did you separate headers to a different section in existing community code base ?
Did you surround proton: starts/ends for new code in existing community code base ?

Please write user-readable short description of the changes:

add smoke tests for changelog
fix format of some json files

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


fix: installer.sh add support to aarch64

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


use anonymous functions with DataFrames to avoid world-age problems

Codecov Report

Merging #20 (5caba58) into main (a186f84) will increase coverage by 0.00%.
The diff coverage is 100.00%.

@@           Coverage Diff           @@
##             main      #20   +/-   ##
=======================================
  Coverage   99.30%   99.30%
=======================================
  Files          12       12
  Lines         577      579    +2
=======================================
+ Hits          573      575    +2
  Misses          4        4

Impacted Files
Coverage Δ

src/aerodynamic_conductance.jl
100.00% <100.00%> (ø)

src/boundary_layer_conductance.jl
100.00% <100.00%> (ø)

src/stability_correction.jl
100.00% <100.00%> (ø)

src/surface_roughness.jl
100.00% <100.00%> (ø)

Continue to review full report at Codecov.

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


datafusion_proto crate should have exhaustive match statements for handling Expr

Is your feature request related to a problem or challenge? Please describe what you are trying to do.
When adding new Expr variants, we should also be adding code to datafusion_proto to handle them but we are not forced into doing this today because the match statement handles the _ case with an error.
Describe the solution you'd like
Support all current Expr variants in and remove the _ case.
Describe alternatives you've considered
None
Additional context
None

Currently datafusion.proto only handles expressions and not logical plans, but that will have to change if we want to support subquery expressions. Ballista already has support for plans so maybe we move some of that code to DataFusion? Another option would be to look at Substrait but that may be a significant amount of work.
fyi @alamb @carols10cents @Ted-Jiang @thinkharderdev since you have contributed to this file

I would think we should move the code for serializing logical plans into datafusion.proto as well

Yeah, agreed. I think it makes sense to move all serialization into datafusion-proto. It might be useful as well if we move forward with breaking Ballista out into it's own repo to help ensure that constructs added to DataFusion are always serializable.

+1 , remove the _ case, will give error at compile time.


jessamarie.github.io does not show index.html

This was working before I deleted all of the files before the starter kit. Perhaps something I deleted was routing to index.html?

I'm so sorry for posing here!


support MySQL part2

support custom sql query，table column/index window

please rebase the code

please rebase the code

done


Extra methods for date management

Related to what was discussed in #PR 83.
I made a class specifically for date management methods, and a global one that could inherit all of the extra method class that we could create in the future. That way, if I only need one 'type' of special methods, for example those for date management, I don't have to import all of them, but if I need several type of extra methods, I can import all of them at once with the global class. How do you see it @ggsdc ?


Updated readme to link to the app analysis tool

Updated the resources section to include the app analysis tool and the samples repo, added an additional link to the analysis tool and fixed some typos.

By pass CI build for doc-only change.


macOS Word Attachments Invalid

Issue Summary
Attachments work swell as outlined in the example docs. However, something is getting munged with the mime-type or encoding or something, idk. We cannot open the attachment in macOS Pages, with the message:

docname can't be opened right now. The file format is invalid.

Steps to Reproduce

Attach a docx per the examples.

   $file_encoded = base64_encode($_FILES["document"]["tmp_name"]);
   $email->addAttachment(
            $file_encoded,
            "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
            $filename,
            "attachment"
    );

mime types found here:
https://stackoverflow.com/questions/4212861/what-is-a-correct-mime-type-for-docx-pptx-etc

Try to open the attachment.

As stated, the email comes through with the attachment seemingly in tact. Double click the attachment in macOS prompts Pages to attempt an open and we get the message above.
Technical details:

sendgrid-php Version: [7.0.0] - XXXX-XX-XX
PHP Version: 5.6

Try application/vnd.ms-word

Thanks. No change.

Hmmm, weird it should really work! https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Complete_list_of_MIME_types

Perhaps the attachment isn't read correctly by your code could you give more code on what comes before and after the snippet you have provided?

Sure. Here's the whole bit. Nothing tricky. (I've also tried application/octet-stream)
<?php

  require("sendgrid-php/sendgrid-php.php");

  $company = $_POST["company"];

  $html = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n\n\r\n";
  $html .= "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\r\n";
  $html .= "\r\n";
  $html .= "\r\n";
  $html .= "
";
  $html .= "
You've received a document via the form on your website.
";
  $html .= "
";
  $html .= "
Company Name: 	".$company."
";
  $html .= "
";
  $html .= "
";

  $email = new \SendGrid\Mail\Mail();
<EMAIL_ADDRESS>"Maumee Ventures");
  $email->setSubject("A New Document from Maumee Ventures - Staged");
<EMAIL_ADDRESS>"My Name");
  $email->addContent(
	  "text/html", $html
  );

  $filename = $_FILES["plan-doc"]["name"];
  $file_encoded = base64_encode($_FILES["plan-doc"]["tmp_name"]);

  $email->addAttachment(
	$file_encoded,
	"application/vnd.ms-word",
	$filename,
	"attachment"
  );

  $sg = new \SendGrid('mySGkey');

  try {
	  $response = $sg->client->mail()->send()->post($email);
	  print $response->statusCode() . "\n";
	  print_r($response->headers());
	  print $response->body() . "\n";
  } catch (Exception $e) {
	  echo 'Caught exception: ',  $e->getMessage(), "\n";
  }

?>

Maybe you could verify that $file_encode is actually something by decoding on an online website.

Changed this line:
$file_encoded = base64_encode($_FILES["plan-doc"]["tmp_name"]);
To this:
$file_encoded = base64_encode(file_get_contents($_FILES["plan-doc"]["tmp_name"]));
And all is well.

Glad it could be resolved! 👍
Happy coding!


Revert "[2.7] Refactor nodetemplates extension"

Reverts rancher/shepherd#22

In favor of this:

https://github.com/rancher/shepherd/pull/126


online stabilization

Hi, thanks for your great jobs!
I wonder if this code can use in online stabilization for camera?

Hi @hosea7456  and thank you for your interest.
Unfortunately the code here requires an entire video file from the get-go and cannot work in an online manner.
Although the L1 optimal camera paths method is an offline method, we attempted to modify it to operate online and process one window at a time however we were not successful on that task.
Let me know if you have more questions and feel free to close this issue otherwise.

Hi @hosea7456 and thank you for your interest.
Unfortunately the code here requires an entire video file from the get-go and cannot work in an online manner.
Although the L1 optimal camera paths method is an offline method, we attempted to modify it to operate online and process one window at a time however we were not successful on that task.
Let me know if you have more questions and feel free to close this issue otherwise.

I got it, thank you so much!


Show correct bundle size after minifications/optimizations

It''d be very helpfull to see actual size of the bundle (and each part) after any minification/optimization plugins were applyed.
Main reason - some code might be removed, merged and agressive minified. And it might great change overall sizes map.
Currently, it shows bundle parts sizes likely before minification/optimization.
Also, it'd be great, if webpack-bundle-analyzer were able to show actual info depend on which place it was placed in the "pluguns" array (before or after some plugins)
I have next "plugins" array:
`plugins: [
// Define free variables
// https://webpack.github.io/docs/list-of-plugins.html#defineplugin
new webpack.DefinePlugin({
  'process.env.NODE_ENV': isDebug ? '"development"' : '"production"',
  'process.env.BROWSER': true,
  __DEV__: isDebug,
}),

// Emit a file with assets paths
// https://github.com/sporto/assets-webpack-plugin#options
new AssetsPlugin({
  path: path.resolve(__dirname, '../build'),
  filename: 'assets.js',
  processOutput: x => `module.exports = ${JSON.stringify(x)};`,
}),

// Assign the module and chunk ids by occurrence count
// Consistent ordering of modules required if using any hashing ([hash] or [chunkhash])
// https://webpack.github.io/docs/list-of-plugins.html#occurrenceorderplugin
new webpack.optimize.OccurrenceOrderPlugin(true),

...isDebug ? [] : [
  // Search for equal or similar files and deduplicate them in the output
  // https://webpack.github.io/docs/list-of-plugins.html#dedupeplugin
  new webpack.optimize.DedupePlugin(),

  // Minimize all JavaScript output of chunks
  // https://github.com/mishoo/UglifyJS2#compressor-options
  new webpack.optimize.UglifyJsPlugin({
    compress: {
      screw_ie8: true,
      warnings: isVerbose,
    },
  }),
],

// Webpack plugin and CLI utility that represents bundle
// content as convenient interactive zoomable treemap
// https://github.com/th0r/webpack-bundle-analyzer
new BundleAnalyzerPlugin({
  // Can be `server`, `static` or `disabled`.
  // In `server` mode analyzer will start HTTP server to show bundle report.
  // In `static` mode single HTML file with bundle report will be generated.
  // In `disabled` mode you can use this plugin to just generate
  // Webpack Stats JSON file by setting `generateStatsFile` to `true`.
  analyzerMode: isReport ? 'static' : 'disabled',
  // Port that will be used by in `server` mode to start HTTP server.
  analyzerPort: 8888,
  // Path to bundle report file that will be generated in `static` mode.
  // If relative path is provided, it will be relative to bundles output directory
  reportFilename: 'ui-report.html',
  // Automatically open report in default browser
  openAnalyzer: isReport,
  // If `true`, Webpack Stats JSON file will be generated in bundles output directory
  generateStatsFile: false,
  // Name of Webpack Stats JSON file that will be generated if `generateStatsFile` is `true`.
  // Relative to bundles output directory.
  statsFilename: 'ui-stats.json',
}),

],`

@boa86 Analyzer tries to parses your bundles (even minified) and show two sizes in tooltip: Stat size and Parsed size.
The first one is the size taken from webpack stats json file and the second one is the actual parsed size of a module from generated bundle.

If you see only Stat size then either something went wrong and analyzer couldn't parse your bundles or it just couldn't find them.

Thank you for quick report!
You are right. I have experimented with enabling/disabling some of plugins and really found that OccurrenceOrderPlugin damage stat data
https://webpack.github.io/docs/list-of-plugins.html#occurrenceorderplugin

found that OccurrenceOrderPlugin damage stat data

What do you mean? Do you have any problem with it?

yes, webpack-bundle-analyzer doen't show minified statistics if this plugin is enabled. I have not yet tested it with other webpack configs (will do it later).
Do you have the same behaviour for this case?

I use OccurrenceOrderPlugin in one of my projects and analyzer parses bundles as it should.
You're saying that if you add OccurrenceOrderPlugin you can't see Parsed size in the generated report?
Is there anything in console?

I have the same issue when I run webpack-bundle-analyzer as CLI tool.
I got both parsed and stat sizes only when I added analyzer as a plugin with analyzerMode: 'static'.
In 'server' mode I get error after report opened in browser.
Error: ENOENT: no such file or directory, open '/projectdir/node_modules/webpack-bundle-analyzer/views/('style', { filename: 'viewer.css' })'

@th0r It was kind of implied above, but is the parsed sized (ie. minified, shaken, etc) the size that is used for the visualization?

@th0r Just double checked and I am not seeing parsed size in my output either.
I get the following output at the end of the build:
<previous lines cut>
4164ms chunk asset optimization
2617ms asset optimization
 95% emitting

Unable to find bundle asset "/home/allenb/Source/taccs/web2/dist/vendor.bundle.js".
Analyzer will use module sizes from stats file.

Webpack Bundle Analyzer saved report to /home/allenb/Source/taccs/web2/dist/size_report.html

158ms emitting
Hash: dc86743694aa26b092d2
Version: webpack 2.1.0-beta.25
Time: 24923ms
                          Asset       Size  Chunks             Chunk Names
  fonts/fontawesome-webfont.eot    76.5 kB          [emitted]
               vendor.bundle.js    8.75 MB       0  [emitted]  vendor
          install_app.bundle.js    3.16 MB       2  [emitted]  install_app
        pwd_reset_app.bundle.js    5.68 kB       3  [emitted]  pwd_reset_app
            polyfills.bundle.js     735 kB       4  [emitted]  polyfills
           assets/icon/.gitkeep    0 bytes          [emitted]
        assets/icon/favicon.ico    1.15 kB          [emitted]
              site_overrides.js  380 bytes          [emitted]
            admin_app.bundle.js    3.35 MB       1  [emitted]  admin_app
  fonts/fontawesome-webfont.ttf     153 kB          [emitted]
 fonts/fontawesome-webfont.woff    90.4 kB          [emitted]
fonts/fontawesome-webfont.woff2    71.9 kB          [emitted]
  fonts/fontawesome-webfont.svg     392 kB          [emitted]
          fonts/FontAwesome.otf     125 kB          [emitted]
                     index.html  668 bytes          [emitted]
            client_install.html  678 bytes          [emitted]
            password_reset.html  690 bytes          [emitted]
 [672] ./src async 160 bytes {0} [built]
       [] -> factory:12ms building:14ms = 26ms
[1233] multi admin_app 28 bytes {1} [built]
        factory:0ms building:1ms = 1ms
[1234] multi install_app 28 bytes {2} [built]
        factory:0ms building:0ms = 0ms
[1235] multi pwd_reset_app 28 bytes {3} [built]
        factory:0ms building:1ms = 1ms
    + 1232 hidden modules
Child html-webpack-plugin for "index.html":
        + 4 hidden modules
Child html-webpack-plugin for "client_install.html":
        + 4 hidden modules
Child html-webpack-plugin for "password_reset.html":
        + 4 hidden modules

The vendor.bundle.js file exists at that absolute location after the build is complete.  I do not know if it exists at the time that bundle analyzer is attempting to load it.
I am using webpack 2.1.0-beta.25 and running a build with multiple entrypoints and bundles.
The config for bundle analyzer is:
 new BundleAnalyzerPlugin({
       analyzerMode: 'static',
       reportFilename: 'size_report.html',
       openAnalyzer: false
    })

Anything I can do to help debug this further?

@abierbaum Released v1.5.1. It should be fixed there.

@th0r Worked great.  Thanks!!!

In 'server' mode I get error after report opened in browser.
Error: ENOENT: no such file or directory, open '/projectdir/node_modules/webpack-bundle-analyzer/views/('style', { filename: 'viewer.css' })'

@okovpashko This is reeaaally strange thing. Can you try v1.5.2 and fresh node_modules install?

@boa86 Can you try the latest version?

@th0r Made build with the latest version. All works fine!
Left sidebar very useful too :)
This issue is closed for my case. Thank you!

@th0r  - could you please elaborate here:

Analyzer tries to parse your bundles (even minified) and show two sizes in tooltip: Stat size and Parsed size.
The first one is the size taken from webpack stats json file and the second one is the actual parsed size of a module from generated bundle.

What does it mean when Stat size and Parsed size are different? If I'm trying to decrease bundle size which one should I be looking at?
Thank you for this tool 👍

Parsed size is the one after minification. Stat size is the size of your original modules, before minification.
So you should be looking at parsed size if you want to decrease bundle size.
Stat size might have dead code that gets eliminated with minification, e.g. React package size will be very different if you run it minification and NODE_ENV=production than without.

Why is the parsed size (e.g., the minified) larger file size than non-minified? Shouldn't it be vice-versa?

@williamle8300 should be if it's really minified.


Unified logging and settings

Should we propose a default mechanism for logging and settings?
Benefits IMO would be consistent behaviour for all ecosystem packages. Ideally there would be a way to set the logging level for all scverse packages globally.
This could either be implemented as

a bunch of vendored code
a separate "scverse-tools" package that can be imported as dependency.

In the long run, a "scverse-tools" package could make sense. We kinda have something like that already with scanpydoc, but could extend the scope to other helper functions.

Big yes.

We should likely just use the standard logging module? We have a very basic setup with scvi-tools that uses rich to format the messages.

https://github.com/Delgan/loguru looks interesting also

Another interesting alternative that looks easier to understand (less magic API) and just as easy to use while encouraging to attach data to your log entries: https://www.structlog.org/en/stable/getting-started.html

@LucaMarconato fyi


Add code of conduct

Added a standard code of conduct adapted from http://contributor-covenant.org/version/1/1/0/

Maybe we could cite the Chef Community guidelines as well?

As long as they don't conflict. Maybe it would be better to copy theirs so they are in agreement?

Chef Community Guidelines here: https://docs.chef.io/community_guidelines.html
Your proposal sounds good anyway. Short and clear :+1:

@shortdudey123 That should fix those issues.

We voted to used a modified version of the chef code of conduct, so this is no longer correct.


editor: Add config for recommended extensions.

This PR adds a configuration file for recommending extensions required for a smooth developer experience. It uses the default feature in vscode to do so.
The doc editor.md has been updated to reflect this change.
Based on #3219.

Bumping this (@gnprice)

React Native Tools changed its identifier at some point, so I've taken the liberty of updating that appropriately. Thanks!


Fixes

Hey @alexcjohnson would you take a look?

@bpostlethwaite moved {localize} into context, but kept the HOC in the API.
What do you think?

Wow - ha I thought you were just going a test :P
Ok well looks like you solved that issue :tada:  Nice work!!
I think leaving in the HOC for now is ok. We can :hocho: that later if ncecessary.


[Feature request] HTTP Basic auth from file

Hi,
First of all: thank you for your great work with the Prometheus eco system. Very well done.
After struggling for a couple of hours I realized ("read the code") that bearer_token_file prepends Bearer to the Authorization header.
What I want to do is to provide basic auth through a Kubernetes secret. The problem is that the only way to provide basic auth in Prometheus (that I can find?) is to write it verbatim in the config file, which I don't want to do. (And it does not seem like Prometheus supports supplying those credentials as run-time parameters / environment variables.)
When I think about it, the Prometheus configuration variables should have been named authorization_header and authorization_header_file? That way one could have put anything in there: Basic, Bearer... whatever floats one's boat. Or even more generic, just header and the user could use any form of auth, even Cookies...
That is not the case though, and I realize changing it would break compatibility so it would be nice if Prometheus could supply at least a basic_auth_file where one could supply a Base64(username:password) string to be used in util/config/config.go.
Thank you for considering my use-case.
Best Regards

At present all secrets bar the bearer token must come from the configuration file, it is expected that you'll get your configuration management system to write them out while writing the rest of the file.

Hi,
Thank you for answering so quickly!
Our configuration management system (helm) runs on a Jenkins machine, which does not have access to any secrets (except the permission to publish Images) - which I imagine is a common set-up - this is by design since a lot of people have access to Jenkins.
The actual runtime environment does not matter much, but I also imagine that it is a common practice to only have secrets distributed with the minimum amount of access, and in this case only a few people may read or write secrets in our Kubernetes cluster.
Will you accept pull requests for the proposed change, or is this a matter of philosophy for Prometheus? If you accept pull requests, I might work on it.
Again, thank you!

The suggested way to handle this is to have the secrets interpolated into the config before you start Prometheus, for example you could do it with sed in simple cases.
Configuration management doesn't end at Helm, it goes all the way down to starting the binary. So this could include for example running a few commands before starting Prometheus.
Adding arbitrary headers is unlikely to be accepted (makes debugging too hard), nor are custom auth schemes (too niche, we recommend using a proxy for the rare time this comes up).

I understand your point, but I am specifically asking about basic_auth_file only at this point.
I understand your wanting to keep the code base neat and simple, but since you have allowed bearer_token_file would it not make sense to have basic_auth_file, too?
Thanks!

That's something that would require broader discussion. If we were to have it it'd be password_file.

I would second the request for providing basic auth credentials via a file.
Having them in the monolithic configuration files makes it unnecessarily difficult to configure prometheus with a configmap.
It would also make the configuration of the two authentication methods symmetric.

Thirded, should a ticket be open for asking for the password_file feature?

This was added in 2.3.0.


Add browser test

Extension should include automated release test via selenium-cucumber.

All done, but ended up using karma and jasmine instead of selenium.


Fixes #597: Add useref css block back to index.html

Any problem with this PR?

Gotcha. We've been redoing how this works over in material-sprint-branch. I need to bring the core build changes back into master as I think the overall workflow is a little cleaner.

Thanks @addyosmani , looks like material-sprint-branch is also using useref at the moment. I'm excited to see a completely new workflow soon :smile:

@addyosmani So you just want useref to swap out all the reference rather than using it in the workflow? If so I can do a PR. I just did some researches and there is no need to do https://github.com/google/web-starter-kit/commit/7209260cc099fac7eb6910002985bcc0f46126bf.

Also I can solve all the issues I raised here about useref if this is the case.

#597


[BUG] vSphere node driver cluster fails to provision when the nodes are cloned from a VM

Rancher Server Setup

Rancher version: v2.6-head(a3b5237)
Installation option (Docker install/Helm Chart): Docker

Information about the Cluster

Kubernetes version: v1.24.4+rke2r1

Cluster Type (Local/Downstream): Downstream

If downstream, what type of cluster? (Custom/Imported or specify provider for Hosted/Infrastructure Provider): vSphere node driver(1-cp, 1-etcd, 1-w)

User Information

What is the role of the user logged in? (Admin/Cluster Owner/Cluster Member/Project Owner/Project Member/Custom) Admin

If custom, define the set of permissions:

Describe the bug

In vSphere 7 environment, created a node driver cluster(1-cp, 1-etcd, 1-w) and cloned the nodes from an existing VM. Cluster fails to provision with error: Configuring control plane node(s) rke2-clone-rishabhcp-clone-84755c54f7-m2pks: waiting for probes: calico, kube-apiserver, kube-controller-manager, kube-scheduler, kubelet
On vSphere cp, etcd and worker node got created but same IP got assigned to all the 3 nodes.
Also not able to SSH into the nodes, it errors out with : client_loop: send disconnect: Broken pipe
See the steps below

To Reproduce

On vSphere 7 env, create a rancher server
Create a VM on vSphere
On rancher server provision a node driver cluster (1-cp, 1-etcd, 1-w) by selecting Clone an existing virtual machine -> Virtual Machine -> select the VM you created in the drop down

Observe that in vSphere cp, etcd, and worker nodes will be created but same IP gets assigned to all 3 nodes.

Result

Cluster fails to Provision when nodes are cloned from a VM.

Expected Result

Cluster should come into Active state.

/backport v2.6.9

I don’t see much about it in our docs, but I did find this article which is helpful.
tldr of that article
Warning: If you did not customize the VM, you will need to change the clone configuration before you boot it up to avoid an IP/MAC conflict. To do so, uncheck the network adapter in the VM settings once it has been cloned.

Our testing setup does not have a multi-network setup in order to properly clone the VM without having IP/MAC conflicts, hence why you are getting no IPs in this use case.  I would typically suggest something adding some warning to the rancher UI, but that would be doing more than what Vsphere’s UI does when cloning, so I doubt that would make much sense to do.
Closing this ticket due to misconfiguration / user error.


Add "secondscreencg" boilerplate

Also add "secondscreencg" as a W3C group in status.py

@tabatkins, the CI fail seems unrelated to this PR. 😇

Thanks!


MerakiParser - Wrong handling of EventEndTime epoch with nanoseconds

EventEndTime seems to be a bogus value, as it is parsed from the nanosecond part of Epoch timestamp (after the dot). From the examples from Cisco, this seems to be Epoch timestamp with nanoseconds after the decimal, and not an "endtime". https://documentation.meraki.com/General_Administration/Monitoring_and_Reporting/Syslog_Event_Types_and_Log_Samples
Graylog seems to drop event completely where Meraki is configured to log timestamps with nanoseconds (https://docs.graylog.org/docs/cisco-meraki), but in Sentinel's case it would be possible to discard the part after the dot, as the split is already in place.
Change(s):
Removed extraction of EventEndTime from Epoch for Solutions/CiscoMeraki/Parsers/CiscoMeraki.txt
Reason for Change(s):
EventEndTime does not seem to be something that is part of the raw Syslog from Meraki.
Testing Completed:
Yes
Checked that the validations are passing and have addressed any issues that are present:
Need Help?

Parser deployed into our environment and tested looking fine


Why is 'hint' not a supported option on Finds

Seems like hint option is not supported on Find or FindOne, despite it existing at the driver level.
Is there any work around for this, or should I make a PR to add it?

sorry, I should have searched history first.  :sad_parrot:


Remove useless aliases

These aliases don't provide real added value. Sometimes are just more
confusing, or conflicting with other aliases (like in the case of zone
records).
/cc @jodosha @jacegu

👍

I may be the weird guy but I being able to type client.contacts.list felt way better than writing client.contacts.list_contacts or  client.contacts.contacts 😕

@jacegu I would sacrify a little bit of expressiveness for simplicity. Honestly, I feel like have the same method called in 3 different ways can be confusing.
There is nothing bad to me to type 3-4 chars. And if someone wants a shortcut, he/she can always create its own alias.
It is also worth to mention that clients are objects, hence you can definitely have cases like
creator = client.domains

creator.list

That would be confusing. Much better to use
creator = client.domains

creator.domains
creator.list_domains

I made an exception for list_xxx just because this is the naming we have in other clients (e.g. in Go all the names are listFoo, you don't have just Foo).
But the single #create vs #create_domain seems definitely unnecessary to me.

I understand the need for simplification. What I'm only trying to say is that you are removing the method name that made the most sense to me.
I'd be surprised if people used the client like you are describing (in two steps). You can see how it was used inside the Slack app and it was never done in two steps.
I'm ok with removing it, just wanted to share my concerns about this. In fact I'd remove also the remaining aliases: even if it makes it look like the Go client we are accommodating a naming convention from a different language. (We can apply the same criteria: if someone comes from Go and feels the need for a list_ method they can create their own alias).

The reason I kept the list_xxx is to share an interface as similar as possible across all the clients, without sacrificing the specific language culture (in Ruby you would use domains and domain, not get_domain for example).
I'm fine to remove it, although I'd prefer to keep it for the reason above (not really for any other reason). Plus, it can be really confusing to use
client.domain.domains

but if we change it, we'll cut away cases where it does
client.zone.records

I'd be surprised if people used the client like you are describing (in two steps). You can see how it was used inside the Slack app and it was never done in two steps.

I would not be. Imagine someone working only with a subset of API methods. The slack app touched a lot of different endpoints.
Let me ask you one thing: besides a pure stylistic point of view, any specific issue with using
client.domain.list_domains

instead of
client.domain.list

No problem with client.domains.list_domains, I'd definitely use it over client.domains.domains.

@jacegu I have a counter-proposal for you. Given that we can't probably just kill these methods without a major release, as it will break compatibility, I'd like to proceed as follows:

Fix the issue with the record aliases (as that's a bug)
Officially deprecate #create, #delete, #update in favor of #create_<xxx> etc.
Ask you to update from list to list_xxx

I'm not going to remove list for now, but I'd like you to try to use list_xxx  and see how much it bothers you in the long run.
We can revisit this topic in a few months, before a next major release, and decide what we want to do with them.

@weppos 👍

@weppos I'have replaced the calls to #list in the apps that were using the Ruby client. Feel free to go ahead and deprecate that one too.

Re-consider for a next major release.


Show all the tier's name associated with the VPC Virtual router

ISSUE TYPE

Bug/Improvement request

COMPONENT NAME
Component: UI
CLOUDSTACK VERSION
Cloudstack version 4.18
SUMMARY
Show all the tier's name associated with the VPC Virtual router
Infrastructure > Virtual Routers
Steps to reproduce the issue

Create a vpc

Create some 2 tiers

Launch some vm's in the tiers

Navigate to Infrastructure > Virtual Routers

Currently, the Network Name column lists only one tier name's

Expected behavior
The Network Name column should list all the active tiers name
The listRouters api call contains all tiers name , Cloudstack needs to parse them correctly.
https://cloudstack.apache.org/api/apidocs-4.18/apis/listRouters.html
Actual behavior
The Network Name column is listing only one tier name which is the latest

@kiranchavala
do you think it makes sense to set the network name to empty ?

@weizhouapache The issue is only with the vpc routers, for the isolated networks, the network name is displayed correctly.
Either we can mark the network name empty for vpc routers or list all the tier names, anything should be fine
since the api output contains the tier's name in the nic, we can filter by
traffictype: "Guest",
"type": "Isolated"
Example

(CMK) > list routers id=23dd62eb-000a-4765-bb49-bdf6be949a0a
{
  "count": 1,
  "router": [
    {
      "account": "admin",
      "created": "2023-09-27T07:19:32+0000",
      "dns1": "<IP_ADDRESS>",
      "dns2": "<IP_ADDRESS>",
      "domain": "ROOT",
      "domainid": "c2e4ddb0-5127-11ee-b168-1e00af000354",
      "gateway": "<IP_ADDRESS>",
      "guestipaddress": "<IP_ADDRESS>",
      "guestmacaddress": "02:00:25:5c:00:02",
      "guestnetmask": "<IP_ADDRESS>",
      "guestnetworkid": "66bcfa56-c4ad-485a-8216-442b91e7d812",
      "guestnetworkname": "tier3",
      "hasannotations": false,
      "healthchecksfailed": false,
      "hostcontrolstate": "Enabled",
      "hostid": "d359fd16-e8b8-490f-8635-fd9bf5dac9c7",
      "hostname": "ref-trl-5653-k-M7-kiran-chavala-kvm1",
      "hypervisor": "KVM",
      "id": "23dd62eb-000a-4765-bb49-bdf6be949a0a",
      "isredundantrouter": false,
      "linklocalip": "<IP_ADDRESS>",
      "linklocalmacaddress": "0e:00:a9:fe:29:fd",
      "linklocalnetmask": "<IP_ADDRESS>",
      "linklocalnetworkid": "c6663d42-297c-4b2f-b046-d25d7e996bb6",
      "name": "r-46-VM",
      "networkdomain": "cs2cloud.internal",
      "nic": [
        {
          "gateway": "<IP_ADDRESS>",
          "id": "906c353a-a191-4cda-9fa1-8638cadaa76e",
          "ipaddress": "<IP_ADDRESS>",
          "isdefault": false,
          "macaddress": "0e:00:a9:fe:29:fd",
          "netmask": "<IP_ADDRESS>",
          "networkid": "c6663d42-297c-4b2f-b046-d25d7e996bb6",
          "traffictype": "Control"
        },
        {
          "broadcasturi": "vlan://51",
          "gateway": "<IP_ADDRESS>",
          "id": "8175db1a-ceaf-40ba-9ea6-df1e90a83946",
          "ipaddress": "<IP_ADDRESS>",
          "isdefault": true,
          "isolationuri": "vlan://51",
          "macaddress": "1e:00:29:00:00:05",
          "mtu": 1500,
          "netmask": "<IP_ADDRESS>",
          "networkid": "b8bd6301-8a5e-4554-80ab-b0d3642f8581",
          "traffictype": "Public"
        },
        {
          "broadcasturi": "vlan://1442",
          "gateway": "<IP_ADDRESS>",
          "id": "12188f1e-b5d0-4d84-9733-1318da2d3a1c",
          "ipaddress": "<IP_ADDRESS>",
          "isdefault": false,
          "isolationuri": "vlan://1442",
          "macaddress": "02:00:24:69:00:02",
          "mtu": 1500,
          "netmask": "<IP_ADDRESS>",
          "networkid": "421f2c0d-c06d-4cd4-a196-6620cd732a3c",
          "networkname": "tier1",
          "traffictype": "Guest",
          "type": "Isolated"
        },
        {
          "broadcasturi": "vlan://1444",
          "gateway": "<IP_ADDRESS>",
          "id": "3af897d5-8903-466b-a463-772df29dda91",
          "ipaddress": "<IP_ADDRESS>",
          "isdefault": false,
          "isolationuri": "vlan://1444",
          "macaddress": "02:00:31:79:00:02",
          "mtu": 1500,
          "netmask": "<IP_ADDRESS>",
          "networkid": "2c549723-5b23-4732-9db9-a5771ee264d5",
          "networkname": "tier2",
          "traffictype": "Guest",
          "type": "Isolated"
        },
        {
          "broadcasturi": "vlan://1449",
          "gateway": "<IP_ADDRESS>",
          "id": "9af7ad99-3bec-44b9-90b3-7678fb04e58c",
          "ipaddress": "<IP_ADDRESS>",
          "isdefault": false,
          "isolationuri": "vlan://1449",
          "macaddress": "02:00:25:5c:00:02",
          "mtu": 1500,
          "netmask": "<IP_ADDRESS>",
          "networkid": "66bcfa56-c4ad-485a-8216-442b91e7d812",
          "networkname": "tier3",
          "traffictype": "Guest",
          "type": "Isolated"
        }
      ],
      "podid": "7d3f020d-213f-47fc-a1d0-3f87d8bb075c",
      "podname": "Pod1",
      "publicip": "<IP_ADDRESS>",
      "publicmacaddress": "1e:00:29:00:00:05",
      "publicnetmask": "<IP_ADDRESS>",
      "publicnetworkid": "b8bd6301-8a5e-4554-80ab-b0d3642f8581",
      "redundantstate": "UNKNOWN",
      "requiresupgrade": false,
      "role": "VIRTUAL_ROUTER",
      "scriptsversion": "eed74cfafede6497047a34e5bf5fe0eb\n",
      "serviceofferingid": "b8f546fb-d814-429e-a05b-71ddb7d9b4d0",
      "serviceofferingname": "System Offering For Software Router",
      "softwareversion": "<IP_ADDRESS>",
      "state": "Running",
      "templateid": "c2e7c90b-5127-11ee-b168-1e00af000354",
      "templatename": "SystemVM Template (KVM)",
      "version": "4.18.0",
      "vpcid": "787efef7-2aec-4f76-98f3-a2be764016cd",
      "vpcname": "g1",
      "zoneid": "86d9a63a-3d0b-466f-8f32-81cefc39e31d",
      "zonename": "ref-trl-5653-k-M7-kiran-chavala"
    }
  ]
}

@weizhouapache The issue is with the vpc routers, for the isolated networks, the network name is displayed correctly.
Either we can mark the network name empty for vpc routers or list all the tier names, anything should be fine

agree @kiranchavala

since the api output contains the tier's name in the nic, we can filter by
traffictype: "Guest", "type": "Isolated"

It would be nice if it also shows all the associated IPs.

@weizhouapache @kiranchavala I had a look at @vishesh92 's implementation and discussed with him; I don't think we should clutter the list display with all this data. if you have more than 10 vpc with an avarage of 4 tier, the page is not looking as meant for humans anymore also more than four IP on a network is not looking good anymore. Anybody can find the data in the details views. So my proposal (in conjuction with @vishesh92 ): only show the default ip and "network" with a flag/check for isVPC.
How does that sound?


Code cannot be git cloned or downloaded

Hi,
Thanks for your work! However, I found that the code can not be git cloned or downloaded at the moment! Thanks!
Best

Hi, it's working for me. Maybe some type of network outage? What happens if you run git clone https://github.com/stelzner/osrt.git? Have you tried downloading it in the browser?

thanks, it is working now, it was some network issue


Wrong field name in Gremlin query (issue # 82532)

Here is screenshot of documentation page (How to query graph data in Azure Cosmos DB? | Microsoft Docs) :
Projection
You can project certain properties in the query results using the values step:
g. V().hasLabel( person' ) . values( 'firstuame' )
In SampleDB that created by service, Person item does not have field 'firsName" but does have a field 'name'
The statement in the documentation does not return any results and it should be corrected to:
g.V().hasLabel('person').values('name')
Please correct documentation.
Regards,
Marina Levin

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

ID: 2b8a0251-0820-0f74-33a3-ea5050dc0e30
Version Independent ID: b4732ce7-15c8-605c-63ec-7ac8e0642c3e
Content: How to query graph data in Azure Cosmos DB?
Content Source: articles/cosmos-db/graph/tutorial-query-graph.md
Service: cosmos-db
Sub-service: cosmosdb-graph
GitHub Login: @manishmsfte
Microsoft Alias: mansha

@mlevin19 Thanks for the feedback. We are reviewing this and will get back shortly.

@mlevin19 I opened a PR to fix it. In the future, if you see any issues in docs, feel free to open a PR by clicking on the edit button on the right.
#please-close

#reassign:@SnehaGunda


Create release for webhook, pagerduty, external exporters

This issue is to create new Pelorus release with all the new exporters available.
Requirement:

[ ] We need to doc our process
[ ] announcement to interested parties.
[ ] CI

[ ] Pagerduty https://github.com/konveyor/pelorus/issues/880
[ ] External exporters config https://github.com/konveyor/pelorus/issues/878

In release 2.0.8 and went to operator 0.0.5.


[Blog 2.2] Why is there v 1.14.1 shown for error reporting

Your Question

Website URL Path: https://www.coronawarn.app/de/blog/2021-05-12-corona-warn-app-version-2-2/
Line / Paragraph: Nutzer*innen können einen Fehlerbericht in der Corona-Warn-App erstellen (only german Version)
Question: The version is 14.4.1, there something probably went bad.

@jucktnich

Question: The version is 14.4.1, there something probably went bad.

The version shown is 1.14.1 (0) which is just an older version than 2.2. You can see how long this functionality has been in the app but not released.
I think this should be a bug report, and perhaps somebody with an iOS 2.2 app installed could replace this screenshot with one from version 2.2 through a PR. I can only provide a screenshot for Android and I wouldn't want to mix up the two operating systems in one blog.

@MikeMcC399 I'll do that with. Hope that's fine with you @jucktnich.

Yeah fine by me XD. I even don't have an iPhone with notch and you an XS right. This brings consistency.

Please take a look at #1265


[Autocomplete] getOptionLabel, onInputChange, onChange are super confusing when used together

[x] The issue is present in the latest release.
[x] I have searched the issues of this repository and believe that this is not a duplicate.

Current Behavior 😯
After working through some of the things in #19267, I'm still having problems implementing a freesolo query editor with autocomplete.
Example of what I'm trying to accomplish:

Essentially, I put together a few examples from the demos page and thought I could use getOptionLabel to update the input field with the correct value after a user picks an option, however this doesn't exactly work properly because of the way events are fired and state is managed.
The biggest problem is that I currently update the local inputValue custom state with a TextField onChange handler and that function as well as useEffect are not always fired as expected. Also, getOptionLabel is fired multiple times and not always the same number of times.
Expected Behavior 🤔
When a user makes any change (typing, selecting an option, editing the value) there should always be a handler (the same one) that can update state.
Steps to Reproduce 🕹
Component code:
<Autocomplete
            id="jql-editor"
            style={{ width: 300 }}
            getOptionLabel={getOptionLabel}
            filterOptions={x => x}
            options={options}
            includeInputInList
            freeSolo
            autoHighlight
            disableOpenOnFocus
            onChange={handleAutocompleteChange}
            onInputChange={handleAutocompleteInputChange}
            renderInput={params => (
                <TextField
                    {...params}
                    label="Enter JQL"
                    variant="outlined"
                    fullWidth
                    inputRef={inputField}
                    onChange={handleTextFieldChange}
                />
            )}
            renderOption={option => {
                const matches = match(option.displayName, inputValue);
                const parts = parse(option.displayName, matches);

                return (

                        {parts.map((part, index) => (
                             console.log(`item clicked: ${part.text}`)}>
                                {part.text}

                        ))}

                );
            }}
        />

Notes:
handleTextFieldChange updates the local 'inputValue' state from event.target.value
handleAutocompleteChange & handleAutocompleteInputChange are doing nothing but logging the current state.
getOptionLabel takes the passed option, the selectionStart and the inputValue and calculates the new complete query string.
useEffect fetches options using an async function and sets the new options as local state which should force the Autocomplete to re-render if there are new options. This is dependent on the inputValue state being correct to properly fetch new options which is currently failing and in a lot of cases, returning the same options even though the textField value has changed because the local state isn't correct.
Context 🔦
After debugging, It looks like the events are fired as such:
handleTextFieldChange: fires on typing, but not when option is selected
handleAutocompleteChange: only fires when an option is selected with the option value
handleAutocompleteInputChange: fires on typing as 'input' and on option selected as 'reset'
getOptionLabel: fires when option is selected. Also fires on focus events, and "randomly".
Here's a screenshot of the events that happen when typing a single letter and then selecting an option. They are separated by a "click" log entry:

After that, here' are the events that fire when the input is focused again and then a single backspace is pressed. Note: when backspace is pressed:

Your Environment 🌎

Tech
Version

Material-UI
v4.8.3

Material-UI LAB
v4.0.0-alpha.39

React
16.12.0

Browser
chrome

TypeScript
3.7.4

etc.

@oliviertassinari here's the code I have that's mostly working. Still suffers from #19705
Just posting it here in case someone else finds this.
interface JQLInputProps {
    jqlAutocompleteRestData: JqlAutocompleteRestData;
    suggestionFetcher: FieldSuggestionFetcher;
    onJqlChange?: (newValue: string) => void;
    value?: string;
    disabled?: boolean;
}

const loadingOption: Suggestion = { displayName: 'Loading...', value: '__-loading-__' };

export const JQLInput: React.FunctionComponent<JQLInputProps & TextFieldProps> = ({ jqlAutocompleteRestData, suggestionFetcher, value, onJqlChange, disabled, ...tfProps }) => {
    const [inputValue, setInputValue] = useState((value) ? value : '');
    const [selStart, setSelStart] = useState<number>(0);
    const [fieldPositionDirty, setFieldPositionDirty] = useState<boolean>(false);
    const inputField = useRef<HTMLInputElement>();
    const [open, setOpen] = React.useState<boolean>(false);
    const [fetching, setFetching] = React.useState<boolean>(false);

    const suggestor = useMemo<JqlSuggestor>(() => new JqlSuggestor(jqlAutocompleteRestData, suggestionFetcher), [jqlAutocompleteRestData, suggestionFetcher]);

    // get initial data
    const suggestions: Suggestion[] = [{ displayName: 'NOT', value: 'NOT' }, { displayName: 'start group (', value: '(' }];
    suggestions.push(...jqlAutocompleteRestData.visibleFieldNames.map<Suggestion>(f => ({ displayName: f.displayName, value: f.value })));

    const [options, setOptions] = useState<Suggestions>(suggestions);
    const optionsLoading = open && fetching;

    const fetch = React.useMemo(
        () =>
            async (input: string, startIndex: number) => {
                setOptions([loadingOption]);
                if (!open) {
                    setOpen(true);
                }
                var suggestions: Suggestions = [];

                setFetching(true);
                suggestions = await suggestor.getSuggestions(input, startIndex);
                setFetching(false);
                setOptions(suggestions);
            },
        [open, suggestor],
    );

    const handleTextFieldChange = (event: React.ChangeEvent<HTMLInputElement>) => { // fires on typing, but not when option is selected
        // update our local state
        if (inputField.current) {
            var newStart = (inputField.current.selectionStart) ? inputField.current.selectionStart : 0;
            fetch(event.target.value, newStart);
            setSelStart(newStart);
        }
        setInputValue(event.target.value);

    };

    const handleAutocompleteChange = (event: React.ChangeEvent<HTMLInputElement>, value: any) => { //only fires when an option is selected with the option value
        var insertText: string = (value) ? value.value : "";
        var newCursorPos = 0;
        if (insertText === '' || insertText === loadingOption.value) {
            return;
        }

        if (inputField.current) {
            newCursorPos = selStart;
            [insertText, newCursorPos] = suggestor.calculateNewValueForSelected(inputValue, insertText, selStart);
        }
        setInputValue(insertText);
        setSelStart(newCursorPos);

        // if we're not at the end, we're editing and need to update the cursor position later when the text field catches up
        if (newCursorPos !== insertText.length) {
            setFieldPositionDirty(true);
        }
    };

    const getOptionLabel = (option: Suggestion): string => { //fires when option is selected and should return the new input box value in it's entirety. Also fires on focus events, and randomly.
        // if we recently edited a value, we need to set the new cursor position manually
        if (fieldPositionDirty && inputField.current) {
            inputField.current.value = inputValue; // have to reset the value to get the right sel index
            inputField.current.selectionStart = selStart;
            inputField.current.selectionEnd = selStart;
            setFieldPositionDirty(false);
        }

        return inputValue;
    };

    const handleTextFieldKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {
        // update our local cursorPosition on arrow keys so we fetch the proper options
        switch (event.key) {
            case 'ArrowRight': {
                if (inputField.current && inputField.current.selectionStart !== null && inputField.current.selectionStart !== inputField.current.value.length) {
                    const newStart = (inputField.current.selectionStart < inputField.current.value.length) ? inputField.current.selectionStart + 1 : inputField.current.value.length;
                    fetch(inputField.current.value, newStart);
                    setSelStart(newStart);
                }
                break;
            }
            case 'ArrowLeft': {
                if (inputField.current && inputField.current.selectionStart && inputField.current.selectionStart !== 0) {
                    const newStart = (inputField.current.selectionStart > 0) ? inputField.current.selectionStart - 1 : 0;
                    fetch(inputField.current.value, newStart);
                    setSelStart(newStart);
                }
                break;
            }
            case 'Enter': {

                break;
            }
        };
    };

    useEffect(() => {

        if (onJqlChange) {
            onJqlChange(inputValue);
        }

    }, [inputValue, onJqlChange]);

    return (
        <Autocomplete
            id="jql-editor"
            disableOpenOnFocus={false}
            getOptionLabel={getOptionLabel}
            filterOptions={x => x}
            options={options}
            value={inputValue}
            includeInputInList
            freeSolo
            autoHighlight
            onChange={handleAutocompleteChange}
            loading={optionsLoading}
            open={open}
            disabled={disabled}
            onOpen={() => {
                setOpen(true);
            }}
            onClose={() => {
                setOpen(false);
            }}
            renderInput={params => (
                <TextField
                    {...params}
                    {...tfProps}
                    inputRef={inputField}
                    onChange={handleTextFieldChange}
                    onKeyDown={handleTextFieldKeyDown}
                    InputProps={{
                        ...params.InputProps,
                        endAdornment: (
                            <React.Fragment>
                                {optionsLoading ? <CircularProgress color="inherit" size={20} /> : null}
                                {params.InputProps.endAdornment}
                            </React.Fragment>
                        ),
                    }}
                />
            )}
            renderOption={option => {
                const matches = match(option.displayName, suggestor.getCurrentToken().value);
                const parts = parse(option.displayName, matches);

                return (

                        {parts.map((part, index) => (

                                {part.text}

                        ))}

                );
            }}
        />
    );
};

I'm closing as I don't think there is much leverage to apply.

Any ideas on how to use inputValue and onInputChange to persist the user's query for multiple selections without using onChange to get the selected values? I saw in another thread that onChange and onInputChange shouldn't be used together, but how else could I get the selected values? I've been pulling my hair out all day over this - if I use onChange and onInputChange together, my Autocomplete is just way too slow.


Unpaid leave is shown as negative flex time saldo change in calendar

Flex saldo change calendar:

Month's row in summary:

Thanks, will fix


Asset browser V1

Features

Reflect the assets directory on disk
Auto sync if any change is made to the asset directory
TopBar show the current path
Any segment of the TopBar path is clickable to go back to the desired directory
Folder assets can be clicked to step into them
I've made 2 icon in figma to get things started

I've decided to go this way because from my experience I've realize people tends to prefer asset browser that are synced with the disk.
Testing
To test it, you can bind it to the editor UI like so:

Go to the bevy_editor crate
Add bevy_asset_browser.workspace = true to Cargo.toml
Open src/ui.rs
Import use bevy_asset_browser::{AssetBrowserNode, AssetBrowserPlugin, AssetBrowserSet};
In the plugin build function: configure_sets AssetBrowserSet and add_plugins AssetBrowserPlugin
then add parent.spawn(AssetBrowserNode); to the UI

Notes

I don't know where the game assets will be stored, so for now I've target the assets folder in the root directory
To sync the asset browser to any external changes, I'm using the folder's metadata's modified time. I've stored the last modified value in a resources but I'm not sure it belong (since it has no purpose externally), is that ok?
Please check for typos or weird phrasing, I'm not a native English speaker. (you've probably already noticed that 😆) trying my best
I'm not using bevy_pane_layout, I haven't seen any other crate used it yet, so I'm not sure how to use it or if it's even finished

Disclaimer
I'm here to help, if anything's ain't to your liking I'll be happy to change it. (My concern atm is that it might what you've envisioned)
I'm not a Rust nor a Bevy expert, I'll do my research but if I didn't use a rust/bevy feature, it's probably that I didn't knew it existed and I'll be happy to rework my code accordingly.
Hope this helps 🙏

You should be using svgs.

bevy_pane_layout isn't finished but it's in a state where you can target it for testing.
I'll make a PR later to show how to utilize it for testing on.

You should be using svgs.

That's what I tried at first, but it seems that bevy doesn't support SVG loading yet
Don't know what's the external crate policy is, but I wasn't able to make bevy_svg work anyway.
A mismatched between the bevy rev that the editor is using and the latest bevy release bevy_svg is using (something about plugin::sealed::Plugins<_> not being implemented)

You should be using svgs.

That's what I tried at first, but it seems that bevy doesn't support SVG loading yet
Don't know what's the external crate policy is, but I wasn't able to make bevy_svg work anyway.
A mismatched between the bevy rev that the editor is using and the latest bevy release bevy_svg is using (something about plugin::sealed::Plugins<_> not being implemented)

Ah right damn. Should probably upstream that soon, alright just add the svg sources to the PR but keep using the PNG till we can swap over to the svgs.

Bit offtopic question, what's the license for those icon assets?

Bit offtopic question, what's the license for those icon assets?

Idk, I've just spend couple minutes making them in Figma. I'm happy to give every right to the bevy foundation
I imagine we're going to replace soon enough, either to make better ones or to use ones from an icon library

Just fixed the latest conflict 👍


Incorporated the recently added Regos from the commercial into the oss

We have incorporated the recently added Rego scripts from the commercial into the oss.
The following Regos included:
Prevent binding to privileged ports - KSV117
Default security context configured - KSV118
NET_RAW capability added - KSV119
SYS_MODULE capability added - KSV120
Kubernetes resource with disallowed volumes mounted - KSV121

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

hi @mjshastha do you have another username ManojShastha? If so can you sign the CLA using that? Right now the CLA checks is failing because of it.

hi @chen-keinan can you take a look?

lgtm 🚀


CobiGen CLI update command test

Adresses/Fixes #958.
Implements

Automatic update of all outdated plugins with --all option
Test for plugin update
Fix for plugin selection bug

@devonfw/cobigen

Can you check why the UpdateCommand test is failing on Jenkins? Please see the Jenkins logs here


SSL Connection Issues

I posted about this on the support thread but didn't get any response. I've been connecting the plugin through a Slack server and it connects just fine when I set the SSL param to false, but if I try to connect through SSL, it fails saying 'no password' (see below).

[11/01/2016 16:25:33] *** IRC_OnConnectAttempt: Bot ID 1 attempting to connect to [slack ip]:6667...
[11/01/2016 16:25:34] *** IRC_OnUserRequestCTCP (Bot ID 1): User slackbot (No hostname) sent CTCP request: VERSION
[11/01/2016 16:25:34] *** IRC_OnUserSay (Bot ID 1): User slackbot (No hostname) sent message to SAMP: no password
[11/01/2016 16:25:34] *** IRC_OnReceiveNumeric (Bot ID 1): 444 (:no password!!!)
[11/01/2016 16:25:34] *** IRC_OnDisconnect: Bot ID 1 disconnected from [slack ip]:6667 (End of file)

The password is being properly set in IRC_Connect(), otherwise I don't believe I'd be getting a proper connection when not utilizing SSL. I'm attempting this in a Windows environment but have not tried it in a Linux-based environment (though it will end up being used on CentOS).

You are probably connecting to a port on the Slack server that is plain text and does not have SSL.

I've attempted the three listed ports (6667, 6697, and 8000) with no success. The only item that Slack lists that's relevant to SSL connections is this:

If your IRC client has a checkbox to enable SSL, check it! Your IRC connection is not encrypted by default.

It's possible that the issue is on their end as they also state that the IRC gateway is more or less still in beta. I'll drop them an email about this as well just to see if they could help debug this a bit more.

Try to connect to Freenode or another large IRC network that has SSL.

Connects just fine to freenode through SSL, so it's not an issue with the setup. Seems it may be with Slack specifically, to which I've created a help request with them.
I'd like to keep this issue open in the meantime, in case anyone else here has more to offer or to update on anything Slack says about it.

Just an update since Slack support and I have been having some back and forth, they believe that there may be some compatibility issues between the two. This is what was said in particular:

"It seems that our gateway simply isn't compatible with this plugin, but if you'd like to send me your config info, I can double-check to make sure you haven't introduced an error."

...

"That all looks good... I'm afraid we simply don't support connections from that client; our gateway support is admittedly particular. Unfortunately, we don't have the game or the server here to test it more thoroughly."

I'd still like to see if we could figure something out on this end, particularly what incompatibility exists when it comes to SSL. Maybe Incognito could provide some insight on the matter?

It looks like the password simply isn't sent over SSL connections. Thanks for catching that. I'll fix it in a bit.


Prevent Compose image pre-fetching from pulling all tags when tag is absent

Fixes #3442

I believe this is likely to help with some of our long CI times - particularly the Windows CI job which has been timing out quite regularly of late.


Unable To Grab Grenades From Lockers

Description

Some flashbangs/teargas grenades can't be picked up from the floor if they're coming from a locker. Once grabbed, the grenade gets sent back to where it was. Also heard it happened to another player when pulling one from a bag.

sometimes the fill on secbelts fails and the grenades inside of them appear in the right click context menu, i wonder if that's related to this.
i think it may be caused by the grenades somehow "not fitting" into the secbelt, because if you try to put a grenade into the secbelt it'll delay the insert for a second and have a pop up "that doesn't fit there!"

i think it may be caused by the grenades somehow "not fitting" into the secbelt, because if you try to put a grenade into the secbelt it'll delay the insert for a second and have a pop up "that doesn't fit there!"

this bug also happens with plant bags (aka security gets x-ray into plant bags to arrest botanists over gatfruits/deathnettle at max efficiency)


Add archival logic to MSRuleCleaner.

Fixes #10018
Status
needs-more-testing
Description
Moves the workflows archival logic from the CherryPy thread to the MSRuleCleaner. This is implemented in two steps:

Cleans all the LogDB records for the current workflow
Makes the needed request status transition in reqmgr

Is it backward compatible (if not, which system it affects?)
YES
Related PRs
Needs some more configuration parameters such as:
wmstatsUrl,
logDBUrl,
logDBReporter,
archiveDelayHours
The related deployment config PR to be put here later today
External dependencies / deployment changes
NO

Alan @amaltaro please go ahead and take a look, while I prepare a fix for the Unit test that I expect to break with this PR, so we may discuss the so proposed solution here.  Thanks in advance!

test this please

@amaltaro just take a look at the currently proposed changes. Mostly speaking about the in memory approach for the status transition history. This is not the final version yet. There are still the changes to the cherrypy thread to come.

test this please

test this please

@amaltaro Alan, Please take a look at this PR again. I managed to also catch two bugs and cover them with my latest commit. There will still be two unittests that are about to break, but this is because I need to figure out how to deal with the LogDB session inside the unit test setup. Anyway, please have a look.
ps. In case it will be easier fro you just tell me and I will sqaush all the commits in two sets - one for the feature changes and one for the unit tests (this PR kind of became heavy to track already)

... but this is because I need to figure out how to deal with the LogDB session inside the unit test setup ..

Todor, I think I have already struggled with LogDB in unit tests as well. Try setting it to None (or have a look at other unit tests)

Hi @amaltaro, Please go ahead and review the final version of this PR. I think I have addressed all the comments from the previous iteration.  And also the unit tests must be fixed now.

@amaltaro , I just commited one possible way of reshuffling some function calls so that we have the _cleanLogDB() called outside the archival method. Please take a look and let me know if you like it, so I can squash 'em all ;)

Thanks for all the follow up, Todor.


Add special SEE icon treatment for special places

Right now we've optimized the outdoor style for outdoor recreation (or DO). Let's try adding add a second icon treatment (more like we style hospitals where the badge is grey with a color glyph) for places in the urban landscape we go to visit and take in the sights (or SEE).

museum
attraction star
zoo
subways (since they help us start/end the walking journey)

Re-opening as there are more transit icons we should do the same color treatment for.
Here in SF at 15/37.7911/-122.3940:


Tweaks to @concaf's kube-ingress PR

This is @containscafeine's code from https://github.com/datawire/ambassador/pull/1717, with master merged in and a small change to pass type checking.

I'm merging with my own review since this is basically me reviewing Shubham's code. :wink:


Auto-detect OS

Detect which OS the runner is using and download the correct binary.
Include a test against MacOS as well.
This'll include refactoring of how the "file" input is specified.

Covered by #29


Strategic merge clobbers some fields

Problem
We've found that the PodTemplateSpec merge behavior clobbers generated fields it shouldn't (more detail in Background). We want to only overwrite generated fields if the user patch specifies a value for that particular value.
Possible approaches
Use strategicpatch differently
As far as we know, other upstream Kubernetes tools use the strategicpatch library we currently use without the problems we've observed. We could review their implementation to try and determine what we need to do differently.
Previous discussion with API Machinery suggests that using strategicpatch in our code may not be viable, though they do not go into details why.
Use server-side apply
The API Machinery recommendation is to use server-side apply instead of patching client side. This should avoid the clobbering issues, but presumably requires applying the base resource and patch in separate calls to the Kubernetes API. This in turn presumably means that we'll end up with extra Deployment generations and unnecessary temporary ReplicaSets/Pods. We do not know of a way to tell the upstream controller to wait for a patch before spawning a new generation ReplicaSet.
https://kubernetes.io/blog/2021/08/06/server-side-apply-ga/#using-server-side-apply-in-a-controller discusses controller use of SSA further.
Use JSONPatch
JSONPatch is an alternate patch language. It defines specific actions (e.g. append, replace) for patch components to avoid clobbering, but AFAIK is limited in terms of overriding existing values for a specific key. It is also somewhat harder to write than strategic patches.
Invoke Kustomize
Kustomize supports strategic patches and manages to apply them without clobbering client-side. We could construct the equivalent of a Kustomize directory containing the base (generated) Deployment and a patch config with the user patch, then invoke Kustomize on it.
Having to construct a fake directory in memory and build the supporting metadata is annoying, but appears to be necessary for this approach based on cursory review of the Kustomize client code. There doesn't appear to be an immediately obvious way to just ask it to apply a single patch to a single resource.

Background
We use a wrapper around the API Machinery strategicpatch package to handle applying user patches for the ControlPlane Deployment and for the DataPlane Deployment. This feature takes a user-provided PodTemplateSpec and merges it with the controller-generated PodTemplateSpec, with the goal of letting users add extra fields or override specific generated ones, while leaving other generated fields as-is.
We've found that these patches do not quite work the same way when applied in our code as they do when applied via kubectl. Merge will sometimes obliterate generated configuration that it should not have. Arrays in particular are apparently merged via index, whereas kubectl will match on a merge key (for example, the name field of an EnvVar) and only replace entries if that key matches.
Workarounds
On the UX end, including generated values in the patch provides a crude workaround for this, but it's not really suitable outside of tests. Users should not need to retrieve generated values and keep track of changes to them to build their patches.
In code, we can perform our own approximation of the type-aware merge by extracting generated fields before merge and backfilling them in if we don't find an override. This adds a fair degree of complexity and does not scale well, since we need to find every problem field and add a backfill handler for it.

It's happens for field volumes too

It's happening for field volumes too

@programmer04 can you provide concrete examples where it does not work as expected?

Applying something like that
kind: GatewayConfiguration
apiVersion: gateway-operator.konghq.com/v1beta1
metadata:
  name: kong
  namespace: default
spec:
  dataPlaneOptions:
    deployment:
      replicas: 2
      podTemplateSpec:
        spec:
          containers:
            - name: proxy
              image: kong/kong-gateway:3.7
              readinessProbe:
                initialDelaySeconds: 1
                periodSeconds: 1
              volumeMounts:
                - name: example-cm
                  mountPath: /opt/kong/files
          volumes:
            - name: example-cm
              configMap:
                name: example-cm
  controlPlaneOptions:
    deployment:
      podTemplateSpec:
        spec:
          containers:
            - name: controller
              # renovate: datasource=docker versioning=docker
              image: kong/kubernetes-ingress-controller:3.2.3
              readinessProbe:
                initialDelaySeconds: 1
                periodSeconds: 1
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: example-cm
  namespace: default
data:
  test.txt: |
    Hello World!!!
---
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
  name: kong
spec:
  controllerName: konghq.com/gateway-operator
  parametersRef:
    group: gateway-operator.konghq.com
    kind: GatewayConfiguration
    name: kong
    namespace: default
---
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: kong
  namespace: default
spec:
  gatewayClassName: kong
  listeners:
    - name: http
      protocol: HTTP
      port: 80

results in
[manager] 2024-08-12T13:31:14.339Z - ERROR - Reconciler error - {"controller": "dataplane", "controllerGroup": "gateway-operator.konghq.com", "controllerKind": "DataPlane", "DataPlane": {"name":"kong-m22gb","namespace":"default"}, "namespace": "default", "name": "kong-m22gb", "reconcileID": "d6c0120f-0d82-43e5-b73a-c56083155eb9", "error": "could not build Deployment for DataPlane default/kong-m22gb: failed creating Deployment for DataPlane kong-m22gb: Deployment.apps \"dataplane-kong-m22gb-w87ps\" is invalid: [spec.template.spec.volumes[0].configMap: Forbidden: may not specify more than 1 volume type, spec.template.spec.containers[0].volumeMounts[0].name: Not found: \"example-cm\"]"}

because the Deployment that operator tries to submit looks like that
{
  "metadata": {
    "generateName": "dataplane-kong-m22gb-",
    "namespace": "default",
    "creationTimestamp": null,
    "labels": {
      "app": "kong-m22gb",
      "gateway-operator.konghq.com/dataplane-deployment-state": "live",
      "gateway-operator.konghq.com/managed-by": "dataplane",
      "gateway-operator.konghq.com/selector": "02c83d63-658c-4929-808c-6d19a25fa4db",
      "konghq.com/gateway-operator": "dataplane"
    },
    "ownerReferences": [
      {
        "apiVersion": "gateway-operator.konghq.com/v1beta1",
        "kind": "DataPlane",
        "name": "kong-m22gb",
        "uid": "aaff6e89-e4ea-4380-8c58-cf64c57a5b99",
        "controller": true
      }
    ],
    "finalizers": [
      "gateway-operator.konghq.com/wait-for-owner"
    ]
  },
  "spec": {
    "replicas": 2,
    "selector": {
      "matchLabels": {
        "app": "kong-m22gb",
        "gateway-operator.konghq.com/selector": "02c83d63-658c-4929-808c-6d19a25fa4db"
      }
    },
    "template": {
      "metadata": {
        "creationTimestamp": null,
        "labels": {
          "app": "kong-m22gb",
          "gateway-operator.konghq.com/selector": "02c83d63-658c-4929-808c-6d19a25fa4db"
        }
      },
      "spec": {
        "volumes": [
          {
            "name": "example-cm",
            "secret": {
              "secretName": "dataplane-kong-m22gb-2sldc",
              "items": [
                {
                  "key": "tls.crt",
                  "path": "tls.crt"
                },
                {
                  "key": "tls.key",
                  "path": "tls.key"
                },
                {
                  "key": "ca.crt",
                  "path": "ca.crt"
                }
              ]
            },
            "configMap": {
              "name": "example-cm",
              "defaultMode": 420
            }
          },
          {
            "name": "cluster-certificate",
            "secret": {
              "secretName": "dataplane-kong-m22gb-2sldc",
              "items": [
                {
                  "key": "tls.crt",
                  "path": "tls.crt"
                },
                {
                  "key": "tls.key",
                  "path": "tls.key"
                },
                {
                  "key": "ca.crt",
                  "path": "ca.crt"
                }
              ]
            }
          }
        ],
        "containers": [
          {
            "name": "proxy",
            "image": "kong/kong-gateway:3.7",
            "ports": [
              {
                "name": "proxy",
                "containerPort": 8000,
                "protocol": "TCP"
              },
              {
                "name": "proxy-ssl",
                "containerPort": 8443,
                "protocol": "TCP"
              },
              {
                "name": "metrics",
                "containerPort": 8100,
                "protocol": "TCP"
              },
              {
                "name": "admin-ssl",
                "containerPort": 8444,
                "protocol": "TCP"
              }
            ],
            "env": [
              {
                "name": "KONG_ADMIN_ACCESS_LOG",
                "value": "/dev/stdout"
              },
              {
                "name": "KONG_ADMIN_ERROR_LOG",
                "value": "/dev/stderr"
              },
              {
                "name": "KONG_ADMIN_GUI_ACCESS_LOG",
                "value": "/dev/stdout"
              },
              {
                "name": "KONG_ADMIN_GUI_ERROR_LOG",
                "value": "/dev/stderr"
              },
              {
                "name": "KONG_ADMIN_LISTEN",
                "value": "<IP_ADDRESS>:8444 ssl reuseport backlog=16384"
              },
              {
                "name": "KONG_ADMIN_SSL_CERT",
                "value": "/var/cluster-certificate/tls.crt"
              },
              {
                "name": "KONG_ADMIN_SSL_CERT_KEY",
                "value": "/var/cluster-certificate/tls.key"
              },
              {
                "name": "KONG_CLUSTER_CERT",
                "value": "/var/cluster-certificate/tls.crt"
              },
              {
                "name": "KONG_CLUSTER_CERT_KEY",
                "value": "/var/cluster-certificate/tls.key"
              },
              {
                "name": "KONG_CLUSTER_LISTEN",
                "value": "off"
              },
              {
                "name": "KONG_DATABASE",
                "value": "off"
              },
              {
                "name": "KONG_NGINX_ADMIN_SSL_CLIENT_CERTIFICATE",
                "value": "/var/cluster-certificate/ca.crt"
              },
              {
                "name": "KONG_NGINX_ADMIN_SSL_VERIFY_CLIENT",
                "value": "on"
              },
              {
                "name": "KONG_NGINX_ADMIN_SSL_VERIFY_DEPTH",
                "value": "3"
              },
              {
                "name": "KONG_NGINX_WORKER_PROCESSES",
                "value": "2"
              },
              {
                "name": "KONG_PLUGINS",
                "value": "bundled"
              },
              {
                "name": "KONG_PORTAL_API_ACCESS_LOG",
                "value": "/dev/stdout"
              },
              {
                "name": "KONG_PORTAL_API_ERROR_LOG",
                "value": "/dev/stderr"
              },
              {
                "name": "KONG_PORT_MAPS",
                "value": "80:8000, 443:8443"
              },
              {
                "name": "KONG_PROXY_ACCESS_LOG",
                "value": "/dev/stdout"
              },
              {
                "name": "KONG_PROXY_ERROR_LOG",
                "value": "/dev/stderr"
              },
              {
                "name": "KONG_PROXY_LISTEN",
                "value": "<IP_ADDRESS>:8000 reuseport backlog=16384, <IP_ADDRESS>:8443 http2 ssl reuseport backlog=16384"
              },
              {
                "name": "KONG_STATUS_LISTEN",
                "value": "<IP_ADDRESS>:8100"
              }
            ],
            "resources": {
              "limits": {
                "cpu": "1",
                "memory": "1000Mi"
              },
              "requests": {
                "cpu": "100m",
                "memory": "20Mi"
              }
            },
            "volumeMounts": [
              {
                "name": "example-cm",
                "readOnly": true,
                "mountPath": "/opt/kong/files"
              },
              {
                "name": "cluster-certificate",
                "readOnly": true,
                "mountPath": "/var/cluster-certificate"
              }
            ],
            "readinessProbe": {
              "httpGet": {
                "path": "/status/ready",
                "port": 8100,
                "scheme": "HTTP"
              },
              "initialDelaySeconds": 5,
              "timeoutSeconds": 1,
              "periodSeconds": 10,
              "successThreshold": 1,
              "failureThreshold": 3
            },
            "lifecycle": {
              "preStop": {
                "exec": {
                  "command": [
                    "/bin/sh",
                    "-c",
                    "kong quit"
                  ]
                }
              }
            },
            "terminationMessagePath": "/dev/termination-log",
            "terminationMessagePolicy": "File",
            "imagePullPolicy": "IfNotPresent"
          }
        ],
        "restartPolicy": "Always",
        "terminationGracePeriodSeconds": 30,
        "dnsPolicy": "ClusterFirst",
        "securityContext": {},
        "schedulerName": "default-scheduler"
      }
    },
    "strategy": {
      "type": "RollingUpdate",
      "rollingUpdate": {
        "maxUnavailable": 0,
        "maxSurge": 1
      }
    },
    "revisionHistoryLimit": 10,
    "progressDeadlineSeconds": 600
  },
  "status": {}
}

clobbered merge
...
"spec": {
  "volumes": [
    {
      "name": "example-cm",
      "secret": {
        "secretName": "dataplane-kong-m22gb-2sldc",
        "items": [
          {
            "key": "tls.crt",
            "path": "tls.crt"
          },
          {
            "key": "tls.key",
            "path": "tls.key"
          },
          {
            "key": "ca.crt",
            "path": "ca.crt"
          }
        ]
      },
      "configMap": {
        "name": "example-cm",
        "defaultMode": 420
      }
    },
...

example-cm should have its entry in spec.volumes array - see related upstream issue

https://github.com/kubernetes/kubernetes/issues/112014

I see. I believe #255 could help here but I'd have to double check. That PR has been targeted for 1.4 but no one worked on it since I proposed this (draft) change in May.
I'm happy to talk about it thought.

I skimmed through #255 and it looks reasonable. Definitely we should fix it


Automator: update istio/client-go@master dependency in istio/istio@master

Generated by Automator - 2021-10-04T22:58:22+00:00

@istio-testing: The following test failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name
Commit
Details
Required
Rerun command

integ-istiodremote-k8s-tests_istio
9302da1debd9a8a4bb06c15ed1a1fcd56a53773b
link
true
/test integ-istiodremote-k8s-tests_istio

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.


Dynamics 365 Sales Premium Missing

We have SKU 749742bf-0d37-4158-a120-33567104deeb. How can I find the associated Service Plan IDs?

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

ID: 7c245452-161d-89a1-c026-99a0721cf071
Version Independent ID: 16dec59a-eb83-1837-4efd-4645e7aeaed2
Content: Product names and service plan identifiers for licensing - Azure AD
Content Source: articles/active-directory/enterprise-users/licensing-service-plan-reference.md
Service: active-directory
Sub-service: enterprise-users
GitHub Login: @Nicholak-MS
Microsoft Alias: nicholak

@NHSharePointGuy
Thanks for your feedback! I've assigned this issue to the author who will investigate and update as appropriate.

SKU 749742bf-0d37-4158-a120-33567104deeb has been updated with the missing service plans in the online document as well as the associated downloadable csv. The updates will publish later today.
#pleae-close


Replace Authorizer with Predicate<String>

Fixes #57

Looking at the amount of code that has changed in this PR, it's not much at all. I think all we have done here is remove an interface which makes clear based on the name of the method and argument how it's used and replaced it with a generic object that is unclear. Because of that we have to try and explain to the user what they should implement in javadoc based on how it's going to be used. I'm not sold on the fact that we should make this change.

Looking at the amount of code that has changed in this PR, it's not much at all. I think all we have done here is remove an interface which makes clear based on the name of the method and argument how it's used and replaced it with a generic object that is unclear. Because of that we have to try and explain to the user what they should implement in javadoc based on how it's going to be used. I'm not sold on the fact that we should make this change.

Makes sense to me. I can go ahead and close this PR for now.
The ticket also mentioned:

could at least extend Predicate with a default method, so either way of calling could be used

Does anyone have an opinion on whether this might be worth it or not? I am fine with just closing this PR and the ticket but just wanted to explore all the ideas mentioned in the ticket.

If Authorizer is kept, then it should have the @FunctionalInterface annotation to signify intent and make sure that intent is not changed in the future. Since Authorizer is currently a functional interface its very easy to assign a predicate to it.


Allow saving geodesics to disk

Similar to the ability to save DifferentialEquations.jl solutions, we want something that can write RenderCaches to the disk.

This technically works via JDL2.jl, so will change the issue to be more pointed about custom serialisation.


Add username hostname and port to psql calls

This PR allows us to grab the username and port number for postgres bin calls. Useful if we're trying to connect to an instance of postgres running on docker / some other remote server.

We handle this (slightly differently) now via #6.


Does not build on Fedora 34 Beta

After changing from Fedora 33 to Fedora 34 Beta, the installation images do not build anymore,
List of build-issues:

tboot does not build with gcc (GCC) 11.0.1 20210324 (Red Hat 11.0.1-0)
u-root uses go modules and fails at running with go1.16

conclusion:

gcc 11 not supported
latest go1.16 not supported

#92 merged


Automated Package Upgrade

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

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


sudo -E pip install -r requirements.txt error

HI ，want to use stackanetes on ubuntu 15.04 viv OS。 It occur to errors, when exec  sudo -E pip install -r requirements.txt , anyone help me ?
building 'netifaces' extension
x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DNETIFACES_VERSION=0.10.4 -DHAVE_GETIFADDRS=1 -DHAVE_GETNAMEINFO=1 -DHAVE_NETASH_ASH_H=1 -DHAVE_NETATALK_AT_H=1 -DHAVE_NETAX25_AX25_H=1 -DHAVE_NETECONET_EC_H=1 -DHAVE_NETIPX_IPX_H=1 -DHAVE_NETPACKET_PACKET_H=1 -DHAVE_LINUX_IRDA_H=1 -DHAVE_LINUX_ATM_H=1 -DHAVE_LINUX_LLC_H=1 -DHAVE_LINUX_TIPC_H=1 -DHAVE_LINUX_DN_H=1 -DHAVE_SOCKADDR_AT=1 -DHAVE_SOCKADDR_AX25=1 -DHAVE_SOCKADDR_IN=1 -DHAVE_SOCKADDR_IN6=1 -DHAVE_SOCKADDR_IPX=1 -DHAVE_SOCKADDR_UN=1 -DHAVE_SOCKADDR_ASH=1 -DHAVE_SOCKADDR_EC=1 -DHAVE_SOCKADDR_LL=1 -DHAVE_SOCKADDR_ATMPVC=1 -DHAVE_SOCKADDR_ATMSVC=1 -DHAVE_SOCKADDR_DN=1 -DHAVE_SOCKADDR_IRDA=1 -DHAVE_SOCKADDR_LLC=1 -DHAVE_PF_NETLINK=1 -I/usr/include/python2.7 -c netifaces.c -o build/temp.linux-x86_64-2.7/netifaces.o
netifaces.c:1:20: fatal error: Python.h: No such file or directory
compilation terminated.
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
----------------------------------------

Command "/usr/bin/python -u -c "import setuptools, tokenize;file='/tmp/pip-build-3b9N7X/netifaces/setup.py';exec(compile(getattr(tokenize, 'open', open)(file).read().replace('\r\n', '\n'), file, 'exec'))" install --record /tmp/pip-493H9p-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-3b9N7X/netifaces/

assigning @DTadrzak

Install following packages:

python-dev
python-netifaces

@DTadrzak i suggested in #16 a container that could take care of the deployment. do you have any thoughts or opinions on this? I would imagine that most deployment hosts would have docker or that users would have access to a docker host that could be leveraged. this could be a good control point for smooth deployments with less issues.

This pull request tries to address this issue but it is still WIP.

@PiotrProkop i missed it! perfect :)

thank you, the problem have been  solved ， but have another errors,maybe becaused by my network environment @DTadrzak

python setup.py build && python setup.py install --cert ~/proxy.crt  @DTadrzak
ERROR:root:Error parsing
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/pbr/core.py", line 111, in pbr
attrs = util.cfg_to_args(path, dist.script_args)
File "/usr/local/lib/python2.7/dist-packages/pbr/util.py", line 246, in cfg_to_args
pbr.hooks.setup_hook(config)
File "/usr/local/lib/python2.7/dist-packages/pbr/hooks/init.py", line 25, in setup_hook
metadata_config.run()
File "/usr/local/lib/python2.7/dist-packages/pbr/hooks/base.py", line 27, in run
self.hook()
File "/usr/local/lib/python2.7/dist-packages/pbr/hooks/metadata.py", line 26, in hook
self.config['name'], self.config.get('version', None))
File "/usr/local/lib/python2.7/dist-packages/pbr/packaging.py", line 710, in get_version
raise Exception("Versioning for this project requires either an sdist"
Exception: Versioning for this project requires either an sdist tarball, or access to an upstream git repository. Are you sure that git is installed?
error in setup command: Error parsing /home/ubuntudev/project/stackanetes-master/setup.cfg: Exception: Versioning for this project requires either an sdist tarball, or access to an upstream git repository. Are you sure that git is installed?


Show documentation even if term has not been completed

jamesnvc, thank you so much for your great work on the lsp_server.
Is there a possibility to make the docs appear even when the term has not been completed?
For example, if I type:
test :-
   random_between  %here I press the key to get the docs

Often I want to see the docs because I don't remember the arity or want to see the different available predicates.
It may also be useful to show the result of apropos(X) if the predicate is not found.
Again, thanks for your great work, and hope you have an enjoyable vacation!

Thanks, I did test random_between. works fine!
Look forward to the apropos part.


test

[ ] Turn on GitHub Pages
[ ] Outline my portfolio
[ ] Introduce myself to the world

test ok!

[ ] Turn on GitHub Pages
[ ] Outline my portfolio
[ ] Introduce myself to the world

no