Suggest options to move the window position more intuitively

I've been using i3wm on Linux for a long time and have been using yabai a lot since I switched to Mac. (Thank you so much for making the app.)
While using yabai, I felt that the way the windows move was different from the i3.
To move a window, i3 uses the 'move' command and yabai frequently uses the 'swap' and 'warp' commands.
Currently, the window warp and swap commands require another window to exist in the moving position in order to move in that direction.
Here's an example
Current behaviour: No window layout changes
+--------------+                  +--------------+
|      a       |                  |      a       |
+--------------+   b warp east    +--------------+
|      b       |       -->        |      b       |
+--------------+                  +--------------+
|      c       |                  |      c       |
+--------------+                  +--------------+

The desired behavior is:
+--------------+                  +---------+----+
|      a       |                  |    a    |    |
+--------------+   b move east    |         |    |
|      b       |       -->        +---------+  b |
+--------------+                  |    c    |    |
|      c       |                  |         |    |
+--------------+                  +----+----+----+

The same goes for below.
Current behaviour : No window layout changes
+--------------+                  +--------------+
|      a       |                  |      a       |
|              |   c warp east    |              |
+ ------+------+       -->        + ------+------+
|   b   |   c  |                  |   b   |   c  |
|       |      |                  |       |      |
+--------------+                  +--------------+

The desired behavior is:
+--------------+                  +---------+----+
|      a       |                  |    a    |    |
|              |   c move east    |         |    |
+ ------+------+       -->        |---------|  c |
|   b   |   c  |                  |    b    |    |
|       |      |                  |         |    |
+--------------+                  +---------+----+

Even with the current window swap and warp options, you can change from a left layout to a right layout form, but that's more work than expected.
This requires the right combination of commands like swap, warp, rotate, etc, and it's not that simple.
For users familiar with the layout of i3wm, intuitive Add the 'move' option for moving the window, or suggest the "yabai -m config layout i3" option.

I got close
#!/bin/bash

get_layout_type() {
  out=$(yabai -m query --spaces --window mouse)
  length=$(echo $out | jq length)
  if [ $length -ne 1 ]; then
    return -1
  fi
  echo $(echo $out | jq --raw-output ".[0].type")
}

yabai_move() {
  direction=$1
  layout=$(get_layout_type)
  echo $direction $layout
  if [ "$layout" = "stack" ]; then
    case $direction in
    north)
      yabai -m window --warp stack.prev;;
    south)
      yabai -m window --warp stack.next;;
    *)
      :;;
    esac
  elif [ "$layout" = "bsp" ]; then
    case $direction in
    north)
      yabai -m window --warp $direction || yabai -m space --rotate 270 && yabai -m space --balance x-axis;;
    south)
      yabai -m window --warp $direction || yabai -m space --rotate 90 && yabai -m space --balance x-axis;;
    east | west)
      yabai -m window --warp $direction || yabai -m window --toggle split && yabai -m space --balance y-axis;;
    *)
      :;;
    esac
  else
    return -1
  fi
}

What still doesn't work is:
+--------------+                  +---------+----+
|       a      |                  |    a    |    |
+ ------+------+   c move east    |---------|    |
|   b   |   c  |       -->        |    b    |  c |
+ ------+------+                  |---------|    |
|       d      |                  |    d    |    |
+--------------+                  +---------+----+

It's harder when you can't really access the internal tree mechanics. @koekeishiya are there any plans/interest in exposing lower-level functions for tree manipulation?

Is there a way to work around "Currently, the window warp and swap commands require another window to exist in the moving position in order to move in that direction."?

A subset of what the i3 ipc offers is probably plenty: https://i3ipc-python.readthedocs.io/en/latest/con.html#i3ipc.Con

additionally, if we're just given the lower level tree manipulation API, it doesn't need to be super intuitive, and it's a lot easier for the community to build/maintain wrappers around it that end up being more intuitive


Advocate for repeatOnLifecycle?

Hi @psteiger,
Jose Alcérreca has posted an article about Flows and LiveData, and at the end he describes the rationale behind repeatOnLifecycle, which is exactly the purpose of what we've done here.
repeatOnLifecycle is part of lifecycle-runtime-ktx 2.4.0-alpha01 (so still alpha for the moment). We could mention that in the readme, but it's your call.

@peterLaurence you are correct.
I will update the README and my medium article to note Google now offers an official solution to this use-case.
Thanks for noticing and reporting!


wit/bindgen: Add JSON tag to Record structs

Related to #239
HostLayout receives json:"-" and any other field receives the original wit name.
// DateTime represents the record<EMAIL_ADDRESS>//
// A time and date in seconds plus nanoseconds.
//
//	record datetime {
//		seconds: u64,
//		nanoseconds: u32,
//	}
type DateTime struct {
	_           cm.HostLayout `json:"-"`
	Seconds     uint64        `json:"seconds"`
	Nanoseconds uint32        `json:"nanoseconds"`
}

Don't forget to go generate ./tests/...

How do we want to think about zero-value structs? Do we want to serialize, or have omitzero or omitempty?

Ideally I'd like omitzero, however by adding it we complicate:

Tuples: encoded as lists. need to make sure we emit [ "field0", null, "field2"] and not ["field0","field2"]. Encoding it as dictionary would couple the json keys to cm.Tuple field names. I rather keep them as lists.
Enums/Variants: The zero value is valid. I feel this is by WIT design so the first value acts as a sentinel, but it is up to developers to actually use it that way.

feels like omitempty would be the least problematic, not raising the issues above.
For now I'm adding omitempty and we can revisit if needed after addressing Variant encoding.

Given that Go omits fields tagged with omitempty that are the zero value for the type, this may not be what we want.
Maybe we start without omitempty and then add it in certain cases as an optimization?

👍
removed omitempty.

Looks ready to merge! Can you add a note to CHANGELOG.md?


Overlapping pom dependency management entries can cause a wrong dependency scope in Gradle 4.5

Expected Behavior
I added dependency of "org.zalando:logbook-spring-boot-starter:1.5.3" into my module.
slf4j-simple and lombok is not resloved as dependencies of "logbook-spring-boot-starter" .
I seems to have no that dependency in the module

Current Behavior
In gradle 4.5, just resolved  as dependencies.
But in gradle 4.4, not resolved.

Context

Steps to Reproduce (for bugs)

Next gradle task shows change of dependencies between gradle 4.4 and 4.5.
gradle dependencies

Your Environment

Build scan URL: private repository. (try to reproduce other public repository)

We have a 4.5.1 release scheduled for Monday that will include a fix for this.
PR with fix (revert): #4244

We have a 4.5.1 release scheduled for Monday that will include a fix for this.

@jjohannes thanks to your quickly help. 👍


Unversioned Filter Values

As per https://github.com/zazuko/cube-creator/issues/658#issuecomment-814775836 we should use the schema:sameAs identifier of a dimension value to store as a filter to enable #76.

This is currently blocked because adding a lookup dimension for schema:sameAs on all filtered dimensions as in https://github.com/visualize-admin/visualization-tool/pull/75/commits/dbb23d1fc37a23e7fa29891183602bf9e7c83db7 will make the query return nothing when any of the dimensions don't have values with a sameAs counterpart – which is the case for:

dimensions with literal values
for managed dimensions (that are inherently unversioned)
cubes that were not generated by the Cube Creator (maybe)

To solve this:

Either dimensions need to be marked explicitly as having versioned values with sameAs
Somehow the query library could make lookup dimensions and their filter optional.

As proposed we add now schema:version per Dimension if not SharedDimension and not a Literal. See https://s.zazuko.com/AsXbi for an example.


publish images to github under a public image to avoid request throttling on docker hub

What is the feature request? What problem does it solve?
At the moment we have pipeline fail often because of docker hub request limits.
https://docs.docker.com/docker-hub/download-rate-limit/#:~:text=Docker Hub limits the number,pulls per 6 hour period.
Github has no limits on the amount of images you can pull for public images.
I have manually published some images to github to get the pipelines green.
I have also created this PR to use github in integration tests which should result in us never getting throttled anymore https://github.com/vmware/versatile-data-kit/pull/2097/files.
Suggested solution
When we are publishing images to docker hub we should also publish them to github.

Triaged. Closed as being already resolved.


uv lock insists on compiling source packages

I am trying to generate/refresh the uv.lock for a project depending on pyicu (native extension but no wheels published):
[project]
name = "pyicu-uv"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = [
  "pyicu==2.13.1"
]

uv lock fails with:

error: Failed to download and build `pyicu==2.13.1`
Caused by: Build backend failed to determine metadata through prepare_metadata_for_build_wheel with exit status: 1

ubuntu@9d6444fdbf5f:/pyicu/uv$ uv lock --no-build-isolation
Using CPython 3.12.6 interpreter at: /opt/containerbase/tools/python/3.12.6/bin/python
⠙ pyicu==2.13.1                                                                                error: Failed to download and build `pyicu==2.13.1`
  Caused by: Build backend failed to determine metadata through `prepare_metadata_for_build_wheel` with exit status: 1
--- stdout:
(running 'icu-config --version')
(running 'pkg-config --modversion icu-i18n')
--- stderr:
Package icu-i18n was not found in the pkg-config search path.
Perhaps you should add the directory containing `icu-i18n.pc'
to the PKG_CONFIG_PATH environment variable
No package 'icu-i18n' found
Traceback (most recent call last):
  File "<string>", line 89, in <module>
  File "<frozen os>", line 714, in __getitem__
KeyError: 'ICU_VERSION'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<string>", line 92, in <module>
  File "<string>", line 19, in check_output
  File "/opt/containerbase/tools/python/3.12.6/lib/python3.12/subprocess.py", line 466, in check_output
    return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/containerbase/tools/python/3.12.6/lib/python3.12/subprocess.py", line 548, in run
    with Popen(*popenargs, **kwargs) as process:
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/containerbase/tools/python/3.12.6/lib/python3.12/subprocess.py", line 1026, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/opt/containerbase/tools/python/3.12.6/lib/python3.12/subprocess.py", line 1955, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'icu-config'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<string>", line 96, in <module>
  File "<string>", line 19, in check_output
  File "/opt/containerbase/tools/python/3.12.6/lib/python3.12/subprocess.py", line 466, in check_output
    return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/containerbase/tools/python/3.12.6/lib/python3.12/subprocess.py", line 571, in run
    raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '('pkg-config', '--modversion', 'icu-i18n')' returned non-zero exit status 1.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<string>", line 14, in <module>
  File "/opt/containerbase/tools/python/3.12.6/lib/python3.12/site-packages/setuptools/build_meta.py", line 373, in prepare_metadata_for_build_wheel
    self.run_setup()
  File "/opt/containerbase/tools/python/3.12.6/lib/python3.12/site-packages/setuptools/build_meta.py", line 318, in run_setup
    exec(code, locals())
  File "<string>", line 99, in <module>
RuntimeError:
Please install pkg-config on your system or set the ICU_VERSION environment
variable to the version of ICU you have installed.

---

(alternative uv lock --no-build with "Building source distributions is disabled").
I get that building the source distribution is required to install the package, but I just want to generate/update the lock file to be used on other systems.

I bring this up as `poetry` (what we try to replace with `uv`), is able to lock a corresponding project (and the resulting lockfile contains the same content).
pyproject.toml:
[tool.poetry]
name = "pyicu-poetry"
version = "0.1.0"
description = ""
authors = ["Your Name<EMAIL_ADDRESS>readme = "README.md"

[tool.poetry.dependencies]
python = "^3.12"
PyICU = "^2.13.1"

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

ubuntu@9d6444fdbf5f:/pyicu/poetry$ poetry lock
Creating virtualenv pyicu-poetry-g8m-gjSW-py3.12 in /home/ubuntu/.cache/pypoetry/virtualenvs
Updating dependencies
Resolving dependencies... (7.0s)

Writing lock file

Generates
# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand.

[[package]]
name = "pyicu"
version = "2.13.1"
description = "Python extension wrapping the ICU C++ API"
optional = false
python-versions = "*"
files = [
    {file = "PyICU-2.13.1.tar.gz", hash = "sha256:d4919085eaa07da12bade8ee721e7bbf7ade0151ca0f82946a26c8f4b98cdceb"},
]

[metadata]
lock-version = "2.0"
python-versions = "^3.12"
content-hash = "ffe7de881276f533ee12cbc50bc380962d85900ee21c2c80380bd45e474915ce"

uv's lock-file (on systems with ICU & co) does contain roughly the same information:
version = 1
requires-python = ">=3.12"

[[package]]
name = "pyicu"
version = "2.13.1"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/60/b8/1540a0a0cd74aa878749d442e19916df946e3b187c9965a991ddc77cc39c/PyICU-2.13.1.tar.gz", hash = "sha256:d4919085eaa07da12bade8ee721e7bbf7ade0151ca0f82946a26c8f4b98cdceb", size = 262424 }

[[package]]
name = "pyicu-uv"
version = "0.1.0"
source = { virtual = "." }
dependencies = [
    { name = "pyicu" },
]

[package.metadata]
requires-dist = [{ name = "pyicu", specifier = "==2.13.1" }]

Could it be that uv does not use an already existing PKG-INFO but always invokes setup.py?
I am using 0.4.17 in an amd64 docker container.
Background: I try to setup renovate updates for our uv project, but renovate fails to run uv lock as ICU isn't installed.

I believe this project does not declare static metadata so we need to build the wheel in order to know its dependencies. The PKG-INFO does not include dependency metadata.
I presume Poetry is just assuming the package has no dependencies here.

Thank you for clarification. I reread the spec to learn that unless Dynamic is specific in metadata 2.2 and higher, all fields must be considered dynamic.
In that case, resolve this issues differently (either by making ICU development headers available or raise an issue with PyICU).

The linked pkg-info is using metadata version 2.1, so Dynamic is not in play and poetry trusts it when it declares no requirements.

"If the sdist metadata version is older than version 2.2, then all fields should be treated as if they were specified with Dynamic (i.e. there are no special restrictions on the metadata of wheels built from the sdist)."

you're right, I had misremembered the way this works
the actual reason that poetry doesn't perform a build during locking seems to be that it asks the build project for the metadata path, and that successfully calls prepare_metadata_for_build_wheel without performing a full build, and everyone is happy with that.
not sure whether that's right or not...

@zanieb Would it be possible to use prepare_metadata_for_build_wheel in uv, too? Or does it not cover all edge cases?

We always use prepare_metadata_for_build_wheel, yeah. You can see it in the trace above.

Sorry, my bad that I didn't verify that.


Collaboration among groups of people

Hi I have accessed the EXACT label Server. A collaborator and I want to label some images. But we cannot find a way to allow the other into the set to collaborate. Is there a guideline for that?
Thank you, and your work is great

Hi,
the following video give you an introduction to the team and user options:
https://www.youtube.com/watch?v=T2j5-NUhQFA&list=PLuA57h8TbJncBwIg_IJIP61EeAdYt4DSs&index=4
https://www.youtube.com/playlist?list=PLuA57h8TbJncBwIg_IJIP61EeAdYt4DSs
If you have any question please feel free to ask.
With kind regards,
Christian


fix(role): cancel role not close

Second attempt at #19932 which was auto closed when 5.0 branch was removed.
@brandyscarney

Thank you!!


feat(#28): invalid_application_ref

In this pull I've implemented AST check for invalid application ref.
closes #28
History:

feat(#28): invalid_application_ref
feat(#28): test in err_ast
feat(#28): compose test
feat(#28): test message

PR-Codex overview
This PR introduces an InvalidApplicationRef error check to enhance error handling in the transpiler. It integrates this new check into the existing error handling system and adds related tests.
Detailed summary

Added a new module invalid_application_ref for checking invalid application references.
Updated ErrAst to include InvalidApplicationRef in its error checks.
Created tests for InvalidApplicationRef to validate its functionality.
Added a test for composing errors in ErrAst.

✨ Ask PR-Codex anything about this PR by commenting with /codex {your question}

@rultor merge

@rultor merge

@h1alexbel OK, I'll try to merge now. You can check the progress of the merge here.

@rultor merge

@h1alexbel Done! FYI, the full log is here (took me 26min).

@rultor release, tag is 0.0.4

@rultor release, tag is 0.0.4

@h1alexbel OK, I will release it now. Please check the progress here.

@rultor release, tag is 0.0.4

@h1alexbel Done! FYI, the full log is here (took me 27min).


[harpoon2] Select shows absolute path instead of relative path

Hi,
I'm using harpoon2. When I start neovim and directly jump to the following buffers using:
vim.keymap.set("n", "<leader>1", function() harpoon:list():select(1) end)
vim.keymap.set("n", "<leader>2", function() harpoon:list():select(2) end)
my statusline always shows an absolute path for the second one instead of a relative one.
If I start neovim and cycle through my buffers using
vim.keymap.set("n", "hn", function() harpoon:list():next() end)
all files are shown correctly with their relative paths. Now I can also use select and the relative paths are still shown correctly.

Ok, I found out this doesn't happen when using lualine with relative paths enabled. Only when defining my own statusline with
local statusline = {
	' %f',
	'%r',
	'%m',
	'%=',
	'%{&filetype}',
	' %2p%%',
	' %3l:%-2c '
}
vim.o.statusline = table.concat(statusline, '')

Seems to be a problem with the %f


Add html files for showing benchmark log data

The footprint benchmark html files will be copied to benchmark log data folder, where the log data will be shown as a html page using codes in this PR.
@RackHD/corecommitters @WangWinson @rolandpoulter @wuy1

General comments: need refactor

decouple view and data model, may leverage some template render.
stick to unique code style convention
use jQuery to avoid DOM operation directly

Thanks @WangWinson, a lot of great suggestions. This PR is focused on submitting a working code for bootstrap. Your other refactor suggestions will be added int Pivotal Tracker as future actions.

:+1:  Understood @cgx027

+1

Please ignore the HoundCI issue caused by minimized Jquery/Bootstrap libs.


Added GSoC journey blog

This blog post summarizes my open source experience, right from my very first open source contribution to getting selected for GSoC and completing my Google Summer of Code project!

thanks for working on that @Kishan-Ved ! and again congrats for completing your gsoc :)


Update README.md with ASA config repo hyperlink

Update README.md with ASA config repo hyperlink

@dmulyalin
Might you have seen this?
Thank you.

@dmulyalin Might you have seen this? Thank you.

I'm looking to get feedback on this. It has been open for a while.
Thank you!

Thank you, merged into master.

Thank you, merged into master.

Thank you Denis!


highlight will mess up after some editing?

Also seems like I wasn't able to load any assembly🤔

are you on 0.27 ?

I think I am on nightly because there's no windows build for 0.27

i'll check if I can reproduce the issue

Thanks

rootcause is probably OmniSharp/omnisharp-roslyn#2483

oh 🤣thanks for investigating this! so microsoft's lsp doesn't follow lsp spec. interesting...

@taooceros
please check v.2.0.0 I switched the LSP to the open source project csharp-ls, which works out of the box after installing the LSP via:
dotnet tool install --global csharp-ls


Browser usage?

Thank you for sharing your plugin!
It doesn't state in the documentation whether this falls back to browser location services in web contexts.
Is it necessary to maintain a separate implementation for browsers if you want your app to be device-agnostic?

After some research, it looks like this plugin only engages when the app is in the background mode, so web/browser implementation is definitely going to be separate.


import/extensions false positive when node_modules are not present

With the following import:
import 'moment/locale/fr';

I have the following error when node_modules is not present:
error  Missing file extension for "moment/locale/fr"             import/extensions

Not that I use eslint on a generic tools to be run accros project without repeting configuration.
The import/no-unresolved is automatically disable if node_modules is not present: https://gitlab.com/nexylan/pretty/blob/9488bf414bf6394d7d12ccfc4071d674622427d2/tools/eslint/.eslintrc.js#L46-49
But I don't import/extensions should be on error. BTW, I don't have any warning for other imports like this:
import VueMoment from 'vue-moment';
import VueRouter from 'vue-router';
import Vuelidate from 'vuelidate';
import axios from 'axios';
import moment from 'moment';

I'm using v2.20.0, but I don't think there is any fix about this extension according to the changelog.

BTW, still without node_module, for some imports like this:
import palette from 'google-palette/palette.js';

I do have this correct error:
error  Unexpected use of file extension "js" for "google-palette/palette.js"  import/extensions

google-palette/palette.js or google-palette/palette are both valid paths depending on your extensions config.
Similarly, moment/locale/fr or moment/locale/fr.js are both valid.
All of those are asking for a specific file inside a package. Imports from a package directly - like vue-moment - are not asking for a file, they're asking for a package, so there'd never be an extension there.
Additionally, without node_modules present (as it should be present for any development or linting on the project anyways), there's no way for us to know if moment/locale/fr is a fr.js file, or an fr/index.js file, or an fr dir with a package.json and a "main" - so it's reasonable to have different behavior when you've failed to run npm install.


pull request for e2e test at 11/05/2016 10:56:00

:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

optest/docs/updated_at.md
:white_check_mark:Succeeded

Details

For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.


Add black formatter to GitHub CI workflow

Fixes issue #12
Signed-off-by: John Speed Meyers<EMAIL_ADDRESS>

@goneall and @linynjosh, just a little housecleaning before making more PRs.

I'll merge after one of you gives a thumbs up :)


Please update to ExoPlayer2

I am trying using it with the new SimpleExoPlayer  but cant seem to set it the right way

I'm also waiting for ExoPlayer2 integration.

Has this code been abandoned? Dont see any commits/comments in months. Please update to latest packages, want to make an app based on this based on the new exoplayer2 but need some good examples and cant find any.

I did update a TIF app to use ExoPlayer2, although it's not really a "good" example.


add tqdm as dependency

tiny PR to fix #125

@TristanThrush @ktirumalafb  just tagging for review request, if approved could you squash & merge on my behalf since I don't have write access? thanks!!


Terraform VMs disk upgrades not applying

Hello,
Muhamad told me about the new zmachine VMs so I'm actually testing them on my testnet node 95
Deployed a standard Ubuntu 20.04 from the flist https://hub.grid.tf/tf-official-vms/ubuntu-20.04-lts.flist, deployment went smoothly
I then tried to add 1G to the root disk, terraform apply went through without issues, but no modifications were made on the VM
I also tried to add a new 1G disk (test1), terraform apply went through without issues, but no modifications were made on the VM again
Rebooting the VM with poweroff didn't change a thing
As VMs are more stable than containers, this is very important that lifecycle can be managed by terraform, could you please look at this issue ?
Terraform version
Terraform v1.1.7
on linux_amd64

provider registry.terraform.io/threefoldtech/grid v0.1.27

Terraform Configuration Files
resource "grid_network" "netk8s1" {
    nodes = [95]
#    nodes = [10]
    ip_range = "<IP_ADDRESS>/16"
    name = "netk8s1"
    description = "selfHosting k8s VM network"
    add_wg_access = true
}

resource "grid_deployment" "t3k8s" {
  node = 95
#  node = 10
  network_name = grid_network.netk8s1.name
  ip_range = grid_network.netk8s1.nodes_ip_range["95"]
  disks {
    name = "rootFS"
    size = 41
  }
  disks {
    name = "test1"
    size = 1
}
#  disks {
#    name = "longhorn"
#    size = 150
#  }
  vms {
    name = "tfnode1"
    flist = "https://hub.grid.tf/tf-official-vms/ubuntu-20.04-lts.flist"
    cpu = 1
    publicip6 = false
    planetary = false
    memory = 2048
    entrypoint = "/init.sh"
    rootfs_size = 0
    mounts {
      disk_name = "rootFS"
      mount_point = "/mnt/nonUsedMountToCopyRootFileSystemTo"
    }
    mounts {
      disk_name = "test1"
      mount_point = "/mnt/test1"
    }
...

Steps to Reproduce
Please list the steps required to reproduce the issue, for example:

terraform apply of initial main.tf
modify main.tf, add 1 GB to root disk
terraform apply, observe no modifications on VM
modify main.tf, add 1GB test1 disk and mount it
terraform apply, observe no modifications on VM

##verified on devnet

started a vm on terraform.
try to change the value of the disk
confirm that changes are refused


package.json: "bin" and "directories.bin" fields must not exist at the same time

According to the specification.

Thanks! Would you be open to submitting a PR for this?


Fix templates

WHY
WHAT
REF

Codecov Report

Merging #7 into master will not change coverage.
The diff coverage is 0%.

@@          Coverage Diff           @@
##           master      #7   +/-   ##
======================================
  Coverage    7.87%   7.87%
======================================
  Files          27      27
  Lines         762     762
======================================
  Hits           60      60
  Misses        698     698
  Partials        4       4

Impacted Files
Coverage Δ

pkg/grapicmd/cmd/generate.go
0% <0%> (ø)
: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 3ed7db3...6034c2b. Read the comment docs.


Request Specs

First of all, I love this resource! I've learned a thing or two. I work a ton in Rails APIs and I noticed there wasn't anything on request specs. I noticed a bit of discussion around that. I can submit a PR that adds that but I want to make sure such a PR would be welcome.

Hi @freddyrangel and thank you sincerely for getting involved and your generous offer of a contribution. I've begun doing some (admittedly slow-moving) work on the API specs (and an API to test!).
I'm treading a little carefully about exactly what's introduced to start with to make sure its a good stepping stone for what my students have learned prior to this.
Once that foundation for writing API specs is in place and pushed, so there's something to build and improve on, I think that'd be the best time to make some request spec contributions. That might not be for a few weeks.
In the meantime, if you happen to know of or feel like contributing a request spec cheatsheet to link to from the README, that'd be a hugely valuable contribution that developers can start benefiting from sooner.

Oh right on. That's a great idea. I'll get started on that then

WIP: request specs, see #96

Closed by #96


Use Npgsql Code for Parsing PostgreSQL SQL Statements

As I noted at in this issue comment, the existing RegEx based approach to split PostgreSQL commands is not working correctly with my existing db dumps (created using pg_dump 14.8 against PostgreSQL 12).
I also went back to the grate code on version 1.5.0 (which works with all the scripts I have) and debugged running my scripts through it.  When I did that I realized that the old RegEx simply did not parse any of the SQL statements correctly (perhaps it was copied from SQL Server?) and instead sent the entire contents of each .sql file to the server via Ngpsql.
More recently I went through Npgsql's source code and discovered that it does not use RegEx'es to split the SQL statements, opting instead for a more elaborate approach -> (src).  This was defined by one of the contributors as legacy batching of commands done by the provider and developers were encouraged to use other (more explicit) methods to conduct command batching against PostgreSql:

https://stackoverflow.com/questions/54691579/preparing-statements-and-batching-in-npgsql
https://www.roji.org/parameters-batching-and-sql-rewriting

Given that the underlying provider used by grate for PostgreSQL is already doing this parsing I would like to propose that we refactor its code to stop trying to parse the raw SQL loaded from .sql files.  If in the future Npgsql stops supporting raw string batching then we could consider bringing their implementation of raw SQL splitting into grate.
If this seems like too drastic a change I would like to propose that we at least make that available as an option via command line paramater for PostgreSQL users.  Thanks!

I would also like to add that I can add the CLI switch and submit a PR if the team agrees that this is a good way to go.  Just don't want to start without first hearing from you guys because this is not a pure bug fix but rather a change in behavior / new feature.

Sorry for the delay getting back to you mate. I haven't been focussing on grate at all recently, so it's great to see others keen on fixing up loose ends!
Prefacing this with IANAPG (I am not a postgres guy :) ) my general feeling is:

I'd very happy to see internal changes if we don't break back compat
I'd prefer to minimise 'modes' of operation or switches etc if we can do without
I'm very happy to see 3rd party logic in use which has a wider audience/is more tested rather than rolling our own

Beyond that I'm not up to date enough on teh issues or subtlies of PGsql to really have an opinion

My issue is that right now I have to keep on using 1.5.0 as the versions after that attempted to implement PostgreSQL SQL parsing and ended up no longer working with my .sql files.  I can keep on using 1.5.0 for a while but eventually would like to be able to update as the versions of the packages it uses may be deprecated or found to contain security vulnerabilities.
So if you guys don't agree on a switch or a reversal of the changes done to pgsql support after 1.5.0 I may need to fork the repo and maintain our own container image for running migrations.  Right now I am relying on the 1.5.0 image on Docker Hub.

Hi, guys!
A bit of other stuff going on here and there elsewhere in my life, so I haven't been able to reply to everything as quickly as I would :)
I definitely agree, that we should either just stop trying to split SQL statements if we can't do it properly, or we should do it properly. I think the "split script into multiple statements" feature is a bit exotic, and, as you say, @Westat-Transportation , the feature tried to split everything using SQL server's 'GO' statement up until v 1.5.0, and was not working, so all scripts for PostgreSQL have been sent in whole files further down the pipeline, even though there might have been multiple "batches" in one file.
I don't use PostgreSQL much at all, so I don't know what people expect when using PostgreSQL. But, could you, as a PostgreSQL user, say what would make most sense, given your links in the first post here, should we just disable the batch splitting feature for PostgreSQL?

Looking more into your links, the conclusion here seems to be that it's not a good idea for SQL drivers to parse SQL (e.g. for splitting a SQL block into multiple statements): https://github.com/npgsql/npgsql/issues/4445
As this has not been working for anything other than SQL server up until now, and I don't think it's used a lot, I'm leaning towards just turning the command batch splitting feature for anything but SQL server.
Opinions on this, @wokket ?

So, take out the batch splitting for all except for sql server?
On Sep 19, 2023, at 16:58, Erik A. Brandstadmoen @.***> wrote:

CAUTION: External Email *
Looking more into your links, the conclusion here seems to be that it's not a good idea for SQL drivers to parse SQL (e.g. for splitting a SQL block into multiple statements): npgsql/npgsql#4445https://secure-web.cisco.com/1EPuEj4iiAunzV-FRVtve4S8uGXXs8bxkjeCaqnZGpF6V8RjrQ14BorutX0IXzok0M0L4SO_FvK5x4HJpSqFqHN54LbAzwJ0yFb5FMKbjqCoTZBUEx7LOekaecVAr8FbKYzPTP_Uvp8STsGNb2kjqyPqVrBfQtiCCzBVogU5LY4l1CUqz2n4JcY1GqlXyRc8SUOVErbzYyO8gHBSSyFEAf0kAR4wzSArK79E0NhNnOHBbMp_FIxq5reB_TY5gt-og/https%3A%2F%2Fgithub.com%2Fnpgsql%2Fnpgsql%2Fissues%2F4445
As this has not been working for anything other than SQL server up until now, and I don't think it's used a lot, I'm leaning towards just turning the command batch splitting feature for anything but SQL server.
Opinions on this, @wokkethttps://secure-web.cisco.com/1uKCNg641kfHPLfnd47YzIhcMUHco55dO6jagdJssvfSeDp4O6U74OmbD9le21s7FbDfBusOYCp6Pwur1cy1QBGXukIOb0zX7hQr9TBtIV7CDbL4Y-MELXObMd7YWfUMZLM8NR5Re-K5ca_3A0pwZSqvqcC0aP4bjog7Bfsza3kRliJs6Leq4u4D6BcD-ayHfr2AJQo0h0C6DMXapG3aFoIrfmNFaZZyyKUIa4ijYpXYXXi9y6ENlj-o99HjcDxXQ/https%3A%2F%2Fgithub.com%2Fwokket ?
—
Reply to this email directly, view it on GitHubhttps://secure-web.cisco.com/1HFUHYXhVI44RLPNs0UH-5l1dnZEFl3Y2WaNTexcF2GOhHqoBmw5fUg8TwjxftjdgbiG2nhtzbgYh8yrtgMl-aiUm5U7u0kOFc9clP241fdZgUxoOL_ac3sqp2sbxVwbc-3_DY_AY_9N073h0Xi7VIG7e8YR2TM5El5QKBzmGO_4q27UrY-bo2cV0f3UX5G70aUruEatBD6Fmh_vpNHjBnkMOVIG5hhqV7rp0AE7oNTlGowC1lozAzrFUGWiIY0Il/https%3A%2F%2Fgithub.com%2Ferikbra%2Fgrate%2Fissues%2F371%23issuecomment-1726456433, or unsubscribehttps://secure-web.cisco.com/1_yrJgSU0CXMNFhf0YzsrWsBo8EDRaz4arrXbX-voVFSRnQRc5eWuCDfFSqGsO7NwNs2S0wiPOrpC1HuvYVpABUAV9CuHqXMQQ4TpocXhPxe1hSaiPJERN71wts_6-I4Cic0SCRFVYw5vvLmJeVZFHr3EBOcAsrOG1dnwq7nMexnGIWVwpOSwYlDIjjHO4WbHjgRw2ZzMDA64UuYg6kq6UsqaP6ru-ZOvNFEKDZ6kxnFg1xOzzty9i1Zw_QChhLz6/https%3A%2F%2Fgithub.com%2Fnotifications%2Funsubscribe-auth%2FACEE3DLGR4YJWR2F5YFNOL3X3IBOBANCNFSM6AAAAAA43EUQRM.
You are receiving this because you were mentioned.Message ID: @.***>

Please use caution when responding and/or clicking on links as this email originated from outside of Westat.

The decision for database drivers (ie Npgsql, SqlClient etc) to not do parsing/splitting/batching clearly leaves it up to the calling applications to do that.... the big question is whether we want to take that on, or push it even further up the chain to the user creating the scripts.
If this all came about because of the breaking change in PGsql concurrent batching behaviour, I'm happy to leave that with the users who can choose whether they want to take on a breaking DBMS upgrade or not, assuming we don't have other compat issues as a result.

I agree with your last comment, @wokket . We are not a database driver, we are an application. However, we don't want to own all of this logic ourselves.
Please see my comment here. I don't particularly like the solution, but it works. https://github.com/erikbra/grate/pull/377#issuecomment-1726671195
An alternative is to copy the core logic from here, and put it in grate. The license is quite permissive, so that wouldn't be a problem. But, then we own the code, and we have the responsibility to maintain it as well...
Opinions, any of you?

Taking a reflection based dependency is awful...  I'd prefer to take the code as source, and maintain the source as upstream changes.  It's less brittle, provides for strong typing/compile time checks, and is less likely to impact assembly trimming in builds.
IMHO

You do make a good point, @wokket . An I'm inclined to agree. If I continue on the reflection-based approach, I still have the maintenance work continuously, but implicitly. Better then to form off this single class from the Npgsql source code, and adjust it to our needs. At least we know that the code we have is not a moving target.

I have made another suggestion, where I copy the code as-is from Npgsql, and wrap a thin layer around it to perform the parsing we need. I think the result is better: https://github.com/erikbra/grate/pull/377/commits/1622c6f57054b8740011c4ca627682e056b78b2d

Merged into main. Thanks for engaging, guys!

Thank you for making this change!

You're welcome :) Could you please just verify that version 1.5.3 works in your scenario?

I will do it and get back to you here.

Tested 1.5.3 on a couple of projects and it worked flawlessly! Thanks again!


Consider automated Google setup

I had lots of troubles getting all the service account and keys setup yesterday manually. You explained it pretty well in the readme, but i still went nuts trying to second guess in via the Google console gui.
I still have not gotten all the config correct.  Google Vision works but not Google Translator
So perhaps this might be work using ?
https://github.com/caos/orbos

I did not explain it so well i think.
Currently you have a nice cmd/manga-translator-setup walk through for the user.
If this can also call gcloud to do the things that your normally need to do via the google web console it would make it make it easier to get going.
Also manga-translator-setup is idempotent, in that you can run it again and again, and with gcloud cli, it is also possible to be idempotent, so it is a good marriage.

Thanks. Less deps the better.

A bit of a long wait, but I just pushed some changes to the README in 1.3.0 that should make getting started a lot easier. 🎉

@cameronkinsella wil give it a try...


www.stm32duino.com website is down

Hello,
few weeks ago i've noticed that the http://www.stm32duino.com/ website is not working anymore...

https://github.com/stm32duino/Arduino_Core_STM32/issues/577


Adds a rate limiter to logspam during image pull

Closes #935. Limits how frequently log messages are spammed during image
pulls to avoid clutter in the log.
If someone thinks a longer (or shorter) ticker is ideal, just say something and I'll push up a change with the new value. This only spams like 20 log messages for a pull of fedora.
@stevvooe PTAL. Not ideal change but very simple and gets the job done.
Signed-off-by: Drew Erny<EMAIL_ADDRESS>

I appreciate the effort to clean this up, but I don't really agree with sampling the log messages like this. It would go from lots of lines of incomprehensible garbage to fewer, out of context, lines of incomprehensible garbage.
I think logging the pull progress bars here is fundamentally the wrong thing to do. We don't do it with a normal docker pull, so why do it here?
Certainly we should log if the pull encounters an error, but I don't see how a random sampling of progress output in the log is useful.

I opened #1061 ages ago but @stevvooe disagreed with not logging the pull progress. This was just another shot at that because I'm bored this morning. The correct architecture is kinda complicated and I'd have to sit down with someone to understand what y'all really want from it.

Current coverage is 55.24% (diff: 16.66%)

Merging #1352 into master will increase coverage by 0.01%

@@             master      #1352   diff @@
==========================================
  Files            80         80
  Lines         12589      12594     +5
  Methods           0          0
  Messages          0          0
  Branches          0          0
==========================================
+ Hits           6953       6958     +5
- Misses         4682       4686     +4
+ Partials        954        950     -4

Powered by Codecov. Last update 5b5f74f...0e03b1c

I think logging the pull progress bars here is fundamentally the wrong thing to do. We don't do it with a normal docker pull, so why do it here?

Agreed but how else do we have visibility into the pull process? I think it is worse to delete the log message and not know this is happening over having slightly spammy log messages. Do we have an API for inspecting ongoing transfers? If you can make a positive suggestion here for pull visibility, let's do it.
I would have been unable to confirm a particular concurrency bug related to double pulling without having these logs in place. In fact, they confirmed that the pull was restarting completely when receiving task updates.
If we took out the bars, would that make this sufficient? We can probably pull the relevant fields output of the progress message and it will be fine. These will be in m["progressDetail"]["total"] and m["progressDetail"]["current"]. The log line would be:
log.G(ctx).WithFields(logrus.Fields{"total": m["progressDetail"]["total"], "current": m["progressDetail"]["current"]}).Debug("pull in progress")

Obviously, we may want to be careful with confirm those values are present in the map, but this is super helpful for debugging bad situations.

Yes, sampling the relevant fields of the progress messages sounds good.

Updated the code. The new log messages look like this (image is nginx)
DEBU[0007] task status updated                           method=(*Dispatcher).processUpdates module=dispatcher state.transition=ASSIGNED->PREPARING task.id=7qz8q9n5vy1ostut12xkq2s8q
DEBU[0009] pull in progress
DEBU[0010] pull in progress                              current=3.669227e+06 id=765826873799 status=Downloading total=4.4362818e+07
DEBU[0011] pull in progress                              current=2.5230571e+07 id=765826873799 status=Downloading total=4.4362818e+07
DEBU[0012] pull in progress                              current=4.3580651e+07 id=765826873799 status=Downloading total=4.4362818e+07
DEBU[0013] pull in progress                              current=1.5597568e+07 id=765826873799 status=Extracting total=4.4362818e+07
DEBU[0014] pull in progress                              current=3.2571392e+07 id=765826873799 status=Extracting total=4.4362818e+07
DEBU[0015] pull in progress                              current=4.358144e+07 id=765826873799 status=Extracting total=4.4362818e+07
DEBU[0016] state changed                                 module=node/agent/taskmanager state.desired=RUNNING state.transition=PREPARING->READY task.id=7qz8q9n5vy1ostut12xkq2s8q

This looks way better, thanks.

There are a couple of different statuses that can be reported. I can modify this to skip rate limiting if the status changes too, if we'd like that, which would be closer to showing the whole picture in the logs.

cc @stevvooe @aaronlehmann see last comment.

LGTM

Don't merge until I figure out godeps.
Hopefully I will do so by the end of this decade.

@stevvooe has saved me from vendoring hell, this PR is now ready to merge.

LGTM

LGTM

@dperny @aaronlehmann Do we need to port this over to the engine?

Yep. @tonistiigi usually does that when he revendors, but we could help him out by providing a PR.
The engine will also need to vendor golang.org/x/time/rate.

Currently working on this PR for docker/docker.


ISO8601 UTC Support?

Looking to replace Date.js and a bunch of hacks in a JS Application. Does moment.js support (cross-browser) parsing of and conversion to the ISO8601 UTC Format? 2011-12-16T06:00:00.000Z

I may be out of order here, not having any business commenting, but since I did this yesterday I thought I'd comment.
var m = moment(string, 'YYYY-MM-DDTHH:mm:ssZ');

Yep, @vomithead is correct, that should work fine.

@jefffriesen I know this is absolutely ancient, however I had the same problem and this works:
a.format("YYYY-MM-DDTHH:mm:ss\\Z")

@jameskleeh I don't need it anymore but it's nice to create working examples for everyone to reference. Thanks.


Update oras-go to support OCI Artifacts

This commit updates the oras-go library to v2.0.0-rc4, which deprecates ORAS in favor of OCI Artifact. With this change, it is now possible to push and pull OCI Artifact compatible manifests.
This is a breaking change! Following this change, users will not be able to push and pull ORAS manifests anymore, and all existing manifests will be rendered unusable. Building an ORAS manifest is still possible, though.
Also, the OCI Artifact spec has renamed the Refers field in the manifest to Subject (similar to ORAS). Therefore, removed the field from SOCI Index.
Signed-off-by: Rishabh Singhvi<EMAIL_ADDRESS>Issue #, if available:
#149
Testing performed:
Successfully pushed and pulled SOCI artifacts from an OCI Artifact compatible registry. Successfully ran multiple images using the SOCI snapshotter.
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

Why is the integration test run skipped?

Seems like it timed out.


New Function: Get- functions for the Synthetic API endpoint

New Function: Get- functions for the Synthetic API endpoint

This was actually intended to get the HTTP checks, which are just other entities.  So, function implemented:
Get-DynatraceHTTPCheck
Get-DynatraceHTTPCheckProperty

done!


onLCP does not work on prerendered pages

Steps to reproduce:

I'm using Chrome 108.0.5355.0 (Official Build) dev (64-bit) ; maybe be sure to be at least at that revision.
Enable Prerender2 in chrome://flags. Not sure this is necessary anymore but let's just be sure.
Visit https://equatorial-longing-kick.glitch.me/ .
Click "This link should be prerendered"
Notice that the page was prerendered (document.prerendering was logged as true), but no LCP is logged.
Open a new tab, directly to https://equatorial-longing-kick.glitch.me/next.html .
Notice that this time we get LCP logged.

So it seems like if the page is loaded while prerendered, onLCP is never called. Maybe this is related to the README saying

CLS, FCP, FID, and LCP are not reported if the page was loaded in the background.

I noticed that there is some special handling for bfcache restore in https://github.com/GoogleChrome/web-vitals/blob/main/src/onLCP.ts#L92-L106 . Maybe there should be something similar for prerendering activation? (Prerendering activation can be detected using the prerenderingchange event on Document.)

@philipwalton I think this is due to a combination of this:
https://github.com/GoogleChrome/web-vitals/blob/dfbd06e2fbdf8d8c8c7e252f710d66c5bbad10a0/src/onLCP.ts#L54-L58
And this:
https://github.com/GoogleChrome/web-vitals/blob/dfbd06e2fbdf8d8c8c7e252f710d66c5bbad10a0/src/lib/bindReporter.ts#L40
As the LCP time for a prerendered page should always be less than the activation time, we get a negative LCP, and that is then filtered out. We should clamp it to 0, same as we do for TTFB.
I've tested with a copy of @domenic 's demo page here and it seem's to work: https://prerender-demos.glitch.me/
Presumably should do same for FCP too.
Happy to put together a PR if you agree.


Viewport: Fix missing tooltips w/ disabled physics object picking

Not sure why several users are getting hit by this issue all of a sudden, when this bug has been around like forever, but this should fix it.
It might make sense to move the tooltips display to NOTIFICATION_INTERNAL_PROCESS (or if physics related - but I don't see why - to NOTIFICATION_INTERNAL_PHYSICS_PROCESS).
Fixes #17001.

Wait a bit, that fix is not enough. It seems like Viewport never enables physics processing if this option is not set to true.

The fix works now :)

After discussion with @reduz, I'll actually move everything to NOTIFICATION_INTERNAL_PROCESS and NOTIFICATION_INTERNAL_PHYSICS_PROCESS as it makes more sense.

Keeping a reference to the previous simpler version in case we prefer that one for 3.0: https://github.com/godotengine/godot/commit/237fac0e136714036e8593cc72411757f667ef01

Should now be good to merge, it works fine in my tests.

@akien-mga #8347

@volzhs Nice find, thanks!

OK, tested with physics object picking both on and off, in the editor as well with running scenes with tooltips. I can't see anything that works differently from before. I'm cherry-picking the master branch version into 3.0


Jambonz/privacy terms

Hi, @kitajchuk
Could you please review this PR when you get a chance?

@love1119 Here's some feedback on this PR:
I see you've set up a reusable text layout component which is a step in the right direction. However, looking at the SASS it seems like a bit of a copy+paste from the docs SASS and then modified from there? I'm wondering if we should talk through a way to really normalize this format of raw html rendering and it's adjacent styles? In my mind we ought to be able to share the raw html styling between docs/terms/privacy, ideally, 100%. This would require a bit of a refactor as we'd need to set up the code to reflect this and adjust how the docs raw html gets rendered+styled as well. Since you've already moved in that direction, here's what I'd propose you do to reflect the change at large:

Move the TextLayout component into the jambonz-ui library
Use the TextLayout component in the Docs page component
Normalize the styles (I'd just rename the docs partial and keep that vs what you have here for styles)

Let's see where that gets us? Rather than using the negative margins to overcome the padding for the Hero components on each legal page, I'd adjust the padding of the Hero targets in the layout SASS file. This is actually the reason they each also get a unique className since we already have scenarios on the main site where we tweak specific Hero styling. You can reference there in the layout SASS here.
I think this gets us pretty far along, but there's still one thing that's not sitting right with me...
Here you have some of the page data for these pages in the yaml data and some in the docs markdown data. This makes no sense (outside the fact I understand you were trying to leverage utilities already in place for rendering markdown). These legal pages are NOT developer docs and thus should not be located within the docs markdown folder. As it stands there is no conflict because the docs sidebar nav is controlled by a yaml data file so these pages don't show up. But, what if it was all 100% dynamic? These pages would show up in the docs sidbar nav which would be bad. Also, they are in the rest sub folder which also really makes no sense. These are legal pages, not developer docs about a REST API.
So, unfortunately this puts us in a weird position because the utilities need to be refactored to support loading markdown from locations other than the docs folder. One approach would be to try switching the private _getDocs function in lib/data.js to a more generic name like getHtmlFromMarkdown and making it publicly exported. Then this method could be used in a more ad hoc  manner for this kind of specific scenario. Since this method takes in the filePath you could just use it right there in your getStaticProps method for the page components. That might work.
Okay, this is a lot. I've pushed some more updates to the main branch so feel free to rebase those into your branch. I've moved all the typography into reusable mixins and added notes on adhering to typographic standards to the readme.
I'm going to make the change necessary here to the lib/data.js file and test that idea out. If it seems promising then you'll be able to rebase that as well and carry on as it were.

@love1119 Go ahead and rebase main. I've updated lib/data.js to export the parser method so it can be used in page component files. You can see on this commit here.
My recommendation is to simply put the privacy.md and terms.md files in the pages directory right alongside their JS component counter parts (no worries, Next.js won't do anything with these). Then you can use this new public data method something like this in your page component JS:
import Layout from '../components/layout';
import { Hero } from '../components/jambonz-ui';
import { getData, getParsedMarkdown } from '../lib/data';

// You'll need to load the nodejs path module
import path from 'path';

export default function Privacy({ data, parsed }) {
  return (
    <>
      <Layout siteData={data.site}>
        <Hero data={data.privacy.hero} subStyle="privacy" />
      </Layout>
      {/* do something with `parsed` */}
    </>
  );
}

export async function getStaticProps() {
  const data = getData('privacy');
  // Use the new public method in a more ad hoc manner like this...
  const parsed = await getParsedMarkdown(path.join(process.cwd(), 'pages', 'privacy.md'));

  return {
    props: {
      data,
      parsed,
    },
  };
}

@kitajchuk
Thank you for your details.
I got familiar with the structure of the project with your kindly help.
I will update PR soon.
Thanks a lot.

@kitajchuk
I updated the PR. Could you please review this PR when you get a chance?

@kitajchuk
I updated the PR. Could you please review this PR when you get a chance?

Overall these changes look really good! I only had a few minor nit picks left so once those are resolved we're looking great!

@kitajchuk
I just removed those comments.
Thank you.

@davehorton @love1119 Too late now, and my bad for not bringing it up sooner (I didn't realize this was going to be merged right away like that), but for future reference I'd prefer if we squash our commits on PRs before merging. This way a feature comes into the main branch as a single, clean commit rather than all the piece meal commits on the feature branch. I have no issues with making as many commits as desired on a feature branch, but the squash is very desirable when merging back to main.

gotcha, good point.

@davehorton @love1119 I know I didn't do it on my original docs-gen branch so maybe I'm a hypocrite (it was early development in the experimental phases). I think as a project grows and more contributors come into the mix it begins to make more sense to keep the main branch history as clean as possible. I know squashing can be a bit of a pain when doing it manually. I'm not sure about Github, but I know Bitbucket lets you choose squash as a strategy for merges from the PR page which makes it nice and easy.

@kitajchuk
I think squash is a good way to make main branch very clean.


Fix occassional GPG key retrieval failures

GPG key retrieval from the single server failed on each and every
build for me. I found, and adopted, a solution recorded under issue #35 at
tianon/gosu:
https://github.com/tianon/gosu/issues/35#issuecomment-299205512

Update gosu to latest version whilst we're at it.

Container tested for 24 hours, no observed issues.

thanks!


Marcom 103

When last_result for a capability changes, we now record the change in a table called Results.
Results table store stores :

result(t/f)
the capability_id
the project_id
the time we first started seeing the result
the time we stopped seeing the result

Commit amended per Luna and Drew's suggestions


Separate input validation from database query

As suggested by @Amr2812, and @b-fuze.
Results in: Better Separation of Concerns & more Clean Code.
Reference:

https://github.com/G0maa/my-school-server/blob/a8971d8341a0ff4440dc9c9abbc886de34d3aaae/src/validator/general.validator.ts#L21-L24
https://github.com/G0maa/my-school-server/blob/a8971d8341a0ff4440dc9c9abbc886de34d3aaae/src/validator/student.validator.ts#L18-L30

This has proven to be a hassle, but I have to get rid of it for #40, zod-to-openapi understandably doesn't work with .trasnform.
I've tried some options:
Most naive/basic solution is hard-coding a function that turns every XToObject:

export const StudentToQuery = (zStudent: ZStudent) => {
  return {
    ...zStudent,
    classId: ToLikeQuery(zStudent.classId),
    parentName: ToLikeQuery(zStudent.parentName),
    parentPhonenumber: ToLikeQuery(zStudent.parentPhonenumber),
  };
};

I see this and I feel itchy, I won't add more things to maintain, even if it's in the x.validator.ts,

similarly with a more ?elegant? solution:

// Use is: XToQuery(zStudent, ['name', 'parentName'])
export const XToQuery = (
  obj: Record<string, any>,
  attributes: string[]
): Record<string, any> => {
  for (const attribute of attributes) {
    obj[attribute] = ToLikeQuery(obj[attribute]);
  }
  return obj;
};

Best solution: still looking for a better option

#50 Solves this ever lasting issue, but as advised by @Amr2812, my solution is a hacky one and it will eventually bite me (again), a better solution would be hardcoding the parameters to be querified.

Solution as of now:
https://github.com/G0maa/my-school-server/blob/72978e87aa9cd2b40d1ecbd7914f1849d2cd8d32/src/utils/helpers.ts#L69-L102


WinSW should parse & verify configs only once on starup

Currently ServiceDescriptor keeps the XML structure, and all properties resolve the data on-demand. It causes extra overheads in the case of the multiple access. Moreover, it means that any access to ServiceDescriptor may fail (e.g. invalid attribute in the file), hence it requires handling in the code in many places.
I propose to add the following initialization logic:

During the configuration read, parse all critical fields for issue diagnosis (e.g. logging settings)
Initialize logging
Read all other settings. Fail & Report issues if they happen
Proceed with initialization

This is a part of the GSoC 2020 project idea published in the Jenkins project: https://jenkins.io/projects/gsoc/2020/project-ideas/winsw-yaml-config-support/


Make editor editable when user-supplied values is selected

Resolves #3775
This PR changes the ace-editor to allow editing when User-supplied values only is checked.

 Please take a look this page https://github.com/lensapp/lens/pull/3776/checks?check_run_id=3569834465 for instructions.

@Nokel81 The read-only change was made in https://github.com/lensapp/lens/pull/2367. Please consider if this can be reverted. Currently, user allowed to edit all values, but't not allowed to edit subset of all - the user-supplied.

@aleksfront I think that is fine, I don't remember why I blocked that flow in that PR.

@KorvinSzanto ping about signing your commit

That's been updated @Nokel81 thanks for the reminder!


The nonce information is missing from the Message structure.

I didn't think this was necessary as from what i've read the nonce value is used to verify a message was sent, however if it wasn't sent then surely the API would just respond with an error?

The nonce is important for systems that guarantee at least once delivery, but can dispatch a message multiple times.
Discord is exposing that to avoid spamming the same message multiple times. The other way to prevent this will be to build idempotency into your own system (which is fine), but for simple fire and get services you would want to use the nonce and not bother.


Freeradius and LDAP, missing EXPAND before ldapsearch for Userfilters

I think I have a problem with the "User Filter".
I'm using AzureAD and the freeradius plugin 1.9.2 within the the OPNSense Firewall 19.1.7.
The default "User Filter" is: "(userprincipalname=%{%{Stripped-User-Name}:-%{User-Name}}@mydomain.com)".
If I'm using the default userfilter, I cannot connect over the radius server.
If I'm changing the User Filter to "(userprincipalname=testuser@mydomain.com)", I can connect over the radius server.
When it comes to the ldapsearch, I do reach this line in the debug mode:
(0) ldap: Performing search in "ou=AADDC Users,dc=mydomain,dc=com" with filter "(userprincipalname=%{%{Stripped-User-Name}:-%{User-Name}}@mydomain.com)", scope "sub"
It irritates me, that there is no EXPAND before that line that changes the %{User-Name} to<EMAIL_ADDRESS>therefore the ldapsearch failes and I can't connect.
Does someone have an idea how to solve this? (Or maybe a link?)
complete log:
Starting radiusd.
root@ctaobofw1:~ # FreeRADIUS Version 3.0.19
Copyright (C) 1999-2019 The FreeRADIUS server project and contributors
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE
You may redistribute copies of FreeRADIUS under the terms of the
GNU General Public License
For more information about these matters, see the file named COPYRIGHT
Starting - reading configuration files ...
including dictionary file /usr/local/share/freeradius/dictionary
including dictionary file /usr/local/share/freeradius/dictionary.dhcp
including dictionary file /usr/local/share/freeradius/dictionary.vqp
including dictionary file /usr/local/etc/raddb/dictionary
including configuration file /usr/local/etc/raddb/radiusd.conf
including configuration file /usr/local/etc/raddb/proxy.conf
including configuration file /usr/local/etc/raddb/clients.conf
including files in directory /usr/local/etc/raddb/mods-enabled/
including configuration file /usr/local/etc/raddb/mods-enabled/attr_filter
including configuration file /usr/local/etc/raddb/mods-enabled/cache_eap
including configuration file /usr/local/etc/raddb/mods-enabled/chap
including configuration file /usr/local/etc/raddb/mods-enabled/date
including configuration file /usr/local/etc/raddb/mods-enabled/detail
including configuration file /usr/local/etc/raddb/mods-enabled/detail.log
including configuration file /usr/local/etc/raddb/mods-enabled/digest
including configuration file /usr/local/etc/raddb/mods-enabled/dynamic_clients
including configuration file /usr/local/etc/raddb/mods-enabled/eap
including configuration file /usr/local/etc/raddb/mods-enabled/echo
including configuration file /usr/local/etc/raddb/mods-enabled/exec
including configuration file /usr/local/etc/raddb/mods-enabled/expiration
including configuration file /usr/local/etc/raddb/mods-enabled/expr
including configuration file /usr/local/etc/raddb/mods-enabled/files
including configuration file /usr/local/etc/raddb/mods-enabled/linelog
including configuration file /usr/local/etc/raddb/mods-enabled/logintime
including configuration file /usr/local/etc/raddb/mods-enabled/mschap
including configuration file /usr/local/etc/raddb/mods-enabled/ntlm_auth
including configuration file /usr/local/etc/raddb/mods-enabled/pap
including configuration file /usr/local/etc/raddb/mods-enabled/passwd
including configuration file /usr/local/etc/raddb/mods-enabled/preprocess
including configuration file /usr/local/etc/raddb/mods-enabled/radutmp
including configuration file /usr/local/etc/raddb/mods-enabled/realm
including configuration file /usr/local/etc/raddb/mods-enabled/replicate
including configuration file /usr/local/etc/raddb/mods-enabled/soh
including configuration file /usr/local/etc/raddb/mods-enabled/sradutmp
including configuration file /usr/local/etc/raddb/mods-enabled/unix
including configuration file /usr/local/etc/raddb/mods-enabled/always
including configuration file /usr/local/etc/raddb/mods-enabled/unpack
including configuration file /usr/local/etc/raddb/mods-enabled/utf8
including configuration file /usr/local/etc/raddb/mods-enabled/sqlippool
including configuration file /usr/local/etc/raddb/mods-enabled/dhcp_sqlippool
including configuration file /usr/local/etc/raddb/mods-enabled/sql
including configuration file /usr/local/etc/raddb/mods-enabled/counter
including configuration file /usr/local/etc/raddb/mods-enabled/ldap
including files in directory /usr/local/etc/raddb/policy.d/
including configuration file /usr/local/etc/raddb/policy.d/accounting
including configuration file /usr/local/etc/raddb/policy.d/canonicalization
including configuration file /usr/local/etc/raddb/policy.d/control
including configuration file /usr/local/etc/raddb/policy.d/cui
including configuration file /usr/local/etc/raddb/policy.d/debug
including configuration file /usr/local/etc/raddb/policy.d/dhcp
including configuration file /usr/local/etc/raddb/policy.d/eap
including configuration file /usr/local/etc/raddb/policy.d/filter
including configuration file /usr/local/etc/raddb/policy.d/moonshot-targeted-ids
including configuration file /usr/local/etc/raddb/policy.d/operator-name
including configuration file /usr/local/etc/raddb/policy.d/abfab-tr
including files in directory /usr/local/etc/raddb/sites-enabled/
including configuration file /usr/local/etc/raddb/sites-enabled/inner-tunnel
including configuration file /usr/local/etc/raddb/sites-enabled/default
including configuration file /usr/local/etc/raddb/sites-enabled/dhcp
main {
 security {
        allow_core_dumps = no
 }
        name = "radiusd"
        prefix = "/usr/local"
        localstatedir = "/var"
        logdir = "/var/log"
        run_dir = "/var/run/radiusd"
}
main {
        name = "radiusd"
        prefix = "/usr/local"
        localstatedir = "/var"
        sbindir = "/usr/local/sbin"
        logdir = "/var/log"
        run_dir = "/var/run/radiusd"
        libdir = "/usr/local/lib/freeradius-3*"
        radacctdir = "/var/log/radacct"
        hostname_lookups = no
        max_request_time = 30
        cleanup_delay = 5
        max_requests = 16384
        pidfile = "/var/run/radiusd/radiusd.pid"
        checkrad = "/usr/local/sbin/checkrad"
        debug_level = 0
        proxy_requests = yes
 log {
        stripped_names = no
        auth = yes
        auth_badpass = no
        auth_goodpass = no
        colourise = yes
        msg_denied = "You are already logged in - access denied"
 }
 resources {
 }
 security {
        max_attributes = 200
        reject_delay = 1.000000
        status_server = yes
 }
}
radiusd: #### Loading Realms and Home Servers ####
 proxy server {
        retry_delay = 5
        retry_count = 3
        default_fallback = no
        dead_time = 120
        wake_all_if_all_dead = no
 }
 home_server localhost {
        ipaddr = <IP_ADDRESS>
        port = 1812
        type = "auth"
        secret = <<< secret >>>
        response_window = 20.000000
        response_timeouts = 1
        max_outstanding = 65536
        zombie_period = 40
        status_check = "status-server"
        ping_interval = 30
        check_interval = 30
        check_timeout = 4
        num_answers_to_alive = 3
        revive_interval = 120
  limit {
        max_connections = 16
        max_requests = 0
        lifetime = 0
        idle_timeout = 0
  }
  coa {
        irt = 2
        mrt = 16
        mrc = 5
        mrd = 30
  }
 }
 home_server_pool my_auth_failover {
        type = fail-over
        home_server = localhost
 }
 realm example.com {
        auth_pool = my_auth_failover
 }
 realm LOCAL {
 }
radiusd: #### Loading Clients ####
 client TestRadius {
        ipaddr = <IP_ADDRESS>
        require_message_authenticator = no
        secret = <<< secret >>>
        shortname = "TestRadius"
  limit {
        max_connections = 16
        lifetime = 0
        idle_timeout = 30
  }
 }
 client RadiusTest {
        ipaddr = <IP_ADDRESS>
        require_message_authenticator = no
        secret = <<< secret >>>
        shortname = "RadiusTest"
  limit {
        max_connections = 16
        lifetime = 0
        idle_timeout = 30
  }
 }
Debugger not attached
 # Creating Auth-Type = mschap
 # Creating Auth-Type = eap
 # Creating Auth-Type = PAP
 # Creating Auth-Type = CHAP
 # Creating Auth-Type = MS-CHAP
 # Creating Auth-Type = digest
 # Creating Auth-Type = LDAP
radiusd: #### Instantiating modules ####
 modules {
  # Loaded module rlm_attr_filter
  # Loading module "attr_filter.post-proxy" from file /usr/local/etc/raddb/mods-enabled/attr_filter
  attr_filter attr_filter.post-proxy {
        filename = "/usr/local/etc/raddb/mods-config/attr_filter/post-proxy"
        key = "%{Realm}"
        relaxed = no
  }
  # Loading module "attr_filter.pre-proxy" from file /usr/local/etc/raddb/mods-enabled/attr_filter
  attr_filter attr_filter.pre-proxy {
        filename = "/usr/local/etc/raddb/mods-config/attr_filter/pre-proxy"
        key = "%{Realm}"
        relaxed = no
  }
  # Loading module "attr_filter.access_reject" from file /usr/local/etc/raddb/mods-enabled/attr_filter
  attr_filter attr_filter.access_reject {
        filename = "/usr/local/etc/raddb/mods-config/attr_filter/access_reject"
        key = "%{User-Name}"
        relaxed = no
  }
  # Loading module "attr_filter.access_challenge" from file /usr/local/etc/raddb/mods-enabled/attr_filter
  attr_filter attr_filter.access_challenge {
        filename = "/usr/local/etc/raddb/mods-config/attr_filter/access_challenge"
        key = "%{User-Name}"
        relaxed = no
  }
  # Loading module "attr_filter.accounting_response" from file /usr/local/etc/raddb/mods-enabled/attr_filter
  attr_filter attr_filter.accounting_response {
        filename = "/usr/local/etc/raddb/mods-config/attr_filter/accounting_response"
        key = "%{User-Name}"
        relaxed = no
  }
  # Loaded module rlm_cache
  # Loading module "cache_eap" from file /usr/local/etc/raddb/mods-enabled/cache_eap
  cache cache_eap {
        driver = "rlm_cache_rbtree"
        key = "%{%{control:State}:-%{%{reply:State}:-%{State}}}"
        ttl = 15
        max_entries = 0
        epoch = 0
        add_stats = no
  }
  # Loaded module rlm_chap
  # Loading module "chap" from file /usr/local/etc/raddb/mods-enabled/chap
  # Loaded module rlm_date
  # Loading module "date" from file /usr/local/etc/raddb/mods-enabled/date
  date {
        format = "%b %e %Y %H:%M:%S %Z"
        utc = no
  }
  # Loaded module rlm_detail
  # Loading module "detail" from file /usr/local/etc/raddb/mods-enabled/detail
  detail {
        filename = "/var/log/radacct/%{%{Packet-Src-IP-Address}:-%{Packet-Src-IPv6-Address}}/detail-%Y%m%d"
        header = "%t"
        permissions = 384
        locking = no
        escape_filenames = no
        log_packet_header = no
  }
  # Loading module "auth_log" from file /usr/local/etc/raddb/mods-enabled/detail.log
  detail auth_log {
        filename = "/var/log/radacct/%{%{Packet-Src-IP-Address}:-%{Packet-Src-IPv6-Address}}/auth-detail-%Y%m%d"
        header = "%t"
        permissions = 384
        locking = no
        escape_filenames = no
        log_packet_header = no
  }
  # Loading module "reply_log" from file /usr/local/etc/raddb/mods-enabled/detail.log
  detail reply_log {
        filename = "/var/log/radacct/%{%{Packet-Src-IP-Address}:-%{Packet-Src-IPv6-Address}}/reply-detail-%Y%m%d"
        header = "%t"
        permissions = 384
        locking = no
        escape_filenames = no
        log_packet_header = no
  }
  # Loading module "pre_proxy_log" from file /usr/local/etc/raddb/mods-enabled/detail.log
  detail pre_proxy_log {
        filename = "/var/log/radacct/%{%{Packet-Src-IP-Address}:-%{Packet-Src-IPv6-Address}}/pre-proxy-detail-%Y%m%d"
        header = "%t"
        permissions = 384
        locking = no
        escape_filenames = no
        log_packet_header = no
  }
  # Loading module "post_proxy_log" from file /usr/local/etc/raddb/mods-enabled/detail.log
  detail post_proxy_log {
        filename = "/var/log/radacct/%{%{Packet-Src-IP-Address}:-%{Packet-Src-IPv6-Address}}/post-proxy-detail-%Y%m%d"
        header = "%t"
        permissions = 384
        locking = no
        escape_filenames = no
        log_packet_header = no
  }
  # Loaded module rlm_digest
  # Loading module "digest" from file /usr/local/etc/raddb/mods-enabled/digest
  # Loaded module rlm_dynamic_clients
  # Loading module "dynamic_clients" from file /usr/local/etc/raddb/mods-enabled/dynamic_clients
  # Loaded module rlm_eap
  # Loading module "eap" from file /usr/local/etc/raddb/mods-enabled/eap
  eap {
        default_eap_type = "mschapv2"
        timer_expire = 60
        ignore_unknown_eap_types = no
        cisco_accounting_username_bug = no
        max_sessions = 16384
  }
  # Loaded module rlm_exec
  # Loading module "echo" from file /usr/local/etc/raddb/mods-enabled/echo
  exec echo {
        wait = yes
        program = "/bin/echo %{User-Name}"
        input_pairs = "request"
        output_pairs = "reply"
        shell_escape = yes
  }
  # Loading module "exec" from file /usr/local/etc/raddb/mods-enabled/exec
  exec {
        wait = no
        input_pairs = "request"
        shell_escape = yes
        timeout = 10
  }
  # Loaded module rlm_expiration
  # Loading module "expiration" from file /usr/local/etc/raddb/mods-enabled/expiration
  # Loaded module rlm_expr
  # Loading module "expr" from file /usr/local/etc/raddb/mods-enabled/expr
  expr {
        safe_characters =<EMAIL_ADDRESS>/äéöüàâæçèéêëîïôœùûüaÿÄÉÖÜßÀÂÆÇÈÉÊËÎÏÔŒÙÛÜŸ"
  }
  # Loaded module rlm_files
  # Loading module "files" from file /usr/local/etc/raddb/mods-enabled/files
  files {
        filename = "/usr/local/etc/raddb/mods-config/files/authorize"
        acctusersfile = "/usr/local/etc/raddb/mods-config/files/accounting"
        preproxy_usersfile = "/usr/local/etc/raddb/mods-config/files/pre-proxy"
  }
  # Loaded module rlm_linelog
  # Loading module "linelog" from file /usr/local/etc/raddb/mods-enabled/linelog
  linelog {
        filename = "/var/log/linelog"
        escape_filenames = no
        syslog_severity = "info"
        permissions = 384
        format = "This is a log message for %{User-Name}"
        reference = "messages.%{%{reply:Packet-Type}:-default}"
  }
  # Loading module "log_accounting" from file /usr/local/etc/raddb/mods-enabled/linelog
  linelog log_accounting {
        filename = "/var/log/linelog-accounting"
        escape_filenames = no
        syslog_severity = "info"
        permissions = 384
        format = ""
        reference = "Accounting-Request.%{%{Acct-Status-Type}:-unknown}"
  }
  # Loaded module rlm_logintime
  # Loading module "logintime" from file /usr/local/etc/raddb/mods-enabled/logintime
  logintime {
        minimum_timeout = 60
  }
  # Loaded module rlm_mschap
  # Loading module "mschap" from file /usr/local/etc/raddb/mods-enabled/mschap
  mschap {
        use_mppe = yes
        require_encryption = no
        require_strong = no
        with_ntdomain_hack = yes
   passchange {
   }
        allow_retry = yes
        winbind_retry_with_normalised_username = no
  }
  # Loading module "ntlm_auth" from file /usr/local/etc/raddb/mods-enabled/ntlm_auth
  exec ntlm_auth {
        wait = yes
        program = "/path/to/ntlm_auth --request-nt-key --domain=MYDOMAIN --username=%{mschap:User-Name} --password=%{User-Password}"
        shell_escape = yes
  }
  # Loaded module rlm_pap
  # Loading module "pap" from file /usr/local/etc/raddb/mods-enabled/pap
  pap {
        normalise = yes
  }
  # Loaded module rlm_passwd
  # Loading module "etc_passwd" from file /usr/local/etc/raddb/mods-enabled/passwd
  passwd etc_passwd {
        filename = "/etc/passwd"
        format = "*User-Name:Crypt-Password:"
        delimiter = ":"
        ignore_nislike = no
        ignore_empty = yes
        allow_multiple_keys = no
        hash_size = 100
  }
  # Loaded module rlm_preprocess
  # Loading module "preprocess" from file /usr/local/etc/raddb/mods-enabled/preprocess
  preprocess {
        huntgroups = "/usr/local/etc/raddb/mods-config/preprocess/huntgroups"
        hints = "/usr/local/etc/raddb/mods-config/preprocess/hints"
        with_ascend_hack = no
        ascend_channels_per_line = 23
        with_ntdomain_hack = no
        with_specialix_jetstream_hack = no
        with_cisco_vsa_hack = no
        with_alvarion_vsa_hack = no
  }
  # Loaded module rlm_radutmp
  # Loading module "radutmp" from file /usr/local/etc/raddb/mods-enabled/radutmp
  radutmp {
        filename = "/var/log/radutmp"
        username = "%{User-Name}"
        case_sensitive = yes
        check_with_nas = yes
        permissions = 384
        caller_id = yes
  }
  # Loaded module rlm_realm
  # Loading module "IPASS" from file /usr/local/etc/raddb/mods-enabled/realm
  realm IPASS {
        format = "prefix"
        delimiter = "/"
        ignore_default = no
        ignore_null = no
  }
  # Loading module "suffix" from file /usr/local/etc/raddb/mods-enabled/realm
  realm suffix {
        format = "suffix"
        delimiter = "@"
        ignore_default = no
        ignore_null = no
  }
  # Loading module "realmpercent" from file /usr/local/etc/raddb/mods-enabled/realm
  realm realmpercent {
        format = "suffix"
        delimiter = "%"
        ignore_default = no
        ignore_null = no
  }
  # Loading module "ntdomain" from file /usr/local/etc/raddb/mods-enabled/realm
  realm ntdomain {
        format = "prefix"
        delimiter = "\\"
        ignore_default = no
        ignore_null = no
  }
  # Loaded module rlm_replicate
  # Loading module "replicate" from file /usr/local/etc/raddb/mods-enabled/replicate
  # Loaded module rlm_soh
  # Loading module "soh" from file /usr/local/etc/raddb/mods-enabled/soh
  soh {
        dhcp = yes
  }
  # Loading module "sradutmp" from file /usr/local/etc/raddb/mods-enabled/sradutmp
  radutmp sradutmp {
        filename = "/var/log/sradutmp"
        username = "%{User-Name}"
        case_sensitive = yes
        check_with_nas = yes
        permissions = 420
        caller_id = no
  }
  # Loaded module rlm_unix
  # Loading module "unix" from file /usr/local/etc/raddb/mods-enabled/unix
  unix {
        radwtmp = "/var/log/radwtmp"
  }
Creating attribute Unix-Group
  # Loaded module rlm_always
  # Loading module "reject" from file /usr/local/etc/raddb/mods-enabled/always
  always reject {
        rcode = "reject"
        simulcount = 0
        mpp = no
  }
  # Loading module "fail" from file /usr/local/etc/raddb/mods-enabled/always
  always fail {
        rcode = "fail"
        simulcount = 0
        mpp = no
  }
  # Loading module "ok" from file /usr/local/etc/raddb/mods-enabled/always
  always ok {
        rcode = "ok"
        simulcount = 0
        mpp = no
  }
  # Loading module "handled" from file /usr/local/etc/raddb/mods-enabled/always
  always handled {
        rcode = "handled"
        simulcount = 0
        mpp = no
  }
  # Loading module "invalid" from file /usr/local/etc/raddb/mods-enabled/always
  always invalid {
        rcode = "invalid"
        simulcount = 0
        mpp = no
  }
  # Loading module "userlock" from file /usr/local/etc/raddb/mods-enabled/always
  always userlock {
        rcode = "userlock"
        simulcount = 0
        mpp = no
  }
  # Loading module "notfound" from file /usr/local/etc/raddb/mods-enabled/always
  always notfound {
        rcode = "notfound"
        simulcount = 0
        mpp = no
  }
  # Loading module "noop" from file /usr/local/etc/raddb/mods-enabled/always
  always noop {
        rcode = "noop"
        simulcount = 0
        mpp = no
  }
  # Loading module "updated" from file /usr/local/etc/raddb/mods-enabled/always
  always updated {
        rcode = "updated"
        simulcount = 0
        mpp = no
  }
  # Loaded module rlm_unpack
  # Loading module "unpack" from file /usr/local/etc/raddb/mods-enabled/unpack
  # Loaded module rlm_utf8
  # Loading module "utf8" from file /usr/local/etc/raddb/mods-enabled/utf8
  # Loaded module rlm_counter
  # Loading module "daily" from file /usr/local/etc/raddb/mods-enabled/counter
  counter daily {
        filename = "/usr/local/etc/raddb/db.daily"
        key = "User-Name"
        reset = "daily"
        count_attribute = "Acct-Session-Time"
        counter_name = "Daily-Session-Time"
        check_name = "Max-Daily-Session"
        reply_name = "Session-Timeout"
        allowed_service_type = "Framed-User"
        cache_size = 5000
  }
  # Loaded module rlm_ldap
  # Loading module "ldap" from file /usr/local/etc/raddb/mods-enabled/ldap
  ldap {
        server = "LDAPS://ldapserver.mydomain.com"
        identity = "binding user"
        password = <<< secret >>>
   sasl {
   }
   user {
        scope = "sub"
        access_positive = yes
    sasl {
    }
   }
   group {
        filter = "(objectclass=group)"
        scope = "sub"
        name_attribute = "cn"
        membership_attribute = "memberOf"
        cacheable_name = no
        cacheable_dn = no
   }
   client {
        filter = "(objectClass=radiusClient)"
        scope = "sub"
        base_dn = "ou=AADDC Users,dc=mydomain,dc=com"
   }
   profile {
   }
   options {
        ldap_debug = 40
        chase_referrals = yes
        rebind = yes
        net_timeout = 1
        res_timeout = 10
        srv_timelimit = 3
        idle = 60
        probes = 3
        interval = 3
   }
   tls {
        start_tls = no
        require_cert = "allow"
   }
  }
Creating attribute LDAP-Group
  instantiate {
  }
  # Instantiating module "attr_filter.post-proxy" from file /usr/local/etc/raddb/mods-enabled/attr_filter
reading pairlist file /usr/local/etc/raddb/mods-config/attr_filter/post-proxy
  # Instantiating module "attr_filter.pre-proxy" from file /usr/local/etc/raddb/mods-enabled/attr_filter
reading pairlist file /usr/local/etc/raddb/mods-config/attr_filter/pre-proxy
  # Instantiating module "attr_filter.access_reject" from file /usr/local/etc/raddb/mods-enabled/attr_filter
reading pairlist file /usr/local/etc/raddb/mods-config/attr_filter/access_reject
[/usr/local/etc/raddb/mods-config/attr_filter/access_reject]:11 Check item "FreeRADIUS-Response-Delay"  found in filter list for realm "DEFAULT".
[/usr/local/etc/raddb/mods-config/attr_filter/access_reject]:11 Check item "FreeRADIUS-Response-Delay-USec"     found in filter list for realm "DEFAULT".
  # Instantiating module "attr_filter.access_challenge" from file /usr/local/etc/raddb/mods-enabled/attr_filter
reading pairlist file /usr/local/etc/raddb/mods-config/attr_filter/access_challenge
  # Instantiating module "attr_filter.accounting_response" from file /usr/local/etc/raddb/mods-enabled/attr_filter
reading pairlist file /usr/local/etc/raddb/mods-config/attr_filter/accounting_response
  # Instantiating module "cache_eap" from file /usr/local/etc/raddb/mods-enabled/cache_eap
rlm_cache (cache_eap): Driver rlm_cache_rbtree (module rlm_cache_rbtree) loaded and linked
  # Instantiating module "detail" from file /usr/local/etc/raddb/mods-enabled/detail
  # Instantiating module "auth_log" from file /usr/local/etc/raddb/mods-enabled/detail.log
rlm_detail (auth_log): 'User-Password' suppressed, will not appear in detail output
  # Instantiating module "reply_log" from file /usr/local/etc/raddb/mods-enabled/detail.log
  # Instantiating module "pre_proxy_log" from file /usr/local/etc/raddb/mods-enabled/detail.log
  # Instantiating module "post_proxy_log" from file /usr/local/etc/raddb/mods-enabled/detail.log
  # Instantiating module "eap" from file /usr/local/etc/raddb/mods-enabled/eap
   # Linked to sub-module rlm_eap_md5
   # Linked to sub-module rlm_eap_leap
   # Linked to sub-module rlm_eap_gtc
   gtc {
        challenge = "Password: "
        auth_type = "PAP"
   }
   # Linked to sub-module rlm_eap_tls
   tls {
        tls = "tls-common"
   }
   tls-config tls-common {
        verify_depth = 0
        ca_path = "/usr/local/etc/raddb/certs"
        pem_file_type = yes
        private_key_file = "/usr/local/etc/raddb/certs/server.pem"
        certificate_file = "/usr/local/etc/raddb/certs/server.pem"
        ca_file = "/usr/local/etc/raddb/certs/ca.pem"
        private_key_password = <<< secret >>>
        dh_file = "/usr/local/etc/raddb/certs/dh"
        fragment_size = 1024
        include_length = yes
        auto_chain = yes
        check_crl = no
        check_all_crl = no
        cipher_list = "DEFAULT"
        cipher_server_preference = no
        ecdh_curve = "prime256v1"
        tls_max_version = ""
        tls_min_version = "1.0"
    cache {
        enable = yes
        lifetime = 24
        max_entries = 255
    }
    verify {
        skip_if_ocsp_ok = no
    }
    ocsp {
        enable = no
        override_cert_url = yes
        url = "http://<IP_ADDRESS>/ocsp/"
        use_nonce = yes
        timeout = 0
        softfail = no
    }
   }
   # Linked to sub-module rlm_eap_ttls
   ttls {
        tls = "tls-common"
        default_eap_type = "md5"
        copy_request_to_tunnel = no
        use_tunneled_reply = no
        virtual_server = "inner-tunnel"
        include_length = yes
        require_client_cert = no
   }
tls: Using cached TLS configuration from previous invocation
   # Linked to sub-module rlm_eap_peap
   peap {
        tls = "tls-common"
        default_eap_type = "mschapv2"
        copy_request_to_tunnel = no
        use_tunneled_reply = no
        proxy_tunneled_request_as_eap = yes
        virtual_server = "inner-tunnel"
        soh = no
        require_client_cert = no
   }
tls: Using cached TLS configuration from previous invocation
   # Linked to sub-module rlm_eap_mschapv2
   mschapv2 {
        with_ntdomain_hack = no
        send_error = no
   }
  # Instantiating module "expiration" from file /usr/local/etc/raddb/mods-enabled/expiration
  # Instantiating module "files" from file /usr/local/etc/raddb/mods-enabled/files
reading pairlist file /usr/local/etc/raddb/mods-config/files/authorize
reading pairlist file /usr/local/etc/raddb/mods-config/files/accounting
reading pairlist file /usr/local/etc/raddb/mods-config/files/pre-proxy
  # Instantiating module "linelog" from file /usr/local/etc/raddb/mods-enabled/linelog
  # Instantiating module "log_accounting" from file /usr/local/etc/raddb/mods-enabled/linelog
  # Instantiating module "logintime" from file /usr/local/etc/raddb/mods-enabled/logintime
  # Instantiating module "mschap" from file /usr/local/etc/raddb/mods-enabled/mschap
rlm_mschap (mschap): using internal authentication
  # Instantiating module "pap" from file /usr/local/etc/raddb/mods-enabled/pap
  # Instantiating module "etc_passwd" from file /usr/local/etc/raddb/mods-enabled/passwd
rlm_passwd: nfields: 3 keyfield 0(User-Name) listable: no
  # Instantiating module "preprocess" from file /usr/local/etc/raddb/mods-enabled/preprocess
reading pairlist file /usr/local/etc/raddb/mods-config/preprocess/huntgroups
reading pairlist file /usr/local/etc/raddb/mods-config/preprocess/hints
  # Instantiating module "IPASS" from file /usr/local/etc/raddb/mods-enabled/realm
  # Instantiating module "suffix" from file /usr/local/etc/raddb/mods-enabled/realm
  # Instantiating module "realmpercent" from file /usr/local/etc/raddb/mods-enabled/realm
  # Instantiating module "ntdomain" from file /usr/local/etc/raddb/mods-enabled/realm
  # Instantiating module "reject" from file /usr/local/etc/raddb/mods-enabled/always
  # Instantiating module "fail" from file /usr/local/etc/raddb/mods-enabled/always
  # Instantiating module "ok" from file /usr/local/etc/raddb/mods-enabled/always
  # Instantiating module "handled" from file /usr/local/etc/raddb/mods-enabled/always
  # Instantiating module "invalid" from file /usr/local/etc/raddb/mods-enabled/always
  # Instantiating module "userlock" from file /usr/local/etc/raddb/mods-enabled/always
  # Instantiating module "notfound" from file /usr/local/etc/raddb/mods-enabled/always
  # Instantiating module "noop" from file /usr/local/etc/raddb/mods-enabled/always
  # Instantiating module "updated" from file /usr/local/etc/raddb/mods-enabled/always
  # Instantiating module "daily" from file /usr/local/etc/raddb/mods-enabled/counter
rlm_counter: Current Time:<PHONE_NUMBER> [2019-05-06 12:34:27], Next reset<PHONE_NUMBER> [2019-05-07 00:00:00]
rlm_counter: add_defaults: Start
rlm_counter: DEFAULT1 set to<PHONE_NUMBER>
rlm_counter: DEFAULT2 set to<PHONE_NUMBER>
rlm_counter: add_defaults: End
  # Instantiating module "ldap" from file /usr/local/etc/raddb/mods-enabled/ldap
rlm_ldap: libldap vendor: OpenLDAP, version: 20447
   accounting {
        reference = "%{tolower:type.%{Acct-Status-Type}}"
   }
   post-auth {
        reference = "."
   }
rlm_ldap (ldap): Initialising connection pool
   pool {
        start = 5
        min = 3
        max = 32
        spare = 10
        uses = 0
        lifetime = 0
        cleanup_interval = 30
        idle_timeout = 60
        retry_delay = 30
        spread = no
   }
rlm_ldap (ldap): Opening additional connection (0), 1 of 32 pending slots used
rlm_ldap (ldap): Connecting to ldaps://ldapserver.mydomain.com:636
rlm_ldap (ldap): Waiting for bind result...
rlm_ldap (ldap): Bind successful
rlm_ldap (ldap): Opening additional connection (1), 1 of 31 pending slots used
rlm_ldap (ldap): Connecting to ldaps://ldapserver.mydomain.com:636
rlm_ldap (ldap): Waiting for bind result...
rlm_ldap (ldap): Bind successful
rlm_ldap (ldap): Opening additional connection (2), 1 of 30 pending slots used
rlm_ldap (ldap): Connecting to ldaps://ldapserver.mydomain.com:636
rlm_ldap (ldap): Waiting for bind result...
rlm_ldap (ldap): Bind successful
rlm_ldap (ldap): Opening additional connection (3), 1 of 29 pending slots used
rlm_ldap (ldap): Connecting to ldaps://ldapserver.mydomain.com:636
rlm_ldap (ldap): Waiting for bind result...
rlm_ldap (ldap): Bind successful
rlm_ldap (ldap): Opening additional connection (4), 1 of 28 pending slots used
rlm_ldap (ldap): Connecting to ldaps://ldapserver.mydomain.com:636
rlm_ldap (ldap): Waiting for bind result...
rlm_ldap (ldap): Bind successful
 } # modules
radiusd: #### Loading Virtual Servers ####
server { # from file /usr/local/etc/raddb/radiusd.conf
} # server
server inner-tunnel { # from file /usr/local/etc/raddb/sites-enabled/inner-tunnel
 # Loading authenticate {...}
 # Loading authorize {...}
Ignoring "sql" (see raddb/mods-available/README.rst)
 # Loading session {...}
 # Loading post-proxy {...}
 # Loading post-auth {...}
 # Skipping contents of 'if' as it is always 'false' -- /usr/local/etc/raddb/sites-enabled/inner-tunnel:330
} # server inner-tunnel
server default { # from file /usr/local/etc/raddb/sites-enabled/default
 # Loading authenticate {...}
 # Loading authorize {...}
 # Loading preacct {...}
 # Loading accounting {...}
 # Loading post-proxy {...}
 # Loading post-auth {...}
} # server default
radiusd: #### Opening IP addresses and Ports ####
listen {
        type = "auth"
        ipaddr = <IP_ADDRESS>
        port = 18120
}
listen {
        type = "auth"
        ipaddr = *
        port = 0
   limit {
        max_connections = 16
        lifetime = 0
        idle_timeout = 30
   }
}
listen {
        type = "acct"
        ipaddr = *
        port = 0
   limit {
        max_connections = 16
        lifetime = 0
        idle_timeout = 30
   }
}
listen {
        type = "auth"
        ipv6addr = ::
        port = 0
   limit {
        max_connections = 16
        lifetime = 0
        idle_timeout = 30
   }
}
listen {
        type = "acct"
        ipv6addr = ::
        port = 0
   limit {
        max_connections = 16
        lifetime = 0
        idle_timeout = 30
   }
}
Listening on auth address <IP_ADDRESS> port 18120 bound to server inner-tunnel
Listening on auth address * port 1812 bound to server default
Listening on acct address * port 1813 bound to server default
Listening on auth address :: port 1812 bound to server default
Listening on acct address :: port 1813 bound to server default
Listening on proxy address * port 14775
Listening on proxy address :: port 23511
Ready to process requests
(2) Received Access-Request Id 40 from <IP_ADDRESS>:46745 to <IP_ADDRESS>:1812 length 115
(2)   User-Name =<EMAIL_ADDRESS>(2)   Service-Type = Login-User
(2)   Framed-Protocol = 15
(2)   NAS-Identifier = "5ccc2416e06dc"
(2)   NAS-Port = 0
(2)   NAS-Port-Type = Ethernet
(2)   User-Password = "uni-ss_2"
(2) # Executing section authorize from file /usr/local/etc/raddb/sites-enabled/default
(2)   authorize {
(2)     policy filter_username {
(2)       if (&User-Name) {
(2)       if (&User-Name)  -> TRUE
(2)       if (&User-Name)  {
(2)         if (&User-Name =~ / /) {
(2)         if (&User-Name =~ / /)  -> FALSE
(2)         if (&User-Name =~ /@[^@]*@/ ) {
(2)         if (&User-Name =~ /@[^@]*@/ )  -> FALSE
(2)         if (&User-Name =~ /\.\./ ) {
(2)         if (&User-Name =~ /\.\./ )  -> FALSE
(2)         if ((&User-Name =~ /@/) && (&User-Name !~ /@(.+)\.(.+)$/))  {
(2)         if ((&User-Name =~ /@/) && (&User-Name !~ /@(.+)\.(.+)$/))   -> FALSE
(2)         if (&User-Name =~ /\.$/)  {
(2)         if (&User-Name =~ /\.$/)   -> FALSE
(2)         if (&User-Name =~<EMAIL_ADDRESS> {
(2)         if (&User-Name =~<EMAIL_ADDRESS>  -> FALSE
(2)       } # if (&User-Name)  = notfound
(2)     } # policy filter_username = notfound
(2)     [preprocess] = ok
(2)     [chap] = noop
(2)     [mschap] = noop
(2)     [digest] = noop
(2) suffix: Checking for suffix after "@"
(2) suffix: Looking up realm "mydomain.com" for User-Name =<EMAIL_ADDRESS>(2) suffix: No such realm "mydomain.com"
(2)     [suffix] = noop
(2) eap: No EAP-Message, not doing EAP
(2)     [eap] = noop
(2)     [files] = noop
rlm_ldap (ldap): Closing connection (7): Hit idle_timeout, was idle for 3948 seconds
rlm_ldap (ldap): You probably need to lower "min"
rlm_ldap (ldap): Closing connection (8): Hit idle_timeout, was idle for 3948 seconds
rlm_ldap (ldap): You probably need to lower "min"
rlm_ldap (ldap): 0 of 0 connections in use.  You  may need to increase "spare"
rlm_ldap (ldap): Opening additional connection (9), 1 of 32 pending slots used
rlm_ldap (ldap): Connecting to ldaps://ldapserver.mydomain.com:636
rlm_ldap (ldap): Waiting for bind result...
rlm_ldap (ldap): Bind successful
rlm_ldap (ldap): Reserved connection (9)
(2) ldap: Performing search in "ou=AADDC Users,dc=mydomain,dc=com" with filter "(userprincipalname=%{%{Stripped-User-Name}:-%{User-Name}}@mydomain.com)", scope "sub"
(2) ldap: Waiting for search result...
(2) ldap: Search returned no results
rlm_ldap (ldap): Released connection (9)
Need 2 more connections to reach min connections (3)
rlm_ldap (ldap): Opening additional connection (10), 1 of 31 pending slots used
rlm_ldap (ldap): Connecting to ldaps://ldapserver.mydomain.com:636
rlm_ldap (ldap): Waiting for bind result...
rlm_ldap (ldap): Bind successful
(2)     [ldap] = notfound
(2)     if ((ok || updated) && User-Password) {
(2)     if ((ok || updated) && User-Password)  -> FALSE
(2)     [expiration] = noop
(2)     [logintime] = noop
(2) pap: WARNING: No "known good" password found for the user.  Not setting Auth-Type
(2) pap: WARNING: Authentication will fail unless a "known good" password is available
(2)     [pap] = noop
(2)   } # authorize = ok
(2) ERROR: No Auth-Type found: rejecting the user via Post-Auth-Type = Reject
(2) Failed to authenticate the user
(2) Using Post-Auth-Type Reject
(2) # Executing group from file /usr/local/etc/raddb/sites-enabled/default
(2)   Post-Auth-Type REJECT {
(2) attr_filter.access_reject: EXPAND %{User-Name}
(2) attr_filter.access_reject:    --><EMAIL_ADDRESS>(2) attr_filter.access_reject: Matched entry DEFAULT at line 11
(2)     [attr_filter.access_reject] = updated
(2)     [eap] = noop
(2)     policy remove_reply_message_if_eap {
(2)       if (&reply:EAP-Message && &reply:Reply-Message) {
(2)       if (&reply:EAP-Message && &reply:Reply-Message)  -> FALSE
(2)       else {
(2)         [noop] = noop
(2)       } # else = noop
(2)     } # policy remove_reply_message_if_eap = noop
(2)   } # Post-Auth-Type REJECT = updated
(2) Login incorrect (No Auth-Type found: rejecting the user via Post-Auth-Type = Reject<EMAIL_ADDRESS>(from client RadiusTest port 0)
(2) Delaying response for 1.000000 seconds
Waking up in 0.9 seconds.
(2) Sending delayed response
(2) Sent Access-Reject Id 40 from <IP_ADDRESS>:1812 to <IP_ADDRESS>:46745 length 20
Waking up in 3.9 seconds.
(2) Cleaning up request packet ID 40 with timestamp +4503

This belongs to plugins and not core. Can you revert to version 1.9.0 and see if it works for you?
opnsense-revert -r 19.1.5 os-freeradius


Fix dependency check for libnl-route-3.0 in main meson.build file

The meson code to check if libnl-route-3 is available or not duplicates the code for libnl-cli-3.0.
Instead of nl_route_dep.found(), the build file checks for libnl-cli-3 (again).

Thank you for sending this PR. Could you add a DCO to the PR? If you go to the PR page and find the DCO line it has a link to suggest how to fit the problem.


Comments/docs cleanup

🚧

Codecov Report
Patch and project coverage have no change.

Comparison is base (ab3b5cb) 100.00% compared to head (ab122c3) 100.00%.

:mega: This organization is not using Codecov’s GitHub App Integration. We recommend you install it so Codecov can continue to function properly for your repositories. Learn more
Additional details and impacted files
@@             Coverage Diff             @@
##              main     #1196     +/-   ##
===========================================
  Coverage   100.00%   100.00%
===========================================
  Files           46        25     -21
  Lines         2652      1184   -1468
  Branches       396       134    -262
===========================================
- Hits          2652      1184   -1468

Flag
Coverage Δ

foundry
?

production
100.00% <ø> (ø)

reference
?

Flags with carried forward coverage won't be shown. Click here to find out more.
see 40 files with indirect coverage changes

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.


Pin contrib for ASB and update apache dubbo replacement to address CVE

Signed-off-by: Bernd Verst<EMAIL_ADDRESS>Description
Addresses a CVE in the Dubbo Binding. https://github.com/dapr/components-contrib/issues/2425

/ok-to-test

@ItalyPaleAle @jjcollinge @yaron2 using this PR to see if the ASB changes address the E2E test failure.

/ok-to-test

/ok-to-test