docker: command not found Error: Process completed with exit code 127. (RDT-459)

I'm building my first CI for GitHub Action and I have problem with building the code.
name: Build

on: [push, pull_request, workflow_dispatch]

jobs:
  build-esp-idf-component:
    name: Build with ESP-IDF ${{ matrix.idf_ver }} for ${{ matrix.idf_target }}
    runs-on: ubuntu-latest
    strategy:
      matrix:
        # The version names here correspond to the versions of espressif/idf Docker image.
        # See https://hub.docker.com/r/espressif/idf/tags and
        # https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/tools/idf-docker-image.html
        # for details.
        idf_ver: ["v4.4.4", "release-v4.4"]
        idf_target: ["esp32"]
    container: espressif/idf:${{ matrix.idf_ver }}
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          submodules: 'recursive'
      - name: esp-idf build
        uses: espressif/esp-idf-ci-action@v1
        with:
            esp_idf_version: ${{ matrix.idf_ver }}
            target: ${{ matrix.idf_target }}
            path: 'main'

as an output from logs I receive:
Run espressif/esp-idf-ci-action@v1
  with:
    esp_idf_version: v4.4.4
    target: esp3[2](https://github.com/NightSkySK/mSpaceLock-device/actions/runs/5159853265/jobs/9295278237#step:4:2)
    path: main
    command: idf.py build
Run export IDF_TARGET=$(echo "esp[3](https://github.com/NightSkySK/mSpaceLock-device/actions/runs/5159853265/jobs/9295278237#step:4:3)2" | tr '[:upper:]' '[:lower:]' | tr -d '_-')
  export IDF_TARGET=$(echo "esp32" | tr '[:upper:]' '[:lower:]' | tr -d '_-')
  docker run -t -e IDF_TARGET="${IDF_TARGET}" -v "${GITHUB_WORKSPACE}:/app/NightSkySK/mSpaceLock-device" \
  -w "/app/NightSkySK/mSpaceLock-device/main" espressif/idf:v[4](https://github.com/NightSkySK/mSpaceLock-device/actions/runs/5159853265/jobs/9295278237#step:4:4).4.4 \
  /bin/bash -c 'git config --global --add safe.directory "*" && idf.py build'
  shell: bash --noprofile --norc -e -o pipefail {0}
/__w/_temp/43fd[5](https://github.com/NightSkySK/mSpaceLock-device/actions/runs/5159853265/jobs/9295278237#step:4:5)74a-8b[6](https://github.com/NightSkySK/mSpaceLock-device/actions/runs/5159853265/jobs/9295278237#step:4:6)9-4abc-8986-5b3b2e88aca5.sh: line 2: docker: command not found
Error: Process completed with exit code 12[7](https://github.com/NightSkySK/mSpaceLock-device/actions/runs/5159853265/jobs/9295278237#step:4:8).

What I did wrong? The same output I got on `release-v4.4'

It took me few hours, but I finally found what was wrong with my github action yaml script, error was result of merging few different files which I wanted combine to match my needs, once I didn't fully understand how it works.
So the problem was at line container: espressif/idf:${{ matrix.idf_ver }} which shouldn't be there as it caused that following steps was executed in idf container already.
For long time I couldn't understand why there is docker command to be executed by espressif/esp-idf-ci-action@v1. It was intuitive for me that checkout should be executed in idf environment. Once I finally  understood that checkout is going to be passed to espressif/esp-idf-ci-action@v1 and only than docker image need to be run than fixing the yaml code become easy task. I will leave my experience here, may be someone will face same issue as me.
Here is the yaml code for github action which is finally working for me:
# This is a basic workflow that is manually triggered

name:  Build and Publish Application

# Controls when the action will run. Workflow runs when manually triggered using the UI
# or API.
on:
  push:
  pull_request:
    branches: [main]
  workflow_dispatch:
    # Inputs the workflow accepts.

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  build:
    strategy:
      fail-fast: false
      matrix:
        # The version names here correspond to the versions of espressif/idf Docker image.
        # See https://hub.docker.com/r/espressif/idf/tags and
        # https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/tools/idf-docker-image.html
        # for details.
        idf_ver: ["release-v4.3", "release-v4.4"]
        idf_target: ["esp32"]
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repo
        uses: actions/checkout@v3
        with:
          submodules: 'recursive'
      - name: Build Application
        uses: espressif/esp-idf-ci-action@v1
        with:
          esp_idf_version: ${{ matrix.idf_ver }}
          target: ${{ matrix.idf_target }}
      - name: Rename artifact
        run: |
          ls -lah
          cp build/bootloader/bootloader.bin bootloader-${{ matrix.idf_ver }}.bin
          cp build/partition_table/partition-table.bin partition-table-${{ matrix.idf_ver }}.bin
          cp build/mspacelock.bin mspacelock-${{ matrix.idf_ver }}.bin
          cp build/ota_data_initial.bin ota_data_initial-${{ matrix.idf_ver }}.bin

      - name: Upload
        uses: actions/upload-artifact@v3
        with:
          name: mSpaceLock_${{ matrix.idf_target }}_${{ matrix.idf_ver }}
          path: "*-${{ matrix.idf_ver }}.bin"

  release:
    needs: build
    runs-on: ubuntu-latest
    steps:
    - name: Download Firmware Files
      uses: actions/download-artifact@v3
      with:
        path: build


all: run cargo fmt --all

format all rust code

we use nightly toolchain for formatting our code. @rakita has recently fixed formatting here https://github.com/paradigmxyz/reth/pull/6035


Sentry sourcemap use @vitejs/plugin-legacy and @sentry/vite-plugin conflict.

Environment
Node: v18.16.0
Vite: v5.3.1 (latest)
@sentry/vite-plugin: ^2.20.0
@vitejs/plugin-legacy: ^5.4.1
Project created using npm create vite, and choose React + TypeScript
What version are you running? Etc.
Steps to Reproduce

Create a new Vite project.
Config @vitejs/plugin-legacy.
Config sentryVitePlugin, like this:
vite.config.ts:

import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
import legacy from "@vitejs/plugin-legacy";
import { sentryVitePlugin } from "@sentry/vite-plugin";

// https://vitejs.dev/config/
export default defineConfig({
  build: {
    sourcemap: true,
  },
  plugins: [
    react(),
    legacy({
      targets: ["defaults", "not IE 11"],
    }),
    // notice: ... is my private config
    sentryVitePlugin({
      url: "...",
      org: "...",
      project: "...",
      authToken: "...",
      release: {
        name: "...",
      },
      sourcemaps: {
        assets: "dist/assets/**",
        ignore: ["node_modules"],
        filesToDeleteAfterUpload: "dist/**/*.map",
      },
    }),
  ],
});

Add the following to App.tsx to test:
App.tsx:

// ...
<button
  onClick={() => {
      throw new Error("VITE SENTRY");
    })
  }
>
  count is {count}
</button>
// ...

Expected Result
The expected result is similar to the second image under the "Actual Result" section.
Actual Result
With the legacy plugin enabled:

Without the legacy plugin:
vite.config.ts:
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
import legacy from "@vitejs/plugin-legacy";
import { sentryVitePlugin } from "@sentry/vite-plugin";

// https://vitejs.dev/config/
export default defineConfig({
  build: {
    sourcemap: true,
  },
  plugins: [
    react(),
    // notice: ... is my private config
    sentryVitePlugin({
      url: "...",
      org: "...",
      project: "...",
      authToken: "...",
      release: {
        name: "...",
      },
      sourcemaps: {
        assets: "dist/assets/**",
        ignore: ["node_modules"],
        filesToDeleteAfterUpload: "dist/**/*.map",
      },
    }),
  ],
});

This configuration works correctly:

When using the legacy plugin, the build uploads two sourcemaps:

Without the legacy plugin, only one sourcemap is uploaded:

Issue
I need to use the legacy plugin, but it seems incompatible with Sentry sourcemaps. Any help would be appreciated.

Hi, can you try version 2.20.1 of the @sentry/vite-plugin? Thanks!

Hi, can you try version 2.20.1 of the @sentry/vite-plugin? Thanks!

Thank you for your suggestion. I tried version 2.20.1 of the @sentry/vite-plugin, but the issue persists.
I noticed that with the legacy plugin enabled, the sourcemaps are uploaded twice during the build:

When the legacy plugin is disabled, the sourcemaps are only uploaded once:

Because of this, Sentry errors cannot be mapped to the source code locations. I believe this issue is related to the double upload of sourcemaps, but I'm not sure how to resolve it. I encountered this problem with a newly created Vite project with minimal configuration.
Any assistance would be greatly appreciated.
Thank you!

And this is my package.json:
{
  "name": "sentry-test",
  "private": true,
  "version": "0.0.0",
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "tsc -b && vite build",
    "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
    "preview": "vite preview"
  },
  "dependencies": {
    "react": "^18.3.1",
    "react-dom": "^18.3.1"
  },
  "devDependencies": {
    "@types/react": "^18.3.3",
    "@types/react-dom": "^18.3.0",
    "@typescript-eslint/eslint-plugin": "^7.13.1",
    "@typescript-eslint/parser": "^7.13.1",
    "@vitejs/plugin-react": "^4.3.1",
    "eslint": "^8.57.0",
    "eslint-plugin-react-hooks": "^4.6.2",
    "eslint-plugin-react-refresh": "^0.4.7",
    "typescript": "^5.2.2",
    "vite": "^5.3.1",
    "@sentry/vite-plugin": "^2.20.1",
    "@vitejs/plugin-legacy": "^5.4.1",
    "@sentry/react": "^8.11.0"
  }
}
```

I was wondering if it's possible to upload the sourcemap after the build is finished, rather than during the build, but I haven't been able to configure the @sentry/vite-plugin to do this.

I think our Vite plugin is incompatible with vitejs/plugin-legacy due to it doing funky stuff during build. Please use Sentry CLI to upload source maps for now: https://docs.sentry.io/platforms/javascript/guides/angular/sourcemaps/uploading/cli/

I think our Vite plugin is incompatible with vitejs/plugin-legacy due to it doing funky stuff during build. Please use Sentry CLI to upload source maps for now: https://docs.sentry.io/platforms/javascript/guides/angular/sourcemaps/uploading/cli/

I use the @sentry/cli upload sourcemap, this is my config:
.sentryclirc:
[auth]
token = xxx
[defaults]
url = xxx
org = sentry
project = react-sentry-test

package.json -> scripts:
"sentry": "sentry-cli releases files 0.0.1 upload-sourcemaps --url-prefix '~/assets' './dist/assets'"

I upload sourcemap success, but it not work, can you help me check if the configuration is correct?

Please follow the guide I linked. It is different from your setup.

I think our Vite plugin is incompatible with vitejs/plugin-legacy due to it doing funky stuff during build. Please use Sentry CLI to upload source maps for now: https://docs.sentry.io/platforms/javascript/guides/angular/sourcemaps/uploading/cli/

So will this problem be solved, or does it need to be solved by Vite?

@tyouzu1 we are currently not looking into it. I think the vite folks should likely also investigate.

@lforst
I I checked the execution logic of vite legacy.
It seems legacy will use outputOptions, so writeBundle to be triggered twice
However, the deletion task that is triggered for the second time seems to be executed in an earlier order.
I didn't have enough time to check the logic of the sentry plugin,So I can only provide simple suggestions, such as forcing the deletion task to be executed last.
https://github.com/getsentry/sentry-javascript-bundler-plugins/pull/568
I can't guarantee there are no bugs, if you have time maybe you can help me take a look, If you need anything else, let me know
The log looks like this,  with [debug] upload and [debug] delete
dist/assets/index-legacy-Lvy-jIUq.js       0.63 kB │ gzip:  0.36 kB │ map: 1.73 kB
dist/assets/polyfills-legacy-DlS80YAc.js  55.74 kB │ gzip: 22.43 kB
----------------------[debug] upload  [
  '4a719ab0-69d1-4fea-8dfe-0583bff4b570-0.js',
  '4a719ab0-69d1-4fea-8dfe-0583bff4b570-0.js.map'
] [ Promise { <pending> }, Promise { <pending> } ]
> Found 2 files
> Analyzing 2 sources
> Bundled 2 files for upload
[sentry-vite-plugin] Info: Successfully uploaded source maps to Sentry
> Found 3 files
> Analyzing 3 sources
> Nothing to upload
----------------------[debug] delete  [
  '/xxxxx/dist/assets/index-legacy-Lvy-jIUq.js.map'
]
dist/index.html                2.03 kB │ gzip: 0.94 kB
dist/assets/index-CCZnuigm.js  1.32 kB │ gzip: 0.71 kB │ map: 1.71 kB
----------------------[debug] delete  [
  '/xxxxx/dist/assets/index-CCZnuigm.js.map'
]
----------------------[debug] upload  [
  '4a719ab0-69d1-4fea-8dfe-0583bff4b570-1.js',
  '4ae9580f-02df-4968-9b14-31508fe6e9e9-0.js'
] [ Promise { <pending> }, Promise { <pending> } ]
> Found 2 files
> Analyzing 2 sources

After modification, it looks like
dist/assets/index-legacy-Lvy-jIUq.js       0.63 kB │ gzip:  0.36 kB │ map: 1.73 kB
dist/assets/polyfills-legacy-DlS80YAc.js  55.74 kB │ gzip: 22.43 kB
----------------------[debug] upload  [
  '4a719ab0-69d1-4fea-8dfe-0583bff4b570-0.js',
  '4a719ab0-69d1-4fea-8dfe-0583bff4b570-0.js.map'
] [ Promise { <pending> }, Promise { <pending> } ]
> Found 2 files
> Analyzing 2 sources
> Uploaded files to Sentry
> Found 3 files
> Analyzing 3 sources
> Nothing to upload
----------------------[debug] delete  [
  '/xxxxxx/dist/assets/index-legacy-Lvy-jIUq.js.map'
]
dist/index.html                2.03 kB │ gzip: 0.94 kB
dist/assets/index-CCZnuigm.js  1.32 kB │ gzip: 0.71 kB │ map: 1.71 kB
----------------------[debug] upload  [
  '4a719ab0-69d1-4fea-8dfe-0583bff4b570-1.js',
  '4ae9580f-02df-4968-9b14-31508fe6e9e9-0.js',
  '4ae9580f-02df-4968-9b14-31508fe6e9e9-0.js.map'
] [ Promise { <pending> }, Promise { <pending> }, Promise { <pending> } ]
> Found 3 files
> Analyzing 3 sources
> Bundled 3 files for upload
> Uploaded files to Sentry
[sentry-vite-plugin] Info: Successfully uploaded source maps to Sentry
> Found 4 files
> Analyzing 4 sources
----------------------[debug] delete  [
  '/xxxxx/dist/assets/index-CCZnuigm.js.map'
]

That's some nice investigation. Thanks a lot! I'll take a look whether I can get your fix in.

@tyouzu1 we released the changes, does it fix the problem?

@tyouzu1 we released the changes, does it fix the problem?

Thanks . It completely solved my case.

Closing this then. Let me know if there are any more issues!


[release] v0.2.9

Feat:

Add multi-endpoint load balancing support: doc, rfc

Feat:

Support geometry type for jdbc https://github.com/datafuselabs/databend-jdbc/pull/241

Fix:

fix: uploadStream over 2Gi failed https://github.com/datafuselabs/databend-jdbc/pull/242
fix: encode speacial char in password  https://github.com/datafuselabs/databend-jdbc/pull/243
fix: Switch flags for support catalog in DDL/DML https://github.com/datafuselabs/databend-jdbc/pull/244
fix: double INF value response  https://github.com/datafuselabs/databend-jdbc/pull/246
fix: getColumns field https://github.com/datafuselabs/databend-jdbc/pull/256

@hantmac, should this now be available as 0.2.9?


Update README.md

There was a typo on line 12. I corrected "sould" to "should" and changed the wording to be a bit more readable.
Fixes #604
To test:

Confirm that correct spelling is used on line 12 of README.md file

Hi @DominicOram I was looking for my first open source contribution and stumbled upon Artemis project. That's when I noticed this. 😄


[BUG] Verible format fails

Environment

OS:

Operating System: Rocky Linux 9.4 (Blue Onyx)
Kernel: Linux 5.14.0-427.28.1.el9_4.x86_64

config:

   "verilog.ctags.path": "/usr/local/bin/ctags",
   "verilog.ctags.indexAllIncludes": true,
   "verilog.svFormat.formatter": "verible-verilog-format",
   "verilog.verilogFormat.formatter": "verible-verilog-format",
   "verilog.svFormat.verible.path": "/opt/verible/bin/verible-verilog-format",
   "verilog.verilogFormat.veribleFormatter.path": "/opt/verible/bin/verible-verilog-format"

Steps to reproduce:

Right clock in document, select Format Document

Logs:  (Get logs from Output > verilog)
2024-08-14 15:11:29.047 [info] [svFormat] formatting /home/gtaylor/git/fpga/src/clock_crossing/two_stage_synchronizer.sv
2024-08-14 15:11:29.047 [info] [svFormat] [verible] Temp file created at:/tmp/verible-verilog-format-c04d7d624381cefe245a29da3e69dfad.tmp.sv
2024-08-14 15:11:29.047 [info] [svFormat] [verible] Executing command: /opt/verible/bin/verible-verilog-format  --inplace /tmp/verible-verilog-format-c04d7d624381cefe245a29da3e69dfad.tmp.sv
2024-08-14 15:11:29.048 [error] [svFormat] [verible] Error: Command failed: /opt/verible/bin/verible-verilog-format  --inplace /tmp/verible-verilog-format-c04d7d624381cefe245a29da3e69dfad.tmp.sv
<empty-filename>: No such file or directory

I've seen this before actually, and I'm not sure what causes it. I can experiment with having verible do the in-place formatting instead of creating the temporary file. That part wasn't written by me, but I assume they did it because not all formatters support inplace formatting.

Contributions are welcome too! I don't think this should be too difficult for a starter task

Should be fixed in 0.9.17, lmk if it works for you

This unfortunately doesn't seem to work. I'm getting a different error now:
2024-10-01 11:24:11.879 [info] [svFormat] formatting /home/gtaylor/git/fpga/src/clock_crossing/two_stage_synchronizer.sv
2024-10-01 11:24:11.879 [info] [svFormat] [verible] Executing command: /opt/verible/bin/verible-verilog-format  /home/gtaylor/git/fpga/src/clock_crossing/two_stage_synchronizer.sv
2024-10-01 11:24:11.879 [error] [svFormat] [verible] Formatting failed: Error: Command failed: /opt/verible/bin/verible-verilog-format  /home/gtaylor/git/fpga/src/clock_crossing/two_stage_synchronizer.sv
--inplace required for multiple files.

I've tried setting the option to Run at file location, as well as setting --inplace as arguments to the tool, but they don't seem to have any effect either way (--inplace doesn't seem to get passed at all). I suspect if --inplace actually got passed it might work.

Just pushed an update to the formatting implementation, can you try again? And --inplace only overwrites the file if there are absolutely no errors, so that's why I don't use that. It should pass it through if given though, which would result in an empty output, and so no format. Also, I'd say don't use run at location, it doesn't really make sense to have that for a formatter, especially if you reference say a flagfile in the args.

Now the file completely disappears after I run the command:
2024-10-07 09:19:15.601 [info] [svFormat] formatting /home/gtaylor/git/fpga/src/clock_crossing/two_stage_synchronizer.sv
2024-10-07 09:19:15.601 [info] [svFormat] [verible] Executing command: /opt/verible/bin/verible-verilog-format  -


NavigationManager.NavigateTo does not trigger NavigationException as expected, causing redirection failure when using Htmxor

Whenever I attempt to call RedirectManager.RedirectTo, I expect NavigationManager.NavigateTo(uri) to throw a NavigationException, which should be handled by the framework to facilitate the redirection to the specified URL.
However, instead of triggering the expected NavigationException, what gets triggered is an HtmxorNavigationException. This leads to an Object reference not set to an instance of an object error, which ultimately prevents the redirection from working properly when the Htmxor package is active.
Expected Behavior:

NavigationManager.NavigateTo(uri) should trigger the NavigationException, allowing the framework to handle the redirection seamlessly.

Actual Behavior:

The HtmxorNavigationException is thrown instead, causing a null reference error and breaking the redirection flow.

Steps to Reproduce:

Attempt to call RedirectManager.RedirectTo with Htmxor active.
Observe that NavigationException is not triggered, and redirection fails due to HtmxorNavigationException.

Thanks for the report. What is interesting is that HtmxorNavigationException  inherits from NavigationException, so the behavior should be preserved, at least in my testing.
Can you provide a minimal runnable code sample that I can use to understand your scenario better?

Using your pizza example code, you can place RedirectManager.RedirectTo("/myorders"); inside the OnInitializedAsync method of Index.razor. Redirections don't seem to work with RedirectManager at all. My idea was to use HTMX redirection via HX-Redirect, which performs a client-side redirect to a new location. I'm unsure how to trigger that directly from the @code section, but it would likely provide a smoother experience, especially with Blazor SSR.
In contrast, Blazor's typical way to handle redirection is by throwing a NavigationManagerException, which the framework manages as a redirect. Is there any way to return custom headers from a Blazor component? While Razor pages handle HTML injection well with direct routing, I'm not sure how to modify the headers (e.g., to include an HTTP request header for the HX-Redirect).

Using your pizza example code, you can place RedirectManager.RedirectTo("/myorders"); inside the OnInitializedAsync method of Index.razor. Redirections don't seem to work with RedirectManager at all.

I assume you are talking about the IdentityRedirectManager type? Looks like you are not the only one that experience this (https://github.com/dotnet/aspnetcore/issues/53996).
Anyway, Htmxor do the same thing as Blazor SSR, but it provides its own HtmxorNavigationManager (registrered by default) that throws HtmxorNavigationException that has additional data included which allows Hrmxor to redirect in the expected way.
So, the behavior should be identical to Blazor SSR, but do check if your code is using HtmxorNavigationManager.
The key part of the HtmxorRenderer that handles this is here:
https://github.com/egil/Htmxor/blob/d8e09e4da17ab4c74fbea95d8e995137785c8395/src/Htmxor/Rendering/HtmxorRenderer.Rendering.cs#L34-L102

I'm unsure how to trigger that directly from the @code section, but it would likely provide a smoother experience, especially with Blazor SSR.

You need access to the HtmxContext object that is created with each request, and is available as an injected service as well as a cascading value, Then, e.g. during OnInitialized, you can set HX response headers that will cause htmx to do client side stuff, e.g.:
// note: this is untested code
[CascadingParameter]
public HtmxContext Context { get; set; }

protected override void OnInitialized()
{
  Context.Response.Location("/url/to/other/page");
}

Btw. I have been away from this project for a few months, simply have not had the time, so some of this is based on vague memories and may not all be correct.


After/before validation: invalid parameter description if comparing with another field

Here are my rules:
public function rules()
{
    return [
        'start_date' => 'required|date_format:Y-m-d|after:today',
        'start_time' => 'required|regex:/^\d{2}:00$/',
        'start_city' => 'required|numeric',

        'end_date' => 'required|date_format:Y-m-d|after:start_date',
        'end_time' => 'required|regex:/^\d{2}:00$/',
        'end_city' => 'required|numeric',
    ];
}

And the resulting documentation:

As you can see, the description for end_date is invalid.  It should be something like: Must be a date after start_date

Hello @mpociot ,
I am working on a fix for the 1.* version, however I'm not sure where to send the PR because the repo only has a master branch (which is for the 2.0 version I believe)
Could you create a branch for the 1.* versions ?
Thanks !

Here are my fixes:

Example request: prevent double slash in the URL
Use correct date_format if the date_format validation is used with the before/after validation
Fix curl command for GET requests
Fix validation after:fieldname and before:fieldname
Add request parameters in example request for Dingo

Fixed in #320


About ‘def planning_block_gap’ and ‘def planning_random’

Hi Huang, I was reading nirrt_star_png_2d.py and nrrt_star_gng_2d.py and noticed that def planning_block_gap and def planning_random  do not seem to be used. After I comment out these two defs, the results don't seem to be affected by path planning in either environment. I would like to ask you what these two defs do.

These functions are used here:
https://github.com/tedhuang96/nirrt_star/blob/69e81b3597d46b696b58ed483cad56296ce6c214/eval_planning_2d.py#L117-L125


Non-synced reserve hashed, committed, and revealed (warmup timing issue)

Context
sepolia testnet bee 2.3.0-rc5 (but I suspect it is in 2.2.0 and previous as well)
Summary
I updated a node from rc4 to rc5 while it was actively pullsyncing to fill a newly opened multiplier of reserve.   Upon restart, the storage compensation was just at the end of the reveal phase and entered the claim phase.   This node decided that it's neighborhood was chosen and generated a hash.   Upon hash completion, it had only iterated 1,858,396 chunks because the selected neighborhood was still being pulled when the node was shut down.
Expected behavior
Node should wait to be fully warmed up, allowing the pullsync to commence, before believing that they are ready to participate in the storage compensation round.

Here are the storageincentives logs from this node:
"time"="2024-11-05 12:23:18.148928" "level"="info" "logger"="node/storageincentives" "msg"="entered new phase" "phase"="reveal" "round"=46172 "block"=7018214
"time"="2024-11-05 12:25:48.154631" "level"="info" "logger"="node/storageincentives" "msg"="entered new phase" "phase"="claim" "round"=46172 "block"=7018225
"time"="2024-11-05 12:25:48.158101" "level"="info" "logger"="node/storageincentives" "msg"="neighbourhood chosen" "round"=46172
"time"="2024-11-05 12:32:35.700922" "level"="info" "logger"="node/storer" "msg"="reserve sampler finished" "duration"="6m47.535404759s" "storage_radius"=3 "consensus_time_ns"=1730824500000000000 "stats"="&{TotalDuration:6m47.535404429s TotalIterated:1858396 IterationDuration:6m47.533445049s SampleInserts:213 NewIgnored:0 InvalidStamp:0 BelowBalanceIgnored:0 TaddrDuration:28m30.877856271s ValidStampDuration:661.179068ms BatchesBelowValueDuration:194.802µs RogueChunk:0 ChunkLoadDuration:16m26.517040139s ChunkLoadFailed:0 StampLoadFailed:0}"
"time"="2024-11-05 12:32:35.701903" "level"="info" "logger"="node/storageincentives" "msg"="produced sample" "hash"="d2a87f958b496d20894b30159e27cfb5cfe81a0d149b8c5785260a0a92411008" "radius"=3 "round"=46172

And the output of /status/neighborhoods.   The selected neighborhood was 010 which you can see is not even up to 2^21 (1/2 target size) chunks.
  "neighborhoods": [
    {
      "neighborhood": "000",
      "reserveSizeWithinRadius": 2763356,
      "proximity": 3
    },
    {
      "neighborhood": "001",
      "reserveSizeWithinRadius": 2791439,
      "proximity": 2
    },
    {
      "neighborhood": "010",
      "reserveSizeWithinRadius": 1858396,
      "proximity": 1
    },
    {
      "neighborhood": "011",
      "reserveSizeWithinRadius": 1953902,
      "proximity": 1
    }
  ]

Steps to reproduce

Have a node actively pullsyncing into a non-fully-synced reserve.  I suspect this can even be a brand new node, it's all about the timing.

Restart the node again just before the claim phase starts.   It is important for duplication that the claim phase starts before the node is warmed up which is also before pullsync starts operating again.

If you're lucky, (one of) the node's non-synced neighborhoods will be selected and you will have successfully duplicated this issue.

Possible solution
The storageincentives agent should honor the warmup time period, or at least not start operation until pullsync has cleared the warmup because otherwise the node may appear to be fully synced (zero pullsyncRate), when in fact the selected reserve is woefully incomplete.
It's the 09a04... node that is doing this while trying to build up to a reserve multiplier of 2 which would include the selected 58ea... neighborhood.   It definitely committed according to monSI.

No surprise that the revealed hash doesn't match the other participating nodes.

On thinking this through a bit more, maybe the check for a sufficiently full reserve (greater than 1/2 full) is incorrect in the presence of a non-zero multiplier?
The original neighborhood was fully synced and therefore the total reserve chunk count was definitely sufficient.  It was the chunk count in the actual selected neighborhood that is lacking because it is not yet fully synced.

@martinconic this can tacked by simply by adding a warmup check in this isFullySynced function https://github.com/ethersphere/bee/blob/master/pkg/node/node.go#L1065


[Backport TC-356] update .rat-excludes with dirs already vetted for license

(cherry picked from commit b0e72d1807a883524ded209b505761e788652770)

merged.


Implement a verified Client fake.

This change is

Current coverage is 98.69%

Merging #12 into master will decrease coverage by -1.31% as of 6a462e4

@@            master     #12   diff @@
======================================
  Files           13      14     +1
  Stmts          985    1070    +85
  Branches        89      99    +10
  Methods          0       0
======================================
+ Hit            985    1056    +71
- Partial          0       3     +3
- Missed           0      11    +11

Review entire Coverage Diff as of 6a462e4

Powered by Codecov. Updated on successful CI builds.

Reviewed 6 of 9 files at r1, 3 of 3 files at r2, 1 of 1 files at r3.
Review status: all files reviewed at latest revision, all discussions resolved.

Comments from the review on Reviewable.io

Reviewed 1 of 1 files at r4, 1 of 1 files at r5.
Review status: all files reviewed at latest revision, all discussions resolved.

Comments from the review on Reviewable.io


Added custom validity checking delegate method to PAPasscode

So the general idea behind PAPasscodeViewController:checkPasscodeValidityWithEntry: is to enable the developer to implement a custom validity test for the entered passcode using whatever arbitrary means they see fit.
The reason why we implemented this delegate method is because for our solution, we store the passcode as a one-way hash that we obviously cannot unhash. Using this delegate method, we can hash the candidate entry and see if the hashes match.
Hope this helps!
(this is attempt #2, where the first attempt was closed by me because it was half-baked )

Closing as (extremely) stale.


No localization for short time strings?

I checked localized strings and could not find any localization for shortened time strings. I want to localize short time strings as well. How can I achieve this?

+1


Release for FooTables V3

Hi!
I was wondering if there will be a release which will work with V3 of footables?
https://github.com/fooplugins/FooTable
Thank you very much!

Yes, this would be really nice.


Swaps HV/MV/LV scaling to supply power scaling

About the PR

Changes the damage and stun time calculations for getting electrocuted through a powernet to be independent of the type of cable (LV|MV|HV).
The old base damage was either 20 for LV, 40 for MV, and 60 for HV if you had partially effective insuls or powernet satisfaction * 75 averaged over 1 second.
The new base damage is an initial burst of powernet supply wattage / 50000 plus powernet satisfaction * 20 averaged over the following second if you aren't wearing somewhat effective insuls.
Why / Balance

I'm making a PR to ECS node groups and the hardcoded voltage system was unwieldy. This is a simpler system with less reliance on hardcoded enums. Damage will still scale with powernet type simply through larger powernets having more power running through them.
Technical details

Electrocution damage now comes in two waves.

An initial burst proportional to the amount of power being supplied to the powernet.
2.A trailing burst a second later proportional to the average powernet satisfaction over the preceding second. The trailing burst is only applied if the victim is wearing insuls of under half effectiveness.

Media

[X] I have added screenshots/videos to this PR showcasing its changes ingame, or this PR does not require an ingame showcase

Breaking changes

Changelog

There is a problem that SMES that are closed to themselves can accelerate production/consumption in the network to several MW. Approximately how much damage would be caused to a person if he flew into a grill with such voltage?

There is a problem that SMES that are closed to themselves can accelerate production/consumption in the network to several MW. Approximately how much damage would be caused to a person if he flew into a grill with such voltage?

I redid my math and apparently it maxes out at 800 burn. Not sure when went wrong, I was trying to match the existing damage.
I'll fix it when I figure out where the problem is.

There is a problem that SMES that are closed to themselves can accelerate production/consumption in the network to several MW. Approximately how much damage would be caused to a person if he flew into a grill with such voltage?

Fixed the power scaling, new max damages are in the table.

Power:
(Max)[^1] Damage:

0
0

50kW
20

1MW
40

4MW
100

9MW
200

[^1]: Assuming a stable powernet (<= 100% power satisfaction.)

needs changelog to reflect that electrocutions will generally do less damage


Jd/add interface constraints

requires PSY 2.3.0 to pass

We had additional requirements for this PR that needed a new version of PSY to include penalties


Fixes #41

Following up from #19 and fixing #41, remove non-object based bioblend code.

LGTM, but I would not merge this into 15.05 as the label indicated. This can probably wait for the next release.
Thanks @erasche!

Moved to 15.07 label.

@bgruening there will be merge conflicts... is it OK for me to close this and add it to #49 ?

Yes please do!


ddcutil: 1.0.1 -> 1.1.0

Motivation for this change
Version bump
Things done

[x] Tested using sandboxing (nix.useSandbox on NixOS
Built on platform(s)

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

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review wip"
[x] Tested execution of all binary files (usually in ./result/bin/)
[ ] Determined the impact on package closure size (by running nix path-info -S before and after)
[x] Ensured that relevant documentation is up to date
[x] Fits CONTRIBUTING.md.

@gebner can you check if the patch works? For some reason I can't reproduce the errors in #118362.

Result of nixpkgs-review pr 120507 at 61f2b366 run on aarch64-linux 1

2 packages marked as broken and skipped:

libsForQt512.powerdevil
libsForQt514.powerdevil

6 packages built successfully:

clight
clightd
ddcui
ddcutil
enlightenment.enlightenment
libsForQt5.powerdevil (libsForQt515.powerdevil ,plasma5Packages.powerdevil)

@gebner can you check if the patch works? For some reason I can't reproduce the errors in #118362.

Works fine, but I think it only has an effect if i2c-dev is not loaded:
# without patch
Unable to read modules.builtin
Module i2c-dev is not loaded and ddcutil can't determine if it is built into the kernel
Bus /dev/i2c-8 not found

# with patch
Module i2c-dev is not loaded and not built into the kernel.
ddcutil requires module i2c-dev


targeting another component

https://emotion.sh/docs/styled#targeting-another-emotion-component

0d22b9ae6d7baddaeb1f9c07eb07dc62835a6c6e


Validator warns that Markdown autolinks will be escaped

Hi,
We have several profiles where an ElementDefinition.comment contains Markdown autolinks, e.g.:
Either `.policy` or `.policyRule` should exist following core constraint ppc-1. If no explicit value is recorded, a fallback is to populate `.policy.uri` with <https://wetten.overheid.nl/> if the advance directive is recorded following Dutch law and regulations.

(so it has an absolute URL formatted in between < and >).
When validating such a profile, the Validator gives the following warning:

The markdown contains content that appears to be an embedded HTML tag starting at 'Ei'. This will (or SHOULD) be escaped by the presentation layer. The content should be checked to confirm that this is the desired behaviour

I believe this warning is incorrect. The syntax is valid according to GFM for specifying an URL and a valid GFM parser should be able to distinguish it from an embedded HTML tag.

I don't see how it's incorrect. It appears to be an embedded html tag. As you say, it's valid, and processed properly will be ok. The warning is just pointing out that it needs to be processed correctly

Issue has been resolved :)


Adjusts Docker HEALTHCHECK for Kafka from 2s to 5s timeout

This helps avoid annoying flakes, or having people need to override our
defaults.

any other feedback welcome post merge also! thanks @anuraaga


build: use release please workflow

Since you are now enforcing conventional commit messages in your repo, this would be the final step in making releases to NPM and GitHub automated by having it do the work for you.
In order to accept this Merge Request, if you choose to do so:

You must provide Read and write permissions under Workflow permissions (Settings/Actions/General)

If you don't have one already, create a NPM_TOKEN variable to publish to NPM from this repo
I think you need to manually create GitHub releases and tags for each release to correspond with what you have on NPM

After you accept this MR into your default branch, every time you push new commits to your default branch, Release Please will scan those commit messages. If the commit message triggers a release (fix: for patch, feat:  for minor, etc.) , Release Please will create a Pull Request for you. You can push more commits to the default branch while this PR is still open and Release Please will update the PR if it's still open.
Once you accept a Release Please PR, that will bump your package.json version, create the GitHub release, publish the package to NPM, and automatically update your CHANGELOG using the conventional commit messages which triggered the release.

This is really cool. Gotta remind to add the ! for breaking changes when we add something that changes the API. I have added the tokens and all, but I'll still have a look at how Release Please works before merging the PR.
Once again thank you very much for collaborating!

Thanks. Yea I would recommend looking into the README on this repo here - https://github.com/googleapis/release-please
Helped me get familiar with it. I used Semantic Release previously, but once I got familiar with this workflow, I switched all of my Salesforce plugins to use this Release Please workflow.


Different results for the same request on mac OS and Linux

As the question I directly use the code in the example (async/await way) to make a network request, and get the data normally on liunx, but when running on macOS the response body is empty, status: 400 Bad Request, may I ask how to solve this problem?

Can you provide some more details? Do you have any example code we might be able to see, or even better run?


Form inline

Is it possible to set the input fields next to each other (inline)?
It's a waste of space to put short inputs one under the other
I found that I can use setWidth (not documented?), but what about form-group to set two inputs in one row?

model-form-tab
如果表单元素太多,会导致form页面太长, 这种情况下可以使用tab来分隔form:

Tab is not a solution for me.
Sometimes I prefer this arrangement of fields: (it's more logical and handy)
item 1: [input_width]   [input_length]   [input_height]
item 2: [input_width]   [input_length]   [input_height]
item 3: [input_width]   [input_length]   [input_height]

Instead of such:
item1:
width:  [input_width]
length: [input_length]
height: [input_height]

item2:
width:  [input_width]
length: [input_length]
height: [input_height]

item3:
width:  [input_width]
length: [input_length]
height: [input_height]

I know that inputs one under another is OK for mobile devices. But my web apps are used 95% on PC / 5% on mobiles. So, it's big waste of screen space with wide HD screens.

I would like to see that, in the same way the content pages are created. Here is an example:
$form->row(function ($row) {
    $row->column(4, function($column()){
        $column->text('first_name');
        $column->text('last_name');
        // etc...
    });
    $row->column(8, function($column()){
        $column->image('avatar');
        $column->textarea('notes');
        // etc...
    });
});

@qcol One thing you could do is either:

Create a custom field so that you can arrange the fields the best you can
Override the view vendor/encore/laravel-admin/views/form.blade.php and use either the View Composer or override Encore\Admin\Form\Builder::render

I have such a requirement, but with nested forms (hasMany http://z-song.github.io/laravel-admin/#/en/model-form-fields?id=hasmany)

I think for my specific case, I ended up creating a custom form field

By the way, my comment above with code was only an example of how it could be implement.

Hi, I'm just testing. This is working for me
 $form->row(function ($row) use ($id, $form)
            {
                $row->width(2)->text('fiscal_id', 'Id Fiscal')->rules('required|unique:empl_master,fiscal_id,'.$id);
                $row->width(4)->text('nombre', 'Nombre')->rules('required');
                $row->width(2)->date('fecha_nacimiento', 'F. de Nac.')->format('DD/MM/YYYY')->rules('required');

            },  $form);

@sistemasjg  But this solution makes the form full width and already added columns does not work as well :(

use $form->hasMany( ... )->mode('table');

I solved this in following steps.

Created Custom Form class which extends the main Form class.
New Form class holds child form objects which gets saved during main form object is saved. Only draw back is Each child form class will run individual insert and update query.
Created custom field which cha load dynamic views and change layouts on the views accordingly.

`class Form extends AdminForm
{
public $childForms = [];
public function registerForm($form)
{
    $this->childForms[] = $form;
}

public function partial($callback)
{
    if (is_callable($callback)) {
        $form = new AdminForm($this->model());
        call_user_func($callback, $form);
        $this->childForms[] = $form;
        //dd($form->fields()->values());

        return $form->fields();
    }
    return null;
}

public function store()
{

    foreach ($this->childForms as $form) {
        $form->store();
    }
    return parent::store();
}

public function edit($id): self
{
    foreach ($this->childForms as $form) {
        $form->edit($id);
    }

    return parent::edit($id);
    //return $this;
}

public function update($id, $data = null)
{
    foreach ($this->childForms as $form) {
        $form->update($id, $data);
    }

    return parent::update($id, $data);
}

}`
And here is the Custom field class
`class Custom extends Field
{
protected $view = 'core::fields.';
protected $gridClass = ['col-md-2'];
protected $fields = [];
protected $partial = 'inline';
public function __construct($label, $fields)
{
    $this->label = $label;
    $this->fields = $fields[0];
}

public function plain()
{
    $this->plain = true;
    return $this;
}

public function addScript()
{
    return $this;
}

public function gridClass($gridClass)
{
    $this->gridClass = $gridClass;
    return $this;
}

public function useView($partial){
    $this->partial = $partial;
    return $this;
}

public function render()
{
    $this->view = $this->view . $this->partial;
    $this->addScript();
    $this->addVariables([
        'inputs' => $this->fields,
        'gridClass' => $this->gridClass
    ]);

    return parent::render();
}

}`
This is what i used to render the attached form
$form->custom('Vehicle', $form->partial(function ($f) {             $f->setWidth(12, 1);             $f->text('vehicle_no', 'Vehicle No')->placeholder('Plate Number');             $f->text('vehicle_lot', 'Lot')->placeholder("Lot Number");         }))->gridClass(['col-md-3', 'col-md-2']);

Now i need to figure out how to  append child form fields to parent fields during store and update so everything works in single query each time.


feat: Budget Duration

What kind of change does this PR introduce? (Bug fix, feature, docs update, ...)
A feature called Budget Duration

What is the current behavior? (You can also link to an open issue here)

What is the new behavior (if this is a feature change)?
Parts have a new optional property called budgetDuration.
In a Segment that has any Part with budgetDuration set, an Editorial Marker will be displayed on the segment timeline, as a dashed vertical line, indicating the budget duration of the entire Segment (sum of budgetDurations of its Parts).
In said Segment, the SegmentDuration component will display the segment's budget duration, and count down from it when the segment becomes live. The duration will go negative when the segment is playing longer than its budget.
If a segment with budget duration is on air, Part Counters on the next Segments are based on budget duration of the current segment, instead of expected durations of the parts that are left.

Other information:

Status

[ ] Code documentation for the relevant parts in the code have been added/updated by the PR author
[x] The functionality has been tested by the PR author
[ ] The functionality has been tested by NRK

Codecov Report

Merging #556 (40d9022) into release37 (654f36a) will increase coverage by 15.04%.
The diff coverage is n/a.

:exclamation: Current head 40d9022 differs from pull request most recent head 5f0db5a. Consider uploading reports for the commit 5f0db5a to get more accurate results

@@              Coverage Diff               @@
##           release37     #556       +/-   ##
==============================================
+ Coverage      67.29%   82.34%   +15.04%
==============================================
  Files            259       12      -247
  Lines          17779     1008    -16771
  Branches        4026      213     -3813
==============================================
- Hits           11965      830    -11135
+ Misses          5775      177     -5598
+ Partials          39        1       -38

Impacted Files
Coverage Δ

meteor/server/api/mediaManager.ts

meteor/server/lib.ts

meteor/lib/collections/ExpectedPackages.ts

meteor/lib/collections/Evaluations.ts

meteor/lib/collections/ExpectedMediaItems.ts

meteor/server/api/ingest/cleanup.ts

meteor/server/api/logger.ts

meteor/server/api/ExternalMessageQueue.ts

...eteor/server/api/playout/lookahead/findForLayer.ts

meteor/server/api/ingest/mosDevice/ingest.ts

... and 232 more

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 654f36a...5f0db5a. Read the comment docs.

There should there be unit-tests added into meteor/lib/rundown/__tests__/rundownTiming.test.ts

It would be good if another unit test be added into meteor/lib/rundown/__tests__/rundownTiming.test.ts, to support this functionality.

I added a test case. Note: this feature currently affects only the partCountdown. It does not affect remainingPlaylistDuration, totalPlaylistDuration, etc. but it's subject to change in future PRs

@ianshade Can you look into the PR review? I guess you would like this merged into Release 38.

We found an issue causing this to break the fit-to-viewport zoom feature. We're still working on a fix


Cannot bootstrap more than 5 clickers

Trying to bootstrap to a local Awa server on a Ci40 maxes out at 5 clickers. The data seems to be flowing through, however the server fails to respond properly to any bootstrap requests. After disabling the 5 clickers and enabling a 6th one it still wouldn't bootstrap.
Logs & dump attached
awa_logs.tar.gz

I suspect this might be related to https://github.com/FlowM2M/AwaLWM2M/blob/master/core/src/common/network_abstraction_linux.c#L85
Will have to understand this a bit deeper to determine the complete solution, but it's probably worth increasing this value in your application.

That's done the trick, I've managed to go all the way up to 11.

Have ... a good time ... all the time.


refactor(updater): Use filesystem util to fix flakey test

What does this PR do?

Fix flakey test introduced in #23289 that introduced a filesystem size race condition (checking the FS size when concurrent tests are using the same FS)
Uses existing util for the filesystem size

Motivation
Less flakey tests
Easier tests
RC-1637
Additional Notes
N/A
Possible Drawbacks / Trade-offs
N/A
Describe how to test/QA your changes
Tests should pass and not be flakey

/merge

/merge -c


title only accepts text as value and headerTitle doesn't apply formatting

Current Behavior
Internationalized applications tend to use react-intl.
react-intl allows you to use <FormattedMessage id="ui.wall"/> to access translation texts irrespective of context or props, and is therefore the goto choice for applying translations, especially in static contexts.
while this
const drawerRoutez = {
    Wall: {
        path: 'account/wall',
        getScreen: () => require('screens/WallScreen').default,
        navigationOptions: {
            title: <FormattedMessage id="ui.wall" />,
        },
    },

seems to work with React-Navigation at first glance, when you navigate an error occurs:

Alternatively, you can use headerTitle to be able to use React Elements. However, in this case, no formatting is applied, requiring you to replicate formatting styles which is part of the point we are using react-navigation.
Expected Behavior
headerTitle should apply the formatting that title applies. Users can always override this if they need to.
Ideally, title should not distinguish between element or text and simply act according to whatever is passed in.
Your Environment

software
version

react-navigation
1.0.0-beta.13

react-native
0.49.4

node

npm or yarn

The HeaderTitle component is exported by react-navigation. You should be able to use it directly to get the same formatting.


Artisan Consume Command

Thank you for creating this, until now the Laravel ecosystem was lacking a solid Kafka package.
I was curious how the published config file was actually used within the library.
I see there is a Kafka Consume command that is not mentioned in the documentation.  The way it is written now, this command does not know how to handle the messages it is consuming.
How do we pass a message handler into this command?
Seems like we can add a config item for handler and then update the command in this library to read from this map and call withHandler.
<?php

'handler' => \My\Namespace\MyNewHandler::class

Look forward to hearing your thoughts, and happy to submit a PR.

Hi @nickpoulos

I was curious how the published config file was actually used within the library.

It's used to define default configurations for kafka consumers/producers.

I see there is a Kafka Consume command that is not mentioned in the documentation. The way it is written now, this command does not know how to handle the messages it is consuming.
How do we pass a message handler into this command?

You have a good point here. The way it's written now, it's impossible to pass the message handler to the artisan consumer. I think we can have a default handler within config/kafka.php but also allow to pass the class via command options, which would allow using the built-in command via supervisor specifying a different handler for each message type.
Feel free to submit a PR if you want to, or i'll work on that after work.
Thanks!

Hi @mateusjunges thanks for the quick reply. I started creating the PR, but had some questions about the --consumer option in the command.  How was this designed to be used originally? It seems if we can pass in a Consumer class, the handler could be set there first.
What is the purpose of the consumer property within the Config class?

@nickpoulos actually, the consumer option was created to be the message handler, and this consumer must extend the Junges\Kafka\Contracts\Consumer class. Within ConsumerBuilder.php, the config class receives a CallableConsumer instance for the consumer option, which is created using the handler passed and the middlewares, if any. For the KafkaConsumerCommand, it isn't working as expected. I'm pretty sure i forgot this class completely over the last updates i made   to this library. Also, the command option should be called handler, not consumer, since the consumer is created using the message handler. It's not clear and one point in it's fabor is that even i got confused about it. So, it's not impossible to pass a message handler to the command, but the command itself isn't working and needs some fixes. The Consumer class now users two parameters: the config and the message deserializer, but the command only pass the configuration. I think it would be nice to allow the user to choose which deserializer to be used while consuming messages using this command (using command arguments/options). Sorry about the answer i gave you in my previous comment, now looking at the code carefully i understand whats happening here.

Ok that all makes sense to me for the most part.
But there also seems to be some confusion around Options/Config?
It seems like we want to be able to pass in options via the CLI command, but then if those options are not provided we want to fall back to whatever is in config.  And you started making the Options class to handle this merging?  Is that correct?  It is hard to tell because it appears unfinished, but I can continue down this route and fix the discrepancies if you agree.
Another idea I had was, rather than provide more and more options via the CLI, what if we setup our /config/kafka.php more similar to how Laravel's mysql options are setup?  Ex: you would create a named connection the config file, and then for the CLI command, we pass in a connection param.
Let me know what you think, I can continue down either path here.

It seems like we want to be able to pass in options via the CLI command, but then if those options are not provided we want to fall back to whatever is in config. And you started making the Options class to handle this merging? Is that correct? It is hard to tell because it appears unfinished, but I can continue down this route and fix the discrepancies if you agree.

Yes, the Options class receives the options passed to the artisan command, and if it's not present, we should fall back to config defaults.

Another idea I had was, rather than provide more and more options via the CLI, what if we setup our /config/kafka.php more similar to how Laravel's mysql options are setup? Ex: you would create a named connection the config file, and then for the CLI command, we pass in a connection param.

I think the connection option is a really good idea, so we can create connections in kafka.php and it decrease the number of options we need to pass via cli.


Ninja needs to work-around Windows 10 process-destruction bug

On long-running Windows 10 systems (starting in Anniversary Update?) there is a bug that can cause process destruction to be both expensive and serialized. Processes spend a significant amount of time on this call stack:
|- ntoskrnl.exe!KiSystemServiceCopyEnd
|    ntoskrnl.exe!NtTerminateProcess
|    ntoskrnl.exe!PspExitThread
|    |- ntoskrnl.exe!ExCallCallBack
|    |    win32kbase.sys!W32CalloutDispatch
|    |    win32kfull.sys!W32pProcessCallout
|    |    |- win32kbase.sys!GdiProcessCallout
|    |    |    win32kbase.sys!NtGdiCloseProcess
and they do it while holding a global system lock. This means that process shutdown is serialized, which on a 48-thread machine effectively means it runs 48x slower than it should. And, it seems to take 5-8 ms, thus restricting process destruction rates to 125-200 per second - low enough that it measurably affects Chromium build times when doing distributed builds (a full build of Chrome uses about 60,000 processes which implies a minimum build time of 5-8 minutes).
This global lock is also used to protect message queues so the Windows UI repeatedly locks up when this situation is hit.
The effects of this bug are greatly reduced if processes are created with the DETACHED_PROCESS flag, and this doesn't seem to have any problematic side-effects. I will create a PR.

We never found a good way to work around this bug and Microsoft has started shipping fixes (so far for RS1 and RS2) so this is no longer a useful issue. Closing.

BTW, more details about the underlying issue were put in this blog post:
https://randomascii.wordpress.com/2017/07/09/24-core-cpu-and-i-cant-move-my-mouse/


Update LICENSE

This makes it clear that the License is indeed MIT.
After merging this, can you please publish a new version to npm ?
Thanks in advance !

The existing LICENSE file contains the MIT license, and the npm metadata already specifies that the license is MIT.  I hope the intent is pretty clear, and it matches the GitHub guidelines).  I'm reluctant to make the suggested change because the same pattern is used in dozens of repositories of mine and Joyent's and we have tools that verify the expected LICENSE file format.

Which tool are you using to verify the license ? The current released project is not being recognized automatically by https://github.com/iandotkelly/nlf , a tool to find out which licenses your dependencies have.
This commit fixes this.
I also personally think that it is good for projects to be explicit about the license they use, it is faster to  see : this is "MIT License" than to read the license text, and compare it withlicense texts found on google.
The license text given by github when you choose MIT is :
The MIT License (MIT)

Copyright (c) 2016 David Pacheco

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

 IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

It contains the text "The MIT License"

Continuing this discussion under https://github.com/davepacheco/node-extsprintf/pull/10.


How to use with actix

does anyone have an example of running both actix and rumqtt?

No, but I used both.
In theory this should be a Actor implementation with a rumqtt::MqttClient that implements Handler<(String, QoS, Bytes or Vec<u8>)> for publishes.
The notifications need to be received in a dedicated thread:
crossbeam::Receiver doesn't impl Stream, so you cannot implement StreamHandler<..> for you MQTT client actor.  Fire up a threads the iterates over the notifications (this may block) and do_send them the to the your actor.
If you want to got for the StreamHandler you need to implement a Stream that calls try_recv on the notification handle in poll. No sure what additional things need to be done to notify the correct tasks.
There is a project actix-broker that might help to distribute the Notifications in your actor system - I never used it.

I've been working on a proof of concept that uses actix/rumqtt. The actor implementation is below, as the TODO notes show, it's pretty rough, no real error handling/graceful exit yet. But provided the mailbox/notification channel sizes are large enough it seems to be able to handle the deluge of messages from a public MQTT server.
use actix::prelude::*;
use futures::future;
use std::sync::atomic::{AtomicUsize, Ordering};
use std::sync::Arc;

/// MQTT errors.
#[derive(Debug, Fail)]
pub enum Error {
    #[fail(display = "MqttError::FromUtf8 {}", _0)]
    FromUtf8(std::string::FromUtf8Error),
}

/// MQTT user, password configuration.
#[derive(Debug, Clone)]
pub struct UserPasswordConfiguration {
    pub user: String,
    pub password: String,
}

/// MQTT topic configuration.
#[derive(Debug, Clone)]
pub struct TopicConfiguration {
    pub topic: String,
    pub qos: u8,
}

/// MQTT configuration.
#[derive(Debug, Clone)]
pub struct Configuration {
    pub mailbox_capacity: usize,
    pub client_id: String,
    pub host: String,
    pub port: u16,
    pub user_password: Option<UserPasswordConfiguration>,
    pub topics: Vec<TopicConfiguration>,
    pub reconnnect_s: u64,
    pub keep_alive_s: u16,
    pub clean_session: bool,
    pub notification_channel_capacity: usize,
}

impl Default for Configuration {
    fn default() -> Self {
        Configuration {
            mailbox_capacity: 512,
            client_id: "a7g87sdg7dsg7sd9g70s".to_owned(),
            host: "test.mosquitto.org".to_owned(),
            port: 1883,
            user_password: None,
            topics: vec![TopicConfiguration {
                topic: "#".to_owned(),
                qos: 1,
            }],
            reconnnect_s: 5,
            keep_alive_s: 10,
            clean_session: false,
            notification_channel_capacity: 512,
        }
    }
}

/// MQTT actor.
pub struct Actor {
    /// MQTT configuration.
    pub configuration: Arc<Configuration>,
    /// MQTT client handle.
    /// Created with None and assigned Some in actor `started` function.
    pub mqtt_client: Option<rumqtt::MqttClient>,
    /// MQTT notifications thread handle.
    /// Created with None and assigned Some in actor `started` function.
    pub thread_handle: Option<std::thread::JoinHandle<()>>,
    /// Publish message counter.
    pub publish_counter: AtomicUsize,
}

impl Actor {
    /// Start instance of actor with configuration.
    pub fn start(configuration: &Configuration) -> Addr<Actor> {
        let configuration = Arc::new(configuration.clone());
        Supervisor::start(|_| Actor {
            configuration,
            mqtt_client: None,
            thread_handle: None,
            publish_counter: AtomicUsize::new(0),
        })
    }

    /// MQTT client options from configuration.
    pub fn mqtt_client_options(&self) -> rumqtt::MqttOptions {
        // TODO: Check client disconnection/reconnection/error handling.
        let reconnection_options =
            rumqtt::ReconnectOptions::AfterFirstSuccess(self.configuration.reconnnect_s);
        let options = rumqtt::MqttOptions::new(
            self.configuration.client_id.to_owned(),
            self.configuration.host.to_owned(),
            self.configuration.port,
        )
        .set_keep_alive(self.configuration.keep_alive_s)
        .set_clean_session(self.configuration.clean_session)
        .set_reconnect_opts(reconnection_options)
        .set_notification_channel_capacity(self.configuration.notification_channel_capacity);

        match &self.configuration.user_password {
            Some(user_password) => {
                options.set_security_opts(rumqtt::SecurityOptions::UsernamePassword(
                    user_password.user.to_owned(),
                    user_password.password.to_owned(),
                ))
            }
            None => options,
        }
    }

    /// Send publish message to actor.
    pub fn try_send_publish(addr: &Addr<Actor>, publish: Publish) -> () {
        match addr.try_send(publish) {
            Ok(_) => {}
            Err(err) => {
                // TODO: How to handle send errors.
                error!("{}", err);
            }
        };
    }

    /// Spawn thread to iterate over notifications channel.
    pub fn thread_spawn_notifications(
        &self,
        notifications: rumqtt::Receiver<rumqtt::Notification>,
        addr: Addr<Actor>,
    ) -> std::thread::JoinHandle<()> {
        // TODO: How to handle process exit while messages being handled (ack later?).
        std::thread::spawn(move || {
            for notification in notifications {
                match notification {
                    rumqtt::Notification::Publish(publish) => {
                        // Convert to publish message and send to actor.
                        match Publish::from_mqtt311_publish(publish) {
                            Ok(publish) => Actor::try_send_publish(&addr, publish),
                            // Messages that are not JSON or valid UTF8 are dropped.
                            Err(_err) => (),
                        };
                    }
                    _ => {
                        // TODO: Handle other notification types.
                        info!("notification: {:?}", notification);
                    }
                };
            }
        })
    }
}

impl actix::Supervised for Actor {
    // TODO: Implement restarting.
}

impl actix::Actor for Actor {
    type Context = Context<Self>;

    fn started(&mut self, ctx: &mut Context<Self>) {
        info!("MqttActor::started");

        // Increase mailbox capacity for increased message throughput.
        ctx.set_mailbox_capacity(self.configuration.mailbox_capacity);

        // MQTT client options.
        let options = self.mqtt_client_options();

        // Start MQTT client and get notifications receiver.
        let (mut mqtt_client, notifications) = rumqtt::MqttClient::start(options).unwrap();

        // Spawn thread to iterate over notifications.
        let address = ctx.address();
        let thread_handle = self.thread_spawn_notifications(notifications, address);

        // Subscribe to topic(s).
        for (_i, x) in self.configuration.topics.iter().enumerate() {
            mqtt_client
                .subscribe(x.topic.to_owned(), rumqtt::QoS::from_u8(x.qos).unwrap())
                .unwrap()
        }

        // Set client and thread handle in actor state to prevent drop.
        self.mqtt_client = Some(mqtt_client);
        self.thread_handle = Some(thread_handle);
    }

    // TODO: Implement signals handling for graceful actor stop.
    fn stopping(&mut self, _ctx: &mut Context<Self>) -> Running {
        info!("MqttActor::stopping");
        let client = self.mqtt_client.as_mut().unwrap();
        client.pause().unwrap();
        Running::Stop
    }

    fn stopped(&mut self, _ctx: &mut Context<Self>) {
        info!("MqttActor::stopped");
    }
}

/// MQTT publish payload type.
#[derive(Debug, Serialize, Deserialize)]
pub enum PublishPayload {
    Json(serde_json::Value),
    Text(String),
}

/// MQTT publish type.
#[derive(Debug, Serialize, Deserialize)]
pub struct Publish {
    /// Message topic.
    pub topic: String,
    /// Message payload, JSON or text.
    pub payload: PublishPayload,
    /// Message quality of service.
    pub qos: u8,
    /// Message duplicate flag.
    pub duplicate: bool,
    /// Message retain flag.
    pub retain: bool,
    /// Message packet identifier.
    pub pkid: Option<u16>,
}

impl Publish {
    /// Try to convert `mqtt311::Publish` to `Publish`.
    pub fn from_mqtt311_publish(publish: mqtt311::Publish) -> Result<Publish, Error> {
        // First try to deserialise to JSON.
        let payload = match serde_json::from_slice(publish.payload.as_ref()) {
            Ok(value) => Ok(PublishPayload::Json(value)),
            // If deserialisation fails, try to parse UTF8 string.
            Err(_err) => match String::from_utf8(publish.payload.to_vec()) {
                Ok(value) => Ok(PublishPayload::Text(value)),
                Err(err) => Err(Error::FromUtf8(err)),
            },
        }?;
        let pkid = match publish.pkid {
            Some(pkid) => Some(pkid.0),
            None => None,
        };

        Ok(Publish {
            topic: publish.topic_name,
            payload,
            qos: publish.qos.to_u8(),
            duplicate: publish.dup,
            retain: publish.retain,
            pkid,
        })
    }
}

impl actix::Message for Publish {
    type Result = Result<(), Error>;
}

impl actix::Handler<Publish> for Actor {
    type Result = ResponseActFuture<Self, (), Error>;

    fn handle(&mut self, _msg: Publish, _ctx: &mut Context<Self>) -> Self::Result {
        // TODO: Better metrics collection.
        // info!("publish: {:?}", msg);
        let counter = self.publish_counter.fetch_add(1, Ordering::Relaxed);
        if counter % 1000 == 0 {
            info!("publish_counter: {}", counter);
        }

        // TODO: Implement parsing/messages to other actors.
        // TODO: How to handle errors in handler.
        let placeholder = future::ok(());
        let wrapped = actix::fut::wrap_future(placeholder);
        Box::new(wrapped)
    }
}


Upgrade to Ember2-12

This project uses semver, please check the scope of this pr:

[ ] #none# - documentation fixes and/or test additions
[X] #patch# - backwards-compatible bug fix
[ ] #minor# - adding functionality in a backwards-compatible manner
[ ] #major# - incompatible API change

CHANGELOG

Updated to Ember CLI 2.12.3 and Ember 2.12.x
Updated ember-try config matrix with Ember LTS 2.8
Updated travis.yml build matrix to run Ember LTS 2.8 and default (Ember LTS 2.12)

NOTE: the conversation of .eslintrc files to .eslintrc.js has not been completed in this upgrade due to issues with how the lint-javascript-spec.js node unit tests are coupled to the .eslintrc file on disk. This will be revisited and addressed in this issue: https://github.com/ciena-blueplanet/ember-test-utils/issues/86

👍


[ASCII-1400] Update Go experimental libraries in all modules

What does this PR do?

Update all modules from the Go experimental repo.
Motivation

Use up-to-date dependencies.
Often the root module of the repo is kept updated but individual modules are still indicating very old versions of some dependencies.
New versions can include bug and security fixes so we should use them if it doesn't break anything.
Additional Notes

Used the task introduced by https://github.com/DataDog/datadog-agent/pull/24346:
inv modules.for-each "go get golang.org/x/arch golang.org/x/crypto golang.org/x/lint golang.org/x/mod golang.org/x/net golang.org/x/sync golang.org/x/sys golang.org/x/term golang.org/x/text golang.org/x/time golang.org/x/xerrors"
inv tidy-all

I did not update golang.org/x/tools because it makes some linter fail, golang.org/x/exp because it depends on golang.org/x/tools.
Possible Drawbacks / Trade-offs

Describe how to test/QA your changes

@julien-lebot done


Express.js-like middleware

This adds support for express.js-like middleware. With this patch, multiple functions can be called for any given endpoint, which allows you add functionality in a compositional manner.
You can specify global middleware that is called for all requests:
web.Middleware(gzip)
web.Middleware(basicAuth)

// This endpoint will now call the following functions in order: gzip,
// basicAuth, sayHello
web.Get("/", sayHello)

And you can specify middleware on a per-endpoint basis:
// Functionally the same as the above, although other endpoints specified
// will not have gzip and basicAuth called now.
web.Get("/", gzip, basicAuth, sayHello)

Not every function in the chain has to be called. A function can "bail" the request and circumvent the execution of further middleware by calling ctx.Finish(). e.g. if basicAuth in the above examples set some headers and called ctx.Finish() because the authentication failed, sayHello will not be called.
Unit tests have been added as well, although I'm not confident that this patch is bug-free. A second pair of eyes would help greatly since I'm not too familiar with this codebase, especially the altered logic in routeHandler.

haha, just an example to construct web framework


Code blocks shown as a block within a block

I've used a number of markdown techniques to create a code block but it always ends up with a block within a block
I've tried using single back ticks, triple backticks and triple tildes but all have the same result.
You can see the effect here https://networkwookie.github.io

Duplicate


Prepare Scala IDE to run with scala 2.12.1

retest this please

https://jenkins.scala-ide.org:8496/jenkins/job/ghprb-scala-ide-multi-conf/eclipse_platform=eclipse-neon/733/

retest this please

retest this please

A new run has been triggered now: https://jenkins.scala-ide.org:8496/jenkins/job/ghprb-scala-ide-multi-conf/eclipse_platform=eclipse-neon/737/

retest this please


Issue/#216 new mcity implementation

With the gained experience gained in https://github.com/ekumenlabs/terminus/pull/218 we moved to a new approach. I have created a city from a picture of MCity in a CAD program and that was translated to a handwritten Monolane. It respects the vertical scale to it approximates to the length.
Just for future reference:

Roads starting with 'a' are horizontal.
Roads starting with 'b' are vertical.
Roads starting with 'c' are diagonals.
Roads starting with 'd' are roundabouts or long pieces of an arc.
Connections are named like: 'starting_point-ending_point'.

Some pictures of the road are shown below:

closes #216

Thanks a lot for all the work on this @agalbachicar ! Couple of minor fixes (btw, for the overlapping cases, it should be easier to just make the segment shorter instead of making the arc fit):

And a couple of extensions so we don't leave dead-end streets:

Once we have that I think it should be good for a first pass with TRI.

All comments were addressed. Here are some pictures of the new connections:

@basicNew ready for a new review.

Ok, I think it is time to merge. Go and open a champagne bottle @agalbachicar :fireworks: :boom: :champagne:

This is a great day :)


box constraint in scipy optimize cobyla

I don't really understand why box constraints are not allowed in cobyla, because every box constraint is an inequality constraint , x >= lb  is x - lb >= 0 and x <= lb is ub - x >= 0.
This should be easily accomplished using something along the lines of
% boxBounds is an numpy.ndarray of shape (len(x0),2)
% x0 is the parameter
cons = list()
for i in range(0,len(x0)):
cons += ({'type': 'ineq', 'fun': (lambda x,i : x[i]-boxBounds[i,0]), 'args': (i,)},)
cons += ({'type': 'ineq', 'fun': (lambda x,i : boxBounds[i,1]-x[i]), 'args': (i,)},)
or with two argument where the second is the value of the bound.

+1 It's really weird to get an out of bounds result when using everything just as documented:
In [34]: scipy.optimize.minimize(func, 0, method='COBYLA', bounds=[(0, 2 * numpy.pi)])
/Users/samuelainsworth/research/res-venv/lib/python2.7/site-packages/scipy/optimize/_minimize.py:400: RuntimeWarning: Method COBYLA cannot handle bounds.
  RuntimeWarning)
Out[34]:
     fun: -0.99999999543552442
   maxcv: 0.0
 message: 'Optimization terminated successfully.'
    nfev: 24
  status: 1
 success: True
       x: array(-1.57070078125)

The warning is great, but this should at the very least be included in the documentation.


Paperspace Runtime Storage

Hi friends, I'm using Paperspace and it worked great a couple times, but then started giving this error: "RuntimeError: storage has wrong byte size: expected %ld got %ld-690019297204991928128"
Anyone seen this before?

That would be an issue with the paperspace VM, try starting another machine


Fix the mkdocstrings "source" path

The "source code in" line includes the full path rather than the actual package-level data. This should be fixed.
https://quantum-accelerators.github.io/quacc/reference/quacc/utils/defects.html#quacc.utils.defects.make_defects_from_bulk

Linking to:

https://github.com/mkdocstrings/mkdocstrings/discussions/622


Feat/show important directive

Adding support for important modifier on v-show directive

[ ] Bugfix
[x] Feature
[ ] Code style update
[ ] Refactor
[ ] Build-related changes
[ ] Other, please describe:

Does this PR introduce a breaking change?

[ ] Yes
[x] No

The PR fulfills these requirements:

[ ] It's submitted to the main branch for v2.x (or to a previous version branch)
[ ] When resolving a specific issue, it's referenced in the PR's title (e.g. fix #xxx[,#xxx], where "xxx" is the issue number)
[x] All tests are passing: https://github.com/vuejs/vue/blob/dev/.github/CONTRIBUTING.md#development-setup
[x] New/updated tests are included

The explanation to include this feature is when you have a component (from an external library or own component) and this component has a display flex (or other display property on CSS), the v-show directive doesn't work showing the content you are trying to hide/show. You can make a workaround, like switching the class with the condition used into the directive, but it could be easier for developers only add this modifier

Did you see this idea was already rejected at https://github.com/vuejs/vue/issues/3761 ?

@posva Yes, I read that issue, but I think this is relevant, because I have met with this problem many times, and other devs faced this too.
I think it's not big deal to implement it, another library did it

@posva Also, if we implement a custom directive to display none important, this new one doesn't trigger the transition classes (if it's wrapped by a transition component), keep in mind

@posva any news from this PR?


api documentation for manager proto

Signed-off-by: kagarmoe<EMAIL_ADDRESS>Signed-off-by: Victoria Jeffrey<EMAIL_ADDRESS>:nut_and_bolt: Description: What code changed, and why?
Add documentation for the node manager proto (for api docs)
:chains: Related Resources
https://github.com/chef/automate/issues/2019
:+1: Definition of Done
manager proto is well documented
:athletic_shoe: How to Build and Test the Change
pull the branch down
run make serve from components/automate-chef-io
visit localhost:1313/docs/api
look at the docs!

wonder if it might make sense to mention in the intro to node managers that it corresponds to node integrations in the ui?

i tried...but none of my words sounded well. i'll follow up with some description text in a diff pr


Command for specifically installing dev-dependencies

Hard build-time library dependencies like json can be specified as [dependencies], to be installed when cargo build executes.
Hard built-time dependencies like thrift can be specified as [build-dependencies], to be installed when cargo build executes.
Test-time dependencies like quickcheck can be specified as [dev-dependencies], to be installed when cargo test executes.

But how about soft build-time dependencies like cargo-script supposed to be managed with Cargo.toml, that are not imported by any Rust code but still required for shell commands?
Could we get a cargo subcommand or flag to forcibly install all [dev-dependencies], regardless of whether the dependency is referenced by an extern crate or not?
As a workaround, I am currently managing these kinds of development dependencies by manually executing cargo install <dependency>, but I would prefer to manage these with the same Cargo.toml file as everything else.

Has there been any kind of feature added for this since this issue was opened?

This is a little confusing to read as its using terms from other ecosystems (you don't "install" dependencies).  I'm assuming what is wanted is the ability to make bin dependencies available.  In light of that, it appears to be a duplicate of issues like #5120 and #2267.   Closing in favor of those.  If there is a reason we should re-evaluate this, let us know!


Text reader doesn't throw upon encountering the annotation '$0'

Reader.value() throws on $0, Reader.fieldName() throws on {$0: 1}, but Reader.annotations() doesn't throw on $0::1.  Until SID 0 is supported, I suspect it should.
readValue('$0');
readValue('{$0: 1}');
readValue('$0::1');

function readValue(s) {
    try {
        let r = ion.makeReader(s);
        r.next();
        if (r.type() === ion.IonTypes.STRUCT) {
            r.stepIn();
            r.next();
        }
        r.value();        // throws on $0
        r.fieldName();    // throws on {$0: 1}
        r.annotations();  // doesn't throw on $0::1
    } catch (e) {
        console.log('Error on ' + s + ': ' + e.message);
    }
}

produces:
Error on $0: Unresolvable symbol ID, symboltokens unsupported.
Error on {$0:1}: Unresolveable symbol ID, symboltokens unsupported.

Also note that "Unresolveable" is incorrect spelling.

fixed


Merge nightly to release

Fully merge master into release. This should be heavily reviewed and tested before merging

PlayerCommandFeedback setting should be renamed to CommandFeedback to avoid confusion with other settings like PlayerPrefix etc which only apply to ! prefixed commands
:unice was not working for me
Audio player had some bugs

(Git/L8X) Remove math.randomseed() due to Luau optimizations #624
(Git/Expertcoderz) Add :massbring #648
(Git/sea4h) Add :forceregion #647
(Git/L8X) Minor anti-exploit improvements #619/#625/#627
(Git/coasterteam) Security fixes related to DataStore #656
(Git/DaEnder) Add total ban count to :bans #662
(Git/pbstFusion) Minor grammar fix #676
(Git/Expertcoderz) Revamp :tools command with new functionality #685
(Git/Honzzzox) Fix :remotelogs description #688
(Git/P3tray) Minor fix for cross-server commands #690
(Git/joritochip) Date and time string format improvements #693
(Git/joritochip) Various bug fixes and improvements


[chore] Miscellaneous Nits Before Release

Changes

[x] Add CounterStorage.GetTransactional

Pull Request Test Coverage Report for Build 12857

5 of 9 (55.56%)  changed or added relevant lines in 2 files are covered.
53 unchanged lines in 1 file lost coverage.
Overall coverage decreased (-0.03%) to 78.149%

Changes Missing Coverage
Covered Lines
Changed/Added Lines
%

storage/modules/counter_storage.go
0
4
0.0%

Files with Coverage Reduction
New Missed Lines
%

storage/modules/balance_storage.go
53
79.18%

Totals

Change from base Build 12840:
-0.03%

Covered Lines:
7897

Relevant Lines:
10105

💛  - Coveralls


Enhance the system to be able to run test differing in NullHandling more natually

Motivation
Right now the CI runs the tests twice; differing only in the setting of this flag.
I have faced it several times that I was testing with value X and with Y it failed; regardless that I've run the test from the commandline as I was not setting the flag...
Description
I think any option would be interesting which could possibly run both versions of the test during the same maven execution.

I think there are multiple options like:

enhancing the testcases themselves with a rule or something to run them with useDefault and without
enhance the build system to run these tests twice with different useDefault settings

there might be a caveat here if the TEST-*xml gets overwritten by the second run

there might be other options these are just my ideas