Build fixed and GitHub actions

Hi, thanks for building this awesome open source editor for Android!
I ran into some issues building it from a clean git clone which I've addressed in the first couple I of commits here, do they look right to you?
I also added a yarn/npm target for a shortcut to reset the git repo to a clean state; this just deletes all the ignored files (build state / artifacts) to make it easier to test if the build is working reliably.
I then got GitHub actions set up to try to make the build more repeatable long term. The run from this branch can be seen here: https://github.com/andrewleech/Acode/actions/runs/3660345162

In case it's of any interest to anyone, I was using the following script to build this project locally. The bulk of it is done in a docker environment to ensure tool version control.
docker run -t --rm -v $(pwd):/Acode -w /Acode hamdifourati/cordova-android-builder:cordova-11 bash -c '\
yes | sdkmanager --licenses ;\
chown -R root . ;\
npm add -g yarn ;\
yarn setup ;\
cordova telemetry on ;\
yarn clean ;\
npm run build android paid prod ;\
npm run build android paid d ;\
chown -R 1000 . ;\
'

## convert aab bundle to APK

# grab tool for conversion
if [  ! -f bundletool-all-1.13.1.jar ]; then
  wget https://github.com/google/bundletool/releases/download/1.13.1/bundletool-all-1.13.1.jar
fi

# generate signature
if [  ! -f acode.keystore ]; then
keytool -genkey -v -keystore acode.keystore -alias acode -keyalg RSA -keysize 2048 -validity 10000
fi

# cleanup if needed
rm -rf *.apks  toc.pb

# convert to apk
for aab in *.aab; do
java -jar "bundletool-all-1.13.1.jar" build-apks --bundle=$aab --mode=universal --output="${aab%.*}.apks" --ks=acode.keystore --ks-pass=pass:acode1 --ks-key-alias=acode --key-pass=pass:acode1

# extract apk
unzip ${aab%.*}.apks
mv -v universal.apk ${aab%.*}.apk
done

Hi thanks for the script, but there is not to build free version of the app. Please change the script to only build APK of pro version.

Thanks for updating the script. I noticed it's building .aab file but I'm not supporting it yet. It needs to build .apk for production also.

any update?? can't build it anyway :(
your app is really great but the ad on keyboard led me here to build myself and spent hours trying to build this

Thanks for updating the script. I noticed it's building .aab file but I'm not supporting it yet. It needs to build .apk for production also.

aab files are what Cordova always makes now for production builds, are you building with an older version?
.aab are designed to be submitted to play store where they're signed in then cloud.
I wrote above how I was converting the aab to APK locally for testing, but it needs signing as part of the process. I could copy that process into the github actions but for it to be compatible with your official builds it'd need your signatures store added in a protected way.
I kind of assumed you probably wouldn't want the paid / prod version of the APK too easily available here anyway :-D

Thanks for updating the script. I noticed it's building .aab file but I'm not supporting it yet. It needs to build .apk for production also.

aab files are what Cordova always makes now for production builds, are you building with an older version?
.aab are designed to be submitted to play store where they're signed in then cloud.
I wrote above how I was converting the aab to APK locally for testing, but it needs signing as part of the process. I could copy that process into the github actions but for it to be compatible with your official builds it'd need your signatures store added in a protected way.
I kind of assumed you probably wouldn't want the paid / prod version of the APK too easily available here anyway :-D

You dont need to do that, just set packageType to apk for your build type in build.json and it'll build apk instead of aab.


I forgot my password

I forgot my password so i cant change my password until i login first

you can use /lac rmpass from the console (or another operator) to reset your password (see /lac)

ty so much lenis
On Thu, Aug 12, 2021 at 8:48 PM lenis0012 @.***> wrote:

you can use /lac rmpass from the console (or another operator) to reset
your password (see /lac)
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/lenis0012/LoginSecurity-2/issues/243#issuecomment-897654620,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AU6TG462YQDTQUVNYSQNYPTT4PGKPANCNFSM5A7NIMFA
.
Triage notifications on the go with GitHub Mobile for iOS
https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675
or Android
https://play.google.com/store/apps/details?id=com.github.android&utm_campaign=notification-email
.


Could not find package sky_services after updating local engine.

I have built the engine locally and running the application with dependency_overrides but having issue while running.
Steps to Reproduce

Compile the latest engine locally, link.
Run the application with dependency_overrides in pubspec.yaml

Error log

Error during application build

Running "flutter pub get" in package_name...
Because package_name depends on sky_services from path which doesn't exist (could not find package sky_services at "/Users/kartik/Code/experiments/engine/src/out/host_debug_unopt/gen/dart-pkg/sky_services"), version solving failed.
pub get failed (66; Because package_name depends on sky_services from path which doesn't exist (could not find package sky_services at "/Users/kartik/Code/experiments/engine/src/out/host_debug_unopt/gen/dart-pkg/sky_services"), version solving failed.)

flutter doctor -v
[✓] Flutter (Channel master, 2.6.0-6.0.pre.171, on macOS 11.4 20F71 darwin-x64, locale en-GB)
    • Flutter version 2.6.0-6.0.pre.171 at /Users/kartik/ExternalLibs/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 321c872ca7 (31 hours ago), 2021-09-22 02:38:06 -0400
    • Engine revision b0f3c0f7e4
    • Dart version 2.15.0 (build 2.15.0-127.0.dev)

[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
    • Android SDK at /Users/kartik/Library/Android/sdk
    • Platform android-31, build-tools 30.0.3
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7281165)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 12.5.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • CocoaPods version 1.10.1

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2020.3)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7281165)

[✓] VS Code (version 1.60.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension can be installed from:
      🔨 https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter

[✓] Connected device (2 available)
    • Pixel 4a (mobile) • 0B291JEC201996 • android-arm64  • Android 11 (API 30)
    • Chrome (web)      • chrome         • web-javascript • Google Chrome 93.0.4577.82

• No issues found!

pubspec.yaml
...

environment:
  sdk: ">=2.12.0 <3.0.0"
  flutter: ">=1.17.0"

dependencies:
  flutter:
    sdk: flutter
  riverpod: ^0.14.0+1
  flutter_hooks: ^0.16.0
  hooks_riverpod: ^0.14.0+1
  gesture_x_detector: ^1.0.0
  undo: ^1.4.0
  matrix4_transform: ^2.0.0
  logger: ^1.1.0
  touchable: ^1.0.0

dependency_overrides:
  sky_engine:
    path: "/Users/kartik/Code/experiments/engine/src/out/host_debug_unopt/gen/dart-pkg/sky_engine"
  sky_services:
    path: "/Users/kartik/Code/experiments/engine/src/out/host_debug_unopt/gen/dart-pkg/sky_services"

dev_dependencies:
  flutter_test:
    sdk: flutter
...

Hi @kartik1225
For which platform are you compiling the engine? Also can you please share the engine commit you're building?
Thank you

This is my fork of flutter engine. But I have also tested with the master branch of the flutter engine but having the same error!
Right now I am testing with the android arm64 build with the following commands.

./flutter/tools/gn --android --unoptimized --android-cpu=arm64
./flutter/tools/gn --unoptimized
ninja -C out/android_debug_unopt_arm64
ninja -C out/host_debug_unopt

Is it possible that the error is happening because sky_services are removed?

As shown above in pubspec.yaml also sky_services are not detected.
Thank you for the quick response @TahaTesser

This works after removing sky_services line


Use cargo features additively.

Adding more Cargo features should bring in more code and features, not less. Also adding a Cargo feature should almost never break existing scripts.
With a major semver bump, I suggest to make the following changes:

no_std

Reverse it to std.

plugins

I don't know what it is, probably leave it as is.

unchecked

Reverse to checked.

sync

Leave as is.

no_optimize

Reverse to optimize. Maybe rhai::OptimizationLevel::None should be available even without it.

no_float

Reverse to float

only_i32
only_i64

This one is tricky.
There should probably be integer feature that enables all integer types and also i32 and i64 features that selectively enable those types.
integer should imply (but not be limited to) i32 + i64.
A compile error should be emitted if none of three features (i32, i64, integers) are activated, unless Rhai can work without integers at all.
It should be OK to activate both i32 and i64 features without integer feature.

no_index

Reverse to index.

no_object

Reverse to object

no_function

Reverse to function

no_module

Reverse to module.

internals

Leave as is.

default = []

default=["std","module","function","object","index","integer","float","optimize","checked","plugins?"]

Additionally, I think keywords from missing features should still be reserved in scripts (unless explicitly configured otherwise from the Rust side), to avoid typical Rhai scripts breaking when a feature suddenly gets turned on from afar.

On the other hand, it conforms to "standard".

Not only it conforms to a standard, it also allows using Rhai multiple times in dependecy tree without cooperation between those dependencies.

I think I'll let the community ponder it more before deciding to change it for 1.0...

Community involvement is encouraged, even if just to inform about pending API breakage long before it actually happens.
(answering to https://github.com/jonathandturner/rhai/issues/100#issuecomment-656695339)

It's something that I agree should be fixed. Since it will be a hard breaking change, users will have to fix their end when they upgrade. It doesn't matter whether you inform of the change early in advance, the change can still only be made the moment a new version with the change is available. It's not something that users can slowly migrate to like a deprecated function. Therefore, I'd rather see it fixed as early as possible, so that new users won't have to make the changes down the road. Just make it clear in the release notes and changelog.

Additionally, I think keywords from missing features should still be reserved in scripts (unless explicitly configured otherwise from the Rust side), to avoid typical Rhai scripts breaking when a feature suddenly gets turned on from afar.

There is a problem with this.
When a feature is turned off, the current design is that it is as if the feature doesn't even exist.
Therefore, if no_function is on, then fn is a valid variable name.
You can further disable keywords.,  If you disable if, then if is a valid variable name.
The lack of a feature maybe dependent by script writers.  Therefore, features are actually not additive.  That is, a script that runs fine on a system without some language feature may not run in a system with that language feature, simply because the script writer assumes the lack of such language feature.
The idea is that there should only be one scripting language in an application.  Therefore, the feature set of the Rhai language should be fixed.
However, you bring up a good scenario in which, for example, the application has its own embedded scripting language, but then also pull in crates such as casbin-rs which also has its own scripts.

Proposal for pre-1.0:

Make features additive.  The default should have almost everything.  For example, baseline will have no modules, and "modules" feature adds it.  Default will have "modules".

Make API: Engine::disable_feature that selectively disables a feature even if it is there.  If it isn't there, it does nothing.

Any app who wants to restrict the language needs to omit the feature from the crate, and also call Engine::disable_feature on each Engine just in case something upstream includes that feature.

Does this make sense?

However, you bring up a good scenario in which, for example, the application has its own embedded scripting language, but then also pull in crates such as casbin-rs which also has its own scripts.
In such a scenario, even if features are additive, you'll have trouble. That's because casbin assumes a restricted language; if you turn those features on, then casbin may not be able to handle it.

I believe the best solution to this would be for Cargo to allow private instances of dependencies that are not shared between crates (there is an RFC for this), but we probably don't want to wait until it is implemented.

Make API: Engine::disable_feature that selectively disables a feature even if it is there.  If it isn't there, it does nothing.

Any app who wants to restrict the language needs to omit the feature from the crate, and also call Engine::disable_feature on each Engine just in case something upstream includes that feature.

How about using marker type parameters so that language features can be disabled during compilation? But obviously this will take more effort to implement, will increase compile times, and users will probably have to make a type alias to refer to the Engine.

Engine::disable_feature is negative thinking again, not protected against future new features. Primary and recommended way should be enable_feature instead.

I.e. Engine::new() automatically enables all features present in Cargo (i.e. all features by default) and is recommended for applications. And EngineBuilder::no_features().add_feature(Feature::Functions).add_feature(Feature::Modules).....build() enables only the selected features and is recommended for libraries.

Therefore, if no_function is on, then fn is a valid variable name.

fn as a valid variable name splits Rhai scripts ecosystem into incompatible parts, also interferes with naturally upgrading Rhai environment when from initially simple expression evaluator to more involved scripting environment as time passes. It is like using class in C code, thinking "We'll never need to intergace C++, so why not?".
So a mode like EngineBuilder::reserve_all_keywords function can be nice to make scripts more restricted prevent future upgrade problems. It can just Engine::disable_symbol all the unused keywords. It should be recommended in most environments, except of maybe if memory is so constrained that even holding a list of banned names is wasteful, or when Rhai is used just as an expression evaluator .

EngineBuilder::no_features().add_feature(Feature::Functions).add_feature(Feature::Modules).....build()

This looks feasible...

I ended up adding a -> &mut Self to most API methods.
A builder style does not allow subsequent modification of the Engine.  It is actually more convenient to just be able to chain API calls.

Such as this: https://stephencoakley.com/2019/04/24/how-rust-solved-dependency-hell
Seems like Rust is quite smart.  For crate invocations that are clearly different, it pulls in both versions under different mangled names.
Now, the question is what it'll do when confronted with the same version of the crate, but with different features enabled.
Does it:

Keep only one version and have all the features?
Keep two versions each having their own features set?

In Rhai, features are really not very composable. They really turn on/off certain language features.  Therefore, having a feature turned on when an app expects it to be off is not a mere wastage of more code.  It may be incorrect - the app expects the lack of certain language features.  The non-existence of a feature is as much as differentiator as a feature.
So it is really not as simple as making all feature additive, because the lack of a feature is a feature by itself.
Now, I see that Cargo allows multiple crates under different names.  Perhaps this can be a solution.

the app expects the lack of certain language features

Isn't it a design flaw? Imagine an ecosystem of user-contributed Rhai scripts that can be downloaded and executed. Without additional restrictions (such as that Rhai scripts should not break if extra features get enabled) it would be tricky to enhance script features (or even support both old-style and new-style scripts).
This is why I also propose to make it easy to reserve keywords for all possible features (maybe even some future unimplemented ones)

Additionally, I think keywords from missing features should still be reserved in scripts ...

What things in Rhai, apart from keywods being available or not available for use as identifiers, do require absense of particular features?

This is why I also propose to make it easy to reserve keywords for all possible features (maybe even some future unimplemented ones)

Yes, reserved keywords are already merged, thx to your idea.  The keywords are already reserved.

What things in Rhai, apart from keywods being available or not available for use as identifiers, do require absense of particular features?

Probably not.  I guess there is nothing that cannot be done by simply disabling certain keywords and be done with it.  There is even disable_symbol to do exactly that.
However, that also means that somebody writing a library that uses Rhai in a restricted environment must go thru the hassle of disabling all the features that he/she doesn't need, just in case the upstream app also uses Rhai and starts enabling some things.
And also there are features that are mutually exclusive and not additional.  For example: sync.  This is a feature that is additive, however, its behavior is not additive.
With sync: Engine must be Send + Sync and supports multi-threading.  Without sync, Engine can handle any data type but not multi-threaded.
Say a library writer uses Rhai.  He/she obviously doesn't want to restrict the library to sync only, because apps using the lib may not be multi-threaded.
However, if an app using the lib needs a scripting feature which needs to be thread-safe, if it pulls in sync, it affects the version used by the lib itself.
I believe right now the only solution is to have marker traits and then have type-def's that refer to common Engine invocations...

Closing this for the time being.  It is not a simple matter to make Rhai features additive.
See: https://schungx.github.io/rhai/patterns/multiple.html

Than should Rhai be explicitly documented against usage as a private (internal) dependency in libraries?
Something like "Don't use Rhai in libraries. Rhai as a language is sensitive to the chosen Cargo feature set and is expected to appear only once in a project's dependency tree. Internal Rhai dependency may introduce unwanted Rhai feature switches or be confused by activating unwanted switches from neighbouring Rhai dependency inclusion".

Unfortunately many libraries use Rhai especially as an expression evaluator...  so it is probably not easy to completely ban it.

Do you plan leaving the "Rhai v1.0" with cargo features usage still unfixed?
What does mean "for the time being" and how does it interact woth "wontfix" label?
Or maybe adjusting feature completeness vs compactness will be moved away from Cargo features to e.g. plugins? (can it handle sync and !sync engines within the same project?)

can it handle sync and !sync engines within the same project

Unfortunately no.  Not without finding a way to keep two separate copies.  That's why Rhai features are not additive.  They are more like toggle switches.
Another example will be no_float.  It is simple: If the target does not have floating point support, it should exclude floating-point math types in its code.  However, say a library does not specify no_float and may already register floating-point functions.  In other words, the library actually requires floating-point support; therefore technically speaking it should not be used in any project that requires no_float.  In other words, the feature, similar to no-std, is not additive; adding or removing features break compatibility altogether instead of adjusting behavior.

Libraries may want to exclude feature to minimize code bloat even if otherwise it is no problem to leave feature enabled.
I expect sync and no-sync to be the biggest problem. Some libraries publish even two crates because of that. Example: im im-rc.

It is technically not intended to be used to model pre-requisits.

I don't understand this phrase.
Do you consider Tokio's usage of feature flags an intended use case of Cargo features?

Libraries may want to exclude feature to minimize code bloat even if otherwise it is no problem to leave feature enabled.

Yes, that's the main problem and why features are this way.  Embedded targets (even WASM) will want minimal builds to exclude unnecessary code.  If hidden behind API switches, all those code will remain.  The only way is to exclude those code with compile-time config switches.
That's why many of Rhai's language features are tagged under feature flags instead of a "configuration" API.

The only way is to exclude those code with compile-time config switches.

Or usage of compile-time evaluation (const functions) and optimisation (including whole-program fat LTO). String formatting and panicking code is often excluded this way when doing embedded.

I don't understand this phrase.

Probably not very scientific, but I'm at a loss to find the right phrase.
Basically, unlike tokio as you pointed out, Rhai features cannot be used this way.
In tokio, for example, if you turn on tcp, then it pulls in all the tcp types.  Fine.  If another library doesn't want it, it doesn't harm.  It'll just there.
The problem with "it doesn't harm" doesn't work with Rhai.  Image that, for some wierd reason, we add a "while-loop" feature to Rhai, enabling/disabling the while statement.
A library pulling in Rhai with while-loop set will conflict with other code that doesn't require it.  In other words, it does harm.  The other code that doesn't set while-loop will expect the while statement to throw a syntax error.

Or usage of compile-time evaluation (const functions) and optimisation (including whole-program fat LTO). String formatting and panicking code is often excluded this way when doing embedded.

Not easily.  String formatting and panicking code is excluded via feature gates.

A library pulling in Rhai with while-loop set will conflict with other code that doesn't require it. In other words, it does harm. The other code that doesn't set while-loop will expect the while statement to throw a syntax error.

It may be solved by double check: a library which wants to fine tune which parts of Rhai it wants does two things:

Includes appropriate Cargo feature
Enables the keywords using in-code configuration (runtime or compiletime)

This way two Rhai engines: the one with while identifier and the other one with while keyword can coexist.

will expect the while statement to throw a syntax error

I think relying on things being syntax errors is not future-proof anyway. It is like relying on optimisation removing bad code.

I think relying on things being syntax errors is not future-proof anyway.

That was just an example.  There are many language features that fall into such category.  Having it and not having it is not a simple matter of: If I have it but don't use it, it's fine.  Many such cases are more like: Oh heck, I don't need it and suddenly it shows up and it is screwing me up.

It may be solved by double check: a library which wants to fine tune which parts of Rhai it wants does two things:
1. Includes appropriate Cargo feature

2. Enables the keywords using in-code configuration (runtime or compiletime)

This way two Rhai engines: the one with while identifier and the other one with while keyword can coexist

You are absolutely right.  This is the correct way to add/remove features, which is in-code configuration.
But this way it is very hard to remove the code if you don't need it.

But this way it is very hard to remove the code if you don't need it.

What about things like

pub trait RhaiFeatures {
    const ENABLE_FLOATS : bool = true;
    const ENABLE_OPTIMIZE: bool = true;
    ...
}

impl<F:RhaiFeatures> Something<F> {
    pub fn do_something() {
         if F::ENABLE_FLOATS {
             heavyweight_function();
         }
    }
}

Does it provide enough assurance that heavyweight_function is really not inclued?

Maybe a fork/branch of Rhai with experimental feature selection revamp should be created?

Maybe a fork/branch of Rhai with experimental feature selection revamp should be created?

I wouldn't mind this at all!  I tried but it wasn't easy.  If somebody would like to take a shot at it, it'll be good!

Does it provide enough assurance that heavyweight_function is really not inclued?

It does, but then the Engine is going to have a generic parameter tagged on.  And there will need to be different traits with different combinations of true and false based on the features set.  Essentially this is equivalent to in-code configuration.

I tried but it wasn't easy.

Maybe it can be done gradually, starting from some one feature?
Is there some statistics of how Rhai is used (especially in libraries), which features are typically enabled and where absense of features are really required?
You told that Rhai is sometimes used as math expression evaulator in some libraries (as far as I understood). Which of reverse dependencies are worth revieing? Are there known projects that are not on crates.io?

Is there some statistics of how Rhai is used (especially in libraries), which features are typically enabled and where absense of features are really required?

I'm not sure if there is somewhere where these telementaries are kept...  crates.io doesn't seem to capture it...

You told that Rhai is sometimes used as math expression evaulator in some libraries (as far as I understood). Which of reverse dependencies are worth revieing? Are there known projects that are not on crates.io?

Not sure about non-crates.io projects.  There is an outstanding issue about projects using Rhai but it is not updated.
If you scan thru the issues list, you'll find a lot of questions about using Rhai, probably in projects no on crates.io.


Added support for shallow rendering children-as-a-function component

Fixes #1902

A .renderProp method basically would be just a syntax sugar around first approach, it will still have the same problem that you can only get either the outsides of children-as-a-function component or the insides but not both.
When you do shallow render you expect that all insides of the component would be rendered, so one can [according to docs]

ensure that your tests aren't indirectly asserting on behavior of child components.

You either can't do it without invoking children-as-a-function or it adds a lot of cognitive overload to support these tests.


Terminal: split terminal fails and closes the terminal with error 259

Steps to Reproduce:

open the integrated terminal
type bash to enter wsl
use nano to open any text file
type ctrl + shift + p and use the split terminal function

Result: the bash terminal with nano is closed and this error appear in VSCode:

I'm on Windows 10 Insiders (x64), and that's with VSCode Insiders:

Version 1.21.0-insider
Commit ce13bb0dabd06981913c46b5a94456647864c2e0
Date 2018-02-23T05:19:18.064Z
Shell 1.7.9
Renderer 58.0.3029.110
Node 7.9.0
Architecture x64

I can't seem to repro. I can get nano's state to mess up which is kind of expected when resizing (this https://github.com/Microsoft/vscode/issues/26375). I can't get it to crash though. I wasn't testing on Windows Insiders though, maybe that's something to do with it?

The item on context menu in the terminal integrated Split is in the worst place ever.

@felipebraga I dunno about work place ever, this is pretty bad:

But yes I think I'll move it just under New Terminal 😄 https://github.com/Microsoft/vscode/issues/45410


Lumen support

Current coverage is 100% (diff: 100%)

Merging #1 into master will not change coverage

@@           master    #1   diff @@
===================================
  Files           6     6
  Lines          87    85     -2
  Methods        15    15
  Messages        0     0
  Branches        0     0
===================================
- Hits           87    85     -2
  Misses          0     0
  Partials        0     0

Powered by Codecov. Last update 00cf55d...6bc9318


Taking screenshot with three fingers in wallet page, makes the wallet page stuck

Steps
1- Open the app.
2- Go to the wallet page.
3- Take a screenshot with three fingers.
Result
The wallet page stuck.
https://user-images.githubusercontent.com/41957921/106455769-4ece9c00-6495-11eb-8dc9-d1ec79129a5c.mp4

To be tested with wallet debug

@AhmedHanafy725 fixed on my device with newest webview update, but this might be device specific, could you revalidate please?

just updated the app and tried again, but it's still happening
my device: Honor 8x, Andriod version 10

@AhmedHanafy725 we can't reproduce it anymore on any of our devices, so honestly we don't know if it's fixed or not. But we have done several wallet updates since then. Could you kindly retest if it still happens after these updates?


Network unreachable when booting from iso (v0.3.0-rc2)

Version: v0.3.0-rc2
Booted from iso using virtualbox, but can't reach network.
$ docker pull rancher/server:latest
Pulling repository rancher/server
FATA[0000] Get https://index.docker.io/v1/repositories/rancher/server/images: dial
tcp: lookup index.docker.io on <IP_ADDRESS>:53: dial udp <IP_ADDRESS>:53: network is unreachable

For v0.3.0-rc2:
The network adapter is getting renamed to en2ps*, which is why it doesn't get an IP through DHCP.
For a temporary fix:
In the VM in VirtualBox, go to  Network Settings -> Advanced Settings.
Change "Adapter Type" to  "Paravirtualized Network (virtio-net)".

Fixed in v0.3.0-rc3.

Same thing using Xen farm.
rancheros.iso: v0.3.0 (latest)
Had to edit /etc/resolv.conf manually, restarted the network. Now can reach network, but pulling any docker image results in:
Pulling repository rancher/agent
FATA[0025] Get https://index.docker.io/v1/repositories/rancher/os/images: dial tcp: lookup index.docker.io on <IP_ADDRESS>:53: read udp <IP_ADDRESS>:53: i/o timeout ```

@maslick Is the network adapter getting renamed in your setup? The originally filed bug was due to a change that renamed network adapters, but in v0.3.0, that should have been fixed.

@deniseschannon yeah, it's eth0

If it's eth0, then the network adapater renaming isn't the issue. Since this bug is closed, could you start a new bug with some more details on how you edited the file to get it to work? Thanks!


Figure out Contract Language for Independent Contractors

Leah (NumFocus) will send us their most generic contract. We should look it over and be sure we're happy with it.

NumFocus has figured this all out.


[zh-cn] Localize docs/concepts/workloads/management.md

Localize docs/concepts/workloads/management.md
Preview: https://deploy-preview-46028--kubernetes-io-main-staging.netlify.app/

This seems to be the previous version: content/zh-cn/docs/concepts/cluster-administration/manage-deployment.md. Move to content/zh-cn/docs/concepts/workloads/management.md.
Is it possible to remove the old version? (content/zh-cn/docs/concepts/cluster-administration/manage-deployment.md)
https://kubernetes.io/zh-cn/docs/concepts/cluster-administration/manage-deployment/

Please sqush your commits into a single one. Refer to:
https://kubernetes.io/docs/contribute/new-content/open-a-pr/#squashing-commits

/approve


Use micromamba based container for CI with GitHub Actions

Hello everyone,
I have an issue using the micromamba docker image in a CI workflow in github actions. To test this, I have also created a minimal working example in this repo: https://github.com/sblauth/docker_mwe
My goal is the following: I want to create a docker container with some dependencies of my software, which I want to install using micromamba. I want to push this image to a registry (say ghcr.io) and then use this in another workflow to install my software in the container directly and then run some tests.
I use the following dockerfile for the container
FROM mambaorg/micromamba:1-jammy AS test

USER root

RUN apt-get update --fix-missing && \
    apt-get install -y libgl1-mesa-dev ffmpeg libsm6 libxext6 curl && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

USER $MAMBA_USER

RUN micromamba install -y -n base -c conda-forge numpy

ARG MAMBA_DOCKERFILE_ACTIVATE=1

RUN python -c "import numpy"

RUN micromamba list

For this test, I simply use numpy to demonstrate the issue. Also, the final two RUN commands are used for debugging.
Next, I use the following workflow file to build and push the image to ghcr.io
name: ghcr.io images

on:
  workflow_dispatch:
  push:
  schedule:
    - cron: '17 21 * * *'

env:
  REGISTRY: ghcr.io
  IMAGE_NAME: ${{ github.repository }}

jobs:
  build-and-push-image:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write

    steps:
      - name: Checkout repository
        uses<EMAIL_ADDRESS>
      - name: Log in to the Container registry
        uses: docker/login-action@v2
        with:
          registry: ${{ env.REGISTRY }}
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Extract metadata (tags, labels) for Docker
        id: meta
        uses: docker/metadata-action@v4
        with:
          images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}

      - name: Build and push Docker image
        uses: docker/build-push-action@v4
        with:
          context: .
          file: ./docker/Dockerfile
          push: ${{ github.event_name != 'pull_request' }}
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}

These two steps work as expected, the image is built and numpy is installed.
Now, I try to use this image in another workflow. Normally, I would install my software here, but for this test case, I just check whether numpy is installed correctly. I use the following workflow
name: Tests

on:
  push:
  pull_request:
  workflow_dispatch:
  schedule:
    - cron: '17 22 * * *'

env:
  OMP_NUM_THREADS: 2

jobs:
  tests:
    name: Tests
    runs-on: ubuntu-latest
    container:
      image: ghcr.io/sblauth/docker_mwe:main

    steps:
    - name: Test installation
      run: |
        micromamba list
        micromamba info
        which micromamba
        python -c "import numpy"

And here is the issue: Somehow, the environment is either not activated correctly or there is some other issue, but I get the following output
Run micromamba list
  micromamba list
  micromamba info
  which micromamba
  python -c "import numpy"
  shell: sh -e {0}
  env:
    OMP_NUM_THREADS: 2
List of packages in environment: ""

       libmamba version : 1.4.9
     micromamba version : 1.4.9
           curl version : libcurl/7.88.1 OpenSSL/3.1.1 zlib/1.2.13 zstd/1.5.2 libssh2/1.11.0 nghttp2/1.52.0
     libarchive version : libarchive 3.6.2 zlib/1.2.13 bz2lib/1.0.8 libzstd/1.5.2
       envs directories : /opt/conda/envs
          package cache : /opt/conda/pkgs
                          /github/home/.mamba/pkgs
            environment : None (not found)
           env location : -
      user config files : /github/home/.mambarc
 populated config files :
       virtual packages : __unix=0=0
                          __linux=5.15.0=0
                          __glibc=2.35=0
                          __archspec=1=x86_64
               channels :
       base environment : /opt/conda
               platform : linux-64
/usr/bin/micromamba
/__w/_temp/b4c93c22-5fa0-48c8-8dee-d92be776c054.sh: 4: python: not found
Error: Process completed with exit code 127.

I have tried several ideas (using shell: bash or bash -l {0}) but to no success. Does anyone know how to use the image that one creates this way in a github actions workflow?
Thanks a lot in advance,
Sebastian

Hi @sblauth thank you for your interest in micromamba and thank you for the very nice reproduction of your issue. I'm surprised it has taken this long for someone to report this.
Github Actions in containers do not execute entrypoint scripts, which is one of the two ways we attempt to automatically activate the base environment. The other way is via ~/.bashrc, but GitHub uses /github/home as the home directory and not the /home/mambauser that we have pre-configured. Therefor our activate script never is executed and you don't get automatic activation.
Two small changes are required in your test in order to get the environment activated:
    steps:
    - name: environment activation
      shell: bash
      run: |
        source /usr/local/bin/_entrypoint.sh
        micromamba list
        micromamba info
        which micromamba
        python -c "import numpy"
        micromamba run -n base python -c "import numpy"

First, shell: bash as we need bash and GitHub Actions default to sh. Then the entrypoint script is explicitly sourced.
Please let me know if that works for you.

I will make an addition to our documentation that explains how to use our container with GitHub Actions.....

Hi @wholtz,
thanks a lot for your quick reply! I already figured that it had something to do with the entrypoint and your solution works great for the test repo I have set up.
I will keep the repository alive for future users to see and will now try this on the actual repo.
And yeah, I think the documentation would benefit from this ;)
Thanks a lot again!

Just a quick note:
I had another issue that I could fix. When I used this approach, everything worked fine for the demo example, but I ran into trouble using the<EMAIL_ADDRESS>action to checkout my repository. I could, however, fix this by using the option
options: --user=root
So the workflow is defined as
name: Tests

on:
  push:
  pull_request:
  workflow_dispatch:
  schedule:
    - cron: '17 22 * * *'

env:
  OMP_NUM_THREADS: 2

jobs:
  tests:
    name: Tests
    runs-on: ubuntu-latest
    container:
      image: ghcr.io/sblauth/docker_mwe:main
      options: --user=root

    steps:
    - name: Test installation
      run: |
        micromamba list
        micromamba info
        which micromamba
        python -c "import numpy"

If someone knows a "nicer" workaround, please let me know.

Thanks a lot @sblauth for the feedback.

but I ran into trouble

Could you be more specific about the issue you had?
@wholz, I am wondering if it would be better to replace shell: bash with shell: /usr/local/bin/_entrypoint.sh? This seems to me more in line with how the entrypoint script actually works. (I have not tested it.)

@maresb - I like your idea. Unfortunately my testing revealed it is a bit more complex than I expected.
This works:
jobs:
  tests:
    name: Tests
    runs-on: ubuntu-latest
    container:
      image: ghcr.io/sblauth/docker_mwe:main
    steps:
    - name: environment activation
      shell: _entrypoint.sh /bin/bash --noprofile --norc -eo pipefail {0}
      run: |
        micromamba list
        micromamba info
        which micromamba
        python -c "import numpy"

shell: throws an error if given the full path to _entrypoint.sh, so this is slightly brittle. (There is something weird going on. You can give a full path to /bin/bash.) And then the script that gets passed to the shell isn't executable, so we need to add /bin/bash in there. If you use a non-standard shell, you need to add {0} (there is an automatic expansion of the standard shells to this form). And then I copied the bash flags that are also part of the automatic expansion when using shell: bash.
Reference: https://github.com/actions/runner/blob/main/docs/adrs/0277-run-action-shell-options.md

Thanks a lot @sblauth for the feedback.

but I ran into trouble

Could you be more specific about the issue you had?

I think it's something along the lines of https://github.com/actions/checkout/issues/47
My error message was the following
/usr/bin/docker exec  22dfc1a271c6a85094fda4c6f7cae8ae85d15c4df010169be4a19eac687359a9 sh -c "cat /etc/*release | grep ^ID"
node:internal/fs/utils:345
    throw err;
    ^

Error: EACCES: permission denied, open '/__w/_temp/_runner_file_commands/save_state_3b69fc4d-9fb0-4c8c-83e5-c6a241d2cb9e'
    at Object.openSync (node:fs:585:3)
    at Object.writeFileSync (node:fs:2170:35)
    at Object.appendFileSync (node:fs:2232:6)
    at Object.issueFileCommand (/__w/_actions/actions/checkout/v3.5.3/dist/index.js:2945:8)
    at Object.saveState (/__w/_actions/actions/checkout/v3.5.3/dist/index.js:2862:31)
    at Object.8647 (/__w/_actions/actions/checkout/v3.5.3/dist/index.js:2321:10)
    at __nccwpck_require__ (/__w/_actions/actions/checkout/v3.5.3/dist/index.js:18251:43)
    at Object.2565 (/__w/_actions/actions/checkout/v3.5.3/dist/index.js:146:34)
    at __nccwpck_require__ (/__w/_actions/actions/checkout/v3.5.3/dist/index.js:18251:43)
    at Object.9210 (/__w/_actions/actions/checkout/v3.5.3/dist/index.js:1141:36) {
  errno: -13,
  syscall: 'open',
  code: 'EACCES',
  path: '/__w/_temp/_runner_file_commands/save_state_3b69fc4d-9fb0-4c8c-83e5-c6a241d2cb9e'
}

Added to FAQ in #357


Back to Search links to catalog.json

It should link to the regular catalog HTML view, not the JSON view.

@joycebcat Have you seen this problem recently?  I wasn't able to reproduce this now, by searching for items, creating new items, or editing existing items.  I'd appreciate it if you can help me reproduce this so we can debug and fix it.  If we can't reproduce this now, we can close it and assume some of the updates over the last month fixed it for us.

@escowles This still happens to me all the time.  I just logged in to Plum in Chrome.  I edited a scanned resource (Atlas of New Jersey), added a secondcollection to it and saved.  When it finished and the Back to Search button appeared, I clicked it and got the JSON view.  I still haven't ever had this NOT happen.  I'm usually using Safari.

@joycebcat Thanks for confirming it's still happening.  I tried a variety of things and found that it was happening in production and staging, but not when I run Plum locally in development mode.  The minimal set of steps to reproduce for me were:

perform a search
view a record
go to the edit form
go back to the record view
reload the page

I've deployed a branch to staging and it's working for me there now.


[Code Generation] Handle duplicate interface definitions

Append an extra $ character at the end of the interface name to avoid conflicts
eg.:
public interface QueryName {
  String name();
  Hero hero();
  interface Hero {
    List<Hero> friends();
    interface Hero {
      long id();
    }
  }

@sav007 can't assign to you, but consider yourself assigned :)


Go to my next challenge button not working.

The go to my next challenge button on the new waypoints sn't working for me on Firefox 38.0.1, though it's fine on Chrome.
The help and bug buttons also aren't working both on the new waypoints and the old style waypoints.The I've completed this challenge button on the old style waypoints is working but the onto my next challenge button that appears after that in the  popup box isn't working.

fixed with full refresh of browser


implement durable timeout in system database recv

This PR aims to address #451.
I only implemented durable timeout in the recv method for now so as to get your feedback before implementing
the functionality in the getEvent method.

The implementation for the getEvent is not clear at all to me since it is called from two places.
The one from workflow is straight forward but how should the dbos_executor generate the timeoutFunctionID ?
Suggestions?

Also I don't see what changes the debug_workflow needs. There is no timeout actually in use there

The implementation for the getEvent is not clear at all to me since it is called from two places. The one from workflow is straight forward but how should the dbos_executor generate the timeoutFunctionID ? Suggestions?

We only need to make sure the sleep is durable for getEvent if it's called from workflow. When it's called from dbos_executor the function ID is always undefined and nothing is persisted in the database. So if the implementation would be similar to recv, but will fall back to use a normal non-durable sleepms if the function ID is undefined.

Also I don't see what changes the debug_workflow needs. There is no timeout actually in use there

In debug_workflow, we still need to increment the function ID twice. Otherwise, downstream functions in debug mode will have their function IDs offset by 1.

While trying to implement the proposed solution to getEvent the system breaks from the generation of the extra functionID.
Any ideas on why is it so?

While trying to implement the proposed solution to getEvent the system breaks from the generation of the extra functionID. Any ideas on why is it so?

Can you provide more information on this?
I think it's also better to put the getEvent implementation in a separate PR.

OK about the getEvent.
This should be ready then.
One last question.
Reading the code I have the feeling that if the operation times out then no database access should occur.
Is that so?
If yes it could be implemented by rejecting the Promise after the sleep call with a custom OperationTimedOutError
and by adding a catch in the Promice.race to return null if the error is an OperationTimedOutError instead of hitting the db.

OK about the getEvent. This should be ready then. One last question. Reading the code I have the feeling that if the operation times out then no database access should occur. Is that so? If yes it could be implemented by rejecting the Promise after the sleep call with a custom OperationTimedOutError and by adding a catch in the Promice.race to return null if the error is an OperationTimedOutError instead of hitting the db.

If the operation times out we will still need to record the output as null. The reason is that we want to make sure the behavior is deterministic when we retry or debug workflows. If the first execution returned a null then the following retries will see the recorded output in the database and skip it.

I will add the tests during the next days.
It's getting late here..

Changes of getEvent reverted. The output can still be recorded as null avoiding execution of the following query when the operation has timeout.
but I guess it is not big of a deal. If you don't wish to implement it for any reason no problem on my side. It is a minor improvement and maybe not worth of the extra complexity in the code. Thanks a lot for your guidance.

I see what you mean, but I think let's not add the extra complexity here.

Test added.
Also changed the expected values.
1500 is arbitrary.
2000 is the sleep value passed so test against it.
Finally a 1000ms for something that should return almost immediately seems to much so I changed it to 200 which in turn is again big (on my PC tests pass even with a value of 10ms) so maybe 50 would be a proper value.


Task3

Issue: #4
switched to superuser mode
changed file permissions
viewed changed file permissions
added used command

Hey @Sarvesh0955
Thanks for opening this PR 🚀. Mentor will review your pull request soon and till then, keep contributing and stay calm.
Thanks for contributing in OpenCode'24 ✨✨!

Hey @Sarvesh0955
Your PR has been merged 🥳🥳 and you have earned 10 points.
Thanks for contributing in OpenCode'24 ✨✨


Qualifying Statement?

In snowflake, you can add qualify to a window function similar to how you might use having on a window function.
https://docs.snowflake.com/en/sql-reference/constructs/qualify.html
Pypika does not appear to allow specifying this. Is it possible to add my own statements in addition to "where", "having", etc. I would like to append a qualify statement on a nested query.

I managed to get around this by extending Query => QualifyingQuery and QueryBuilder => QualifyingQueryBuilder. If this is the way to do it i'm fine with that, just wanted to check if there was a better way to do it.


Referencing a type from a different assembly causes Weaver error

Describe the bug:
Referencing a type from an AssemblyA in an AssemblyB's Rpc throws a Weaver "not supported type" error.
Repro project:
https://drive.google.com/open?id=18s2i5Dx4eB4sevG9gK15Z7xMaEXNbkmk
Project contains a Readme inside the _MirrorTest folder.
To Reproduce

Open the attached project "Networking Experiment"
Open the "MirrorTest" scene
Run it. Note that it will work just fine.
Now move SphereData.cs (in "_MirrorTest/Scripts/") into "_MirrorTest/Scripts/Shared/"
Note that the Shared/ folder contains a separate Assembly Definition.

Expected behavior
Technically, all unity types (Vector3, Quaternion, etc..) are in unity's assembly, but the Weaver handles those well. Maybe it's because they have custom serializers?
Screenshots
Weaver console error: https://i.imgur.com/an9Q4Gl.png
Desktop (please complete the following information):

OS: Windows 10
Build target: Windows
Unity version: 2019.3.3f1
Mirror branch: unsure. Downloaded from asset store. Version: 10.4.7

Work around:
Creating a custom Reader/Writer for the type in its original assembly stops the issue. Not optimal, since the structure is composed only of supported types, but a valid work-around for those in a hurry

Adding to this:
In the Repro Project, change the signature of RpcTest (line 54) to take in SphereData[] instead of SphereData. Weaver will now throw a null reference exception instead of the default unsupported type error. Creating a custom serializer for SphereData is a valid work around in this case as well.
In summary:
Referencing a type from a different assembly in an RPC causes a weaver "not supported type" error. Referencing an array of type from a different assembly in an RPC causes a NullReferenceException.

thanks @GiovanniZambiasi , we will take a look soon


feat: node v0.7.0-rc9 adaptations

Overview
To make testground tests compatible with latest arabica/robusta testnets

Checklist

[ ] New and updated code has appropriate documentation
[ ] New and updated code has new and/or updated testing
[ ] Required CI checks are passing
[ ] Visual proof for any user facing features like CLI or documentation updates
[ ] Linked issues closed with keywords

Hi! Awesome changes! I think nodekit.IsSyncing should return !state Finished() instead.


Can't make snapshot of iOS app that includes Watch target

Can't run snapshot for the iOS app that includes Apple Watch target

Steps:

Create new iOS app with Watch OS 2
run snapshot init
run snapshot

Get Error:
"target specifies product type 'com.apple.product-type.watchkit2-extension', but there's no such product type for the 'iphonesimulator' platform"
It should use correct platform form the watch target
[14:36:09]:  xctool -sdk iphonesimulator CONFIGURATION_BUILD_DIR='/tmp/snapshot/build' -project '/Users/konstantin/Desktop/Test/Test.xcodeproj' -scheme 'Test' DSTROOT='/tmp/snapshot' OBJROOT='/tmp/snapshot' SYMROOT='/tmp/snapshot'  clean build
[Info] Loading settings for scheme 'Test' ... (901 ms)

=== CLEAN ===

  xcodebuild clean Test
    Test / Test WatchKit Extension (Debug)
      ✗ Check dependencies (127 ms)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Check dependencies
target specifies product type 'com.apple.product-type.watchkit2-extension', but there's no such product type for the 'iphonesimulator' platform
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
      1 errored, 0 warning (129 ms)

Failures:

  0) Check dependencies
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 Check dependencies
 target specifies product type 'com.apple.product-type.watchkit2-extension', but there's no such product type for the 'iphonesimulator' pla━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

** CLEAN FAILED ** (1980 ms)

/Users/konstantin/.rvm/rubies/ruby-2.1.1/lib/ruby/gems/2.1.0/gems/snapshot-0.10.1/lib/snapshot/builder.rb:44:in `build_app': Looks like the build was not successful. (RuntimeError)
	from /Users/konstantin/.rvm/rubies/ruby-2.1.1/lib/ruby/gems/2.1.0/gems/snapshot-0.10.1/lib/snapshot/runner.rb:11:in `work'
	from /Users/konstantin/.rvm/rubies/ruby-2.1.1/lib/ruby/gems/2.1.0/gems/snapshot-0.10.1/bin/snapshot:40:in `block (3 levels) in run'
	from /Users/konstantin/.rvm/rubies/ruby-2.1.1/lib/ruby/gems/2.1.0/gems/snapshot-0.10.1/bin/snapshot:37:in `chdir'
	from /Users/konstantin/.rvm/rubies/ruby-2.1.1/lib/ruby/gems/2.1.0/gems/snapshot-0.10.1/bin/snapshot:37:in `block (2 levels) in run'
	from /Users/konstantin/.rvm/rubies/ruby-2.1.1/lib/ruby/gems/2.1.0/gems/commander-4.3.5/lib/commander/command.rb:178:in `call'
	from /Users/konstantin/.rvm/rubies/ruby-2.1.1/lib/ruby/gems/2.1.0/gems/commander-4.3.5/lib/commander/command.rb:178:in `call'
	from /Users/konstantin/.rvm/rubies/ruby-2.1.1/lib/ruby/gems/2.1.0/gems/commander-4.3.5/lib/commander/command.rb:153:in `run'
	from /Users/konstantin/.rvm/rubies/ruby-2.1.1/lib/ruby/gems/2.1.0/gems/commander-4.3.5/lib/commander/runner.rb:428:in `run_active_command'
	from /Users/konstantin/.rvm/rubies/ruby-2.1.1/lib/ruby/gems/2.1.0/gems/commander-4.3.5/lib/commander/runner.rb:68:in `run!'
	from /Users/konstantin/.rvm/rubies/ruby-2.1.1/lib/ruby/gems/2.1.0/gems/commander-4.3.5/lib/commander/delegates.rb:15:in `run!'
	from /Users/konstantin/.rvm/rubies/ruby-2.1.1/lib/ruby/gems/2.1.0/gems/snapshot-0.10.1/bin/snapshot:85:in `run'
	from /Users/konstantin/.rvm/rubies/ruby-2.1.1/lib/ruby/gems/2.1.0/gems/snapshot-0.10.1/bin/snapshot:91:in `<top (required)>'
	from /Users/konstantin/.rvm/gems/ruby-2.1.1/bin/snapshot:23:in `load'
	from /Users/konstantin/.rvm/gems/ruby-2.1.1/bin/snapshot:23:in `<main>'
	from /Users/konstantin/.rvm/gems/ruby-2.1.1/bin/ruby_executable_hooks:15:in `eval'
	from /Users/konstantin/.rvm/gems/ruby-2.1.1/bin/ruby_executable_hooks:15:in `<main>'
➜  Test

Fix:

duplicate target
In build phases remove Watch App target dependency
In build phases remove embedded Watch Content

Run the snapshot, it works

I just released snapshot 1.0, please follow the migration guide.
Since the underlying snapshot was completely rewritten, I'm closing this issue now. Feel free to submit a new issue if you're experiencing an issue :+1:

Ok! Thanks


Fix extra line insertion.

Another attempt at fixing #155 and another edge case where two overflowing words next to each other create a shadow run.
Passes all tests and adds a new test.
cc @grovesNL if you wouldn't mind testing this resolves your issue as well.

This is ready for review.

@jackpot51 Would you be open to cutting a new minor version of cosmic text that includes this fix? If not, could you provide more details on the typical release process and when we could expect this to be in a stable release? Thanks so much!


When I send a GET request to ODATA using SAP Cloud SDK in SAP Business Application Studio, an empty object is returned

Issue Description
In SAP Business Application Studio, I am developing a Java program that uses SAP Cloud SDK to send a GET request to ODATA to retrieve data.
When executing a GET request, some ODATA successfully retrieves data, but there is an issue where an empty object is returned for some ODATA.
Even if an empty object is returned, no error occurs and the program ends normally.
In addition, when executing a request with the SAP standard transaction code "/n/IWFND/GW_CLIENT" or Postman for the problematic ODATA, data can be retrieved without any problems. Data cannot be retrieved only when calling from SAP Business Application Studio.
Has there been any confirmed occurrence of such an issue to date?
*Due to confidentiality reasons, I cannot share the details of the project, so I am providing the minimum information possible to start with. I will add more information as necessary.
Supplementary Information
--ODATA for which data cannot be obtained:
1)ODATA：API_PRODUCT_SRV
　Entity：A_ProductPlant、A_ProductStorageLocation、A_ProductValuation
2)ODATA：API_COSTCENTER_SRV
　Entity：A_Costcenter
3)ODATA：API_MATERIAL_STOCK_SRV
　Entity：A_MatlStkInAcctMod
4)ODATA：API_GLACCOUNTINCHARTOFACCOUNTS_SRV
　Entity：A_GLAccountText
--Sample source code:
Here is the source code to execute a GET request on API_PRODUCT_SRV.A_ProductStorageLocation.
private static final HttpDestination destination = DestinationAccessor.getDestination("destination name").asHttp();
private static final DefaultProductSrvService service = new DefaultProductSrvService().withServicePath("service path");
final List<StorageLocationData> result = service.getAllProductStorageLocation().executeRequest(destination);

--SDK version: <5.14.0>
--Project type: MTA project
--Development environment: SAP Business Application Studio

Hi @absmh,
Are you trying to access the OData service on an on-premise system or a Cloud system?
Could you please cross-check with this guide, to see if your set up with Business Application Studio is right?
The code snippet looks good to me, so if there is an issue while retrieving data you should ideally get an ODataException.
Do you have any additional code in a catch block to return gracefully in case of failures?
Would it be possible to get debug logs or debug your application to see what exactly happens? And if the OData service itself is returning these empty results?
Regards,
Kavitha

Hi @KavithaSiva ,
Sorry for the late reply. Thank you for your comment.
I am trying to access an OData service on an on-premise system.
I checked the guide and there seemed to be no problem with the Business Application Studio setup.
I omitted this in the source code I provided, but the part where the data is retrieved is surrounded by a try-catch so that the ODataException can be caught. There is also an outer try-catch so that other exceptions can be caught.
However, when I run the program, no exceptions occur and it ends normally, so I cannot find out what is wrong.
try{
	・・・
	try{
		final List<StorageLocationData> result = service.getAllProductStorageLocation().executeRequest(destination);
	}catch(ODataException e){
                //Outputting logs
		throw new ODataException(e);
	}
	・・・
}catch(Exception e){
         //Outputting logs
	throw new Exception(e);
}

If the code snippet is correct, are there any other possible causes? If there are any points that I should pay attention to, such as environment settings or permission settings, I would appreciate it if you could let me know.
Thank you,

We do have a short BAS section in the Java docs too. However since your request succeeds without exception, our concerns regarding the connectivity seem unproductive for your case. Your concern is empty OData payload, if I understood correctly.

While you have a static OData service instance, that's fine, we strongly discourage users to declare destinations statically. While the former is (almost) stateless, the latter has temporary state. Letting destinations live for eternity may lead to authentication tokens aging and worst case disabling multi-tenancy. SAP Cloud SDK has an effective caching logic, that encourages users to always resolve destinations via DestinationAccessor everytime at runtime. There should not be any drawbacks.

If the response object in Java code differs from your manual REST client request (e.g. Postman), then something is different with the request parameters. I would suggest to temporary enable HTTP wirelogs. Just for the duration of your investigation, you can set log level: org.apache.http=DEBUG, this will show all traffic for your application. Hopefully you'll find the affected request and compare the traffic with your REST client call.


Remove --bun flag from bun component install commands

I've been having issues where the flag breaks the entire project. More specifically when trying to use components such as Toast when installed with the --bun flag I would receive this error:

When I removed all the Toast related files from components/ui and reinstalled it without the --bun flag the error was resolved and the Toaster was working as expected.
I've also encountered this issue when trying to use the navigation menu
This is the bad command: bunx --bun shadcn-ui@latest add navigation-menu
This is the good command: bunx shadcn-ui@latest add navigation-menu

This issue has been automatically closed because it received no activity for a while. If you think it was closed by accident, please leave a comment. Thank you.


[Bug]: Pixtral inference not working correctly with LLMEngine/AsyncEngine

Your current environment

The output of `python collect_env.py`
Collecting environment information...
PyTorch version: 2.4.0+cu121
Is debug build: False
CUDA used to build PyTorch: 12.1
ROCM used to build PyTorch: N/A

OS: Ubuntu 22.04.4 LTS (x86_64)
GCC version: (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
Clang version: Could not collect
CMake version: version 3.22.1
Libc version: glibc-2.35

Python version: 3.10.12 (main, Jul 29 2024, 16:56:48) [GCC 11.4.0] (64-bit runtime)
Python platform: Linux-5.15.0-119-generic-x86_64-with-glibc2.35
Is CUDA available: True
CUDA runtime version: 12.2.140
CUDA_MODULE_LOADING set to: LAZY
GPU models and configuration: GPU 0: NVIDIA A100 80GB PCIe
Nvidia driver version: 535.183.01
cuDNN version: Probably one of the following:
/usr/lib/x86_64-linux-gnu/libcudnn.so.8.9.6
/usr/lib/x86_64-linux-gnu/libcudnn_adv_infer.so.8.9.6
/usr/lib/x86_64-linux-gnu/libcudnn_adv_train.so.8.9.6
/usr/lib/x86_64-linux-gnu/libcudnn_cnn_infer.so.8.9.6
/usr/lib/x86_64-linux-gnu/libcudnn_cnn_train.so.8.9.6
/usr/lib/x86_64-linux-gnu/libcudnn_ops_infer.so.8.9.6
/usr/lib/x86_64-linux-gnu/libcudnn_ops_train.so.8.9.6
HIP runtime version: N/A
MIOpen runtime version: N/A
Is XNNPACK available: True

CPU:
Architecture:                         x86_64
CPU op-mode(s):                       32-bit, 64-bit
Address sizes:                        46 bits physical, 48 bits virtual
Byte Order:                           Little Endian
CPU(s):                               12
On-line CPU(s) list:                  0-11
Vendor ID:                            GenuineIntel
Model name:                           Intel(R) Xeon(R) Gold 6342 CPU @ 2.80GHz
CPU family:                           6
Model:                                106
Thread(s) per core:                   1
Core(s) per socket:                   12
Socket(s):                            1
Stepping:                             6
BogoMIPS:                             5600.12
Flags:                                fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush acpi mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single intel_ppin ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves umip pku ospke gfni vaes vpclmulqdq rdpid md_clear flush_l1d arch_capabilities
Hypervisor vendor:                    Xen
Virtualization type:                  full
L1d cache:                            576 KiB (12 instances)
L1i cache:                            384 KiB (12 instances)
L2 cache:                             15 MiB (12 instances)
L3 cache:                             432 MiB (12 instances)
NUMA node(s):                         1
NUMA node0 CPU(s):                    0-11
Vulnerability Gather data sampling:   Not affected
Vulnerability Itlb multihit:          Not affected
Vulnerability L1tf:                   Not affected
Vulnerability Mds:                    Not affected
Vulnerability Meltdown:               Not affected
Vulnerability Mmio stale data:        Mitigation; Clear CPU buffers; SMT Host state unknown
Vulnerability Reg file data sampling: Not affected
Vulnerability Retbleed:               Not affected
Vulnerability Spec rstack overflow:   Not affected
Vulnerability Spec store bypass:      Mitigation; Speculative Store Bypass disabled via prctl and seccomp
Vulnerability Spectre v1:             Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2:             Mitigation; Enhanced / Automatic IBRS; IBPB conditional; RSB filling; PBRSB-eIBRS SW sequence; BHI SW loop, KVM SW loop
Vulnerability Srbds:                  Not affected
Vulnerability Tsx async abort:        Not affected

Versions of relevant libraries:
[pip3] numpy==1.26.4
[pip3] nvidia-cublas-cu12==<IP_ADDRESS>
[pip3] nvidia-cuda-cupti-cu12==12.1.105
[pip3] nvidia-cuda-nvrtc-cu12==12.1.105
[pip3] nvidia-cuda-runtime-cu12==12.1.105
[pip3] nvidia-cudnn-cu12==<IP_ADDRESS>
[pip3] nvidia-cufft-cu12==<IP_ADDRESS>
[pip3] nvidia-curand-cu12==<IP_ADDRESS>
[pip3] nvidia-cusolver-cu12==<IP_ADDRESS>
[pip3] nvidia-cusparse-cu12==<IP_ADDRESS>
[pip3] nvidia-ml-py==11.525.150
[pip3] nvidia-nccl-cu12==2.20.5
[pip3] nvidia-nvjitlink-cu12==12.6.68
[pip3] nvidia-nvtx-cu12==12.1.105
[pip3] pyzmq==26.2.0
[pip3] torch==2.4.0
[pip3] torchvision==0.19.0
[pip3] transformers==4.44.2
[pip3] triton==3.0.0
[conda] Could not collect
ROCM Version: Could not collect
Neuron SDK Version: N/A
vLLM Version: 0.6.1@3fd2b0d21cd9ec78de410fdf8aa1de840e9ad77a
vLLM Build Flags:
CUDA Archs: Not Set; ROCm: Disabled; Neuron: Disabled
GPU Topology:
GPU0	CPU Affinity	NUMA Affinity	GPU NUMA ID
GPU0	 X 	0-11	0		N/A

Legend:

  X    = Self
  SYS  = Connection traversing PCIe as well as the SMP interconnect between NUMA nodes (e.g., QPI/UPI)
  NODE = Connection traversing PCIe as well as the interconnect between PCIe Host Bridges within a NUMA node
  PHB  = Connection traversing PCIe as well as a PCIe Host Bridge (typically the CPU)
  PXB  = Connection traversing multiple PCIe bridges (without traversing the PCIe Host Bridge)
  PIX  = Connection traversing at most a single PCIe bridge
  NV#  = Connection traversing a bonded set of # NVLinks

Model Input Dumps
No response
🐛 Describe the bug
This code snippets does not work
import PIL.Image
import uuid
from vllm import EngineArgs, LLMEngine
from vllm import SamplingParams, TextPrompt
from vllm.multimodal import MultiModalDataBuiltins

MODEL_ID = "mistral-community/pixtral-12b-240910"
ENGINE_ARGS = EngineArgs(
    model=MODEL_ID,
    tokenizer_mode="mistral",
    enable_prefix_caching=True,
    limit_mm_per_prompt=dict(image=4),
    max_num_batched_tokens=16384,
)
SAMPLING_PARAM = SamplingParams()

engine = LLMEngine.from_engine_args(ENGINE_ARGS)
prompt = "describe the image"

engine_inputs = TextPrompt(prompt=prompt)

image = PIL.Image.open("demo.jpg")
mm_data = MultiModalDataBuiltins(image=[image])
engine_inputs["multi_modal_data"] = mm_data

engine.add_request(uuid.uuid4().hex, engine_inputs, SAMPLING_PARAM)

while True:
    out = engine.step()
    for request_output in request_outputs:
        if request_output.finished:
            print(request_output)
    if not engine.has_unfinished_requests():
        break

This will give an output message like:
 File "/workspace/codes/example/vllm/pixtral-12b/venv/lib/python3.10/site-packages/vllm/model_executor/models/pixtral.py", line 117, in merge_multimodal_embeddings
    assert (seq_len == N_txt +
AssertionError: seq_len 7 should be equal to N_txt + N_img (7, 1200, 0)

It seems that I need to manually padding the input token ids with image_token_ids like this:
tokenizer = engine.get_tokenizer()
token_ids = tokenizer(prompt).input_ids
image_token_id = 10
token_ids = [image_token_id] * image_token_num + token_ids

engine_inputs = TokensPrompt(prompt_token_ids=token_ids)

mm_data = MultiModalDataBuiltins(image=[image])
engine_inputs["multi_modal_data"] = mm_data

To make it work.
AsyncLLMEngine also see the same limitation and I need similar modification to make it works like: https://github.com/bentoml/BentoVLLM/pull/71/files#diff-357f77bce00e63217bb5ec382293bca653276e58af9bdfb6e7c50ca9487e27aeR84-R94
Is this behavior intended or a bug?
Before submitting a new issue...

[X] Make sure you already searched for relevant issues, and asked the chatbot living at the bottom right corner of the documentation page, which can answer lots of frequently asked questions.

Please see if the solutions in #8382 can solve the issue encountered by you

Also currently looking into the problem - also maybe see: https://github.com/vllm-project/vllm/pull/8415

Hey @larme,
Upon taking a closer look the problem here is actually not related to the initialization of the model, but occurs because images and the prompt are independently passed before being processed by mistral common's tokenizer.
When using the image and prompt have to be processed together by mistral common to ensure that the tokens are in the right format. E.g. the following works correctly:
import PIL.Image
import uuid
from vllm import EngineArgs, LLMEngine
from vllm import SamplingParams, TokensPrompt
from vllm.multimodal import MultiModalDataBuiltins

from mistral_common.protocol.instruct.messages import (
    UserMessage,
    TextChunk,
    ImageURLChunk,
    ImageChunk,
)
from PIL import Image
from mistral_common.protocol.instruct.request import ChatCompletionRequest
from mistral_common.tokens.tokenizers.mistral import MistralTokenizer

# MODEL_ID = "mistral-community/pixtral-12b-240910"
MODEL_ID = "mistralai/Pixtral-12B-2409"
ENGINE_ARGS = EngineArgs(
    model=MODEL_ID,
    tokenizer_mode="mistral",
    limit_mm_per_prompt=dict(image=4),
    max_num_batched_tokens=16384,
    max_model_len=16384,
)
SAMPLING_PARAM = SamplingParams()

engine = LLMEngine.from_engine_args(ENGINE_ARGS)
prompt = "describe the image"
image = PIL.Image.open("demo.jpg")

tokenizer = engine.tokenizer.tokenizer.mistral

# tokenize images and text
tokenized = tokenizer.encode_chat_completion(
    ChatCompletionRequest(
        messages=[
            UserMessage(
                content=[
                    TextChunk(text=prompt),
                    ImageChunk(image=image),
                ]
            )
        ],
        model="pixtral",
    )
)

engine_inputs = TokensPrompt(prompt_token_ids=tokenized.tokens)

mm_data = MultiModalDataBuiltins(image=[image])
engine_inputs["multi_modal_data"] = mm_data

engine.add_request(uuid.uuid4().hex, engine_inputs, SAMPLING_PARAM)

while True:
    out = engine.step()
    for request_output in out:
        if request_output.finished:
            print(request_output)
    if not engine.has_unfinished_requests():
        break

@DarkLight1337 I'm not sure what the best way is to make sure users always pre-process with the MistralTokenizer. It's done automatically whenever requests are passed in chat format. Should we maybe throw an error if people try to pass a raw prompt to Pixtral so that the above error doesn't happen too much?

If you have special characters that are only available via your tokenizer, you may search the text for those characters and throw an error if none are found.

If you have special tokens that are only available via your tokenizer, you may search the text for those tokens inside the input processor and throw an error if none are found.

Great idea - I'll add this to #8415

To close the loop - #8415 should fix images with incorrect image init & resizing.
Two things that I noticed:

As @DarkLight1337 already mentioned before we have to disable chunked prefilling for now, so always set enable_chunked_prefill=True. @DarkLight1337 can we maybe set this as a default for pixtral?

Previously, the image processing was done incorrectly - I've accidentally only taken the last image because it worked and because I didn't know about 1.), but this should be fixed now in #8415

Here a complete more complex example that should illustrate how to use the model:
import PIL.Image
import uuid
from vllm import EngineArgs, LLMEngine
from vllm import SamplingParams, TokensPrompt
from vllm.multimodal import MultiModalDataBuiltins

from mistral_common.protocol.instruct.messages import (
    UserMessage,
    TextChunk,
    ImageURLChunk,
    ImageChunk,
)
from PIL import Image
from mistral_common.protocol.instruct.request import ChatCompletionRequest
from mistral_common.tokens.tokenizers.mistral import MistralTokenizer

# MODEL_ID = "mistral-community/pixtral-12b-240910"
MODEL_ID = "mistralai/Pixtral-12B-2409"
ENGINE_ARGS = EngineArgs(
    model=MODEL_ID,
    tokenizer_mode="mistral",
    enable_chunked_prefill=False,
    limit_mm_per_prompt=dict(image=4),
    max_num_batched_tokens=16384,
    max_model_len=16384,
)
SAMPLING_PARAM = SamplingParams(temperature=0.0, max_tokens=512)

prompt = "describe the images"
image = PIL.Image.open("demo.jpg").resize((400, 500))
image_2 = PIL.Image.open("demo_2.jpg").resize((560, 800))
image_3 = PIL.Image.open("demo_3.jpg").resize((150, 200))
image_4 = PIL.Image.open("demo_4.jpg").resize((344, 444))

engine = LLMEngine.from_engine_args(ENGINE_ARGS)

tokenizer = engine.tokenizer.tokenizer.mistral

def create_image_input(images, prompt):
# tokenize images and text
    tokenized = tokenizer.encode_chat_completion(
        ChatCompletionRequest(
            messages=[
                UserMessage(
                    content=[
                        TextChunk(text=prompt),
                    ] + [ImageChunk(image=img) for img in images]
                )
            ],
            model="pixtral",
        )
    )

    engine_inputs = TokensPrompt(prompt_token_ids=tokenized.tokens)

    mm_data = MultiModalDataBuiltins(image=images)
    engine_inputs["multi_modal_data"] = mm_data

    return engine_inputs

engine.add_request(uuid.uuid4().hex, create_image_input([image, image_3], prompt), SAMPLING_PARAM)
engine.add_request(uuid.uuid4().hex, create_image_input([image_2], prompt), SAMPLING_PARAM)

count = 0
while True:
    out = engine.step()
    count += 1
    for request_output in out:
        if request_output.finished:
            print(request_output.outputs[0].text)

    if count == 2:
        engine.add_request(uuid.uuid4().hex, create_image_input([image, image_4], prompt), SAMPLING_PARAM)
    if not engine.has_unfinished_requests():
        break

thanks @patrickvonplaten ! This also works wonderfully in AsyncLLMEngine. We made an example here: https://github.com/bentoml/BentoVLLM/blob/main/pixtral-12b/service.py


Fix Core Javadocs to Support Java 19

Description
Modifies Javadocs in Core libraries to comply with Javadoc requirements in Java 19.
All SDK Contribution checklist:

[x] The pull request does not introduce [breaking changes]
[x] CHANGELOG is updated for new features, bug fixes or other significant changes.
[x] I have read the contribution guidelines.

General Guidelines and Best Practices

[x] Title of the pull request is clear and informative.
[x] There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, see this page.

Testing Guidelines

[x] Pull request includes test coverage for the included changes.

API change check
API changes are not detected in this pull request.


robot_name

Refactor robot_name to use methods and clean up the code

Nice work!  You're done with this one.


Builds failing on Windows due to pathing issues

Describe the Bug
On Windows specifically, the package cannot be built at all, as multiple modules relating to preact cannot be resolved.
ERROR in ./preact/hooks/dist/hooks.module.js 1:0-37
Module not found: Error: Can't resolve '....' in 'C:\dev\bpmn-io\properties-panel\properties-panel\preact\hooks\dist'
 @ ./src/PropertiesPanel.js 1:0-54 84:30-38 85:2-11
 @ ./test/spec/PropertiesPanel.spec.js 5:0-50 258:21-36
 @ ./test/ sync .spec\.js$ ./spec/PropertiesPanel.spec.js test/spec/PropertiesPanel.spec.js
 @ ./test/testBundle.js 1:17-57

Steps to Reproduce

Clone the repo on a Windows machine
Execute npm install
Execute npm run dev

Expected Behavior
We expect the build to complete without errors.
Environment

Host: Node v14
OS: Window 10
Library version: 0.10.0

Hypothesis: in the rewire step, Windows paths are not properly escaped. Cf. https://github.com/bpmn-io/properties-panel/blob/6ceac4f11124fb2a82627f17f0245c496a1c862c/rollup.config.js#L55-L74
I can't test it on windows right now

Let's also consider adding Windows + Mac as additional OS on CI
https://github.com/bpmn-io/properties-panel/blob/main/.github/workflows/CI.yml


Workspaces background unexpectedly turns white

The background of Workspaces turns white but only if i have only chromium in that workspace.
Here is the workspaces part of my style.css
#workspaces
{
    background: transparent;
    margin-top: 1px;
    margin-left: 2px;
    padding-bottom: 1px;
}
#workspaces button
{
    color: darkgray;
}
 #workspaces button.focused
{
    color: white;
}
 #workspaces button:hover {
    box-shadow: inherit;
    text-shadow: inherit;
    color: #58abb7;
    background: transparent;
}
 #workspaces button.urgent {
    background-color: #f77923;
}

As evident in the style.css the background should be transparent like the rest of the bar.

Are your background white?

No. All my backgrounds are set to "transparent". This is how the Workspaces area looks like when chromium is not open:

Ahh i see, you must have the following block.
window#waybar.chromium {
    background-color: #000000;
    border: none;
}

Or something like that, no?

No here is my full config:
https://gist.github.com/jajo-11/58076b36ad0b98aef5813f28b62c9ae5
By i am running:

Waybar v0.8.0
Chromium 77.0.3865.90 Arch Linux
sway version 1.2 (Aug 29 2019, Arch Linux)

Are you using a theme?

What kind of theme?

GTK system wide theme

I do, it is called Qogir, but i observe the same effect on other themes as "Clearlooks", "Crux" and "Raleigh"

My waybar turns black, and I have wlr/taskbar enabled whose icons gain a huge white border, when Chromium is open. It doesn't happen with any other app on my system. Should I open a new issue for this?


install an old version

How can I install an old (selected by me) version of Cloud Foundry CLI?

Hi @oprogramador the easiest way is to select a specific release from our release page.

Thanks.


Command::execute() should always return int - deprecate returning null

Laravel Version: 5.8.35 (I think it is in 6.x as well)
PHP Version: 7.2.25
Database Driver & Version: MySql 5.7
Symfony/Console: >= 4.4.0

Description:
According to https://github.com/symfony/symfony/issues/33747, a change in Symfony, Command::execute must always return an integer value. I don't think it was a good change, but if it is supposed to remain, in Laravel, either the doc blocks for the generated commands' handle() function should change, or add some handy code can be added in Lavavel's override of execute()  to convert return values to integer. I guess the plan is to not support non-ingeter return values in Symfony 5.
Steps To Reproduce:
Run a command that doesn't return null inside tinker to see the warning:
PHP Deprecated:  Return value of "App/Console/Commands/...::execute()" should always be of the type int since Symfony 4.4, NULL returned. in ....php on line ...

Even in a strictly typed language like C I can have an int function that returns nothing, it will be automatically converted to 0. Also you can define main as being void. So why C is more flexible than Symfony here?

This has nothing to do with C vs Symfony, cause Symfony is framework based on PHP, which from the beginning converts method call without declared return type to null, that the problem here.
The points to force the return type is to make code more clear (often on error there was return 1 without return 0 on success) output, easier maintenance, less potential hacks which convert null into 0, easier portability between systems etc. all of those were described in related PR/issues IIRC.
Also if you dont like that deprecation, then make your code use exactly the version before it was added, there is no force to use latest.

@stloyd If this makes the code cleaner I am fine with it, even though I really don't get it. I don't think I will stick with the old versions just because of some deprecation message. I'd rather to fix either my console commands or see some changes in the Laravel, or better in my opinion, a revert in Symfony.

If Symfony remains as it is, I think for the next major version of laravel this change will be fine:
    /**
     * Execute the console command.
     *
     * @param  \Symfony\Component\Console\Input\InputInterface  $input
     * @param  \Symfony\Component\Console\Output\OutputInterface  $output
     * @return int
     */
    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $result = $this->laravel->call([$this, 'handle']);
        return is_int($result) ? $result : 0;
    }

Next major version of laravel already supports symfony 5: https://github.com/laravel/framework/pull/30610

@RFreij Oh, I didn't noticed that. I guess this issue is closed then. Thanks


concat field sort

i used field with concat it can show but when sort by that column it have error
SELECT * FROM ( 	SELECT [EntryDate] 		,[ExitDate] 		,[JobTitle] 		,[user_id] 		,Title_en + ' ' + FirstName_en + ' ' + MiddleName_en + ' ' + LastName_en AS name_en 		,Title_th + ' ' + FirstName_th + ' ' + MiddleName_th + ' ' + LastName_th AS name_th 		,row_number() OVER ( 			ORDER BY [name_en] DESC 			) AS row_num 	FROM [users_hr] 	) AS temp_table WHERE row_num BETWEEN 21 		AND 40
i need query by
SELECT * FROM ( 	SELECT [EntryDate] 		,[ExitDate] 		,[JobTitle] 		,[user_id] 		,Title_en + ' ' + FirstName_en + ' ' + MiddleName_en + ' ' + LastName_en AS name_en 		,Title_th + ' ' + FirstName_th + ' ' + MiddleName_th + ' ' + LastName_th AS name_th 		,row_number() OVER ( 			ORDER BY Title_en + ' ' + FirstName_en + ' ' + MiddleName_en + ' ' + LastName_en DESC 			) AS row_num 	FROM [users_hr] 	) AS temp_table WHERE row_num BETWEEN 21 		AND 40
may i add custom order by when sort by this field?

Hi!

Try to list columns and add alias for concatenated column in outer select instead of "Select *", then you can name your grid column according to that alias and make it sortable (but you will need some hacks to perform filtering if you need  because aliases can't be used in SQL WHERE section, you will need to use $fiter->setFilteringFunc() initialized by callback that will add correct condition to query builder).
If just calling $queryBuilder->orderBy() will not help you create required query, you need to iplement your own component that cen do all query changes in prepare() method  ($grid->getConfig()->getDataProvider()->getBuilder() will give you access to query builder).
Finally you can process input in controller and do whatever you want with your query before creating grid. But anyway you need to render some controls. Use \Nayjest\Grids\Components\RenderFunc component initialized by callback that returns HTML to render whatever you want in any place of grid.

Please give me know if it helped.

i change FilterConfig by add orderBy
                                $provider->getBuilder()
                                    ->where(function ($query) use ($val) {
                                        $query->where('users_hr.Title_th', 'LIKE', "%$val%")
                                            ->orWhere('users_hr.FirstName_th', 'LIKE', "%$val%")
                                            ->orWhere('users_hr.MiddleName_th', 'LIKE', "%$val%")
                                            ->orWhere('users_hr.LastName_th', 'LIKE', "%$val%");
                                    })
                                    ->orderBy(DB::raw("Title_th + ' ' + FirstName_th + ' ' + MiddleName_th + ' ' + LastName_th"));

it work in first page but error in pagination because order by Title_en + ' ' + FirstName_en + ' ' + MiddleName_en + ' ' + LastName_en DESC, name_en DESC

Can you share error / exception message & trace ?

DB::raw("Title_th + ' ' + FirstName_th + ' ' + MiddleName_th + ' ' + LastName_th")

Strange code. Do you use MYSQL?
Maybe you need:
DB::raw("CONCAT(Title_th, ' ', FirstName_th, ' ', MiddleName_th, ' ', LastName_th")

?


Callback URL drops full path

Describe the issue:
When creating an application, while adding the callback URL, the full path is not taken and only takes the hostname only as the callback URL.[1]
After adding the callback URL, when viewing the protocol tab, the allowed Origin is taken as localhost[2]
[1]

[2]

How to reproduce:

Add an application with the following URL - https://www.mywebsite.com/login
Create the application
Go to protocol tab once application is created.

Expected behavior:
Should take the user entered URL without any manipulation .

This issue is being closed due to extended inactivity. Please feel free to reopen it if further attention is needed. Thank you for helping us keep the issue list relevant and focused!