STPyV8 for Windows

Any pointers what is preventing a Windows build?
Maybe if we can use this issue to track then we can have contributors to help on ths.

Well the main issue is that I am not a Windows programmer. While porting the PyV8 code I just copied the Windows compilation configuration but never gave it a try. By the way I would be glad to add a new GitHub actions so to have a Windows build too.

Can you update to support Windows as soon as possible, I need it

Have you tried compiling using WSL (Windows Subsystem for Linux)?
Here's a guide on how to set it up. It is probably a workaround for you.
https://stackoverflow.com/a/56783810

stpyv8 for window is coming soon？

Currently there are no plans of supporting STPyV8 on Windows in the short term. Even considering I am not a Windows programmer. I would be very glad if some contributor could jump in and take care of the details.

Hey @buffer
I played around with the repo for a bit, trying to compile it myself.
I managed to get far enough where all the dependencies downloaded, V8 compiled but I'm facing failures in the Python extension compilation (final step). I'm not sure if these are platform specific issues in your code proper or something else.
Some of the issues I encountered were rather trivial (forward slashes instead of backslashes in setup.py, single quotes instead of double quotes, etc.) and some were a bit more involved (downloading the correct specific version of the Windows SDK required by V8...). I've got a list of issues I encountered and their remedies.
I'll keep trying to figure this out. If I can get it all working I don't mind putting together a PR, as best as I'll be able to.
Attached is a summary of some of the changes I had to make to setup.py as well as a build log with the C errors.
Any tips or insight would be greatly appreciated.
Thanks.
# Requires:
#  - Developer Command Prompt (or VC environment variables loaded through vcvarsall.bat and the like)
#  - Windows SDK version 10.0.22621.0
#  - $env:DEPOT_TOOLS_WIN_TOOLCHAIN=0
#  - python3 on path (if not installed through Microsoft Store)

# ...

def build_v8():
    args = f"gen {os.path.join('out.gn', 'x64.release.sample')} --args=\"{GN_ARGS}\""
    exec_cmd(os.path.join(DEPOT_HOME, 'gn'),
             args,
             cwd = V8_HOME,
             msg = f"Generate build scripts for V8 (v{V8_GIT_TAG})")

    exec_cmd(os.path.join(DEPOT_HOME, 'ninja'),
             f"-C {os.path.join('out.gn', 'x64.release.sample')} v8_monolith",
             cwd = V8_HOME,
             msg = "Build V8 with ninja")

# ...

stpyv8_win = Extension(
    name="_STPyV8_win",
    sources=[os.path.join("src", source) for source in source_files],
    define_macros=macros,
    include_dirs=include_dirs + [r"C:\local\boost_1_82_0"],  # Default install location for Chocolatey, could be better
    library_dirs=library_dirs,
    libraries=libraries,
    extra_compile_args=extra_compile_args + ["/std:c++20"],  # C++17 is the minimum required
    extra_link_args=extra_link_args,
)

# ...

Build log

PS C:\workspace\python\stpyv8> python .\setup.py build
running build
running build_py
running build_ext
Found depot tools
Fetching the release tag information
Checkout Google V8 v<IP_ADDRESS>
HEAD is now at e6cc87a5f83 Version <IP_ADDRESS>
Syncing Google V8 code
Updating depot_tools...
Syncing projects: 100% (29/29), done.
Running hooks: 100% (32/32), done.
Generate build scripts for V8 (v<IP_ADDRESS>)
Done. Made 190 targets from 100 files in 8699ms
Build V8 with ninja
ninja: Entering directory `out.gn\x64.release.sample'
ninja: no work to do.
building '_STPyV8_win' extension
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\HostX86\x86\cl.exe" /c /nologo /O2 /W3 /GL /DNDEBUG /MD -DBOOST_PYTHON_STATIC_LIB -IC:\local\boost_1_82_0 -IC:\workspace\python\stpyv8\
v8\include "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include" "-IC:\Prog
ram Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\um" "-IC:\Program Files (x86)\Windo
ws Kits\10\include\10.0.22621.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\cppwinrt" -IC:\Python311\include -IC:\Python311\Include "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\To
ols\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt" "-IC:\Program Files (x
86)\Windows Kits\10\include\10.0.22621.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\
include\10.0.22621.0\cppwinrt" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133
\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\um" "-IC:\Progr
am Files (x86)\Windows Kits\10\include\10.0.22621.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\cppwinrt" /EHsc /Tpsrc\Context.cpp /Fobuild\temp.win32-cpython-311\Release\src\Context.obj /std:c++20 /D_U
SE_32BIT_TIME_T /O2 /GL /MT /EHsc /Gy /Zi
cl : Command line warning D9025 : overriding '/MD' with '/MT'
Context.cpp
C:\workspace\python\stpyv8\v8\include\v8-platform.h(1209): warning C4244: 'return': conversion from 'double' to 'int64_t', possible loss of data
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\HostX86\x86\cl.exe" /c /nologo /O2 /W3 /GL /DNDEBUG /MD -DBOOST_PYTHON_STATIC_LIB -IC:\local\boost_1_82_0 -IC:\workspace\python\stpyv8\
v8\include "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include" "-IC:\Prog
ram Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\um" "-IC:\Program Files (x86)\Windo
ws Kits\10\include\10.0.22621.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\cppwinrt" -IC:\Python311\include -IC:\Python311\Include "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\To
ols\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt" "-IC:\Program Files (x
86)\Windows Kits\10\include\10.0.22621.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\
include\10.0.22621.0\cppwinrt" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133
\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\um" "-IC:\Progr
am Files (x86)\Windows Kits\10\include\10.0.22621.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\cppwinrt" /EHsc /Tpsrc\Engine.cpp /Fobuild\temp.win32-cpython-311\Release\src\Engine.obj /std:c++20 /D_USE
_32BIT_TIME_T /O2 /GL /MT /EHsc /Gy /Zi
cl : Command line warning D9025 : overriding '/MD' with '/MT'
Engine.cpp
C:\workspace\python\stpyv8\v8\include\v8-unwinder.h(41): error C2143: syntax error: missing '}' before '('
C:\workspace\python\stpyv8\v8\include\v8-unwinder.h(41): error C2059: syntax error: 'string'
C:\workspace\python\stpyv8\v8\include\v8-unwinder.h(46): error C2143: syntax error: missing ';' before '}'
C:\workspace\python\stpyv8\v8\include\v8-unwinder.h(55): error C3646: 'vm_state': unknown override specifier
C:\workspace\python\stpyv8\v8\include\v8-unwinder.h(55): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
C:\workspace\python\stpyv8\v8\include\v8-unwinder.h(56): error C3646: 'embedder_state': unknown override specifier
C:\workspace\python\stpyv8\v8\include\v8-unwinder.h(56): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
C:\workspace\python\stpyv8\v8\include\v8-unwinder.h(114): error C2061: syntax error: identifier 'RegisterState'
C:\workspace\python\stpyv8\v8\include\v8-unwinder.h(130): error C2059: syntax error: '}'
C:\workspace\python\stpyv8\v8\include\v8-unwinder.h(130): error C2143: syntax error: missing ';' before '}'
C:\workspace\python\stpyv8\v8\include\v8-isolate.h(30): error C2143: syntax error: missing ';' before '{'
C:\workspace\python\stpyv8\v8\include\v8-isolate.h(30): error C2447: '{': missing function header (old-style formal list?)
C:\workspace\python\stpyv8\src\Engine.h(27): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
C:\workspace\python\stpyv8\src\Engine.h(27): error C3861: 'GetCurrent': identifier not found
C:\workspace\python\stpyv8\src\Exception.h(170): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
C:\workspace\python\stpyv8\src\Exception.h(170): error C3861: 'GetCurrent': identifier not found
C:\workspace\python\stpyv8\src\Exception.h(179): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
C:\workspace\python\stpyv8\src\Exception.h(178): error C3861: 'GetCurrent': identifier not found
C:\workspace\python\stpyv8\src\Wrapper.h(81): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
C:\workspace\python\stpyv8\src\Wrapper.h(80): error C3861: 'GetCurrent': identifier not found
C:\workspace\python\stpyv8\src\Wrapper.h(91): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
C:\workspace\python\stpyv8\src\Wrapper.h(91): error C3861: 'GetCurrent': identifier not found
C:\workspace\python\stpyv8\src\Wrapper.h(208): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
C:\workspace\python\stpyv8\src\Wrapper.h(207): error C3861: 'GetCurrent': identifier not found
C:\workspace\python\stpyv8\src\Wrapper.h(218): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
C:\workspace\python\stpyv8\src\Wrapper.h(218): error C3861: 'GetCurrent': identifier not found
C:\workspace\python\stpyv8\src\Wrapper.h(290): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
C:\workspace\python\stpyv8\src\Wrapper.h(290): error C3861: 'GetCurrent': identifier not found
src\Engine.cpp(34): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Engine.cpp(13): error C2065: 'LowMemoryNotification': undeclared identifier
src\Engine.cpp(86): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Engine.cpp(86): error C3861: 'GetCurrent': identifier not found
src\Engine.cpp(91): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Engine.cpp(91): error C3861: 'GetCurrent': identifier not found
src\Engine.cpp(101): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Engine.cpp(101): error C3861: 'GetCurrent': identifier not found
src\Engine.cpp(102): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Engine.cpp(113): error C2039: 'ResourceConstraints': is not a member of 'v8'
C:\workspace\python\stpyv8\v8\include\v8.h(71): note: see declaration of 'v8'
src\Engine.cpp(113): error C2065: 'ResourceConstraints': undeclared identifier
src\Engine.cpp(113): error C2146: syntax error: missing ';' before identifier 'limit'
src\Engine.cpp(113): error C2065: 'limit': undeclared identifier
src\Engine.cpp(115): error C2065: 'limit': undeclared identifier
src\Engine.cpp(116): error C2065: 'limit': undeclared identifier
src\Engine.cpp(138): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Engine.cpp(138): error C3861: 'GetCurrent': identifier not found
src\Engine.cpp(145): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Engine.cpp(145): error C3861: 'GetCurrent': identifier not found
src\Engine.cpp(147): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Engine.cpp(178): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Engine.cpp(178): error C3861: 'GetCurrent': identifier not found
src\Engine.cpp(180): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.29.30133\\bin\\HostX86\\x86\\cl.exe' failed with exit code 2

Quick update:
Looks like most of those compiler errors stem from missing explicit V8 includes in the stpyv8 code.
For example:
Adding the following to Engine.h makes it compile properly:
#include <v8-isolate.h>
#include <v8-value.h>
#include <v8-context.h>
#include <v8-message.h>
#include <v8-local-handle.h>
#include <v8-exception.h>
#include <v8-persistent-handle.h>
#include <v8-script.h>

Wrapper.cpp is still giving me grief but I'll keep at it.

Build log

PS C:\workspace\python\stpyv8> python .\setup.py stpyv8
running stpyv8
building '_STPyV8_win' extension
creating build
creating build\temp.win32-cpython-311
creating build\temp.win32-cpython-311\Release
creating build\temp.win32-cpython-311\Release\src
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\HostX86\x86\cl.exe" /c /nologo /O2 /W3 /GL /DNDEBUG /MD -DBOOST_PYTHON_STATIC_LIB -IC:\workspace\python\stpyv8\v8\include "-IC:\Program
 Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include" "-IC:\Program Files (x86)\Windows
Kits\10\include\10.0.22621.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.
22621.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\cppwinrt" -IC:\local\boost_1_82_0 -IC:\python311\include -IC:\Python311\include -IC:\Python311\Include "-IC:\Program Files (x86)\Microsoft Visual Stud
io\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt"
 "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\winrt" "-IC:\Program Files
 (x86)\Windows Kits\10\include\10.0.22621.0\cppwinrt" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC
\Tools\MSVC\14.29.30133\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.
22621.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\cppwinrt" /EHsc /Tpsrc\Context.cpp /Fobuild\temp.win32-cpython-311\Release\src\Cont
ext.obj /O2 /GL /MT /EHsc /Gy /Zi /std:c++20
cl : Command line warning D9025 : overriding '/MD' with '/MT'
Context.cpp
C:\workspace\python\stpyv8\v8\include\v8-platform.h(1209): warning C4244: 'return': conversion from 'double' to 'int64_t', possible loss of data
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\HostX86\x86\cl.exe" /c /nologo /O2 /W3 /GL /DNDEBUG /MD -DBOOST_PYTHON_STATIC_LIB -IC:\workspace\python\stpyv8\v8\include "-IC:\Program
 Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include" "-IC:\Program Files (x86)\Windows
Kits\10\include\10.0.22621.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.
22621.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\cppwinrt" -IC:\local\boost_1_82_0 -IC:\python311\include -IC:\Python311\include -IC:\Python311\Include "-IC:\Program Files (x86)\Microsoft Visual Stud
io\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt"
 "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\winrt" "-IC:\Program Files
 (x86)\Windows Kits\10\include\10.0.22621.0\cppwinrt" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC
\Tools\MSVC\14.29.30133\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.
22621.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\cppwinrt" /EHsc /Tpsrc\Engine.cpp /Fobuild\temp.win32-cpython-311\Release\src\Engin
e.obj /O2 /GL /MT /EHsc /Gy /Zi /std:c++20
cl : Command line warning D9025 : overriding '/MD' with '/MT'
Engine.cpp
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\HostX86\x86\cl.exe" /c /nologo /O2 /W3 /GL /DNDEBUG /MD -DBOOST_PYTHON_STATIC_LIB -IC:\workspace\python\stpyv8\v8\include "-IC:\Program
 Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include" "-IC:\Program Files (x86)\Windows
Kits\10\include\10.0.22621.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.
22621.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\cppwinrt" -IC:\local\boost_1_82_0 -IC:\python311\include -IC:\Python311\include -IC:\Python311\Include "-IC:\Program Files (x86)\Microsoft Visual Stud
io\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt"
 "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\winrt" "-IC:\Program Files
 (x86)\Windows Kits\10\include\10.0.22621.0\cppwinrt" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC
\Tools\MSVC\14.29.30133\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.
22621.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\cppwinrt" /EHsc /Tpsrc\Exception.cpp /Fobuild\temp.win32-cpython-311\Release\src\Ex
ception.obj /O2 /GL /MT /EHsc /Gy /Zi /std:c++20
cl : Command line warning D9025 : overriding '/MD' with '/MT'
Exception.cpp
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\HostX86\x86\cl.exe" /c /nologo /O2 /W3 /GL /DNDEBUG /MD -DBOOST_PYTHON_STATIC_LIB -IC:\workspace\python\stpyv8\v8\include "-IC:\Program
 Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include" "-IC:\Program Files (x86)\Windows
Kits\10\include\10.0.22621.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.
22621.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\cppwinrt" -IC:\local\boost_1_82_0 -IC:\python311\include -IC:\Python311\include -IC:\Python311\Include "-IC:\Program Files (x86)\Microsoft Visual Stud
io\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt"
 "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\winrt" "-IC:\Program Files
 (x86)\Windows Kits\10\include\10.0.22621.0\cppwinrt" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC
\Tools\MSVC\14.29.30133\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.
22621.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\cppwinrt" /EHsc /Tpsrc\Isolate.cpp /Fobuild\temp.win32-cpython-311\Release\src\Isol
ate.obj /O2 /GL /MT /EHsc /Gy /Zi /std:c++20
cl : Command line warning D9025 : overriding '/MD' with '/MT'
Isolate.cpp
C:\workspace\python\stpyv8\v8\include\v8-platform.h(1209): warning C4244: 'return': conversion from 'double' to 'int64_t', possible loss of data
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\HostX86\x86\cl.exe" /c /nologo /O2 /W3 /GL /DNDEBUG /MD -DBOOST_PYTHON_STATIC_LIB -IC:\workspace\python\stpyv8\v8\include "-IC:\Program
 Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include" "-IC:\Program Files (x86)\Windows
Kits\10\include\10.0.22621.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.
22621.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\cppwinrt" -IC:\local\boost_1_82_0 -IC:\python311\include -IC:\Python311\include -IC:\Python311\Include "-IC:\Program Files (x86)\Microsoft Visual Stud
io\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt"
 "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\winrt" "-IC:\Program Files
 (x86)\Windows Kits\10\include\10.0.22621.0\cppwinrt" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC
\Tools\MSVC\14.29.30133\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.
22621.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\cppwinrt" /EHsc /Tpsrc\Locker.cpp /Fobuild\temp.win32-cpython-311\Release\src\Locke
r.obj /O2 /GL /MT /EHsc /Gy /Zi /std:c++20
cl : Command line warning D9025 : overriding '/MD' with '/MT'
Locker.cpp
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\HostX86\x86\cl.exe" /c /nologo /O2 /W3 /GL /DNDEBUG /MD -DBOOST_PYTHON_STATIC_LIB -IC:\workspace\python\stpyv8\v8\include "-IC:\Program
 Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include" "-IC:\Program Files (x86)\Windows
Kits\10\include\10.0.22621.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.
22621.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\cppwinrt" -IC:\local\boost_1_82_0 -IC:\python311\include -IC:\Python311\include -IC:\Python311\Include "-IC:\Program Files (x86)\Microsoft Visual Stud
io\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt"
 "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\winrt" "-IC:\Program Files
 (x86)\Windows Kits\10\include\10.0.22621.0\cppwinrt" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC
\Tools\MSVC\14.29.30133\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.
22621.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\cppwinrt" /EHsc /Tpsrc\Platform.cpp /Fobuild\temp.win32-cpython-311\Release\src\Pla
tform.obj /O2 /GL /MT /EHsc /Gy /Zi /std:c++20
cl : Command line warning D9025 : overriding '/MD' with '/MT'
Platform.cpp
C:\workspace\python\stpyv8\v8\include\v8-platform.h(1209): warning C4244: 'return': conversion from 'double' to 'int64_t', possible loss of data
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\HostX86\x86\cl.exe" /c /nologo /O2 /W3 /GL /DNDEBUG /MD -DBOOST_PYTHON_STATIC_LIB -IC:\workspace\python\stpyv8\v8\include "-IC:\Program
 Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include" "-IC:\Program Files (x86)\Windows
Kits\10\include\10.0.22621.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.
22621.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\cppwinrt" -IC:\local\boost_1_82_0 -IC:\python311\include -IC:\Python311\include -IC:\Python311\Include "-IC:\Program Files (x86)\Microsoft Visual Stud
io\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt"
 "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\winrt" "-IC:\Program Files
 (x86)\Windows Kits\10\include\10.0.22621.0\cppwinrt" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC
\Tools\MSVC\14.29.30133\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.
22621.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\cppwinrt" /EHsc /Tpsrc\STPyV8.cpp /Fobuild\temp.win32-cpython-311\Release\src\STPyV
8.obj /O2 /GL /MT /EHsc /Gy /Zi /std:c++20
cl : Command line warning D9025 : overriding '/MD' with '/MT'
STPyV8.cpp
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\HostX86\x86\cl.exe" /c /nologo /O2 /W3 /GL /DNDEBUG /MD -DBOOST_PYTHON_STATIC_LIB -IC:\workspace\python\stpyv8\v8\include "-IC:\Program
 Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include" "-IC:\Program Files (x86)\Windows
Kits\10\include\10.0.22621.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.
22621.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\cppwinrt" -IC:\local\boost_1_82_0 -IC:\python311\include -IC:\Python311\include -IC:\Python311\Include "-IC:\Program Files (x86)\Microsoft Visual Stud
io\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt"
 "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\winrt" "-IC:\Program Files
 (x86)\Windows Kits\10\include\10.0.22621.0\cppwinrt" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC
\Tools\MSVC\14.29.30133\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.
22621.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\cppwinrt" /EHsc /Tpsrc\Utils.cpp /Fobuild\temp.win32-cpython-311\Release\src\Utils.
obj /O2 /GL /MT /EHsc /Gy /Zi /std:c++20
cl : Command line warning D9025 : overriding '/MD' with '/MT'
Utils.cpp
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\HostX86\x86\cl.exe" /c /nologo /O2 /W3 /GL /DNDEBUG /MD -DBOOST_PYTHON_STATIC_LIB -IC:\workspace\python\stpyv8\v8\include "-IC:\Program
 Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include" "-IC:\Program Files (x86)\Windows
Kits\10\include\10.0.22621.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.
22621.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\cppwinrt" -IC:\local\boost_1_82_0 -IC:\python311\include -IC:\Python311\include -IC:\Python311\Include "-IC:\Program Files (x86)\Microsoft Visual Stud
io\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt"
 "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\winrt" "-IC:\Program Files
 (x86)\Windows Kits\10\include\10.0.22621.0\cppwinrt" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC
\Tools\MSVC\14.29.30133\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.
22621.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\cppwinrt" /EHsc /Tpsrc\Wrapper.cpp /Fobuild\temp.win32-cpython-311\Release\src\Wrap
per.obj /O2 /GL /MT /EHsc /Gy /Zi /std:c++20
cl : Command line warning D9025 : overriding '/MD' with '/MT'
Wrapper.cpp
C:\workspace\python\stpyv8\v8\include\v8-platform.h(1209): warning C4244: 'return': conversion from 'double' to 'int64_t', possible loss of data
C:\workspace\python\stpyv8\v8\include\v8-unwinder.h(41): error C2143: syntax error: missing '}' before '('
C:\workspace\python\stpyv8\v8\include\v8-unwinder.h(41): error C2059: syntax error: 'string'
C:\workspace\python\stpyv8\v8\include\v8-unwinder.h(46): error C2143: syntax error: missing ';' before '}'
C:\workspace\python\stpyv8\v8\include\v8-unwinder.h(55): error C3646: 'vm_state': unknown override specifier
C:\workspace\python\stpyv8\v8\include\v8-unwinder.h(55): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
C:\workspace\python\stpyv8\v8\include\v8-unwinder.h(56): error C3646: 'embedder_state': unknown override specifier
C:\workspace\python\stpyv8\v8\include\v8-unwinder.h(56): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
C:\workspace\python\stpyv8\v8\include\v8-unwinder.h(114): error C2061: syntax error: identifier 'RegisterState'
C:\workspace\python\stpyv8\v8\include\v8-unwinder.h(130): error C2059: syntax error: '}'
C:\workspace\python\stpyv8\v8\include\v8-unwinder.h(130): error C2143: syntax error: missing ';' before '}'
C:\workspace\python\stpyv8\v8\include\v8-isolate.h(30): error C2143: syntax error: missing ';' before '{'
C:\workspace\python\stpyv8\v8\include\v8-isolate.h(30): error C2447: '{': missing function header (old-style formal list?)
C:\workspace\python\stpyv8\src\Exception.h(184): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
C:\workspace\python\stpyv8\src\Exception.h(184): error C3861: 'GetCurrent': identifier not found
C:\workspace\python\stpyv8\src\Exception.h(193): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
C:\workspace\python\stpyv8\src\Exception.h(192): error C3861: 'GetCurrent': identifier not found
C:\workspace\python\stpyv8\src\Wrapper.h(98): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
C:\workspace\python\stpyv8\src\Wrapper.h(97): error C3861: 'GetCurrent': identifier not found
C:\workspace\python\stpyv8\src\Wrapper.h(108): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
C:\workspace\python\stpyv8\src\Wrapper.h(108): error C3861: 'GetCurrent': identifier not found
C:\workspace\python\stpyv8\src\Wrapper.h(225): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
C:\workspace\python\stpyv8\src\Wrapper.h(224): error C3861: 'GetCurrent': identifier not found
C:\workspace\python\stpyv8\src\Wrapper.h(235): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
C:\workspace\python\stpyv8\src\Wrapper.h(235): error C3861: 'GetCurrent': identifier not found
C:\workspace\python\stpyv8\src\Wrapper.h(307): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
C:\workspace\python\stpyv8\src\Wrapper.h(307): error C3861: 'GetCurrent': identifier not found
C:\workspace\python\stpyv8\src\Isolate.h(32): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
C:\workspace\python\stpyv8\src\Isolate.h(36): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
C:\workspace\python\stpyv8\src\Isolate.h(40): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
C:\workspace\python\stpyv8\src\Context.h(34): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
C:\workspace\python\stpyv8\src\Context.h(34): error C2665: 'v8::Local::New': none of the 5 overloads could convert all the argument types
C:\workspace\python\stpyv8\v8\include\v8-local-handle.h(389): note: could be 'v8::Local v8::Local::New(v8::Isolate *,T *)'
        with
        [
            T=v8::Context
        ]
C:\workspace\python\stpyv8\v8\include\v8-local-handle.h(385): note: or       'v8::Local v8::Local::New(v8::Isolate *,v8::internal::Address)'
C:\workspace\python\stpyv8\v8\include\v8-local-handle.h(331): note: or       'v8::Local v8::Local::New(v8::Isolate *,const v8::BasicTracedReference &)'
        with
        [
            T=v8::Context
        ]
C:\workspace\python\stpyv8\v8\include\v8-local-handle.h(326): note: or       'v8::Local v8::Local::New(v8::Isolate *,const v8::PersistentBase &)'
        with
        [
            T=v8::Context
        ]
C:\workspace\python\stpyv8\v8\include\v8-local-handle.h(322): note: or       'v8::Local v8::Local::New(v8::Isolate *,v8::Local)'
C:\workspace\python\stpyv8\src\Context.h(34): note: while trying to match the argument list '(boost::python::api::object, const v8::Persistent>)'
        with
        [
            T=v8::Context
        ]
C:\workspace\python\stpyv8\src\Context.h(46): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
C:\workspace\python\stpyv8\src\Context.h(46): error C2664: 'v8::HandleScope::HandleScope(v8::Isolate *)': cannot convert argument 1 from 'boost::python::api::object' to 'v8::Isolate *'
C:\workspace\python\stpyv8\src\Context.h(46): note: No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
C:\workspace\python\stpyv8\v8\include\v8-local-handle.h(94): note: see declaration of 'v8::HandleScope::HandleScope'
C:\workspace\python\stpyv8\src\Context.h(50): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
C:\workspace\python\stpyv8\src\Context.h(50): error C2664: 'v8::HandleScope::HandleScope(v8::Isolate *)': cannot convert argument 1 from 'boost::python::api::object' to 'v8::Isolate *'
C:\workspace\python\stpyv8\src\Context.h(50): note: No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
C:\workspace\python\stpyv8\v8\include\v8-local-handle.h(94): note: see declaration of 'v8::HandleScope::HandleScope'
C:\workspace\python\stpyv8\src\Context.h(63): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
C:\workspace\python\stpyv8\src\Context.h(63): error C2819: type 'boost::python::api::object' does not have an overloaded member 'operator ->'
C:\local\boost_1_82_0\boost/python/object/pickle_support.hpp(14): note: see declaration of 'boost::python::api::object'
C:\workspace\python\stpyv8\src\Context.h(63): note: did you intend to use '.' instead?
C:\workspace\python\stpyv8\src\Context.h(63): error C2039: 'InContext': is not a member of 'boost::python::api::object'
C:\local\boost_1_82_0\boost/python/object/pickle_support.hpp(14): note: see declaration of 'boost::python::api::object'
src\Wrapper.cpp(234): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(251): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(283): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(283): error C3861: 'GetCurrent': identifier not found
src\Wrapper.cpp(337): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(337): error C3861: 'GetCurrent': identifier not found
src\Wrapper.cpp(345): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(345): error C3861: 'GetCurrent': identifier not found
src\Wrapper.cpp(401): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(401): error C3861: 'GetCurrent': identifier not found
src\Wrapper.cpp(408): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(408): error C3861: 'GetCurrent': identifier not found
src\Wrapper.cpp(424): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(424): error C3861: 'GetCurrent': identifier not found
src\Wrapper.cpp(431): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(431): error C3861: 'GetCurrent': identifier not found
src\Wrapper.cpp(469): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(469): error C3861: 'GetCurrent': identifier not found
src\Wrapper.cpp(472): warning C4068: unknown pragma 'GCC'
src\Wrapper.cpp(478): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(478): error C3861: 'GetCurrent': identifier not found
src\Wrapper.cpp(531): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(531): error C3861: 'GetCurrent': identifier not found
src\Wrapper.cpp(537): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(537): error C3861: 'GetCurrent': identifier not found
src\Wrapper.cpp(544): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(544): error C3861: 'GetCurrent': identifier not found
src\Wrapper.cpp(582): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(582): error C3861: 'GetCurrent': identifier not found
src\Wrapper.cpp(589): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(589): error C3861: 'GetCurrent': identifier not found
src\Wrapper.cpp(598): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(607): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(612): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(612): error C3861: 'GetCurrent': identifier not found
src\Wrapper.cpp(619): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(619): error C3861: 'GetCurrent': identifier not found
src\Wrapper.cpp(647): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(647): error C3861: 'GetCurrent': identifier not found
src\Wrapper.cpp(654): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(654): error C3861: 'GetCurrent': identifier not found
src\Wrapper.cpp(673): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(673): error C3861: 'GetCurrent': identifier not found
src\Wrapper.cpp(680): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(680): error C3861: 'GetCurrent': identifier not found
src\Wrapper.cpp(690): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(699): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(699): error C3861: 'GetCurrent': identifier not found
src\Wrapper.cpp(730): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(730): error C3861: 'GetCurrent': identifier not found
src\Wrapper.cpp(753): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(760): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(760): error C3861: 'GetCurrent': identifier not found
src\Wrapper.cpp(791): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(791): error C3861: 'GetCurrent': identifier not found
src\Wrapper.cpp(801): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(801): error C3861: 'GetCurrent': identifier not found
src\Wrapper.cpp(806): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(824): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(824): error C3861: 'GetCurrent': identifier not found
src\Wrapper.cpp(841): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(841): error C3861: 'GetCurrent': identifier not found
src\Wrapper.cpp(849): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(849): error C3861: 'GetCurrent': identifier not found
src\Wrapper.cpp(881): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(929): error C2027: use of undefined type 'v8::Isolate'
C:\workspace\python\stpyv8\v8\include\v8-value-serializer.h(21): note: see declaration of 'v8::Isolate'
src\Wrapper.cpp(929): fatal error C1003: error count exceeds 100; stopping compilation
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.29.30133\\bin\\HostX86\\x86\\cl.exe' failed with exit code 2

Everything is compiling, only thing left is to solve some linking issues with Boost. By the way, building boost-python for the specific version needed was one of THE worst experiences of my life.
I've created a fork and will start work on a workflow.

@devm18426 this is really great news! Thanks for taking care of it. Really appreciate!

@devm18426 just found this Github Action which looks very interesting https://github.com/MarkusJx/install-boost. Taking a look at the Boost.Python section could help...

@buffer Yes indeed, that Action is very relevant. Unfortunately, as of the moment he doesn't have any Windows builds for Boost versions pre 1.80. I've noticed this project requires 1.74...
After much (MUCH) tinkering and hair pulling I've managed to build the exact version required myself. It was so bad that I'd recommend you drop Boost as a dependency altogether...
Either way, I've been in contact with Markus (the maintainer of that Action) and he's agreed to try and build 1.74, just for us. Great guy. See here.
If he manages to get builds up it'll shorten my workflow by a bit.
I'm currently trying to optimize the v8 download and compilation, which currently takes just over an hour... For reference, building Boost.Python takes about 5 minutes.
Thanks for looking out. I'll keep updating.

@devm18426 that's amazing, thanks!
Just a note. I am using the latest available Boost packaged versions on all the platforms I build a wheel on i.e. on macOS I am using Boost 1.82. So STPyV8 does not really require Boost 1.74 but can use a more recent version...

That's interesting... When building locally I got this linker error:
LINK : fatal error LNK1104: cannot open file 'libboost_python310-vc142-mt-s-x32-1_74.lib'

It was really tough figuring out where that specific dependency was coming from, so I just committed to getting that lib file on the lib path.
I've already got most of the basic structure of the workflow laid out (with 1.74 specifically). Once I get it stable and compiling I'll see about linking with newer versions.
Bonus: 1.74 actually won't compile on Python 3.10 due to a backwards compatibility issue. My solution was to patch the file manually before building:
(Get-Content libs\python\src\exec.cpp).replace('_Py_fopen', 'fopen') | Set-Content libs\python\src\exec.cpp

If it ain't broke, fix it 'til it works... And that patch works...

Hi all,
Quick update: Everything is building and installing successfully locally:

I can't explain what's going on in the output of that image, maybe bitness related? It's probably just a matter of changing some flags in the compilation flow.
I'm going to keep iterating on the Github Workflow and compilation/installation procedures. My aim is to present a PR which is efficient and elegant which won't be too intrusive on the rest of the codebase (my PEP-8 OCD will be taking a hit...).

That’s great news! Thanks!
I suspect that output is bitness related too, yes. At the same time, FYI last year I ported some Unicode related legacy code to the new Python 3 Unicode API [1]. This code was tested just on Linux and macOS so it’s entirely possible that it needs some care to work effectively on Windows too.
[1] https://github.com/cloudflare/stpyv8/commit/e7ffa02333fcc710c6140cf6de86191714278bd9

Great news: Everything is building successfully on Github: https://github.com/devm18426/stpyv8/actions/runs/5916944637/job/16045440806
The tests are running but as expected, some are failing. Probably related to the text issues mentioned above. I'm not so sure it's bitness related anymore. I'll try to make some progress on that but I suspect I'll hit a wall at some point due to my unfamiliarity with your code... If you have a moment, now that the test results are available, I'd be happy if you could have a look and point me in the right direction.
I've also looked into the where Boost 1.74 is specifically being required. From what I can gather, Boost uses a very convoluted and internal system for determining dependencies called "Auto Link". I don't know how to intervene with that process so I'm not sure what to do. That said, I believe the build will be fine since Boost knows what it itself needs. I can't speak to how future-proof this is though as it seems at any time Boost may demand different dependencies.

Setting the Py_UNICODE_WIDE preprocessor macro seems to have resolved the issue:

Regarding tests, all are succeeding bar TestWrapper.testDate, which I'll look into:

tests\test_Wrapper.py:668 (TestWrapper.testDate)
self = <test_Wrapper.TestWrapper testMethod=testDate>

    def testDate(self):
        with STPyV8.JSContext() as ctxt:
            now1 = ctxt.eval("new Date();")

            self.assertTrue(now1)

            now2 = datetime.datetime.now()

            delta = now2 - now1 if now2 > now1 else now1 - now2

            self.assertTrue(delta < datetime.timedelta(seconds = 1))

            func = ctxt.eval("(function (d) { return d.toString(); })")

            now = datetime.datetime.now()

>           self.assertTrue(str(func(now)).startswith(now.strftime("%a %b %d %Y %H:%M:%S")))
E           AssertionError: False is not true

That was an easy fix:
self.assertTrue(str(func(now)).startswith(now.strftime("%a %b %d %Y %H:%M:%S")))

Should be:
self.assertTrue(str(func(now).startswith(now.strftime("%a %b %d %Y %H:%M:%S"))))

Setting the Py_UNICODE_WIDE preprocessor macro seems to have resolved the issue:

This makes me think the code at https://github.com/cloudflare/stpyv8/blob/master/src/Utils.cpp#L76 is buggy. Setting Py_UNICODE_WIDE is probably not safe IMHO as it is set based on the platform. Can you try removing the following code and see if it still works?
#ifndef Py_UNICODE_WIDE
        return scope.Escape(
                   v8::String::NewFromTwoByte(
                       v8::Isolate::GetCurrent(),
                       reinterpret_cast<const uint16_t *>(PyUnicode_2BYTE_DATA(str.ptr())))
                   .ToLocalChecked());

#else

I suspect/hope the new Python Unicode API is smart enough to handle every bitness correctly and this trick (which was supposed to be required just on Windows) is not required anymore. Thanks!

Setting the Py_UNICODE_WIDE preprocessor macro seems to have resolved the issue:

This makes me think the code at https://github.com/cloudflare/stpyv8/blob/master/src/Utils.cpp#L76 is buggy. Setting Py_UNICODE_WIDE is probably not safe IMHO as it is set based on the platform. Can you try removing the following code and see if it still works?
#ifndef Py_UNICODE_WIDE
        return scope.Escape(
                   v8::String::NewFromTwoByte(
                       v8::Isolate::GetCurrent(),
                       reinterpret_cast<const uint16_t *>(PyUnicode_2BYTE_DATA(str.ptr())))
                   .ToLocalChecked());

#else

I suspect/hope the new Python Unicode API is smart enough to handle every bitness correctly and this trick (which was supposed to be required just on Windows) is not required anymore. Thanks!

Such let me try.
Other than that, I'm happy to report that I was able to get 3.8, 3.9, 3.10 and 3.11 all built with my workflow. Currently finishing up the artifact packaging so it conforms with the other Linux/Mac workflows. When that's done (and the possible Unicode issue) I suppose we can start talking about a PR.

That’s incredibly cool! Really thanks for your amazing effort!

 Happy to help.
Removing the ifndef and unsetting Py_UNICODE_WIDE also works. Should I push this change?

Great! Yes, please. That code is buggy so let's get rid of it. Thanks!

You got it. Here is the first workflow that fully succeeded and generated the artifacts properly. As far as I can tell that's enough for a PR, which I'll open later. Please let me know if I should prepare anything else beforehand.

Let's go for it so that we can start testing it in the main branch. Reasonably we will need another release workflow which is automatically triggered when a new release is created. Usually this is extremely similar to the build workflow and just takes care of storing the artifacts in the release (see [1] for an example). But we can take care of that later. Thanks again!
[1] https://github.com/cloudflare/stpyv8/blob/master/.github/workflows/release-osx.yml

@devm18426 PR #79 successfully merged. I have created a PR [1] to automatically release the wheel every time a new STPyV8 release is created. The workflow file is slightly different from the build one you created. Can you please take a look at it and let me know if it's ok for you too? Thanks!
[1] https://github.com/cloudflare/stpyv8/pull/82

Thanks a lot! Very exciting.
In general, I would say it's a bit redundant to rerun the entire workflow again just for the release.
Other than that, I'd say the release workflow looks fine (I left one minor comment on it).
For the long term, if you are open to hear, I can recommend changes to your CI infrastructure which would save time and code duplication. I'd even be willing to implement these changes myself. If not, that's ok too :) if it works, it works.

One more thing, I forgot to add Windows build instructions to the README. Are these necessary in your opinion?

Thanks a lot! Very exciting.
In general, I would say it's a bit redundant to rerun the entire workflow again just for the release. Other than that, I'd say the release workflow looks fine (I left one minor comment on it).

I totally agree and I was already thinking about merging the build and release workflows so that the wheel zips are uploaded or released based on the event that triggers the workflow.

For the long term, if you are open to hear, I can recommend changes to your CI infrastructure which would save time and code duplication. I'd even be willing to implement these changes myself. If not, that's ok too :) if it works, it works.

I am very open to that. I think your caching approach is really brilliant and we should extend it to the entire CI infrastructure. Moreover I would really like to be totally independent from the boost and boost-python versions installed on the end user machine. Your workflow proved me that building boost is doable and just works fine so maybe we could try extending this approach to the other supported platforms as well?

One more thing, I forgot to add Windows build instructions to the README. Are these necessary in your opinion?

I think they would be great to have! Thanks!

I can try arrange some time to test this. May I know how can I test this on windows at the moment? I was looking at various solutions and compatible Windows + Linux builds are important to me.
I have explored other projects before, most do not have a proper windows version and one that have: https://github.com/tbodt/v8py is no longer maintained and have problems with not able to create new Isolate (which is a problem because when you have multiple threads running on same Isolate, the python -> js-> python GIL lock may cause potential issues).
Hope this version can resolve the problem.

I can try arrange some time to test this. May I know how can I test this on windows at the moment? I was looking at various solutions and compatible Windows + Linux builds are important to me.
I have explored other projects before, most do not have a proper windows version and one that have: https://github.com/tbodt/v8py is no longer maintained and have problems with not able to create new Isolate (which is a problem because when you have multiple threads running on same Isolate, the python -> js-> python GIL lock may cause potential issues).
Hope this version can resolve the problem.

@kokhoor For the time being you can use the Windows build I've generated on my fork: https://github.com/devm18426/stpyv8/suites/15486243326/artifacts/884545352
That link will download a zip file with wheels for the different Python versions. pip install on the relevant wheel file should do that trick.
Good luck.

@devm18426 that's amazing, thanks!
Just a note. I am using the latest available Boost packaged versions on all the platforms I build a wheel on i.e. on macOS I am using Boost 1.82. So STPyV8 does not really require Boost 1.74 but can use a more recent version...

@buffer I've discovered that there indeed doesn't appear to be a specific Boost version requirement. What must have happened is I probably had 1.74 installed but without the correct precompiled lib (static-link version). In any event, it looks like the workflow runs fine for all versions of Python with the latest Boost version. I'll open a new PR for that.

@devm18426 Thanks. I just did a preliminary test on the isolate and it seems to work. Will do more tests.
My initial plan is to create isolates per threadlocal, but since now asyncio is getting more common, contextvars to store isolate per task.
Will update if any issue. Really thanks for your great work and for great co-operation and support by @buffer.
Well done and Thanks, everyone!

@buffer I've discovered that there indeed doesn't appear to be a specific Boost version requirement. What must have happened is I probably had 1.74 installed but without the correct precompiled lib (static-link version). In any event, it looks like the workflow runs fine for all versions of Python with the latest Boost version. I'll open a new PR for that.

That's great! Thanks!

@devm18426 Yet another detail. We need to include the icudtl.dat file in the wheel zip and decide where to store it so that I can update settings.py and set the path accordingly (see https://github.com/cloudflare/stpyv8/blob/master/settings.py#L22).
FYI I am planning changing some details so to make it installable by a user too and the following code shows how I am approaching it (still no support for Windows)
if os.name in ("posix", ):
    if sys.platform in ("darwin", ):
      icu_data_folder_root = ICU_DATA_FOLDER_OSX
      if not os.access(icu_data_folder_root, os.W_OK):
        icu_data_folder_root = os.path.expanduser('~/Library/Application Support/')
    else:
      icu_data_folder_root = ICU_DATA_FOLDER_UNIX
      if not os.access(icu_data_folder_root, os.W_OK):
        icu_data_folder_root = os.path.expanduser("~/.local/share")

    icu_data_folder = os.path.join(icu_data_folder_root, "STPyV8")

Moreover it would be great to store the icudtl.dat file in the wheel itself. That could be another step to allow installing STPyV8 with pip.

How is this file generated? I thought it was Linux/MacOS related so I removed it completely from my workflow.


[fix][test] fix unstable random test for manifest full compaction

Purpose

Linked issue: close #xxx

fix unstable random test ManifestMetaTest#testRandomFullCompaction
Tests

API and Format

Documentation

+1


Create daily CI workflow

Description
This PR deletes the current "ci.yml" continuous integration workflow and instead creates two workflows, "pull_request_ci.yml" (which runs as a gate for all pull requests) and "daily_ci.yml" (which runs at 9am EST every morning). This will hopefully help us identify breaking library updates or broken code that sneaked into master sooner.
References
Followed https://docs.github.com/en/actions/using-workflows/reusing-workflows to guide this implementation.
Blocked by
N/A

@viswavi is this dead? If so, we can close it.

Oops, no I was waiting on #380 to get merged but forgot to get this final piece reviewed! This PR is ready to review and I'll push it once it is reviewed.
Thanks for the reminder @neubig


Change for AuthorizeOrderV2 + Manage product grouped (#102)

With AuthorizeOrderV2 we have a front regression about product informations concatenation.
There stop to appear like AuthorizeOrder:


Add the ability to change a sprites size

The size functionality should allow the developer to re-size the sprite's width, height, and size as a percent.

Added in 9159822c0712ed3362d02c327bfcfaa960aa6409 203c96a81cdfbfe9125c8abf7f3aa50e63a9e016


[Feat] Add a  CI Build Pipeline

Description
Set up a build pipeline that ensures the application can successfully build whenever a pull request (PR) is raised. This will prevent merging changes that break the build and maintain the stability of the main branch.
Screenshots
No response
Checklist

[X] I have checked the existing issues
[X] I have read the Contributing Guidelines
[X] I'm a GSSoC'24-Extd contributor
[X] I am willing to work on this issue (optional)

@ShobhitPatra you are assigned

Hey @mdazfar2 ,this PR https://github.com/mdazfar2/Ezyshop/pull/1127 soives this issue,Hence Closing It


How to make sagas hot reloadable ?

React-universal-saga is great, but sagas seem can't be hot reloaded ?

could you try this approach? https://github.com/yelouafi/redux-saga/pull/422
let me know if it works. otherwise, think have to check redux-saga docs or issues to answer your question, because it is specific to redux-saga.

@vimniky I tested hot reloading any sagas without the possible fix I mentioned earlier, the page does reload when I made any change to sagas/index.js.
For instance, when I purposely made eslint error, the page reloaded and shows the eslint errors overlay. When I fixed the error, the page reloaded and the error overlay is gone. This happen without me touching the terminal. Terminal reported something like this when I made any changes to saga files:
webpack built 0326d6ceb9d6d7de1f78 in 3059ms
webpack building...
~ Webpack build status: OK ~
webpack built 0326d6ceb9d6d7de1f78 in 1986ms

would you elaborate further what do you mean by "can't be hot reloaded"?

@xkawi Thanks ! and sorry for my late.

I tested hot reloading any sagas without the possible fix I mentioned earlier, the page does reload when I made any change to sagas/index.js.

Yet hot reloading works great in react-universal-saga.  But I have tried another way to hot reloading saga and here's the basic idea:
// configStore.js
import { createStore, applyMiddleware, compose } from 'redux'
import { fromJS } from 'immutable'
import createSagaMiddleware, { END } from 'redux-saga'
import reducers from './reducers'
import SagaManager from './rootSaga'

const sagaMiddleware = createSagaMiddleware()
const devtools = (process.env.NODE_ENV === 'development' && typeof window !== 'undefined' && window.devToolsExtension) || (() => noop => noop)

// hot relaod sagas
// https://gist.github.com/hoschi/6538249ad079116840825e20c48f1690

export default function configureStore(initialState = {}) {
  // Create the store with two middlewares
  // 1. sagaMiddleware: Makes redux-sagas work
  // 2. routerMiddleware: Syncs the location/URL path to the state
  const middlewares = [
    sagaMiddleware,
  ]

  const enhancers = [
    applyMiddleware(...middlewares),
    devtools(),
  ]

  const store = createStore(
    reducers,
    fromJS(initialState),
    compose(...enhancers)
  )

  // Create hook for async sagas
  store.runSaga = sagaMiddleware.run
  store.startAbortableSaga = () => SagaManager.startSaga(sagaMiddleware)
  store.close = () => store.dispatch(END)

  if (module.hot) {
    module.hot.accept('./reducers', () => {
      const nextReducers = require('./reducers').default // eslint-disable-line global-require
      store.replaceReducer(nextReducers)
    })

    module.hot.accept('./rootSaga', () => {
      SagaManager.cancelSaga(store)
      require('./rootSaga').default.startSaga(sagaMiddleware) // eslint-disable-line global-require
    })
  }
  return store
}

// rootSaga.js
import { fork, cancel, take } from 'redux-saga/effects'
import aSaga from './path/to/aSaga'
import bSaga from './path/to/bSaga'

export function* rootSaga() {
  yield [
    fork(a),
    fork(b),
   // ....
  ]
}
export const CANCEL_SAGAS_HMR = 'CANCEL_SAGAS_HMR'

function createAbortableSaga(saga) {
  if (process.env.NODE_ENV === 'development') {
    return function* main() {
      const sagaTask = yield fork(saga)
      yield take(CANCEL_SAGAS_HMR)
      yield cancel(sagaTask)
    }
  }
  return saga
}

const SagaManager = {
  startSaga(sagaMiddleware) {
    return sagaMiddleware.run(createAbortableSaga(rootSaga))
  },
  cancelSaga(store) {
    store.dispatch({
      type: CANCEL_SAGAS_HMR,
    })
  },
}

export default SagaManager

// and here's the server-side code
// I'm using react-router v4
import React from 'react'
import { renderToString } from 'react-dom/server'
import { Provider } from 'react-redux'
import { ServerRouter, createServerRenderContext } from 'react-router'
import render from './render'
import configureStore from '../shared/configStore'
import { rootSaga } from '../shared/rootSaga'
import App from '../shared/modules/App/index'

/**
 * An express middleware that is capabable of doing React server side rendering.
 */
export default function universalMiddleware(req, res) {

  // First create a context for <ServerRouter>, which will allow us to
  // query for the results of the render.
  const context = createServerRenderContext()
  const store = configureStore({})
  // Create the application react element.
  const rootComponent = (
    <Provider store={store}>
      <ServerRouter
        location={req.url}
        context={context}
      >
        <App />
      </ServerRouter>
    </Provider>
  )

  const result = context.getResult()

  // Check if the render result contains a redirect, if so we need to set
  // the specific status and redirect header and end the res.
  if (result.redirect) {
    res.status(301).setHeader('Location', result.redirect.pathname)
    res.end()
    return
  }
  try {
    store.runSaga(rootSaga).done.then(() => {
      const html = render(
        rootComponent,
        store.getState().toJS()
      )
      res.send(html)
    })

    // Trigger sagas for component to run
    // https://github.com/yelouafi/redux-saga/issues/255#issuecomment-210275959
    renderToString(rootComponent)
    // Dispatch a close event so sagas stop listening after they're resolved
    store.close()
  } catch (ex) {
    res.status(500).send(`Error during rendering: ${ex}!`)
  }
}

// Client entry:

import React from 'react'
import { render } from 'react-dom'
import { AppContainer } from 'react-hot-loader'
import { BrowserRouter } from 'react-router'
import { Provider } from 'react-redux'
import configureStore from '../shared/configStore'
import App from '../shared/modules/App/index'
import { IS_HOT_DEVELOPMENT } from '../common/config'

const container = document.querySelector('#app')
const initialState = window.APP_STATE || {} // eslint-disable-line
const store = configureStore(initialState)
// start rootSagas on client
store.startAbortableSaga()

function renderApp(RootComponent) {
  render(
    <AppContainer>
      <BrowserRouter>
        <Provider store={store}>
          <RootComponent />
        </Provider>
      </BrowserRouter>
    </AppContainer>,
    container
  )
}

// The following is needed so that we can support hot reloading our application.
if (process.env.NODE_ENV === 'development' && module.hot && IS_HOT_DEVELOPMENT) {
  // Accept changes to this file for hot reloading.
  module.hot.accept('./index.js')
  // Any changes to our App will cause a hotload re-render.
  modul.hot.accept(
    '../shared/modules/App/index',
    () => renderApp(require('../shared/modules/App/index').default) // eslint-disable-line
  )
}
renderApp(App)


integration of advertising-id-client

This includes integration of advertising-id-client library

I made a fix removing the unecessary background thread (was required only for the advertising id and it holds it's own thread).
Can you review @anshumansworld ?

:+1:


IncludeXmlComments provides parameter-description twice (with FromQuery complex parameters)

After upgrading from Swashbuckle.AspNetCore 5.0.0 to 5.3.1 (I think it happens with 5.2.x as well) many of my parameters have two (identical) descriptions. One for parameter itself, once for schema
Replacing
options.IncludeXmlComments(xmlPath);

with
xmlDoc = new XPathDocument(xmlPath);
options.ParameterFilter<XmlCommentsParameterFilter>(xmlDoc);
options.RequestBodyFilter<XmlCommentsRequestBodyFilter>(xmlDoc);
options.OperationFilter<XmlCommentsOperationFilter>(xmlDoc);

helps as a workaround. But I don't like it
Details "description": "test name" is repeated
"parameters": [
          {
            "name": "$name",
            "in": "query",
            "description": "test name",
            "schema": {
              "type": "string",
              "description": "test name",
              "nullable": true
            }
          },
          {
            "name": "$dummy",
            "in": "query",
            "description": "Test dummy",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "Test dummy",
              "nullable": true
            }
          }
        ],

Entrypoint:
[HttpGet("cache/update")]
public async Task<ActionResult<string>> TestStuffAsync([FromQuery] StuffDto queryParam)

StuffDto:
public class StuffDto
    {
        /// <summary>
        /// test name
        /// </summary>
        [FromQuery(Name = "$name")]
        public string Name { get; set; }

        /// <summary>
        /// Test dummy
        /// </summary>
        [FromQuery(Name = "$dummy")]
        public IEnumerable<string> Stuff { get; set; }
    }

StuffDto isn't reference anywhere also in the code

Can confirm, the workaround posted has some other drawbacks that makes it less suitable for my scenario, but this hack seems to have done the trick:
public class SwaggerDescriptionFilter : IParameterFilter
{
    public void Apply(OpenApiParameter parameter, ParameterFilterContext context)
    {
        if (parameter.Description == parameter.Schema.Description)
            parameter.Schema.Description = null;
    }
}

Looks like this was fixed by c1fb18c2c2f864285a7b811a147d8a9ed8c17993, and will be available with the upcoming 6.0.0 release. In the meantime you can pull down the latest preview build from myget.org to try it out.

Looks like this was fixed by c1fb18c2c2f864285a7b811a147d8a9ed8c17993, and will be available with the upcoming 6.0.0 release. In the meantime you can pull down the latest preview build from myget.org to try it out.


Update Foxy source branch to 2.1.x

Parallel change to https://github.com/ros2/ros2/pull/1113.
The discussion is in the linked PR and this change should be merged if and only if that one is as well.

I want to sort out https://github.com/ros2/ros2/pull/1113 before ros2/ros2#1114 and this PR.

I want to sort out ros2/ros2#1113 before ros2/ros2#1114 and this PR.

Whoops I meant to say this should track the 2.1.x update: ros2/ros2#1113. Editing.

@jacobperron now that https://github.com/ros2/ros2/pull/1113 has merged should we update the branch here as well?


Resource Names doc: prefer f-strings (Pulumi is >= Python 3.6)

@jf  Thank you for your contribution!


Load Raspberry Pi OS

Load the Raspberry Pi OS onto the board and get it configured

Imaged both Raspberry Pi's with the Raspberry Pi Desktop (32-bit) OS on the boards and configured them.


Find operations Ctrl-n and Ctrl-p do something else than documented

Description of the problem or steps to reproduce
According to help defaultkeys:
| Ctrl-n    | Find next instance of current search      |
| Ctrl-p    | Find previous instance of current search  |

But micro behaves different. Both shortcuts actually invoke searching the formar/latter search regexp instead of actually finding the next/previous instance of the current term, which is much less useful, because I can achieve this by just pressing up/down arrows like in history...
Please, how do I get the intended functionality?
Specifications
$ micro --version
Version: 2.0.9
$ lsb_release -d
Description:	Pop!_OS 22.04 LTS
additional debug
myuser@SPIN5 ~/.config/micro 15:34:48
❱ grep -H "" *.json && ls -l plug/
bindings.json:{
bindings.json:    "Alt-/": "lua:comment.comment",
bindings.json:    "CtrlUnderscore": "lua:comment.comment",
bindings.json:    "F5": "lua:wc.wordCount"
bindings.json:}
settings.json:{
settings.json:    "autoclose": false,
settings.json:    "softwrap": true,
settings.json:    "statusformatl": "$(filename) $(modified)($(line)/$(status.lines),$(col)) $(status.paste) | ft:$(opt:filetype) | $(opt:fileformat) | $(opt:encoding) | $(status.size)",
settings.json:    "statusformatr": "$(status.branch) $(status.hash) $(bind:ToggleHelp): help"
settings.json:}
total 4
drwxr-xr-x 3 myuser myuser 4096 čec 29 13:37 wc

showkey Ctrl-n prints-out FindNext

I also have this issue.

Make sure that you press enter to execute the search. Then afterwards pressing ctrl-n and ctrl-p should move to the next/previous occurrences. Pressing ctrl-n/p while in the prompt will cycle the search history.

@zyedidia hmm, yes, this is the problem. I believe this should be fixed in help defaultkeys to be unequivocal - meaning, edit the help text accordingly. Shall I propose a particular fix and commit or you do it yourselves?

Also encountered this problem.
I spent more than an hour looking for a solution...
Indeed - it would be good to indicate this in the documentation.
I don't think 'ENTER' is needed at all in this case.


multi-server per client support

Shockingly simple. I guess the postprocessing stuff just works since we are aggregating everything anyway, right?

Post-processing should work, but in this case (trafficgen) we have no server post-processing anyway.  I was more surprised that the roadblocks just work.


Dev: fix eslint rules

We have a https://github.com/webaverse/app/blob/master/.eslintrc.json, but some of the rules are in disagreement with the main code style.
This multi-line if enforcement should be disabled:
if (
   this.dialogClient._protoo._transport._ws.readyState === WebSocket.OPEN
) {

And the ternary mode needs to be changed to mirror if statements when it is too long:
cond ?
'yes'
:
'no'

Once this is done we can do a cleanup pass over the codebase in a separate PR.


fix(csp): update base-uri value

:tada: This PR is included in version 2.31.1 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


When I execute a shortcut command, two sortimports appear. How to set them to the default one

When I execute a shortcut command "shift+alt+o", two sortimports appear.

How to proceed directly without having to choose??
extra info:
python=3.11.2
django=4.2
sort interpreter python=3.8
vscode=1.77.3
isort=v2023.9.11141005

@ugvibib This can happen if you have more than one import organizer installed. Do you by chance have ruff extension installed?

The following are the plugins I installed. Is it because the Python plugin has not been upgraded?? I didn't try~

@karthiknadig  This can happen if you have more than one import organizer installed. Do you by chance have ruff extension installed?
I haven't installed too many plugins, is it because Python plugins haven't been upgraded? I didn't try to upgrade~

@karthiknadig  This can happen if you have more than one import organizer installed. Do you by chance have ruff extension installed?

I haven't installed too many plugins, is it because Python plugins haven't been upgraded? I didn't try to upgrade~

Can you share a screen shot from keyboard bindings? for these two cases?

@karthiknadig It's similar to yours


Calling python3 runbook from another runbook in azure automation

Dear Team,
We have a function (named download_file()) which is in a python3 runbook named get_secret.py. We need to use it in an another python3 runbook called register.py.
All these runbooks are created under one of the automation accounts in Azure.
We would like to know how to call/invoke/import the function/script (get_secret.py) from register.py
The below links provide useful information for powershell but couldn't find any details for python.
https://docs.microsoft.com/en-us/azure/automation/automation-child-runbooks
Could you please help me on this.
Regards,
Guru Mohan G

@gm27rjpm We are still waiting to hear back from you.

@gm27rjpm We are still waiting to hear back from you.

Dear @SaurabhSharma-MSFT,
As suggested, I've raised a new issue as suggested in the above forum.
https://docs.microsoft.com/en-us/answers/questions/602560/calling-python3-runbook-from-another-runbook-in-az.html
Regards,
Guru Mohan G

@gm27rjpm Thank you.  We are closing this issue for now.


Compiler bug when requiring module

Hi. I hit a compiler bug that the error message said to report.
Crystal 0.32.1 (2019-12-18)

LLVM: 9.0.0
Default target: x86_64-apple-macosx

Here's the exception:
crystal run btest.cr
while requiring "bencoding.cr" (Exception)
  from Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::TopLevelVisitor>:Nil
  from Crystal::TopLevelVisitor#visit<Crystal::Expressions>:Bool
  from Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::TopLevelVisitor>:Nil
  from Crystal::Program#top_level_semantic<Crystal::ASTNode+>:Tuple(Crystal::ASTNode+, Crystal::TypeDeclarationProcessor)
  from Crystal::Program#semantic<Crystal::ASTNode+, Bool>:Crystal::ASTNode+
  from Crystal::Compiler#compile<Array(Crystal::Compiler::Source), String>:Crystal::Compiler::Result
  from Crystal::Command#run_command<Bool>:Nil
  from Crystal::Command#run:(Bool | Crystal::Compiler::Result | Nil)
  from main
Caused by: Error reading file: Is a directory (Errno)
  from File@Crystal::System::FileDescriptor#unbuffered_read<Slice(UInt8)>:Int32
  from File@IO::Buffered#read<Slice(UInt8)>:Int32
  from File::read<String, Nil, Nil>:String
  from Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::TopLevelVisitor>:Nil
  from Crystal::TopLevelVisitor#visit<Crystal::Expressions>:Bool
  from Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::TopLevelVisitor>:Nil
  from Crystal::Program#top_level_semantic<Crystal::ASTNode+>:Tuple(Crystal::ASTNode+, Crystal::TypeDeclarationProcessor)
  from Crystal::Program#semantic<Crystal::ASTNode+, Bool>:Crystal::ASTNode+
  from Crystal::Compiler#compile<Array(Crystal::Compiler::Source), String>:Crystal::Compiler::Result
  from Crystal::Command#run_command<Bool>:Nil
  from Crystal::Command#run:(Bool | Crystal::Compiler::Result | Nil)
  from main

Source (literally the whole file):
require "bencoding.cr"

shard.yml:
name: test
version: 0.1.0

dependencies:
  bencoding.cr:
    github:  Hamdiakoguz/bencoding.cr

Thanks!

Ooops. Amazing that nobody has not this before...

That library should be called bencoding even if the github repository is called bencoding.cr

@RX14 Technically that's probably better, but nothing says library names can't end with .cr. The extension is required for files but it's not forbidden for directories.
The compiler should just checker whether the required name is actually a library file or dir and treat it accordingly.

yeah, this should be fixed but worth mentinoing best practices

Right. It wasn't clear to me if your comment was just directed at the OP to give some advice or to generally rule out requiring directories ending with .cr.

That was my suspicion. I've been using the language for all of about one hour and it just so happened I wanted use that library for my first project. The extension did seem odd as I’d not seen it before in the tutorials.
Thanks for looking into it!

I just raw into this bug while trying to use https://github.com/firejox/fftw.cr :grimacing: Currently I'm unable to do so.
Creating a brand new crystal project where the shards.yml includes it like:
development_dependencies:
  fftw.cr:
    github: firejox/fftw.cr

And a require "fftw.cr" is made in the entry point file yields a compiler error when trying to build said entry point file:
Error reading file: Is a directory (IO::Error)
  from /crystal/src/gc/boehm.cr:132:5 in 'unbuffered_read'
  from /crystal/src/io.cr:1160:18 in 'read'
  from /crystal/src/compiler/crystal/semantic/semantic_visitor.cr:74:40 in 'visit'
  from /crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
  from /crystal/src/enumerable.cr:463:7 in 'visit'
  from /crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
  from /crystal/src/compiler/crystal/semantic.cr:70:7 in 'semantic:cleanup'
  from /crystal/src/compiler/crystal/compiler.cr:171:14 in 'compile:combine_rpath'
  from /crystal/src/compiler/crystal/command.cr:341:5 in 'run'
  from /crystal/src/compiler/crystal.cr:11:1 in '__crystal_main'
  from /crystal/src/crystal/main.cr:129:5 in 'main'
  from src/env/__libc_start_main.c:95:2 in 'libc_start_main_stage2'
Error: you've found a bug in the Crystal compiler. Please open an issue, including source code that will allow us to reproduce the bug: https://github.com/crystal-lang/crystal/issues

This lib has existed for awhile, but has no "Issues", so I'm not sure if it's actually been used before :P


Add Cluster

This pr has been squashed into https://github.com/appscode-cloud/go-sdk/commit/3b464b3124bd7060ab1d301a99e4b6c7d81ef9df


digest doesn't match unless C14N EXCLUSIVE is used for canonicalization

I'm trying to validate a  SAMLRequest, but   I get the error "digest mismatch".
In troubleshooting I notice that if I hack ruby-saml to use Nokogiri::XML::XML_C14N_EXCLUSIVE_1_0 just for the digest canon method then the SMLRequest DOES validate:
      # check digests
      ref = REXML::XPath.first(sig_element, "//ds:Reference", {"ds"=>DSIG})

      hashed_element = document.at_xpath("//*[@ID=$id]", nil, { 'id' => extract_signed_element_id })

     # HACK:  force EXCLUSIVE to troubleshoot
      canon_algorithm = Nokogiri::XML::XML_C14N_EXCLUSIVE_1_0
      canon_hashed_element = hashed_element.canonicalize(canon_algorithm, inclusive_namespaces)

In the response the canonicalization method is specified as http://www.w3.org/TR/2001/REC-xml-c14n-20010315, which is used for the signature and and works:
  <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
    <SignedInfo>
      <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />

I suspect there is a bug in ruby-saml b/c the same SAMLResponse validates using the online saml validation tool: https://www.samltool.com/validate_response.php
What could cause it to validate using the online tool, but fail with digest_match in ruby-saml ?

The online tool uses xmlseclibs that calls the canonicalizeSignedInfo
that uses the canonicalizeData methods that has as default method the http://www.w3.org/2001/10/xml-exc-c14n#WithComments
I guess your SAMLResponse uses  that CanonicalizationMethod, that why when you harcoded
canon_algorithm = Nokogiri::XML::XML_C14N_EXCLUSIVE_1_0 (that is http://www.w3.org/2001/10/xml-exc-c14n#WithComments), worked
But in ruby-saml,it retrieves Nokogiri::XML::XML_C14N_1_0 because
http://www.w3.org/TR/2001/REC-xml-c14n-20010315 was provided
I think something is wrong on the XML and in some situations the right value can't be retrieved, so the default is taken

I guess your SAMLResponse uses that CanonicalizationMethod, that why when you harcoded
canon_algorithm = Nokogiri::XML::XML_C14N_EXCLUSIVE_1_0 (that is http://www.w3.org/2001/10/xml-exc-c14n#WithComments), worked

@pitbulk - Interestingly, and this may not have been clear in my post, using ruby-saml the signature needs to use Nokogiri::XML::XML_C14N_1_0 as the canon method, and the digest needs to use Nokogiri::XML::XML_C14N_EXCLUSIVE_1_0 for this response to validate
I wonder how the online saml validation tool swtiches between algos to validate the response, but ruby-saml doesn't for this particular response?
algo needed for signature:
      signature = Base64.decode64(OneLogin::RubySaml::Utils.element_text(base64_signature))
      # HACK: setting directly to illustrate the canon alg values that work to validate this response
      canon_algorithm = Nokogiri::XML::XML_C14N_1_0

      noko_sig_element = document.at_xpath('//ds:Signature', 'ds' => DSIG)
      noko_signed_info_element = noko_sig_element.at_xpath('./ds:SignedInfo', 'ds' => DSIG)

      canon_string = noko_signed_info_element.canonicalize(canon_algorithm)

then for the digest:
      # check digests
      ref = REXML::XPath.first(sig_element, "//ds:Reference", {"ds"=>DSIG})

      hashed_element = document.at_xpath("//*[@ID=$id]", nil, { 'id' => extract_signed_element_id })

     # HACK:  force EXCLUSIVE to validate the digest
      canon_algorithm = Nokogiri::XML::XML_C14N_EXCLUSIVE_1_0
      canon_hashed_element = hashed_element.canonicalize(canon_algorithm, inclusive_namespaces)

@pitbulk @douglasrw The issue seems to come from the Transforms element. The online tool process transform elements before validating the digest value while ruby-saml doesn't. Hence, if the Transform element change the canon algorithm the digest check will fail.
Example:
<ds:SignedInfo>
  <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2006/12/xml-c14n11"/>
  <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
  <ds:Reference URI="#IDd800a5e234004cbab63271826353b5f1">
    <ds:Transforms>
      <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
      <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
        <ec:InclusiveNamespaces xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#" PrefixList="xs"/>
      </ds:Transform>
    </ds:Transforms>
    <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
    <ds:DigestValue>tKOm62Q4V/ONEFjnyMjP2hqHA70=</ds:DigestValue>
  </ds:Reference>
</ds:SignedInfo>

@dphong1995 I think that ruby-saml makes the same than php-saml
I reviewed how PrefixList is calculated and how ruby-saml canonizes the Signature and the hashed element.
What transformation process is missed?

@pitbulk
I means this process is missed. As you can see, the $data variable is calculated based on hashed elements and transform elements. Then, the $data variable will be used to validate the digest not the hashed elements. In other hand, ruby-saml will use the hashed elements without applying Transform elements to validate the digest which will result in the digest mismatch.

@dphong1995 / @pitbulk  - That does appear the issue here.
The relevant elements for the response that's failing are below.  To get the digest check to validate I had to hack it to use Nokogiri::XML::XML_C14N_EXCLUSIVE_1_0, which is the correct method to use with <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
    <SignedInfo>
      <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
      <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
      <Reference URI="#_c2d8f37a-0568-4c8a-933f-c77a9f4ea46c">
        <Transforms>
          <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
          <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
        </Transforms>

Can you verify that process_transforms solves the issue?

@pitbulk  - apologies for the late reply,  I ran a test locally and the process_transform branch does fix the issue.  Big thanks.  I will provide the full response to test against.

@pitbulk - when can we expect this fix to be merged in?  Thanks, D

I've run the tests locally and it fixes the same issue I've been seeing as well.  Unfortunately my only test response also has customer data in it 🤦♂so It'll be tougher to supply an example.

I encountered this issue recently, I see the PR has been merged - wondered if there's a new gem release planned anytime soon?


create TaskRunner

resolved: #109
details:
TaskRunner run specific task and if runner receive cancel signal then cancel running task

[x] Test case

LGTM


Fix Experience Calculation for Shadowlands 9.0.1 Quest Log API

Thes patch fixes MaxLevel detection and Quest Log scanning for the new C_QuestLog API for Shadowlands. It may not work if gold is required for a quest turnin, but I have no character to test this at the moment.

Seems fine. Haven't tested though so I'll trust you have done your job :)
Thanks.