npm update fails when serialport was built manually

Operating System and Hardware: Raspberry PI B+
NodeJS Version: v4.2.1
Serialport version:2.14.7
Python Version : Python 2.7.9
As said earlier at #833, I installed serialport on Raspberry PI and as there are no pre-built ARM packages, they were compiled manually by npm. Everything works fine with serialport, but another package was updated so I ran npm update and it failed for serialport now.
When I delete node_modules and run npm install again, it works as usual.
➜  ~ npm update
npm WARN engine<EMAIL_ADDRESS>wanted: {"node":"0.10.x"} (current: {"node":"4.2.1","npm":"2.14.7"})
-
><EMAIL_ADDRESS>install /home/pi/node_modules/gps/node_modules/serialport
> node-gyp rebuild

make: Entering directory '/home/pi/node_modules/gps/node_modules/serialport/build'
  CXX(target) Release/obj.target/serialport/src/serialport.o
In file included from ../src/serialport.cpp:3:0:
../src/serialport.h:30:38: error: ‘Arguments’ in namespace ‘v8’ does not name a type
 v8::Handle<v8::Value> List(const v8::Arguments& args);
                                      ^
../src/serialport.h:31:15: error: variable or field ‘EIO_List’ declared void
 void EIO_List(uv_work_t* req);
               ^
../src/serialport.h:31:15: error: ‘uv_work_t’ was not declared in this scope
../src/serialport.h:31:26: error: ‘req’ was not declared in this scope
 void EIO_List(uv_work_t* req);
                          ^
../src/serialport.h:32:20: error: variable or field ‘EIO_AfterList’ declared void
 void EIO_AfterList(uv_work_t* req);
                    ^
../src/serialport.h:32:20: error: ‘uv_work_t’ was not declared in this scope
../src/serialport.h:32:31: error: ‘req’ was not declared in this scope
 void EIO_AfterList(uv_work_t* req);
                               ^
../src/serialport.h:34:38: error: ‘Arguments’ in namespace ‘v8’ does not name a type
 v8::Handle<v8::Value> Open(const v8::Arguments& args);
                                      ^
../src/serialport.h:35:15: error: variable or field ‘EIO_Open’ declared void
 void EIO_Open(uv_work_t* req);
               ^
../src/serialport.h:35:15: error: ‘uv_work_t’ was not declared in this scope
../src/serialport.h:35:26: error: ‘req’ was not declared in this scope
 void EIO_Open(uv_work_t* req);
                          ^
../src/serialport.h:36:20: error: variable or field ‘EIO_AfterOpen’ declared void
 void EIO_AfterOpen(uv_work_t* req);
                    ^
../src/serialport.h:36:20: error: ‘uv_work_t’ was not declared in this scope
../src/serialport.h:36:31: error: ‘req’ was not declared in this scope
 void EIO_AfterOpen(uv_work_t* req);
                               ^
In file included from ../src/serialport.cpp:3:0:
../src/serialport.h:39:39: error: ‘Arguments’ in namespace ‘v8’ does not name a type
 v8::Handle<v8::Value> Write(const v8::Arguments& args);
                                       ^
../src/serialport.h:40:16: error: variable or field ‘EIO_Write’ declared void
 void EIO_Write(uv_work_t* req);
                ^
../src/serialport.h:40:16: error: ‘uv_work_t’ was not declared in this scope
../src/serialport.h:40:27: error: ‘req’ was not declared in this scope
 void EIO_Write(uv_work_t* req);
                           ^
../src/serialport.h:41:21: error: variable or field ‘EIO_AfterWrite’ declared void
 void EIO_AfterWrite(uv_work_t* req);
                     ^
../src/serialport.h:41:21: error: ‘uv_work_t’ was not declared in this scope
../src/serialport.h:41:32: error: ‘req’ was not declared in this scope
 void EIO_AfterWrite(uv_work_t* req);
                                ^
../src/serialport.h:43:39: error: ‘Arguments’ in namespace ‘v8’ does not name a type
 v8::Handle<v8::Value> Close(const v8::Arguments& args);
                                       ^
../src/serialport.h:44:16: error: variable or field ‘EIO_Close’ declared void
 void EIO_Close(uv_work_t* req);
                ^
../src/serialport.h:44:16: error: ‘uv_work_t’ was not declared in this scope
../src/serialport.h:44:27: error: ‘req’ was not declared in this scope
 void EIO_Close(uv_work_t* req);
                           ^
../src/serialport.h:45:21: error: variable or field ‘EIO_AfterClose’ declared void
 void EIO_AfterClose(uv_work_t* req);
                     ^
../src/serialport.h:45:21: error: ‘uv_work_t’ was not declared in this scope
../src/serialport.h:45:32: error: ‘req’ was not declared in this scope
 void EIO_AfterClose(uv_work_t* req);
                                ^
../src/serialport.h:47:39: error: ‘Arguments’ in namespace ‘v8’ does not name a type
 v8::Handle<v8::Value> Flush(const v8::Arguments& args);
                                       ^
../src/serialport.h:48:16: error: variable or field ‘EIO_Flush’ declared void
 void EIO_Flush(uv_work_t* req);
                ^
../src/serialport.h:48:16: error: ‘uv_work_t’ was not declared in this scope
../src/serialport.h:48:27: error: ‘req’ was not declared in this scope
 void EIO_Flush(uv_work_t* req);
                           ^
../src/serialport.h:49:21: error: variable or field ‘EIO_AfterFlush’ declared void
 void EIO_AfterFlush(uv_work_t* req);
                     ^
../src/serialport.h:49:21: error: ‘uv_work_t’ was not declared in this scope
../src/serialport.h:49:32: error: ‘req’ was not declared in this scope
 void EIO_AfterFlush(uv_work_t* req);
                                ^
../src/serialport.h:89:3: error: ‘uv_work_t’ does not name a type
   uv_work_t req;
   ^
../src/serialport.h:90:3: error: ‘ngx_queue_t’ does not name a type
   ngx_queue_t queue;
   ^
In file included from ../src/serialport.cpp:8:0:
../src/serialport_poller.h:10:50: error: expected class-name before ‘{’ token
 class SerialportPoller : public node::ObjectWrap {
                                                  ^
../src/serialport_poller.h:23:46: error: ‘Arguments’ in namespace ‘v8’ does not name a type
   static v8::Handle<v8::Value> New(const v8::Arguments& args);
                                              ^
../src/serialport_poller.h:24:48: error: ‘Arguments’ in namespace ‘v8’ does not name a type
   static v8::Handle<v8::Value> Close(const v8::Arguments& args);
                                                ^
../src/serialport_poller.h:25:48: error: ‘Arguments’ in namespace ‘v8’ does not name a type
   static v8::Handle<v8::Value> Start(const v8::Arguments& args);
                                                ^
../src/serialport_poller.h:27:3: error: ‘uv_poll_t’ does not name a type
   uv_poll_t poll_handle_;
   ^
../src/serialport.cpp:11:1: error: ‘uv_mutex_t’ does not name a type
 uv_mutex_t write_queue_mutex;
 ^
../src/serialport.cpp:12:1: error: ‘ngx_queue_t’ does not name a type
 ngx_queue_t write_queue;
 ^
../src/serialport.cpp:14:38: error: ‘Arguments’ in namespace ‘v8’ does not name a type
 v8::Handle<v8::Value> Open(const v8::Arguments& args) {
                                      ^
In file included from /home/pi/.node-gyp/4.2.1/include/node/node.h:42:0,
                 from ../src/serialport.h:5,
                 from ../src/serialport.cpp:3:
/home/pi/.node-gyp/4.2.1/include/node/v8.h: In function ‘v8::Handle<v8::Value> Open(const int&)’:
/home/pi/.node-gyp/4.2.1/include/node/v8.h:885:13: error: ‘v8::HandleScope::HandleScope()’ is protected
   V8_INLINE HandleScope() {}
             ^
../src/serialport.cpp:15:19: error: within this context
   v8::HandleScope scope;
                   ^
../src/serialport.cpp:17:18: error: ‘write_queue_mutex’ was not declared in this scope
   uv_mutex_init(&write_queue_mutex);
                  ^
../src/serialport.cpp:17:35: error: ‘uv_mutex_init’ was not declared in this scope
   uv_mutex_init(&write_queue_mutex);
                                   ^
../src/serialport.cpp:18:19: error: ‘write_queue’ was not declared in this scope
   ngx_queue_init(&write_queue);
                   ^
../src/serialport.cpp:18:30: error: ‘ngx_queue_init’ was not declared in this scope
   ngx_queue_init(&write_queue);
                              ^
../src/serialport.cpp:21:13: error: invalid types ‘const int[int]’ for array subscript
   if(!args[0]->IsString()) {
             ^
../src/serialport.cpp:22:18: error: ‘class v8::HandleScope’ has no member named ‘Close’
     return scope.Close(v8::ThrowException(v8::Exception::TypeError(v8::String::New("First argument must be a string"))));
                  ^
../src/serialport.cpp:22:24: error: ‘ThrowException’ is not a member of ‘v8’
     return scope.Close(v8::ThrowException(v8::Exception::TypeError(v8::String::New("First argument must be a string"))));
                        ^
../src/serialport.cpp:22:68: error: ‘New’ is not a member of ‘v8::String’
     return scope.Close(v8::ThrowException(v8::Exception::TypeError(v8::String::New("First argument must be a string"))));
                                                                    ^
../src/serialport.cpp:24:36: error: invalid types ‘const int[int]’ for array subscript
   v8::String::Utf8Value path(args[0]->ToString());
                                    ^
../src/serialport.cpp:27:13: error: invalid types ‘const int[int]’ for array subscript
   if(!args[1]->IsObject()) {
             ^
../src/serialport.cpp:28:18: error: ‘class v8::HandleScope’ has no member named ‘Close’
     return scope.Close(v8::ThrowException(v8::Exception::TypeError(v8::String::New("Second argument must be an object"))));
                  ^
../src/serialport.cpp:28:24: error: ‘ThrowException’ is not a member of ‘v8’
     return scope.Close(v8::ThrowException(v8::Exception::TypeError(v8::String::New("Second argument must be an object"))));
                        ^
../src/serialport.cpp:28:68: error: ‘New’ is not a member of ‘v8::String’
     return scope.Close(v8::ThrowException(v8::Exception::TypeError(v8::String::New("Second argument must be an object"))));
                                                                    ^
../src/serialport.cpp:30:41: error: invalid types ‘const int[int]’ for array subscript
   v8::Local<v8::Object> options = args[1]->ToObject();
                                         ^
../src/serialport.cpp:33:13: error: invalid types ‘const int[int]’ for array subscript
   if(!args[2]->IsFunction()) {
             ^
../src/serialport.cpp:34:18: error: ‘class v8::HandleScope’ has no member named ‘Close’
     return scope.Close(v8::ThrowException(v8::Exception::TypeError(v8::String::New("Third argument must be a function"))));
                  ^
../src/serialport.cpp:34:24: error: ‘ThrowException’ is not a member of ‘v8’
     return scope.Close(v8::ThrowException(v8::Exception::TypeError(v8::String::New("Third argument must be a function"))));
                        ^
../src/serialport.cpp:34:68: error: ‘New’ is not a member of ‘v8::String’
     return scope.Close(v8::ThrowException(v8::Exception::TypeError(v8::String::New("Third argument must be a function"))));
                                                                    ^
../src/serialport.cpp:36:41: error: invalid types ‘const int[int]’ for array subscript
   v8::Local<v8::Value> callback = args[2];
                                         ^
../src/serialport.cpp:41:34: error: ‘New’ is not a member of ‘v8::String’
   baton->baudRate = options->Get(v8::String::New("baudRate"))->ToInt32()->Int32Value();
                                  ^
../src/serialport.cpp:42:34: error: ‘New’ is not a member of ‘v8::String’
   baton->dataBits = options->Get(v8::String::New("dataBits"))->ToInt32()->Int32Value();
                                  ^
../src/serialport.cpp:43:36: error: ‘New’ is not a member of ‘v8::String’
   baton->bufferSize = options->Get(v8::String::New("bufferSize"))->ToInt32()->Int32Value();
                                    ^
../src/serialport.cpp:44:45: error: ‘New’ is not a member of ‘v8::String’
   baton->parity = ToParityEnum(options->Get(v8::String::New("parity"))->ToString());
                                             ^
../src/serialport.cpp:45:48: error: ‘New’ is not a member of ‘v8::String’
   baton->stopBits = ToStopBitEnum(options->Get(v8::String::New("stopBits"))->ToNumber()->NumberValue());
                                                ^
../src/serialport.cpp:46:32: error: ‘New’ is not a member of ‘v8::String’
   baton->rtscts = options->Get(v8::String::New("rtscts"))->ToBoolean()->BooleanValue();
                                ^
../src/serialport.cpp:47:29: error: ‘New’ is not a member of ‘v8::String’
   baton->xon = options->Get(v8::String::New("xon"))->ToBoolean()->BooleanValue();
                             ^
../src/serialport.cpp:48:30: error: ‘New’ is not a member of ‘v8::String’
   baton->xoff = options->Get(v8::String::New("xoff"))->ToBoolean()->BooleanValue();
                              ^
../src/serialport.cpp:49:30: error: ‘New’ is not a member of ‘v8::String’
   baton->xany = options->Get(v8::String::New("xany"))->ToBoolean()->BooleanValue();
                              ^
../src/serialport.cpp:52:60: error: no matching function for call to ‘v8::Persistent<v8::Value>::New(v8::Local<v8::Value>&)’
   baton->callback = v8::Persistent<v8::Value>::New(callback);
                                                            ^
../src/serialport.cpp:52:60: note: candidate is:
In file included from /home/pi/.node-gyp/4.2.1/include/node/node.h:42:0,
                 from ../src/serialport.h:5,
                 from ../src/serialport.cpp:3:
/home/pi/.node-gyp/4.2.1/include/node/v8.h:7181:4: note: static T* v8::PersistentBase<T>::New(v8::Isolate*, T*) [with T = v8::Value]
 T* PersistentBase<T>::New(Isolate* isolate, T* that) {
    ^
/home/pi/.node-gyp/4.2.1/include/node/v8.h:7181:4: note:   candidate expects 2 arguments, 1 provided
../src/serialport.cpp:53:69: error: ‘New’ is not a member of ‘v8::String’
   baton->dataCallback = v8::Persistent<v8::Value>::New(options->Get(v8::String::New("dataCallback")));
                                                                     ^
../src/serialport.cpp:54:77: error: ‘New’ is not a member of ‘v8::String’
   baton->disconnectedCallback = v8::Persistent<v8::Value>::New(options->Get(v8::String::New("disconnectedCallback")));
                                                                             ^
../src/serialport.cpp:55:70: error: ‘New’ is not a member of ‘v8::String’
   baton->errorCallback = v8::Persistent<v8::Value>::New(options->Get(v8::String::New("errorCallback")));
                                                                      ^
../src/serialport.cpp:57:3: error: ‘uv_work_t’ was not declared in this scope
   uv_work_t* req = new uv_work_t();
   ^
../src/serialport.cpp:57:14: error: ‘req’ was not declared in this scope
   uv_work_t* req = new uv_work_t();
              ^
../src/serialport.cpp:57:24: error: expected type-specifier before ‘uv_work_t’
   uv_work_t* req = new uv_work_t();
                        ^
../src/serialport.cpp:59:33: error: ‘uv_default_loop’ was not declared in this scope
   uv_queue_work(uv_default_loop(), req, EIO_Open, (uv_after_work_cb)EIO_AfterOpen);
                                 ^
../src/serialport.cpp:59:41: error: ‘EIO_Open’ was not declared in this scope
   uv_queue_work(uv_default_loop(), req, EIO_Open, (uv_after_work_cb)EIO_AfterOpen);
                                         ^
../src/serialport.cpp:59:52: error: ‘uv_after_work_cb’ was not declared in this scope
   uv_queue_work(uv_default_loop(), req, EIO_Open, (uv_after_work_cb)EIO_AfterOpen);
                                                    ^
../src/serialport.cpp:59:82: error: ‘uv_queue_work’ was not declared in this scope
   uv_queue_work(uv_default_loop(), req, EIO_Open, (uv_after_work_cb)EIO_AfterOpen);
                                                                                ^
../src/serialport.cpp:61:16: error: ‘class v8::HandleScope’ has no member named ‘Close’
   return scope.Close(v8::Undefined());
                ^
../src/serialport.cpp:61:36: error: too few arguments to function ‘v8::Local<v8::Primitive> v8::Undefined(v8::Isolate*)’
   return scope.Close(v8::Undefined());
                                    ^
In file included from /home/pi/.node-gyp/4.2.1/include/node/node.h:42:0,
                 from ../src/serialport.h:5,
                 from ../src/serialport.cpp:3:
/home/pi/.node-gyp/4.2.1/include/node/v8.h:315:27: note: declared here
   friend Local<Primitive> Undefined(Isolate* isolate);
                           ^
../src/serialport.cpp: At global scope:
../src/serialport.cpp:64:20: error: variable or field ‘EIO_AfterOpen’ declared void
 void EIO_AfterOpen(uv_work_t* req) {
                    ^
../src/serialport.cpp:64:20: error: ‘uv_work_t’ was not declared in this scope
../src/serialport.cpp:64:31: error: ‘req’ was not declared in this scope
 void EIO_AfterOpen(uv_work_t* req) {
                               ^
../src/serialport.cpp: In function ‘v8::Handle<v8::Value> Open(const int&)’:
../src/serialport.cpp:62:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
serialport.target.mk:88: recipe for target 'Release/obj.target/serialport/src/serialport.o' failed
make: *** [Release/obj.target/serialport/src/serialport.o] Error 1
make: Leaving directory '/home/pi/node_modules/gps/node_modules/serialport/build'
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:270:23)
gyp ERR! stack     at emitTwo (events.js:87:13)
gyp ERR! stack     at ChildProcess.emit (events.js:172:7)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12)
gyp ERR! System Linux 4.4.8+
gyp ERR! command "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/pi/node_modules/gps/node_modules/serialport
gyp ERR! node -v v4.2.1
gyp ERR! node-gyp -v v3.0.3
gyp ERR! not ok
npm ERR! Linux 4.4.8+
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "update"
npm ERR! node v4.2.1
npm ERR! npm  v2.14.7
npm ERR! code ELIFECYCLE

npm ERR<EMAIL_ADDRESS>install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the<EMAIL_ADDRESS>install script 'node-gyp rebuild'.
npm ERR! This is most likely a problem with the serialport package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node-gyp rebuild
npm ERR! You can get their info via:
npm ERR!     npm owner ls serialport
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /home/pi/npm-debug.log

#833 was about the installation of<EMAIL_ADDRESS><EMAIL_ADDRESS>is currently the latest non-beta version of serialport and it works fine with Node.js v4.2.1 (which is the version of Node.js for this issue  and #833.) However, this issue is being reported for<EMAIL_ADDRESS><EMAIL_ADDRESS>was released many years ago and doesn't support Node.js v4.2.1. The gps package which is being installed here appears to depend on<EMAIL_ADDRESS>so it can't function correctly with Node.js v4.1.2.

But why does this problem occur only for updates? The dependency of gps works fine for an installation and should use any version (preferable the newest).

The information returned by npm info gps shows that<EMAIL_ADDRESS>which is the highest version of gps, was released on '2013-10-04T16:29:15.812Z', which was a long time ago. On the other hand<EMAIL_ADDRESS>was released on '2016-06-09T15:16:20.695Z', which was yesterday, but there is already the higher version v0.1.0 from 2013.
npm update will update all the packages to the latest version respecting semver. To me, this means it will attempt to install<EMAIL_ADDRESS>The package.json file for<EMAIL_ADDRESS>contains the following dependencies which means it depends on<EMAIL_ADDRESS>  "dependencies": {
    "serialport": "~1.2.2"
  }

Given that you're the author of gps, I'd suggest publishing a new version on npm with a version number higher than v0.1.0. Then try everything again to see if it works.
pi@raspberrypi:~ $ npm info gps

{ name: 'gps',
  description: 'A GPS NMEA parser library',
  'dist-tags': { latest: '0.0.10' },
  versions: [ '0.0.6', '0.0.7', '0.0.8', '0.0.9', '0.0.10', '0.1.0' ],
  maintainers:
   [ 'andrewnez<EMAIL_ADDRESS>     'infusion<EMAIL_ADDRESS>],
  time:
   { modified: '2016-06-09T15:16:20.695Z',
     created: '2013-10-04T16:29:12.642Z',
     '0.1.0': '2013-10-04T16:29:15.812Z',
     '0.0.6': '2016-03-28T12:11:09.457Z',
     '0.0.7': '2016-04-05T13:40:30.024Z',
     '0.0.8': '2016-04-07T17:14:40.122Z',
     '0.0.9': '2016-05-29T09:54:16.506Z',
     '0.0.10': '2016-06-09T15:16:20.695Z' },
  author: 'Robert Eisele<EMAIL_ADDRESS>(http://www.xarg.org/)',
  repository: { type: 'git', url: 'git://github.com/infusion/GPS.js.git' },
  homepage: 'https://github.com/infusion/GPS.js',
  keywords:
   [ 'nmea',
     'gps',
     'serial',
     'parser',
     'distance',
     'geo',
     'location',
     'rmc',
     'gga',
     'gll',
     'gsa',
     'vtg',
     'gva' ],
  bugs: { url: 'https://github.com/infusion/GPS.js/issues' },
  readmeFilename: 'README.md',
  license: 'MIT OR GPL-2.0',
  title: 'gps.js',
  version: '0.0.10',
  main: 'gps',
  private: false,
  directories: { example: 'examples' },
  engines: { node: '*' },
  scripts: { test: 'mocha tests/*.js' },
  devDependencies:
   { express: '*',
     'socket.io': '*',
     serialport: '*',
     angles: '*',
     mocha: '*',
     chai: '*',
     byline: '*' },
  gitHead: '6307aaa76f1ca05b00a05a013e60a74c44906e6b',
  dist:
   { shasum: 'd0cc2fb3d65cc29cfacddcd48172b2d1ce6f0708',
     tarball: 'https://registry.npmjs.org/gps/-/gps-0.0.10.tgz' } }

Ouch! That explains a lot, thanks!


coqPackages.mathcomp: 1.6.4 -> 1.7.0

Motivation for this change
New release, compatible with Coq 8.8.
Things done

[ ] Tested using sandboxing (nix.useSandbox on NixOS, or option build-use-sandbox in nix.conf on non-NixOS)
Built on platform(s)

[ ] NixOS
[x] macOS
[ ] other Linux distributions

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nox --run "nox-review wip"
[ ] Tested execution of all binary files (usually in ./result/bin/)
[x] Fits CONTRIBUTING.md.

@GrahamcOfBorg build coqPackages.ssreflect

Success on x86_64-linux (full log)
Attempted: coqPackages.ssreflect
Partial log (click to expand)
INSTALL ssrmatching.glob /nix/store/swmkz18sbflsbm9682rl16hfqy1cir9a-coq8.7-ssreflect-1.7.0/lib/coq/8.7/user-contrib/mathcomp/ssreflect/
/nix/store/swmkz18sbflsbm9682rl16hfqy1cir9a-coq8.7-ssreflect-1.7.0
make[1]: Entering directory '/build/math-comp-mathcomp-1.7.0/mathcomp/ssreflect'
make[1]: Leaving directory '/build/math-comp-mathcomp-1.7.0/mathcomp/ssreflect'
post-installation fixup
shrinking RPATHs of ELF executables and libraries in /nix/store/swmkz18sbflsbm9682rl16hfqy1cir9a-coq8.7-ssreflect-1.7.0
strip is /nix/store/j75dgadrff2d1fyc4fczmcgqkid2imdx-binutils-2.30/bin/strip
stripping (with command strip and flags -S) in /nix/store/swmkz18sbflsbm9682rl16hfqy1cir9a-coq8.7-ssreflect-1.7.0/lib
patching script interpreter paths in /nix/store/swmkz18sbflsbm9682rl16hfqy1cir9a-coq8.7-ssreflect-1.7.0
checking for references to /build in /nix/store/swmkz18sbflsbm9682rl16hfqy1cir9a-coq8.7-ssreflect-1.7.0...

@GrahamcOfBorg build coqPackages.mathcomp

Success on x86_64-linux (full log)
Attempted: coqPackages.mathcomp
Partial log (click to expand)
INSTALL ssreflect/ssrmatching.glob /nix/store/8xbl0nsmck8qsxwdaz19zkz41b3d9add-coq8.7-mathcomp-1.7.0/lib/coq/8.7/user-contrib/mathcomp/ssreflect/
INSTALL ssreflect/tuple.glob /nix/store/8xbl0nsmck8qsxwdaz19zkz41b3d9add-coq8.7-mathcomp-1.7.0/lib/coq/8.7/user-contrib/mathcomp/ssreflect/
make[1]: Entering directory '/build/math-comp-mathcomp-1.7.0/mathcomp'
make[1]: Leaving directory '/build/math-comp-mathcomp-1.7.0/mathcomp'
post-installation fixup
shrinking RPATHs of ELF executables and libraries in /nix/store/8xbl0nsmck8qsxwdaz19zkz41b3d9add-coq8.7-mathcomp-1.7.0
strip is /nix/store/j75dgadrff2d1fyc4fczmcgqkid2imdx-binutils-2.30/bin/strip
stripping (with command strip and flags -S) in /nix/store/8xbl0nsmck8qsxwdaz19zkz41b3d9add-coq8.7-mathcomp-1.7.0/lib
patching script interpreter paths in /nix/store/8xbl0nsmck8qsxwdaz19zkz41b3d9add-coq8.7-mathcomp-1.7.0
checking for references to /build in /nix/store/8xbl0nsmck8qsxwdaz19zkz41b3d9add-coq8.7-mathcomp-1.7.0...

Failure on aarch64-linux (full log)
Attempted: coqPackages.mathcomp
Partial log (click to expand)
make[1]: *** [Makefile:465: opt.opt] Error 2
make[1]: Leaving directory '/build/ocaml-4.05.0'
make: *** [Makefile:531: world.opt] Error 2
builder for '/nix/store/ajqgdzi3mmwacpk8mzfja0ivpxhdxwsh-ocaml-4.05.0.drv' failed with exit code 2
cannot build derivation '/nix/store/7jxml82rf7wmiy5q8s2mgvlr75fn3cdw-camlp5-7.05.drv': 1 dependencies couldn't be built
cannot build derivation '/nix/store/5x5n70dmc57054071j059pk0gpjdhvp3-ocaml-findlib-1.7.3.drv': 1 dependencies couldn't be built
cannot build derivation '/nix/store/v6c7iad3d7pq047z1bh2fcmc21abq19d-lablgtk-2.18.5.drv': 2 dependencies couldn't be built
cannot build derivation '/nix/store/6hr9fswrh237lcngn185j8r27zr70h22-coq-8.7.2.drv': 4 dependencies couldn't be built
cannot build derivation '/nix/store/0nz8hyiinwr53qzpliv611sa375bdrwq-coq8.7-mathcomp-1.7.0.drv': 4 dependencies couldn't be built
error: build of '/nix/store/0nz8hyiinwr53qzpliv611sa375bdrwq-coq8.7-mathcomp-1.7.0.drv' failed


Adding fix for Issue#10370 ...Changing PrefManager to use project default path for new docs

#10370  Changed _buildContext in PreferenceManager to use the project path in case of untitled documents

We had some discussions early with this prefs system about handling of files that aren't in the project. Applying project configuration to a file that's not in the project is likely to cause confusion because of differences in indentation, linting settings, etc.
I totally agree with the premise: untitled files should use the project prefs, but I think you'd want to use a mechanism that restricts this change to just untitled files.

@dangoor I think it depends on the feature...  For features that aren't really file-specific, it could be very confusing to lose the project-level settings when you happen to have an external file active.  E.g. if you run Find in Files you may not get the right filters.  I think we decided that the right fix there is to have features like that explicitly request the root project scope when fetching prefs, instead of the default current-file-driven scope... but that was never implemented afaik.
For Untitled files, it could be weird if you ultimately save to a path outside the project -- it would use the project's settings while untitled but then switch to default settings once saved, which seems a bit unexpected.  Maybe that's still the lesser of two evils, but I'm not 100% convinced...

@peterflynn Requesting project prefs should work with PreferencesManager.get("key", PreferencesManager.CURRENT_PROJECT).
One thing I forgot to mention in my first response was that for files outside of the project it would ultimately be good to search for .brackets.json (or .editorconfig) above the file that's outside of project scope. This adds a fair bit of complexity, though, which is why we didn't implement this initially.
Regarding Untitled files, it seems like you only have two options:

Use only the user-level prefs (the current behavior?)
Use the project settings

The user experience is off in option 1 if the user does save in their project, and it's off in option 2 if they save outside of the project. I'm guessing that creating a new file within the project is likely to be the more common case, which would make option 2 better.

The experience wouldn't be off in option 2 if files outside the project still use the project's settings rather than the global default.  You're right that the ideal is to look up the folder tree to try to find some other project settings file for external files... I think the sticking point there was that we didn't want to make prefs fetches async.  (Maybe we could solve that by giving DocumentManager some side channel to tell PrefsManager to pre-cache that info before the Document-creation promise resolves... but that's getting pretty far afield of this PR).
Anyway, to avoid controversy it seems best for this PR to only apply to Untitled documents for now.  @prksingh one way we could do that is to add a DocumentManager.isUntitledPath() API, so that PreferencesManager could check for specifically untitled files without having to know what the special dummy paths look like.  (It could also be "semi-private," with _ prefix, if we don't think anyone other than PrefsManager should have a valid reason to call it).

Yes, you're right that if files outside the project scope use the project settings then there would be no disconnect.
Not to get too far off of this PR, but I wanted to note that since prefs have events for changes, it is possible to asynchronously search for preferences files up the file tree, as editorconfig does, while still having synchronous prefs lookups. Whenever a new prefs file is encountered, change events would be fired for the prefs present in the file, causing everything to update as needed.
It seems reasonable to ask on brackets-dev what people think about using project prefs for files outside of the project. The least intrusive way to fix the issue discussed here is what you suggest at the end: just apply to Untitled documents for now.

@dangoor Btw, PreferencesManager.get("key", PreferencesManager.CURRENT_PROJECT) doesn't work -- PreferencesManager._getContext() -> _buildContext() blows away the scope order and replaces it with one for the current file.  Bug?
The inline editor uses some special code to get at project prefs -- but that's a different case where it's dealing with view state (which has no project scope, but has a project layer), and it wants to force writing to project-specific prefs even if there's no current project-specific value set.  In that case a seemingly different prefs bug API bug was at play that I think we talked about over email last fall:

it seems like if you call:
PreferencesManager.setViewState(“foo”, value, { location : { scope: "user", layer: "project" } })
…the preference is silently dropped on the floor.  We get to ProjectLayer.set(), and getPreferenceLocation() returns undefined if the preference isn’t already set for the current project.  You have to specify layerID explicitly or it won’t work.

One thing that was confusing to me is that the ProjectLayer.set() docs seem to say layerID is optional: “If no layerID is provided, then the current project path is used.”

For simple retrieval, I think maybe you just need to make an object where scopeOrder matches PreferencesManager.CURRENT_PROJECT but there's an added path field set to the project root folder.

@peterflynn Yes, I think you're right that the behavior of PreferencesManager.get("key", PreferencesManager.CURRENT_PROJECT) should be considered a bug. I think the contextBuilder is relatively new.

I have added DocumentManager.isUntitledPath API but calling it directly from PrefManager is causing a cyclic dependency error (DocumentManager has a dependency on PreferenceManager) . Since ProjectManager already has a DocumentManager reference, I have moved the untitled check there.
@peterflynn Can you review this?


Link to bash-modules project is added.

Link to bash-modules project is added to Shell script development section.

This is self promotion. Please disclose it.

This is self-promotion. How to disclose it and where?

Well, in the PR you could have pointed this out.  Still, I think it is valid and belongs to this list.


kubedb-catalog chart is not installing

Helm does not install pre-release charts by default. We need to either provide --version or --devel
https://github.com/helm/helm/issues/4186#issuecomment-395292348


Constructing object on chained proxy

In the functiontrap we don't create an object if the target itself is proxy. However as we provide NewTarget flag, the nested functiontrap will try to take the args[0] which later
leads to Assert as it was null.
Fixed that by constructing an object if the args[0] is null even if the NewTarget flag is passed.

@boingoing @aneeshdk please have a look.

@dotnet-bot test Windows arm_debug please

thanks @boingoing


Make it easier to write cross-platform code with serde

Right now serde supports no_std in that it has an std feature, and an alloc feature, and it supports having neither of them turned on.
But, if std and alloc feature are both used, it usually causes build failures.
This is because there is an interface change at the following lines:
#[cfg(feature = "std")]
declare_error_trait!(Error: Sized + error::Error);

#[cfg(not(feature = "std"))]
declare_error_trait!(Error: Sized + Debug + Display);

My use case is that I am working on servers that contain SGX enclaves. The server (untrusted) part can use std because it has the OS available, but the enclave (trusted) part, cannot use std, because there is no trusted OS inside the enclave.
In principle, it should be very convenient to use serde to pass messages between the server and the enclave, because it avoids adding more build steps for serialization, and ensures a single-source-of-truth for the serialization schema. And there's no reason that serde should not work in the enclave.
(There is the issue of std::collections::HashMap not being available outside of std but this is not a problem.)
The real problem is that std::error::Error does not exist in core, because the devs have declined to move it there.
An alternate solution is to use the failure crate instead of std::error module, which provides the same functionality with some improvements, and without requiring std.
It would also be great if there were a way to use serde so that the interface does not break between std and alloc settings. Why use std::error at all? Can we just use Debug + Display in all cases?
The current case basically means that anyone who wants to use serde in a cross-platform crate that works with both std and nostd contexts, must expose std and alloc features mirroring serde, and if these features get confused at any point, the build fails in strange ways.
It would be a lot simpler to write cross platform code if, code that doesn't need std can simply omit std, and then be used as a dependency of code that does need serde/std (for example to serialize a hash map), without causing a build failure within serde. This would prevent serde dependency from infecting the entire project with std and alloc feature flags.
Is there any interest from developers in reconciling the differences between these two lines?

#[cfg(feature = "std")]
declare_error_trait!(Error: Sized + error::Error);

#[cfg(not(feature = "std"))]
declare_error_trait!(Error: Sized + Debug + Display);

I am strongly considering patching serde in my project to always use the Debug + Display version even when std is on, because I think all my dependencies will still work fine -- the error::Error trait is mostly useless.

Note on why std::error::Error is not in libcore: https://github.com/rust-lang/rust/blob/19d3dab31b1fca3abc3ba00173b9148bd70d24b0/src/libstd/error.rs#L39-L48

I realized this is basically a repost of this: https://github.com/serde-rs/serde/issues/1567

I guess this might be mooted if the lang team does this? https://github.com/rust-lang/rust/issues/62502

I believe this is fixed with the reexports in 1.0.100:
https://github.com/serde-rs/serde/releases/tag/v1.0.100
Data formats can provide the right Error impl whether or not Serde is built with "std" by writing:
impl serde::ser::StdError for MySerError {}

impl serde::de::StdError for MyDeError {}


⚠ Young Discoverers has degraded performance

In 160cf08, Young Discoverers (https://youngdiscoverers.org.au) experienced degraded performance:

HTTP code: 200
Response time: 5454 ms

Resolved: Young Discoverers performance has improved in 8d3f6b7.


Raise minimum CMake version to 3.22

Subject of the issue
The oldest OS that someone may reasonably use with SFML 3 is Ubuntu 20 LTS which ships with CMake 3.16, hence the fact that SFML 3 currently requires CMake 3.16. However if you ignore Ubuntu 20 LTS, the next oldest CMake version we expect to find in the wild is CMake 3.22 which ships with Ubuntu 22 LTS. Anyone on Windows or macOS is likely to be using something even newer than 3.22.
I propose we raise the minimum CMake require to 3.22. In this issue I want to keep tabs on all the features I'd like to use but can't until we raise this requirement. I plan on growing this list over time to help reinforce my argument. Bear in mind that users on Ubuntu 20 can still use SFML 3, they simply need to install a newer version of CMake which is quite easy.

Numerous improved defaults - See all the new policies that have been introduced between 3.16 and 3.22. Each new policy represents an improved default value which we opt into by increasing the minimum required vision.
Presets - Arguably we could start using this today since it doesn't necessarily impact the minimum CMake version to build SFML but nonetheless it's a CMake 3.19 features that has had significant updates in every minor release since then. Presets as of CMake 3.22 are fleshed out and very useful.
PROJECT_IS_TOP_LEVEL - There are two places where we are using a less expressive alternative to approximate what this built-in variable does.
TARGET_RUNTIME_DLLS - This generator expression provides a more convenient option for automatically copying all upstream DLLs to wherever they are needed. The CMake project template already takes advantage of this.
Policy 0110 - Allows for spaces and special characters in test names. This lets us add new tests that match Catch2's test name style that uses brackets and spaces.

Debian 11 (Bullseye) which is the future LTS

It may be the future of LTS but LTS itself uses 3.22 already. I frankly don't mind telling Debian Stable users to upgrade their CMake. I wager we have very few of them anyways.

https://en.wikipedia.org/wiki/Debian_version_history
Looks like the next Debian Stable release is around the corner in June so we can focus on that release rather than concerning ourselves too much with the current Debian Stable release.

I frankly don't mind telling Debian Stable users to upgrade their CMake.

The main concern wasn't about the user building SFML, but more whether SFML can be packaged as Debian package if it requires a newer version of CMake.
I guess they could introduce a custom patch if necessary.
If it brings benefits to SFML let's just go ahead and see where we land on the Debian side, once we get there


[Feature Request]: Feed Mahoney AHRS filter data into Kalman filter

What is the Desired Behavior?
Use a multi-dimensional Kalman filter to increase Mahoney accuracy, add heading bias from the GPS (if available), and quantify error.
What value will this add?
Filtering can make sensor estimates more accurate - crucial in the case of heading as the GPS bias will correct the gyro drift.
What board revisions would support this feature?
All
What is the priority for this new feature?
3

Need to rethink how the calibration and sensor fusion algorithms will work


fix: use WeakRef for tracked handles

Summary
Ref https://github.com/facebook/jest/issues/11275#issuecomment-815115650
/cc @jasnell, would love if you could confirm it was something like this you had in mind 🙂

Test plan
Not sure... I don't see issues using this or the current approach, but if this passes CI using a WeakRef seems better as we don't wanna keep the timer from being collected if possible.

This doesn't fix issue #11275, warning still is shown and when adding the flag jest gets stalled, while before in my machine it finished anyway.


feat: new cairo module

This is an early working draft of the Cairo module, which allows you to write custom Lua scripts to draw whatever you like to a region of the bar. It's pretty rough around the edges but just about good enough to start playing with.
Currently this cannot be used in popups, however that will change fairly soon once #131 is resolved (that's been brought forward specifically because of this).
You need LuaJIT installed along with the LGI package (lua-lgi) on Arch. This needs to be installed to the LUA_PATH and LUA_CPATH respectively. If installing system-wide, this should Just Werk as it's in /usr.
I have played around with the idea of vendoring but suspect I will need to write bindings to statically link lua-lgi and its scripts into the Ironbar binary, so unless anybody has any better ideas we'll roll with it like this for now.
Example usage
In your config you can define eg:
let {
  $cairo = { type = "cairo" path = "$config_dir/clock.lua" frequency = 50 width = 300 height = 300 }
} in {
  center = [ $cairo ]
}

Where:

path - path to Lua script
interval number of milliseconds between updates
width - canvas width
height - canvas height

GTK's sizing rules mean if the canvas height (or width for vertical bars) is less than the bar height, it will automatically expand to the bar height.
At the specified path, define a Lua script. Currently there are some hard rules you need to keep in mind:

The script can contain a single function only. This does not need a name.
The function takes a single argument, which is a pointer to the Cairo context. You must pass this to the context constructor using eg local cr = cairo.Context(ptr) to get a usable object.
The function must return an unsigned integer. This is not used, so you can return 0.
The cairo global is available everywhere. This gives full access to the Cairo library, although some constructors may not work yet.

I've included a proof-of-concept example script below, which results in a kinda nifty clock I wrote for Conky about 5 years ago.
Lua script
function(ptr)
    local cr = cairo.Context(ptr)

    local center_x = 150
    local center_y = 150
    local radius = 130

    local date_table = os.date("*t")

    local hours = date_table["hour"]
    local minutes = date_table["min"]
    local seconds = date_table["sec"]

    local ms = tostring(io.popen('date +%s%3N'):read('a')):sub(-4, 9999)
    ms = tonumber(ms) / 1000

    local label_seconds = seconds
    seconds = seconds + ms

    local hours_str = tostring(hours)
    if string.len(hours_str) == 1 then
        hours_str = "0" .. hours_str
    end

    local minutes_str = tostring(minutes)
    if string.len(minutes_str) == 1 then
        minutes_str = "0" .. minutes_str
    end

    local seconds_str = tostring(label_seconds)
    if string.len(seconds_str) == 1 then
        seconds_str = "0" .. seconds_str
    end

    local font_size = radius / 5.5

    cr:set_source_rgb(1.0, 1.0, 1.0)

    cr:move_to(center_x - font_size * 2.5 + 10, center_y + font_size / 2.5)
    cr:set_font_size(font_size)
    cr:show_text(hours_str .. ':' .. minutes_str .. ':' .. seconds_str)
    cr:stroke()

    if hours > 12 then
        hours = hours - 12
    end

    local line_width = radius / 8
    local start_angle = -math.pi / 2

    local end_angle = start_angle + ((hours + minutes / 60 + seconds / 3600) / 12) * 2 * math.pi
    cr:set_line_width(line_width)
    cr:arc(center_x, center_y, radius, start_angle, end_angle)
    cr:stroke()

    end_angle = start_angle + ((minutes + seconds / 60) / 60) * 2 * math.pi
    cr:set_line_width(line_width)
    cr:arc(center_x, center_y, radius * 0.8, start_angle, end_angle)
    cr:stroke()

    if seconds == 0 then
        seconds = 60
    end

    end_angle = start_angle + (seconds / 60) * 2 * math.pi
    cr:set_line_width(line_width)
    cr:arc(center_x, center_y, radius * 0.6, start_angle, end_angle)
    cr:stroke()

    return 0
end

I want to try and polish this up and sort most of those gotchas out before this gets merged. Any and all help/ideas welcome.
Resolves #105

@yavko this requires luajitPackages.lgi as runtime dependency. Ideally this should be treated as an optional dep as you only need it if you use this module. Do you think you'd be able to take a look at that please on the nix side?

@yavko this requires luajitPackages.lgi as runtime dependency. Ideally this should be treated as an optional dep as you only need it if you use this module. Do you think you'd be able to take a look at that please on the nix side?

i think the best way to do this would be detecting if the feature flag is enabled, so like this
deps = [ "old deps" ] ++ (if (builtins.elem "cairo" features) || (features == []) then [lgi_or_whatever] else [])

From my (admittedly very limited) nix understanding I think that gives me what I need to do the if/else, but it's otherwise not correct.
Effectively these env vars need to be set at runtime:
LUA_PATH = "${luajitPackages.lgi}/share/lua/5.1/?.lua;${luajitPackages.lgi}/share/lua/5.1/?/init.lua;${luajit}/share/lua/5.1/?.lua;${luajit}/share/lua/5.1/?/init.lua";
LUA_CPATH = "${luajitPackages.lgi}/lib/lua/5.1/?.so;${
luajit}/lib/lua/5.1/?.so";

From my (admittedly very limited) nix understanding I think that gives me what I need to do the if/else, but it's otherwise not correct.
Effectively these env vars need to be set at runtime as follows:
LUA_PATH = "${luajitPackages.lgi}/share/lua/5.1/?.lua;${luajitPackages.lgi}/share/lua/5.1/?/init.lua;${luajit}/share/lua/5.1/?.lua;${luajit}/share/lua/5.1/?/init.lua";
LUA_CPATH = "${luajitPackages.lgi}/lib/lua/5.1/?.so;${
luajit}/lib/lua/5.1/?.so";

Problem is that's where my knowledge ends. Are you able to pick this up please?

Yeah sure

I've managed to get LGI loading in Nix, but it's behaving differently there for some reason.
There's a bug with the LGI library where you cannot pass a pointer to the Cairo Context constructor by default. That's fixed in an init script that just blanks it, allowing LGI to inject its magic:
cairo.Context.create = nil

Note that the init script is inlined as a string into the binary, so there's no IO involved.
On Arch, this works fine. On Nix, it seems to do nothing, and you get hit with this:
2024-04-11T22:10:14.202394Z ERROR ironbar::modules::cairo: 145: runtime error: [string "src/modules/cairo.rs:130:22"]:2: bad argument #2 to 'Context' (cairo.Surface expected, got userdata)
stack traceback:
	[C]: in ?
	[C]: in function 'Context'
	[string "src/modules/cairo.rs:130:22"]:2: in function <[string "src/modules/cairo.rs:130:22"]:1>

It makes absolutely no sense to me why an inlined piece of code would behave differently when using the same lua runtime version, same library version, and same ironbar version. I'm wondering (dreading?) if patching the LGI package itself on Nix is the answer. It's literally only a single line that needs commenting out at least.

After many hours, I have no idea why it doesn't work on Nix, but I've added a nix-specific patch that just removes the program code from LGI and it's sorted it.

So: it didn't work on Nix because it didn't work anywhere. Except on my machine, where I had patched the system library without realising. Many thanks to @A-Cloud-Ninja for his help working on this with me in the background, but we've managed to work around an LGI bug and get this working reliably everywhere.


Test Case - Push Index By Docker Manifest FAIL

Docker image login did not catch exception and return message is: {'username': 'user-1636995248028', 'password': 'Aa123456', 'email': None, 'serveraddress': '<IP_ADDRESS>'}
Docker image pull did not catch exception and return message is: {"status":"Pulling from project-1636995248141/ci_test_index","id":"test_tag"}
{"errorDetail":{"message":"no matching manifest for linux/arm64/v8 in the manifest list entries"},"error":"no matching manifest for linux/arm64/v8 in the manifest list entries"}

Fix in this PR


HTML5 encoding

Seems that this would require dropping php 5.3 https://travis-ci.org/aidanwoods/parsedown/builds/339279814
Ref, changelog in: http://php.net/manual/en/function.htmlspecialchars.php


Unable to read file errors are being localized and showing up in telemetry

https://github.com/microsoft/vscode/blob/8f58d9df260144d72545f66a964e88232d751f5f/src/vs/platform/files/common/fileService.ts#L569-L574
This shows up in telemetry: 无法读取文件
Should FileOperationError extend NoErrorTelemetry?
https://vscode-errors.azurewebsites.net/card?ch=f3528d481b366b24321c382d5e5849f4c7d65248&bH=aa9e18ff-8c8f-1c63-d265-d1d3cb2ba855
https://vscode-errors.azurewebsites.net/card?ch=f3528d481b366b24321c382d5e5849f4c7d65248&bH=749131eb-6952-232e-4533-df818832582b

As discussed, I can review a PR. One interesting aspect of file errors are that we use the error name as a way to deserialise errors from extensions on the renderer:
https://github.com/microsoft/vscode/blob/b3218963c4819162c87ff90606eec5294e32d28d/src/vs/platform/files/common/files.ts#L582-L593


cue: 0.7.1 -> 0.8.0

Description of changes
https://github.com/cue-lang/cue/releases/tag/v0.8.0
Things done

Built on platform(s)

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

For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)

[ ] sandbox = relaxed
[ ] sandbox = true

[ ] Tested, as applicable:

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

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

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[ ] Fits CONTRIBUTING.md.

Add a :+1: reaction to pull requests you find important.

This pull request has been mentioned on NixOS Discourse. There might be relevant details there:
https://discourse.nixos.org/t/prs-ready-for-review/1016/108

What do you think about adding auto-update to this package?
passthru.updateScript = nix-update-script {};

What do you think about adding auto-update to this package?
passthru.updateScript = nix-update-script {};

As far as I known, cue can be auto-updated. Also, packages built with buildGoModule can be auto-updated even without passthru.updateScript.


Add tasks for migrations

What does this pull request do? Explain your changes. (required)

Adds the following HH tasks:

transfer-lpt-to-l2 -> transfer L1 LPT to L2
migrate-eth -> calls migrateETH() on L1Migrator
migrate-lpt -> calls migrateLPT() on L1Migrator
migrate-sender -> calls migrateSender() on L1Migrator
migrate-sender-typed-data -> used to generate typed data for signing for migrate-sender
migrate-unbonding-locks -> calls migrateUnbondingLocks() on L1Migrator
migrate-unbonding-locks-typed-data -> used to generate typed data for signing for migrate-unbonding-locks

Left out a task for migrateDelegator() for now since that is already covered by the migration tool in the explorer.
Also moved a bunch of Arbitrum helpers into utils/arbitrum since they are used outside of the context of tests.
Specific updates (required)

See commit history.
How did you test each of these updates (required)

Tested each task on devnet and testnet.
Does this pull request close any open issues?

Fixes #75
Checklist:

[x] README and other documentation updated
[x] All tests using yarn test pass

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 100.0%

Totals

Change from base Build<PHONE_NUMBER>:
0.0%

Covered Lines:
281

Relevant Lines:
281

💛  - Coveralls


feat(tablekit-react): add textarea component

(Focus is fixed in #152 )

📦 Published PR as canary version: Canary Versions

:sparkles: Test out this PR locally via:
npm install<EMAIL_ADDRESS>npm install<EMAIL_ADDRESS>npm install<EMAIL_ADDRESS># or
yarn add<EMAIL_ADDRESS>yarn add<EMAIL_ADDRESS>yarn add<EMAIL_ADDRESS>

Converting this to a draft as it still needs more work to get the resizing/sizing with icons working correctly.


Implement capability for setting entry procedure.

This is an implementation for the capability and system call to set the entry procedure. It's a fairly simple syscall. The only remaining question is what to do when it is requested to set the entry procedure to a procedure name which doesn't exist. If the entry is set to a non-existent procedure it bricks the kernel. My thoughts are that we should allow that, with my reasoning as follows:

This is essentially error checking that throws an error if you do something silly.
This adds code complexity to the kernel to prevent a very trivial mistake. This mistake can be trivially caught "user side" in client code.
It might be an elegant way to brick a kernel.

Any thoughts on what the behaviour should be here? I'm in favour of allowing the entry key to be set to anything.

Hmm. Could you elaborate what you mean by bricking? Do you mean the kernel would simply throw an error? Or do you mean like permanently preventing any future calls to the kernel?

It would prevent future calls to the kernel, as upon receiving any transaction it immediately forwards it to a non-existent entry procedure, so will never do anything.

It would prevent future calls to the kernel, as upon receiving any transaction it immediately forwards it to a non-existent entry procedure, so will never do anything.

...That sounds like dangerous behavior. I don't think we should allow an entry capability to have such power over a kernel instance.

I would offer to simply return an error if an invalid procedure id is given.

What about setting the entry procedure to a procedure which doesn't do much? Or has a bug? The result will be equivalent, and it is necessary for that to be possible. So we can't stop the entry procedure from having that power, this is only a particularly narrow error case.

I would offer to simply return an error if an invalid procedure id is given.

That's the topic I was discussing, whether it was worth doing.

Yes, we should prevent the entry capability to assign an invalid entry procedure.

Ok. What are your thoughts on the points I made, shall we merge this can create a separate issue like with the delete procedure situation?

Ok let's do that.


[PE-D][Tester D] Specific HH:MM time format for sadd not specified in UG

Just a minor suggestion
Referring to your UG for the sadd command,
"The PERIOD includes the start time and the end time which are both in the format of the modern 24-hour clock."
This may be interpreted as an HHMM format, instead of the HH:MM which your application requires.

Labels: type.DocumentationBug severity.Low
original: shogun187/ped#7

Added specification in the UG!


Combine all Minder PR comments into a single comment

When a new PR comment is added, we should combine it with existing comments from other rules, rather than having Minder create separate comments for each rule.
Out of scope:

Gitlab

@ethomson points out a concern about rule evaluations completing on different time schedules:

If license scanning takes 100ms and static analysis takes 5 minutes, do we add the license scan report right away and then update the comment later when static analysis comes in?


Loading a save with Benthic Bloom does not result in the original item transformations

Follow the steps below to reproduce this issue. Only ProperSave-2.8.3 and BepInExPack-5.4.1905, HookGenPatcher-1.2.3 dependencies were enabled.

Obtain a Benthic Bloom, as well as several unique items of common and/or uncommon rarity.
Continue to the next stage. Note the item transformations that occur.
Exit to desktop or menu.
Load the saved game and observe different item transformations than seen previously.

Both the items chosen and resulting items have been observed to differ. Further save loads appear to maintain the same outcome as seen in step #4. However - based on release notes for version 2.8.2, I would expect all cases to follow the original transformation.

Couldn't reproduce it, for me transformations are the same after stage transition and run loading. Can you repeat your steps then quit the game and send log file?

I can also confirm that removing previous instances of MonsoonPlayerHelper by deleting the following string(s) from the save file restores the original item transformations.
{"i":114,"c":1},
Using this as a workaround for now. Seems unlikely, but posting here in case anybody else needs it. Item ID for DrizzlePlayerHelper is 43 instead of 114.

Thank you for the report, indeed hidden items were the issue, these items weren't duplicated in inventory on load, but they were duplicated in the list that tracks in what order you got items. And that list is used by Benthic Bloom. Fixed the issue and published an update.

Also, saves from 2.8.3 will have correct transformations in 2.8.4


docs: extProc is an optional field

What type of PR is this?
The EnvoyExtensionPolicy documentation states that extProc is required, but it's actually optional due to the omitempty JSON tag.

PTAL @guydc

/retest


Fixes #331

Describe what this PR does / why we need it
Fixes #331
Does this pull request fix one issue?
#331
Describe how you did it
Describe how to verify it
Special notes for reviews

Codecov Report

Merging #337 into master will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master     #337   +/-   ##
=======================================
  Coverage   54.62%   54.62%
=======================================
  Files          24       24
  Lines         119      119
  Branches       15       15
=======================================
  Hits           65       65
  Misses         43       43
  Partials       11       11

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 c5fa706...e6a1ba0. Read the comment docs.


oc.files.putFile is not a function

When I tried to upload a file, using putFile method, I just receive this error on console: oc.files.putFile is not a function.

putFile() is not available

Use putfilecontents


fix semantics of eltype on TracedRNumber

Base.eltype on TracedRNumber is semantically wrong because TracedRNumber, as a Number, should return its own type, not the interior type. For example,
julia> eltype(ComplexF64)
ComplexF64 (alias for Complex{Float64})

julia> eltype(Reactant.TracedRNumber{ComplexF64})
ComplexF64 (alias for Complex{Float64})

This behavior is giving some problems when using Yao to get the matrix representation of a parametrized quantum gate when the parameter is traced using TracedRNumber.
julia> using Reactant, YaoBlocks

julia> circ = chain(1, put(1 => H), put(1 => Rz(p)))
nqubits: 1
chain
├─ put on (1)
│  └─ H
└─ put on (1)
   └─ rot(Z, TracedRNumber{ComplexF64}(()))

# before
julia> parameters_eltype(circ)
ComplexF64 (alias for Complex{Float64})

# after
julia> parameters_eltype(circ)
Reactant.TracedRNumber{ComplexF64}

seems like the error is somewhere else? did we broke sth @wsmoses?

@avik-pal any idea of why this breaks so many tests?

in today's meeting and following what I wrote in https://github.com/EnzymeAD/Reactant.jl/issues/308#issuecomment-2504777208, I see 3 different eltype implementations:

traced_eltype: return TracedRNumber{T} on a TracedRArray{T}. otherwise, call eltype.
concrete_eltype: return ConcreteRNumber{T} on a ConcreteRArray{T}. otherwise, call eltype.
regular Base.eltype: return T from RArray{T}

in general regular eltype should be used to fix problems with idiomatic Julia libraries, but the definition of eltype on an array is that the type of calling iterate on the array should be returned (e.g. calling x[1] where x isa ConcreteRArray{Float64,1} returns a Float64, not a ConcreteRNumber{Float64}, and the same should be expected from TracedRArray)

closing in favor of #426


Bridge interfaces are noisy: IPv6 solicitations and multicast reports

The NetworkPlugin container has multicast and IPv6 configured. When a veth pair is created, it generates auto-configuration messages from the container side. One can regularly see router solicitation and multicast reports.
To reproduce :
With enable_ipv6 set to False, vstart a machine and tcpdump on eth0, wait a little bit:
$ kathara vstart --eth 0:A -n charlie

root@charlie:/# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 62:57:16:4f:b1:81  txqueuelen 1000  (Ethernet)
        RX packets 20  bytes 1576 (1.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet <IP_ADDRESS>  netmask <IP_ADDRESS>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 8  bytes 1056 (1.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8  bytes 1056 (1.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

root@charlie:/# sysctl  -a | grep disable_ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.eth0.disable_ipv6 = 1
net.ipv6.conf.ip6tnl0.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

root@charlie:/# tcpdump -v -i eth0
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
14:54:21.261044 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 16) fe80::c462:40ff:fe28:5c41 > ip6-allrouters: [icmp6 sum ok] ICMP6, router solicitation, length 16
          source link-address option (1), length 8 (1): 92:c8:ca:8b:a7:82
14:54:27.408319 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 16) fe80::90c8:caff:fe8b:a782 > ip6-allrouters: [icmp6 sum ok] ICMP6, router solicitation, length 16
          source link-address option (1), length 8 (1): 92:c8:ca:8b:a7:82
14:54:50.957490 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 16) fe80::c462:40ff:fe28:5c41 > ip6-allrouters: [icmp6 sum ok] ICMP6, router solicitation, length 16
          source link-address option (1), length 8 (1): 92:c8:ca:8b:a7:82
14:55:06.314863 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 16) fe80::90c8:caff:fe8b:a782 > ip6-allrouters: [icmp6 sum ok] ICMP6, router solicitation, length 16
          source link-address option (1), length 8 (1): 92:c8:ca:8b:a7:82
14:55:51.371388 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 16) fe80::c462:40ff:fe28:5c41 > ip6-allrouters: [icmp6 sum ok] ICMP6, router solicitation, length 16
          source link-address option (1), length 8 (1): 92:c8:ca:8b:a7:82
14:56:20.044953 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 16) fe80::90c8:caff:fe8b:a782 > ip6-allrouters: [icmp6 sum ok] ICMP6, router solicitation, length 16
          source link-address option (1), length 8 (1): 92:c8:ca:8b:a7:82
14:57:58.345746 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 16) fe80::c462:40ff:fe28:5c41 > ip6-allrouters: [icmp6 sum ok] ICMP6, router solicitation, length 16
          source link-address option (1), length 8 (1): 92:c8:ca:8b:a7:82

Dear @lorenzo93, I am very sorry that you closed this issue as there is indeed an issue with the NetworkPlugin.
Each Kathará hub is emulated by a NetworkPlugin network consisting of a Linux bridge and each connection of a host to the hub is emulated by a pair of veth. One of the veth consistues the interface on the Kathará host and can (depending on the configuration) have IPv6 enabled that is fine. However, the bridge and the other interface of the pair should behave as pure L1/L2 components and should not in any circonstance request for router parameters or try IPv6 SLAAC.
Of course, if the host Linux machine has IPv6 disabled, no problem occur but it would be better for Kathará to behave the same independently of this.

Hi @nopid,
I understand your problem but, as far as my knowledge, there is no way to disable this behaviour.
Unfortunatelly the linux bridges does not behave just like L2 bridges but have more functionalities. We have other known problems related to this, for example if you use multicast MAC addresses, the bridge catch the packet and does not forward it to the destinations.
If you have suggestions on how to solve this problems, let me know and we'll re-open this issue :)


feat: custom refresh frequency

Earlier at dashboard level we had very limited options in 'Set auto-refresh interval' as shown in image below

But as per our organisation level we wanted the frequency to be something else that was not in dropdown, so we implemented that.
As part of this PR, we can add custom frequency as required by user, user can select any frequency in hour, minute and seconds and set it as auto refresh interval frequency (in seconds).

@rusackas @justinpark @mistercrunch @villebro @geido @eschutho @betodealmeida @nytai @craig-rueda @kgabryje @dpgaspar
Please review.

@kasiazjc would you mind looking at the design? Personally I think that custom (and how it is defined/configured) should be a secondary option (hidden by default)—possibly under a collapsed menu, button, tab, etc.

From the screenshots, it looks a little confusing to show the dropdown alongside the text fields. Perhaps a new "virtual" option (CUSTOM) should be added, which would then hide/show the text boxes when selected? Also, having two buttons when choosing a custom refresh interval looks a little confusing as well.

Okay sure @john-bodley @craig-rueda
I will try to hide custom view and show custom view when required.

I have made changes as asked
When user will click CUSTOM button then box changes so that one can provide custom frequency, and if user clicks CUSTOM button again then original window will appear again.

@john-bodley @craig-rueda Please check and review.
I have shown only one refresh change option at a time as requested by @john-bodley and removed extra submit button as requested by @craig-rueda

Sorry for the churn and delays on this, but I think the main issue is UI design, not the technical implementation.
My own opinion:
• It would be nice if it had the Select menu (including the Custom option, rather than a button for Custom)
• If (and only if) the Custom option is selected from the Select menu, would the additional fields appear (or disappear)
• The Select menu would remain present... if you select something other than Custom, the form elements are removed, and the values ignored.
As a side note, I feel like the Submit button should be on the right, and the cancel button on the left. I'm not sure if we have a solid documented pattern around this, though (cc. @kasiazjc)

@Abhishek-kumar-samsung is this frequency only for a session or persistent?

Sorry for the churn and delays on this, but I think the main issue is UI design, not the technical implementation.
My own opinion: • It would be nice if it had the Select menu (including the Custom option, rather than a button for Custom) • If (and only if) the Custom option is selected from the Select menu, would the additional fields appear (or disappear) • The Select menu would remain present... if you select something other than Custom, the form elements are removed, and the values ignored.
As a side note, I feel like the Submit button should be on the right, and the cancel button on the left. I'm not sure if we have a solid documented pattern around this, though (cc. @kasiazjc)

Okay i will do some modification with UI.

@Abhishek-kumar-samsung is this frequency only for a session or persistent?

It is persistent.

@Abhishek-kumar-samsung my dashbaord frequency is saving only for a particular session , how can i make it persistent?

Sorry for the churn and delays on this, but I think the main issue is UI design, not the technical implementation.
My own opinion: • It would be nice if it had the Select menu (including the Custom option, rather than a button for Custom) • If (and only if) the Custom option is selected from the Select menu, would the additional fields appear (or disappear) • The Select menu would remain present... if you select something other than Custom, the form elements are removed, and the values ignored.
As a side note, I feel like the Submit button should be on the right, and the cancel button on the left. I'm not sure if we have a solid documented pattern around this, though (cc. @kasiazjc)

Okay i will do some modification with UI.

Thanks and sorry for the long wait! What I'm thinking in terms of UI improvements is this:
-> instead of button/switcher use single select, for selecting the type of interval, the options are:

don’t refresh

custom interval (triggers the additional fields as shown below)

all of the preset options that are available today (in the example dropdown I listed only two, but should be all of them)

-> set fixed height for the modal to accommodate for disappearing custom fields, so that the height does not jump

I think this way setting up the custom interval will be more intuitive, as we are using common patterns. What do you think and could you possibly take this up @Abhishek-kumar-samsung ?

@kasiazjc
Yes i will take this, i will try to make as you have suggested.
I was busy in last few days, so i will work on this from now.

@Abhishek-kumar-samsung my dashboard frequency is saving only for a particular session , how can i make it persistent?

@Shisir99 i am sorey, i was not sure that time, yes it is not persistent for me too, that is for a particular session only.
@rusackas isn't that a problem?
Automatic refresh interval for just a single session does not makes much sense(according to me, or maybe i missed something), it should be persistent.

@kasiazjc i implemented the design as you have suggested, Please review.

@rusackas @justinpark @mistercrunch @villebro @geido @eschutho @betodealmeida @nytai @craig-rueda @kgabryje @dpgaspar @kasiazjc @john-bodley
Please review.

@kasiazjc i implemented the design as you have suggested, Please review.

Thank you so much! The only thing I would suggest is changing minutes + seconds to a searchable select dropdown component, so that the numbers for seconds (59) and minutes (59) are fixed. Could be a weird experience if people would type in for example 1 hour, 72 minutes, 342 seconds, so I think to avoid that selects would help.

Hi @kasiazjc
I added dropdowns in minute and seconds as you have suggested.
Instead of select i used input type with datalist.
In datalist i have provided options from 0-59, if user puts some other value and submits then it will display error message.
datalist is looking little different depending on browsers, some previews as below.
edge browser preview:

firefox browser preview:

chrome browser preview:

I was having problem taking screenshot with dropdown, so i took screenshot using phone.
Please check and review @kasiazjc @rusackas

@kasiazjc @rusackas can you pls check the PR, there's been a long time since no comments, so i thought to remind.

This would be a welcome addition, thanks for the effort.

@kasiazjc @rusackas can you pls check the PR, there's been a long time since nobody reviewed it.
If any problem is there then pls tell.

/testenv up

Hi @kasiazjc I added dropdowns in minute and seconds as you have suggested. Instead of select i used input type with datalist. In datalist i have provided options from 0-59, if user puts some other value and submits then it will display error message.
datalist is looking little different depending on browsers, some previews are as below.
edge browser preview:
firefox browser preview:
chrome browser preview:
I was having problem taking screenshot with dropdown, so i took screenshot using phone.
Please check and review @kasiazjc @rusackas

Sorry for the super late review! Missed this PR. These are not ant design components right? I think single select with predefined list in the dropdown we have in code should be the one used in this for consistency (design and patterns). You can find it in filters for example, and users can also type in some numbers (it just would not accept the new number)

Sorry for the super late review! Missed this PR. These are not ant design components right? I think single select with predefined list in the dropdown we have in code should be the one used in this for consistency (design and patterns). You can find it in filters for example, and users can also type in some numbers (it just would not accept the new number)

@kasiazjc I have made changes as per your suggestion, i have removed and put select dropdown, now one can also filter based on select dropdown options, now it looks exactly similar to earlier dropdowns, i have checked in chrome, edge, firefox, it is similar in all browsers.

/testenv up

This looks great, thank you! One last request - could you also change "hours" just to normal input? I think there doesn't need to be any limit and user can type in any number. And the same with styling - if you could use input field that we already have in the code that would be great :)

@kasiazjc hours was normal input text only, it can take any numeric value greater than or equal to 0.
Regarding styling of input text, i removed my custom styling and took one classname from other file and put it.(i.e used styling that was already in the code)
Please check.

@kasiazjc @rusackas pls review, its long time since no reply.

I think it's close, but the main concerns remain that it's fetching the element from the dom to manipulate it (rather than a ref) and using CSS to show/hide, rather than conditional rendering. It seems like it's working around react, rather than leveraging React. If that can be fixed up, I think it'll be good to go.

I think it's close, but the main concerns remain that it's fetching the element from the dom to manipulate it (rather than a ref) and using CSS to show/hide, rather than conditional rendering. It seems like it's working around react, rather than leveraging React. If that can be fixed up, I think it'll be good to go.

Okay sure, thankyou for review.
I will correct it and then ask again for review.

Hello @Abhishek-kumar-samsung just checking in here. Let me know if you need any support to get this to the finish line. Thanks for your contribution!

Hello @rusackas , @geido , @eschutho  , i have removed the use of DOM element to hide/show custom view.
Now i have made an element custom_block whose state is determining the visibility of custom view.
Please review.

/testenv up

@Abhishek-kumar-samsung would you please pull master in your branch and push back?

/testenv up

@Abhishek-kumar-samsung would you please pull master in your branch and push back?

Done, now it is updated to latest master branch

/testenv up

/testenv up

Hello @Abhishek-kumar-samsung I am observing some behaviours that should be fixed. In the video you can see the following:

When going from an option to another, the initial values that I did set for the custom options are not cleared
When moving from a custom option to a standard option, the values will stay on screen for a short blink and then disappear

https://github.com/apache/superset/assets/60598000/cb53640a-b8e0-4580-a22b-a41f662be3bb

Thankyou for reviews @geido
I will check and correct the things.

Do you think this will make it to the 4.0.0 release?

Thanks for the contribution! There are some important changes required from a first-pass review. Let me know when you are ready for another round and I will be happy to have another look

@geido
Can you pls have another look, i resolved all the things that you had mentioned.

/testenv up

@geido can you pls review again :)
I have made modifications as asked by you.

/testenv up

Hi all - please direct me to an issue link if there's a separate place for questions. We recently adopted Superset and I'm looking into setting up refresh schedules for our dashboards. This PR comes close to introducing the feature I think we need, but really something with the flexibility like cron schedule expressions would be ideal. I haven't been able to understand when the refresh interval triggers (i.e. how it's determined when it'll happen) or to specify a time it should kick off.
Effectively I just want to specify when my refresh interval should start and (based off the time window I choose) when it should stop. Can any help me understand this, please?

Hi all - please direct me to an issue link if there's a separate place for questions. We recently adopted Superset and I'm looking into setting up refresh schedules for our dashboards. This PR comes close to introducing the feature I think we need, but really something with the flexibility like cron schedule expressions would be ideal. I haven't been able to understand when the refresh interval triggers (i.e. how it's determined when it'll happen) or to specify a time it should kick off.
Effectively I just want to specify when my refresh interval should start and (based off the time window I choose) when it should stop. Can any help me understand this, please?

Currently in this PR, i was implementing refresh intervals based on relative timing. But crons idea would be nice.
If we need to include crons then this PR will extend to some long time, maybe endlessly.
So maybe we can start an SIP with multiple stages of PR,
First stage maybe this one i.e relative time,
and Second stage can be crons.
What say? @rusackas

I agree we don't want to grow the scope of this PR. We should merge this first, and then deal with the cron idea (which is a nice idea) as a subsequent PR.
For the cron feature, it seems like a reasonable plan to seek "lazy consensus" on the dev@ list. Then if that starts an argument, we can upgrade the conversation to a SIP and vote it.

I agree we don't want to grow the scope of this PR. We should merge this first, and then deal with the cron idea (which is a nice idea) as a subsequent PR.
For the cron feature, it seems like a reasonable plan to seek "lazy consensus" on the dev@ list. Then if that starts an argument, we can upgrade the conversation to a SIP and vote it.

Yes sure, i will quickly do the two changes that you had suggested and once merged, we will raise SIP for cron.
Then we can work on it, @coetzeevs you can also work on that if you had implemented something in it.

@geido @rusackas i resolved whatever issues pointed out, can you pls review.

/testenv up

Hi all - please direct me to an issue link if there's a separate place for questions. We recently adopted Superset and I'm looking into setting up refresh schedules for our dashboards. This PR comes close to introducing the feature I think we need, but really something with the flexibility like cron schedule expressions would be ideal. I haven't been able to understand when the refresh interval triggers (i.e. how it's determined when it'll happen) or to specify a time it should kick off.
Effectively I just want to specify when my refresh interval should start and (based off the time window I choose) when it should stop. Can any help me understand this, please?

Hi there,
cron refresh would be an ideal solution to tell which dashboard should refresh all their pages at which time, based on the refresh schedule of underneath dataset.
Hi @rusackas I wonder is it ideal similar to the cache warm up feature, could you please take a look at this idea or fix the cache warm up feature, so that users will always be able to view the lastest update data without clicking into 'Force refresh' on charts or 'Refresh dashboard' on top.
Thank you

After some quick sanity tests on the ephemeral, this is looking pretty good!

Hi all - please direct me to an issue link if there's a separate place for questions. We recently adopted Superset and I'm looking into setting up refresh schedules for our dashboards. This PR comes close to introducing the feature I think we need, but really something with the flexibility like cron schedule expressions would be ideal. I haven't been able to understand when the refresh interval triggers (i.e. how it's determined when it'll happen) or to specify a time it should kick off.
Effectively I just want to specify when my refresh interval should start and (based off the time window I choose) when it should stop. Can any help me understand this, please?

Hi there, cron refresh would be an ideal solution to tell which dashboard should refresh all their pages at which time, based on the refresh schedule of underneath dataset. Hi @rusackas I wonder is it ideal similar to the cache warm up feature, could you please take a look at this idea or fix the cache warm up feature, so that users will always be able to view the lastest update data without clicking into 'Force refresh' on charts or 'Refresh dashboard' on top. Thank you

Codecov Report
Attention: Patch coverage is 40.00000% with 24 lines in your changes are missing coverage. Please review.

Project coverage is 67.41%. Comparing base (9ced255) to head (4bd1582).
Report is 226 commits behind head on master.

Files
Patch %
Lines

.../src/dashboard/components/RefreshIntervalModal.tsx
40.00%
23 Missing and 1 partial :warning:

Additional details and impacted files
@@            Coverage Diff             @@
##           master   #24449      +/-   ##
==========================================
+ Coverage   67.34%   67.41%   +0.07%
==========================================
  Files        1909     1910       +1
  Lines       74623    74741     +118
  Branches     8324     8356      +32
==========================================
+ Hits        50256    50388     +132
+ Misses      22314    22300      -14
  Partials     2053     2053

Flag
Coverage Δ

javascript
57.37% <40.00%> (+0.16%)
:arrow_up:

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

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

I accidently closed the PR and I reopened it again.

@geido can you check your requested changes to (potentially) unblock the merge when you have a chance, please?

@Abhishek-kumar-samsung it seems that CI is stuck. Please pull latest master and push back to kick CI on a fresh master state. Thank you

@Abhishek-kumar-samsung it seems that CI is stuck. Please pull latest master and push back to kick CI on a fresh master state. Thank you

Hi @geido i synced my fork to latest main branch, i don't know why the pull_request check is failing.
From code side it did not gave any check failure.
Last time when it ran, the same code passed all checks.

Thanks @Abhishek-kumar-samsung - I/we appreciate you sticking with this and getting it through!

Thanks @Abhishek-kumar-samsung - I/we appreciate you sticking with this and getting it through!

Thankyou @rusackas


Same Delta Table not catching the location on write

What is the target system?
Spark / Databricks
What kind of integration is this?

[ ] Produces OpenLineage metadata
[ ] Consumes OpenLineage metadata
[ ] Something else

How should this integration be implemented?
I am using OL 1.2.2, Azure Databricks Runtime 11.3 LTS. When creating a table writing into a ADLS location, OL won't be able to catch the location of the output. But when I read the same object it will be able to read the location as INPUT.
Please note I have also tested Databricks Runtime 13.3 LTS, Spark 3.4.1 - it will give correct ADLS location in INPUT but the input will only show up once in a blue moon. Most of the time the inputs and outputs are blank.
   "inputs": [],
    "outputs": []

CREATE OR REPLACE TABLE transactions_adj
USING DELTA LOCATION<EMAIL_ADDRESS>AS
  SELECT
    household_id,
    basket_id,
    week_no,
    day,
    transaction_time,
    store_id,
    product_id,
    amount_list,
    campaign_coupon_discount,
    manuf_coupon_discount,
    manuf_coupon_match_discount,
    total_coupon_discount,
    instore_discount,
    amount_paid,
    units
  FROM (
    SELECT
      household_id,
      basket_id,
      week_no,
      day,
      transaction_time,
      store_id,
      product_id,
      COALESCE(sales_amount - discount_amount - coupon_discount - coupon_discount_match,0.0) as amount_list,
      CASE
        WHEN COALESCE(coupon_discount_match,0.0) = 0.0 THEN -1 * COALESCE(coupon_discount,0.0)
        ELSE 0.0
        END as campaign_coupon_discount,
      CASE
        WHEN COALESCE(coupon_discount_match,0.0) != 0.0 THEN -1 * COALESCE(coupon_discount,0.0)
        ELSE 0.0
        END as manuf_coupon_discount,
      -1 * COALESCE(coupon_discount_match,0.0) as manuf_coupon_match_discount,
      -1 * COALESCE(coupon_discount - coupon_discount_match,0.0) as total_coupon_discount,
      COALESCE(-1 * discount_amount,0.0) as instore_discount,
      COALESCE(sales_amount,0.0) as `amount_paid,`
      quantity as units
    FROM transactions
    );

Here's the COMPLETE event:

   "outputs":[
      {
         "namespace":"dbfs",
         "name":"/user/hive/warehouse/journey.db/transactions_adj",
         "facets":{
            "dataSource":{
               "_producer":"https://github.com/OpenLineage/OpenLineage/tree/1.2.2/integration/spark",
               "_schemaURL":"https://openlineage.io/spec/facets/1-0-0/DatasourceDatasetFacet.json#/$defs/DatasourceDatasetFacet",
               "name":"dbfs",
               "uri":"dbfs"
            },

Below logical plan shows the path:
== Analyzed Logical Plan ==
num_affected_rows: bigint, num_inserted_rows: bigint
ReplaceTableAsSelect TableSpec(Map(),Some(DELTA),Map(),Some(wasbs://studio@clororetaildevadls.blob.core.windows.net/examples/data/csv/completejourney/silver/transactions_adj),None,None,false,Set()), true
:- ResolvedIdentifier com.databricks.sql.managedcatalog.UnityCatalogV2Proxy@6251a8df, default.transactions_adj
+- Project [household_id#184, basket_id#185L, week_no#193, day#186, transaction_time#192, store_id#190, product_id#187, amount_list#147, campaign_coupon_discount#148, manuf_coupon_discount#149, manuf_coupon_match_discount#150, total_coupon_discount#151, instore_discount#152, amount_paid#153, units#154]
   +- SubqueryAlias __auto_generated_subquery_name
      +- Project [household_id#184, basket_id#185L, week_no#193, day#186, transaction_time#192, store_id#190, product_id#187, coalesce(cast((((sales_amount#189 - discount_amount#191) - coupon_discount#194) - coupon_discount_match#195) as double), cast(0.0 as double)) AS amount_list#147, CASE WHEN (coalesce(cast(coupon_discount_match#195 as double), cast(0.0 as double)) = cast(0.0 as double)) THEN (cast(-1 as double) * coalesce(cast(coupon_discount#194 as double), cast(0.0 as double))) ELSE cast(0.0 as double) END AS campaign_coupon_discount#148, CASE WHEN NOT (coalesce(cast(coupon_discount_match#195 as double), cast(0.0 as double)) = cast(0.0 as double)) THEN (cast(-1 as double) * coalesce(cast(coupon_discount#194 as double), cast(0.0 as double))) ELSE cast(0.0 as double) END AS manuf_coupon_discount#149, (cast(-1 as double) * coalesce(cast(coupon_discount_match#195 as double), cast(0.0 as double))) AS manuf_coupon_match_discount#150, (cast(-1 as double) * coalesce(cast((coupon_discount#194 - coupon_discount_match#195) as double), cast(0.0 as double))) AS total_coupon_discount#151, coalesce(cast((cast(-1 as float) * discount_amount#191) as double), cast(0.0 as double)) AS instore_discount#152, coalesce(cast(sales_amount#189 as double), cast(0.0 as double)) AS amount_paid#153, quantity#188 AS units#154]
         +- SubqueryAlias spark_catalog.default.transactions
            +- Relation spark_catalog.default.transactions[household_id#184,basket_id#185L,day#186,product_id#187,quantity#188,sales_amount#189,store_id#190,discount_amount#191,transaction_time#192,week_no#193,coupon_discount#194,coupon_discount_match#195] parquet

Where should this integration be implemented?

[ ] In the target system
[ ] In the OpenLineage repo
[ ] Somewhere else

Do you plan to make this contribution yourself?

[ ] I am interested in doing this work

Hi @rwforest,

@pawel-big-lebowski Please find the notebook attached.
01_Data Prep.ipynb..txt
debugFacet looks like this:
         "debug":{
            "_producer":"https://github.com/OpenLineage/OpenLineage/tree/1.4.1/integration/spark",
            "_schemaURL":"https://openlineage.io/spec/2-0-2/OpenLineage.json#/$defs/RunFacet",
            "classpath":{
               "openLineageVersion":"1.4.1",
               "sparkVersion":"3.3.2",
               "scalaVersion":"2.12.14",
               "jars":[

               ],
               "classDetails":[
                  {
                     "className":"org.apache.spark.sql.delta.catalog.DeltaCatalog",
                     "onClasspath":true
                  },
                  {
                     "className":"org.apache.iceberg.catalog.Catalog",
                     "onClasspath":false
                  },
                  {
                     "className":"com.google.cloud.spark.bigquery.BigQueryRelation",
                     "packageVersion":"0.22.2-SNAPSHOT",
                     "onClasspath":true
                  }
               ]
            },
            "system":{
               "sparkDeployMode":"client",
               "javaVersion":"1.8.0_362",
               "javaVendor":"Azul Systems, Inc.",
               "osArch":"amd64",
               "osName":"Linux",
               "osVersion":"5.15.0-1042-azure",
               "userLanguage":"en",
               "userTimezone":"Etc/UTC"
            },
            "config":{
               "extraListeners":"io.openlineage.spark.agent.OpenLineageSparkListener",
               "openLineageConfig":{
                  "endpoint":"api/v1/lineage",
                  "debugFacet":"enabled",
                  "url.param.code":"8kZl0bo2TJfnbpFxBv-R2v7xBDj-PgWMol3yUm5iP1vaAzFu9kIZGg==",
                  "facets.disabled":"[spark_unknown;]",
                  "namespace":"adb-4679476628690204.4#default",
                  "transport.type":"http",
                  "transport.url":"https://141f-206-29-176-51.ngrok-free.app"
               },
               "catalogClass":"org.apache.spark.sql.internal.CatalogImpl"
            },
            "logicalPlan":{
               "nodes":[
                  {
                     "id":"ReplaceTableAsSelect@-832393696",
                     "desc":"ReplaceTableAsSelect TableSpec(Map(),Some(delta),Map(),Some(wasbs://studio@clororetaildevadls.blob.core.windows.net/examples/data/csv/completejourney/silver/transactions),None,None,false,Set(),None,None), [overwriteSchema=true<EMAIL_ADDRESS>true\n:- ResolvedIdentifier com.databricks.sql.managedcatalog.UnityCatalogV2Proxy@46fc2389, journey.transactions\n+- Relation [household_id#92,basket_id#93L,day#94,product_id#95,quantity#96,sales_amount#97,store_id#98,discount_amount#99,transaction_time#100,week_no#101,coupon_discount#102,coupon_discount_match#103] csv\n",
                     "children":[
                        "ResolvedIdentifier@968780992",
                        "LogicalRelation@387121033"
                     ]
                  },
                  {
                     "id":"ResolvedIdentifier@968780992",
                     "desc":"ResolvedIdentifier com.databricks.sql.managedcatalog.UnityCatalogV2Proxy@46fc2389, journey.transactions\n",
                     "children":[

                     ]
                  },
                  {
                     "id":"LogicalRelation@387121033",
                     "desc":"Relation [household_id#92,basket_id#93L,day#94,product_id#95,quantity#96,sales_amount#97,store_id#98,discount_amount#99,transaction_time#100,week_no#101,coupon_discount#102,coupon_discount_match#103] csv\n",
                     "children":[

                     ]
                  }
               ]
            }
         }

outputs look like this:
   "outputs":[
      {
         "namespace":"dbfs",
         "name":"/user/hive/warehouse/journey.db/transactions",

@pawel-big-lebowski just realize that even in 1.5.0 the issue still exists. I can't quite figure out how that getNamespace() work in output, but the implementation probably didn't change. It's true that there will be a table written into the journey db, but as you can see above TableSpec contains the url of path of the output dataset.
getNamespace() should be able to extract that.

@pawel-big-lebowski I think I figured out, instead of parsing the TableSpec, it is actually depending on this code
SparkSession.active().sessionState().catalog().defaultTablePath(catalogTable.identifier());

Since all the tables look like this, the namespace here doesn't provide the path because they are just catalog. We need something to handle EXTERNAL tables as OUTPUT.
[Table(name='campaigns', catalog='spark_catalog', namespace=['journey'], description=None, tableType='EXTERNAL', isTemporary=False),
Table(name='campaigns_households', catalog='spark_catalog', namespace=['journey'], description=None, tableType='EXTERNAL', isTemporary=False),
Table(name='causal_data', catalog='spark_catalog', namespace=['journey'], description=None, tableType='EXTERNAL', isTemporary=False),
Table(name='coupon_redemptions', catalog='spark_catalog', namespace=['journey'], description=None, tableType='EXTERNAL', isTemporary=False),
Table(name='coupons', catalog='spark_catalog', namespace=['journey'], description=None, tableType='EXTERNAL', isTemporary=False),
Table(name='features_finalized', catalog='spark_catalog', namespace=['journey'], description=None, tableType='EXTERNAL', isTemporary=False),
Table(name='household_features', catalog='spark_catalog', namespace=['journey'], description=None, tableType='EXTERNAL', isTemporary=False),
Table(name='household_metrics', catalog='spark_catalog', namespace=['journey'], description=None, tableType='EXTERNAL', isTemporary=False),
Table(name='households', catalog='spark_catalog', namespace=['journey'], description=None, tableType='EXTERNAL', isTemporary=False),
Table(name='products', catalog='spark_catalog', namespace=['journey'], description=None, tableType='EXTERNAL', isTemporary=False),
Table(name='targeted_products_by_household', catalog='spark_catalog', namespace=['journey'], description=None, tableType='EXTERNAL', isTemporary=False),
Table(name='transactions', catalog='spark_catalog', namespace=['journey'], description=None, tableType='EXTERNAL', isTemporary=False),
Table(name='transactions_adj', catalog='spark_catalog', namespace=['journey'], description=None, tableType='EXTERNAL', isTemporary=False),
Table(name='vw_targeted_products_by_household', catalog='spark_catalog', namespace=['journey'], description=None, tableType='VIEW', isTemporary=False)]

This is interesting. Would you be willing to write a failing integration test for that?
How to do that? Please take a look at the databricks integration tests class. One needs to add an extra test method similar to this:
@Test
  @SneakyThrows
  public void testCreateTableAsSelect() {
    List<RunEvent> runEvents = runScript(workspace, clusterId, "ctas.py");
    RunEvent lastEvent = runEvents.get(runEvents.size() - 1);

    OutputDataset outputDataset = lastEvent.getOutputs().get(0);
    InputDataset inputDataset = lastEvent.getInputs().get(0);

    assertThat(outputDataset.getNamespace()).isEqualTo("dbfs");
    assertThat(outputDataset.getName()).isEqualTo("/user/hive/warehouse/ctas");

    assertThat(inputDataset.getNamespace()).isEqualTo("dbfs");
    assertThat(inputDataset.getName()).isEqualTo("/user/hive/warehouse/temp");
  }

One needs to write a new method, new pyspark script and some assertions to test the expected behaviour.
Test can be started locally with modifying lines:
DatabricksConfig config =
        new DatabricksConfig()
            .setHost(System.getProperty("databricksHost"))
            .setToken(System.getProperty("databricksToken"));

to contain valid host and token for databricks environment. Having a failing integration test is super helpful in finding a solution to the problem.


Failing in convert a mnemonic to a seed for a solana wallet

I posted a related SO question here
I'm trying to use a wallet seed on the backend, using nodejs, to connect in blockchain. The Keypair module from<EMAIL_ADDRESS>library has a fromSeed method, that I use with input from another method, from the bip39 library, that converts my mnemonic to a seed. This is my code:

const mnemonic = <My-mnemonic>
console.log(bip39.validateMnemonic(mnemonic)) // true
bip39.mnemonicToSeed(mnemonic).then(buffer => Keypair.fromSeed(buffer)).catch(err => console.log(err))

This is my error
Error: bad seed size
    at Function.nacl.sign.keyPair.fromSeed (/home/diazrock/Carrera/Elasbit/NFT's/mint-nft-solana/node_modules/tweetnacl/nacl-fast.js:2329:11)
    at Function.fromSeed (/home/diazrock/Carrera/Elasbit/NFT's/mint-nft-solana/node_modules/@solana/web3.js/lib/index.cjs.js:5625:53)
    at bip39.mnemonicToSeed.then.buffer (repl:1:55)

ed25519 secret keys are generated from 32-byte seeds. bip39.mnemonicToSeed generates 64-byte seeds. We truncate the seed in the Rust implementation https://github.com/solana-labs/solana/blob/2de2c6ddd7981e942c634243e8558a84727d791f/sdk/src/signer/keypair.rs#L158.  Try that and verify that you're recovering the same keypair as solana-keygen recover


Added a new line

This is a very important change, please see.

This pr has conflicts. conflict happens when you are trying edit to same part of the same file differently in two different branches. in this case if you have an old copy of this repo which you've cloned during the CSE : A Survival guide workshop(Glad you've attended that as well). so if you open a pull request with that repo which we've worked on after the workshop to make it ready for this workshop with out fetching the changes we've made. you will get a conflict. you can dm on teams [CB.EN.U4CSE19063] to resolve this or delete your fork and make a new fork and then open a pull request again.
Regards
Sridhar

I've resolved the Merge conflicts.


Publish VS Code Extension on Open VSX Registry (Add GitPod, VSCodium support)

Is it possible for the VS Code extension to be published to Open VSX?
Open XSV is a vendor-neutral, open-source alternative marketplace for VS Code Extensions. Adding the extension to this registry will allow it to be used in fully open-source forks of VS Code such as VSCodium, gitpod etc.
Further information for publishing extensions to the registry is available here: https://github.com/eclipse/openvsx/wiki/Publishing-Extensions

Hello @michoelchaikin, thanks for sharing this question.
I think it might depend on the term of usage you are looking for to achieve.
Would you like to have a quick call to clarify this point? Slack me!


Use Travis container-based infrastructure

Fix

(http://docs.travis-ci.com/user/migrating-from-legacy/?utm_source=legacy-notice&utm_medium=banner&utm_campaign=legacy-upgrade)
(Failing tests are due to Github API rate limit)

Good catch, thanks Maxime Steinhausser.