SCons: Enable the experimental Ninja backend and minimize timestamp changes to generated code

This PR implements everything needed to have initial support for the experimental ninja build backend for SCons documented here: https://scons.org/doc/production/HTML/scons-user/ch27s02.html
Unfortunately, just enabling the backend (which was trivial) was not enough, as ninja is timestamp-based and the code generators kept rewriting (and thus retouching) everything for no good reason, tripping it up.
This PR is thus a patchset of 2 related but atomic commits:

A commit that makes all generators I could find extremely conservative with timestamp changes, through a new method in methods.py called write_file_if_needed, which compares the file's contents to the target string before writing to it. The SCU generators had to get a special treatment, where they keep track of every file considered and use that as a reference for what to not delete when globbing everything (thus only deleting any "stale" file).
The actual ninja-enabling commit, which is quite small as it adds just the new option and the few lines needed to turn the backend on.

To use it, you'll need to have ninja installed and a python module named ninja, which offers nothing more than the ninja_syntax.py logic bundled by ninja.
To get it, either install the ninja python package like the docs recommend:
# In a virtualenv, or "python" is the native executable:
python -m pip install ninja

# Windows using Python launcher:
py -m pip install ninja

# Anaconda:
conda install -c conda-forge ninja

or just put the two files needed in your local site-packages directory.
Here's a zip which makes SCons use the system version of ninja by bundling the upstream ninja_syntax.py and a stub __init__.py that does absolutely nothing (it just needs to be there to be recognized by SCons): ninja.zip
(yeah, I know, this is a bit unnecessary, but that's how it works. We can improve things upstream if this approach becomes more popular)
After that, just add the ninja=yes option when invoking scons. SCons will generate a build.ninja and quit. After that, just call ninja with whatever flags you might need and enjoy :D
Also, ideally you won't have to call scons never again, unless you want to change some build flag, as ninja will detect any (timestamp-based) change to any SCons build script and invoke everything needed to regenerate itself.
While experimenting sometimes it would trip itself in an infinite loop, probably due to some backwards-and-forwards that changed SConstruct but not its actual contents. In that case, start a clean build by deleting build.ninja and the .ninja folder and try again.
Be aware that not everything is transferred properly for some reason, such as ~whether to build compile_commands.json (it does so by default), the linker choice (it uses ld.bfd on my machine for some reason) and~ the number of jobs (you'll have to manually specify -j while invoking ninja or it will use whatever's the default, which on my machine is 10).
~Edit: more precisely, custom.py is not working completely for some reason. Passing manually the linker or other things will work, with the exception of compile_db and the jobs as it looks like they might be treated specially by SCons. I think that this workflow does not really allow it in the first place by design, so I would not rely on it.~
Edit2: I had an old version of scons (4.3.0). The latest at the time of writing, 4.6.0, imports custom.py fine. It also skips building compile_commands.json correctly now.
That said, since this is still marked as experimental, I would not be surprised if some of those were some upstream limitations, so I would consider this good enough for now and open to testing.

and the number of jobs (you'll have to manually specify -j while invoking ninja).

The good news though is that Ninja uses all CPU threads by default (unlike make), so builds won't be very slow if you forget to specify it.

Can you do a small rebase against master? Thanks!

On windows 11, scons ninja=yes failed.
Needs a git clean to flush out old files.
scons use_mingw=yes use_llvm=yes ninja=yes scu_build=yes

Found some warnings and a failure on Windows 11 with python 3.12.
In file included from platform/windows/rendering_context_driver_vulkan_windows.cpp:35:
platform/windows/rendering_context_driver_vulkan_windows.h:55:50: warning: class with destructor marked 'final' cannot be inherited from [-Wfinal-dtor-non-final-class]
   41 | class RenderingContextDriverVulkanWindows : public RenderingContextDriverVulkan {
      |                                           final
   42 | private:
   43 |         const char *_get_platform_surface_extension() const override final;
   44 |
   45 | protected:
   46 |         SurfaceID surface_create(const void *p_platform_data) override final;
   47 |
   48 | public:
   49 |         struct WindowPlatformData {
   50 |                 HWND window;
   51 |                 HINSTANCE instance;
   52 |         };
   53 |
   54 |         RenderingContextDriverVulkanWindows();
   55 |         ~RenderingContextDriverVulkanWindows() override final;
      |                                                         ^
platform/windows/rendering_context_driver_vulkan_windows.h:41:7: note: mark 'RenderingContextDriverVulkanWindows' as 'final' to silence this warning
   41 | class RenderingContextDriverVulkanWindows : public RenderingContextDriverVulkan {
      |       ^
1 warning generated.
[583/1820] Compiling platform\windows\display_server_windows.windows.editor.x86_64.llvm.o
In file included from platform/windows/display_server_windows.cpp:43:
platform/windows/rendering_context_driver_vulkan_windows.h:55:50: warning: class with destructor marked 'final' cannot be inherited from [-Wfinal-dtor-non-final-class]
   41 | class RenderingContextDriverVulkanWindows : public RenderingContextDriverVulkan {
      |                                           final
   42 | private:
   43 |         const char *_get_platform_surface_extension() const override final;
   44 |
   45 | protected:
   46 |         SurfaceID surface_create(const void *p_platform_data) override final;
   47 |
   48 | public:
   49 |         struct WindowPlatformData {
   50 |                 HWND window;
   51 |                 HINSTANCE instance;
   52 |         };
   53 |
   54 |         RenderingContextDriverVulkanWindows();
   55 |         ~RenderingContextDriverVulkanWindows() override final;
      |                                                         ^
platform/windows/rendering_context_driver_vulkan_windows.h:41:7: note: mark 'RenderingContextDriverVulkanWindows' as 'final' to silence this warning
   41 | class RenderingContextDriverVulkanWindows : public RenderingContextDriverVulkan {
      |       ^
1 warning generated.
FAILED: thirdparty/mbedtls/library/constant_time.windows.editor.x86_64.llvm.o
x86_64-w64-mingw32-clang "-o" "thirdparty/mbedtls/library/constant_time.windows.editor.x86_64.llvm.o" "-c" "-std=gnu11" "-O2" "-Wall" "-Wshadow-field-in-constructor" "-Wshadow-uncaptured-local" "-Wno-ordered-compare-function-pointers" "-MMD" "-MF" "thirdparty/mbedtls/library/constant_time.windows.editor.x86_64.llvm.o.d" "-w" "-isystem" "thirdparty/glad" "-DTOOLS_ENABLED" "-DDEBUG_ENABLED" "-DEIGEN_MPL2_ONLY" "-DNDEBUG" "-DNO_EDITOR_SPLASH" "-DWINDOWS_ENABLED" "-DWASAPI_ENABLED" "-DWINMIDI_ENABLED" "-DWINVER=0x0601" "-D_WIN32_WINNT=0x0601" "-DVULKAN_ENABLED" "-DRD_ENABLED" "-DGLES3_ENABLED" "-DMINGW_ENABLED" "-DMINGW_HAS_SECURE_API=1" "-DMINIZIP_ENABLED" "-DBROTLI_ENABLED" "-DTHREADS_ENABLED" "-DCLIPPER2_ENABLED" "-DZSTD_STATIC_LINKING_ONLY" "-DUSE_VOLK" "-DVK_USE_PLATFORM_WIN32_KHR" "-DGLAD_ENABLED" "-DEGL_ENABLED" "-DGODOT_MODULE" "-DMBEDTLS_CONFIG_FILE=/"thirdparty/mbedtls/include/godot_module_mbedtls_config.h/"" "-Ithirdparty/mbedtls/include" "-Ithirdparty/libpng" "-Ithirdparty/volk" "-Ithirdparty/vulkan" "-Ithirdparty/vulkan/include" "-Ithirdparty/zstd" "-Ithirdparty/zlib" "-Ithirdparty/clipper2/include" "-Ithirdparty/brotli/include" "-Ithirdparty/angle/include" "-Iplatform/windows" "-I." "thirdparty/mbedtls/library/constant_time.c"
In file included from thirdparty/mbedtls/library/constant_time.c:13:
thirdparty/mbedtls/library/common.h:15:10: error: expected "FILENAME" or <FILENAME>
   15 | #include MBEDTLS_CONFIG_FILE
      |          ^
<command line>:26:29: note: expanded from macro 'MBEDTLS_CONFIG_FILE'
   26 | #define MBEDTLS_CONFIG_FILE /thirdparty/mbedtls/include/godot_module_mbedtls_config.h/
      |                             ^
In file included from thirdparty/mbedtls/library/constant_time.c:16:
thirdparty/mbedtls/include/mbedtls/error.h:16:10: error: expected "FILENAME" or <FILENAME>
   16 | #include MBEDTLS_CONFIG_FILE
      |          ^
<command line>:26:29: note: expanded from macro 'MBEDTLS_CONFIG_FILE'
   26 | #define MBEDTLS_CONFIG_FILE /thirdparty/mbedtls/include/godot_module_mbedtls_config.h/
      |                             ^
In file included from thirdparty/mbedtls/library/constant_time.c:17:
thirdparty/mbedtls/include/mbedtls/platform_util.h:17:10: error: expected "FILENAME" or <FILENAME>
   17 | #include MBEDTLS_CONFIG_FILE
      |          ^
<command line>:26:29: note: expanded from macro 'MBEDTLS_CONFIG_FILE'
   26 | #define MBEDTLS_CONFIG_FILE /thirdparty/mbedtls/include/godot_module_mbedtls_config.h/
      |                             ^
3 errors generated.

To be clear this isn't a blocker and we can work on it later as long as one platform works.

scons use_mingw=yes use_llvm=yes ninja=no scu_build=yes
Seems to error in different places.
[Initial build] Linking Program bin\godot.windows.editor.x86_64.llvm.exe ...
=====
ld.lld: error: undefined symbol: OS::get_exit_code() const
>>> referenced by platform\windows\godot_windows.windows.editor.x86_64.llvm.o:(widechar_main(int, wchar_t**))
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(vtable for OS_Windows)

ld.lld: error: undefined symbol: ScriptDebugger::set_depth(int)
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(HandlerRoutine(unsigned long))

ld.lld: error: undefined symbol: ScriptDebugger::set_lines_left(int)
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(HandlerRoutine(unsigned long))

ld.lld: error: undefined symbol: String::utf16() const
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(OS_Windows::alert(String const&, String const&))
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(OS_Windows::alert(String const&, String const&))
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(_error_handler(void*, char const*, char const*, int, char const*, char const*, bool, ErrorHandlerType))
>>> referenced 111 more times

ld.lld: error: undefined symbol: Char16String::get_data() const
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(OS_Windows::alert(String const&, String const&))
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(OS_Windows::alert(String const&, String const&))
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(debug_dynamic_library_check_dependencies(String const&, String const&, HashSet<String, HashMapHasherDefault, HashMapComparatorDefault<String>>&, HashSet<String, HashMapHasherDefault, HashMapComparatorDefault<String>>&))
>>> referenced 122 more times

ld.lld: error: undefined symbol: Memory::free_static(void*, bool)
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(OS_Windows::alert(String const&, String const&))
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(OS_Windows::alert(String const&, String const&))
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(OS_Windows::initialize())
>>> referenced 58637 more times

ld.lld: error: undefined symbol: NetSocketPosix::make_default()
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(OS_Windows::initialize())

ld.lld: error: undefined symbol: operator new(unsigned long long, char const*)
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(OS_Windows::initialize())
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(OS_Windows::OS_Windows(HINSTANCE__*))
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(OS_Windows::OS_Windows(HINSTANCE__*))
>>> referenced 3684 more times

ld.lld: error: undefined symbol: IPUnix::make_default()
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(OS_Windows::initialize())

ld.lld: error: undefined symbol: is_print_verbose_enabled()
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(OS_Windows::initialize())
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(OS_Windows::initialize())
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(OS_Windows::OS_Windows(HINSTANCE__*))
>>> referenced 117 more times

ld.lld: error: undefined symbol: Variant::Variant(char const*)
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(OS_Windows::initialize())
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(OS_Windows::get_memory_info() const)
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(OS_Windows::get_memory_info() const)
>>> referenced 1421 more times

ld.lld: error: undefined symbol: stringify_variants(Variant const&)
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(OS_Windows::initialize())
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(OS_Windows::OS_Windows(HINSTANCE__*))
>>> referenced by platform\windows\display_server_windows.windows.editor.x86_64.llvm.o:(DisplayServerWindows::_update_tablet_ctx(String const&, String const&))
>>> referenced 137 more times

ld.lld: error: undefined symbol: __print_line(String const&)
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(OS_Windows::initialize())
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(OS_Windows::OS_Windows(HINSTANCE__*))
>>> referenced by platform\windows\display_server_windows.windows.editor.x86_64.llvm.o:(DisplayServerWindows::_update_tablet_ctx(String const&, String const&))
>>> referenced 135 more times

ld.lld: error: undefined symbol: Variant::_clear_internal()
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(OS_Windows::initialize())
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(OS_Windows::get_memory_info() const)
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(OS_Windows::get_memory_info() const)
>>> referenced 8522 more times

ld.lld: error: undefined symbol: String::utf8(char const*, int)
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(_error_handler(void*, char const*, char const*, int, char const*, char const*, bool, ErrorHandlerType))
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(_error_handler(void*, char const*, char const*, int, char const*, char const*, bool, ErrorHandlerType))
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(_error_handler(void*, char const*, char const*, int, char const*, char const*, bool, ErrorHandlerType))
>>> referenced 212 more times

ld.lld: error: undefined symbol: String::String(char const*)
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(_error_handler(void*, char const*, char const*, int, char const*, char const*, bool, ErrorHandlerType))
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(_error_handler(void*, char const*, char const*, int, char const*, char const*, bool, ErrorHandlerType))
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(debug_dynamic_library_check_dependencies(String const&, String const&, HashSet<String, HashMapHasherDefault, HashMapComparatorDefault<String>>&, HashSet<String, HashMapHasherDefault, HashMapComparatorDefault<String>>&))
>>> referenced 21628 more times

ld.lld: error: undefined symbol: String::operator+(String const&) const
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(_error_handler(void*, char const*, char const*, int, char const*, char const*, bool, ErrorHandlerType))
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(_error_handler(void*, char const*, char const*, int, char const*, char const*, bool, ErrorHandlerType))
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(_error_handler(void*, char const*, char const*, int, char const*, char const*, bool, ErrorHandlerType))
>>> referenced 2493 more times

ld.lld: error: undefined symbol: itos(long long)
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(_error_handler(void*, char const*, char const*, int, char const*, char const*, bool, ErrorHandlerType))
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(format_error_message(unsigned long))
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(OS_Windows::move_to_trash(String const&))
>>> referenced 344 more times

ld.lld: error: undefined symbol: String::operator+=(char const*)
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(_error_handler(void*, char const*, char const*, int, char const*, char const*, bool, ErrorHandlerType))
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(OS_Windows::open_dynamic_library(String const&, void*&, bool, String*))
>>> referenced by libmain.windows.editor.x86_64.llvm.a(main.windows.editor.x86_64.llvm.o):(Main::setup(char const*, int, char**, bool))
>>> referenced 58 more times

ld.lld: error: undefined symbol: Memory::alloc_static(unsigned long long, bool)
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(HashMap<long long, OS_Windows::ProcessInfo, HashMapHasherDefault, HashMapComparatorDefault<long long>, DefaultTypedAllocator<HashMapElement<long long, OS_Windows::ProcessInfo>>>::insert(long long const&, OS_Windows::ProcessInfo const&, bool))
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(HashMap<long long, OS_Windows::ProcessInfo, HashMapHasherDefault, HashMapComparatorDefault<long long>, DefaultTypedAllocator<HashMapElement<long long, OS_Windows::ProcessInfo>>>::insert(long long const&, OS_Windows::ProcessInfo const&, bool))
>>> referenced by platform\windows\os_windows.windows.editor.x86_64.llvm.o:(HashSet<String, HashMapHasherDefault, HashMapComparatorDefault<String>>::insert(String const&))
>>> referenced 1307 more times

ld.lld: error: too many errors emitted, stopping now (use --error-limit=0 to see all errors)
clang-18: error: linker command failed with exit code 1 (use -v to see invocation)

=====
scons: *** [bin\godot.windows.editor.x86_64.llvm.exe] Error 1
scons: building terminated because of errors.
[Time elapsed: 00:02:35.360]
PS D:\20240307_windows\other\VSK_godot> scons use_mingw=yes use_llvm=yes ninja=no scu_build=yes

Let me try harder to see if I can get a build on any platform.

I have to do some errands so I won't be able test currently.

I've tested this PR on Windows 11 22H2 with MSVC 2022, but I get a build failure when calling ninja:
$ ninja
[2/2403] Compiling core\config\project_settings.windows.editor.x86_64.obj
FAILED: core/config/project_settings.windows.editor.x86_64.obj
cl "/Focore/config/project_settings.windows.editor.x86_64.obj" "/c" "core/config/project_settings.cpp" "/TP" "/std:c++17" "/nologo" "/MT" "/Gd" "/GR" "/utf-8" "/bigobj" "/Zi" "/FS" "/Od" "/W3" "/w34458" "/wd4100" "/wd4127" "/wd4201" "/wd4244" "/wd4245" "/wd4267" "/wd4305" "/wd4514" "/wd4714" "/wd4820" "/showIncludes" "/DTOOLS_ENABLED" "/DDEBUG_ENABLED" "/DNDEBUG" "/DNO_EDITOR_SPLASH" "/DWINDOWS_ENABLED" "/DWASAPI_ENABLED" "/DWINMIDI_ENABLED" "/DTYPED_METHOD_BIND" "/DWIN32" "/DWINVER=0x0601" "/D_WIN32_WINNT=0x0601" "/DNOMINMAX" "/D_WIN64" "/DVULKAN_ENABLED" "/DRD_ENABLED" "/DGLES3_ENABLED" "/D_HAS_EXCEPTIONS=0" "/DMINIZIP_ENABLED" "/DBROTLI_ENABLED" "/DTHREADS_ENABLED" "/DCLIPPER2_ENABLED" "/DZSTD_STATIC_LINKING_ONLY" "/Ithirdparty/zstd" "/Ithirdparty/zlib" "/Ithirdparty/clipper2/include" "/Ithirdparty/brotli/include" "/Ithirdparty/angle/include" "/Iplatform/windows" "/I."
CreateProcess failed: The system cannot find the file specified.

Been testing locally on my Windows machine, and two things stood out:

SCons automatically generates run_ninja_env.bat in the repo root, and running that runs ninja with the proper environment variables set. The SCons repo admits this isn't the prettiest solution^1, but it's a manageable workaround while ninja currently lacks the functionality; though run_ninja_env.bat will need to be added to .gitignore.
The DMBEDTLS_CONFIG_FILE quote-escape issue can be circumvented by substituting angle brackets instead. By changing the relevant SCsub defines from '\\"some_header.h\\"' to "<some_header.h>", everything compiles as expected. This obviously doesn't "fix" the core issue, but this at least allows for MSVC functionality out of the gate.

Diff
diff --git a/.gitignore b/.gitignore
index 46dcf84b43..3946cc96e5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -38,6 +38,7 @@ platform/windows/godot_res.res
 # Ninja build files
 build.ninja
 .ninja
+run_ninja_env.bat

 # Generated by Godot binary
 .import/
diff --git a/core/crypto/SCsub b/core/crypto/SCsub
index ac79e10d19..093cb5a2f4 100644
--- a/core/crypto/SCsub
+++ b/core/crypto/SCsub
@@ -21,9 +21,7 @@ if is_builtin or not has_module:
 # to make a "light" build with only the necessary mbedtls files.
 if not has_module:
     # Minimal mbedTLS config file
-    env_crypto.Append(
-        CPPDEFINES=[("MBEDTLS_CONFIG_FILE", '\\"thirdparty/mbedtls/include/godot_core_mbedtls_config.h\\"')]
-    )
+    env_crypto.Append(CPPDEFINES=[("MBEDTLS_CONFIG_FILE", "<thirdparty/mbedtls/include/godot_core_mbedtls_config.h>")])
     # Build minimal mbedTLS library (MD5/SHA/Base64/AES).
     env_thirdparty = env_crypto.Clone()
     env_thirdparty.disable_warnings()
@@ -47,7 +45,7 @@ if not has_module:
 elif is_builtin:
     # Module mbedTLS config file
     env_crypto.Append(
-        CPPDEFINES=[("MBEDTLS_CONFIG_FILE", '\\"thirdparty/mbedtls/include/godot_module_mbedtls_config.h\\"')]
+        CPPDEFINES=[("MBEDTLS_CONFIG_FILE", "<thirdparty/mbedtls/include/godot_module_mbedtls_config.h>")]
     )
     # Needed to force rebuilding the core files when the configuration file is updated.
     thirdparty_obj = ["#thirdparty/mbedtls/include/godot_module_mbedtls_config.h"]
diff --git a/modules/mbedtls/SCsub b/modules/mbedtls/SCsub
index 4b8f65d8ff..dc6b214552 100644
--- a/modules/mbedtls/SCsub
+++ b/modules/mbedtls/SCsub
@@ -101,7 +101,7 @@ if env["builtin_mbedtls"]:

     env_mbed_tls.Prepend(CPPPATH=["#thirdparty/mbedtls/include/"])
     env_mbed_tls.Append(
-        CPPDEFINES=[("MBEDTLS_CONFIG_FILE", '\\"thirdparty/mbedtls/include/godot_module_mbedtls_config.h\\"')]
+        CPPDEFINES=[("MBEDTLS_CONFIG_FILE", "<thirdparty/mbedtls/include/godot_module_mbedtls_config.h>")]
     )

     env_thirdparty = env_mbed_tls.Clone()

Thanks!


Initial MPT implementation (2.x)

This is initial MPT implementation, containing most of the necessary methods.
Storage key transformation to NEO format will be done during integration.

В письме от воскресенье, 31 мая 2020 г. 11:28:07 MSK пользователь fyrchik
написал:

This is a separate function, because we must perform Flush every block,
however Collapse can be called once per N blocks if needed. Not a big
deal now probably, but can be useful e.g. during restore.

At the very minimum this should be explicitly documented.

В письме от воскресенье, 31 мая 2020 г. 11:29:08 MSK пользователь fyrchik
написал:

What about a bool flag to Collapse specifying if everything should be
flushed?

I don't really like such flags, maybe a separate function will do better or
maybe we can just document it for now.
This function is obviously dangerous from an API point of view, probably
that's what bugs me most, but at the same time there won't be a lot of users
of this API and if we're to be careful with clearly written rules then maybe
we're OK.


[feat] Need to add Preview

Describe the problem
希望可以针对复制的内容预览。（特别是代码、链接、图片）
Describe the solution you'd like
可以右键有功能键预览，也可以有一个小按钮
Alternatives considered
No response
Additional context
No response

Duplicate of #71


Slow suite count report is invalid

After upgrading from 1.3.2 to 1.3.3, the slow_suite_count option for the default reporter no longer works:
Slowest test classes:

0.000000s String
0.000000s String
0.000000s String

I think I've fixed it and released as 1.3.4.  Please test and either confirm (preferably ;) or reopen.

Thanks! I just tested the new release and the class names are correct, but it looks like the durations are still 0.000000s for all classes:
Slowest tests:

0.763171s test_xxx
0.260319s test_xxx
0.207378s test_xxx
0.187944s test_xxx
0.185472s test_xxx

Slowest test classes:

0.000000s xxMailerTest
0.000000s xxControllerTest
0.000000s xxControllerTest

It might also be nice to reduce the number of decimals, 3 decimals (milliseconds) should be precise enough.
Unfortunately I cant reopen the issue myself.

reopened.  It would be great if you'd wrote a (unit) test for this problem (as PR)  This will simplify my work a lot.

added one more part of the fix and release 1.3.5.beta1, please test and let me know if if works for you and your do not see any additional problems.

I just tested it and it fixed the problem, thanks 👍
I tried to look at how to write a test for this but havent found the time to dig into this gem's code and understand how to test the report outputs.
Here is the (working) result with 1.3.5.beta1:
Slowest tests:

0.966806s test_xx
0.208932s test_xx
0.193775s test_xx
0.186973s test_xx

Slowest test classes:

5.244817s xxControllerTest
4.290117s xxControllerTest
1.196527s xxControllerTest


Can download only 12 photos from xhamster gallery

Ripme version: v1.7.64
Java version:  1.8.0_181
Operating system: Version 1709 (OS Build 16299.611)
Exact URL you were trying to rip when the problem occurred: Any xhamster gallery with >12 photos

Expected Behavior
Things were working before I updated RipMe.
All the photos in an xhamster gallery were getting downloaded.
Actual Behavior
Now, only 12 photos are downloaded from a gallery.

Exact URL you were trying to rip when the problem occurred: Any xhamster gallery with >12 photos

Please link an album so that I can test this issue

https://xhamster.com/photos/gallery/beautiful-girls-vol11-3727492

This is fixed in 1.7.65


Realtime receicer crashing

Hello,
I am on Debian 10 and everything is starting fine, but after a few seconds I get this:
$ python realtime_receiver.py
Found Rafael Micro R820T tuner
Satellites overhead:
orbcomm fm117       : 16.7 degrees elevation
Receiving from: orbcomm fm117
Satellite frequencies: [137460000.0, 137712500.0]
Recording samples.

Any help would be greatly appreciated!!!

Hi, Thanks for the bug report.
The only problem I can see is that strptime's %d format should be zero padded. i.e. "06" instead of "6". It works both ways for me, so I changed that and pushed it up to master.
Could you try that out and see if it solves your problem?

I have already tried to zero pad the 6, but the result is the same. I am stuck!!!

Can you try a really simple test? Play around with that until you get it to work?
from datetime import datetime

start_date = datetime.strptime('Jan 06 1980 00:00', '%b %d %Y %H:%M')
print start_date

Or, a quicker/easier fix is probably to replace line #376 of the realtime_decoder.py:
start_date = datetime.strptime('Jan 06 1980 00:00', '%b %d %Y %H:%M')

with
start_date = datetime(year=1980, month=1, day=6, hour=0, minute=0)

Or, a quicker/easier fix is probably to replace line #376 of the realtime_decoder.py:
start_date = datetime.strptime('Jan 06 1980 00:00', '%b %d %Y %H:%M')

with
start_date = datetime(year=1980, month=1, day=6, hour=0, minute=0)

After using the above syntax on line 376 and 451, everything seems ok!!!
Thanks!!!

I've pushed the changed to master. Closing.


Using composite build to include plugin into buildSrc

I have a project which tries to use some plugin in its buildSrc script. That plugin is also developed by me and I try to composite build to include local plugin version into main project's buildSrc. Is it possible? Sor far all my attempts fail.
Here is the minimal project that demonstrates the problem. Please read its README file.

buildSrc is a special build which is not really part of the build tree.
So if you want to include a build in buildSrc, you have to do it by declaring it inside the settings.gradle(.kts) of buildSrc itself.

@ljacomet I tried that and got:
Cannot include build 'projectA' in build 'buildSrc'. This is not supported yet.

Is it expected?

A quick search through the doc did not find anything, but the error is quite specific, so I would say that including a build in buildSrc is indeed not supported.
What you could do is replace buildSrc by an included build itself and then it would support including another build. We are effectively aiming at removing some of the specifics / limitations of buildSrc by having it behave like a composite.


Pull changes from the V5 foundation-sites branch

This repo is programmatically generated based on tagged releases to the main Foundation repo.
The fix should be released with the next Foundation version.
I'm closing this.
Thanks!


[fix] rubocop

Coverage remained the same at 81.449% when pulling 614698bff98d9976f1babe6fd48c8c96582963d9 on itowtips:fix-rubocop into 1f027d9d2e3d21b080407256ec73c79de67cd95a on shirasagi:master.


feat: Add container attributes in starters

What is it?

[x] Feature / enhancement
[ ] Bug
[ ] Docs / tests

Description
Many people want to know how to add attributes to the html tag in Qwik City. This PR adds the lang attribute to the containerAttributes, so an example is present in the starters. Also resolves an accessibility issue with the starters.
Fixes: #1983
Checklist:

[x] My code follows the developer guidelines of this project
[x] I have performed a self-review of my own code
[x] I have made corresponding changes to the documentation
[ ] Added new tests to cover the fix / functionality

I think this is a great idea! merging!


Transifex is broken

Hi! It seems like there isn't an active Transifex plan for the organization, when I try to do anything I get errors like these :

@KennethSweezy

This is because the plan we are on, there are a maximum of ten translators
in the project. I had to manually cycle translators for when they wanted to
translate. If you would like to work on tranlations I can rotate some
people out.
On Fri, Apr 10, 2020, 7:01 AM Locness<EMAIL_ADDRESS>wrote:

Hi! It seems like there isn't an active Transifex plan for the
organization, when I try to do anything I get errors like these :
[image: Screen Shot 2020-04-10 at 13 00 17]
https://user-images.githubusercontent.com/37651007/78986323-56e6d500-7b2b-11ea-836b-93449bc52952.png
[image: Screen Shot 2020-04-10 at 13 00 44]
https://user-images.githubusercontent.com/37651007/78986334-5b12f280-7b2b-11ea-8e59-5726320719ec.png
@KennethSweezy https://github.com/KennethSweezy
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/ScratchUtilities/gobo.cf/issues/100, or unsubscribe
https://github.com/notifications/unsubscribe-auth/AH6U4IHDUS2TCH6SPDXBCILRL34BHANCNFSM4MFME4ZQ
.

No, thanks. But whaty plan are you using ? the open-source one?

I am using the one that Transifex provides in the GitHub education pack. I
can't remember exactly what plan it is though.
On Fri, Apr 10, 2020, 9:16 AM Locness<EMAIL_ADDRESS>wrote:

No, thanks. But what plan are you using ? the open-source one?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/ScratchUtilities/gobo.cf/issues/100#issuecomment-612023613,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AH6U4IDTKHJQDYLPEVYXAVLRL4L3LANCNFSM4MFME4ZQ
.

I guess it's the starter one.

Considering that the project has been translated into 15 languages (plus English) I am going to discontinue the translation portion of this project. The total number of people on Earth that could comfortably read and use Gobo.icu is almost 4 billion. There are some gaps in our translations (we don't have translations for Mandarin) but we do have translations for 4 of the 5 most spoken languages.
Thank you to all contributors.

wait, it's gobo.icu now?

Yes.
On Tue, May 26, 2020, 2:19 AM Locness<EMAIL_ADDRESS>wrote:

wait, it's gobo.icu now?
—
You are receiving this because you modified the open/close state.
Reply to this email directly, view it on GitHub
https://github.com/ScratchUtilities/gobo.icu/issues/100#issuecomment-633829364,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AH6U4IH5XFA53AL6QS4GYKDRTNNQNANCNFSM4MFME4ZQ
.


Open Source: AppStarter and ClientMessaging

Abstract
As mentioned in #18, we found a candidate to move in the public open source domain:
Actually, Appstarter and ClientMessaging is a tiny piece of infrastructure to integrate rich- and web-clients by adding the capability to launch other apps and to transfer context-information that initializes the started app to continue a app-overspanning usecase.
Appstarter is also for most usecases able to replace the JNLP Runtime of the legacy JRE-distributions.
There are some baloise-specific parts, that should be generalized. Also, there are some parts, that could be replaced by other open source libraries.
Here a short braindump to be discussed
Dependencies

filsystem => make own opensource-lib
clientmessaging => make own opensource-lib, integrate in starter to host clientmessaging-server
resources => make own opensource-lib or eliminate and use standard i18n features
swingframework => eliminate, write new UI

Design
Goal: msi-installer with windows 10 64 compatible binaries
- containing jre11, (ev. downsized with jigsaw)
Specification

plugable jre-folder
built with openjdk11 or later
built on travis with openjdk-tooling
pure-java (eliminate delphi-dependency with bvStarter.exe)
integrate clientmessaging-server
one binary to start applications (merge bvStarter.exe AppStarter.cmd and ClientMessagingServer).
compose those as independent libraries (filsystem, clientmessaging).
act as URL-Adapter with the "target:///"-schema, automatically registered by the msi-installer.

Configurable Items (ev. with installer-wizard)

appStarter.properties
Webstart baseUrl
Environment-Qualifiers (defaults Test, Int, Acc, Prod)
JRE's (ev. autoconfig from a common jre-folder)
Startlink-List (ClientMessaging) or a new concept for that feature

Thanks for this detailed proposal @luechtdiode!

Also interesting move at the moment: https://github.com/karakun/OpenWebStart

Closing for now - please feel free to re-open.


Add resources to free-courses-tr.md

What does this PR do?
Add resource(s) | Remove resource(s) | Add info | Improve repo
Add resources
For resources
Description
Added a useful React learning resource as a YouTube playlist.
Why is this valuable (or not)?
Anybody can learn about React by watching this series of videos.
How do we know it's really free?
It's on YouTube. So it's free.
For book lists, is it a book? For course lists, is it a course? etc.
It's a course.
Checklist:

[ ] Read our contributing guidelines.
[ ] Search for duplicates.
[ ] Include author(s) and platform where appropriate.
[ ] Put lists in alphabetical order, correct spacing.
[ ] Add needed indications (PDF, access notes, under construction).
[ ] Used an informative name for this pull request.

Follow-up

Check the status of GitHub Actions and resolve any reported warnings!

Thanks, and welcome to free-programming-books!

Thanks, and welcome to free-programming-books!

Thank you very much for your time!


feat(autocomplete): allow passing popper options

SPT-2729
Description
PR allows passing popper options to Autocomplete and TagsSelector components
Sometimes in some specific cases we want to override default popper options, for example to disable preventOverflow modifier
How to test

n/a

Development checks

[x] Add changeset according to guidelines (if needed)
[x] Read CONTRIBUTING.md and Component API principles
[x] Annotate all props in component with documentation
[n/a] Create examples for component
[x] Ensure that deployed demo has expected results and good examples
[x] Ensure that all PR checks are green
[x] Ensure the changed/created components have not caused accessibility issues. How to use accessibility plugin in storybook.
[x] Self reviewed
[n/a] Covered with tests

Breaking change

[n/a] codemod is created and showcased in the changeset
[x] test alpha package of Picasso in StaffPortal

PR commands

List of available commands:

@toptal-bot run all - Run whole pipeline
@toptal-bot run build - Check build
@toptal-bot run deploy:documentation - Deploy documentation
@toptal-bot run package:alpha-release - Release alpha version

PR Review Guidelines

When to approve? ✅
You are OK with merging this PR and

You have no extra requests.
You have optional requests.

Add nit: to your comment. (ex. nit: I'd rename this variable from makeCircle to getCircle)

When to request changes? ❌
You are not OK with merging this PR because

Something is broken after the changes.
Acceptance criteria is not reached.
Code is dirty.

When to comment (neither ✅ nor ❌)
You want your comments to be addressed before merging this PR in cases like:

There are leftovers like unnecessary logs, comments, etc.
You have an opinionated comment regarding the code that requires a discussion.
You have questions.

How to handle the comments?

An owner of a comment is the only one who can resolve it.
An owner of a comment must resolve it when it's addressed.
A PR owner must reply with ✅ when a comment is addressed.

@OndrejTuma it should be passed automatically:
export interface Props extends AutocompleteProps {
  /** The variant to use */
  variant?: 'light' | 'dark'
  testIds?: AutocompleteProps['testIds']
}

export const PageAutocomplete = ({ variant, testIds, ...rest }: Props) => (
  <Autocomplete
    inputProps={{
      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
      variant: variant!
    }}
    testIds={testIds}
    {...rest}
  />
)

@OndrejTuma it should be passed automatically:
export interface Props extends AutocompleteProps {
  /** The variant to use */
  variant?: 'light' | 'dark'
  testIds?: AutocompleteProps['testIds']
}

export const PageAutocomplete = ({ variant, testIds, ...rest }: Props) => (
  <Autocomplete
    inputProps={{
      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
      variant: variant!
    }}
    testIds={testIds}
    {...rest}
  />
)

Missed that 👍 thank you 🙇


chore: Update docs repo in README.md

- What I did
Replaced docs.atsign.com card with docs
- How I did it
- How to verify it
see the rich view
- Description for the changelog
chore: Update docs repo in README.md

@XavierChanth I'm not sure what you're trying to achieve here, but when I try to follow the link from the rich preview it doesn't resolve (because we don't control the root of the docs TLD).

My mistake, I was trying to modify repo name, and I updated the link to the docs site as well...


Support pd.DataFrame and pd.Series in return type hints

This PR proposes to support the type hints with pandas Series and pandas DataFrame directly.
import pandas as pd
import databricks.koalas as ks
def transform(pdf) -> pd.DataFrame[int]:
    # pdf is actually a pandas DataFrame.
    return pdf + 1

ks.range(10).apply_batch(transform)

     c0
0     1
1     2
2     3
3     4
4     5
5     6
6     7
7     8
8     9
9    10

Note that:

The type hints with Pandas only works with Python 3.7+.

The previous way with Koalas DataFrame type hint will still work but will be deprecated once we deprecate Python 3.5 and 3.6.
import databricks.koalas as ks
def transform(pdf) -> ks.DataFrame[int]:
    return pdf + 1

ks.range(10).apply_batch(transform)

Codecov Report

Merging #1577 into master will decrease coverage by 1.55%.
The diff coverage is 100.00%.

@@            Coverage Diff             @@
##           master    #1577      +/-   ##
==========================================
- Coverage   94.55%   93.00%   -1.56%
==========================================
  Files          38       38
  Lines        8766     8677      -89
==========================================
- Hits         8289     8070     -219
- Misses        477      607     +130

Impacted Files
Coverage Δ

databricks/koalas/__init__.py
87.09% <100.00%> (-7.03%)
:arrow_down:

databricks/koalas/datetimes.py
86.75% <100.00%> (ø)

databricks/koalas/frame.py
95.87% <100.00%> (-0.95%)
:arrow_down:

databricks/koalas/groupby.py
90.28% <100.00%> (-0.25%)
:arrow_down:

databricks/koalas/series.py
97.50% <100.00%> (-0.13%)
:arrow_down:

databricks/koalas/strings.py
82.22% <100.00%> (+0.07%)
:arrow_up:

databricks/koalas/typedef/string_typehints.py
100.00% <100.00%> (ø)

databricks/koalas/typedef/typehints.py
85.71% <100.00%> (-1.66%)
:arrow_down:

databricks/koalas/usage_logging/__init__.py
26.78% <0.00%> (-64.60%)
:arrow_down:

databricks/koalas/usage_logging/usage_logger.py
50.00% <0.00%> (-50.00%)
:arrow_down:

... and 18 more

Continue to review full report at Codecov.

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

Thanks! merging.


Allow HTTP redirects for file downloads

It turns out GitHub often redirects file downloads to another URL, which the current code won't handle. Fix by telling libcurl to allow this (it's disabled by default).
Fixes #457.
With this fix, we can finally use data from the healthgps-data repo as an input source directly :smile:
See: https://github.com/imperialCHEPI/healthgps-data/releases/tag/20240624

PS -- I noticed download_file() was pointlessly returning an input argument, so I removed it.


Feature:  box border sides

Hi Potch, I really commend your work on this module - it works really well and I started playing around with it and realised it could be used for converting markdown to playdate.
In the process of getting that all working I made a few additions to the playout code - I will add them as separate PRs so that you can evaluate them separately.

(this one) Adding borderLeft, borderRight, borderTop and borderBottom properties to the Box element. This allows me to mimic markdown blockquote styling using a left border only. Setting border will override these props.

Allowing scrolling, which scrolls in the direction of the direction property of the root box node. I have this working reasonably well, it has issues with flex elements when the parent hasn't got a set or inherited width or maxWidth but that makes sense to me. I noticed you had an unused property scroll so perhaps you've thought about this already. I will clean that code up and make a separate PR for it unless you have any objections.

Also potentially some small changes to allow better encapsulating of modules based on playout.

@edzillion thanks so much for the PR! sorry it's been so long since you submitted it. I've been toying with scrolling in my head (as you observed with the unused var) and your instinct for how it works more or less matches my thoughts- I'd be curious to see your approach- I'm leaning toward rendering all content naively out to an image and just grabbing a crop based on scroll offset, with possible optimizations in the future.


Rust code restructure

Move helper fn for testing into new tests submodule helpers.
Move tests module to the end of the file so that it wouldn't
interleave code flow of fn.

Sweet! Can you add all the tests to a CI (either CircleCI or Github Actions, whatever you prefer)?

I guess I'm not really picking up what you mean... I lack of access to workflows for the repo. =( Also it would be nice to have a separate issue for CI setup. X)

Sure, separate issue/PR for that works!


[ Mutant test result ]

The mutant tester found when these things are commented out or values are mutates, there is no test that will break...
@kbieganski is it possible to construct tests that would detect these changes ?

This PR of course not for merge, just to document.

I think this can be closed.


Respect service index when deleting containers with sidekicks

Rancher Version:
1.1.0
Docker Version:
1.10.3
OS and where are the hosts located? (cloud, bare metal, etc):
AWS.
Setup Details: (single node rancher vs. HA rancher, internal DB vs. external DB)
Single node rancher.
Environment Type: (Cattle/Kubernetes/Swarm/Mesos)
Cattle.
Steps to Reproduce:

Deploy a service with sidekicks and scale=3.
Scale down the service which should delete container_1 (at least on my machine).
Delete container_2.

Results:
After a second or two, the scheduler will launch container_1 which have container_sidekick_2 as a sidekick, which is incorrect.
Here's the entire issue in a visual form:

Expected:
As per this comment, the service_index should be preserved.

Rancher was not relying on service_index of a containr due to how we were recreating instances when an unhealthy one was detected. Instead of relying on service_index, we were ensuring deployments had the same deployment.unit label. You can fetch this information from container's "labels" field on the metadata. Primary + (n) sidekick containers have the same "io.rancher.service.deployment.unit" value. For a example, in service with scale=3 having 1 sidekick, there will be 3 deployment units, each having 1 container of primary + 1 container of a sidekick service. So to get your peers, you find out what your deployment.unit is, and then get instances having the same deployment.unit from /latest/containers.
We've changed how we are recreating instances that could make us move to respecting service index now, so I've made it an enhancement request.

Closing in favor of https://github.com/rancher/rancher/issues/5611


Voting for chair/co-chair

Please (re-)vote for co-lead/chair of the AI/ML working group! We accidentally had two separate issues for voting, so we've decided to simply restart the vote. Please nominate someone (including yourself) and vote by adding +1 to the comment on that person. This is approval voting; vote for all the candidates you most approve of, and the 2 top vote recipients will become co-chairs. Appointment is for one year.
Voting deadline is October 11.

Please +1 here for:
Salkimmich (https://github.com/ossf/ai-ml-security/issues/3#issuecomment-1723430668)
I'll throw my hat for co-lead, and count me in on the WG no matter what!
One note: I'd recommend prioritize co-leads by specific regions/time zones to allow for global participation, this working group has pretty global engagement, and I'm happy to support meetings in different time zones as long as we all live on the same repo here.

Please +1 here for
therealnb(https://github.com/ossf/ai-ml-security/issues/2#issuecomment-1715272381)
Nigel Brown
I'd like to continue this work mostly because of all the fun and interesting people I meet and things I learn.
I offer a neutral agenda-free stance and hopefully a friendly face. You have all been to the meetings so I am a known quantity.
Quite obviously, my meeting skills leave a lot to be desired and I am no subject expert. I do not have a crystal clear vision of where this group should go, but I would like to enable it to find its way.
Please consider a vote for me!
(I will not be offended if you don't)

Please +1 here for:
[camaleon2016] (https://github.com/camaleon2016) (https://github.com/ossf/ai-ml-security/issues/3#issuecomment-1723430668)
or
[camaleon2016] (https://github.com/camaleon2016) (https://github.com/ossf/ai-ml-security/issues/2#issuecomment-1715272381)
I'd like to be the conduit for getting work down and ensuring the efforts and initiatives of the all that have interest and enjoy work within AI, both engineers and program managers, are heard and implemented.
I can help with community, and then neighborhood building within the OpenSSF and externally with other Open Source communities towards better understanding the current AI Landscape. This will help us to narrow our focus within OpenSSF's scope.
I am a security guy through and through with an extremely high business acumen. Using these skills in my current role has allowed me autonomous movement across many internal and external orgs. I will continue to use these to expand our WGs reach.
Thank you for your consideration!
Please consider a vote here for Lead or Co-lead

Late entrant to the co-lead party.
Christine Abernathy, I lead the Open Source Program Office at F5 where I also focus on AI/ML. I'm very interested in efforts to collaborate across other entities - OpenSSF WGs, LF AI & Data, etc. It's a vast landscape and there are many synergies. I've attended most of the AI/ML meetings, represent them with the LF AI & Data ML Sec Committee, and I'm active in OpenSSF Best Practices and Identifying Security Threats WGs.

+1 for @camaleon2016
Jay has been participating in several security efforts including WGs in OpenSSF and can help a lot with this one too.

I think we can close this now that the voting ended


Configuration Values?

Is there a way to persist a configuration value within a ChemDraw (2018) add-in?
Use case: my add-in navigates to a web application but the user has several possible servers to choose from.  I'd like to provide a way for the user to enter an application URL and then persist the URL across sessions in ChemDraw, in a manner similar window.localStorage works in a browser.

The ChemDraw Add-in API does not support persistence.  However, you should be able to use the local storage provided by the embedded browser controls (IE 11 for Windows, Webkit for Mac).

I've tried window.localStorage, window['localStorage'] and another variation but the browser control (on Windows) returns undefined.
Do you have an example of ChemDraw add-in JavaScript that uses local storage?

I think the problem might be that window.localStorage isn't available for sites that use the file:// protocol in IE11:
https://stackoverflow.com/questions/3392032/localstorage-object-is-undefined-in-ie
To make local storage work, you may need to serve your add-in from a server.
Once the add-in is served, you can add it to ChemDraw by either:

Creating an add-in that just consists of the metadata and point that metadata URL to the URL of the add-in.
Creating a manifest that contains a list of add-ins and then add that to ChemDraw using "Add from URL..."

The second method is more flexible and makes it easier to distribute your add-ins. The manifest needs to have this format:
{
    "sourceName": "Steve's Addins",
    "addins": [
        "http://<server address and path for the add-in>/chemdraw-addin-metadata.json"
    ]
}


fix rtl issue

in rtl mode the prev button will be hidden after touch event although if we don't reach the start of the swiper (the right side of it) so I made some update to fix this bug

Sorry, changes should be done only to /src/ files

ok I made another pull request in the correct place


OpenOCD configuration fixes for HSDK

This PR addresses 2 issues, both in OpenOCD configuration scripts:

Dual-core version of HSDK (though remember HW is still the same quad-core, we just use 2 of 4 cores) has incomplete JTAG chain description and most of tests won't print anything on console even because images are loaded into wrong cores.
With newer version of OpenOCD in Zephyr's SDK v0.12 ARC support was merged from upstream instead of old good pre-upstream fork, there some options were renamed so to make OpenOCD happy again we need to do corresponding fix-ups.

Well and with these changes in place we're getting very promising sanitycheck results:

Board
Pass
Fail

hsdk
155
7

hsdk_2cores
160
2

@nashif could you please pull this one in?
The only "compliance check" that fails is patch commit message length, but that's due to embedded OpenOCD log lines.

@nashif ping!


ci: install and start minikube manully

Please answer these questions before submitting a pull request

Why submit this pull request?

[ ] Bugfix

[x] New feature provided

[ ] Improve performance

[ ] Backport patches

Related issues

Bugfix

Description

How to fix?

New feature or improvement

Describe the details and related test reports.

Backport patches

Why need to backport?

Source branch

Related commits and pull requests

Target branch

Codecov Report

Merging #210 (6f70346) into master (549d67d) will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master     #210   +/-   ##
=======================================
  Coverage   44.52%   44.52%
=======================================
  Files          32       32
  Lines        2019     2019
=======================================
  Hits          899      899
  Misses        981      981
  Partials      139      139

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 549d67d...6f70346. Read the comment docs.

Codecov Report

Merging #210 (6f70346) into master (549d67d) will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master     #210   +/-   ##
=======================================
  Coverage   44.52%   44.52%
=======================================
  Files          32       32
  Lines        2019     2019
=======================================
  Hits          899      899
  Misses        981      981
  Partials      139      139

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 549d67d...6f70346. Read the comment docs.

@gxthrj Please take a look when you have time.

@gxthrj Please take a look when you have time.


[6.*] Passing options after 'mix' results in 'error: unknown option'

Laravel Mix Version: 6.*
Node Version: 14.13.1
NPM Version: 6.14.8
OS: Windows 10 20H2

Description:
I'm using const argv = require("yargs").argv; in my webpack.mix.js to do different things based on my custom --theme argument.
This was working fine with the 'old' package.json scripts, but when I try to convert them to the following scripts, I get the following error:
$ mix --theme scriptware
error: unknown option '--theme'

Is it still possible to pass options to webpack.mix.js with the Mix CLI?

So you can pass through options to webpack CLI using mix -- --option=value however your usage, unfortunately, will not work with webpack-cli 4. I recommend using environment vars instead.
You run the script like so: THEME=scriptware mix
And in your webpack.mix.js file you check the theme using process.env.THEME

asdf

If I'm reading correctly, @thecrypticace said that with webpack-cli 4 pass through options will not work.
But I did a basic test with Webpack 5.53.0 including webpack-cli ^4.8.0 and it seemed to accept pass through options without error?
In my Laravel Mix 6 project I'm getting the same error as @arjendejong12
$ yarn dev --env=foo
error: unknown option '--env=foo'

You would have to run that like yarn dev -- -- --env=foo — But this does not set process.env vars which is what I was referring to.

Yeah I'm having an issue with this. Why has this been closed? None of the solutions I have found have worked so far with Laravel Mix 6.
$ mix --production --ieCompat=true
error: unknown option '--ieCompat=true'
error Command failed with exit code 1.

$ mix --production -- --ieCompat=true
[webpack-cli] Error: Unknown option '--ieCompat=true'

And of course if I add in another -- it doesn't appear in process.env at all, as @thecrypticace.
@thecrypticace – is that environment variable approach, is that cross platform?

Found an arrangement that works:
$ mix --production -- -- --env.ieCompat=true

Then use yargs to parse:

const { argv } = require('yargs');
const yargs = require('yargs/yargs');

...

console.log(yargs().parse(argv._));

Which gives:
{
  _: [],
  env: { ieCompat: 'true' },
  '$0': '/Users/[redacted]/node_modules/.bin/webpack'
}


Document how to use the global animation library in GDScript

I was running into problems with adding animations and animation libraries via pure gdscript. I would create an animation library but then to play the animation I was getting the error "animation not found", it turned out I needed to write play("animationlibrary/animation") instead of just play("animation"). By returning the global animation library we can add animations that can be played using play("animation").
(By the way if you click Manage Animations it does seem to be called "[Global]")

Thanks!

Cherry-picked for 4.0.4.


New Keyboard Avoiding Component Use Cases

Summary

New use cases for keyboard avoiding component in rn-tester

Changelog
[General] [Changed] - Changed use cases for keyboard avoiding component in rn-tester
Test Plan

Tested app in both Android and iOS

After -

Before -

Updated the test plan!

Should the "open example" buttons be buttons? What did this look like before the UI redesign?

Before UI redesign it used TouchableHighlight

Is there touch feedback when you tap? From the screenshots they don't look tappable?


add setup option for dev build

that doesn't involve editing any code and doesn't interfere with release process.
the JS takes too long to pack.

I have worked out a potential way to do this.
distutils has a (not well documented) feature that lets you add commands. The API has a hook for initializing the options, finalizing the options (seems most useful for auditing option values), and you implement a function called run() for the command's behavior.
Add Command to Setup
The following snippet make it possible to run python ./setup.py james. You can also pass an argument foo to the james command.
from distutils.core import setup, Command

class JamesCommand(Command):
    description = "Installs the j2d2."
    user_options = [
        ('foo=', None, 'Specify the foo to bar.'),
    ]

    def initialize_options(self):
        self.foo = None

    def finalize_options(self):
        assert self.foo in (None, 'bar', 'BAR'), 'Invalid foo!'

    def run(self):
        print("self.foo: {}".format(self.foo))

setup(
    name="j2d2",
    description="JD's test robot",
    version="0.0.0",
    cmdclass={
        'james': JamesCommand,
    }
)

Add Flags to Install
To address this particular issue, I subclassed the install command shipped with setup tools to add a flag and then assigned my subclass to the install command for setup.
from distutils.core import setup, Command
from setuptools.command.install import install

class InstallCommand(install):
    user_options = install.user_options + [
        ('someopt', None, None), # a 'flag' option
    ]

    def initialize_options(self):
        install.initialize_options(self)
        self.someopt = None

    def finalize_options(self):
        print("value of someopt is", self.someopt)
        install.finalize_options(self)

    def run(self):
        install.run(self)

setup(
    name="j2d2",
    description="JD's test robot",
    version="0.0.0",
    cmdclass={
        'install': InstallCommand,
    }
)

python ./setup.py install will write 'value of someopt is', None to the output.
python ./setup.py install --someopt will write value of someopt is 1
It gets a little uglier when you use pip, as you pass options to setuptools via an option to pip, which looks like this pip install --install-options='--someopt'.
I was able to use both formats inside a conda env without an issue.
Next Steps
If you feel this interface is fine, I will fix the issue using this approach.

sounds great


[WKWebViewJavascriptBridge webView:didReceiveAuthenticationChallenge:completionHandler:] was not called'

implementation the WKNavigationDelegate that use method

(void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential * _Nullable))completionHandler
{
NSLog(@"didReceiveAuthenticationChallenge");
}

Error:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Completion handler passed to -[WKWebViewJavascriptBridge webView:didReceiveAuthenticationChallenge:completionHandler:] was not called'

try this

(void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * _Nullable credential))completionHandler
{
completionHandler(NSURLSessionAuthChallengePerformDefaultHandling, nil);
}

hi @ipad4  where to add it  or which file in react native..
i am also facing this issue


Add ignored interfaces names when getting interface by IP

This is to resolve an issue that caused by two interfaces configured
with the same IP address (different masks) on the host. The issue
occurred in AKE setup with NetworkPolicyOnly mode, and antrea-gw0 is
configured with Node's IP with 32bit mask.
The changes include,

Provide a set of ignored interface names (e.g., antrea-gw0) when
getting the Node's transport interface with Node's IP in
agentInitializer.
Use Node's transport interface name to get the accurate interface in
Egress feature instead of Node's IP.

Fixes #3217
Signed-off-by: wenyingd<EMAIL_ADDRESS>

Codecov Report

Merging #3219 (aeed963) into main (eb3965f) will decrease coverage by 18.56%.
The diff coverage is 36.36%.

@@             Coverage Diff             @@
##             main    #3219       +/-   ##
===========================================
- Coverage   59.90%   41.34%   -18.57%
===========================================
  Files         331      199      -132
  Lines       28463    24101     -4362
===========================================
- Hits        17052     9965     -7087
- Misses       9542    13106     +3564
+ Partials     1869     1030      -839

Flag
Coverage Δ

kind-e2e-tests
?

unit-tests
41.34% <36.36%> (-0.02%)
:arrow_down:

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

 I see that someone else ran into the same issue, this time on EKS: https://github.com/antrea-io/antrea/issues/3446


Running botserver for local development

I'm trying to setup an environment where I'm able to run a bot locally for either

zulip development(vagrant)
zulip produciton

My current workaround was pulling the zulip python-zulip-api, placing my bot in there, and using either the zulip-run-bot <bot> command or interacting via the zulip-terminal
I'd like to manage my bot separately in my git, without the need for all the extra bots/files found in python-zulip-api
Following the instrucitons here I've installed the zulip-botserver package, and my current project directory looks like:
zulip-mybot
  - readme.md
  - zulip_bots
    - bots
       - mybot

I have a production version of zulip running with an organization where I created a bot and downloaded it's zuliprc
When I run (from within zulip-mybot directory):
zulip-botserver --config-file /path/to/zuliprc
I receive the error: "Error: Bot "mybot" doesn't exist. Please make sure you have set up the botserverrc file correctly."
My zuliprc file looks like:
[mybot]
<EMAIL_ADDRESS>key=KEY
site=https://ORGNAME.zulipchat.com
token=TOKEN

I'm not even sure if this is the correct way to run for local dev/testing, but the goal is to not have to develop within the python-zulip-api and copy and paste working code to my git directory.
Thanks!

@arthurpankiewicz thanks for the report!
I suspect that the botserver code is just missing the nice logic for detecting the paths to out-of-tree bots that we use in e.g. zulip-run-bot.

@zulipbot claim

@timabbott yeah I was getting some funky behaviour.
I edited the server.py to log the error, and it was trying to import a bot module at zulip_bots.zulip_bots.bot._______ and was failing, but if I went into my py3 console and ran the same import, it seemed to work.
If you require more information @thedeveloperr I can rerun my steps and provide some more context

@thedeveloperr any status update on this?

@arthurpankiewicz I am sorry I am still reading the docs and code of this, this my first issue regarding this area and was also working on few other ongoing issues. So progress is a bit slow. I will try to fix this soon.

If you require more information @thedeveloperr I can rerun my steps and provide some more context

Sorry I missed notification of your previous message. I would like to have as much information regarding the issue as possible if you don't mind re-running. 😅

@thedeveloperr sorry I just returned from vacation, I can update with some extra info this weekend

@zulipbot claim

@thedeveloperr
when I cloned python-zulip-api and followed the steps to set up environment and develop bots, when I run pip list, I have the following packages (when running the python-zulip-api env):
Package            Version   Location
------------------ --------- ----------------------------------------------------------------
zulip              0.6.1     /Users/arthur/workspace/python3/python-zulip-api/zulip
zulip-bots         0.6.1     /Users/arthur/workspace/python3/python-zulip-api/zulip_bots
zulip-botserver    0.6.1     /Users/arthur/workspace/python3/python-zulip-api/zulip_botserver

When I follow deploy instructions found here, installing the zulip python packages, when I run pip in a separate directory (where I am developing a standalone bot), running python3 -m pip list I have
Package           Version
----------------- --------
zulip             0.6.0
zulip-bots        0.6.0
zulip-botserver   0.6.0

with no location.
When I run zulip-run-bot <botname> --config-file /path/to/zuliprc in a venv after pip install zulip, I receive
ERROR: Could not load bot module. Exiting now.

@arthurpankiewicz Can you get your bot to run by specifying the path in place of the botname, wherever it is located?
One future approach which I proposed for this, which may make this simpler for you, is where you would install the zulip-bots package (eventually just from pypi, for now from git in a PR) and install your own bot package separately, with an appropriate element in setup.py which would register your bot's unique name for access by zulip-run-bot. I'm guessing that would help for deployment, but would appreciate your feedback. That PR is currently zulip/python-zulip-api/pull/517
My understanding is that the pip list differences are likely since a straight pip install has no location but a pip install -e (or --editable) has a location, and changing those files adjust what actually runs - which is useful during development, to avoid having to repeatedly reinstall a package after each edit.

@neiljp I receive the same error when using absolute paths
zulip-run-bot /absolute/path/to/bot --config-file /absolute/path/to/zuliprc

@arthurpankiewicz I might have some good news on this. We recently merged some code that allows you to import out-of-tree bots in botserver. If you're willing to test this, you would need to install the zulip-botserver package from git; we haven't published a release since this was merged.
https://github.com/zulip/python-zulip-api/pull/523


Add issue templates

Create issue templates for:

Features propositions
Bug fixes

So that everyone can cooperate on this project in a regulated and clean way

Unresolved issue on fixed matter :eyes:


fix(security): update go to 1.18.6

This fixes the following CVEs in go:

CVE-2022-32189 - encoding/gob & math/big: decoding big.Float and big.Rat can panic
CVE-2022-27664 - net/http: handle server errors after sending GOAWAY
CVE-2022-32190 - net/url: JoinPath does not strip relative path components in all circumstances

Thanks for the review and merge!


Join forces

I found this excellent gem! 💎
It seems like there are a few ruby gems for string matching:

https://github.com/kiyoka/fuzzy-string-match
https://github.com/flori/amatch
https://github.com/GlobalNamesArchitecture/damerau-levenshtein
https://github.com/tonytonyjan/jaro_winkler/

Would it make sense to join forces? In other words, have several maintainers of one project.
String distance is a great functionality, but the API can be pretty static over time. So what's important is mostly to have several maintainers that can help each other with CI upgrades and similar.
ping @kiyoka @flori @dimus @tonytonyjan
I've opened issues in all three repos quoted above, with the same message

To avoid spreading the discussion across four threads, let's keep it all in this one:
https://github.com/flori/amatch/issues/18


AMBARI-23551. Disable system out for Logfeeder log (logfeeder.out)

What changes were proposed in this pull request?
logfeeder.out file is not rotated, but we do not even need it. we can disable sysout console appender by default. (but keep appender there in a comment)
Also fix some bad references in the log4j file
How was this patch tested?
UTs: not needed
FT: manually change the config and use these values.
please review @swagle @adoroszlai @zeroflag @kasakrisz

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/Ambari-Github-PullRequest-Builder/1794/
Test FAILed.
Test FAILured.


Conflict: UIScrollView in CenterViewController

I have a UIScrollView in CenterViewController and the scrollview has three pages.
When in first page, swipe to right, I hope to open the LeftViewController, how to deal with the conflict pan gesture, Thank you very much!

@farfromrefug  Thank you very much !!!

hi,i find "CGPoint velocity = [self.panGesture velocityInView:self.panGesture.view];",velocity.x & y is always 0. anybody can help me? THX

@mingming1222,Please Help Me~

sorry...i dont no.  😂
发自我的 iPhone

在 2015年7月30日，19:19，lipeiran<EMAIL_ADDRESS>写道：
hi,i find "CGPoint velocity = [self.panGesture velocityInView:self.panGesture.view];",velocity.x & y is always 0. anybody can help me? THX
—
Reply to this email directly or view it on GitHub.

"I've just edited the setupGestureRecognizers method and stored a reference to the gesture recognizer"
Just to clear the confusion to @JanHalozan 's great answer, just assign local variable  pan to panGestureRecognizer that you defined as a property in setupGestureRecognizers .
You must also change isPointContainedWithRightBezelRect isPointContainedWithinRightBezelRect (change With to Within) to fix the error.

@farfromrefug is right. We must remove that last if condition for UIScrollViewPanGestureRecognizer, because when the transitionStyle is changed to pageCurl, this check doesn't work expectedly, since pageCurl calls UIPanGestureRecognizer .

velocity.x & y is always 0  +1

Is this already somewhere in the implementation or in a PR? Otherwise I'll submit a new pull request.


As a User I want to view the tournaments that are underway within the organisation

@DanielLarsenNZ I've given this some thought and think this might be a nice way to display the tournament overview. Any feedback from your end?

OMG :shipit: ❤❤❤

@olafwrieden The API has changed somewhat to match the DAPR state API. I now include a tenantId in all tournament paths. More details in api.md

Added Tournaments View


Race Condition existed of websocketwatchdog

Desc
websocketwatchdog can close new websocket.WebSocketApp instance when it is trying connecting(ConnectionState has race condition) because of the following logic:
websocketwatchdog.py: watch_dog_job
            elif connection.state == ConnectionState.CLOSED_ON_ERROR:
                if watch_dog_instance.is_auto_connect:
                    connection.re_connect_in_delay(watch_dog_instance.connection_delay_failure)
                    pass

Thanks for your feedback, please try the latest master branch for version 2.


🐛 Set ks_tag to v0.9.0 in docs/mkdocs.yml

Summary
This PR changes that setting. This var seems to need to hold a release semver. Right now, before this fix, the quickstart docs-ecutable is failing in the main branch.
Related issue(s)

closing - fixing manually now.


feat: add translations for new version of Playground

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

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


yadm: use resholvePackage

Motivation for this change
Convert package to use resholvePackage
Things done

Built on platform(s)

[ ] x86_64-linux
[ ] aarch64-linux
[x] x86_64-darwin
[ ] aarch64-darwin

[x] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[x] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[x] Tested basic functionality of all binary files (usually in ./result/bin/)
22.05 Release Notes (or backporting 21.11 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module
[ ] (Release notes changes) Ran nixos/doc/manual/md-to-db.sh to update generated release notes

[x] Fits CONTRIBUTING.md.

Two notes for posterity:

Up until the release of resholve 0.6.0, "is it sophisticated enough to package yadm?" was my primary measuring stick for progress. That makes this one of the most complicated packages I've ~successfully converted to use resholve so far.
I've had it packaged since September, but I held off on the PR until now because I'd like this to have a few months to air out in unstable in case it causes any trouble.

Because it's an important bellwether for resholve, I also took some time to record a packaging tutorial (video) and write an accompanying blog post walking through the packaging process. The video is embedded in the post:
https://www.t-ravis.com/post/nix/advanced_shell_packaging_resholve_yadm/

I've reported the cause of the aarch64-darwin OfBorg failure separately in #154203.

Looks good, I have 2 unimportant nits in case you are interested

Thank you for this


React Native debugging is broken after sharing

Product and Version [VS/VSCode]: VS Code
OS Version [macOS/Windows]: macOS
Live Share Extension Version: 0.2.58
Steps to reproduce:

[Host] Make sure to have the React Native extension installed
[Host] Open up a React Native project in VS Code and share it
[Host] Press F5 to start debugging

Expected: For the VS Code debugger to launch the app
Actual: An error is displayed
If the host stops sharing and presses F5 again, then debugging works as expected. This is particularly problematic as host debugging is completely broken while sharing.

Closing in favor of #164, which captures the current behavior more accurately.


Migrate to the nodejs-language repo.

This PR represents all the steps to migrate this repository and set up the new scaffolding.

Blocked by #5

I actually assert we should merge this first, then redo #5.

I rebased it against #7, so it's already been re-done

merge #5
tests get re-run for #7
merge #7

Sounds good.


Pack installation

I was able to install the slack package in my stackstorm-ha.
This contradicts the documentation that says: In distributed environment of the Kubernetes cluster st2 pack install won’t work.
It is not detailed why it should no work. Is it because the paths /opt/stackstorm/{packs,virtualenvs} are not a shared volume between all deployments? That was my thinking so I created volumes for /opt/stackstorm/packs and /opt/stackstorm/virtualenvs.
But I'm not able to install the kubernetes pack. Is it the expected behavior? Install one pack but not another?
The logs from the packs installation:
slack:
id: 601af25d977d9e0c3a92f8ed
action.ref: packs.install
parameters:
  packs:
  - slack
status: succeeded (76s elapsed)
start_timestamp: Wed, 03 Feb 2021 18:58:37 UTC
end_timestamp: Wed, 03 Feb 2021 18:59:53 UTC
result:
  output:
    conflict_list: []
    message: Successfully installed packs
    packs_list:
    - slack
    warning_list: []
+--------------------------+-------------------------+------------------------------------+-----------------------------+-------------------------------+
| id                       | status                  | task                               | action                      | start_timestamp               |
+--------------------------+-------------------------+------------------------------------+-----------------------------+-------------------------------+
| 601af25ed960e506c6a15f26 | succeeded (1s elapsed)  | init_task                          | core.noop                   | Wed, 03 Feb 2021 18:58:38 UTC |
| 601af260d960e506c6a15f35 | succeeded (21s elapsed) | download_pack                      | packs.download              | Wed, 03 Feb 2021 18:58:40 UTC |
| 601af276d57f8e4e94ea2e97 | succeeded (0s elapsed)  | make_a_prerun                      | packs.virtualenv_prerun     | Wed, 03 Feb 2021 18:59:02 UTC |
| 601af281d57f8e4e94ea2ea6 | succeeded (1s elapsed)  | get_pack_dependencies              | packs.get_pack_dependencies | Wed, 03 Feb 2021 18:59:13 UTC |
| 601af283d960e506c6a15f46 | succeeded (0s elapsed)  | check_dependency_and_conflict_list | core.noop                   | Wed, 03 Feb 2021 18:59:15 UTC |
| 601af284d960e506c6a15f55 | succeeded (28s elapsed) | install_pack_requirements          | packs.setup_virtualenv      | Wed, 03 Feb 2021 18:59:16 UTC |
| 601af2a0d960e506c6a15f7d | succeeded (0s elapsed)  | get_pack_warnings                  | packs.get_pack_warnings     | Wed, 03 Feb 2021 18:59:44 UTC |
| 601af2a3d57f8e4e94ea2eb8 | succeeded (6s elapsed)  | register_pack                      | packs.load                  | Wed, 03 Feb 2021 18:59:47 UTC |
+--------------------------+-------------------------+------------------------------------+-----------------------------+-------------------------------+

kubernetes:
action.ref: packs.install
parameters:
  packs:
  - kubernetes
status: failed (19s elapsed)
start_timestamp: Wed, 03 Feb 2021 19:59:57 UTC
end_timestamp: Wed, 03 Feb 2021 20:00:16 UTC
result:
  errors:
  - message: Execution failed. See result for details.
    result:
      exit_code: 1
      result: None
      stderr: "st2.actions.python.SetupVirtualEnvironmentAction: DEBUG    Setting up virtualenv for pack "kubernetes" (/opt/stackstorm/packs/kubernetes)
st2.actions.python.SetupVirtualEnvironmentAction: INFO     Virtualenv path "/opt/stackstorm/virtualenvs/kubernetes" doesn't exist
st2.actions.python.SetupVirtualEnvironmentAction: DEBUG    Creating virtualenv for pack "kubernetes" in "/opt/stackstorm/virtualenvs/kubernetes"
st2.actions.python.SetupVirtualEnvironmentAction: DEBUG    Creating virtualenv in "/opt/stackstorm/virtualenvs/kubernetes" using Python binary "/opt/stackstorm/st2/bin/python"
st2.actions.python.SetupVirtualEnvironmentAction: DEBUG    Running command "/opt/stackstorm/st2/bin/virtualenv -p /opt/stackstorm/st2/bin/python --always-copy --verbose --no-download /opt/stackstorm/virtualenvs/kubernetes" to create virtualenv.
st2.actions.python.SetupVirtualEnvironmentAction: DEBUG    Installing base requirements
st2.actions.python.SetupVirtualEnvironmentAction: DEBUG    Installing requirement six>=1.9.0,<2.0 with command /opt/stackstorm/virtualenvs/kubernetes/bin/pip install six>=1.9.0,<2.0.
st2.actions.python.SetupVirtualEnvironmentAction: DEBUG    Installing pack specific requirements from "/opt/stackstorm/packs/kubernetes/requirements.txt"
st2.actions.python.SetupVirtualEnvironmentAction: DEBUG    Installing requirements from file /opt/stackstorm/packs/kubernetes/requirements.txt with command /opt/stackstorm/virtualenvs/kubernetes/bin/pip install -U -r /opt/stackstorm/packs/kubernetes/requirements.txt.
Traceback (most recent call last):
  File "/opt/stackstorm/st2/lib/python3.6/site-packages/python_runner/python_action_wrapper.py", line 334, in <module>
    obj.run()
  File "/opt/stackstorm/st2/lib/python3.6/site-packages/python_runner/python_action_wrapper.py", line 193, in run
    output = action.run(**self._parameters)
  File "/opt/stackstorm/packs/packs/actions/pack_mgmt/setup_virtualenv.py", line 89, in run
    no_download=no_download)
  File "/opt/stackstorm/st2/lib/python3.6/site-packages/st2common/util/virtualenvs.py", line 112, in setup_pack_virtualenv
    logger=logger)
  File "/opt/stackstorm/st2/lib/python3.6/site-packages/st2common/util/virtualenvs.py", line 251, in install_requirements
    (requirements_file_path, stdout, stderr))
Exception: Failed to install requirements from "/opt/stackstorm/packs/kubernetes/requirements.txt": Collecting pyswagger (from -r /opt/stackstorm/packs/kubernetes/requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/ec/6e/af4a2531e379ad64388615327b6c2e0f3df4b22013718553189cff501905/pyswagger-0.8.39-py3-none-any.whl (78kB)
Collecting jinja2 (from -r /opt/stackstorm/packs/kubernetes/requirements.txt (line 2))
  Downloading https://files.pythonhosted.org/packages/7e/c2/1eece8c95ddbc9b1aeb64f5783a9e07a286de42191b7204d67b7496ddf35/Jinja2-2.11.3-py2.py3-none-any.whl (125kB)
Collecting http_parser (from -r /opt/stackstorm/packs/kubernetes/requirements.txt (line 3))
  Downloading https://files.pythonhosted.org/packages/04/b2/c98d0a2b759fcf91ae0a3e7691e840e4c861dac2c7f5a4e36220129d0cc8/http-parser-0.9.0.tar.gz (167kB)
Collecting backports.ssl==0.0.9 (from -r /opt/stackstorm/packs/kubernetes/requirements.txt (line 4))
  Downloading https://files.pythonhosted.org/packages/ca/39/e968b8823a469dd7135ff960057aa27e8a226d2b1ac0a38701e26ce2e19f/backports.ssl-0.0.9.tar.gz
Collecting pyopenssl==17.5.0 (from -r /opt/stackstorm/packs/kubernetes/requirements.txt (line 5))
  Downloading https://files.pythonhosted.org/packages/79/db/7c0cfe4aa8341a5fab4638952520d8db6ab85ff84505e12c00ea311c3516/pyOpenSSL-17.5.0-py2.py3-none-any.whl (53kB)
Collecting validate-email (from pyswagger->-r /opt/stackstorm/packs/kubernetes/requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/84/a0/cb53fb64b52123513d04f9b913b905f3eb6fda7264e639b4573cc715c29f/validate_email-1.3.tar.gz
Requirement already satisfied, skipping upgrade: six>=1.7.2 in ./virtualenvs/kubernetes/lib/python3.6/site-packages (from pyswagger->-r /opt/stackstorm/packs/kubernetes/requirements.txt (line 1)) (1.15.0)
Collecting pyaml>=15.03.1 (from pyswagger->-r /opt/stackstorm/packs/kubernetes/requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/15/c4/1310a054d33abc318426a956e7d6df0df76a6ddfa9c66f6310274fb75d42/pyaml-20.4.0-py2.py3-none-any.whl
Collecting MarkupSafe>=0.23 (from jinja2->-r /opt/stackstorm/packs/kubernetes/requirements.txt (line 2))
  Downloading https://files.pythonhosted.org/packages/9d/d3/75cddfad6ca1d1bb3a017cece499a65e54ceb4583800f1256b8ad07bb57f/MarkupSafe-1.1.1-cp36-cp36m-manylinux2010_x86_64.whl
Collecting cryptography>=2.1.4 (from pyopenssl==17.5.0->-r /opt/stackstorm/packs/kubernetes/requirements.txt (line 5))
  Downloading https://files.pythonhosted.org/packages/c9/de/7054df0620b5411ba45480f0261e1fb66a53f3db31b28e3aa52c026e72d9/cryptography-3.3.1-cp36-abi3-manylinux2010_x86_64.whl (2.6MB)
Collecting PyYAML (from pyaml>=15.03.1->pyswagger->-r /opt/stackstorm/packs/kubernetes/requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/7a/5b/bc0b5ab38247bba158504a410112b6c03f153c652734ece1849749e5f518/PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl (640kB)
Collecting cffi>=1.12 (from cryptography>=2.1.4->pyopenssl==17.5.0->-r /opt/stackstorm/packs/kubernetes/requirements.txt (line 5))
  Downloading https://files.pythonhosted.org/packages/1c/1a/90fa7e7ee05d91d0339ef264bd8c008f57292aba4a91ec512a0bbb379d1d/cffi-1.14.4-cp36-cp36m-manylinux1_x86_64.whl (401kB)
Collecting pycparser (from cffi>=1.12->cryptography>=2.1.4->pyopenssl==17.5.0->-r /opt/stackstorm/packs/kubernetes/requirements.txt (line 5))
  Downloading https://files.pythonhosted.org/packages/ae/e7/d9c3a176ca4b02024debf82342dab36efadfc5776f9c8db077e8f6e71821/pycparser-2.20-py2.py3-none-any.whl (112kB)
Building wheels for collected packages: http-parser, backports.ssl, validate-email
  Building wheel for http-parser (setup.py): started
  Building wheel for http-parser (setup.py): finished with status 'error'
  Running setup.py clean for http-parser
  Building wheel for backports.ssl (setup.py): started
  Building wheel for backports.ssl (setup.py): finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/ba/76/4b/c4d89c6e7710b1517162b0846c13b53e7ec015e1e882d943fd
  Building wheel for validate-email (setup.py): started
  Building wheel for validate-email (setup.py): finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/14/46/e7/4a2edb0d03a802cb59a75668734c04cceacdd6c0c585448773
Successfully built backports.ssl validate-email
Failed to build http-parser
Installing collected packages: validate-email, PyYAML, pyaml, pyswagger, MarkupSafe, jinja2, http-parser, backports.ssl, pycparser, cffi, cryptography, pyopenssl
  Running setup.py install for http-parser: started
    Running setup.py install for http-parser: finished with status 'error'
\(stderr:   ERROR: Complete output from command /opt/stackstorm/virtualenvs/kubernetes/bin/python -u -c 'import setuptools, tokenize;__file__='"'"'/tmp/pip-install-ixx7k2ze/http-parser/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\
'"'"', '"'"'\
'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-gi6q70jy --python-tag cp36:
  ERROR: running bdist_wheel
  running build
  running build_py
  creating build
  creating build/lib.linux-x86_64-3.6
  creating build/lib.linux-x86_64-3.6/http_parser
  copying http_parser/util.py -> build/lib.linux-x86_64-3.6/http_parser
  copying http_parser/http.py -> build/lib.linux-x86_64-3.6/http_parser
  copying http_parser/reader.py -> build/lib.linux-x86_64-3.6/http_parser
  copying http_parser/_socketio.py -> build/lib.linux-x86_64-3.6/http_parser
  copying http_parser/__init__.py -> build/lib.linux-x86_64-3.6/http_parser
  copying http_parser/pyparser.py -> build/lib.linux-x86_64-3.6/http_parser
  running build_ext
  building 'http_parser.parser' extension
  creating build/temp.linux-x86_64-3.6
  creating build/temp.linux-x86_64-3.6/http_parser
  x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -Iparser -I/usr/include/python3.6m -I/opt/stackstorm/virtualenvs/kubernetes/include/python3.6m -c http_parser/http_parser.c -o build/temp.linux-x86_64-3.6/http_parser/http_parser.o
  unable to execute 'x86_64-linux-gnu-gcc': No such file or directory
  error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
  ----------------------------------------
  ERROR: Failed building wheel for http-parser
\   ERROR: Complete output from command /opt/stackstorm/virtualenvs/kubernetes/bin/python -u -c 'import setuptools, tokenize;__file__='"'"'/tmp/pip-install-ixx7k2ze/http-parser/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\
'"'"', '"'"'\
'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-crrmxaug/install-record.txt --single-version-externally-managed --compile --install-headers /opt/stackstorm/virtualenvs/kubernetes/include/site/python3.6/http-parser:
    ERROR: running install
    running build
    running build_py
    creating build
    creating build/lib.linux-x86_64-3.6
    creating build/lib.linux-x86_64-3.6/http_parser
    copying http_parser/util.py -> build/lib.linux-x86_64-3.6/http_parser
    copying http_parser/http.py -> build/lib.linux-x86_64-3.6/http_parser
    copying http_parser/reader.py -> build/lib.linux-x86_64-3.6/http_parser
    copying http_parser/_socketio.py -> build/lib.linux-x86_64-3.6/http_parser
    copying http_parser/__init__.py -> build/lib.linux-x86_64-3.6/http_parser
    copying http_parser/pyparser.py -> build/lib.linux-x86_64-3.6/http_parser
    running build_ext
    building 'http_parser.parser' extension
    creating build/temp.linux-x86_64-3.6
    creating build/temp.linux-x86_64-3.6/http_parser
    x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -Iparser -I/usr/include/python3.6m -I/opt/stackstorm/virtualenvs/kubernetes/include/python3.6m -c http_parser/http_parser.c -o build/temp.linux-x86_64-3.6/http_parser/http_parser.o
    unable to execute 'x86_64-linux-gnu-gcc': No such file or directory
    error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
    ----------------------------------------
\RROR: Command "/opt/stackstorm/virtualenvs/kubernetes/bin/python -u -c 'import setuptools, tokenize;__file__='"'"'/tmp/pip-install-ixx7k2ze/http-parser/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\
'"'"', '"'"'\
'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-crrmxaug/install-record.txt --single-version-externally-managed --compile --install-headers /opt/stackstorm/virtualenvs/kubernetes/include/site/python3.6/http-parser" failed with error code 1 in /tmp/pip-install-ixx7k2ze/http-parser/
WARNING: You are using pip version 19.1.1, however version 21.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
)
"
      stdout: ''
    task_id: install_pack_requirements
    type: error
  output:
    conflict_list: []
    message: ''
    packs_list:
    - kubernetes
    warning_list: null
+--------------------------+------------------------+------------------------------------+-----------------------------+-------------------------------+
| id                       | status                 | task                               | action                      | start_timestamp               |
+--------------------------+------------------------+------------------------------------+-----------------------------+-------------------------------+
| 601b00bed960e506c6a15f9a | succeeded (1s elapsed) | init_task                          | core.noop                   | Wed, 03 Feb 2021 19:59:58 UTC |
| 601b00bfd960e506c6a15fa9 | succeeded (6s elapsed) | download_pack                      | packs.download              | Wed, 03 Feb 2021 19:59:59 UTC |
| 601b00c5d960e506c6a15fb8 | succeeded (1s elapsed) | make_a_prerun                      | packs.virtualenv_prerun     | Wed, 03 Feb 2021 20:00:05 UTC |
| 601b00c7d960e506c6a15fc7 | succeeded (0s elapsed) | get_pack_dependencies              | packs.get_pack_dependencies | Wed, 03 Feb 2021 20:00:07 UTC |
| 601b00c8d960e506c6a15fd6 | succeeded (0s elapsed) | check_dependency_and_conflict_list | core.noop                   | Wed, 03 Feb 2021 20:00:08 UTC |
| 601b00c8d960e506c6a15fe5 | failed (8s elapsed)    | install_pack_requirements          | packs.setup_virtualenv      | Wed, 03 Feb 2021 20:00:08 UTC |
+--------------------------+------------------------+------------------------------------+-----------------------------+-------------------------------+

The error unable to execute 'x86_64-linux-gnu-gcc': No such file or directory just seems like there is a dependency necessary to  install the pack missing.
Version:
# st2 --version
st2 3.4dev (c422f0029), on Python 3.6.9

Just curious...do you have NFS share where the pack is being attempted to be installed? because the only other way is to be done via docker image to my knowledge.

I have a Ceph Shared Filesystem in the paths /opt/stackstorm/packs and /opt/stackstorm/virtualenvs on all containers. Should this be enough to install packs using the Kubernetes HA mode?

Yeah, ReadWriteMany kind of shared storage that you have makes the virtualenvs and pack content shared between all the st2actionrunner pods which should make the pack install work.
In your specific case, the error is different:
  unable to execute 'x86_64-linux-gnu-gcc': No such file or directory
  error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

Some packs might need additional OS-level dependencies for building the virtualenv/requirements. Looks like you need gcc package to be installed in the st2actionrunner containers.
Hope that helps.

@armab That was on point. I installed the gcc package on the action runner container and it got me past that point on the pack installation.
But it could not finish, the packs.load action failed:
id: 601c18a5595ca69c52894996
action.ref: packs.load
context.user: st2admin
parameters:
  packs:
  - kubernetes
  register: all
status: failed (13s elapsed)
start_timestamp: Thu, 04 Feb 2021 15:54:13 UTC
end_timestamp: Thu, 04 Feb 2021 15:54:26 UTC
result:
  exit_code: 1
  result: None
  stderr: "st2.actions.python.St2RegisterAction: DEBUG    Calling client method "register" with kwargs "{'types': ['all'], 'packs': ['kubernetes']}"
Traceback (most recent call last):
  File "/opt/stackstorm/st2/lib/python3.6/site-packages/python_runner/python_action_wrapper.py", line 334, in <module>
    obj.run()
  File "/opt/stackstorm/st2/lib/python3.6/site-packages/python_runner/python_action_wrapper.py", line 193, in run
    output = action.run(**self._parameters)
  File "/opt/stackstorm/packs/packs/actions/pack_mgmt/register.py", line 82, in run
    format_func=format_result)
  File "/opt/stackstorm/packs/packs/actions/pack_mgmt/register.py", line 150, in _run_client_method
    result = method(**method_kwargs)
  File "/opt/stackstorm/st2/lib/python3.6/site-packages/st2client/models/core.py", line 42, in decorate
    return func(*args, **kwargs)
  File "/opt/stackstorm/st2/lib/python3.6/site-packages/st2client/models/core.py", line 563, in register
    self.handle_error(response)
  File "/opt/stackstorm/st2/lib/python3.6/site-packages/st2client/models/core.py", line 168, in handle_error
    response.raise_for_status()
  File "/opt/stackstorm/st2/lib/python3.6/site-packages/requests/models.py", line 941, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request
MESSAGE: Failed to register action "/opt/stackstorm/packs/kubernetes/actions/register_tpr.meta.yaml" from pack "kubernetes": RunnerType mistral-v2 is not found. If you are using old and deprecated runner name, you need to switch to a new one. For more information, please see https://docs.stackstorm.com/upgrade_notes.html#st2-v0-9 for url: http://stackstorm-st2api:9101/v1/packs/register
"
  stdout: ''

This seems more a problem with the pack being out of date with my stackstorm installation. Is it possible for me to six it mannualy? Editing the action file causing the error:
# cat packs/kubernetes/actions/register_tpr.meta.yaml
---
  name: "register_tpr"
  pack: "kubernetes"
  description: "migrate services"
  runner_type: "mistral-v2"
  enabled: true
  entry_point: "workflows/register_tpr.yaml"
  parameters:
    payload:
      type: "object"
      description: "payload object from kubernetes sensor"

Changing the runner type would fix it? If so, how do I get my correct runner type?

Looks like you're using some very old K8s pack version.
Check the upstream version: https://github.com/StackStorm-Exchange/stackstorm-kubernetes/blob/master/actions/workflows/register_tpr.yaml  Mistral was deprecated since that an replaced with the Orquestra workflow engine.

@armab Using the github repo url instead of the pack name the installation worked. Thank you for your help!

Thanks for reporting.
What you're saying signalizes that StackStorm Exchange index is unsync with the latest release for the K8s pack.
Created an issue for that: https://github.com/StackStorm-Exchange/stackstorm-kubernetes/issues/46 so we can fix that pack later.

@armab Using the github repo url instead of the pack name the installation worked. Thank you for your help!

I'm getting the same error . Tried to install both using repo link and stack storm exchange package but still getting this error


Initial import of "Protect an API in Azure Functions - Node.js - With EasyAuth"

This is for #DOCS-CODE-005
Simple HTTP Trigger written in Node.js that demonstrates how Easy Auth in Azure Functions takes on the responsibility of basic authentication and your code then is responsible for all remaining authorization.

Couple inline suggestions and a few questions. The README looks really, really familiar :)
Yes I clearly used your README for inspiration.