Skip to content

Conversation

@defung
Copy link
Contributor

@defung defung commented Nov 7, 2024

Been playing around with DPS recently, and came across a bug in docker-java (here).

If a container is configured with CAP_ADD or CAP_DROP in lowercase, DPS fails with a nasty exception (seen below).

While waiting for docker-java to fix this bug, I figured it would be good if we add some defensive coding here on this side, so it won't fail all DNS lookups if there's a single bad container.

Let me know what you think!

17:56:16.572 [virtual-186646 ] WAR c.m.d.server.dns.RequestHandlerDefault            l=101  m=solveAndSummarizeHandlingError  status=solverFailed, currentSolverTime=12, totalTime=12, solver=SolverDocker, query=query=A:zoneminder.dj-server.lan, eClass=RuntimeException, msg=com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `com.github.dockerjava.api.model.Capability` from String "net_raw": not one of the values accepted for Enum class: [ALL, SYS_BOOT, DAC_OVERRIDE, NET_RAW, BLOCK_SUSPEND, FOWNER, IPC_LOCK, IPC_OWNER, SYS_PACCT, NET_BIND_SERVICE, WAKE_ALARM, FSETID, DAC_READ_SEARCH, SYS_CHROOT, AUDIT_READ, SYS_RAWIO, SYS_ADMIN, KILL, MAC_ADMIN, SYS_RESOURCE, CHOWN, PERFMON, SETPCAP, SYS_PTRACE, NET_ADMIN, SETFCAP, SYS_NICE, LINUX_IMMUTABLE, BPF, AUDIT_CONTROL, LEASE, AUDIT_WRITE, SYS_MODULE, MKNOD, SYSLOG, MAC_OVERRIDE, SYS_TIME, SETGID, SETUID, CHECKPOINT_RESTORE, SYS_TTY_CONFIG, NET_BROADCAST]
 at [Source: UNKNOWN; byte offset: #UNKNOWN] (through reference chain: com.github.dockerjava.api.command.InspectContainerResponse["HostConfig"]->com.github.dockerjava.api.model.HostConfig["CapDrop"]->java.lang.Object[][0])
java.lang.RuntimeException: com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `com.github.dockerjava.api.model.Capability` from String "net_raw": not one of the values accepted for Enum class: [ALL, SYS_BOOT, DAC_OVERRIDE, NET_RAW, BLOCK_SUSPEND, FOWNER, IPC_LOCK, IPC_OWNER, SYS_PACCT, NET_BIND_SERVICE, WAKE_ALARM, FSETID, DAC_READ_SEARCH, SYS_CHROOT, AUDIT_READ, SYS_RAWIO, SYS_ADMIN, KILL, MAC_ADMIN, SYS_RESOURCE, CHOWN, PERFMON, SETPCAP, SYS_PTRACE, NET_ADMIN, SETFCAP, SYS_NICE, LINUX_IMMUTABLE, BPF, AUDIT_CONTROL, LEASE, AUDIT_WRITE, SYS_MODULE, MKNOD, SYSLOG, MAC_OVERRIDE, SYS_TIME, SETGID, SETUID, CHECKPOINT_RESTORE, SYS_TTY_CONFIG, NET_BROADCAST]
 at [Source: UNKNOWN; byte offset: #UNKNOWN] (through reference chain: com.github.dockerjava.api.command.InspectContainerResponse["HostConfig"]->com.github.dockerjava.api.model.HostConfig["CapDrop"]->java.lang.Object[][0])
	at com.github.dockerjava.core.DefaultInvocationBuilder.get(DefaultInvocationBuilder.java:77)
	at com.github.dockerjava.core.exec.InspectContainerCmdExec.execute(InspectContainerCmdExec.java:31)
	at com.github.dockerjava.core.exec.InspectContainerCmdExec.execute(InspectContainerCmdExec.java:13)
	at com.github.dockerjava.core.exec.AbstrSyncDockerCmdExec.exec(AbstrSyncDockerCmdExec.java:21)
	at com.github.dockerjava.core.command.AbstrDockerCmd.exec(AbstrDockerCmd.java:33)
	at com.github.dockerjava.core.command.InspectContainerCmdImpl.exec(InspectContainerCmdImpl.java:51)
	at com.mageddo.dnsproxyserver.docker.dataprovider.ContainerFacadeDefault.inspect(ContainerFacadeDefault.java:48)
	at com.mageddo.dnsproxyserver.solver.docker.dataprovider.ContainerDAODefault.lambda$findActiveContainersMatching$0(ContainerDAODefault.java:31)
	at [email protected]/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at [email protected]/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1708)
	at [email protected]/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at [email protected]/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at [email protected]/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575)
	at [email protected]/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260)
	at [email protected]/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616)
	at [email protected]/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622)
	at [email protected]/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627)
	at com.mageddo.dnsproxyserver.solver.docker.dataprovider.ContainerDAODefault.findActiveContainersMatching(ContainerDAODefault.java:34)
	at com.mageddo.dnsproxyserver.solver.docker.application.ContainerSolvingService.findBestMatch(ContainerSolvingService.java:39)
	at com.mageddo.dnsproxyserver.solver.SolverDocker.lambda$handle$0(SolverDocker.java:40)
	at com.mageddo.dnsproxyserver.solver.HostnameMatcher.match(HostnameMatcher.java:22)
	at com.mageddo.dnsproxyserver.solver.SolverDocker.handle(SolverDocker.java:39)
	at com.mageddo.dnsproxyserver.server.dns.RequestHandlerDefault.solveAndSummarize(RequestHandlerDefault.java:115)
	at com.mageddo.dnsproxyserver.server.dns.RequestHandlerDefault.solveAndSummarizeHandlingError(RequestHandlerDefault.java:99)
	at com.mageddo.dnsproxyserver.server.dns.RequestHandlerDefault.solve(RequestHandlerDefault.java:82)
	at com.mageddo.dnsproxyserver.server.dns.RequestHandlerDefault.solveFixingCacheTTL(RequestHandlerDefault.java:73)
	at com.mageddo.dnsproxyserver.solver.SolverCache.calculateValueWithoutLocks(SolverCache.java:70)
	at com.mageddo.dnsproxyserver.solver.SolverCache.handleRes(SolverCache.java:51)
	at com.mageddo.dnsproxyserver.solver.SolverCache.handle(SolverCache.java:40)
	at com.mageddo.dnsproxyserver.server.dns.RequestHandlerDefault.solveCaching(RequestHandlerDefault.java:66)
	at com.mageddo.dnsproxyserver.server.dns.RequestHandlerDefault.handle(RequestHandlerDefault.java:54)
	at com.mageddo.dnsserver.UDPServer.handle(UDPServer.java:55)
	at com.mageddo.dnsserver.UDPServer.lambda$start0$0(UDPServer.java:43)
	at [email protected]/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
	at [email protected]/java.util.concurrent.FutureTask.run(FutureTask.java:317)
	at [email protected]/java.lang.Thread.runWith(Thread.java:1596)
	at [email protected]/java.lang.VirtualThread.run(VirtualThread.java:309)
	at [email protected]/java.lang.VirtualThread$VThreadContinuation$1.run(VirtualThread.java:190)
Caused by: com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `com.github.dockerjava.api.model.Capability` from String "net_raw": not one of the values accepted for Enum class: [ALL, SYS_BOOT, DAC_OVERRIDE, NET_RAW, BLOCK_SUSPEND, FOWNER, IPC_LOCK, IPC_OWNER, SYS_PACCT, NET_BIND_SERVICE, WAKE_ALARM, FSETID, DAC_READ_SEARCH, SYS_CHROOT, AUDIT_READ, SYS_RAWIO, SYS_ADMIN, KILL, MAC_ADMIN, SYS_RESOURCE, CHOWN, PERFMON, SETPCAP, SYS_PTRACE, NET_ADMIN, SETFCAP, SYS_NICE, LINUX_IMMUTABLE, BPF, AUDIT_CONTROL, LEASE, AUDIT_WRITE, SYS_MODULE, MKNOD, SYSLOG, MAC_OVERRIDE, SYS_TIME, SETGID, SETUID, CHECKPOINT_RESTORE, SYS_TTY_CONFIG, NET_BROADCAST]
 at [Source: UNKNOWN; byte offset: #UNKNOWN] (through reference chain: com.github.dockerjava.api.command.InspectContainerResponse["HostConfig"]->com.github.dockerjava.api.model.HostConfig["CapDrop"]->java.lang.Object[][0])
	at com.fasterxml.jackson.databind.DeserializationContext.weirdStringException(DeserializationContext.java:1958)
	at com.fasterxml.jackson.databind.DeserializationContext.handleWeirdStringValue(DeserializationContext.java:1245)
	at com.fasterxml.jackson.databind.deser.std.EnumDeserializer._deserializeAltString(EnumDeserializer.java:447)
	at com.fasterxml.jackson.databind.deser.std.EnumDeserializer._fromString(EnumDeserializer.java:304)
	at com.fasterxml.jackson.databind.deser.std.EnumDeserializer.deserialize(EnumDeserializer.java:273)
	at com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer.deserialize(ObjectArrayDeserializer.java:218)
	at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:138)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:310)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)
	at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:138)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:310)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)
	at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:342)
	at com.fasterxml.jackson.databind.ObjectMapper._readValue(ObjectMapper.java:4881)
	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3035)
	at com.fasterxml.jackson.databind.ObjectMapper.treeToValue(ObjectMapper.java:3499)
	at com.github.dockerjava.core.DockerObjectDeserializer.deserialize(DockerClientConfig.java:132)
	at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:342)
	at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4905)
	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3893)
	at com.github.dockerjava.core.DefaultInvocationBuilder.get(DefaultInvocationBuilder.java:75)
	... 37 common frames omitted
17:56:16.572 [virtual-186646 ] WAR c.m.d.server.dns.RequestHandlerDefault            l=56   m=handle                          status=solverFailed, totalTime=13, eClass=NullPointerException, msg=null
java.lang.NullPointerException: null
	at com.mageddo.dnsproxyserver.server.dns.RequestHandlerDefault.solve(RequestHandlerDefault.java:83)
	at com.mageddo.dnsproxyserver.server.dns.RequestHandlerDefault.solveFixingCacheTTL(RequestHandlerDefault.java:73)
	at com.mageddo.dnsproxyserver.solver.SolverCache.calculateValueWithoutLocks(SolverCache.java:70)
	at com.mageddo.dnsproxyserver.solver.SolverCache.handleRes(SolverCache.java:51)
	at com.mageddo.dnsproxyserver.solver.SolverCache.handle(SolverCache.java:40)
	at com.mageddo.dnsproxyserver.server.dns.RequestHandlerDefault.solveCaching(RequestHandlerDefault.java:66)
	at com.mageddo.dnsproxyserver.server.dns.RequestHandlerDefault.handle(RequestHandlerDefault.java:54)
	at com.mageddo.dnsserver.UDPServer.handle(UDPServer.java:55)
	at com.mageddo.dnsserver.UDPServer.lambda$start0$0(UDPServer.java:43)
	at [email protected]/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
	at [email protected]/java.util.concurrent.FutureTask.run(FutureTask.java:317)
	at [email protected]/java.lang.Thread.runWith(Thread.java:1596)
	at [email protected]/java.lang.VirtualThread.run(VirtualThread.java:309)
	at [email protected]/java.lang.VirtualThread$VThreadContinuation$1.run(VirtualThread.java:190)

@mageddo mageddo changed the title fix inspect error Fixing container inspect error Nov 18, 2024
@mageddo mageddo changed the base branch from master to develop November 18, 2024 17:40
@mageddo mageddo merged commit 4e99395 into mageddo:develop Nov 18, 2024
1 check passed
@mageddo mageddo mentioned this pull request Nov 18, 2024
@defung defung deleted the fix_inspect_error branch November 29, 2024 01:46
ThisIsQasim added a commit to ThisIsQasim/dns-proxy-server that referenced this pull request Dec 11, 2025
* bump docker client library (mageddo#432)

* fix(github/templates): correct `dokcer` typo in bug report (mageddo#423)

* Fixing Native Image Reflection JSON Parsing (mageddo#437)

* fixing native image reflection

* updating the docs

* [Gradle Release Plugin] - new version commit:  '3.16.2-snapshot'.

* updating the developing docs

* new version (mageddo#438)

* fixing release note version (mageddo#439)

* DockerSolver: Leading with no IPV6 to answer  (mageddo#441)

* mageddo#428 bug fixed

* [Gradle Release Plugin] - new version commit:  '3.16.3-snapshot'.

* reverting change

* reverting change

* release notes

* Feature toggle to turn off Host Machine IP fallback (mageddo#443)

* creating feature toggle

* fixing tests

* all tests fixed

* introduced toggle check, tests are passing

* test created

* all tested

* adjustments

* formatting

* fixing test

* updating the docs about the new feature

* release notes

* [Gradle Release Plugin] - new version commit:  '3.17.0'.

* [Gradle Release Plugin] - new version commit:  '3.17.0-snapshot'.

* Do Refactoring encountered at mageddo#442  (mageddo#445)

* refactoring unnecessary parameter

* refactoring class packages

* isolating container solving in app layer

* a lot of refactoring trying to separate solver.docker module application from dataprovider impl

* app compiling errors fixed

* testing container mapper

* mustSolveSpecifiedNetworkFirst fixed

* refactoring test location

* new test

* creating new test

* new test

* fixing test

* checkstyle

* fixing bug

* new test

* new test

* new test

* new test

* new test

* new test

* new test

* comp test is not necessary anymore :)

* new test

* new test

* new test

* new test

* refactoring

* unnecessary classes

* refactoring packages

* refactoring packages

* refactoring to respect arc layers

* refactoring

* refactoring packages

* todo notes

* refactoring

* refactoring

* refactoring

* refactoring

* refactoring

* refactorting test

* adjusting tests

* creating tests

* refactoring

* implementting missing feature and testing

* refactoring

* refactoring name

* refactoring

* refactoring

* notes

* refactoring

* revert

* revert

* fixing package

* refactoring

* refactoring

* applying hexagonal arc

* created the mapper and tested it

* new test

* fixing bug

* fixme fixed

* release notes

* [Gradle Release Plugin] - new version commit:  '3.17.1-snapshot'.

* release notes

* triggering release

* Leading with no ipv6 response (mageddo#448)

* leading with no ipv6 response

* [Gradle Release Plugin] - new version commit:  '3.7.2-snapshot'.

* bug fixed

* adjusting release note

* [Gradle Release Plugin] - new version commit:  '3.17.2-snapshot'.

* Feat/440 refactoring (mageddo#447)

* refactoring package and names

* refactoring package and names

* isolation app from dataprovider

* refactrogin

* refactoring

* fixing compiling errors

* fixing compiling errors

* refactoring tests

* creating dao strategy to find configs

* partially refactoring to build config based on multiple sources

* refactoring

* refactoring

* configuring dagger

* fixing test

* implementing env mapper

* implementing the mapping

* mapping is done

* refactoring

* adjusting test

* refactoring package

* fixing test

* fixing test

* fixing config template defaults

* adjusting test isolation to unit test

* domain object validation

* refactoring rename

* refactoring rename

* testing daos order

* updating javadoc

* release notes

* [Gradle Release Plugin] - new version commit:  '3.17.3-snapshot'.

* typo fixing (mageddo#452)

* Parameters for Remote Solver Circuit Breaker  (mageddo#450)

* creating config class

* refactoring package and names

* refactoring package and names

* isolation app from dataprovider

* refactrogin

* refactoring

* fixing compiling errors

* fixing compiling errors

* refactoring tests

* creating dao strategy to find configs

* partially refactoring to build config based on multiple sources

* refactoring

* refactoring

* configuring dagger

* fixing test

* implementing env mapper

* implementing the mapping

* mapping is done

* refactoring

* adjusting test

* refactoring package

* fixing test

* fixing test

* fixing config template defaults

* adjusting test isolation to unit test

* domain object validation

* refactoring rename

* refactoring rename

* testing daos order

* updating javadoc

* adjusting configs

* Mapping solver remote

* mapping and testing remote config

* refactoring and fixing test

* adjusting tests

* mapping new config

* fixing tests

* adjusting json parsing and adjusting tests

* implementing and testing json parsing

* dynamize circuit breaker config and testing it

* adittional validation

* release notes

* [Gradle Release Plugin] - new version commit:  '3.8.0-snapshot'.

* [Gradle Release Plugin] - new version commit:  '3.18.0-snapshot'.

* updating the docs

* Fixing native image JSON config parse, bug introduced on 3.17.3 (mageddo#453)

* fixing native image json config parse

* release note

* [Gradle Release Plugin] - new version commit:  '3.18.1-snapshot'.

* JSON Parsing Fix (mageddo#454)

* fixing native image json parsing

* add info

* release notes

* [Gradle Release Plugin] - new version commit:  '3.18.2'.

* adjusting release notes

* [Gradle Release Plugin] - new version commit:  '3.18.2-snapshot'.

* configuring serializer/deserializer reflection

* Docs: Updating and Documenting about develop and release process (mageddo#457)

* new docs

* fixing uri

* generating the docs update, add docker

* fixing developing doc link (mageddo#458)

* Implementing mageddo#449  (mageddo#456)

* refactoring response

* documenting

* documenting

* extracting pure dns server to specific package

* refactoring packages

* refactoring packages

* todo notes

* testing

* splitting method

* refactoring

* refactoring

* refactoring

* refactoring

* refactoring

* refactoring package

* refactoring package

* fixme note

* adjusting the logs

* release notes

* [Gradle Release Plugin] - new version commit:  '3.18.3-snapshot'.

* release notes

* removing fixme

* mageddo#455 - Refactoring SolverRemote (mageddo#459)

* todos notes

* todos notes

* refactoring method

* refactoring

* extracting methods to classe

* extracting resolver addr ping and query reponse wait to a specific class

* formatting

* closing resources

* removing unused code

* splitting into to two methods

* treating npe

* better name

* add release notes

* [Gradle Release Plugin] - new version commit:  '3.18.4-snapshot'.

* Refactoring SolveRemote Module (mageddo#460)

* creating and binding service to clear the cache

* refactoring

* refactoriong

* refactoring and fixed test

* refactoring

* reactivated the tests

* refactoring and testing circuit breaker

* unnecessary test, the current active test shows that when a circuit exception or CircuitBreakerOpenException is thrown, it will return an empty result, not throws exception

* refactoring

* release notes

* [Gradle Release Plugin] - new version commit:  '3.18.5-snapshot'.

* refactoring

* revert

* PR: Remote Server Solver Cache Consistency Guarantee (mageddo#461)

* adjusting sheath logs

* fixed the test and implemented the feature

* implemented watch dog for the circuit breakers

* configuring the scheduler

* fixing singleton

* release notes

* todos

* todo

* testing

* testing

* disabling startup events on tests

* refactoring test

* fixing FIRST - Independent

* todo fixed

* [Gradle Release Plugin] - new version commit:  '3.19.0'. (mageddo#462)

* Resources usage optimization (mageddo#463)

* canceling ping thread

* release notes

* [Gradle Release Plugin] - new version commit:  '3.19.1'.

* adjusting release notes

* adjusting version

* referring the builder image source (mageddo#464)

* Issues template improvements (mageddo#466)

* adusting bug report

* feature request adjustments

* Docs Update (mageddo#467)

* Update _index.en.md

* adjusted the docs

* Solving Docker Containers from Hostname  Docs improvement (mageddo#468)

* new doc

* created doc explaining about docker solving

* adjusting the docs

* adjusting docs

* unnecessary linking

* updating the docs

* formatting

* adjusting the docs

* linking the tutorial

* adjusts

* updating the readme

* new title

* fixing broken link (mageddo#469)

* Config module domain refactoring (mageddo#470)

* refactoring model entity

* refactoring noRemoteServers entity model

* tests adjustments

* setup validations

* fixing tests

* fixing test

* fixing test

* release notes

* [Gradle Release Plugin] - new version commit:  '3.19.2-snapshot'.

* mageddo#471 - Fixing Help/Version Command Not Working Properly (mageddo#472)

* testing app exit

* testing and fixing bug

* fixing and testing mapper

* testing and fixing bug

* refactoring

* one more test

* fixing test

* release notes

* [Gradle Release Plugin] - new version commit:  '3.19.3-snapshot'.

* refactoring and testing

* fixing tests

* fixing test

* Fixing invalid IP parsing usecase (mageddo#476)

* fixing usecase invalid ip was being tried to be solved as hostname from internet

* release notes

* changing impl

* adjusting impl to fix test

* adjusting release notes

* [Gradle Release Plugin] - new version commit:  '3.19.4-snapshot'.

* mageddo#474 Fixing error when fallback to host machine IP  (mageddo#477)

* logging net name

* leading with no ipam config and testing

* dont use networks without ip

* release notes

* [Gradle Release Plugin] - new version commit:  '3.19.5-snapshot'.

* mageddo#465 DnsConfigurators: checking docker connection (mageddo#479)

* dummy delegte was created

* ensure docker connection before run docker cmd

* checking docker connection before try to use docker methods

* revert

* clean code

* release notes

* [Gradle Release Plugin] - new version commit:  '3.19.6-snapshot'.

* mageddo#427: Hotfix for ipv6 represented as subnet usecase (mageddo#481)

* Hotfix for ipv6 represented as subnet usecase

* release notes

* [Gradle Release Plugin] - new version commit:  '3.19.7-snapshot'.

* adjusting ref

* upgrade gradle

* upgrading gradle plugins

* upgrading jvm version

* upgrading mockito due jvm version is incompatible

* configuring deps

* mageddo#435 GraalVM Upgrade to 21 LTS (mageddo#482)

* release notes

* [Gradle Release Plugin] - new version commit:  '3.20.0-snapshot'.

* upgrading imagem builder

* upgrading graalvm version

* upgrading ci jdk

* fixing arch image (mageddo#489)

* fixing linux image ref (mageddo#490)

* fixing arch image

* fixing linux image ref

* mageddo#435 Fixing binaries builder (mageddo#492)

* fixing arch image

* fixing linux image ref

* configuring static binary

* adjusting command

* setup musl

* adjusting building image

* adjusting building image

* adjusting building image

* fixing jdk url

* adjusting building image

* adjusting building image

* adjusting building image

* adjusting building image

* adjusting building image

* adjusting building image

* adjusting building image

* adjusting building image

* adjusting building image

* adjusting building image

* adjusting building image

* adjusting build image

* adjusting building image

* adjusting building image

* adjusting building image

* adjusting building image

* setup aarch

* setup aarch

* setup aarch

* setup aarch

* setup aarch

* fixing amd64 builder

* fixing amd64 builder

* fixing amd64 builder

* fixing amd64 builder

* fixing aarch64 builder

* reverting ci

* clearing the code

* mageddo#285 AMD64 Static Binary and Docker Image (mageddo#493)

* setup static binary for linux amd64

* generating release on pullrequest

* [Gradle Release Plugin] - new version commit:  '3.20.1-snapshot'.

* release notes

* [Gradle Release Plugin] - new version commit:  '3.21.0-snapshot'.

* setup docker image

* fixing path

* adjusting amd64 static building

* adjusting amd64 static building

* adjusting amd64 static building

* adjusting amd64 static building

* adjusting amd64 static building

* upgrading running docker images

* create tmp dir when it not exists

* upgrading docker image

* release notes

* [Gradle Release Plugin] - new version commit:  '3.21.1-snapshot'.

* reverting feature

* release notes

* release notes

* release notes

* adjusting ci cd

* Fixing amd64 static docker image and min glibc to 2.15 (mageddo#494)

* [Gradle Release Plugin] - new version commit:  '3.21.2-snapshot'.

* Fixing amd64 static docker image

* setup image test

* fixing tmp dir

* fixing tmp dir

* setup debian 10 slim again for amd64

* creating hidden command to create tmp dir

* creating tmp dir at static docker image

* release notes

* update source list

* downgrading image builder

* simplify

* fixing unmet dep

* fixing unmet dep

* fixing unmet dep

* configuring aarch builder with debian stretch 9

* reconfigure cd

* change create-tmp-dir impl

* cd

* fixing test - port conflicting happening

* cd

* updating the min req (mageddo#495)

* mageddo#496: Fixing aarch binary not building  (mageddo#497)

* upgrading aarch64 builder image

* [Gradle Release Plugin] - new version commit:  '3.21.3-snapshot'.

* adjusting deps

* debian deps only worked on debian 11

* mageddo#473 Qemu upgrading  (mageddo#499)

* upgrading qemu version to fix the issue

* qemu upgrading

* [Gradle Release Plugin] - new version commit:  '3.22.0-snapshot'.

* machine upgrade not necessary anymore

* adjusting image

* setup new qemu emulator

* deleting unused code

* adjusting release notes

* Upgrading debian image to fix gcc error

failed to solve: process "/bin/sh -c apt-get update -y &&  apt-get install --force-yes -y build-essential curl &&  apt-get install --force-yes -y libz-dev zlib1g-dev zlib1g" did not complete successfully: exit code: 100

* Revert "deleting unused code"

This reverts commit bc2415d.

* Revert "setup new qemu emulator"

This reverts commit 14b65cb.

* adjusting release notes

* Automatically Close inactive waiting-feedback issues (mageddo#501)

* action was created

* bump build

* reverting cd trigger to master

* mageddo#435: Fixed Jar release which was broken when upgraded to java 21 at `3.22.0` (mageddo#502)

* add missing dep removed on the upgrade

* release notes

* [Gradle Release Plugin] - new version commit:  '3.22.1-snapshot'.

* Fixing graal-sdk dep binary impacts arm, windows, amd static generation (mageddo#503)

* adjusting deb url and trying to fix binary generation

* adjusting cd

* release notes

* [Gradle Release Plugin] - new version commit:  '3.22.2-snapshot'.

* reverting

* Java 21 upgrade fixes (mageddo#504)

* adjusting release notes

* generating jar for native image generation except amd 64 dynamic linking ,this jar excludes graalvm sdk deps

* using specific jar to generate native image, not the fat jar

* [Gradle Release Plugin] - new version commit:  '3.22.3-snapshot'.

* calling native image jar gradle task

* set main class manifest attribute

* fixing java.lang.SecurityException: Invalid signature file digest for Manifest main attributes

* updating release notes, reverting cd

* Build Aarch64 image with page size of 64k to Increase Compatibility (mageddo#506)

* fixing pagesize to 64k and add release notes

* [Gradle Release Plugin] - new version commit:  '3.23.0-snapshot'.

* Downgrade necessary libc version to run aarch binary (mageddo#508)

* image building fully working

* reverting source copy and simplify apt-get update fix

* switching docker image

* clearing the code

* release notes

* [Gradle Release Plugin] - new version commit:  '3.24.0-snapshot'.

* release notes

* Automatic latest version release process (mageddo#509)

* initial commit

* testing

* filtering

* with details

* new steps

* granting the required deps

* granting the required deps

* fixing echo

* fixing echo

* update

* update

* update

* update

* update

* define concurrency

* downloading latest version artifacts

* update

* update

* changes

* changes

* changes

* updates

* updates

* updates

* updates

* updates

* updates

* updates

* updates

* adjusting

* adjusting

* adjusting

* adjusting

* adjusting

* adjusting

* adjusting

* adjusting

* adjusting

* fixing attachments download

* clean the code

* docker image push steps

* make latest

* adjusting docker push

* adjusting docker push

* adjusting docker push

* clearing the code

* adjusting workflow triggers

* adjusting workflow triggers

* updating the release process (mageddo#510)

* Create FUNDING.yml (mageddo#512)

* mageddo#513 Refactoring  on ConfigJson Module (mageddo#514)

* testing no remote sovlers

* written failing test which found the bug

* test was wrong, feature is working

* extracting to specific class

* refactoring

* created tests

* Fixing `noRemoteServers` wasn't being respected at the JSON file mageddo#513 (mageddo#515)

* bug and test fixed

* fixing one more test

* release notes

* [Gradle Release Plugin] - new version commit:  '3.24.1-snapshot'.

* Mitigate arm release failure due inexistence of required debian package mageddo#517 (mageddo#518)

* try to download the deb from the two possible urls

* release notes

* [Gradle Release Plugin] - new version commit:  '3.24.2-snapshot'.

* release notes

* one more option

* Use Virtual Threads (mageddo#519)

* migrating thread pools to virtual threads

* using virtual thread executor when querying remote dns servers

* fixing test

* stress test related code

* configuring supervisor

* adjusting default dns

* created stress test

* created stress test

* creating docs of how to use stress tests

* more asserts

* creating collector structure

* skipping login page and set as admin

* configuring metrics

* fixing test conflict with running dps on machine

* configuring default dashboards

* changing filter time

* updating the docs

* adjusting the docs order

* linking doc

* clean code

* clean code

* release notes

* [Gradle Release Plugin] - new version commit:  '3.25.0-snapshot'.

* Ensure thread will have names at the logs, behavior changed since `3.25.0`  (mageddo#520)

* release notes

* [Gradle Release Plugin] - new version commit:  '3.25.1-snapshot'.

* upgrading logback

to be compatible with virtual threads at logging, see qos-ch/logback#737

* release notes

* Internal feature toggle to disable virtual threads (mageddo#521)

* toggle to swap between virtual and physical threads

* creating system property

* Migrating cache to caffeine (mageddo#523)

* testing cache ttl

* testing

* adjusting test

* release notes

* clean codfe

* clean code

* clean code

* [Gradle Release Plugin] - new version commit:  '3.25.2-snapshot'.

* Disable connection check at every query (mageddo#525)

* testing ping call

* creating toggle

* release notes

* [Gradle Release Plugin] - new version commit:  '3.25.3-snapshot'.

* testing ping on specified port

* testing ping api

* More Effective RemoteSolver Circuit Check mageddo#526 (mageddo#528)

* refactoring

* release notes, Log Remote Servers circuit states

* [Gradle Release Plugin] - new version commit:  '3.25.4-snapshot'.

* ignoring to half open and from half open to open transition

* refactoring

* refactoring

* comment

* add logs

* fixme notes

* comments

* adjusting fixme notes

* docs

* clean code

* Change the caching strategy to minimize the locks and prevent deadlocks mageddo#522 (mageddo#529)

* testing deadlock

* removing calculate code from lock statement to prevent deadlocks

* clean code

* use single threaded queue to performe cache clear to prevent deadlocks

* clear cache in background

* add asserts

* release notes

* [Gradle Release Plugin] - new version commit:  '3.25.5-snapshot'.

* change thread name

* change docs

* Refactoring SolverRemote module to implement circuit optimization mageddo#526 (mageddo#530)

* release notes

* refactoring and creating test for the use case

* refactoring

* clean code

* refactoring packages

* release notes

* refactoring

* creating temp test

* release notes

* [Gradle Release Plugin] - new version commit:  '3.25.6-snapshot'.

* SolverRemote: Exclude remote servers with open circuits. mageddo#526 (mageddo#531)

* release notes

* removing old behavior test and activating the new one

* refactoring and testing

* refactoring tests

* refactoring

* [Gradle Release Plugin] - new version commit:  '3.25.7-snapshot'.

* disabling feature

* release notes

* SolverRemote: Exclude remote servers with open circuits. mageddo#526 (mageddo#532)

* release notes

* [Gradle Release Plugin] - new version commit:  '3.25.8-snapshot'.

* implementing and adjusting test to the new behavior

* testing circuit status refresh

* refactoring names

* fixing scenario

* cd deps fix (mageddo#534)

* add missing package (mageddo#535)

* installing deps (mageddo#536)

* must differ types considering their generic types (mageddo#538)

* Creating flag to force dns server start even when in test mode mageddo#480 (mageddo#539)

* creating flag to forcec dns server start even when in test mode

* testing

* must build default json config with default values (mageddo#540)

* caching in test method, leading with usecase when a second thread is running the test (mageddo#541)

* Handling and logging fatal errors (mageddo#542)

* handling and logging fatal errors

* release notes

* [Gradle Release Plugin] - new version commit:  '3.25.9-snapshot'.

* Create `IntTests` suite, they are comp tests which can be run within native image mageddo#480 (mageddo#537)

* upgrading rest assured due groovy error with nativeTest task

Error encountered while parsing java.lang.invoke.MutableCallSite.setTarget(MutableCallSite.java:155)
Parsing context:
   at java.lang.invoke.SwitchPoint.invalidateAll(SwitchPoint.java:225)
   at org.codehaus.groovy.vmplugin.v8.IndyInterface.invalidateSwitchPoints(IndyInterface.java:186)
   at org.codehaus.groovy.vmplugin.v8.IndyInterface$$Lambda/0x00000007c2399648.updateConstantMetaClass(Unknown Source)
�

* ignoring rest assured error and leaving it fail at tests if the problematic code will be used anyway

* int test it's working

* clean code

* fixing bug

* configuring native test at the same source set as test

* enabling native image test

* adjusting reflection generation

* adjusts

* test is working

* adjusting conf path

* print test logs to console

* trying to get logs to check why test is failing

* finding 'stream closed' cause

* handling fatal errors

* testing fatal error handling

* delete hello world int test

* re-enabling restassured

* reverting restassured feature disabling

* clean code

* updating the docs about native image test

* refactoring

* refactoring

* refactoring

* refactoring

* explaining about the kind of tests

* [Gradle Release Plugin] - new version commit:  '3.25.9-snapshot'.

* fixing test

* release notes

* refactoring the docs

* unnecessary path

* clean code

* make test repeatable

* testing test class and refactoring

* refactoring class

* fixing test

* caching

* testing

* creating flags

* wasn't using the default config when file was empty

* make test repeatable

* hostnames list must be changable

* refactoring

* refactoring

* troubleshooting

* refactorings

* testing

* refactoring

* testing

* finally fixing bug which gets the wrong list

* leading with methods

* fixing field parsing

* reverting

* clean code

* Run the automated tests over the native image (mageddo#543)

* trying to exclude groovy from classpath

* enabling int tests at the ci

* enabling int tests

* caffeine native image reflection configs

* adjusting resources config

* adjusting resources include config

* add missing graal resources metadata

* clean code

* flag is now unnecessary

* release notes

* [Gradle Release Plugin] - new version commit:  '3.25.10-snapshot'.

* Feature Request: New Template proposal (mageddo#547)

* new template proposal

* specifying what is required and what is not

* adjusting labels and creating general content

* unify summary and motivation

* empty content

* Agnostic interface to support multiple circuit breaker strategies config (mageddo#550)

* setup resilience4j

* specifying circuit breaker strategy name

* creating agnostic interface to support multiple circuit breaker strategy types

* fixme

* [Gradle Release Plugin] - new version commit:  '3.25.11-snapshot'.

* release notes

* Creating an abstraction of circuit breaker implementation (mageddo#551)

* setup resilience4j

* specifying circuit breaker strategy name

* creating agnostic interface to support multiple circuit breaker strategy types

* fixme

* sppliting circuit breaker factory

* refactoring is done

* test is passing

* test is passing

* test is passing

* refactoring package

* [Gradle Release Plugin] - new version commit:  '3.25.11-snapshot'.

* release notes

* [Gradle Release Plugin] - new version commit:  '3.25.12-snapshot'.

* release notes

* fixme note

* fixme note

* Unifying circuit breaker abstractions  (mageddo#553)

* setup resilience4j

* specifying circuit breaker strategy name

* creating agnostic interface to support multiple circuit breaker strategy types

* fixme

* sppliting circuit breaker factory

* refactoring is done

* test is passing

* test is passing

* test is passing

* refactoring package

* [Gradle Release Plugin] - new version commit:  '3.25.11-snapshot'.

* release notes

* [Gradle Release Plugin] - new version commit:  '3.25.12-snapshot'.

* release notes

* fixme note

* fixme note

* refactoring to support multiple delegates

* refactoring name

* refactoring

* implementing non resilient strategy

* refactoring and test

* removing unnecessary test

* refactoring and fixing test

* release notes

* [Gradle Release Plugin] - new version commit:  '3.25.13-snapshot'.

* Fixing SolverRemote NPE mageddo#533 (mageddo#556)

* Fixing SolverRemote NPE mageddo#533

* creating test

* Specify config file path by env and fixing arm release (mageddo#557)

* Implementing env config file path option

* fixing compiling errors

* fixing test

* fixing test

* testing

* updating the docs

* [Gradle Release Plugin] - new version commit:  '3.26.0-snapshot'.

* release notes

* fixing arm build mirror and ajusting test

* new mirrors

* formatting

* refactoring

* clean code

* Wait module (mageddo#558)

* module to wait things to happen while checking on them

* testing the module

* fixing arm release (mageddo#559)

* found previously used arm deb build (mageddo#561)

* CommandLine module upgrades (mageddo#560)

* command lines module upgrades

* new tests

* missing dep

* missing dep

* release notes

* [Gradle Release Plugin] - new version commit:  '3.27.0-snapshot'.

* build optimizations (mageddo#562)

* build optmizations

* reduce int test time

* reduce int test time

* change level to b

* Specifying config source (mageddo#563)

* specifying config source

* adjusting tests

* updating test config files

* release notes

* Int test for all solvers (mageddo#564)

* release notes

* [Gradle Release Plugin] - new version commit:  '3.29.0-snapshot'.

* Creating support for testing DPS really like a integration test, crating int test for solver remote happy pah

* clean code

* clean code

* configuring templates

* configuring templates

* option to get answer ip

* comptest task wont run int test

* creating task to run all tests

* adjusting ci steps

* adjusting ci

* Eager module (mageddo#565)

* eager module classes

* eager module classes

* tests

* new json utils method

* release notes

* [Gradle Release Plugin] - new version commit:  '3.30.0-snapshot'.

* Improvements (mageddo#566)

* setup resilience4j

* specifying circuit breaker strategy name

* creating agnostic interface to support multiple circuit breaker strategy types

* fixme

* sppliting circuit breaker factory

* refactoring is done

* test is passing

* test is passing

* test is passing

* refactoring package

* [Gradle Release Plugin] - new version commit:  '3.25.11-snapshot'.

* release notes

* [Gradle Release Plugin] - new version commit:  '3.25.12-snapshot'.

* release notes

* fixme note

* fixme note

* refactoring to support multiple delegates

* refactoring name

* refactoring

* implementing non resilient strategy

* refactoring and test

* removing unnecessary test

* refactoring and fixing test

* creating a comp test to check integratio between modules

* new test detecting bug

* fixing bug and release notes

* [Gradle Release Plugin] - new version commit:  '3.25.14-snapshot'.

* comp test wont be able to be mocked, creating a int test instead

* creating dps binary executable finder

* configuring sandbox

* creating sandbox and tests

* fixing test

* setup execution

* creating a dummy signal based healthcheck

* creating a dummy signal based healthcheck

* creating a dummy signal based healthcheck

* registering and testing eager beans

* fixing test

* creating a lot of features related to watch process execution

* new way to excute command line  and specify stream handler

* killing processes after test execution

* fixing test

* fixing test

* fixing test

* fixing test

* generating all jar dep for int test automatically

* Fixing int test binary executor

* unnecessary method

* refactoring test to use json config file only

* all working

* adjusting test

* fixing test

* fixing bugs and creating tests

* refactoring inner class to upper

* reduce native image optimization for int test to reduce build time

* fixing test

* unnecessary

* clean code

* deleteing unnecessary file

* release notes

* [Gradle Release Plugin] - new version commit:  '3.29.0-snapshot'.

* Creating support for testing DPS really like a integration test, crating int test for solver remote happy pah

* clean code

* clean code

* configuring templates

* configuring templates

* option to get answer ip

* clean code

* deleting healthcheck feature

* using pair of right library

* unnecessary code (mageddo#567)

* Canary Rate Strategy Implementation (mageddo#570)

* creating empty strategy

* creating tests to validate reslience4j behavior

* more tests

* new test

* new tests and features

* notes

* refactoring and testing

* creating healthchecker

* refactoring

* implementing

* adjusting test

* clean code

* refactoring

* release notes

* [Gradle Release Plugin] - new version commit:  '3.30.1-snapshot'.

* Static tag for amd64 latest image (mageddo#575)

* generate arm tag for the latest release

* setup arm multiarch image

* removing image replace

* fixing broken links (mageddo#581)

* Detect which condition didn't match and log the cause when configuring DPS as default DNS (mageddo#585)

* adjusting dev

* refactoring file edition conditions to rule pattern this way I can detect which condition didn't match and log the cause

* [Gradle Release Plugin] - new version commit:  '3.30.2-snapshot'.

* release notes

* Solver Remote Refactoring (mageddo#589)

* refactoring solver remote class

* fixing compiling errors

* fixing compiling errors

* reverting

* fixing compiling errors

* fixing compiling errors

* release notes

* [Gradle Release Plugin] - new version commit:  '3.30.3-snapshot'.

* refactoring

* Adjusting binary generation to compatibility (mageddo#590)

* adjusting binary generation to compatibility

* [Gradle Release Plugin] - new version commit:  '3.30.4-snapshot'.

* release notes

* Bugfix: Treating npe at networks mapping when network hasn't a gateway ip mageddo#580 (mageddo#592)

* treating npe at network without gateway ip mapping

* release notes

* [Gradle Release Plugin] - new version commit:  '3.30.5-snapshot'.

* Exposing Canary Rate Threshold to be configurable and usable (mageddo#593)

* fetching files

* add missing file

* missing utils

* [Gradle Release Plugin] - new version commit:  '3.30.6-snapshot'.

* [Gradle Release Plugin] - new version commit:  '3.31.0-snapshot'.

* release notes

* creating docs

* add refs

* setup factory

* Canary Rate Threshold Circuit Breaker Strategy: All circuits open at start (mageddo#588)

* implementing circuit breaker factory

* fixmes

* testing

* testing

* setup strategy mapping

* fixing validation

* must call hotload method once

* adjusting logs

* add server address as circuit breaker name

* fixing compiling errors

* refactoring

* refactoring

* fixing test

* fixing test

* fixing test

* fixing test

* fixing test

* fixing test

* fixing test

* messages formatting and refactoring

* refactoring

* disabling metrics

* heating circuit breakers at app startup

* todos

* adjusts

* adjusts

* fixing tests

* fixing tests

* fixing tests

* testing

* item tick

* clearing todos

* [Gradle Release Plugin] - new version commit:  '3.31.1-snapshot'.

* release notes

* Feature request template update (mageddo#597)

* removing non goals, add alternatives sections

* add non goals back

* add non goals back

* Implementing Stub Solver but not exposing (mageddo#598)

* stub core implementing

* validating structures

* address mapper tested

* testing and refactoring

* refactoring

* testing ipv4 validator

* testing

* new test

* refactoring

* clean code

* docs

* clean code

* release notes

* [Gradle Release Plugin] - new version commit:  '3.32.0-snapshot'.

* clearing todos

* clean code

* adjusting version

* Configuring Stub Solver (mageddo#600)

* testing new method

* implementing solver

* testing stub solver

* tested

* configured new solver

* fixing bug

* implementing ip version check

* setup the docs

* add ref

* english

* updating the docs

* [Gradle Release Plugin] - new version commit:  '3.32.1-snapshot'.

* Exposing Stub Solver domain config (mageddo#601)

* refactoring

* adjusting test

* fixed test

* implementing solver stub json config

* adjsting test

* adjusting tests

* adjusting field

* fixing typo

* testing config mapper

* fixing bug

* creating docs

* implementing env

* fixing tests

* fixing bug

* implementing and testing config flag

* release notes

* [Gradle Release Plugin] - new version commit:  '3.32.2-snapshot'.

* Fixing container inspect error (mageddo#599)

* fix inspect error

* bump docker-java version

* Refactoring (mageddo#604)

* revert

* refactoring

* refactoring test

* breaking tests

* release notes

* [Gradle Release Plugin] - new version commit:  '3.32.3-snapshot'.

* updating readme running it examples

* updating release notes

* Docs Update: Introducing DNS Features List (mageddo#609)

* change to symlimk

* docs update

* configuring features list

* setup legend

* Changing aarch docker image (mageddo#613)

* changing aarch docker image

* release notes

* [Gradle Release Plugin] - new version commit:  '3.32.4-snapshot'.

* adjusting the image

* 594: Structure Domain Model config.Config as proposed in section "New Modeling Propose" (mageddo#614)

* testing

* tesing

* adjusting test

* config object new model

* config object new model

* config object new model

* config object new model

* config object new model

* config object new model

* config object new model

* config object new model

* config object new model

* release notes

* refactoring

* refactoring object structure

* fixing bug

* fixing test

* fixing test

* solver docker changes

* adapting solver docker and fixing compiling errors

* fixing tests

* fixing tests

* fixing tests

* fixing tests

* fixing tests

* fixing tests

* fixing tests

* fixing tests

* fixing tests

* missing obj

* fixing tests

* mapping new objects

* migrating log object

* refactoring log object

* refactoring local solver

* --amend

* fixing solver local mapping

* fixing remote server mapping

* fixing test

* fixing bug

* clean code

* release notes

* [Gradle Release Plugin] - new version commit:  '3.32.5-snapshot'.

* V3 artifact actions upgrade (mageddo#619)

* testing

* tesing

* upgrading actions artifact

see https://github.blog/changelog/2024-04-16-deprecation-notice-v3-of-the-artifact-actions/

* adjusting test

* Refactoring | Create packages for each config data format module (mageddo#622)

* clean code

* the current env will be refactored to legacy env

* refactoring packages to clean arch

* refactoring

* refactoring

* refactoring

* refactoring

* refactoring

* fixing test

* fixing reflection config

* refactoring packages

* [Gradle Release Plugin] - new version commit:  '3.32.6-snapshot'.

* release notes

* DatFormat Definition, Yaml and Json Parsers (mageddo#632)

Implementing part of mageddo#594

* Refactoring mageddo#594 (mageddo#633)

refactoring

* Config v3 - EnvConverter mageddo#594 (mageddo#635)

* Bugfix: Fixing domain env variable setting (mageddo#636)

Fixing mageddo#628

* Upgrade docker-java from 3.3.4 to 3.7.0 and API version from 1.24 to 1.44 (#1)

* Initial plan

* Upgrade Docker Java client from 3.3.4 to 3.7.0

- Updated docker-java-core and docker-java-transport-httpclient5 to 3.7.0
- Fixed test compatibility issue with stricter Mockito stubbing in CircuitBreakerDelegateSelfObservableTest
- All builds and tests passing successfully
- Updated RELEASE-NOTES.md with upgrade details

Co-authored-by: ThisIsQasim <[email protected]>

* Address code review feedback: improve test code organization

Co-authored-by: ThisIsQasim <[email protected]>

* Update Docker Remote API version from 1.24 to 1.44

- Updated RemoteApiVersion from VERSION_1_24 to VERSION_1_44
- This brings support for Docker Engine 24.x+ features
- Increased test sleep time from 1500ms to 2000ms to address timing flakiness
- Updated RELEASE-NOTES.md with API version upgrade details

Co-authored-by: ThisIsQasim <[email protected]>

* Remove comments and set version to 3.33.0 in release notes

Co-authored-by: ThisIsQasim <[email protected]>

* Update Docker Java client and API version

Updated Docker Remote API version for modern feature support.

* revert

---------

Co-authored-by: copilot-swe-agent[bot] <[email protected]>
Co-authored-by: ThisIsQasim <[email protected]>

---------

Co-authored-by: Joda Stößer <[email protected]>
Co-authored-by: Elvis Souza <[email protected]>
Co-authored-by: Dennis Fung <[email protected]>
Co-authored-by: Copilot <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants