Adding a --no-bin-links option

Hi !
Is there a way to add a NPM-like --no-bin-links option.
It is used by VM users who share folders between a host and a VM.
Example:
Vagrant

@sofianegargouri
As a side note, you're going to have a hellish time running Jest in your setup. The project analysis in jest last time i used it was stat() heavy. One of the areas the shared folder situation fails miserably in solutions like Vagrant (On Virtualbox at least) is IOPS.
It may have changed since my last time using jest but I know it was this slow IOPS problem that drove me to use a native linux machine for development instead of a VM from windows.

I'm not entirely sure what you're asking. Can you provide a more detailed feature request? What would this flag do, compared to how we're doing things now?

I guess that actually you are creating some links while running the commands, but it can break when there are shared folders between 2 different systems (as for Vagrant users). To prevent that, NPM added an option to prevent those Symlinks.
As written in their documentation:

The --no-bin-links argument will prevent npm from creating symlinks for any binaries the package might contain.

I don't know if it is understandable, but when I tried to create a project, I had many conflicts with symlinks that prevented me from using your amazing tool.

Oh, I see. So you'd like create-react-app myapp --no-bin-links to pass that option down to npm install call, is that correct?

This should be an easy first PR.

I don't know if it's only needed in npm install as I wasn't able to go further

If Yarn supports it then in both. Check if Yarn supports it by inspecting its source :wink:

I actually tried to add "--no-bin-links" to this line, however I ended up with this:

Installing react-scripts...

npm ERR! Linux 3.2.0-23-generic
npm ERR! argv "/usr/bin/nodejs" "/usr/bin/npm" "install" "--save-dev" "--save-exact" "--no-bin-links" "react-scripts"
npm ERR! node v6.9.5
npm ERR! npm  v3.10.10
npm ERR! Maximum call stack size exceeded

File a bug with npm?

@gaearon This is a common bug with npm with --no-bin-links, it typically involves dependency cycles see npm#9224.
When you have dependencies that have cycles in the graph the symlinks tend to solve the problem but when you tell npm it can't symlink it blows up recursing forever until the npm call stack is exhausted.
The desire for the --no-bin-links option typically comes with working on windows (where symlinking doesn't exist or requires elevation), or with vagrants vms (shared folders between a linux vm and a windows host) has issues with creating/maintaining symlinks.
My first guess would be that there's a dependency cycle happening somewhere in one of the many dependencies of react-scripts but realistically that could be upstream in anything or local to CRA.

Thanks for explaining.

Here they seem to suggest that it's a problem with npm 3 and/or Node >= 6. At the moment I can't verify it, i'll give it a look tonight

I'd like to take this up!

There is another option that worked pretty well for me, on Vagrant
config.vm.provider "virtualbox" do |v|
    v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"]
end

Execute CMD with admin rights.

I'm going to free this issue back up, @shubheksha let us know if you'd still like to work on it!

@Timer If you can brief me about what is the final expected result. I can take up this!

Any news on this ? It is quite crucial to use CRA on Vagrant boxes

Feel free to submit a PR @stilllife00; and sorry about never responding @anilreddykatta!
See expectation here: https://github.com/facebookincubator/create-react-app/issues/1394#issuecomment-279176314

@Timer @gaearon
I'd like to give this issue a try if still available.  This will be my first contribution; I'm trying to get into open source.

congrats im prou of a fellow franklin
On Wed, Feb 14, 2018 at 3:43 PM, Tyler D Franklin<EMAIL_ADDRESS>wrote:

@Timer https://github.com/timer @gaearon https://github.com/gaearon
I'd like to give this issue a try if still available. This will be my
first contribution; I'm trying to get into open source.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/facebook/create-react-app/issues/1394#issuecomment-365769710,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AT6QPqpYwLyouqxBxX8fK-Hkz4pDTHuhks5tU2GcgaJpZM4LkkHA
.

@tdfranklin Go for it!

@iansu
Thank you!  I "think" I've resolved the issue, however I wanted to do some testing to make sure everything was getting passed down correctly and running into some trouble I was hoping you could advise on.  I apologize in advance if I'm overlooking an obvious answer, but once I've saved the code, how can I install it to test the command line args?
On my other project, I would just run npm install -g from the project directory then go test the commands in another directory, but I get an error with this project because there is no package name in the package.json (I get a similar error trying to run yarn add /path/create-react-app).  I'm new to using Yarn, so I might be missing something obvious....
In the contributing.md file, I see you say to run yarn create-react-app my-app to test the end-to-end flow of the CLI, but I get an error with that because I have uncommitted changes.  Do I need to actually commit before I'm able to test or is there a better way to test the CLI commands?

That is probably the best way to test your changes. You can commit your changes and then, if you need to make additional changes, create more commits. It's fine to make multiple commits. We squash them all into a single commit when we merge them anyway.

Ok, great, will do!  Thank you for the help!

@iansu
Just wanted to let you know that I submitted a PR:
https://github.com/facebook/create-react-app/pull/4036
However, I see that the CI tests failed, but it looked to be some other issue.  If there's something else I need to fix or do, please let me know!  Thank you.

Another PR pending for this at https://github.com/facebook/create-react-app/pull/7243


feat: add application stack variable

Added the possibility to define an application stack to define a docker container to be used by the app.
Checklist

[x] I've updated both the azurerm_linux_web_app and azurerm_windows_web_app resources.

I've also run the tests, and everything is looking nice 🎉

Alternative solution: configure these values as app settings through #164


Shopfront: Set up page structures

Not a final implementation, but a general layout based off wireframes.

Header (shared)
Footer (shared)
Landing page
Product browser page
Shopping cart (page, not dropdown)

Some work still needs to be done, but we have decided to close this issue in favor of tracking them in more specific issues.
See: #14 #15 #16


Entity List Crash

This happens every time I try to open the Entity List.

Please delete your directory, clone the repo and rebuild the latest. Let me know if fixed.


Build from source failed on Pi-4

Hi,
I tried building v3.13.0 from source and experienced some errors.
-Tim
Build recipe
git clone https://github.com/joshkunz/ashuffle.git
cd ashuffle
git checkout v3.13.0
git submodule update --init --recursive
meson -Dbuildtype=release build
ninja -C build install

Final error
100/102] Compiling C++ object subprojects/yaml-cpp/libgtest.a.p/test_gtest-1.10.0_googletest_src_gtest-all.cc.o
ninja: build stopped: subcommand failed.
pi@rp1:~/ashuffle $

Full console output
pi@rp1:~ $ git clone https://github.com/joshkunz/ashuffle.git
Cloning into 'ashuffle'...
remote: Enumerating objects: 2191, done.
remote: Counting objects: 100% (307/307), done.
remote: Compressing objects: 100% (186/186), done.
remote: Total 2191 (delta 142), reused 229 (delta 92), pack-reused 1884
Receiving objects: 100% (2191/2191), 20.76 MiB | 10.09 MiB/s, done.
Resolving deltas: 100% (1358/1358), done.
pi@rp1:~ $ cd ashuffle
pi@rp1:~/ashuffle $ git checkout v3.13.0
Note: checking out 'v3.13.0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at 6c76d7c release: v3.13.0
pi@rp1:~/ashuffle $ git submodule update --init --recursive
Submodule 'subprojects/absl' (https://github.com/abseil/abseil-cpp.git) registered for path 'subprojects/absl'
Submodule 'subprojects/googletest' (https://github.com/google/googletest.git) registered for path 'subprojects/googletest'
Cloning into '/home/pi/ashuffle/subprojects/absl'...
Cloning into '/home/pi/ashuffle/subprojects/googletest'...
Submodule path 'subprojects/absl': checked out '9336be04a242237cd41a525bedfcf3be1bb55377'
Submodule path 'subprojects/googletest': checked out 'd61d4d8e64c08a662055e82904bbf90e108a704f'
pi@rp1:~/ashuffle $ meson -Dbuildtype=release build
The Meson build system
Version: 0.59.2
Source dir: /home/pi/ashuffle
Build dir: /home/pi/ashuffle/build
Build type: native build
Project name: ashuffle
Project version: v3.13.0
C compiler for the host machine: cc (gcc 8.3.0 "cc (Raspbian 8.3.0-6+rpi1) 8.3.0")
C linker for the host machine: cc ld.bfd 2.31.1
C++ compiler for the host machine: c++ (gcc 8.3.0 "c++ (Raspbian 8.3.0-6+rpi1) 8.3.0")
C++ linker for the host machine: c++ ld.bfd 2.31.1
Host machine cpu family: arm
Host machine cpu: armv7l

Executing subproject absl method cmake

absl| Found CMake: /usr/bin/cmake (3.13.4)

| Configuring the build directory with CMake version 3.13.4
| Running CMake with: -G Ninja -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_CXX_STANDARD=17 -DCMAKE_PROJECT_absl_INCLUDE=/home/pi/ashuffle/tools/cmake/inject_project_source_dir.cmake
|   - build directory:          /home/pi/ashuffle/build/subprojects/absl/__CMake_build
|   - source directory:         /home/pi/ashuffle/subprojects/absl
|   - toolchain file:           /home/pi/ashuffle/build/subprojects/absl/__CMake_build/CMakeMesonToolchainFile.cmake
|   - preload file:             /home/pi/ashuffle/build/meson-private/data/preload.cmake
|   - trace args:               --trace --trace-expand --no-warn-unused-cli
|   - disabled policy warnings: [CMP0025, CMP0047, CMP0056, CMP0060, CMP0065, CMP0066, CMP0067, CMP0082, CMP0089, CMP0102]

| Running with trace output on.
| Running with expanded trace output on.
| Not searching for unused variables given on the command line.
| -- The CXX compiler identification is GNU 8.3.0
| -- Check for working CXX compiler: /usr/bin/c++
| -- Check for working CXX compiler: /usr/bin/c++ -- works
| -- Detecting CXX compiler ABI info
| -- Detecting CXX compiler ABI info - done
| -- Detecting CXX compile features
| -- Detecting CXX compile features - done
| WARNING: CMake Warning at CMakeLists.txt:74 (message):
| WARNING:   A future Abseil release will default ABSL_PROPAGATE_CXX_STD to ON for CMake
| WARNING:   3.8 and up.  We recommend enabling this option to ensure your project still
| WARNING:   builds correctly.
| WARNING:
| WARNING:
| -- Looking for C++ include pthread.h
| -- Looking for C++ include pthread.h - found
| -- Looking for pthread_create
| -- Looking for pthread_create - not found
| -- Looking for pthread_create in pthreads
| -- Looking for pthread_create in pthreads - not found
| -- Looking for pthread_create in pthread
| -- Looking for pthread_create in pthread - found
| -- Found Threads: TRUE
| -- Configuring done
| -- Generating done
| -- Build files have been written to: /home/pi/ashuffle/build/subprojects/absl/__CMake_build

absl| CMake configuration: SUCCEEDED
absl| CMake server handshake: SUCCEEDED
absl| CMake server configure: SUCCEEDED
absl| Generating build system files: SUCCEEDED
absl| Querying build system files: SUCCEEDED
absl| Querying the CMake code model: SUCCEEDED
absl| CMake project absl has 137 build targets.

cmake-ast| Processing generated meson AST
cmake-ast| Build file: /home/pi/ashuffle/build/subprojects/absl/meson.build

absl| Project name: absl
absl| Project version: undefined
absl| C compiler for the host machine: cc (gcc 8.3.0 "cc (Raspbian 8.3.0-6+rpi1) 8.3.0")
absl| C linker for the host machine: cc ld.bfd 2.31.1
absl| C++ compiler for the host machine: c++ (gcc 8.3.0 "c++ (Raspbian 8.3.0-6+rpi1) 8.3.0")
absl| C++ linker for the host machine: c++ ld.bfd 2.31.1
absl| Build targets in project: 66
absl| Subproject absl finished.

Cloning into 'yaml-cpp'...
remote: Enumerating objects: 436, done.
remote: Counting objects: 100% (436/436), done.
remote: Compressing objects: 100% (362/362), done.
remote: Total 436 (delta 99), reused 215 (delta 66), pack-reused 0
Receiving objects: 100% (436/436), 1.11 MiB | 6.52 MiB/s, done.
Resolving deltas: 100% (99/99), done.
Note: checking out '0579ae3d976091d7d664aa9d2527e0d0cff25763'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

Executing subproject yaml-cpp method cmake

| Configuring the build directory with CMake version 3.13.4
| Running CMake with: -G Ninja -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_CXX_STANDARD=17 -DYAML_BUILD_SHARED_LIBS=OFF
|   - build directory:          /home/pi/ashuffle/build/subprojects/yaml-cpp/__CMake_build
|   - source directory:         /home/pi/ashuffle/subprojects/yaml-cpp
|   - toolchain file:           /home/pi/ashuffle/build/subprojects/yaml-cpp/__CMake_build/CMakeMesonToolchainFile.cmake
|   - preload file:             /home/pi/ashuffle/build/meson-private/data/preload.cmake
|   - trace args:               --trace --trace-expand --no-warn-unused-cli
|   - disabled policy warnings: [CMP0025, CMP0047, CMP0056, CMP0060, CMP0065, CMP0066, CMP0067, CMP0082, CMP0089, CMP0102]

| Running with trace output on.
| Running with expanded trace output on.
| Not searching for unused variables given on the command line.
| -- The CXX compiler identification is GNU 8.3.0
| -- Check for working CXX compiler: /usr/bin/c++
| -- Check for working CXX compiler: /usr/bin/c++ -- works
| -- Detecting CXX compiler ABI info
| -- Detecting CXX compiler ABI info - done
| -- Detecting CXX compile features
| -- Detecting CXX compile features - done
| -- Looking for C++ include pthread.h
| -- Looking for C++ include pthread.h - found
| -- Looking for pthread_create
| -- Looking for pthread_create - not found
| -- Looking for pthread_create in pthreads
| -- Looking for pthread_create in pthreads - not found
| -- Looking for pthread_create in pthread
| -- Looking for pthread_create in pthread - found
| -- Found Threads: TRUE
| -- The C compiler identification is GNU 8.3.0
| -- Check for working C compiler: /usr/bin/cc
| -- Check for working C compiler: /usr/bin/cc -- works
| -- Detecting C compiler ABI info
| -- Detecting C compiler ABI info - done
| -- Detecting C compile features
| -- Detecting C compile features - done
| -- Found PythonInterp: /usr/bin/python (found version "2.7.16")
| -- Configuring done
| -- Generating done
| -- Build files have been written to: /home/pi/ashuffle/build/subprojects/yaml-cpp/__CMake_build

yaml-cpp| CMake configuration: SUCCEEDED
yaml-cpp| CMake server handshake: SUCCEEDED
yaml-cpp| CMake server configure: SUCCEEDED
yaml-cpp| Generating build system files: SUCCEEDED
yaml-cpp| Querying build system files: SUCCEEDED
yaml-cpp| Querying the CMake code model: SUCCEEDED
yaml-cpp| WARNING: CMake: path /home/pi/ashuffle/subprojects/yaml-cpp/test/gtest-1.10.0/googlemock/include /home/pi/ashuffle/subprojects/yaml-cpp/test/gtest-1.10.0/googlemock /home/pi/ashuffle/subprojects/yaml-cpp/test/gtest-1.10.0/googletest/include /home/pi/ashuffle/subprojects/yaml-cpp/test/gtest-1.10.0/googletest does not exist.
yaml-cpp| WARNING:  --> Ignoring. This can lead to build errors.
yaml-cpp| WARNING: CMake: path /home/pi/ashuffle/subprojects/yaml-cpp/test/gtest-1.10.0/googletest/include /home/pi/ashuffle/subprojects/yaml-cpp/test/gtest-1.10.0/googletest does not exist.
yaml-cpp| WARNING:  --> Ignoring. This can lead to build errors.
yaml-cpp| WARNING: CMake: path /home/pi/ashuffle/subprojects/yaml-cpp/test/gtest-1.10.0/googlemock/include /home/pi/ashuffle/subprojects/yaml-cpp/test/gtest-1.10.0/googlemock /home/pi/ashuffle/subprojects/yaml-cpp/test/gtest-1.10.0/googletest/include /home/pi/ashuffle/subprojects/yaml-cpp/test/gtest-1.10.0/googletest does not exist.
yaml-cpp| WARNING:  --> Ignoring. This can lead to build errors.
yaml-cpp| WARNING: CMake: path /home/pi/ashuffle/subprojects/yaml-cpp/test/gtest-1.10.0/googletest/include /home/pi/ashuffle/subprojects/yaml-cpp/test/gtest-1.10.0/googletest does not exist.
yaml-cpp| WARNING:  --> Ignoring. This can lead to build errors.
yaml-cpp| WARNING: CMake: path /home/pi/ashuffle/subprojects/yaml-cpp/test/gtest-1.10.0/googletest/include /home/pi/ashuffle/subprojects/yaml-cpp/test/gtest-1.10.0/googletest does not exist.
yaml-cpp| WARNING:  --> Ignoring. This can lead to build errors.
yaml-cpp| WARNING: CMake: path /home/pi/ashuffle/subprojects/yaml-cpp/test/gtest-1.10.0/googletest/include /home/pi/ashuffle/subprojects/yaml-cpp/test/gtest-1.10.0/googletest does not exist.
yaml-cpp| WARNING:  --> Ignoring. This can lead to build errors.
yaml-cpp| CMake project YAML_CPP has 37 build targets.

cmake-ast| Processing generated meson AST
cmake-ast| Build file: /home/pi/ashuffle/build/subprojects/yaml-cpp/meson.build

yaml-cpp| Project name: YAML_CPP
yaml-cpp| Project version: undefined
yaml-cpp| C++ compiler for the host machine: c++ (gcc 8.3.0 "c++ (Raspbian 8.3.0-6+rpi1) 8.3.0")
yaml-cpp| C++ linker for the host machine: c++ ld.bfd 2.31.1
yaml-cpp| Program /usr/local/bin/meson found: YES (/usr/local/bin/meson)
yaml-cpp| Program /usr/local/bin/meson found: YES (/usr/local/bin/meson)
yaml-cpp| Program /usr/local/bin/meson found: YES (/usr/local/bin/meson)
yaml-cpp| Program /usr/local/bin/meson found: YES (/usr/local/bin/meson)
yaml-cpp| Program /usr/local/bin/meson found: YES (/usr/local/bin/meson)
yaml-cpp| Program /usr/local/bin/meson found: YES (/usr/local/bin/meson)
yaml-cpp| Program /usr/local/bin/meson found: YES (/usr/local/bin/meson)
yaml-cpp| Program /usr/local/bin/meson found: YES (/usr/local/bin/meson)
yaml-cpp| Program /usr/local/bin/meson found: YES (/usr/local/bin/meson)
yaml-cpp| Program /usr/local/bin/meson found: YES (/usr/local/bin/meson)
yaml-cpp| Program /usr/local/bin/meson found: YES (/usr/local/bin/meson)
yaml-cpp| Program /usr/local/bin/meson found: YES (/usr/local/bin/meson)
yaml-cpp| Program /usr/local/bin/meson found: YES (/usr/local/bin/meson)
yaml-cpp| Program /usr/local/bin/meson found: YES (/usr/local/bin/meson)
yaml-cpp| Program /usr/local/bin/meson found: YES (/usr/local/bin/meson)
yaml-cpp| Program /usr/local/bin/meson found: YES (/usr/local/bin/meson)
yaml-cpp| Program /usr/local/bin/meson found: YES (/usr/local/bin/meson)
yaml-cpp| Program /usr/local/bin/meson found: YES (/usr/local/bin/meson)
yaml-cpp| Program /usr/local/bin/meson found: YES (/usr/local/bin/meson)
yaml-cpp| Program /usr/local/bin/meson found: YES (/usr/local/bin/meson)
yaml-cpp| Program /usr/local/bin/meson found: YES (/usr/local/bin/meson)
yaml-cpp| Program /usr/local/bin/meson found: YES (/usr/local/bin/meson)
yaml-cpp| Program /usr/local/bin/meson found: YES (/usr/local/bin/meson)
yaml-cpp| Program /usr/local/bin/meson found: YES (/usr/local/bin/meson)
yaml-cpp| Program /usr/local/bin/meson found: YES (/usr/local/bin/meson)
yaml-cpp| Program /usr/local/bin/meson found: YES (/usr/local/bin/meson)
yaml-cpp| Program /usr/local/bin/meson found: YES (/usr/local/bin/meson)
yaml-cpp| Program /usr/local/bin/meson found: YES (/usr/local/bin/meson)
yaml-cpp| Build targets in project: 103
yaml-cpp| Subproject yaml-cpp finished.

Found pkg-config: /usr/bin/pkg-config (0.29)
Run-time dependency libmpdclient found: YES 2.16
Configuring version.cc using configuration
Build targets in project: 107

ashuffle v3.13.0

  Subprojects
    absl    : YES
    yaml-cpp: YES

Found ninja-1.8.2 at /usr/bin/ninja
pi@rp1:~/ashuffle $ ninja -C build install
ninja: Entering directory `build'
[45/102] Compiling C++ object subprojects/absl/libabsl_str_format_internal.a.p/absl_strings_internal_str_format_parser.cc.o
../subprojects/absl/absl/strings/internal/str_format/parser.cc: In member function ‘bool absl::str_format_internal::ParsedFormatBase::MatchesConversions(bool, std::initializer_list<absl::FormatConversionCharSet>) const’:
../subprojects/absl/absl/strings/internal/str_format/parser.cc:310:6: note: parameter passing for argument of type ‘std::initializer_list<absl::FormatConversionCharSet>’ changed in GCC 7.1
 bool ParsedFormatBase::MatchesConversions(
      ^~~~~~~~~~~~~~~~
../subprojects/absl/absl/strings/internal/str_format/parser.cc: In constructor ‘absl::str_format_internal::ParsedFormatBase::ParsedFormatBase(absl::string_view, bool, std::initializer_list<absl::FormatConversionCharSet>)’:
../subprojects/absl/absl/strings/internal/str_format/parser.cc:302:1: note: parameter passing for argument of type ‘std::initializer_list<absl::FormatConversionCharSet>’ changed in GCC 7.1
 ParsedFormatBase::ParsedFormatBase(
 ^~~~~~~~~~~~~~~~
[53/102] Compiling C++ object subprojects/yaml-cpp/libyaml_cpp.a.p/src_convert.cpp.o
In file included from ../subprojects/yaml-cpp/include/yaml-cpp/node/convert.h:20,
                 from ../subprojects/yaml-cpp/src/convert.cpp:3:
../subprojects/yaml-cpp/include/yaml-cpp/node/impl.h: In member function ‘YAML::Node& YAML::Node::operator=(const T&)’:
../subprojects/yaml-cpp/include/yaml-cpp/node/impl.h:206:11: warning: ‘operator=’ should return a reference to ‘*this’ [-Weffc++]
   return *this;
           ^~~~
[68/102] Compiling C++ object subprojects/yaml-cpp/libyaml_cpp.a.p/src_nodebuilder.cpp.o
In file included from ../subprojects/yaml-cpp/src/nodebuilder.cpp:5:
../subprojects/yaml-cpp/include/yaml-cpp/node/impl.h: In member function ‘YAML::Node& YAML::Node::operator=(const T&)’:
../subprojects/yaml-cpp/include/yaml-cpp/node/impl.h:206:11: warning: ‘operator=’ should return a reference to ‘*this’ [-Weffc++]
   return *this;
           ^~~~
[70/102] Compiling C++ object subprojects/yaml-cpp/libyaml_cpp.a.p/src_parse.cpp.o
In file included from ../subprojects/yaml-cpp/src/parse.cpp:7:
../subprojects/yaml-cpp/include/yaml-cpp/node/impl.h: In member function ‘YAML::Node& YAML::Node::operator=(const T&)’:
../subprojects/yaml-cpp/include/yaml-cpp/node/impl.h:206:11: warning: ‘operator=’ should return a reference to ‘*this’ [-Weffc++]
   return *this;
           ^~~~
[99/102] Linking target ashuffle
FAILED: ashuffle
c++  -o ashuffle ashuffle.p/src_mpd_client.cc.o ashuffle.p/src_main.cc.o -Wl,--as-needed -Wl,--no-undefined -Wl,-O1 -Wl,--start-group libashuffle.a subprojects/absl/libabsl_raw_logging_internal.a subprojects/absl/libabsl_int128.a subprojects/absl/libabsl_str_format_internal.a subprojects/absl/libabsl_strings_internal.a subprojects/absl/libabsl_strings.a subprojects/absl/libabsl_hash.a subprojects/absl/libabsl_city.a subprojects/absl/libabsl_low_level_hash.a subprojects/absl/libabsl_time.a subprojects/absl/libabsl_base.a subprojects/absl/libabsl_spinlock_wait.a subprojects/yaml-cpp/libyaml_cpp.a libversion.a -lrt -lpthread /usr/lib/arm-linux-gnueabihf/libmpdclient.so -Wl,--end-group
/usr/bin/ld: libashuffle.a(src_args.cc.o): in function `ashuffle::(anonymous namespace)::Parser::LoadExcludeFile(std::filesystem::__cxx11::path)':
args.cc:(.text+0x1734): undefined reference to `std::filesystem::status(std::filesystem::__cxx11::path const&, std::error_code&)'
/usr/bin/ld: libashuffle.a(src_args.cc.o): in function `ashuffle::Options::Parse(ashuffle::mpd::TagParser const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)':
args.cc:(.text+0x49ac): undefined reference to `std::filesystem::__cxx11::path::_M_split_cmpts()'
collect2: error: ld returned 1 exit status
[100/102] Compiling C++ object subprojects/yaml-cpp/libgtest.a.p/test_gtest-1.10.0_googletest_src_gtest-all.cc.o
ninja: build stopped: subcommand failed.
pi@rp1:~/ashuffle $

Fails for me too when building v3.13.0 on RaspiOS-based moOde player. OTOH, previous versions up to v3.12.8 build successfully.
Internet searches on the string undefined reference to `std::filesystem::__cxx11::path::_M_split_cmpts()' returns hits suggesting that the build is not linking to libstdc++fs.
On my moOde player, I find /usr/lib/gcc/arm-linux-gnueabihf/8/libstdc++fs.a which is not dissimilar to what I find on my x86_64 Linux Mint laptop.
I don't grok the meson build system well enough to work this out in meson.build

Yeah, according to cppreference this requires linker options for LLVM toolchains before 9.0 and GCC toolchains before 9.1. Looks like focal (latest ubuntu release which is what I think GitHub Actions use) is packaging GCC 10, so we didn't run into this in CI. I'll look into fixing this, I think it's fairly easy in meson.
In general, I'm semi-averse to supporting builds on arbitrary host configurations. I'm open to PRs to make it easier to build in more configurations, but supporting configurations is a lot of work and is not the core focus of the app. Given that we already publish binaries (Issue #122 notwithstanding).

@moodeaudio / @TheOldPresbyope Could one of you try patching https://github.com/joshkunz/ashuffle/pull/125 and see if that fixes the problem?

Thanks, and a tip of the hat!
Pulled support-old-compilers branch and successfully built ashuffle from the tip of the branch on moOde player (based on debian buster). Resulting binary reports itself as v3.13.0.

Awesome, thanks for confirming. I'll merge and cut a release once the CI checks pass.

Cut as v3.13.1.


S32-io/IO-Socket-Async.t IPv6 tests fail on systems not configured to use IPv6

bastille% ./fudgeandrun S32-io/IO-Socket-Async.t
S32-io/IO-Socket-Async.t ..
1..26
ok 1 - Async listen on bogus hostname
ok 2 - Async connect to unavailable server breaks promise
ok 3 - Async connect to available server keeps promise
ok 4 - Echo server
ok 5 - Coped with grapheme split across packets
ok 6 - Coped with UTF-8 bytes split across packets
ok 7 - Bad UTF-8 causes quit on Supply (but program survives)
ok 8 - Discard server
ok 9 - bytes-supply
ok 10 - Server socket configured with latin-1 handles it
ok 11 - Can set encoding on incoming Supply separately
ok 12 - Latin-1 client socket correctly encodes
# host=<IP_ADDRESS>
ok 13 - *-host accessors are right
ok 14 - client's peer-port is right
ok 15 - server's socket-port is right
ok 16 - client's socket-port seems right
ok 17 - server's peer-port seems right
# host=::1
Unhandled exception in code scheduled on thread 4
invalid argument

# Looks like you planned 26 tests, but ran 17
Dubious, test returned 1 (wstat 256, 0x100)
Failed 9/26 subtests

Test Summary Report
-------------------
S32-io/IO-Socket-Async.t (Wstat: 256 Tests: 17 Failed: 0)
  Non-zero exit status: 1
  Parse errors: Bad plan.  You planned 26 tests but ran 17.
Files=1, Tests=17,  1 wallclock secs ( 0.01 usr  0.02 sys +  1.14 cusr  0.41 csys =  1.58 CPU)
Result: FAIL

Trying to host a server on ::1 doesn't work when tested on Python 3.6.4 and Node.js v8.9.4 on my system. My network doesn't support IPv6, and I don't have an IPv4-IPv6 bridge set up.
Tested on:

This is Rakudo version 2018.04.1-141-g847d3d60b built on MoarVM version 2018.05
OpenBSD bastille.kennel.qt 6.3 GENERIC.MP#1 amd64

The problem's solved by building libuv from ports (not pkg, too far out of date) and some tinkering with DNS. Alternatively, follow the dev brangh of libuv and use their update, which has this patched on their dev branch.
Should the patch fixing it be merged into a submodule for libuv?


improve nodes endpoint query perfomance

this https://github.com/threefoldtech/tfgrid-sdk-go/pull/533 should fixed the problem released with tag v0.13.0 and deployed now on devnet


userprofile-pr #3 failed

Build 'userprofile-pr' is failing!
Last 50 lines of build output:
[...truncated 57 lines...]
 ---> 799f7ef8ee59
Step 4/7 : EXPOSE 8080
 ---> Running in fd33c294287d
Removing intermediate container fd33c294287d
 ---> 1821a7d7bdfe
Step 5/7 : RUN npm install
 ---> Running in 925cd7470f00
npm WARN<EMAIL_ADDRESS>No license field.

added 476 packages from 342 contributors and audited 1021 packages in 12.342s
found 3 moderate severity vulnerabilities
  run `npm audit fix` to fix them, or `npm audit` for details
Removing intermediate container 925cd7470f00
 ---> e330a7a1b6a2
Step 6/7 : RUN npm run test
 ---> Running in 0c303e2c1054

><EMAIL_ADDRESS>test /app
> tape 'tests/**/*.js' | tap-junit --output reports --name userprofile-report

Finished! userprofile-report.xml created at: reports
Error: Looks like some test suites failed
    at xmlErr (/app/node_modules/tap-junit/src/index.js:43:25)
    at /app/node_modules/graceful-fs/graceful-fs.js:99:16
    at /app/node_modules/graceful-fs/graceful-fs.js:43:10
    at FSReqWrap.oncomplete (fs.js:135:15)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR!<EMAIL_ADDRESS>test: `tape 'tests/**/*.js' | tap-junit --output reports --name userprofile-report`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the<EMAIL_ADDRESS>test script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2018-11-22T20_41_23_944Z-debug.log
The command '/bin/sh -c npm run test' returned a non-zero code: 1
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Declarative: Post Actions)
[Pipeline] echo
Post Build Results
[Pipeline] script
[Pipeline] {
[Pipeline] properties
[Pipeline] }
[Pipeline] // script
[Pipeline] step

Changes since last successful build:
No changes
View full output

Build was fixed!


Enable SA1620 rule

Change the action for SA1620 on the ruleset file to Error, and make the solution build

Looks like this issue can be closed.

Looks like this issue can be closed.

@kblok


tf.data.dataset. Zip ((images, labels))

How can I use tf.data.dataset. Zip ((images, labels)) as you do when I use tfrecorder to read my data sets? What format do these two parameters need to be in?

If you use TFRecords, it's the same as with images loaded from jpeg.

If you use TFRecords, it's the same as with images loaded from jpeg.

Thank you very much for your answer. This step is done.But my labeis is category interval  like (0,3) ,(6,10)....（45，50,What should I do next, I really need your help.

If you have category intervals I'm not sure exactly what you are supposed to do.

This doesn't feel like a standard case like face recognition.

If you have category intervals I'm not sure exactly what you are supposed to do.

This doesn't feel like a standard case like face recognition.

Thank you for your answer.What I mean is that my label is the eight interval labels, not the integer labeis of the mnist dataset.I get an error when I run the program.
2019-08-03 21:17:22.362061: W tensorflow/core/framework/op_kernel.cc:1378] OP_REQUIRES failed at cast_op.cc:123 : Unimplemented: Cast string to float is not supported
2019-08-03 21:17:22.366516: E tensorflow/core/common_runtime/executor.cc:624] Executor failed to create kernel.

I would guess that your labels are string (ex: the interval "[0, 8]"), so TensorFlow cannot convert these to float.
If you only have 8 intervals, you need to assign each one a unique id from 0 to 7, and then just use my code easily.

I would guess that your labels are string (ex: the interval "[0, 8]"), so TensorFlow cannot convert these to float.
If you only have 8 intervals, you need to assign each one a unique id from 0 to 7, and then just use my code easily.

All right.Thank you very much for your help.

When I got everything ready, I made the following mistake:
InvalidArgumentError (see above for traceback): Cannot batch tensors with different shapes in component 0. First element had shape [38528]
and element 1 had shape [60597].
[[node IteratorGetNext (defined at C:\Users\Xiaok\Anaconda3\lib\site-packages\tensorflow_estimator\python\estimator\util.py:110) ]]
The function I'm handling the input is:
def _parse_function(example_serialized):
Dense features in Example proto.
feature_map = {
    'image/encoded': tf.FixedLenFeature([], dtype=tf.string,
                                        default_value=''),
    'image/filename': tf.FixedLenFeature([], dtype=tf.string,
                                        default_value=''),

    'image/class/label': tf.FixedLenFeature([1], dtype=tf.int64,
                                            default_value=-1),
    # 'image/class/text': tf.FixedLenFeature([], dtype=tf.string,
    #                                         default_value=''),
    'image/height': tf.FixedLenFeature([1], dtype=tf.int64,
                                        default_value=-1),
    'image/width': tf.FixedLenFeature([1], dtype=tf.int64,
                                        default_value=-1),

}
features = tf.parse_single_example(example_serialized, feature_map)
label = tf.cast(features['image/class/label'], dtype=tf.int32)
image = tf.decode_raw(features['image/encoded'], out_type = tf.uint8)
image = tf.cast(image, tf.float32)
image = tf.reshape(image, [196608]) #my picture(256*256*3)
label = tf.reshape(label,[])
return image, label

def prepare_dataset(record_name,params):
"""
从record_name指定的TFRecords文件，初始化一个dataset
:param record_name: TFRecords文件路径
"""
# 定义TFRecordDataset
dataset = tf.data.TFRecordDataset([record_name])
dataset = dataset.map(_parse_function)
dataset = dataset.shuffle(params.train_size)  # whole dataset into the buffer
dataset = dataset.repeat(params.num_epochs)  # repeat for multiple epochs
dataset = dataset.batch(params.batch_size)
print(dataset)
dataset = dataset.prefetch(1)  # make sure you always have one batch ready to serve
# print(dataset)
return dataset

This isn't related to triplet loss, maybe ask your question on stackoverflow.


Possibility to landscape only the video instead of using a third party library.

Is there an existing issue for this?

[X] I have searched the existing issues

Current Behavior
I am currently implementing the fullscreen functionality following the documentation.
https://developer.bitmovin.com/playback/docs/enabling-fullscreen-playback
// Define a handler to take care of fullscreen transitions
class SampleFullscreenHandler implements FullscreenHandler {
  isFullscreenActive: boolean = true;
  onFullscreen: (fullscreenMode: boolean) => void;

  constructor(
    isFullscreenActive: boolean,
    onFullscreen: (fullscreenMode: boolean) => void
  ) {
    this.isFullscreenActive = isFullscreenActive;
    this.onFullscreen = onFullscreen;
  }

  enterFullscreen(): void {
    // Update UI state for fullscreen mode
    this.isFullscreenActive = true;
    this.onFullscreen(true);
    if (Platform.OS === 'android') {
      // Hides navigation and status bar on Android using 'react-native-system-navigation-bar' package
      SystemNavigationBar.stickyImmersive(true);
    } else {
      // Hides status bar on iOS
      StatusBar.setHidden(true);
    }
    // If landscape mode during fullscreen is preferred
    // this should be handled here as well
    // by integrating integrating 'react-native-orientation-locker' package
    // and uncommenting the next line:
    Orientation.lockToLandscape();
    console.log('enter fullscreen');
  }

  exitFullscreen(): void {
    // Update UI state for non-fullscreen mode
    this.isFullscreenActive = false;
    this.onFullscreen(false);
    if (Platform.OS === 'android') {
      // shows navigation and status bar on Android using 'react-native-system-navigation-bar' package
      SystemNavigationBar.stickyImmersive(false);
    } else {
      // shows status bar on iOS
      StatusBar.setHidden(false);
    }
    // If landscape mode during fullscreen is preferred
    // this should be handled here as well
    // by integrating integrating 'react-native-orientation-locker' package
    // and uncommenting the next line:
    Orientation.unlockAllOrientations();
    console.log('exit fullscreen');
  }
}

export default function BasicFullscreenHandling({navigation}) {
  // Set up player and other components...

  // State to reflect current fullscreen state.
  const [fullscreenMode, setFullscreenMode] = useState(false);
  // Create SampleFullscreenHandler instance and enable it to update state
  const fullscreenHandler = useRef(
    new SampleFullscreenHandler(fullscreenMode, (isFullscreen: boolean) => {
      setFullscreenMode(isFullscreen);

      // In case of native stack navigation show/hide top bar
      navigation.setOptions({ headerShown: !isFullscreen });

      // In case of bottom tabs navigation show/hide top and bottom bars
      navigation.setOptions({
        headerShown: !isFullscreen, // show/hide top bar
        tabBarStyle: {display: isFullscreen ? 'none' : 'flex'}, // show/hide bottom bar
      });
    }),
  ).current;

  return (
    <View>
      <PlayerView
        player={player}
        // Apply style based on `fullscreenMode` state value
        style={fullscreenMode ? styles.playerFullscreen : styles.player}
        fullscreenHandler={fullscreenHandler}
        onFullscreenEnter={onFullscreenEnter}
        onFullscreenExit={onFullscreenExit}
        onFullscreenEnabled={onFullscreenEnabled}
        onFullscreenDisabled={onFullscreenDisabled}
      />
    </View>
  );
}

// Define your styles
const styles = StyleSheet.create({
  player: {
    flex: 1,
    backgroundColor: 'black',
  },
  playerFullscreen: {
    position: 'absolute',
    top: 0,
    right: 0,
    bottom: 0,
    left: 0,
    backgroundColor: 'black',
  },
});

I was researching the react-native-orientation library.
https://www.npmjs.com/package/react-native-orientation
The problem I'm having is that this library is rotating the whole app, generating rerender of all the components previously placed in the app. It would be better to have the possibility to rotate the video only as Netflix does for example.
Expected Behavior
       <PlayerView
        player={player}
        orientation={"landscape"} <===== add property
        // Apply style based on `fullscreenMode` state value
        style={fullscreenMode ? styles.playerFullscreen : styles.player}
        fullscreenHandler={fullscreenHandler}
        onFullscreenEnter={onFullscreenEnter}
        onFullscreenExit={onFullscreenExit}
        onFullscreenEnabled={onFullscreenEnabled}
        onFullscreenDisabled={onFullscreenDisabled}
      />

Steps To Reproduce
No response
What platform(s) are you experiencing the issue on?

[ ] Android
[ ] Android TV / Fire TV
[ ] iOS
[ ] tvOS

Player React Native SDK version
0.8.0
Device / Environment
No response
Stream URL (Optional)
No response
Additional information / Code snippets / Screenshots
No response

Hi @jonathanm-tkf!
Would this option from react-navigation solve your issue?
See: https://reactnavigation.org/docs/native-stack-navigator/#orientation

we still have rotation schemes

What do you mean by "rotation schemes"? The orientation options?
At the moment I have no other ideas to accomplish this on both iOS and Android.
For iOS you could present the player in a Modal with supportedOrientations={['landscape']} but I have no idea about an Android solution.
See docs here.

ok I understand but we already tried this use case but we have the same expectation as with react-native-orientation, I thought we could say from the native side which orientation the PlayerView uses without the need of third party plugins.

I think it would be a very good contribution to the implementation but if you want to close the issue I don't think there is much to do. Thank you for your efforts

The problem is that React Native is working with UIView not UIViewController, therefore there is no such as orientation for a view as it is handled on a different level unfortunately.
Maybe the orientation animation could be disabled to have an instant orientation change, but I never tried this so not sure if possible.


Add API generator

Hi! It would be great to have some scaffolding when building API. Would be cool to run something like:
php artisan generate:api Comment
which will create API controllers (extending ApiController class or so ), and routes.
Probably, you will want to set something like pagination using command options.

Hi @exfriend
That's a great proposal. Feel free to do a pull request :)


Fix typo in metadata causing xpdAn filesaving bug

Codecov Report

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

@@            Coverage Diff             @@
##           master     #187      +/-   ##
==========================================
+ Coverage   95.17%   95.18%   +<.01%
==========================================
  Files          14       14
  Lines        2053     2054       +1
  Branches      358      358
==========================================
+ Hits         1954     1955       +1
  Misses         57       57
  Partials       42       42

Impacted Files
Coverage Δ

shed/simple.py
92.65% <ø> (ø)
:arrow_up:

shed/tests/test_simple.py
99.43% <100%> (ø)
:arrow_up:

Continue to review full report at Codecov.

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


Multiple event indicator in the same day

Hi, First thanks for this great plug-in.
However I can’t find where in the file .css I have to modify to allow me to display several event indicators in the same day as in the demo.
Thank you in advance.

Hello, sorry for the late response..
It is automatically display when it has multiple events with different event type at the same day. Hope this helps.


Removed some repositories that are not participating in Hacktoberfest21

Removed some repositories that are not participating in hacktoberfest 2021
Contributing
If you want to add a project to this list, please make sure that:

[x] You read the contributing guide

If they meet the requirements above, feel free to create a PR. Happy Hacking! :sparkles:

Hey, some changes happened in the repository and now we have a git conflict in the repository.
If it's your first time with conflicts, don't worry, it happens sometimes and it is a good opportunity to learn how handle with conflicts. I recommend you to read this article about resolving conflicts.
So, can you fix the conflict?


Rename refactoring and add comments to uTP

This is the first PR of a series of PRs to refactor the uTP implementation and fix some of the uTP bugs.
This PR includes a simple renaming of some of the variables, methods and adding comments to improve code readability and debugging. This PR doesn't change any functionality.
It is using the uTP library implemented in Rust for reference.

You mentioned in chat that you found a number of issues by transferring data over uTP from trin to trin. That sounds like an important test to add to CI to prevent regressions. Doesn't necessarily have to be in included in this PR, but I'd love to hear your plans for testing.

You mentioned in chat that you found a number of issues by transferring data over uTP from trin to trin. That sounds like an important test to add to CI to prevent regressions. Doesn't necessarily have to be in included in this PR, but I'd love to hear your plans for testing.

I'm doing the test manually right now using a different branch which is kinda hacky. I'm checking the packet transfer between two nodes by sending a uTP payload and manually looking for inconsistencies (the code can be found here).
The general idea to test uTP is to use a uTP testing framework. The testing framework will look something similar to what Fluffy is doing here. It is spinning two uTP implementations (test_apps) in docker containers and a network simulator (ns-3 bridges the connection.
This approach comes from a QUIC testing framework, more info about it can be found here and here. This way, we can test the uTP transfer on different network conditions including delays, drop rate, corrupted packets and etc.
To make this possible, we need first to do the following:

Fix all obvious issues in the current implementation and add more unit tests (this requires refactoring).
Add receive(), close(), flush() methods to our uTP implementation and make it more "socket like".
Encapsulate all uTP logic so we can test it by running only a uTP socket without running a whole trin node as a black box.
Integrate uTP with the testing framework mentioned above and add it to CI

So the first stage will include a few PRs (this is the first), mainly refactoring and adding additional unit tests.

The general idea to test uTP is to use a uTP testing framework. The testing framework will look something similar to what Fluffy is doing here. It is spinning two uTP implementations (test_apps) in docker containers and a network simulator (ns-3) bridges the connection. This approach comes from a QUIC testing framework, more info about it can be found here and here.
So the first stage will include a few PRs (this is the first), mainly refactoring and adding additional unit tests.

Awesome, thanks for the summary. This looks great!


Franchise attribute - Now just more filtering and Publisher

I originally started this branch to add a new "franchise" attribute that I would import using the Jupyter importer, but I later abandoned this and decided to filter by publisher, since I couldn't find a dataset available of every video game franchise. I plan to eventually continue this branch and add scrape Wikipedia in the future.
However, in the absence of this, I massively overhauled the Django website. It now can search and filter, and instead of just a raw index view on the main page, the front page acts like a google search to lookup more games.
There are a lot of validation issues that I am realizing in the Django app so I'm going to start a "validation" branch to QA a lot of data imported into Django.
Oh and one more big fix for data input, I used to just have the Add Challenge form use a Select, but since loading in a select with 2000+ rows is terrible, I just auto-assigned the game to the specific add challenge form since it gets clicked into on the game page itself.

Great work! LGTM!!!


Automated Package Upgrade

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

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


Switch to alpine for the docker image

Alpine based image is more than two times smaller than the standard (Debian based) one.
The resulting mailhog image size is 280.1 MB (using golang:1.7-alpine) vs 691.6 MB (using golang:1.7).

I think that size is less important in this case. If you're going to use this for testing, you're probably going to need to use it for debugging, and using something you're familiar with is a better choice. I think a lot of people are more familiar with Debian.

Thanks @lmakarov, and thanks for #109
Does the version provided by Rockerfile help? It's only 15 MB, and is the 'official' one hosted at Docker Hub
I think I'd be inclined to agree with @AGhost-7, but I won't be affected by it! Dockerfile is intended as a development resource, while the Rockerfile version provides something aimed more at deployment.

I'll close this, I think it's been superseded by #118


"Getting runtime error"

"Tutorial 16: Meta-Learning - Learning to Learn" I am following this tutorial...but while running the code i got this error "RuntimeError: setStorage: sizes [], strides [], storage offset 15, and itemsize 8 requiring a storage size of 128 are out of bounds for storage of size 0". Can you help me with this.

Hi, I just reran Tutorial 16 on Google Colab, and it finished without errors. Can you give a closer description of how you got the error?

Thank you. the error has been solved. Can you please tell me how you use the tensorboard here...I have already installed the tensorboard and saved the same model you used to test on my dataset. But i was unable to use the tensorboard.


Make graphs that compare predictions of future state to predictions of changes

This is potentially a nice way to communicate what the benchmark comparisons tell us.
I'm basically envisioning an observed-predicted plot of forecast vs. observed richness side-by-side with an observed-predicted plot of forecast change in richness vs. observed change in richness. The first will look good and demonstrates that if we just need to know what richness will look like in 20 years, we do that, but the second will look bad showing that we don't really benefit from the more sophisticated models over just assuming that things don't change.
This ties back to the results in Rapacciuolo 2012, which shows that SDMs work well for forecasting species locations because they are good at predicting the areas that don't change.

Is this issue still active, @ethanwhite?

I think we've covered the same idea in other ways.


running prisma2 dev with prisma 1 database warns about data loss

I introspected a prisma1 database in prisma 2 and then ran prisma2 dev. At this point I see the following:
   ⚠   There will be data loss:

     • You are about to drop the column `location` on the `CheckIn` table, which still contains 563 non-null values.
     • You are about to drop the column `weather` on the `CheckIn` table, which still contains 474 non-null values.
     • You are about to drop the column `checkIn` on the `Item` table, which still contains 562 non-null values.
     • You are about to drop the column `previousItem` on the `Item` table, which still contains 78 non-null values.

I'm still not 100% familiar with what dev is doing, or why it wants to update the schema (and how).
I was hoping that I could just use the prisma 1 database as is, or at least know the steps I need to take to make it prisma2 ready

Can you please share your Prisma 1 schema?

@pantharshit00 here is our schema:
type User {
  id: ID! @id

  createdAt: DateTime! @createdAt
  updatedAt: DateTime! @updatedAt

  name: String
  email: String! @unique

  following: [User!]! @relation(name: "FollowRelation")
  followers: [User!]! @relation(name: "FollowRelation")

  logs: [Log!]! @relation(name: "UserLogs")
  projects: [Project!]! @relation(name: "ProjectMembers")

  items: [Item!]! @relation(name: "OwnedItems")
  itemsCreated: [Item!]! @relation(name: "CreatedItems")
}

enum ItemType {
  TASK
  NOTE
  EVENT
  CHECKIN
}

type Item {
  id: ID! @id
  createdAt: DateTime! @createdAt
  updatedAt: DateTime! @updatedAt

  type: ItemType!

  creator: User! @relation(name: "CreatedItems")
  owner: User! @relation(name: "OwnedItems")

  title: String

  checkIn: CheckIn @relation(name: "ItemCheckin", link: INLINE)

  # Item location
  log: Log @relation(name: "ItemLog", link: INLINE)
  project: Project @relation(name: "ItemProject", link: INLINE)

  # Timeline
  previousItem: Item @relation(name: "PreviousNext", link: INLINE)
  nextItem: Item @relation(name: "PreviousNext")

  lastItem: Item @relation(name: "ItemHistory")
  history: [Item!]! @relation(name: "ItemHistory")

  isDeleted: Boolean! @default(value: false)
  deletedAt: DateTime

  # sub-item support
  parent: Item @relation(name: "ParentChild")
  children: [Item!]! @relation(name: "ParentChild")

  isComplete: Boolean! @default(value: false)
  completedAt: DateTime
}

type Log {
  id: ID! @id
  createdAt: DateTime! @createdAt
  updatedAt: DateTime! @updatedAt

  owner: User! @relation(name: "UserLogs", link: INLINE)

  items: [Item!]! @relation(name: "ItemLog")

  checkIns: [CheckIn!]! @relation(name: "LogCheckin")
}

type Project {
  id: ID! @id
  createdAt: DateTime! @createdAt
  updatedAt: DateTime! @updatedAt

  title: String!

  creator: User! @relation(name: "CreatedProjects")
  members: [User!]! @relation(name: "ProjectMembers")

  items: [Item!]! @relation(name: "ItemProject")
}

type CheckIn {
  id: ID! @id
  createdAt: DateTime! @createdAt
  updatedAt: DateTime! @updatedAt

  log: Log @relation(name: "LogCheckin", link: INLINE)
  item: Item @relation(name: "ItemCheckin")

  # location
  latitude: Float!,
  longitude: Float!,

  location: Json,
  weather: Json
}

Looks like our system is dropping Json field which is not supported. It is also dropping self relations.
I think you should wait while we streamline the upgrade process as I have mentioned in https://github.com/prisma/prisma2/issues/908

@chrisdrackett can you please try again with the new introspection feature in preview 18?

I am closing this one due to inactivity, if you still think that this is an issue, please comment here and tag me. Thank you 🙏


Client Sided Invisible

I recently tried using this module and it is fantastic and very well made but I noticed that its only visible for me ServerSided but not ClientSided.
The weird part is, its a server sided script and the module is in a folder in ReplicatedStorage.
I am probably doing something wrong. I would highly appreciate if you could respond and just explain what I am doing wrong or even if there is something wrong with the module.
Thank you in advance!

Alright so, after a couple hours of learning this module more I found out that I have to simply make the FX's client sided by using the FireAllClients.
I have created a script that handles all of that now.
Sorry for posting this as I didn't expect to solve it by my self. Amazing module, I will be using it a lot!


Where is the shared folder for Vagrant made?

config.vm.synced_folder is commented out

The directory you run vagrant up from. In the guess vm is mounted as /vagrant


feat: implement ValidationWebhook for subscription admission requests

implement webhook server that validates whether the channel name in the subscription routed to it conforms to all the storageclients desired operator subscription or not.
this pr only contains webhook server code and supporting resources to deploy it, deployment of actual ValidatingWebhookConfiguration will be part of different pr.
part of [RHSTOR-5496]
Obsoletes #98
Depends on #89

review only last 2 commits.
Implementation is based on tests in https://github.com/kubernetes-sigs/controller-runtime/tree/v0.16.3/pkg/webhook

part of #109


[New Port Request] SCIP

Library name: SCIP
Library description: SCIP is currently one of the fastest non-commercial solvers for mixed integer programming (MIP) and mixed integer nonlinear programming (MINLP). It is also a framework for constraint integer programming and branch-cut-and-price. It allows for total control of the solution process and the access of detailed information down to the guts of the solver.
Source repository URL : https://www.scipopt.org/download/release/scip-7.0.1.tgz
Project homepage (if different from the source repository):https://www.scipopt.org/index.php#welcome
Anything else that is useful to know when adding (such as optional features the library may have that should be included):

If you wish to add this port in the future, you can reopen this issue, but we're closing it for now.


RPSL explorer can't compile files

Using Visual Studio on Windows, whenever I try to load an uncompiled .rpsl file, I get the following error:
Failed to compile RPSL 'rps_hlslc/rps-hlslc.exe "${ParentDir}\my_file.rpsl" -od ""${ParentDir}\\tmp"" -m my_file -O3 -rps-target-dll -rps-bc -cbe=0

Turns out this is because of the following line from rpsl_explorer.hpp:
rpsHlslcCmdLine << "rps_hlslc/rps-hlslc.exe \"" << pendingFileName << "\" -od \"" << tmpDir << "\" -m "
                                << moduleName << " -O3 -rps-target-dll -rps-bc -cbe=0";

Changing the line accordingly for windows fixes the issue, but will most likely not work for Linux:
rpsHlslcCmdLine << "rps_hlslc\\rps-hlslc.exe \"" << pendingFileName << "\" -od " << tmpDir << " -m "
                                << moduleName << " -O3 -rps-target-dll -rps-bc -cbe=0";

This does not happen is the file was already compiled, as the explorer fetches the already compiled version instead. This might be why the issue went unnoticed

I'll go over my repro steps:

Open project with Visual Studio Community 2019
Clean build directory and all pre-compiled rpsl files (usually in tmp folders)
Rebuild and open rpsl_explorer.exe using the default x64-Debug profile
Load ${PROJECT_DIR}/tests/gui/test_triangle.rpsl
Get this error:

Trying to load RPSL '${PROJECT_DIR}\tests\gui\test_triangle.rpsl'...
Compiling...The thread 0x8314 has exited with code 0 (0x0).
The thread 0x82d4 has exited with code 0 (0x0).

Failed to compile RPSL 'rps_hlslc/rps-hlslc.exe "${PROJECT_DIR}\tests\gui\test_triangle.rpsl" -od ""${PROJECT_DIR}\\tests\\gui\\tmp"" -m test_triangle -O3 -rps-target-dll -rps-bc -cbe=0'

Trying the provided command in the Windows command line results in the following error: 'rps_hlslc/rps-hlslc.exe' is not recognized as an internal or external command, operable program or batch file.
Powershell has a similar error message.
Looks like a dir seperator issue, so moving to a backslash (rps_hlslc\rps-hlslc.exe) solves this issue.
However we get another error:
${PROJECT_DIR}\out\build\x64-Debug\tools\rpsl_explorer> rps_hlslc\rps-hlslc.exe "${PROJECT_DIR}\tests\gui\test_triangle.rpsl" -od ""${PROJECT_DIR}\\tests\\gui\\tmp"" -m test_triangle -O3 -rps-target-dll -rps-bc -cbe=0
rps-hlslc.exe: Too many positional arguments specified!
Can specify at most 1 positional arguments: See: rps_hlslc\rps-hlslc.exe -help

Tough if I fix the double double-quote from the command, it finally works properly:
${PROJECT_DIR}\out\build\x64-Debug\tools\rpsl_explorer> rps_hlslc\rps-hlslc.exe "${PROJECT_DIR}\tests\gui\test_triangle.rpsl" -od "${PROJECT_DIR}\\tests\\gui\\tmp" -m test_triangle -O3 -rps-target-dll -rps-bc -cbe=0

${PROJECT_DIR}\out\build\x64-Debug\tools\rpsl_explorer>

It is very peculiar that even by closely following your repro steps the issue it not reproducible. Did you generate the CMake files with the build.bat file we provide.
We will nevertheless include these changes in the next update or a small maintenance one because they make sense.


Improper handling of slashes in solution files

If a solution file contains a relative path to a project with a backslash (which Visual Studio and dotnet sln add both emit), and the project uses a project type GUID that is not recognised by MSBuild, any attempts to build the solution on Linux fail with the error:
{path_to_project}.metaproj : error MSB4025: The project file could not be loaded. Could not find file '{path_to_project}.metaproj'.

It appears that the code in Microsoft.Build.Construction.ProjectInSolution.CanBeMSBuildProjectFile() is failing on Linux.
Reproduction Steps:

Create a solution file named solution.sln with the following contents:

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.26403.7
MinimumVisualStudioVersion = 10.0.40219.1
Project("AAAAAAAA-1760-4266-BCC7-CA923CBCF16C") = "project", "directory\project.proj", "{1FD5F8F7-D4D3-4760-B503-03883D7CDFD7}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{1FD5F8F7-D4D3-4760-B503-03883D7CDFD7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{1FD5F8F7-D4D3-4760-B503-03883D7CDFD7}.Debug|Any CPU.Build.0 = Debug|Any CPU
	EndGlobalSection
EndGlobal

Create a project file project.proj in a sub directory named directory with the following contents:

<Project>
  <PropertyGroup>
    <DefaultProjectTypeGuid>AAAAAAAA-1760-4266-BCC7-CA923CBCF16C</DefaultProjectTypeGuid>
  </PropertyGroup>

  <Target Name="Build">
    <Message Text="Build target for $(MSBuildProjectFile)" Importance="high" />
  </Target>
</Project>

On Linux, run dotnet msbuild solution.sln

Expected Output:
  Build target for project.proj

Actual Output:
project.proj.metaproj : error MSB4025: The project file could not be loaded. Could not find file '/homeproject.proj.metaproj'.

Workaround
Replace all backslashes in the solution file with forward slashes in the solution file.

At a quick glance, I bet we we need a MaybeAdjustFilePath() about here.

I get the same error on mac, with dotnet 1.0.3: dotnet build foo.sln.
But with msbuild/mono (even few months old 4.8.0) it works fine.
$ dotnet build -version
Microsoft (R) Build Engine version 15.1.1012.6693

I have https://github.com/mono/msbuild/commit/28dc2d47dff389c8c4ee9f4b2e6921a85fd515bb and https://github.com/mono/msbuild/commit/86adc961fedefef300b6273b22611410ac87270b . I'll open a PR.

Ah, the base patch is already in, so only the actual fix is required.

Linux, dotnet-sdk-2.0.3
Command:
dotnet msbuild /t:MyProject:build MySolution.sln

do nothing
But on windows it works. This command builds only MyProject project from the MySolution.sln


Add screenshot tests

I've raised this PR to investigate #338. The test suggest that there is a problem specifically with Linux. Images are generated, but it's not what it's meant to be.

I've had to limit one of the tests due to #357. I can't work out the problem, so I'm leaving this PR as it is for now. I still think it's worth merging as it improves the screenshot tests slightly.

tests are failing because neuromorpho is down again.


Replace bs problem comment with a link

This change is

Reviewed 1 of 1 files at r1.
Review status: all files reviewed at latest revision, 1 unresolved discussion.

docs/angular2.adoc, line 67 [r1] (raw file):
Yes, the [NOTE] notation would be better here also to be consistent with the other note about Angular 2 version requirement.
Should we also be more explicit about the error? Maybe state that "if you see errors about missing behaviors in the console, please see this known issue" or something like that.

Comments from Reviewable

Review status: 0 of 1 files reviewed at latest revision, 1 unresolved discussion.

docs/angular2.adoc, line 67 [r1] (raw file):
Done.

Comments from Reviewable

Reviewed 1 of 1 files at r2.
Review status: all files reviewed at latest revision, 1 unresolved discussion.

Comments from Reviewable

Oh, noticed that the link syntax was MarkDown instead of AsciiDoc. Fixed that already in this branch.

Reviewed 1 of 1 files at r3.
Review status: all files reviewed at latest revision, 1 unresolved discussion.

Comments from Reviewable


Dassy23/add solana plugin

Proposed changes
Added plugin for solana ledger. Built from a copy of the ethereum plugin. Some features are still to be added
For example

deploy contract
contract method call

Types of changes
What types of changes does your code introduce to agents-aea?
Put an x in the boxes that apply

[ ] Bugfix (non-breaking change which fixes an issue)
[x] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)

Checklist
Put an x in the boxes that apply.

[x] I have read the CONTRIBUTING doc
[ ] I am making a pull request against the develop branch (left side). Also you should start your branch off our develop.
[ ] Lint and unit tests pass locally with my changes and CI passes too
[x] I have added tests that prove my fix is effective or that my feature works
[ ] I have checked that code coverage does not decrease.
[ ] I have added necessary documentation (if appropriate)
[ ] Any dependent changes have been merged and published in downstream modules

Further comments
I not fully aware where else in the repo I would need to update to make this fully work like the other plugins.
Also I don't see the develop branch

Hi @Dassy23 thanks for the PR. Please make a couple of changes before we do a full review:

remove .github folder
remove .gitignore
move aea_ledger_solana from plugins/aea-ledger-solana/tests to plugins/aea-ledger-solana


Unable to read registry key with property function

Issue Description
I'm developing a NuGet package which contains a *. target file. In this target I'm reading several registry keys using $([MSBuild]::GetRegistryValueFromView(...)) (see MSDN). I'm testing my package in VS Prof and VS Community and it works flawlessly. However, when using my package in VS Code V1.56.2 it will not work. I was unable to find anything on Google. How can I make this work?
Steps to Reproduce
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <PropertyGroup>
            <RegTest>$([MSBuild]::GetRegistryValueFromView(``HKEY_CLASSES_ROOT\vscode\shell\open\command``, ``, ``Not found``, RegistryView.Registry64, RegistryView.Registry32))</RegTest>
      </PropertyGroup>
      <Target Name="Test" BeforeTargets="BeforeBuild">
            <Message Importance="High" Text="Regkey: $(RegTest)" />
      </Target>
</Project>

Expected Behavior
Value of the registry key
Actual Behavior
In VS Prof / Community I get the expected path and in VS Code I get "Not found" (Provided default value).
Logs
none
OmniSharp log
Post the output from Output-->OmniSharp log here
C# log
Post the output from Output-->C# here
Environment information
VSCode version: 1.56.2
C# Extension: 1.23.12
Dotnet Information
.NET SDK (reflecting any global.json):
 Version:   5.0.202
 Commit:    db7cc87d51
Runtime Environment:
OS Name:     Windows
OS Version:  10.0.18363
OS Platform: Windows
RID:         win10-x64
Base Path:   C:\Program Files\dotnet\sdk\5.0.202\
Host (useful for support):
Version: 5.0.5
Commit:  2f740adc14
.NET SDKs installed:
5.0.202 [C:\Program Files\dotnet\sdk]
.NET runtimes installed:
Microsoft.AspNetCore.App 3.1.14 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 5.0.5 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.NETCore.App 3.1.14 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 5.0.5 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.WindowsDesktop.App 3.1.14 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 5.0.5 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
To install additional .NET runtimes or SDKs:
https://aka.ms/dotnet-download

Visual Studio Code Extensions

Extension
Author
Version

csharp
ms-dotnettools
1.23.12

vscode-nuget-gallery
patcx
0.0.24

vscode-nuget-package-manager
jmrog
1.1.6

vscode-solution-explorer
fernandoescolar
0.4.3

Closing due to lack of activity.


Inversion Recovery: Single Voxel Curve does not update T1 in simulations

Bug discovered by @zrazi

If you do a simulation with a T1 value, it will always only simulate the curve for T1 = 600ms no matter what T1 value you give.

@zrazi - I just checked on the latest version on the master branch (Release v2.4.2) and the behaviour is working as expected. It's possible that you forgot to click on the "Update input variables" after changing your T1 value but before clicking "Update fit".

Please check to see that you have the latest qMRLab version and that you click the update button before simulating/fitting the data. If it still doesn't work, you can reopen this issue.


Document Add-MailboxPermission limit of 500 ACEs

Docs Build status updates of commit 6144b5d:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

exchange/exchange-ps/exchange/Add-MailboxPermission.md
:white_check_mark:Succeeded
View (exchange-ps)

For more details, please refer to the build report.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
For any questions, please:Try searching the docs.microsoft.com contributor guidesPost your question in the Docs support channel

Docs Build status updates of commit 8f25d39:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

exchange/exchange-ps/exchange/Add-MailboxPermission.md
:white_check_mark:Succeeded
View (exchange-ps)

For more details, please refer to the build report.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
For any questions, please:Try searching the docs.microsoft.com contributor guidesPost your question in the Docs support channel


model p4 double judge

This models the behavior from PTR that was also found to be the case on Live servers for p4.
This behavior models double judging with and without the t1 6pc tier set bonus.
It is accurate for those without the bonus.
For the 6pc bonus the only thing that will need to change is the linger time of seals from 0.4 to 6.0 seconds

Timeline comfirmed JoC janky spellhit calculation (on Judge dummy spell) is working as before. Double judge is working too.

Judge dummy spell, spellhit roll jankiness intact

APL used to get Judge to cast during GCD after a twist while both seals are still up.

it seems a strict sequence is required, because for some reason you can't cast judge from the priority list during GCD.

here's without the SoC proccing

Here's with a full twist  Auto+SoC+SoM+SoM+JoC+JoM


feat: add ApisixPluginConfig translator (#638)

Please answer these questions before submitting a pull request

Why submit this pull request?

[ ] Bugfix

[x] New feature provided

[ ] Improve performance

[ ] Backport patches

Related issues

Bugfix

Description

How to fix?

New feature or improvement

Describe the details and related test reports.

Backport patches

Why need to backport?

Source branch

Related commits and pull requests
#638
#772

Target branch

@tao12345666333
I update it temporarily.
Please review it

Did you merge code from master?

Details

Yes.
But the changes about the v2beta3 make me confused, cause my previous pr about the ApisixPluginConfig was in
the v2beta2 directory

Did you merge code from master?

Yes.
But the changes about the v2beta3 make me confused, cause my previous pr about the ApisixPluginConfig was in
the v2beta2 directory

But the changes about the v2beta3 make me confused, cause my previous pr about the ApisixPluginConfig was in
the v2beta2 directory

Yes, apiversion has been upgraded to v2beta3 from #746
You can open a new PR to upgrade ApisixPluginConfig to v2beta3.

ping @tao12345666333

But the changes about the v2beta3 make me confused, cause my previous pr about the ApisixPluginConfig was in
the v2beta2 directory

Yes, apiversion has been upgraded to v2beta3 from #746
You can open a new PR to upgrade ApisixPluginConfig to v2beta3.

But the changes about the v2beta3 make me confused, cause my previous pr about the ApisixPluginConfig was in
the v2beta2 directory

Yes, apiversion has been upgraded to v2beta3 from #746
You can open a new PR to upgrade ApisixPluginConfig to v2beta3.

ok, got it

I think the current PR can be retained.
You can create a new PR and only upgrade ApisixPluginConfig to v2beta3
You can update this PR after the merger.
Of course, if you want to completely recreate the PR, you can

I think the current PR can be retained.
You can create a new PR and only upgrade ApisixPluginConfig to v2beta3
You can update this PR after the merger.
Of course, if you want to completely recreate the PR, you can

OK, I reopen it

#792 has been merged.

#792 has been merged.

ok, I will merge it from the master first

@tao12345666333
I had push codes temporarily.
But I can't find the relationship between the TranslatorContext and the ApisixRoute correctly.
Also in the configv2beta3.ApisixPluginConfig crd the Plugins was []ApisixRouteHTTPPluginConfig, but in the internal apisixv1.PluginConfig the Plugins was not a list structure.
The problem above make me confused.

ping @tao12345666333

Sorry for delay. Let me take a look.

APISIX route should add a plugin_config_id field, refer to ApisixPluginConfig.
https://apisix.apache.org/docs/apisix/architecture-design/plugin-config/

You can do it in two steps

First complete the conversion from ApisixPluginConfig to APISIX
Binding ApisixPluginConfig on ApisixRoute

Feel free to ping me, if you have any questions.

You can do it in two steps

First complete the conversion from ApisixPluginConfig to APISIX
Binding ApisixPluginConfig on ApisixRoute

Feel free to ping me, if you have any questions.

ok, got it.

@tao12345666333
From the https://apisix.apache.org/docs/apisix/architecture-design/plugin-config/,
I thought the filed plugin_config_id maybe type int.
But in the apisixv1.Route I found the UpstreamId was type string.
// Route apisix route object
// +k8s:deepcopy-gen=true
type Route struct {
	Metadata `json:",inline" yaml:",inline"`

	Host            string           `json:"host,omitempty" yaml:"host,omitempty"`
	Hosts           []string         `json:"hosts,omitempty" yaml:"hosts,omitempty"`
	Uri             string           `json:"uri,omitempty" yaml:"uri,omitempty"`
	Priority        int              `json:"priority,omitempty" yaml:"priority,omitempty"`
	Timeout         *UpstreamTimeout `json:"timeout,omitempty" yaml:"timeout,omitempty"`
	Vars            Vars             `json:"vars,omitempty" yaml:"vars,omitempty"`
	Uris            []string         `json:"uris,omitempty" yaml:"uris,omitempty"`
	Methods         []string         `json:"methods,omitempty" yaml:"methods,omitempty"`
	EnableWebsocket bool             `json:"enable_websocket,omitempty" yaml:"enable_websocket,omitempty"`
	RemoteAddrs     []string         `json:"remote_addrs,omitempty" yaml:"remote_addrs,omitempty"`
	UpstreamId      string           `json:"upstream_id,omitempty" yaml:"upstream_id,omitempty"`
	Plugins         Plugins          `json:"plugins,omitempty" yaml:"plugins,omitempty"`
	PluginConfigId  string           `json:"plugin_config_id,omitempty" yaml:"plugin_config_id,omitempty"`
}

So I'm sure not where are the PluginConfigId from, and which type it should be.

Codecov Report

Merging #791 (ee7c93f) into master (eeb7a49) will increase coverage by 0.19%.
The diff coverage is 85.18%.

@@            Coverage Diff             @@
##           master     #791      +/-   ##
==========================================
+ Coverage   33.14%   33.33%   +0.19%
==========================================
  Files          67       68       +1
  Lines        7142     7157      +15
==========================================
+ Hits         2367     2386      +19
+ Misses       4505     4501       -4
  Partials      270      270

Impacted Files
Coverage Δ

pkg/kube/translation/translator.go
46.07% <ø> (ø)

pkg/kube/translation/apisix_route.go
21.74% <66.66%> (+0.71%)
:arrow_up:

pkg/kube/translation/apisix_pluginconfig.go
100.00% <100.00%> (ø)

pkg/kube/translation/context.go
89.47% <100.00%> (+3.75%)
:arrow_up:

Continue to review full report at Codecov.

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

e2e-test-ci failed

re-run all jobs. Thanks!

ping @tao12345666333

LGTM Thanks!
I will run CI again.

I'm confused that why the ci run failed some many times.

2021-12-20T16:46:42+08:00	debug	apisix/route.go:160	creating route	{"body": "{\"id\":\"5414bbe\",\"name\":\"ingress-apisix-e2e-tests-default-97423719_httpbin-route_rule1\",\"desc\":\"Created by apisix-ingress-controller, DO NOT modify it manually\",\"labels\":{\"managed-by\":\"apisix-ingress-controller\"},\"hosts\":[\"httpbin.org\"],\"uris\":[\"/ip\"],\"upstream_id\":\"98e966a2\",\"plugins\":{\"request-id\":{}},\"plugin_config_id\":\"60d35f19\"}", "url": "http://apisix-service-e2e-test:9180/apisix/admin/routes/5414bbe"}
2021-12-20T16:46:42+08:00	error	apisix/route.go:164	failed to create route: unexpected status code 400; error message: {"error_msg":"failed to fetch plugin config info by plugin config id [60d35f19], response code: 404"}

2021-12-20T16:46:42+08:00	warn	ingress/apisix_route.go:274	sync ApisixRoute failed, will retry	{"object": {"Type":1,"Object":{"Key":"ingress-apisix-e2e-tests-default-97423719/httpbin-route","OldObject":null,"GroupVersion":"apisix.apache.org/v2beta3"},"Tombstone":null}, "error": "1 error occurred:\n\t* unexpected status code 400; error message: {\"error_msg\":\"failed to fetch plugin config info by plugin config id [60d35f19], response code: 404\"}\n\n\n"}
2021-12-20T16:46:43+08:00	debug	ingress/apisix_route.go:177	translated ApisixRoute	{"routes": [{"id":"5414bbe","name":"ingress-apisix-e2e-tests-default-97423719_httpbin-route_rule1","desc":"Created by apisix-ingress-controller, DO NOT modify it manually","labels":{"managed-by":"apisix-ingress-controller"},"hosts":["httpbin.org"],"uris":["/ip"],"upstream_id":"98e966a2","plugins":{"request-id":{}},"plugin_config_id":"60d35f19"}], "upstreams": [{"id":"98e966a2","name":"ingress-apisix-e2e-tests-default-97423719_httpbin-service-e2e-test_80","desc":"Created by apisix-ingress-controller, DO NOT modify it manually","labels":{"managed-by":"apisix-ingress-controller"},"type":"roundrobin","nodes":[{"host":"<IP_ADDRESS>","port":80,"weight":100}],"scheme":"http"}], "apisix_route": {}}
2021-12-20T16:46:43+08:00	debug	apisix/upstream.go:136	try to create upstream	{"name": "ingress-apisix-e2e-tests-default-97423719_httpbin-service-e2e-test_80", "url": "http://apisix-service-e2e-test:9180/apisix/admin/upstreams", "cluster": "default"}
2021-12-20T16:46:43+08:00	debug	apisix/upstream.go:151	creating upstream	{"body": "{\"id\":\"98e966a2\",\"name\":\"ingress-apisix-e2e-tests-default-97423719_httpbin-service-e2e-test_80\",\"desc\":\"Created by apisix-ingress-controller, DO NOT modify it manually\",\"labels\":{\"managed-by\":\"apisix-ingress-controller\"},\"type\":\"roundrobin\",\"nodes\":[{\"host\":\"<IP_ADDRESS>\",\"port\":80,\"weight\":100}],\"scheme\":\"http\"}", "url": "http://apisix-service-e2e-test:9180/apisix/admin/upstreams/98e966a2"}
2021-12-20T16:46:43+08:00	debug	apisix/resource.go:123	got upstream: {"desc":"Created by apisix-ingress-controller, DO NOT modify it manually","hash_on":"vars","id":"98e966a2","scheme":"http","labels":{"managed-by":"apisix-ingress-controller"},"update_time":1639990003,"create_time":1639989999,"type":"roundrobin","name":"ingress-apisix-e2e-tests-default-97423719_httpbin-service-e2e-test_80","nodes":[{"priority":0,"host":"<IP_ADDRESS>","weight":100,"port":80}],"pass_host":"pass"}
2021-12-20T16:46:43+08:00	debug	apisix/route.go:144	try to create route	{"hosts": ["httpbin.org"], "name": "ingress-apisix-e2e-tests-default-97423719_httpbin-route_rule1", "cluster": "default", "url": "http://apisix-service-e2e-test:9180/apisix/admin/routes"}
2021-12-20T16:46:43+08:00	debug	apisix/route.go:160	creating route	{"body": "{\"id\":\"5414bbe\",\"name\":\"ingress-apisix-e2e-tests-default-97423719_httpbin-route_rule1\",\"desc\":\"Created by apisix-ingress-controller, DO NOT modify it manually\",\"labels\":{\"managed-by\":\"apisix-ingress-controller\"},\"hosts\":[\"httpbin.org\"],\"uris\":[\"/ip\"],\"upstream_id\":\"98e966a2\",\"plugins\":{\"request-id\":{}},\"plugin_config_id\":\"60d35f19\"}", "url": "http://apisix-service-e2e-test:9180/apisix/admin/routes/5414bbe"}
2021-12-20T16:46:43+08:00	error	apisix/route.go:164	failed to create route: unexpected status code 400; error message: {"error_msg":"failed to fetch plugin config info by plugin config id [60d35f19], response code: 404"}

2021-12-20T16:46:43+08:00	warn	ingress/apisix_route.go:274	sync ApisixRoute failed, will retry	{"object": {"Type":1,"Object":{"Key":"ingress-apisix-e2e-tests-default-97423719/httpbin-route","OldObject":null,"GroupVersion":"apisix.apache.org/v2beta3"},"Tombstone":null}, "error": "1 error occurred:\n\t* unexpected status code 400; error message: {\"error_msg\":\"failed to fetch plugin config info by plugin config id [60d35f19], response code: 404\"}\n\n\n"}
2021-12-20T16:46:44+08:00	debug	ingress/apisix_route.go:177	translated ApisixRoute	{"routes": [{"id":"5414bbe","name":"ingress-apisix-e2e-tests-default-97423719_httpbin-route_rule1","desc":"Created by apisix-ingress-controller, DO NOT modify it manually","labels":{"managed-by":"apisix-ingress-controller"},"hosts":["httpbin.org"],"uris":["/ip"],"upstream_id":"98e966a2","plugins":{"request-id":{}},"plugin_config_id":"60d35f19"}], "upstreams": [{"id":"98e966a2","name":"ingress-apisix-e2e-tests-default-97423719_httpbin-service-e2e-test_80","desc":"Created by apisix-ingress-controller, DO NOT modify it manually","labels":{"managed-by":"apisix-ingress-controller"},"type":"roundrobin","nodes":[{"host":"<IP_ADDRESS>","port":80,"weight":100}],"scheme":"http"}], "apisix_route": {}}
2021-12-20T16:46:44+08:00	debug	apisix/upstream.go:136	try to create upstream	{"name": "ingress-apisix-e2e-tests-default-97423719_httpbin-service-e2e-test_80", "url": "http://apisix-service-e2e-test:9180/apisix/admin/upstreams", "cluster": "default"}
2021-12-20T16:46:44+08:00	debug	apisix/upstream.go:151	creating upstream	{"body": "{\"id\":\"98e966a2\",\"name\":\"ingress-apisix-e2e-tests-default-97423719_httpbin-service-e2e-test_80\",\"desc\":\"Created by apisix-ingress-controller, DO NOT modify it manually\",\"labels\":{\"managed-by\":\"apisix-ingress-controller\"},\"type\":\"roundrobin\",\"nodes\":[{\"host\":\"<IP_ADDRESS>\",\"port\":80,\"weight\":100}],\"scheme\":\"http\"}", "url": "http://apisix-service-e2e-test:9180/apisix/admin/upstreams/98e966a2"}
2021-12-20T16:46:44+08:00	debug	apisix/resource.go:123	got upstream: {"desc":"Created by apisix-ingress-controller, DO NOT modify it manually","hash_on":"vars","id":"98e966a2","scheme":"http","labels":{"managed-by":"apisix-ingress-controller"},"update_time":1639990004,"create_time":1639989999,"type":"roundrobin","name":"ingress-apisix-e2e-tests-default-97423719_httpbin-service-e2e-test_80","nodes":[{"priority":0,"host":"<IP_ADDRESS>","weight":100,"port":80}],"pass_host":"pass"}
2021-12-20T16:46:44+08:00	debug	apisix/route.go:144	try to create route	{"hosts": ["httpbin.org"], "name": "ingress-apisix-e2e-tests-default-97423719_httpbin-route_rule1", "cluster": "default", "url": "http://apisix-service-e2e-test:9180/apisix/admin/routes"}
2021-12-20T16:46:44+08:00	debug	apisix/route.go:160	creating route	{"body": "{\"id\":\"5414bbe\",\"name\":\"ingress-apisix-e2e-tests-default-97423719_httpbin-route_rule1\",\"desc\":\"Created by apisix-ingress-controller, DO NOT modify it manually\",\"labels\":{\"managed-by\":\"apisix-ingress-controller\"},\"hosts\":[\"httpbin.org\"],\"uris\":[\"/ip\"],\"upstream_id\":\"98e966a2\",\"plugins\":{\"request-id\":{}},\"plugin_config_id\":\"60d35f19\"}", "url": "http://apisix-service-e2e-test:9180/apisix/admin/routes/5414bbe"}
2021-12-20T16:46:44+08:00	error	apisix/route.go:164	failed to create route: unexpected status code 400; error message: {"error_msg":"failed to fetch plugin config info by plugin config id [60d35f19], response code: 404"}

Please check the error in this CI

I meet a problem.
2021-12-22T17:18:11+08:00	debug	ingress/apisix_route.go:312	ApisixRoute add event arrived	{"object": {"metadata":{"name":"httpbin-route","namespace":"ingress-apisix-e2e-tests-default-266676929","uid":"e7a46a77-83a3-4f0f-b66e-9ffacdb79470","resourceVersion":"11216","generation":1,"creationTimestamp":"2021-12-22T09:18:11Z","annotations":{"kubectl.kubernetes.io/last-applied-configuration":"{\"apiVersion\":\"apisix.apache.org/v2beta3\",\"kind\":\"ApisixRoute\",\"metadata\":{\"annotations\":{},\"name\":\"httpbin-route\",\"namespace\":\"ingress-apisix-e2e-tests-default-266676929\"},\"spec\":{\"http\":[{\"backends\":[{\"serviceName\":\"httpbin-service-e2e-test\",\"servicePort\":80}],\"match\":{\"hosts\":[\"httpbin.com\"],\"paths\":[\"/ip\"]},\"name\":\"rule1\"}]}}\n"},"managedFields":[{"manager":"kubectl-client-side-apply","operation":"Update","apiVersion":"apisix.apache.org/v2beta3","time":"2021-12-22T09:18:11Z","fieldsType":"FieldsV1","fieldsV1":{"f:metadata":{"f:annotations":{".":{},"f:kubectl.kubernetes.io/last-applied-configuration":{}}},"f:spec":{".":{},"f:http":{}}}}]},"spec":{"http":[{"name":"rule1","match":{"paths":["/ip"],"hosts":["httpbin.com"]},"backends":[{"serviceName":"httpbin-service-e2e-test","servicePort":80,"weight":null}],"websocket":false,"authentication":{"enable":false,"type":"","keyauth":{}}}]},"status":{}}}
2021-12-22T17:18:11+08:00	debug	ingress/apisix_route.go:177	translated ApisixRoute	{"routes": [{"id":"399a015c","name":"ingress-apisix-e2e-tests-default-266676929_httpbin-route_rule1","desc":"Created by apisix-ingress-controller, DO NOT modify it manually","labels":{"managed-by":"apisix-ingress-controller"},"hosts":["httpbin.com"],"uris":["/ip"],"upstream_id":"a54fd7e2","plugin_config_id":"3441d0d1"}], "upstreams": [{"id":"a54fd7e2","name":"ingress-apisix-e2e-tests-default-266676929_httpbin-service-e2e-test_80","desc":"Created by apisix-ingress-controller, DO NOT modify it manually","labels":{"managed-by":"apisix-ingress-controller"},"type":"roundrobin","nodes":[{"host":"<IP_ADDRESS>","port":80,"weight":100}],"scheme":"http"}], "apisix_route": {}}
2021-12-22T17:18:11+08:00	debug	apisix/upstream.go:136	try to create upstream	{"name": "ingress-apisix-e2e-tests-default-266676929_httpbin-service-e2e-test_80", "url": "http://apisix-service-e2e-test:9180/apisix/admin/upstreams", "cluster": "default"}
2021-12-22T17:18:11+08:00	debug	apisix/upstream.go:151	creating upstream	{"body": "{\"id\":\"a54fd7e2\",\"name\":\"ingress-apisix-e2e-tests-default-266676929_httpbin-service-e2e-test_80\",\"desc\":\"Created by apisix-ingress-controller, DO NOT modify it manually\",\"labels\":{\"managed-by\":\"apisix-ingress-controller\"},\"type\":\"roundrobin\",\"nodes\":[{\"host\":\"<IP_ADDRESS>\",\"port\":80,\"weight\":100}],\"scheme\":\"http\"}", "url": "http://apisix-service-e2e-test:9180/apisix/admin/upstreams/a54fd7e2"}
2021-12-22T17:18:11+08:00	debug	apisix/resource.go:123	got upstream: {"desc":"Created by apisix-ingress-controller, DO NOT modify it manually","hash_on":"vars","id":"a54fd7e2","scheme":"http","pass_host":"pass","nodes":[{"host":"<IP_ADDRESS>","port":80,"weight":100,"priority":0}],"name":"ingress-apisix-e2e-tests-default-266676929_httpbin-service-e2e-test_80","update_time":1640164691,"type":"roundrobin","create_time":1640164691,"labels":{"managed-by":"apisix-ingress-controller"}}
2021-12-22T17:18:11+08:00	debug	apisix/route.go:144	try to create route	{"hosts": ["httpbin.com"], "name": "ingress-apisix-e2e-tests-default-266676929_httpbin-route_rule1", "cluster": "default", "url": "http://apisix-service-e2e-test:9180/apisix/admin/routes"}
2021-12-22T17:18:11+08:00	debug	apisix/route.go:160	creating route	{"body": "{\"id\":\"399a015c\",\"name\":\"ingress-apisix-e2e-tests-default-266676929_httpbin-route_rule1\",\"desc\":\"Created by apisix-ingress-controller, DO NOT modify it manually\",\"labels\":{\"managed-by\":\"apisix-ingress-controller\"},\"hosts\":[\"httpbin.com\"],\"uris\":[\"/ip\"],\"upstream_id\":\"a54fd7e2\",\"plugin_config_id\":\"3441d0d1\"}", "url": "http://apisix-service-e2e-test:9180/apisix/admin/routes/399a015c"}
2021-12-22T17:18:11+08:00	error	apisix/route.go:164	failed to create route: unexpected status code 400; error message: {"error_msg":"failed to fetch plugin config info by plugin config id [3441d0d1], response code: 404"}

2021-12-22T17:18:11+08:00	debug	apisix/pluginconfig.go:144	try to create pluginConfig	{"name": "ingress-apisix-e2e-tests-default-266676929_httpbin-service-e2e-test", "plugins": {}, "cluster": "default", "url": "http://apisix-service-e2e-test:9180/apisix/admin/plugin_configs"}
2021-12-22T17:18:11+08:00	debug	apisix/pluginconfig.go:160	creating pluginConfig	{"body": "{\"id\":\"3441d0d1\",\"name\":\"ingress-apisix-e2e-tests-default-266676929_httpbin-service-e2e-test\",\"desc\":\"Created by apisix-ingress-controller, DO NOT modify it manually\",\"labels\":{\"managed-by\":\"apisix-ingress-controller\"},\"plugins\":{}}", "url": "http://apisix-service-e2e-test:9180/apisix/admin/plugin_configs/3441d0d1"}
2021-12-22T17:18:11+08:00	debug	apisix/resource.go:179	got pluginConfig: {"update_time":1640164691,"labels":{"managed-by":"apisix-ingress-controller"},"name":"ingress-apisix-e2e-tests-default-266676929_httpbin-service-e2e-test","plugins":{},"id":"3441d0d1","create_time":1640164691,"desc":"Created by apisix-ingress-controller, DO NOT modify it manually"}
2021-12-22T17:18:11+08:00	warn	ingress/apisix_route.go:276	sync ApisixRoute failed, will retry	{"object": {"Type":1,"Object":{"Key":"ingress-apisix-e2e-tests-default-266676929/httpbin-route","OldObject":null,"GroupVersion":"apisix.apache.org/v2beta3"},"Tombstone":null}, "error": "1 error occurred:\n\t* unexpected status code 400; error message: {\"error_msg\":\"failed to fetch plugin config info by plugin config id [3441d0d1], response code: 404\"}\n\n\n"}
2021-12-22T17:18:11+08:00	debug	ingress/apisix_route.go:341	ApisixRoute update event arrived	{"new object": {}, "old object": {}}

I had push many times just for fixing a series of errors about failed to create route: unexpected status code 400; **** .
But it failed again and again.
Cause I still can't understand the process of the whole system.
From the ci error above, I found that the creation of the pluginconfig just after the creation of the route,
it never triggered at the same time with the upstream.
So the route always failed to create route.
Maybe if the creation of the pluginconfig happen before the route, then the ci run success.
Obviously, there were some errors in my commits, please give me some help
@tao12345666333

ping @tao12345666333

let me take a look.

@neverCase  you can check these steps https://github.com/apache/apisix-ingress-controller/blob/eff92e084dd8794dc10091380aa7cdbcf707c5dd/pkg/ingress/manifest.go#L260-L287
Their order determines the actual execution order.

@neverCase you can check these steps
https://github.com/apache/apisix-ingress-controller/blob/eff92e084dd8794dc10091380aa7cdbcf707c5dd/pkg/ingress/manifest.go#L260-L287
Their order determines the actual execution order.

Also, please check other locations in this file at the same time to ensure that the order of execution is as expected.
Thanks!

Move L282-L286 to the front of L272.
Also, please check other locations in this file at the same time to ensure that the order of execution is as expected.
Thanks!

ok, got it.
By the way, I found the some other errors from the ci.
....
W1222 17:45:44.757323       1 reflector.go:436] pkg/mod/k8s.io/client-go@v0.21.1/tools/cache/reflector.go:167: watch of *v2beta3.ApisixUpstream ended with: an error on the server ("unable to decode an event from the watch stream: unable to decode watch event: no kind \"ApisixUpstream\" is registered for version \"apisix.apache.org/v2beta3\" in scheme \"pkg/runtime/scheme.go:100\"") has prevented the request from succeeding
.....
W1222 17:45:58.030483       1 reflector.go:436] pkg/mod/k8s.io/client-go@v0.21.1/tools/cache/reflector.go:167: watch of *v2beta3.ApisixUpstream ended with: an error on the server ("unable to decode an event from the watch stream: unable to decode watch event: no kind \"ApisixUpstream\" is registered for version \"apisix.apache.org/v2beta3\" in scheme \"pkg/runtime/scheme.go:100\"") has prevented the request from succeeding

I could fix it at the same time.

I could fix it at the same time.

Great!
It looks like this is a bug, can you submit a separate PR?
Or use a separate commit for the fix, so that I can cherry-pick it to a PR

I could fix it at the same time.

Great!
It looks like this is a bug, can you submit a separate PR? Or use a separate commit for the fix, so that I can cherry-pick it to a PR

I could fix it at the same time.

Great!
It looks like this is a bug, can you submit a separate PR? Or use a separate commit for the fix, so that I can cherry-pick it to a PR

ok

@tao12345666333
There were still some errors in ci which I should fix it before.
This branch are not accepted.

Don't worry, triage/accepted means that this PR has been accepted and is under active development. It does not mean that this PR is awaiting merger.

The reason why the test case failed was because APISIX did not check whether it was referenced when deleting PluginConfig.
https://github.com/apache/apisix/issues/5917
We can modify the current implementation logic. When the user configures and needs PluginConfig, create it again.

ci show there were errors in e2e case check the ingress lb status is updated
@tao12345666333

#807
I will re-run CI jobs

It's green! Thanks @neverCase

I will do the final round of review

@neverCase Thanks for you contribution!!!
The code in this PR is LGTM.
In this PR, you not only implement the logic of the translator, but also increase the logic of the controller loop, so I hope you can add a little more content to ensure that its behavior meets our expectations.

modify the ApisixRoute CRD (only change the v2beta3 version) and add a reference to plugin Config

https://github.com/apache/apisix-ingress-controller/blob/819b00318e8cd9b6639913301fb89d2acb168926/samples/deploy/crd/v1/ApisixRoute.yaml#L580-L822

add e2e test case for ApisixRoute with PluginConfig.
you can just add a simple case, e.g.  enable echo and cors  plugin at the same time.

https://github.com/apache/apisix-ingress-controller/blob/master/test/e2e/plugins/cors.go
https://github.com/apache/apisix-ingress-controller/blob/master/test/e2e/plugins/echo.go

OK, I will update latter.

I will close this one, using #815  instead.


License & Contributing Files

@abergs -- Thanks for putting this together. Would likely be helpful to add a LICENSE.md and CONTRIBUTING.md file.
Also -- Is your intention to have everything reside in the single README file? Maybe it would be better to move this into the Github wiki?
Thanks again!

Hey @brianjking,
I agree, what would you like to them to contain? I'd happily accept a PR with your suggestions!
For now - yes. I'm doing the "Don't scale until you need too" approach, a wiki is super great but only needed if the information is too large to handle in a single structured document.
So for now I think a wiki would be more of a cost than the value it would bring :)

Done!


use Hit  insert exception

Question
when user Hit  insert has exception,
No problem with other database operations
java.lang.ClassCastException: org.apache.shardingsphere.core.optimize.transparent.statement.TransparentOptimizedStatement cannot be cast to org.apache.shardingsphere.core.optimize.sharding.statement.dml.ShardingInsertOptimizedStatement
Why？ How to solve it?
For English only, other languages will not accept.
Before asking a question, make sure you have:

Googled your question.
Searched open and closed GitHub issues.
Read documentation: ShardingSphere Doc.

Please pay attention on issues you submitted, because we maybe need more details.
If no response more than 7 days and we cannot reproduce it on current information, we will close it.

What is your version? What is your configuration and log with sql.slow?

Did you mean Hint? Can you change fix the typo?

What is your version? What is your configuration and log with sql.slow?

What is your version? What is your configuration and log with sql.show?

Thank you for your reply. I use  shardingsphere  version 4.0.0-RC2，mybatisplus version3.1.0,springBoot version 2.1.3.
The problem has been solved. The table primary key uses self-increasing primary key and is modified to “SNOWFLAKE” algorithm generation. The problem has been solved.
Thank you!


How to access programs.length outside Consumer for PageView.builder?

Hi everyone,
I am struggling to get this work.
Let's say I have this code snippets.
class ProgramList extends StatefulWidget {
	...
}

class _ProgramListState extends State<ProgramList> {
	var currentPage = programs.length - 1.0; // --> how can I access programs.length outside of consumer?

	@override
	Widget build(BuildContext context) {
    PageController controller = PageController(initialPage: programs.length - 1); // --> how can I access programs.length outside of consumer?
    controller.addListener(() {
      setState(() {
        currentPage = controller.page;
      });
    });

    return Consumer(
    	builder: (context, watch, child) {
    		final programState = watch(programProvider.state);

    		return programState.when(
    			data: (programs) {
    				return PageView.builder(
    					itemBuilder: (context, index) {
    						...
    					}
    					itemCount: programs.length; // here I can access programs.length
    					...
    				);
    			}
    		);
    	}
    );
}

Any help? Thanks.

You can call context.read(myProvider).programs.length

Thanks @rrousselGit
1 more part.
This code is outside of consumer and also outside of build method.
class _ProgramListState extends State<ProgramList> {
	var currentPage = programs.length - 1.0; // --> how can I access programs.length?
..

Any help? Thanks.

The exact same thing: context.read

It can't seem to detect the context outside of Build(), plus it's not in a method either.
Any code examples?

int currentPage

initState() {
  context.read(provider).programs.length;
}

Nice, thanks for sharing :)


Problem updating home bridge - EISDIR error

I'm trying to update from 0.4.45 to 0.4.46 via sudo npm install -g --unsafe-perm homebridge@latest (this command has worked for previous updates).
I get errors like the following:
Unhandled rejection Error: EISDIR: illegal operation on a directory, open '/Users/music/.npm/_cacache/content-v2/sha512/ec/bd'
Unhandled rejection Error: EISDIR: illegal operation on a directory, open '/Users/music/.npm/_cacache/content-v2/sha512/6f/26'
It appears to have something to do with npm, but I'm in the woods here.
THanks,
Mark

Sorted.
Reinstalled node from https://nodejs.org/en/ and it works now (using npm 6.4.1 instead of 6.5).
Sorry for not figuring it out before posting.


Add flow onErrorComplete completing when failed

refs: https://github.com/akka/akka/issues/31671
refs: https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Flux.html#onErrorComplete--

duplicated with https://github.com/apache/incubator-pekko/issues/624