stdenv/generic/setup.sh: enable parallel installs for parallel builds

The primary motivating example is openssl:
Before the change full package build took 1m54s minutes. After the change full package build takes 59s.
About a 2x speedup.
The difference is visible because openssl builds hundreds of manpages spawning a perl process per manual in install phase. Such a workload is very easy to parallelize.
Another example would be autotools+libtool based build system where install step requires relinking. The more binaries there are to relink the more gain it will be to do it in parallel.
The change enables parallel installs by default only for buiilds that already have parallel builds enabled. There is a high chance those build systems already handle parallelism well but some packages will fail.
Description of changes

Things done

Built on platform(s)

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

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

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

[ ] 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/)
23.05 Release Notes (or backporting 22.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

[x] Fits CONTRIBUTING.md.

If a package build is doing anything other than installing files in the installPhase, that smells to me that it's building some previously unbuilt target that should have been built in the buildPhase but wasn't. Your example might be still building the docs as a dependency of the install.
The correct fix in that case would be to explicitly build all targets that are to be installed rather than accelerating builds in the installPhase.
Now of course there might still be a benefit to installing in parallel (I would expect there to be one) but that should be evaluated independently of the coincidental fix to the potential issue above.

If a package build is doing anything other than installing files in the installPhase, that smells to me that it's building some previously unbuilt target that should have been built in the buildPhase but wasn't. Your example might be building the docs as a dependency of the install.
The correct fix in that case would be to explicitly build all targets that are to be installed rather than accelerating builds in the installPhase.

I will not stop you from fixing it. But I do not think such fixes belong to nixpkgs and should be done upstream. I would say it's a good enough workaround to just make these cases faster. No need to penalize nixpkgs users for upstream faults. Calling make with and without -j is inconsistent. I would say openssl is a perfect example where it helps.

Now of course there might still be a benefit to installing in parallel (I would expect there to be one) but that should be evaluated independently of the coincidental fix to the potential issue above.

ghc is another example of heavyweight make install. gcc is yet another one. Both install many files and relink executables against target install directory.

I will not stop you from fixing it. But I do not think such fixes belong to nixpkgs and should be done upstream.

It really wouldn't be much of a fix; you'd merely declare the default + additional targets in buildFlags. Yes that is absolutely an upstream bug and they should fix it internally but that applies to many things we currently patch ourselves.

I would say it's a good enough workaround to just make these cases faster. No need to penalize nixpkgs users for upstream faults. Calling make with and without -j is inconsistent. I would say openssl is a perfect example where it helps.

I generally agree but I fear doing so would mask the actual issue that should be worked around or at least reported.
Therefore, I'd advocate for this feature being handled the same as enableParallelBuilding; disabled by default unless config.enableParallelInstallingByDefault but enabled by default for select build systems that are known to handle it well and/or benefit from it.
Another unknown is whether this affects r13y (certain parallel builds have done so in the past) which is also why I'd prefer this being off by default.

ghc is another example of heavyweight make install. gcc is yet another one. Both install many files and relink executables against target install directory.

That's great. My point is that this PR's merit should be measured by cases like that rather than (potentially, I haven't checked) broken build scripts.

I will not stop you from fixing it. But I do not think such fixes belong to nixpkgs and should be done upstream.

It really wouldn't be much of a fix; you'd merely declare the default + additional targets in buildFlags. Yes that is absolutely an upstream bug and they should fix it internally but that applies to many things we currently patch ourselves.

If we enable parallel installs by default you would not need to do even that. Which sounds like a nice decrease in maintenance burden.

I would say it's a good enough workaround to just make these cases faster. No need to penalize nixpkgs users for upstream faults. Calling make with and without -j is inconsistent. I would say openssl is a perfect example where it helps.

I generally agree but I fear doing so would mask the actual issue that should be worked around or at least reported.

I don't think we have any signal today that we will lose by enabling install parallelism.

Therefore, I'd advocate for this feature being handled the same as enableParallelBuilding; disabled by default unless config.enableParallelInstallingByDefault but enabled by default for select build systems that are known to handle it well and/or benefit from it.

Why is already used  config.enableParallelInstallingByDefault not enough? If the package can handle build parallelism there should be a high chance of handling install parallelism at least in most cases.

Another unknown is whether this affects r13y (certain parallel builds have done so in the past) which is also why I'd prefer this being off by default.

Why is it relevant here? If parallel builds break reproducibility then we fix the reproducibility issue one way or another. Why mask it? Note that it is not as drastic as as breaking package build. I would expect packages to fail the build be a more common issue that introduce output non-determinism.

ghc is another example of heavyweight make install. gcc is yet another one. Both install many files and relink executables against target install directory.

That's great. My point is that this PR's merit should be measured by cases like that rather than (potentially, I haven't checked) broken build scripts.

I don't see a big difference in those. Both can do more or do less in make install as long as it produces needed outcome.

I generally agree but I fear doing so would mask the actual issue that should be worked around or at least reported.

The "actual issue" is already masked.
There is no assert or build failure if you are compiling things during the installPhase.  Serializing the installPhase isn't an assertion or a check -- it's an annoyance, which we only notice in the really ridiculous cases like openssl.
If you want to unmask the issue, please write a PR that causes cc-wrapper to fail during the installPhase, and then a new allowCompilationDuringInstallPhase flag.  Then we would have a real check for the issue you're concerned about.

Another unknown is whether this affects r13y (certain parallel builds have done so in the past) which is also why I'd prefer this being off by default.

This is a totally valid concern.  I think the proposal to do a few Hydra runs with this PR before merging it is a very good idea.

If we enable parallel installs by default you would not need to do even that. Which sounds like a nice decrease in maintenance burden.

That'd mean building things in the install phase and that just seems wrong to me.

I don't think we have any signal today that we will lose by enabling install parallelism.

The signal is time and parallelism.
When refactoring ffmpeg, I mistakenly stopped building the general all target and only noticed because it was taking forever building ffmpeg on only one core despite enableParallelBuilding.
I wasn't building anything in the buildPhase there. I wouldn't have noticed that if the installPhase built the package in parallel.

Why is already used config.enableParallelInstallingByDefault not enough? If the package can handle build parallelism there should be a high chance of handling install parallelism at least in most cases.

Ah, didn't notice it was guarded behind enableParallelBuilding. That looks sane to me.

I don't see a big difference in those.

Not a big difference in what? Time?
I'm mostly concerned about weighing this PR's merit in the time improvements in regular builds rather than broken ones as the broken ones should be fixed rather than worked around.

To unmask the issue would require a PR that causes cc-wrapper (and compilers for other languages) to fail during the installPhase, and add a allowCompilationDuringInstallPhase flag for the cases where upstream deliberately does things like running perl scripts during make install. Then we would have a real check for the issue.

That sounds great.

I don't think we have any signal today that we will lose by enabling install parallelism.

The signal is time and parallelism.

Sounds a bit abstract. What query should I write against local logs or hydra to catch openssl and other packages like that?
f I were to build interesting the problematic cases in nixpkgs I would consider adding something queryable.
An example of a more actionable signal:

CPU and wall-time seconds in build phase
CPU and wall-time seconds in install time

That at least allows you to construct a query to find suspicious cases, like: "a lot (>10s) of time in install", "install time is a lot longer than build time" and similar.
I don't think making an install phase parallel by default masks something like that infeasible. And I don't think we have an equivalent of that today as a signal.

When refactoring ffmpeg, I mistakenly stopped building the general all target and only noticed because it was taking forever building ffmpeg on only one core despite enableParallelBuilding.
I wasn't building anything in the buildPhase there. I wouldn't have noticed that if the installPhase built the package in parallel.

How did you detect that? Did you look at the timing reported in logs? Or happened to notice it interactively?
I agree this specific use case will look differently. I disagree it overweights the benefit of faster installs for everyone.
I would say that it's a feature to get faster install in this case: if the end result is the same then it's a cosmetic issue. If the result is different - you can find about it faster as the full build is still fast.

I don't see a big difference in those.

Not a big difference in what? Time?

Not a big difference in the type of the problem: both do something substantial in install phase that is worth running in parallel.

I'm mostly concerned about weighing this PR's merit in the time improvements in regular builds rather than broken ones as the broken ones should be fixed rather than worked around.

I disagree that openssl build is broken: it's not ideal but it's not incorrect.

Another unknown is whether this affects r13y (certain parallel builds have done so in the past) which is also why I'd prefer this being off by default.

Yes, if we don't always parallel-build due to race conditions making output less deterministic than it could be, and the main case where parallel install helps is building during the install phase, same considerations probably apply.

Therefore, I'd advocate for this feature being handled the same as enableParallelBuilding; disabled by default unless config.enableParallelInstallingByDefault but enabled by default for select build systems that are known to handle it well and/or benefit from it.

Maybe it should just default to enableParallelBuilding then? And override in the very rare case where installation behaves worse than main building.
Notably, openssl already has this flag set.

Rebased against today's merge base of master and staging in preparation for hydra jobset. No changes otherwise.

Jobset: https://hydra.nixos.org/jobset/nixpkgs/pr-217568-stdenv-parallel-install

Hydra run is complete \o/: https://hydra.nixos.org/eval/1791763?compare=trunk&full=1#tabs-now-fail
It uncovered only 12 packages that fail to install (all have a workaround now). Does not sound too bad.

A bit of fallout in staging post merge:

[ ] ruby: https://github.com/NixOS/nixpkgs/pull/221442

From staging-next failures:

[ ] _389-ds-base: https://github.com/NixOS/nixpkgs/pull/222161

I fixed more failures that seemed caused by this.  I suppose the best reference generally is
git grep 'enableParallelInstalling = false;'

or
git log -S enableParallelInstalling


feat: ORM

I think ORM and documentation for connecting the app to a database would be helpful!

Just my two cents - while I agree an ORM would be awesome for the dart community, I would personally love that as a separate project than dart frog. What I appreciate about Dart Frog is its simplicity and focus, and I worry adding an ORM would be too much imo.
Plus, there are a few projects that accomplish having an http server with an integrated database and ORM. The main one that comes to mind is Serverpod, which is a great platform if you're using Flutter!

What is dart frog exact use case without connecting to a database? I mean as a back-end framework database is necessary. Can you share some useful projects developed by dart frog? I think I'm missing the point of the project.
Thanks.

What is dart frog exact use case without connecting to a database? I mean as a back-end framework database is necessary. Can you share some useful projects developed by dart frog? I think I'm missing the point of the project.
Thanks.

As stated in the README:

The goal of Dart Frog is to help developers effectively build backends in Dart. Currently, Dart Frog is focused on optimizing the process of building backends which aggregate, compose, and normalize data from multiple sources.

Dart Frog is still experimental so there are no production-ready projects build with Dart Frog but just because Dart Frog doesn’t ship with an ORM doesn’t mean you can’t connect to a database. Check out https://github.com/darjaorlova/bunny_search_api_frog_experimental/blob/9a024d5c7773ae0cc7aaaec35a048dbc98c0b6d0/database/connection.dart#L14 as an example.
In addition, as @mtwichel mentioned, the goal of dart_frog is to provide a lightweight core. ORM support should be something that ideally can be added as a dependency (like prisma) but is not required or part of the core library because in some cases you might just want to aggregate/compose data from multiple sources.
Hope that helps 👍

Thanks for all the answers, You guys are the best!
I'm closing the issue.


Nagios: Add service checks to check synchronisation in Jenkins/inventory/Nagios

ref: #1716, #1229
To ensure no machines pop up that we're not expecting them to, similarly, to make sure we're monitoring all the machines too. Could also put in checks to make sure the inventory and Jenkins are consistent (i.e. https://github.com/AdoptOpenJDK/openjdk-infrastructure/issues/619#issuecomment-520874015 ).
As mentioned in #1716 , I've already written a script that detects the difference between Nagios and Jenkins, so that will just require some changing to work as a Nagios Plugin :-) We also need to determine what we want to be in an exception list, as I know that some machines are added to Jenkins as experimental machines  - maybe we could start prefixing them with expr ... ?

I've written a script that can retrieve the list of machines in inventory.yml
export inv=$(wget -qO- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-infrastructure/master/ansible/inventory.yml)
[[ $? != 0 ]] && echo "PANIC" && exit 3

# Put EOF at end of inv file
inv=$inv$'\n'EOF

Inventory_Server_List=

IFS=
mapfile -t category_array < <( echo $inv | grep -P "^\s{2}-\s" | cut -d- -f2 | tr -d ": -" )

for cat_index in ${!category_array[@]}; do
  beginPattern=${category_array[$cat_index]}
  endPattern=${category_array[$cat_index+1]}

  if [[ $endPattern == "" ]]; then
    endPattern="EOF"
  fi

  inv_section=$(echo $inv | awk '/'$beginPattern'/,/'$endPattern'/')
  mapfile -t prov_array < <( echo $inv_section | grep -P "\s{4}-\s*" | tr -d " :-" )

  for prov_index in ${!prov_array[@]}; do
    provBegin=${prov_array[$prov_index]}
    provEnd=${prov_array[$prov_index+1]}
    if [[ ${prov_array[$prov_index+1]} == "" ]]; then provEnd=$endPattern; fi

    prov_section=$(echo $inv_section | awk '/'$provBegin:'/,/'$provEnd:'/')

    mech_list=$(echo $prov_section | awk '/ip/ { print $1 }' | tr -d ":")
    IFS=$'\n'

    for machine in $mech_list; do
       Inventory_Server_List+="$beginPattern-$provBegin-$machine  "
    done
    IFS=
  done
done

The other lists (Nagios monitored and machines in Jenkins) are easy enough to get lists of, so now I can start making Nagios Plugins to compare them :-)

#!/usr/bin/env bash

# List of machines that are ignored if they're not in Nagios
exceptionsList="win sxa gdams will EC2 azurebuildagent aahlenst vagrant master infrastructure "

export inv=$(wget -qO- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-infrastructure/master/ansible/inventory.yml)
[[ $? != 0 ]] && echo "PANIC" && exit 3

# Put EOF at end of inv file
inv=$inv$'\n'EOF

Inventory_Server_List=

IFS=
mapfile -t category_array < <( echo $inv | grep -P "^\s{2}-\s" | cut -d- -f2 | tr -d ": -" )

for cat_index in ${!category_array[@]}; do
  beginPattern=${category_array[$cat_index]}
  endPattern=${category_array[$cat_index+1]}

  if [[ $endPattern == "" ]]; then
    endPattern="EOF"
  fi

  inv_section=$(echo $inv | awk '/'$beginPattern'/,/'$endPattern'/')
  mapfile -t prov_array < <( echo $inv_section | grep -P "\s{4}-\s*" | tr -d " :-" )

  for prov_index in ${!prov_array[@]}; do
    provBegin=${prov_array[$prov_index]}
    provEnd=${prov_array[$prov_index+1]}
    if [[ ${prov_array[$prov_index+1]} == "" ]]; then provEnd=$endPattern; fi

    prov_section=$(echo $inv_section | awk '/'$provBegin:'/,/'$provEnd:'/')

    mech_list=$(echo $prov_section | awk '/ip/ { print $1 }' | tr -d ":")
    IFS=$'\n'

    for machine in $mech_list; do
       inventoryList+="$beginPattern-$provBegin-$machine  "
    done
    IFS=
  done
done

IFS=$'\n'$'\t'" "

nagiosList=$(ls -la /usr/local/nagios/etc/servers/ | awk '/.cfg/ { print $9 }' | cut -d. -f1)
jenkinsList=$(curl -s https://ci.adoptopenjdk.net/computer/api/json | jq -r '.computer[] | .displayName')

rm -f /tmp/check_inventory.txt
echo "
| Inventory List | In Jenkins? | In Nagios? |
|-|-|-|" >> /tmp/check_inventory.txt

for x in $inventoryList; do
  exception=False
  [[ grep -q "infrastructure" $x ]] && continue;
  # Ignore certain machines from Nagios
  for y in $exceptionsList; do
     grep -q $y <(echo $x) && exception=True && break
  done

  in_Jenkins="NO"
  grep -q $x <(echo $jenkinsList) && in_Jenkins="YES"
  grep -q $x <(echo $nagiosList) && in_Nagios="YES" || in_Nagios="NO"
  [[ $exception == "True" ]] && in_Nagios="IGNORED"

  [[ $in_Jenkins == "NO" || $in_Nagios == "NO" ]] && LINE_COLOR='\033[0;31m' || LINE_COLOR='\033[0;32m'
  echo -e "${LINE_COLOR}| $x | $in_Jenkins | $in_Nagios |" >> /tmp/check_inventory.txt
done

echo Machine disparity: $(grep "0;31m" /tmp/check_inventory.txt | wc -l)

I've put the service check into Nagios now :
#!/usr/bin/env bash

# Nagios Plugin to check that inventory.yml / Nagios / Jenkins are in sync
# This check assumes that the Inventory is the correct, definitive list of machines we have

# List of machines that are ignored if they're not in Nagios
exceptionsList="win sxa gdams will EC2 azurebuildagent aahlenst vagrant master infrastructure esxi aix"

export inv=$(wget -qO- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-infrastructure/master/ansible/inventory.yml)
[[ $? != 0 ]] && echo "UNKNOWN- wget failed" && exit 3

# Put EOF at end of inv file
inv=$inv$'\n'EOF

Inventory_Server_List=

IFS=
mapfile -t category_array < <( echo $inv | grep -P "^\s{2}-\s" | cut -d- -f2 | tr -d ": -" )

for cat_index in ${!category_array[@]}; do
  beginPattern=${category_array[$cat_index]}
  endPattern=${category_array[$cat_index+1]}

  if [[ $endPattern == "" ]]; then
    endPattern="EOF"
  fi

  inv_section=$(echo $inv | awk '/'$beginPattern'/,/'$endPattern'/')
  mapfile -t prov_array < <( echo $inv_section | grep -P "\s{4}-\s*" | tr -d " :-" )

  for prov_index in ${!prov_array[@]}; do
    provBegin=${prov_array[$prov_index]}
    provEnd=${prov_array[$prov_index+1]}
    if [[ ${prov_array[$prov_index+1]} == "" ]]; then provEnd=$endPattern; fi

    prov_section=$(echo $inv_section | awk '/'$provBegin:'/,/'$provEnd:'/')

    mech_list=$(echo $prov_section | awk '/ip/ { print $1 }' | tr -d ":")
    IFS=$'\n'

    for machine in $mech_list; do
       inventoryList+="$beginPattern-$provBegin-$machine  "
    done
    IFS=
  done
done

IFS=$'\n'$'\t'" "

logPath="$HOME/check_inventory_logs/check_inventory_`date +%d%m%Y`"
nagiosList=$(ls -la /usr/local/nagios/etc/servers/ | awk '/.cfg/ { print $9 }' | cut -d. -f1)
jenkinsList=$(curl -s https://ci.adoptopenjdk.net/computer/api/json | jq -r '.computer[] | .displayName')
[[ $? != 0 ]] && echo "UNKNOWN- Curl failed" && exit 3

# ran on the Nagios User, so put it somewhere we know it has write access to
rm -f $HOME/check_inventory_logs/check_inventory_*
echo "
| Inventory List | In Jenkins? | In Nagios? |
|-|-|-|" >> $logPath

for x in $inventoryList; do
  exception=False
  # "infrastructure" machines are called "infra" in Jenkins. Often have other names in Nagios too, so just skip
  grep -q "infrastructure" <(echo $x) && continue;
  # Ignore certain machines from Nagios
  for y in $exceptionsList; do
     grep -q $y <(echo $x) && exception=True && break
  done

  in_Jenkins="NO"
  grep -q $x <(echo $jenkinsList) && in_Jenkins="YES"
  grep -q $x <(echo $nagiosList) && in_Nagios="YES" || in_Nagios="NO"
  [[ $exception == "True" ]] && in_Nagios="IGNORED"

  [[ $in_Jenkins == "NO" || $in_Nagios == "NO" ]] && LINE_COLOR='\033[0;31m' || LINE_COLOR='\033[0;32m'
  echo -e "${LINE_COLOR}| $x | $in_Jenkins | $in_Nagios |" >> $logPath
done

status="OK"
exit_code=0
machine_difference=$(grep "0;31m" $logPath | wc -l)

if ((machine_difference>=5)); then
  exit_code=2
  status="CRITICAL"
elif ((machine_difference>0)); then
  exit_code=1
  status="WARNING"
else
  # *Should* be unreachable code, but just in case
  exit_code=3
  status="UNKNOWN - Something went wrong with counting the machines"
fi

echo "$status - Machine disparity: $machine_difference" && exit $exit_code

I'll commit this to the repository under additional_plugins in a bit (any requested changes to that PR, I'll make on the Nagios machine).
The Nagios Service check is:
define service{
        use                             local-service
        host_name                       Nagios_Server
        check_period                    once-a-day-at-8
        service_description             Test Inv/Jenkins/Nagios machine sync
        check_command                   check_inventory
        notes                           List of machines in /home/nagios/check_inventory_logs/ on Nagios Server
        notifications_enabled           0
}

And I've put a comment on the actual service check in Nagios with the current 'exceptions_list' - this is with the intention that as that's updated, (i.e, as we implement #1718 ), a new comment will show the most recent exceptions list.
This check assumes that the inventory.yml is the definitive list of machines we have, which may or may not be the case (but is the ultimate goal).
The current boundaries are;
Critical at >=5 machines not being in Nagios/Jenkins
Warning at >0 machines not being in Nagios/Jenkins
(The above doesn't include machines that are in Jenkins, but Ignored by Nagios)

@Willsparker Thanks a lot again. My only remark: That's a test that can run every 5 minutes throughout a day.

Good point :sweat_smile:  I'll change the PR so the log file has the time as well, and the service definition :-)


Upgrading to .net core 2.1 breaks routing

We recently upgraded from .net core 2.0 to .net core 2.1 and mvc routing stopped working for all my projects. The error says "route not matched". The same code works with .net core 2.0
All my projects are console application. Self-hosted.
What is the breaking change and the reason behind this?

Following up on this issue here - https://github.com/aspnet/Mvc/issues/7882

Following


Custom favicon is not displayed

This block here seems wrong. It is doing the same thing in both cases.
https://github.com/plotly/dashR/blob/d281e7025d0906f6f65e0365d25d2a59c362ed9e/R/dash.R#L1897-L1905

Also see #297. A workaround:
app_title <- "My app"
app_custom_index <- local({
  template <- app$.__enclos_env__$private$template_index[[1]]
  template <- sub("{%favicon%}",
                  "<link href=\"assets/favicon.svg\" rel=\"icon\" type=\"image/x-icon\">",
                  template, fixed = TRUE)
  template <- sub("{%title%}", app_title, template, fixed = TRUE)
  return(template)
})
app$index_string(app_custom_index)

This block here seems wrong. It is doing the same thing in both cases.
https://github.com/plotly/dashR/blob/d281e7025d0906f6f65e0365d25d2a59c362ed9e/R/dash.R#L1897-L1905

Anecdotally, I suspect you are correct. It's been a long time since I worked on this project, but if I recall the original else set favicon to NULL, and this was later modified to pass an empty string if no valid favicon was passed.
I'm not sure whether this is copypasta, but it seems possible.


JGit dependency

Do we really need it?

Feels like no to me. Should we review the project dependencies for a cleanup?

Yes!
I am trying hard to remember why there's JGit here, but I can't find a good answer. Definitely a copy and paste mistake that's costing people some extra jars.

JGit is used by an integration test that actually clones an entire repository and runs CK there. The dependency is marked as test, so jars don't go to the final package! I just bumped all the versions of the dependencies; can't see any that's not used now.


chore(ENG-2711): update deploy to purge cdn content

Description

update to purge cdn cache

Testing required outside of automated testing?
This will need to be tested via post deploy test to see that the cache has been purged and content updates.

[ ] Not Applicable

Screenshots (if appropriate):

[x] Not Applicable

Rollback / Rollforward Procedure

[x] Roll Forward
[ ] Roll Back

Reviewer Checklist

[ ] Description of Change
[ ] Description of outside testing if applicable.
[ ] Description of Roll Forward / Backward Procedure
[ ] Documentation updated for Change

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

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


Feature/z ghost loading

Component - z-ghost-loading - add new component

Motivation and Context
Add new component (story)

Priority

[ ] 1 - Highest
[ ] 2 - High
[x] 3 - Medium
[ ] 4 - Low
[ ] 5 - Lowest
[ ] 6 - Not a Priority

Types of changes

[ ] Bugfix (non-breaking change which fixes an issue)
[ ] Feature (non-breaking change which adds functionality)
[x] Component (add a Component as approved by Design System)
[ ] Docs (add documentation)
[ ] Chore (changes that adds small enhancement)
[ ] Breaking (fix or feature that would cause existing functionality to not work as expected)

Abstract
(link)

Screenshots
Note

Component and Fix approval flow to Master branch
A Pull Request to be merged must have two approvals, one from a member of the product team who developed it and another from a member of the dst dev team other than the team representative.

There is a graphical issue during the animation on the Safari browser.
As it can be seen in the video linked below (top chrome, bottom Safari)  when the component is at the beginning and the end of the transition it loses the border-radius.
video link


Mark service.version as stable.

Reopening this from the related Specification PR.
cc @jsuereth

FYI, our latest change clarifies that version can technically be any string, as defined by the owner, etc.


Add 2 new variables for Server and Client Count

Add 2 new variables to represent the total number of Servers and Clients in the Cluster.

SHIKARI_SERVER_COUNT
SHIKARI_CLIENT_COUNT

Fixed by #31


Update playground references to "playground environment" instead of p…

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.


Disable console.log and console.warn option

Every time my server restarts this is what I get in my terminal:
** Your bot is using memory storage and will forget everything when it reboots!
** To preserve dialog state, specify a storage adapter in your Botkit config:
** const controller = new Botkit({storage: myStorageAdapter});
Enabling plugin:  Slack Adapter

This is really annoying, my dev terminal is just full of Botkit logs. I could set a storage, but I don't care for now as it's just a .warn anyway. No other library is doing that 🙈and I believe no library should ever spam the terminal like this. How about having a debug option to Botkit (would be true by default) which displays console.log and console.warn only when debug is true?

Thanks for the feedback and a fair point. I'll consider a mechanism for disabling some or all of these.

In 4.0.2, I am introducing a disable_console option on the controller that will turn off this type of message.


Add leviathan test helpers package

patch: Make global config available to tests
minor: Add leviathan test helpers package

@balena-ci rebase

This si ready for review @rcooke-warwick

Need to fix #522  #504 either after merge or with this PR.

Will the OS jobs be able to set the version of the helpers at runtime? The idea is that the helpers are versioned with the OS code and tests.

@klutchell so here's my thinking in my head.

The test suites for a particular OS version have test-helpers package specified with a particular version in package.json
The tests run, the dependencies for the tests need to be installed in the environment
The exact test-helpers package gets installed.

In the future, we do ESR testing.
Old version of tests, will have a old version test-helpers package set, which will be installed on runtime when we are testing the ESR balenaOS. We just need to make sure we increment the helper version in the package.json, and generate the package-lock.json file. We also should be looking out that we set the package versions exactly and not have ^3.0.0
What do you think, you can check the corresponding meta-balena PR.

We also should be looking out that we set the package versions exactly and not have ^3.0.0

Package lock files prevent this from being an issue.

What do you think, you can check the corresponding meta-balena PR.

Which PR is that? We should link it here.
Is it possible to have leviathan use a default version of helpers, in case meta-balena doesn't set a specific version? Just thinking that when we merge/deploy this to leviathan I don't want existing meta-balena branches to break just because they don't know how to specify a helper version.


Use VK_API_VERSION_1_2 instead of VK_VERSION_1_2

I am on Arch Linux and I just spent the last 4 hours trying to find the source of a segfault and a VK_ERROR_INCOMPATIBLE_DRIVER. The source was line 7 in vulkan_device.cpp in v003 of the file. You use VK_VERSION_1_2 to specify the version of Vulkan to be used, but I believe using this is deprecated and leads to the mentioned errors. If I replace it with VK_API_VERSION_1_2 it works and is the supported way to do it, I think. I know this could have been done as a PR but I'm to lazy right now.
Gute Serie btw :)

Ok, nevermind. Apparantly, I'm just dumb and did not look at the later versions of your code, where you have exactly this change done. Sorry to bother.

I have now added a small comment for both affected versions v003 and v004 to prevent confusion for other people.


建议支持只导入一个包名，就可以使用所有函数的方式

如：
import "github.com/duke-git/lancet/v2
便可以通过lancet.XXX()的方式使用到所有函数
否则，若大量使用到lancet各包中的函数时，代码中可能会出现如下情况
import (
  "github.com/duke-git/lancet/v2/xx1`
  "github.com/duke-git/lancet/v2/xx2`
  "github.com/duke-git/lancet/v2/xx3`
  ...
)

这样加重了使用负担，每使用一个函数都会去查看是属于哪个子包下的函数，且容易造成和其它包的包名冲突，不得不给包名起导入别名
若在意编译了多余的不使用的子代码包（比如部分用户可能只会用到个别函数，却编译了整个包），可以2种方式都同时支持。但个人觉得微乎其微

入别名

@CcccFz lancet中有很多重名方法(例如slice/filter, maputil/filter), package的作用一是代码复用，二是做命名空间。go不支持命名空间语法。兼容性很重要，2种方式都需要支持。如果所有方法都在一个lancet包下，需要导入所有对应的子包，然后定义对应方法的包全局变量。针对重名方法还要重新命名。代码复杂度增加，维护困难，投入产出比低。

This issue requires us to be able to access all functions in the Lancet library using the lancet.XXX() syntax, rather than importing numerous corresponding packages. I would like to discuss the necessity and feasibility of implementing this feature.
I have thought of a solution to avoid method name conflicts, as described below:
Namespace injection: Define a lancet package within the Lancet library and inject different namespaces by exporting a unified-named object or struct instance. For example, we could export lancet.StrUtil and lancet.Slice as unified-named objects. Users could then access these via different namespace objects, like below code snap:

package lancet

import (
    "github.com/duke-git/lancet/v2/strutil"
    "github.com/duke-git/lancet/v2/slice"

)

var StrUtil = struct {
	Reverse func(s string) string
}{
	Reverse: strutil.Reverse,
}

// compile error: function type must have no type parameters
var Slice = struct {
    func Filter[T any](slice []T, predicate func(index int, item T) bool) []T
}{
    Filter: slice.Filter,
}

Users would use it as follows:

package main

import (
    "github.com/duke-git/lancet/v2"

)

func main() {
    s := "abc"

    rs := lancet.StrUtil.Reverse(s)

    fmt.Println(rs)
}

However, there is a limitation: this approach cannot be applied to generic functions. see the compile error for slice struct. Do you guys or anyone else have any ideas on how to address this issue? @cannian1 @donutloop

I don’t think it’s a good idea to support this requirement. On the one hand, users can encapsulate a toolkit themselves to wrap commonly used lancet utility functions. On the other hand, if we are to support this feature, I believe it’s better to use the package name as a prefix for the function, like this:
func SliceUtilCount[T comparable](sli []T, item T) int {
	return slice.Count(sli, item)
}

IDE can provide corresponding prompts after the user has entered enough information.

If we choose to use the package name as a prefix for function names and then create proxy functions, I'm afraid it will lead to a lot of redundancy since we need to create proxy functions for all the existing functions. None of the current solution can elegantly solve this issue.
Perhaps you are right; we may not need to support this requirement.


employee tracker

User story
AS A business owner
I WANT to be able to view and manage the departments, roles, and employees in my company
SO THAT I can organize and plan my business
Acceptance Criteria
GIVEN a command-line application that accepts user input
WHEN I start the application
THEN I am presented with the following options: view all departments, view all roles, view all employees, add a department, add a role, add an employee, and update an employee role
WHEN I choose to view all departments
THEN I am presented with a formatted table showing department names and department ids
WHEN I choose to view all roles
THEN I am presented with the job title, role id, the department that role belongs to, and the salary for that role
WHEN I choose to view all employees
THEN I am presented with a formatted table showing employee data, including employee ids, first names, last names, job titles, departments, salaries, and managers that the employees report to
WHEN I choose to add a department
THEN I am prompted to enter the name of the department and that department is added to the database
WHEN I choose to add a role
THEN I am prompted to enter the name, salary, and department for the role and that role is added to the database
WHEN I choose to add an employee
THEN I am prompted to enter the employee’s first name, last name, role, and manager, and that employee is added to the database
WHEN I choose to update an employee role
THEN I am prompted to select an employee to update and their new role and this information is updated in the database

done


Intermittent TypeError on page load

TypeErrors are occasionally thrown on page load and seem to involve df or countries.
TypeError: df is undefined

TypeError: countries is undefined

Note: I am able to (intermittently) reproduce the error in both the dev and master branches using Firefox. I have not yet reproduced this error using Chrome.

I think this error arises when df and countries are accessed in drawtree.js and beadplot.js before the data is retrieved. These variables appear to be populated using asynchronous calls in index.html.

@kwade4 is this still an issue?

Yes. Occasionally when the page loads on Firefox, this error occurs (with and without clearing the cache). I have not encountered this issue using Chrome or Edge.

Ok thanks.  Sigh.

First Error:
The character encoding of the HTML document was not declared. The document will render with garbled text in some browser configurations if the document contains characters from outside the US-ASCII range. The character encoding of the page must be declared in the document or in the transfer protocol.

Following errors: (for all .json, and .nwk files)
XML Parsing Error: syntax error
Location: file:///Library/WebServer/Documents/index.html
Line Number 1, Column 1:

I added the following line to the <head> tag in index.html.
<meta charset="utf-8"/>

So far, I haven't encountered the TypeError, so this appears to be a tentative fix.
Thanks for the tip @ewong347!


[MINOR] fix(ci): fix build pnpm errors

What changes were proposed in this pull request?
fix build pnpm errors.
Since the official pnpm update came out, there was a conflict with lockfile version and one of the frontend dependencies(react-hooks-form) after downloading it.
Why are the changes needed?
Upgrading lockfile and that dependency fixed the issue.
Does this PR introduce any user-facing change?
N/A
How was this patch tested?
N/A

The react-hooks-form version 7.48.2 to 7.51.3 is mostly bug fixes which have no effect on gravitino UI. @jerryshao
Release note

I see, thanks.


Support for hex, octal and binary number literals

Hi, i've thought about adding support for hex, octal and binary number literals. Is that something you would be interested in?
I understand if you don't want to add extensions and non-compatible things to gojq compared to jq. Would an option be to make such things disable by default? but maybe messy to do with some features?

Maybe this issue is interesting https://github.com/stedolan/jq/issues/1632
In my case i would want to have literals instead of function(s) to convert from a string. Im using gojq in projects that deal with lots of hex and binary data and position so would be very nice if it was easy to write queries using it.

Basically current gojq syntax (AST, lexer and parser) is intended to be compatible with jq. Introducing flags to the parser is a mess for me. I understand these literals are sometimes important but I would not implement until jq implements it in its main branch. Common literal syntax exists but when jq introduced in a different way, it would break your gojq scripts. So proposal to jq should be the first. By the way, I found https://golang.org/design/19308-number-literals is a good material on this topic.

Make sense. Yes doing optional things in the lexer/parser sounds very messy.
Thanks for the link. Think it's ok for my project to be incompatible for now so maybe i will do a fork and add things, not sure yet. I can keep you updated what happens.


 I've released it as 1.0.1, as soon as docker hub is done you can reference it in your puppet file
@alexnederlof might want to tag arie as well here ;)

Your fast

@avandeursen When's @rogierslag graduation date again?


Save data async to prevent lag spikes

People with slow disks will experience lag spikes when saving on death.
This pull request creates a separate thread in which each load and save is executed.
The load method returns a CompletableFuture so that the caller can wait until the entries are fully loaded into the list.

Thanks for this PR and pointing out the problem. I've recreated what you've done here in a way that I feel suits the codebase a bit better in dc8c940, so I'll go ahead and close this now
Cheers


Fix SILDebugScopes for closures expanded from an expression macro.

An expression macro can expand not just to code inside the function, but also to a closure. Such a closure needs to be treated similar to any functions generated from a freestanding macro: Its instructions should have locations that point straight into the macro buffer. Instructions that are expanded into the same function as the macro expansion can be represented using inline locations pointing back to the macro expansion, but this is not an option for top-level function declaration.
https://github.com/apple/swift/issues/65484
rdar://108618562
(cherry picked from commit 00b24c909bdd49b764e8c8969eabcc8d748af89e)

@swift-ci test


[FR] Add Manual to CompletionTriggerKind

It would be nice to know if the user explictly wants completions vs just implicitly
Currently Invoke is the same for both manually triggering completions via ctrl+space and with normal typing "wordPattern"
https://github.com/microsoft/vscode/blob/11095a2781bd2a14cbaddc1b925f196f1e9452bc/src/vscode-dts/vscode.d.ts#L5067-L5080
Add forth option: Manual (or Explict?)
/**
 * Completion was triggered manually by the user
 */
Manual = 3

and maybe even a fifth: Command?
for editor.action.triggerSuggest etc
related: https://github.com/microsoft/vscode/issues/115343 (I think this is what he was trying to explain)

This feature request is now a candidate for our backlog. The community has 60 days to upvote the issue. If it receives 20 upvotes we will move it to our backlog. If not, we will close it. To learn more about how we handle feature requests, please see our documentation.
Happy Coding!

This feature request has not yet received the 20 community upvotes it takes to make to our backlog. 10 days to go. To learn more about how we handle feature requests, please see our documentation.
Happy Coding!

:slightly_frowning_face: In the last 60 days, this feature request has received less than 20 community upvotes and we closed it. Still a big Thank You to you for taking the time to create this issue! To learn more about how we handle feature requests, please see our documentation.
Happy Coding!


Versions Table Styling

Feature Request
Desired behaviour
New material versions table will look odd (default version info button, actions dropdown alignment), will need some re-arranging and styling.

When content is too long, both tables (workflow and tools handle it in a different way, make them handle it the same)
Tools table has too many links in the first two columns, it's confusing.
Links don't change the cursor on hover
Add tooltips to disabled actions

┆Issue is synchronized with this Jira Story
┆Issue Type: Story
┆Fix Versions: Dockstore 2.X
┆Sprint: Backlog
┆Issue Number: DOCK-1178

The link out icon (in the first column, that takes you to GitHub), seems too large to me, although maybe this will be rendered moot by the solution to the "too many links" issue described above.
The not a snapshot icon looks very close to being a snapshot icon -- I guess the difference is the the lock isn't quite closed. May want to just not have any icon if it's not a snapshot.
For public workflows, there is only one item in the  Actions dropdown
The actions dropdown column is very repetitive, saying Actions in every row.

This should be 1.9.0 I think, it's pretty much unusable otherwise

Setting as 1.9.x, it doesn't seem definitively worse than prod currently ...

Reviewer just check if the columns are wrapped (no horizontal scroll, no truncated text). Issue split to https://github.com/dockstore/dockstore/issues/3920


Dev/sample change

Hi @wangyihaier, looks like you have additional commits in the PR. If raise one with just the bug fix in the deploy script (az group), I'd be happy to merge that one.

Closing PR. Changes have been incorporated in https://github.com/Azure-Samples/modern-data-warehouse-dataops/pull/58


InboundDomain missing on UpdateServerRequest

Hey there,
I noticed a tiny issue with the type definitions.
InboundDomain is missing on UpdateServerRequest. It is correctly sent to the API though if I set it.
I guess the fix is as simple as adding it to https://github.com/wildbit/postmark.js/blob/master/src/client/models/server/Server.ts#L27?
I can submit a PR if you like!
Thanks

hi @klaemo
thank you for letting us know. We have updated the model in the 2.7.4 version of the library.

Thank you 🙏


argsort and sort

At some level (i.e. this has an axis parameter), sort the array. Define the argsort version in C++ and we can do the sort with an array-slice on the Python side.
Sort orders for numbers in NumpyArray are easy to define, but something will have to be done to sort arrays and records as well. Python has an ordering defined on lists:
>>> [1, 2, 3] < [1, 2]
False
>>> [1, 2, 3] > [1, 2]
True

but not records (dicts):
>>> {"one": 1, "two": 2, "three": 3} < {"one": 1, "two": 2}
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'dict' and 'dict'

However, our Record types are actually tuples—there's a defined field order (unlike Python dicts), so we should be able to inherit a definition from Python tuples:
>>> (1, "a", None) < (1, "a")
False
>>> (1, "a", None) > (1, "a")
True

From https://github.com/scikit-hep/awkward-1.0/pull/99#discussion_r376347495

@jpivarski - please, comment if I understand correctly what argsort suppose to do for #74
Would you rather I used a different sorting algorithm then quick sort? Its average time complexity is O(n log(n)), but the worst case is O(n^2). Its worst space complexity is O(log(n))

The argsort function produces an array of integers that, if applied as a slice, would sort the array. For any functions that have "arg" versions, we should implement the "arg" version first because it usually makes the "non-arg" version trivial. Here's a NumPy example:
>>> import numpy as np
>>> array = np.array([6.6, 3.3, 4.4, 1.1, 4.4, 5.5])
>>> index = np.argsort(array)
>>> index
array([3, 1, 2, 4, 5, 0])
>>> array[index]
array([1.1, 3.3, 4.4, 4.4, 5.5, 6.6])

In the above, if we had an argsort already written, the sort would be just getitem(Slice({ SliceArray(argsort_result) })) or something, maybe carry(argsort_result). (Note: this suggests that it should be implemented as an argsort64 function returning an Index64 taking no axis parameter, so that it can be internally reused, much like count.)
The externally visible argsort and sort functions would take an axis parameter, which, for NumPy, determines which direction the sorting is performed:
>>> array = np.array([[6.6, 3.3, 4.4],
...                   [1.1, 4.4, 5.5]])
>>> np.argsort(array, axis=0)   # compare each top with each bottom
array([[1, 0, 0],
       [0, 1, 1]])
>>> np.argsort(array, axis=1)   # compare left-to-right
array([[1, 2, 0],
       [0, 1, 2]])

That makes sense when the array is rectilinear. Maybe we could do the same thing with variable-length arrays:
>>> array = ak.Array([[6.6, 3.3, 4.4],
...                   [1.1, 4.4]])
>>> ak.argsort(array, axis=0)   # compare top-to-bottom, missing goes first
<Array [[1, 0], [0, 1, 0]] type='2 * var * int64'>
>>> ak.argsort(array, axis=1)   # compare left-to-right
<Array [[1, 2, 0], [0, 1]] type='2 * var * int64'>

but I don't know how or when that would actually be useful. The physics use-case for sorting is either axis=-1 or at least at the purelist depth. I can't imagine why we'd ever want axis=0 above, sorting across elements that might not exist because some inner lists are shorter than others.
Maybe this function shouldn't have an axis parameter, but something with a new name, like depth. It would always sort horizontally, but depth controls at what level the sorting occurs.
>>> array = ak.Array([[6.6, 3.3, 4.4],
...                   [1.1, 4.4]])
>>> ak.argsort(array, depth=0)   # lexographically compare [6.6, 3.3, 4.4] against [1.1, 4.4]
<Array [1, 0] type='2 * int64'>
>>> ak.argsort(array, depth=1)   # sort within each list
<Array [[1, 2, 0], [0, 1]] type='2 * var * int64'>

This would be useful because the jagged getitem rule (issue #67, ongoing PR #111) would be able to use this result to either sort which list goes first or internally sort each list, depending on the value of depth.
So I'd say, let's implement this with a depth but no axis parameter. An axis can always be added later if someone really has a use for it, but the value of depth is already evident. To do this in stages, implement depth=-1 first, since that one doesn't need to introduce a lexicographic ordering on structures, something that should be defined generally.
About which sorting algorithm to use, the main use-case is sorting a large number of small lists, not a single large list. Therefore, scaling badly with n is not as much of an issue as set-up and tear-down costs. Often, the data are already sorted and a physicist just wants to make sure they're sorted, so the running time shouldn't be catastrophic for already-sorted data. (I remember from somewhere that there's a sorting algorithm that has bad time characteristics for already-sorted data.)

@jpivarski - thanks! Here is a test of argsort implemented in Python:
>>> print(array.constructor)
<bound method NumpyArray.constructor of <NumpyArray>
    <ptr>5.0 5.1 4.2 6.2 9.7 -0.7 0.6 4.9 5.7 7.7 -0.1 8.2 7.7 5.5 8.5 5.7 5.4 4.3 1.2 4.6 4.8 3.9 4.2 8.4 9.5 3.1 2.2 0.9 8.0 3.6 3.6 9.6 2.6 1.7 4.0 6.6 10.1 5.5 0.8 4.6 6.2 -0.2 6.4 6.7 3.2 3.1 8.5 5.3 7.4 7.8 9.0 5.3 3.1 5.8 2.7 8.3 9.0 0.5 4.5 1.6 9.6 6.2 5.0 2.3 7.2</ptr>
    <shape>21 3</shape>
    <strides>3 1</strides>
    <offset>2</offset>
</NumpyArray>>
>>> print(list(array))
[[4.2, 6.2, 9.7], [-0.7, 0.6, 4.9], [5.7, 7.7, -0.1], [8.2, 7.7, 5.5], [8.5, 5.7, 5.4], [4.3, 1.2, 4.6], [4.8, 3.9, 4.2], [8.4, 9.5, 3.1], [2.2, 0.9, 8.0], [3.6, 3.6, 9.6], [2.6, 1.7, 4.0], [6.6, 10.1, 5.5], [0.8, 4.6, 6.2], [-0.2, 6.4, 6.7], [3.2, 3.1, 8.5], [5.3, 7.4, 7.8], [9.0, 5.3, 3.1], [5.8, 2.7, 8.3], [9.0, 0.5, 4.5], [1.6, 9.6, 6.2], [5.0, 2.3, 7.2]]
>>> indices = array.argsort()
>>> print(list(indices))
[5, 41, 10, 57, 6, 38, 27, 18, 59, 33, 26, 63, 32, 54, 52, 45, 25, 44, 29, 30, 21, 34, 22, 2, 17, 58, 19, 39, 20, 7, 62, 47, 51, 16, 37, 13, 8, 15, 53, 61, 40, 3, 42, 35, 43, 64, 48, 9, 12, 49, 28, 11, 55, 23, 46, 14, 56, 50, 24, 60, 31, 4, 36]
>>> sorted_array = []
>>> for i in range(len(indices)):
...     sorted_array.append(array.ptr[indices[i]])
...
>>> print(list(sorted_array))
[-0.7, -0.2, -0.1, 0.5, 0.6, 0.8, 0.9, 1.2, 1.6, 1.7, 2.2, 2.3, 2.6, 2.7, 3.1, 3.1, 3.1, 3.2, 3.6, 3.6, 3.9, 4.0, 4.2, 4.2, 4.3, 4.5, 4.6, 4.6, 4.8, 4.9, 5.0, 5.3, 5.3, 5.4, 5.5, 5.5, 5.7, 5.7, 5.8, 6.2, 6.2, 6.2, 6.4, 6.6, 6.7, 7.2, 7.4, 7.7, 7.7, 7.8, 8.0, 8.2, 8.3, 8.4, 8.5, 8.5, 9.0, 9.0, 9.5, 9.6, 9.6, 9.7, 10.1]
>>>

We would want it to sort within arrays, like
>>> array.argsort(depth=-1)
[[0, 1, 2], [0, 1, 2], [2, 0, 1], [2, 1, 0], [2, 1, 0], [1, 0, 2], [1, 2, 0], [2, 0, 1], [1, 0, 2], [0, 1, 2], [1, 0, 2], [2, 0, 1], [0, 1, 2], [0, 1, 2], [1, 0, 2], [0, 1, 2], [2, 1, 0], [1, 0, 2], [1, 2, 0], [0, 2, 1], [1, 0, 2]]

The primary use-case of this is to sort particles within an event (which is why an algorithm that scales well with n is not as important as the constant-time part of set-up and tear-down). Also, operations shouldn't eliminate structure like this—they should do something with it.


Caption for image always has vertical and horizontal scrolls even they are not required

To Reproduce
Use react-gallery-carousel with "images" and "hasCaptions" attributes. All caption elements have vertical and horizontal scrollbars even if the caption element doesn't require them.
Expected behavior
No scrollbars if they are not required.
To Fix
Replace "overflow: scroll" to "overflow: auto" caption's css style letting browser to handle scrollbars appearance.

Hi @sergru ! Thank you for raising this issue up! 😄
I normally set the "Show scroll bars:" setting to "Automatically based on mouse or trackpad" and I always use trackpad. 😅

I replicate this issue after turning the "Show scroll bars:" setting to "Always". 😅

I successfully fixed this issue in the dev tool using the method that you provided! I thank you for advising me the method to fix it. 😀

I will fix this issue and publish a new patch version before the end of this week. 👨🏻💻 Rest assured that there will be no breaking changes.


add sha256 check

This is going to sound weird because obviously this is best practice, but what specifically is the concern here?
Otherwise great PR, though a description is always helpful to provide context.

good question, and there isn't a solid answer.  Yes, it is best practice, though consul downloads are done over https (thanks hashicorp!).  This is just an extra check that the binary is what is expected.  and that it wasn't tampered with upstream.
this is a bit of a catch-22, as I pulled this sha256 from hashicorp's webserver.   So if the binary has already been maliciously modified, then whomever did that probably also updated the sha256 file on the hashicorp website (though, they are hosted on two different bits of infrastructure, so the hacker would have to hack both the website and the download service).
If the downloads weren't happening over https, then this check becomes a LOT more important.
The other reason to do it is to make sure we are downloading the same version each time.  I've actually had it happen where an updated package was pushed with the same version number, by mistake, and the sha check caught it and prevented it from being used.
so there are two reasons for ya :)  Neither critical in this case, but worth the change, IMO.

Thanks!


Doc updates to readme.md and howitworks.md

Updated docs to better reflect 0.2 and our reliance on Dask-cuDF.

rerun tests


chore(main): release 0.1.2

:robot: I have created a release beep boop
0.1.2 (2022-11-13)
Bug Fixes

move @ethersproject to peerDependencies (#25) (002e37b)

This PR was generated with Release Please. See documentation.

:robot: Release is at https://github.com/vojtechsimetka/evm-calldata-decode/releases/tag/v0.1.2 :sunflower:


Task 121 switch from travis to git hub actions

I had many problems running SWTBot tests in GitHub Actions: the job simply hangs indefinitely and I had to cancel... I suspect there are several problems with the GTK version: we build using Oxygen that is really old and I guess it does not work with recent versions of GTK, or, at least, SWTBot cannot handle such combinations. In Travis we were using Trusty (14.04) but the oldest version provided by GitHub Actions is 16.04, which does not work either with our tests. Unfortunately, I cannot understand what's going on since after some time the job simply hangs. What I can tell for sure is that most of those SWTBot tests fail on my machine too (both from Eclipse and from the command line). We also said in the past that those tests were rather flaky...
For the moment, I had to disable those tests. I suggest we open a new issue and try to deal with those tests. I guess most of them bring no value so we can remove them.
I also cleaned up the TP a bit, by using the latest versions. I guess in the near future we should switch to a newer TP as well.
@echebbi please let me know.
P.S. Codecov and SonarCloud are not enabled yet, and I suggest we postpone that as well.

@echebbi I created and pushed a Git tag for the new release, but on GitHub there's still the release 2.1.0 tagged as "Latest" and I don't know how to fix that...

@LorenzoBettini Releases have to be created manually. First go to https://github.com/pitest/pitclipse/releases (accessible from Pitclipse's main page > Releases) then click on Draft a new release. For future tags we may want to automate thanks to the GitHub Create Tag Release Action.

OK, for the moment I've promoted the release created with the tag as the latest one.
By the way, currently releasing a new update site from GitHub Actions is still not enabled.
For the moment, we administrators can publish a new update site from our computer:
mvn deploy -Prelease-composite

or, to publish a new snapshot:
mvn deploy -Prelease-composite,release-snapshots

During the git clone/push you might be asked for your password or SSH passphrase unless you have some keyring mechanism on your computer.
To publish from GitHub Actions we need a personal access token in the GitHub pitest organization. Or maybe it might be enough to create one for our own user and make it available at the organization level.


Add 2 basic ReactiveUI samples using Avalonia

What kind of change does this PR introduce?
Feature: 2 new samples using Avalonia
What might this PR break?
The README.md file, worst case scenario. Nothing else - samples are self-contained.
Please check if the PR fulfills these requirements

[ ] Tests for the changes have been added (for bug fixes / features)
No tests added for basic samples; might add tests for future ones where testing is in and of itself the handled topic.

[ ] Docs have been added / updated (for bug fixes / features)
Added to README.md to the best of my ability.

Other information:
Found myself searching for the same links over and over again while learning to use ReactiveUI. I still do. For this purpose I decided to make small samples with good references for each fresh code snippet. Thought someone else might appreciate a similar approach, hence this PR.
This is my first PR ever so please let me know if I'm missing anything.

 Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.:x: genejo sign nowYou have signed the CLA already but the status is still pending? Let us recheck it.


onegate update with spaces fails

Description
When using onegate to update the VM to add KEY=value with some spaces it fails.
To Reproduce
Add value with spaces.
Expected behavior
It should work without errors.
Details

Affected Component: onegate
Hypervisor: KVM
Version: development.

Progress Status

[ ] Branch created
[ ] Code committed to development branch
[ ] Testing - QA
[ ] Documentation
[ ] Release notes - resolved issues, compatibility, known issues
[ ] Code committed to upstream release/hotfix branches
[ ] Documentation committed to upstream release/hotfix branches

PRs to merge in master:

code: https://github.com/OpenNebula/one/pull/4659
context: https://github.com/OpenNebula/addon-context-linux/pull/205


chore: Bump mypy to 0.800

Codecov Report

Merging #1027 (ebc7e15) into master (23665e2) will decrease coverage by 0.12%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master    #1027      +/-   ##
==========================================
- Coverage   99.68%   99.56%   -0.13%
==========================================
  Files          67       67
  Lines        4833     4832       -1
  Branches      798      798
==========================================
- Hits         4818     4811       -7
- Misses          5        9       +4
- Partials       10       12       +2

Flag
Coverage Δ

unittests
99.54% <ø> (-0.11%)
:arrow_down:

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

Impacted Files
Coverage Δ

src/schemathesis/_compat.py
50.00% <0.00%> (-50.00%)
:arrow_down:

src/schemathesis/cli/callbacks.py
98.19% <0.00%> (-1.81%)
:arrow_down:

src/schemathesis/cli/cassettes.py
98.30% <0.00%> (-1.70%)
:arrow_down:

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 23665e2...ebc7e15. Read the comment docs.

Codecov Report

Merging #1027 (ebc7e15) into master (23665e2) will decrease coverage by 0.12%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master    #1027      +/-   ##
==========================================
- Coverage   99.68%   99.56%   -0.13%
==========================================
  Files          67       67
  Lines        4833     4832       -1
  Branches      798      798
==========================================
- Hits         4818     4811       -7
- Misses          5        9       +4
- Partials       10       12       +2

Flag
Coverage Δ

unittests
99.54% <ø> (-0.11%)
:arrow_down:

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

Impacted Files
Coverage Δ

src/schemathesis/_compat.py
50.00% <0.00%> (-50.00%)
:arrow_down:

src/schemathesis/cli/callbacks.py
98.19% <0.00%> (-1.81%)
:arrow_down:

src/schemathesis/cli/cassettes.py
98.30% <0.00%> (-1.70%)
:arrow_down:

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 23665e2...ebc7e15. Read the comment docs.


Bundle image handler with Sharp

Existing implementation was error prone, creating unnecessary complexity and layers.
There needs to be easier way how to bundle image handler and include Sharp for Lambda as well.
Currently using Squoosh for image handling, which is not recommended for production use with Vercel.

I'd be interested in how you're bundling sharp into the lambda Function/NodejsFunction. Sharp spawns a child process and executes the sharp binary, it might not be possible to bundle the sharp code into the function.

Next's built-in image handler will be replaced by custom solution as it ultimately sucks.
Bundling is overly complicated, passing binaries does not work as expected, hacking all around is needed.
Related to #64
Will be optionally secured by providing allowed image sources.
Expected in version 4 (in couple of days).

As of v4, image optimizer was moved to separate package.
Changes: https://github.com/sladg/nextjs-lambda/compare/release/v3.22.0...v4.0.0
New optimizer: https://github.com/sladg/imaginex-lambda


Impossible run slice on Sciex data

Some Wiff files generated on a TripleTof 5600 contain a first run_slice for mz 0 to 5 Da
It should not happen, since scan window has been set between 400 and 1250 Da

Fixed in revision r125
Problem was linked to spectra containing only a few and low intense peaks, which produced no centroid at all.


Do Debian installation verification with debian image.

The debian image is recommended as the base image in the FAQ and it is smaller
than Ubuntu. It is a better verification image on a Debian installation than ubuntu.

Can you please sign your commits following these rules:
https://github.com/docker/docker/blob/master/CONTRIBUTING.md#sign-your-work
The easiest way to do this is to amend the last commit:
$ git clone -b "doc-test-ubuntu" git@github.com:thewtex/docker.git somewhere
$ cd somewhere
$ git commit --amend -s --no-edit
$ git push -f

This will update the existing PR, so DO NOT open a new one.

Signed -- thanks for your review.

LGTM
ping @docker/docs-owners

Perhaps this should even be changed to docker run --rm hello-world; the hello-world image is created for this task (showing that the installation is working) and is even smaller

@thaJeztah good idea.  Push a new revision that uses hello-world.

LGTM
ping @docker/docs-owners

Thanks for updating the PR; I don't think we need to explain the --rm in this context, so LGTM


Add ci

I wonder, would porting the tests from qunit to something like tape help getting this happening? As an aside it would be nice to integrate saucelabs or similar to run test agains multiple browser environments.

I think its possible with qunit too.

Also I am open to migrate to mocha/expect.js

duplicate of #114


feat(state): add transparent address indexes to the non-finalized state

Motivation
As part of the address index RPCs, we need to track address balances, UTXOs, and transactions in the non-finalized state.
This PR creates the address indexes in the non-finalized state, but it doesn't connect them to state requests or RPCs yet.
Specifications
See tickets:

#3147
#3157
#3158

Designs
The TransparentTransfers struct holds the address indexes for a single address.
Index updates use UpdateWith<T> for TransparentTransfers, where T is a tuple of arguments for:

created UTXOs, or
spent UTXOs

Spent UTXOs are a bit tricky, because we need to add their values to the ContextuallyValidBlock.
Solution

Create a TransparentTransfers address index type
Implement balance, UTXO, and transaction ID updates for created UTXOs
Implement balance, UTXO, and transaction ID updates for spent UTXOs
Remove empty TransparentTransfers after a spend revert
Add address transfers index accessor methods, which return UTXOs and transactions in chain order
Make accessor methods provide all the information required for each query

Related changes:

Add spent UTXO values to ContextuallyValidBlock
Use OrderedUtxos so that spent UTXOs can be stored in chain order
Switch to height-based TransactionLocations as part of merging PR #3978

Related bug fixes:

Stop indexing each transparent output multiple times

Previously, the chain code was indexing each transparent output in the block multiple times (once per transaction). Because we were using HashMaps for chain indexes, this bug did not cause any problems. But in the address indexes, it made balances overflow.
(This should also improve non-finalized state performance for large blocks.)
Review
@conradoplg reviewed a draft of this PR.
We still need to connect these indexes to state requests, but the changes in this PR are enough to get us started.
Reviewer Checklist

[ ] Code implements Specs and Designs
[ ] Tests for Expected Behaviour
[ ] Tests for Errors

Follow Up Work
In other PRs:

Implement the address RPCs and state requests

Add unit tests
Add RPC snapshot tests

There's something wrong with the balance calculations in this PR:

The application panicked (crashed).
Message:  called Result::unwrap() on an Err value: Constraint { value:<PHONE_NUMBER>264129, range: -2100000000000000..=2100000000000000 }
Location: zebra-state/src/service/non_finalized_state/chain/index.rs:85

I keep reviewing this PR but I can't seem to find the bug 😞 (or any other issue). I'll leave it for someone else to review.

I think it's probably a mismatch between the created and spent UTXOs. Probably some missing spent UTXOs, because it's an overflow.
I'll make this part of the code easier to get right.

@mergifyio update

@mergifyio update


Adds test failling on array typehints in PHP80+

After a discussion in r11 it appears that from this PR the behaviour changed so that in PHP80+ typehinting an array fails because getType returns the actual string "array" whereas pre-PHP80 the value was simply null.
Returning "array" causes auryn to try and instantiate an array, which is not a class, and triggers error 8: Could not make array: Class "array" does not exist.
Orthogonally, phpunit being at version 4 makes it incompatible with PHP80+, which is necessary to make the test fail.  Allegedly this would be fixed by https://github.com/rdlowrey/auryn/pull/188.
cmb in chat proposed a quick stub that could solve the issue. The changes do not seem to impact in any way the code from the phpunit upgrade PR so there's no merging order requirement.

$type = $param->getType();
if ($type instanceof \ReflectionNamedType && $type->isBuiltin()) {
    return null;
}

return $type ? (string) $type : null;

I have that locally now in getParamTypeHint.

Yes, this fixes the error here, I have put this in StandardReflector. I don't know how to test it with the caching reflector to make sure it works with it as well.


I am making a telegram logo

@SSHREYA71 are you still working on this issue? If not, I'll close it.


feat($state): support URLs with #fragments in html5Mode

Allow setting the # param to update the location fragment; e.g.: ui-sref="page({name: 'name', '#': 'frag'})" or $state.go('page', {name: 'name', '#': 'frag'})
This is hoping to solve the various issues found in: #701, #1187, and #1455

Looks pretty good, thanks for putting this together. Just to be clear, what's the behavior in non-HTML5-mode? Do you just not get a fragment?

I would assume so, I haven't really thought that through. What would be best? Do browsers even let you set a URL like #!/hello/world#frag

Yeah, you can put whatever you want in the URL. I believe the $location service takes care of parsing for you. See here: https://docs.angularjs.org/api/ng/service/$location#hash
If you can amend the commit with a test that verifies that this change mimics the above behavior (you might have to break off the '#' and pass it to $location.hash() after the call to $location.url()), then I'll merge this. Thanks a lot for your work on this.

So which would you prefer, that I enable this behaviour for non-html5Mode as well, or test that it has no effect when in that mode?

I think the effect should be the same as using $location.hash(), so, you get an extra # in the URL, that the $location service parses out transparently. Does that make sense?

Again, I think you could probably just Make It Work™ by passing the params['#'] to $location.hash() instead of appending it to url.

I think the issue with that would be the order of operations? If I used .hash() in place of appending the the url, it would fire right away, no? (rather than after the state changes)

Not sure, I just assumed it would work. Anyway, if the tests pass in the new PR in both modes, good enough for me.


Wordpress tags are not displayed in Mastodon as hashtags when using WordPress Post-Format

Quick summary
When using in Activity-Object-Type the option WordPress Post-Format, the tags are not displayed as hashtags at least in Mastodon.
Steps to reproduce

In Settings switch Activity-Object-Type to WordPress Post-Format
Write a post with tags
Check the post with a Mastodon App or Web-App

What you expected to happen
Tags should be displayed as hashtags
What actually happened

Post was made here: https://niklasbarning.de/2024/05/23/gruenes-fenster/
Follow<EMAIL_ADDRESS>and check the post
Hashtags are missing

Impact
All
Available workarounds?
No but the platform is still usable
Logs or notes
No response

Hi,
In the settings, WordPress Post-Format is activated. And I've also noticed some inconsistencies in how my posts are displayed on the Mastodon web app. Specifically, when looking at my last three posts, which each have different post formats, I've observed the following:

The quote post and the standard post both display hashtags correctly.
However, the image post does not display hashtags at all.

Additionally, it appears that the text associated with the image post is also stripped out. This leads me to wonder if the object type "image" even supports texts and hashtags on Mastodon / the Fediverse.
With the update 2.4.0, I just changed the setting of Activity-Object-Type to:
Note (default)
Done this, I updated the image post by adding two more hashtags.
As a result, the hashtags are now also displayed on Mastodon. And he toot also includes the title and a link to the post now. The text is still stripped out.

Update: It appears that the hashtags attach successfully, and the posts display in the hashtag search results. However, the hashtags are not visible on the individual posts themselves.

yes, it seems that it only shows the hashtags if there is text in the content. Maybe we have to add the hashtags as content if the text is empty.


"Relation does not exist" when using WITH clause

Version
1.23.0
What happened?
sqlc doesn't recognize subqueries created with WITH clauses, and marks them as non-existent relations.
Relevant log output
sqlc generate -f platform/db/config/sqlc.yaml
# package dbout
queries/device-associations.sql:1:1: relation "lastassociations" does not exist

Database schema
-- Foreign keys omitted

CREATE TABLE `DeviceAssociation` (
  `serialNumber` varchar(191) NOT NULL,
  `createdAt` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  `currentSerialNumber` varchar(191) DEFAULT NULL,
  `previousSerialNumber` varchar(191) DEFAULT NULL,
  PRIMARY KEY (`serialNumber`,`createdAt`),
  KEY `DeviceAssociation_previousSerialNumber_idx` (`previousSerialNumber`),
  KEY `DeviceAssociation_currentSerialNumber_idx` (`currentSerialNumber`),
  KEY `DeviceAssociation_createdAt_idx` (`createdAt` DESC)
);

SQL queries
-- name: DeviceAssociations :many
WITH
	LastAssociations AS (
		SELECT
			serialNumber,
			currentSerialNumber,
			MAX(createdAt) AS createdAt
		FROM
			DeviceAssociation
		WHERE
			serialNumber = sqlc.arg(serialNumber)
			AND currentSerialNumber IS NOT NULL
		GROUP BY
			serialNumber,
			currentSerialNumber
	),
	LastDissociations AS (
		SELECT
			serialNumber,
			previousSerialNumber,
			MAX(createdAt) AS createdAt
		FROM
			DeviceAssociation
		WHERE
			serialNumber = sqlc.arg(serialNumber)
			AND previousSerialNumber IS NOT NULL
		GROUP BY
			serialNumber,
			previousSerialNumber
	)
SELECT DISTINCT
	LastAssociations.serialNumber,
	LastAssociations.currentSerialNumber
FROM LastAssociations
LEFT JOIN LastDissociations ON
		LastAssociations.serialNumber = LastDissociations.serialNumber AND
		LastAssociations.currentSerialNumber = LastDissociations.previousSerialNumber
WHERE LastAssociations.createdAt > LastDissociations.createdAt;

Configuration
version: "2"
sql:
  - engine: "mysql"
    queries: "queries"
    schema: "schema.sql"
    gen:
      go:
        package: "dbout"
        out: "../../../app/dbout"
        emit_empty_slices: true
    database:
      uri: "${DATABASE_URL}"
    rules:
      - sqlc/db-prepare

Playground URL
No response
What operating system are you using?
macOS
What database engines are you using?
MySQL
What type of code are you generating?
Go

Simplified test case: https://play.sqlc.dev/p/4921ba5f55ab3ba21dc0c57a99319f8190e50f9f947d3f0f97a56112b1f0f3c6


Revert "Add fieldType to AbstractQueryBuilder and SortBuilder (#15328)"

This reverts commit 839ba0bca05f8a9aefdbabd023dc75741265bd6c.

Description
[Describe what this change achieves]
Related Issues
Resolves #[Issue number to be closed when this PR is merged]

Check List

[ ] Functionality includes testing.
[ ] API changes companion pull request created, if applicable.
[ ] Public documentation issue/PR created, if applicable.

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

Closing in favor of https://github.com/opensearch-project/OpenSearch/pull/15633 as unable to merge from main


fix: enlarge Goal args

It should make start line, checkpoint and finish line bigger to detect collision

Close #192

resolved by #197


Hey trying to reach you and you are unresponsive on twitter

I saw you had made commits to the OP repo. We are launching an OP l2 fork and looking for devs to help us. This would a full time employment working with a super cool team. I'd love to make some intros if you are interested.
You can reach me on twitter https://twitter.com/moderndiogenese
Or on telegram @NathanSyscoin
Or email if you prefer<EMAIL_ADDRESS>Our website is Syscoin.org
We have a really cool data solution that is done and hooked into Bedrock. Lots of cool happenings in our company and ecosystem and would love to speak more formally. Thank you.

Hey @nhatzfeld that's amazing!   I actually work at OP labs and I am really excited to hear you are building an OP chain.   I will let folks at OP labs know and someone might reach out to you


The Cilium agent daemon creation failed, because  installing iptables rules failed.

Is there an existing issue for this?

[X] I have searched the existing issues

What happened?
Cilium agent daemon creation failed when I install cilium on kubernetes without kube-porxy. The details are as follows：

cmd：
helm install cilium cilium/cilium --version 1.13.4
--namespace kube-system
--set kubeProxyReplacement=strict
--set k8sServiceHost=${API_SERVER_IP}
--set k8sServicePort=${API_SERVER_PORT}

Cilium status
cilium-vfm4f  unable to retrieve cilium status: container cilium-agent is in CrashLoopBackOff, exited with code 1: level=fatal msg="failed to start: daemon creation failed: error while initializing daemon: failed while reinitializing datapath: failed to install iptables rules: unable to run 'iptables -t mangle -D OLD_CILIUM_PRE_mangle -m sock

cilium-status.txt
What is the reason？
Cilium Version
cilium-cli: v0.12.4 compiled with go1.19.1 on linux/amd64
cilium image (default): v1.12.2
Kernel Version
Linux master1 6.2.7-1.el7.elrepo.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Mar 16 14:05:13 EDT 2023 x86_64 x86_64 x86_64 GNU/Lin
Kubernetes Version
Client Version: version.Info{Major:"1", Minor:"25", GitVersion:"v1.25.2", GitCommit:"5835544ca568b757a8ecae5c153f317e5736700e", GitTreeState:"clean", BuildDate:"2022-09-21T14:33:49Z", GoVersion:"go1.19.1", Compiler:"gc", Platform:"linux/amd64"}
Kustomize Version: v4.5.7
Server Version: version.Info{Major:"1", Minor:"25", GitVersion:"v1.25.2", GitCommit:"5835544ca568b757a8ecae5c153f317e5736700e", GitTreeState:"clean", BuildDate:"2022-09-21T14:27:13Z", GoVersion:"go1.19.1", Compiler:"gc", Platform:"linux/amd64"}
Sysdump
cilium-sysdump-20230802-022011.zip
Collecting sysdump with cilium-cli version: v0.12.4, args: [sysdump]
🔍 Collecting Kubernetes nodes
🔍 Collect Kubernetes nodes
🔍 Collect Kubernetes version
🔍 Collecting Kubernetes pods
🔍 Collecting Kubernetes namespaces
🔍 Collecting Kubernetes events
🔍 Collecting Kubernetes pods summary
🔍 Collecting Kubernetes services
🔍 Collecting Kubernetes network policies
🔍 Collecting Cilium cluster-wide network policies
🔍 Collecting Cilium network policies
🔍 Collecting Cilium local redirect policies
🔍 Collecting Cilium egress NAT policies
🔍 Collecting Cilium identities
🔍 Collecting Cilium endpoints
🔍 Collecting Cilium nodes
🔍 Collecting Kubernetes endpoints
🔍 Collecting Ingresses
🔍 Collecting CiliumClusterwideEnvoyConfigs
🔍 Collecting Cilium etcd secret
🔍 Collecting the Cilium configuration
🔍 Collecting the Cilium daemonset(s)
🔍 Collecting the Hubble daemonset
🔍 Collecting the Hubble Relay configuration
🔍 Collecting the Hubble Relay deployment
🔍 Collecting the Hubble UI deployment
🔍 Collecting the 'clustermesh-apiserver' deployment
⚠ Deployment "hubble-relay" not found in namespace "kube-system" - this is expected if Hubble is not enabled
🔍 Collecting the Cilium operator deployment
🔍 Collecting the CNI configmap
🔍 Collecting the CNI configuration files from Cilium pods
🔍 Collecting gops stats from Cilium pods
🔍 Collecting gops stats from Hubble Relay pods
🔍 Collecting bugtool output from Cilium pods
🔍 Collecting logs from Cilium operator pods
🔍 Collecting logs from Cilium pods
🔍 Collecting logs from 'clustermesh-apiserver' pods
🔍 Collecting logs from Hubble pods
⚠ Deployment "hubble-ui" not found in namespace "kube-system" - this is expected if Hubble UI is not enabled
⚠ Deployment "clustermesh-apiserver" not found in namespace "kube-system" - this is expected if 'clustermesh-apiserver' isn't enabled
🔍 Collecting logs from Hubble UI pods
🔍 Collecting gops stats from Hubble pods
🔍 Collecting CiliumEnvoyConfigs
🔍 Collecting logs from Hubble Relay pods
🔍 Collecting bugtool output from Tetragon pods
🔍 Collecting platform-specific data
level=warning msg="Ignoring invalid CiliumEnvoyConfig JSON (proto: (line 1:405): unable to resolve "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router": "not found"): {\n\t"@type": "type.googleapis.com/envoy.config.listener.v3.Listener",\n\t"filterChains": [\n\t\t{\n\t\t\t"filterChainMatch": {\n\t\t\t\t"transportProtocol": "raw_buffer"\n\t\t\t},\n\t\t\t"filters": [\n\t\t\t\t{\n\t\t\t\t\t"name": "envoy.filters.network.http_connection_manager",\n\t\t\t\t\t"typedConfig": {\n\t\t\t\t\t\t"@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager",\n\t\t\t\t\t\t"httpFilters": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t"name": "envoy.filters.http.router",\n\t\t\t\t\t\t\t\t"typedConfig": {\n\t\t\t\t\t\t\t\t\t"@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t],\n\t\t\t\t\t\t"rds": {\n\t\t\t\t\t\t\t"routeConfigName": "listener-insecure"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t"statPrefix": "listener-insecure",\n\t\t\t\t\t\t"upgradeConfigs": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t"upgradeType": "websocket"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t],\n\t\t\t\t\t\t"useRemoteAddress": true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t],\n\t"listenerFilters": [\n\t\t{\n\t\t\t"name": "envoy.filters.listener.tls_inspector",\n\t\t\t"typedConfig": {\n\t\t\t\t"@type": "type.googleapis.com/envoy.extensions.filters.listener.tls_inspector.v3.TlsInspector"\n\t\t\t}\n\t\t}\n\t],\n\t"name": "listener",\n\t"socketOptions": [\n\t\t{\n\t\t\t"description": "Enable TCP keep-alive (default to enabled)",\n\t\t\t"intValue": "1",\n\t\t\t"level": "1",\n\t\t\t"name": "9",\n\t\t\t"state": "STATE_LISTENING"\n\t\t},\n\t\t{\n\t\t\t"description": "TCP keep-alive idle time (in seconds) (defaults to 10s)",\n\t\t\t"intValue": "10",\n\t\t\t"level": "6",\n\t\t\t"name": "4",\n\t\t\t"state": "STATE_LISTENING"\n\t\t},\n\t\t{\n\t\t\t"description": "TCP keep-alive probe intervals (in seconds) (defaults to 5s)",\n\t\t\t"intValue": "5",\n\t\t\t"level": "6",\n\t\t\t"name": "5",\n\t\t\t"state": "STATE_LISTENING"\n\t\t},\n\t\t{\n\t\t\t"description": "TCP keep-alive probe max failures.",\n\t\t\t"intValue": "10",\n\t\t\t"level": "6",\n\t\t\t"name": "6",\n\t\t\t"state": "STATE_LISTENING"\n\t\t}\n\t]\n}" subsys=k8s-apis-cilium.io-v2
🔍 Collecting kvstore data
🔍 Collecting Hubble flows from Cilium pods
⚠ Container "cilium-agent" for pod "cilium-8bckz" in namespace "kube-system" is not running. Trying EphemeralContainer or separate Pod instead...
⚠ Container "cilium-agent" for pod "cilium-bbd4n" in namespace "kube-system" is not running. Trying EphemeralContainer or separate Pod instead...
⚠ Container "cilium-agent" for pod "cilium-bmnb4" in namespace "kube-system" is not running. Trying EphemeralContainer or separate Pod instead...
⚠ Container "cilium-agent" for pod "cilium-vfm4f" in namespace "kube-system" is not running. Trying EphemeralContainer or separate Pod instead...
⚠ EphemeralContainer "sysdump-1690957213" on pod "cilium-8bckz" in namespace "kube-system" never reached Running status (falling back to separate Pod)
Relevant log output
The logs in /var/log/messages:
Aug  2 02:55:00 master1 kubelet: E0802 02:55:00.820417   26050 pod_workers.go:965] "Error syncing pod, skipping" err="failed to \"StartContainer\" for \"cilium-agent\" with CrashLoopBackOff: \"back-off 5m0s restarting failed container=cilium-agent pod=cilium-8bckz_kube-system(1ad22c6d-40a2-4517-9e83-8b333d9f0d15)\"" pod="kube-system/cilium-8bckz" podUID=1ad22c6d-40a2-4517-9e83-8b333d9f0d15
Aug  2 02:55:13 master1 kubelet: E0802 02:55:13.820882   26050 pod_workers.go:965] "Error syncing pod, skipping" err="failed to \"StartContainer\" for \"cilium-agent\" with CrashLoopBackOff: \"back-off 5m0s restarting failed container=cilium-agent pod=cilium-8bckz_kube-system(1ad22c6d-40a2-4517-9e83-8b333d9f0d15)\"" pod="kube-system/cilium-8bckz" podUID=1ad22c6d-40a2-4517-9e83-8b333d9f0d15
Aug  2 02:55:28 master1 kubelet: E0802 02:55:28.821211   26050 pod_workers.go:965] "Error syncing pod, skipping" err="failed to \"StartContainer\" for \"cilium-agent\" with CrashLoopBackOff: \"back-off 5m0s restarting failed container=cilium-agent pod=cilium-8bckz_kube-system(1ad22c6d-40a2-4517-9e83-8b333d9f0d15)\"" pod="kube-system/cilium-8bckz" podUID=1ad22c6d-40a2-4517-9e83-8b333d9f0d15
Aug  2 02:55:43 master1 kubelet: E0802 02:55:43.819358   26050 pod_workers.go:965] "Error syncing pod, skipping" err="failed to \"StartContainer\" for \"cilium-agent\" with CrashLoopBackOff: \"back-off 5m0s restarting failed container=cilium-agent pod=cilium-8bckz_kube-system(1ad22c6d-40a2-4517-9e83-8b333d9f0d15)\"" pod="kube-system/cilium-8bckz" podUID=1ad22c6d-40a2-4517-9e83-8b333d9f0d15
Aug  2 02:55:55 master1 containerd: time="2023-08-02T02:55:55.251829088-04:00" level=info msg="ImageCreate event &ImageCreate{Name:quay.io/cilium/operator-generic@sha256:88429d3e5d05e3805919a2958e002158e26da4ba73e4a8c894e2d5af066136c4,Labels:map[string]string{io.cri-containerd.image: managed,},XXX_unrecognized:[],}"
Aug  2 02:55:55 master1 containerd: time="2023-08-02T02:55:55.252127186-04:00" level=error msg="Failed to handle backOff event &ImageCreate{Name:quay.io/cilium/operator-generic@sha256:88429d3e5d05e3805919a2958e002158e26da4ba73e4a8c894e2d5af066136c4,Labels:map[string]string{io.cri-containerd.image: managed,},XXX_unrecognized:[],} for quay.io/cilium/operator-generic@sha256:88429d3e5d05e3805919a2958e002158e26da4ba73e4a8c894e2d5af066136c4" error="update image store for \"quay.io/cilium/operator-generic@sha256:88429d3e5d05e3805919a2958e002158e26da4ba73e4a8c894e2d5af066136c4\": get image info from containerd: get image diffIDs: unexpected media type application/octet-stream for sha256:88429d3e5d05e3805919a2958e002158e26da4ba73e4a8c894e2d5af066136c4: not found"
Aug  2 02:55:58 master1 kubelet: E0802 02:55:58.818480   26050 pod_workers.go:965] "Error syncing pod, skipping" err="failed to \"StartContainer\" for \"cilium-agent\" with CrashLoopBackOff: \"back-off 5m0s restarting failed container=cilium-agent pod=cilium-8bckz_kube-system(1ad22c6d-40a2-4517-9e83-8b333d9f0d15)\"" pod="kube-system/cilium-8bckz" podUID=1ad22c6d-40a2-4517-9e83-8b333d9f0d15

Anything else?
No response
Code of Conduct

[X] I agree to follow this project's Code of Conduct

Thank you for the report!
Did a bit of digging:
2023-08-02T02:17:12.055050257-04:00 level=fatal msg="failed to start: daemon creation failed: error while initializing daemon: failed while reinitializing datapath: failed to install iptables rules: unable to run 'iptables -t mangle -D OLD_CILIUM_PRE_mangle -m socket [unsupported revision] -m comment --comment cilium: any->pod redirect proxied traffic to host proxy -j MARK --set-xmark 0x200/0xffffffff' iptables command: exit status 2 stderr=\"Bad argument `[unsupported'\\nTry `iptables -h' or 'iptables --help' for more information.\\n\"" subsys=daemon

The part of the code that fails is attempting to delete old iptables rules. Obviously the [unsupported revision] part is causing the issues. The deleting works by first listing the existing rules then deleting them. The [unsupported revision] string is part of the rules echoed back by iptables-save, this is a snippet:
[0:0] -A CILIUM_PRE_mangle -p udp -m mark --mark 0x4b470200 -m comment --comment "cilium: TPROXY to host default/cilium-gateway-my-gateway/listener proxy" -j TPROXY --on-port 18251 --on-ip <IP_ADDRESS> --tproxy-mark 0x200/0xffffffff
[0:0] -A OLD_CILIUM_PRE_mangle -m socket [unsupported revision] -m comment --comment "cilium: any->pod redirect proxied traffic to host proxy" -j MARK --set-xmark 0x200/0xffffffff
[0:0] -A OLD_CILIUM_PRE_mangle -p tcp -m mark --mark 0xab910200 -m comment --comment "cilium: TPROXY to host cilium-dns-egress proxy" -j TPROXY --on-port 37291 --on-ip <IP_ADDRESS> --tproxy-mark 0x200/0xffffffff

Related IPTables commits for reference:

https://git.netfilter.org/iptables/commit/?id=bfa3321fedcb5b4b313d255753351397447a5669
https://git.netfilter.org/iptables/commit/?id=12a52ff9cc9944345204d3e429dd4414448fbcd2

If I understand it correctly, this happens when the rules in the kernel were created with a revision of the socket module that the iptables utility doesn't know. Therefor it can't print the rule as human readable because it doesn't know how to interpret the data. This apparently can happen when upgrading or downgrading iptables version.

Thanks!   @dylandreimerink
Sorry, I missed this log message.
I  think your analysis is correct, and I will conduct another analysis and test based on this information.
Thank you so much！

@dylandreimerink    Thanks.  I installed  the Cilium  version 1.13.2 .  Then I uninstalled  the old version with  cmd "cilium uninstalled"  ，and  helm uninstalled cilium -n kube-system(because cilium is not purely uninstalled after executing cmd "cilium uninstalled".
Then I installed the cilium version 1.13.4.
Now, I suspect it is caused by the incorrect version installation, but I have not tested it.

I also encountered the same problem, is there any solution?

@jianlong0808
Sorry， the problem is there.


[Wallet] Update "Create wallet" section

Remove "keystore option"

Dark Mode -> Hover over changes text colour

Part of #732

Fixed by #762

Fixed by #762


fromHTML table: table header lineHeight

When generating tables using fromHTML, the lineHeight of the table header row is inconsistently sized. The header row lineHeight often seems to take on the height of a lower row, or even uses another odd computation, and makes the header height way larger than is necessary.

Hi,
same issue here. If I generate a table with few columns it looks better. But the most number of columns in the table, the highest is the table header in my PDF. For example, with 14 columns, the header is covering the half of the page in its height.
I'm using chrome 41.0.2272.101 m (64-bit), windows 8.1...64-bit.
With Firefox 36.0.1 happens the same.
Here is the code I'm using, with jspdf.debug.js:
function tableFromHTML() {
      var pdf = new jsPDF('landscape', 'pt', 'a4');
      var source = $('#main_content').get(0);  // #main_content is a container of my table
      var specialElementHandlers = {
          '#bypassme': function(element, renderer) {
              return true
          }
      };
      var margins = {
          top: 40,
          bottom: 40,
          left: 40,
          width: 750
      };
      pdf.fromHTML(
              source, // HTML string or DOM elem ref.
              margins.left, // x coord
              margins.top, {// y coord
                  'width': margins.width, // max width of content on PDF
                  'elementHandlers': specialElementHandlers
              },
      function(dispose) {
          pdf.output('dataurl');
      }
      , margins);
    }

Hope it helps, thanks

I'm wondering why calculateLineHeight() is called with an array (with numerical keys) as last parameter here: https://github.com/MrRio/jsPDF/blob/master/jspdf.plugin.cell.js#L294
I think calculateLineHeight() expects an object with the column names as keys which can be seen here: https://github.com/MrRio/jsPDF/blob/master/jspdf.plugin.cell.js#L335
After fixing that, I had no more problems with the header line-height.
Here is my modified code. https://gist.github.com/web-jst/b25bc5e793be1352850c
I also changed some other things, but commented them all.

Thanks for your reply @web-jst .
I replaced the 'cell plugin' part in my jspdf.debug.js with your modified code.
The excessive header height is now fixed =).
The problem now is that all cells have the same 1-line-height, and they get overflowed, since some of my cells have more text and need multiple lines.
Any idea to solve this? I'm stuck at this point after a lot of search and tests (never so close =)
Here is the resulting file: https://dl.dropboxusercontent.com/u/8117840/jspdf.debug.js
This is the output PDF of my first test, before the modificated code, showing the problem I described in my first comment above: https://dl.dropboxusercontent.com/u/8117840/Test.pdf
This is the output PDF after replacing the cell plugin with the code you provided: https://dl.dropboxusercontent.com/u/8117840/Test2.pdf
Thanks for your help so far, and for jsPDF project.

Hi @chimos
I should have told you that my modified code only works with the default unit setting (mm). Sorry ;)
So after I replaced pt with mm in your test, the output looked way better.
Although the cell-widths are probably not perfect yet. This is because the from_html plugin calculates them based on the column widths of the table rendered in html.
I prefer more fine grained control over the widths and I use the cell plugin directly (with my modified code and jspdf.min.js embedded, but without the from_html plugin):
var headers = [{
	"name":"column1",
	"prompt":"Header 1",
	"width":35,
	"align":"right",
	"padding":1
}, {
	"name":"column2",
	"prompt":"Header 2",
	"width":65,
	"align":"left",
	"padding":4
}];

var rows = [{
	"column1":"Lorem",
	"column2":"Lorem ipsum dolor sit amet."
}, {
	"column1":"Ipsum",
	"column2":"Etiam malesuada erat."
}, {
	"column1":"Dolor",
	"column2":"Vivamus tempor urna vitae."
}];

var doc = new jsPDF();

doc.table(10, 10, rows, headers, {
	autoSize: false,
	printHeaders: true,
	rowMargin: 0,
	fontSize: 14
});

I hope that helps you :)

Thanks alot @web-jst, that did help. With 'mm' as units it works much better.
Despite that, the output was not accepted for my project, because of the style differences between the browser layout and the resulting PDF. At this moment, I don't have enough knowledge to get such a deep control of the output with jsPDF. Instead of this approach, I am finally going to use the browser print option + PDF printer (with some print styles, hiding undesired elements, ....).
In any case, thanks again for your attention and quick help! :,)
Best regards

@chimos You're welcome:) And yeah you are right, unfortunately there are still only very basic styling options. You probably will be a lot faster with your approach, it took me quite a while to add some styles...


Fix requirements.txt to properly support kazoo[sasl].

Codecov Report

Merging #151 into master will increase coverage by 0.01%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master     #151      +/-   ##
==========================================
+ Coverage   53.16%   53.17%   +0.01%
==========================================
  Files         341      341
  Lines       25936    25936
  Branches     3369     3369
==========================================
+ Hits        13788    13791       +3
+ Misses      11455    11452       -3
  Partials      693      693

Impacted Files
Coverage Δ

lib/python/treadmill/rest/error_handlers.py
50.66% <0%> (+4%)
:arrow_up:

Continue to review full report at Codecov.

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


Update Polish translation

Thanks for the PR; can you base the PR on 3.x-dev branch, please? I'm currently maintaining that branch and it will be released soon

Sure, i will add a new PR with complete translation

Just for precaution, start a new cloned repo or use git rebase in case you contributed in the past, since changes were made to the repo to shrink its size


Wrong .NET framewowrk requested at install

The .NET framework is the for the Console apps, but DS4Windows needs the Desktop runtime.
Please change it to this link:
32bit: https://dotnet.microsoft.com/download/dotnet/thank-you/runtime-desktop-5.0.8-windows-x86-installer
64bit: https://dotnet.microsoft.com/download/dotnet/thank-you/runtime-desktop-5.0.8-windows-x64-installer

OMG. Can't comprehend obvious choices.  It's the same redirect Microsoft uses on app startup when .NET 5 cannot be found. Do you also need to be told not to sleep on the road? You would just download the wrong architecture anyway and then complain. Need magic button to do everything.
Dont Sleep on the Road FAIL
https://www.youtube.com/watch?v=XA241Lg70fg

There is nothing that says which version needs to be installed, normal people would never find the answer.
These are the basics of UX, something that you clearly don’t understand.
And also, instead of being a dickhead, scroll and forget.