Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Caused by: java.lang.RuntimeException: java.io.IOException: com.sun.jna.LastErrorException: [2] No such file or directory #96

Open
cmoulliard opened this issue Nov 25, 2024 · 4 comments

Comments

@cmoulliard
Copy link
Member

cmoulliard commented Nov 25, 2024

Issue

I did a test using a fresh build on https://github.com/BarDweller/java-buildpack-client/tree/podman-workaround using build-me example and local podman 5.2.5 on macos and we got this error:

set -x IMAGE_REF my-quarkus-app
set -x DOCKER_HOST "unix:///run/user/501/podman/podman.sock"
set -x PROJECT_PATH "/Users/cmoullia/code/snowdrop/java-buildpack-client/samples/hello-quarkus/"

mvn clean compile exec:java

[INFO] --- exec:3.5.0:java (default-cli) @ build-me ---
[dev.snowdrop.BuildMe.main()] DEBUG dev.snowdrop.buildpack.docker.DockerClientUtils - Using dockerhost unix:///run/user/501/podman/podman.sock
[dev.snowdrop.BuildMe.main()] INFO org.apache.hc.client5.http.impl.classic.HttpRequestRetryExec - Recoverable I/O exception (java.io.IOException) caught when processing request to {}->unix://localhost:2375
[WARNING] 
dev.snowdrop.buildpack.BuildpackException: Unable to verify docker settings
    at dev.snowdrop.buildpack.config.DockerConfig.<init> (DockerConfig.java:56)
    at dev.snowdrop.buildpack.config.EditableDockerConfig.<init> (EditableDockerConfig.java:14)
    at dev.snowdrop.buildpack.config.DockerConfigBuilder.build (DockerConfigBuilder.java:58)
    at dev.snowdrop.buildpack.BuildConfigFluentImpl$DockerConfigNestedImpl.and (BuildConfigFluentImpl.java:595)
    at dev.snowdrop.buildpack.BuildConfigFluentImpl$DockerConfigNestedImpl.endDockerConfig (BuildConfigFluentImpl.java:598)
    at dev.snowdrop.BuildMe.main (BuildMe.java:54)
    at org.codehaus.mojo.exec.ExecJavaMojo.doMain (ExecJavaMojo.java:375)
    at org.codehaus.mojo.exec.ExecJavaMojo.doExec (ExecJavaMojo.java:364)
    at org.codehaus.mojo.exec.ExecJavaMojo.lambda$execute$0 (ExecJavaMojo.java:286)
    at java.lang.Thread.run (Thread.java:1583)
Caused by: java.lang.RuntimeException: java.io.IOException: com.sun.jna.LastErrorException: [2] No such file or directory
    at com.github.dockerjava.httpclient5.ApacheDockerHttpClientImpl.execute (ApacheDockerHttpClientImpl.java:195)
    at com.github.dockerjava.httpclient5.ApacheDockerHttpClient.execute (ApacheDockerHttpClient.java:9)
    at com.github.dockerjava.core.DefaultInvocationBuilder.execute (DefaultInvocationBuilder.java:228)
    at com.github.dockerjava.core.DefaultInvocationBuilder.get (DefaultInvocationBuilder.java:202)
    at com.github.dockerjava.core.exec.PingCmdExec.execute (PingCmdExec.java:26)
    at com.github.dockerjava.core.exec.PingCmdExec.execute (PingCmdExec.java:12)
    at com.github.dockerjava.core.exec.AbstrSyncDockerCmdExec.exec (AbstrSyncDockerCmdExec.java:21)
    at com.github.dockerjava.core.command.AbstrDockerCmd.exec (AbstrDockerCmd.java:33)
    at dev.snowdrop.buildpack.config.DockerConfig.<init> (DockerConfig.java:54)
    at dev.snowdrop.buildpack.config.EditableDockerConfig.<init> (EditableDockerConfig.java:14)
    at dev.snowdrop.buildpack.config.DockerConfigBuilder.build (DockerConfigBuilder.java:58)
    at dev.snowdrop.buildpack.BuildConfigFluentImpl$DockerConfigNestedImpl.and (BuildConfigFluentImpl.java:595)
    at dev.snowdrop.buildpack.BuildConfigFluentImpl$DockerConfigNestedImpl.endDockerConfig (BuildConfigFluentImpl.java:598)
    at dev.snowdrop.BuildMe.main (BuildMe.java:54)
    at org.codehaus.mojo.exec.ExecJavaMojo.doMain (ExecJavaMojo.java:375)
    at org.codehaus.mojo.exec.ExecJavaMojo.doExec (ExecJavaMojo.java:364)
    at org.codehaus.mojo.exec.ExecJavaMojo.lambda$execute$0 (ExecJavaMojo.java:286)
    at java.lang.Thread.run (Thread.java:1583)
Caused by: java.io.IOException: com.sun.jna.LastErrorException: [2] No such file or directory
    at com.github.dockerjava.transport.DomainSocket.<init> (DomainSocket.java:63)
    at com.github.dockerjava.transport.BsdDomainSocket.<init> (BsdDomainSocket.java:43)
    at com.github.dockerjava.transport.DomainSocket.get (DomainSocket.java:138)
    at com.github.dockerjava.transport.UnixSocket.get (UnixSocket.java:29)
    at com.github.dockerjava.httpclient5.ApacheDockerHttpClientImpl$2.createSocket (ApacheDockerHttpClientImpl.java:153)
    at org.apache.hc.client5.http.impl.io.DefaultHttpClientConnectionOperator.connect (DefaultHttpClientConnectionOperator.java:125)
    at org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager.connect (PoolingHttpClientConnectionManager.java:409)
    at org.apache.hc.client5.http.impl.classic.InternalExecRuntime.connectEndpoint (InternalExecRuntime.java:164)
    at org.apache.hc.client5.http.impl.classic.InternalExecRuntime.connectEndpoint (InternalExecRuntime.java:174)
    at org.apache.hc.client5.http.impl.classic.ConnectExec.execute (ConnectExec.java:135)
    at org.apache.hc.client5.http.impl.classic.ExecChainElement.execute (ExecChainElement.java:51)
    at org.apache.hc.client5.http.impl.classic.ExecChainElement$1.proceed (ExecChainElement.java:57)
    at org.apache.hc.client5.http.impl.classic.ProtocolExec.execute (ProtocolExec.java:172)
    at org.apache.hc.client5.http.impl.classic.ExecChainElement.execute (ExecChainElement.java:51)
    at org.apache.hc.client5.http.impl.classic.ExecChainElement$1.proceed (ExecChainElement.java:57)
    at org.apache.hc.client5.http.impl.classic.HttpRequestRetryExec.execute (HttpRequestRetryExec.java:93)
    at org.apache.hc.client5.http.impl.classic.ExecChainElement.execute (ExecChainElement.java:51)
    at org.apache.hc.client5.http.impl.classic.ExecChainElement$1.proceed (ExecChainElement.java:57)
    at org.apache.hc.client5.http.impl.classic.ContentCompressionExec.execute (ContentCompressionExec.java:128)
    at org.apache.hc.client5.http.impl.classic.ExecChainElement.execute (ExecChainElement.java:51)
    at org.apache.hc.client5.http.impl.classic.ExecChainElement$1.proceed (ExecChainElement.java:57)
    at org.apache.hc.client5.http.impl.classic.RedirectExec.execute (RedirectExec.java:116)
    at org.apache.hc.client5.http.impl.classic.ExecChainElement.execute (ExecChainElement.java:51)
    at org.apache.hc.client5.http.impl.classic.InternalHttpClient.doExecute (InternalHttpClient.java:178)
    at org.apache.hc.client5.http.impl.classic.CloseableHttpClient.execute (CloseableHttpClient.java:67)
    at com.github.dockerjava.httpclient5.ApacheDockerHttpClientImpl.execute (ApacheDockerHttpClientImpl.java:191)
    at com.github.dockerjava.httpclient5.ApacheDockerHttpClient.execute (ApacheDockerHttpClient.java:9)
    at com.github.dockerjava.core.DefaultInvocationBuilder.execute (DefaultInvocationBuilder.java:228)
    at com.github.dockerjava.core.DefaultInvocationBuilder.get (DefaultInvocationBuilder.java:202)
    at com.github.dockerjava.core.exec.PingCmdExec.execute (PingCmdExec.java:26)
    at com.github.dockerjava.core.exec.PingCmdExec.execute (PingCmdExec.java:12)
    at com.github.dockerjava.core.exec.AbstrSyncDockerCmdExec.exec (AbstrSyncDockerCmdExec.java:21)
    at com.github.dockerjava.core.command.AbstrDockerCmd.exec (AbstrDockerCmd.java:33)
    at dev.snowdrop.buildpack.config.DockerConfig.<init> (DockerConfig.java:54)
    at dev.snowdrop.buildpack.config.EditableDockerConfig.<init> (EditableDockerConfig.java:14)
    at dev.snowdrop.buildpack.config.DockerConfigBuilder.build (DockerConfigBuilder.java:58)
    at dev.snowdrop.buildpack.BuildConfigFluentImpl$DockerConfigNestedImpl.and (BuildConfigFluentImpl.java:595)
    at dev.snowdrop.buildpack.BuildConfigFluentImpl$DockerConfigNestedImpl.endDockerConfig (BuildConfigFluentImpl.java:598)
    at dev.snowdrop.BuildMe.main (BuildMe.java:54)
    at org.codehaus.mojo.exec.ExecJavaMojo.doMain (ExecJavaMojo.java:375)
    at org.codehaus.mojo.exec.ExecJavaMojo.doExec (ExecJavaMojo.java:364)
    at org.codehaus.mojo.exec.ExecJavaMojo.lambda$execute$0 (ExecJavaMojo.java:286)
    at java.lang.Thread.run (Thread.java:1583)
Caused by: com.sun.jna.LastErrorException: [2] No such file or directory
    at com.github.dockerjava.transport.BsdDomainSocket.connect (Native Method)
    at com.github.dockerjava.transport.BsdDomainSocket.connect (BsdDomainSocket.java:49)
    at com.github.dockerjava.transport.DomainSocket.open (DomainSocket.java:69)
    at com.github.dockerjava.transport.DomainSocket.<init> (DomainSocket.java:59)
    at com.github.dockerjava.transport.BsdDomainSocket.<init> (BsdDomainSocket.java:43)
    at com.github.dockerjava.transport.DomainSocket.get (DomainSocket.java:138)
    at com.github.dockerjava.transport.UnixSocket.get (UnixSocket.java:29)
    at com.github.dockerjava.httpclient5.ApacheDockerHttpClientImpl$2.createSocket (ApacheDockerHttpClientImpl.java:153)
    at org.apache.hc.client5.http.impl.io.DefaultHttpClientConnectionOperator.connect (DefaultHttpClientConnectionOperator.java:125)
    at org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager.connect (PoolingHttpClientConnectionManager.java:409)
    at org.apache.hc.client5.http.impl.classic.InternalExecRuntime.connectEndpoint (InternalExecRuntime.java:164)
    at org.apache.hc.client5.http.impl.classic.InternalExecRuntime.connectEndpoint (InternalExecRuntime.java:174)
    at org.apache.hc.client5.http.impl.classic.ConnectExec.execute (ConnectExec.java:135)
    at org.apache.hc.client5.http.impl.classic.ExecChainElement.execute (ExecChainElement.java:51)
    at org.apache.hc.client5.http.impl.classic.ExecChainElement$1.proceed (ExecChainElement.java:57)
    at org.apache.hc.client5.http.impl.classic.ProtocolExec.execute (ProtocolExec.java:172)
    at org.apache.hc.client5.http.impl.classic.ExecChainElement.execute (ExecChainElement.java:51)
    at org.apache.hc.client5.http.impl.classic.ExecChainElement$1.proceed (ExecChainElement.java:57)
    at org.apache.hc.client5.http.impl.classic.HttpRequestRetryExec.execute (HttpRequestRetryExec.java:93)
    at org.apache.hc.client5.http.impl.classic.ExecChainElement.execute (ExecChainElement.java:51)
    at org.apache.hc.client5.http.impl.classic.ExecChainElement$1.proceed (ExecChainElement.java:57)
    at org.apache.hc.client5.http.impl.classic.ContentCompressionExec.execute (ContentCompressionExec.java:128)
    at org.apache.hc.client5.http.impl.classic.ExecChainElement.execute (ExecChainElement.java:51)
    at org.apache.hc.client5.http.impl.classic.ExecChainElement$1.proceed (ExecChainElement.java:57)
    at org.apache.hc.client5.http.impl.classic.RedirectExec.execute (RedirectExec.java:116)
    at org.apache.hc.client5.http.impl.classic.ExecChainElement.execute (ExecChainElement.java:51)
    at org.apache.hc.client5.http.impl.classic.InternalHttpClient.doExecute (InternalHttpClient.java:178)
    at org.apache.hc.client5.http.impl.classic.CloseableHttpClient.execute (CloseableHttpClient.java:67)
    at com.github.dockerjava.httpclient5.ApacheDockerHttpClientImpl.execute (ApacheDockerHttpClientImpl.java:191)
    at com.github.dockerjava.httpclient5.ApacheDockerHttpClient.execute (ApacheDockerHttpClient.java:9)
    at com.github.dockerjava.core.DefaultInvocationBuilder.execute (DefaultInvocationBuilder.java:228)
    at com.github.dockerjava.core.DefaultInvocationBuilder.get (DefaultInvocationBuilder.java:202)
    at com.github.dockerjava.core.exec.PingCmdExec.execute (PingCmdExec.java:26)
    at com.github.dockerjava.core.exec.PingCmdExec.execute (PingCmdExec.java:12)
    at com.github.dockerjava.core.exec.AbstrSyncDockerCmdExec.exec (AbstrSyncDockerCmdExec.java:21)
    at com.github.dockerjava.core.command.AbstrDockerCmd.exec (AbstrDockerCmd.java:33)
    at dev.snowdrop.buildpack.config.DockerConfig.<init> (DockerConfig.java:54)
    at dev.snowdrop.buildpack.config.EditableDockerConfig.<init> (EditableDockerConfig.java:14)
    at dev.snowdrop.buildpack.config.DockerConfigBuilder.build (DockerConfigBuilder.java:58)
    at dev.snowdrop.buildpack.BuildConfigFluentImpl$DockerConfigNestedImpl.and (BuildConfigFluentImpl.java:595)
    at dev.snowdrop.buildpack.BuildConfigFluentImpl$DockerConfigNestedImpl.endDockerConfig (BuildConfigFluentImpl.java:598)
    at dev.snowdrop.BuildMe.main (BuildMe.java:54)
    at org.codehaus.mojo.exec.ExecJavaMojo.doMain (ExecJavaMojo.java:375)
    at org.codehaus.mojo.exec.ExecJavaMojo.doExec (ExecJavaMojo.java:364)
    at org.codehaus.mojo.exec.ExecJavaMojo.lambda$execute$0 (ExecJavaMojo.java:286)
    at java.lang.Thread.run (Thread.java:1583)
[INFO] ------------------------------------------------------------------------

The issue looks similar to this one: docker-java/docker-java#1956

@BarDweller

@cmoulliard
Copy link
Member Author

cmoulliard commented Nov 25, 2024

The problem can be fixed if the users know where, outside of the fedora VM created by podman on macos, they can find the following podman.sock file

ls -la ~/.local/share/containers/podman/machine/podman.sock
lrwxr-xr-x@ 1 cmoullia  staff  87  5 Nov 13:18 /Users/cmoullia/.local/share/containers/podman/machine/podman.sock@ -> /var/folders/28/g86pgjxj0wl1nkd_85c2krjw0000gn/T/podman/podman-machine-default-api.sock

If they set the DOCKER_HOST env var and run again the command, then they will got

export DOCKER_HOST="unix:///Users/cmoullia/.local/share/containers/podman/machine/podman.sock"
❯ mvn clean compile exec:java
[dev.snowdrop.BuildMe.main()] DEBUG dev.snowdrop.buildpack.docker.DockerClientUtils - Using dockerhost unix:///Users/cmoullia/.local/share/containers/podman/machine/podman.sock
[dev.snowdrop.BuildMe.main()] DEBUG com.github.dockerjava.core.command.AbstrDockerCmd - Cmd: 
[dev.snowdrop.BuildMe.main()] DEBUG com.github.dockerjava.core.command.AbstrDockerCmd - Cmd: 
[dev.snowdrop.BuildMe.main()] INFO dev.snowdrop.buildpack.BuildpackBuild - Buildpack build requested with config: 
 - builder docker.io/paketocommunity/builder-ubi-base:latest
 - logLevel debug
[dev.snowdrop.BuildMe.main()] INFO dev.snowdrop.buildpack.BuildpackBuild - Pulling Builder image
[dev.snowdrop.BuildMe.main()] DEBUG com.github.dockerjava.core.command.AbstrDockerCmd - Cmd: ListImagesCmdImpl[filters=com.github.dockerjava.core.util.FiltersBuilder@0,imageNameFilter=<null>,showAll=false]
[dev.snowdrop.BuildMe.main()] DEBUG dev.snowdrop.buildpack.docker.ImageUtils - Requested Images [docker.io/paketocommunity/builder-ubi-base:latest]
...

We got nevertheless a new issue

[dev.snowdrop.BuildMe.main()] INFO dev.snowdrop.buildpack.lifecycle.LifecyclePhaseFactory - - temporary build volumes removed
[dev.snowdrop.BuildMe.main()] DEBUG com.github.dockerjava.core.command.AbstrDockerCmd - Cmd: <null>,docker.io/buildpack-ephemeralbuilder-fmuegffn:latest,<null>
[WARNING] 
com.github.dockerjava.api.exception.InternalServerErrorException: 
Status 500: {
"cause":"operation not supported",
"message":"container create: statfs /Users/cmoullia/.local/share/containers/podman/machine/podman.sock: operation not supported",
"response":500}

    at com.github.dockerjava.core.DefaultInvocationBuilder.execute (DefaultInvocationBuilder.java:247)
    at com.github.dockerjava.core.DefaultInvocationBuilder.post (DefaultInvocationBuilder.java:124)
    at com.github.dockerjava.core.exec.CreateContainerCmdExec.execute (CreateContainerCmdExec.java:37)
    at com.github.dockerjava.core.exec.CreateContainerCmdExec.execute (CreateContainerCmdExec.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.CreateContainerCmdImpl.exec (CreateContainerCmdImpl.java:608)
    at dev.snowdrop.buildpack.docker.ContainerUtils.createContainerInternal (ContainerUtils.java:117)
    at dev.snowdrop.buildpack.docker.ContainerUtils.createContainer (ContainerUtils.java:72)
    at dev.snowdrop.buildpack.lifecycle.LifecyclePhaseFactory.getContainerForPhase (LifecyclePhaseFactory.java:98)
    at dev.snowdrop.buildpack.lifecycle.phases.Analyzer.runPhase (Analyzer.java:66)
    at dev.snowdrop.buildpack.lifecycle.LifecycleExecutor.runPhase (LifecycleExecutor.java:152)
    at dev.snowdrop.buildpack.lifecycle.LifecycleExecutor.execute (LifecycleExecutor.java:88)

If I execute maven in intellij we got a more verbose response message

com.github.dockerjava.api.exception.InternalServerErrorException: Status 500:
"cause":"operation not supported",
"message":"make cli opts(): making volume mountpoint for volume /var/folders/28/g86pgjxj0wl1nkd_85c2krjw0000gn/T/podman/podman-machine-default-api.sock: mkdir /var/folders/28/g86pgjxj0wl1nkd_85c2krjw0000gn/T/podman/podman-machine-default-api.sock: operation not supported",
"response":500}

and

[dev.snowdrop.BuildMe.main()] INFO dev.snowdrop.buildpack.lifecycle.LifecyclePhaseFactory - - temporary build volumes removed
[dev.snowdrop.BuildMe.main()] DEBUG com.github.dockerjava.core.command.AbstrDockerCmd - Cmd: <null>,docker.io/buildpack-ephemeralbuilder-zmubdepw:latest,<null>
[WARNING] 
com.github.dockerjava.api.exception.InternalServerErrorException: Status 500: {"cause":"operation not supported","message":"make cli opts(): making volume mountpoint for volume /var/folders/28/g86pgjxj0wl1nkd_85c2krjw0000gn/T/podman/podman-machine-default-api.sock: mkdir /var/folders/28/g86pgjxj0wl1nkd_85c2krjw0000gn/T/podman/podman-machine-default-api.sock: operation not supported","response":500}
    at com.github.dockerjava.core.DefaultInvocationBuilder.execute (DefaultInvocationBuilder.java:247)
    at com.github.dockerjava.core.DefaultInvocationBuilder.post (DefaultInvocationBuilder.java:124)
    at com.github.dockerjava.core.exec.CreateContainerCmdExec.execute (CreateContainerCmdExec.java:37)
    at com.github.dockerjava.core.exec.CreateContainerCmdExec.execute (CreateContainerCmdExec.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.CreateContainerCmdImpl.exec (CreateContainerCmdImpl.java:608)
    at dev.snowdrop.buildpack.docker.ContainerUtils.createContainerInternal (ContainerUtils.java:117)
    at dev.snowdrop.buildpack.docker.ContainerUtils.createContainer (ContainerUtils.java:72)
    at dev.snowdrop.buildpack.lifecycle.LifecyclePhaseFactory.getContainerForPhase (LifecyclePhaseFactory.java:98)
    at dev.snowdrop.buildpack.lifecycle.phases.Analyzer.runPhase (Analyzer.java:66)
...

@cmoulliard
Copy link
Member Author

cmoulliard commented Nov 25, 2024

Here is the content of the command executed to create the ephemeral container which is failing

com.github.dockerjava.core.command.CreateContainerCmdImpl@73a493cf[aliases=<null>,argsEscaped=<null>,attachStderr=<null>,attachStdin=<null>,attachStdout=<null>,authConfig=<null>,
cmd={/cnb/lifecycle/analyzer,-uid,1002,-gid,1000,-run-image,docker.io/paketocommunity/run-ubi-base:latest,-log-level,debug,-analyzed,/layers/analyzed.toml,-launch-cache,/launch-cache-dir,-daemon,docker.io/my-quarkus-app:latest},domainName=<null>,entrypoint={},
env={CNB_PLATFORM_API=0.10,CNB_REGISTRY_AUTH={},CNB_EXPERIMENTAL_MODE=warn},
exposedPorts=ExposedPorts(exposedPorts=[]),
healthcheck=<null>,
hostConfig=HostConfig(binds=[buildpack-build-wilpmcgerx:/cache-dir:rw, buildpack-launch-rxxmmdgpnh:/launch-cache-dir:rw, buildpack-app-rvrisjutsi:/workspace:rw, buildpack-platform-alyclpxwca:/platform:rw, buildpack-output-opjvbnddti:/layers:rw, buildpack-kaniko-skhnoswcvs:/kaniko:rw, /var/folders/28/g86pgjxj0wl1nkd_85c2krjw0000gn/T/podman/podman-machine-default-api.sock:/var/run/docker.sock:rw],
 blkioWeight=null, blkioWeightDevice=null, blkioDeviceReadBps=null, blkioDeviceWriteBps=null, blkioDeviceReadIOps=null, blkioDeviceWriteIOps=null, memorySwappiness=null, nanoCPUs=null, capAdd=null, capDrop=null, containerIDFile=null, cpuPeriod=null, cpuRealtimePeriod=null, cpuRealtimeRuntime=null, cpuShares=null, cpuQuota=null, cpusetCpus=null, cpusetMems=null, devices=null, deviceCgroupRules=null, deviceRequests=null, diskQuota=null, dns=null, dnsOptions=null, dnsSearch=null, extraHosts=null, groupAdd=null, ipcMode=null, cgroup=null, links=[], logConfig=LogConfig(type=null, config=null), lxcConf=null, memory=null, memorySwap=null, memoryReservation=null, kernelMemory=null, networkMode=null, oomKillDisable=null, init=null, autoRemove=null, oomScoreAdj=null, portBindings=null, privileged=null, publishAllPorts=null, readonlyRootfs=null, restartPolicy=null, ulimits=null, cpuCount=null, cpuPercent=null, ioMaximumIOps=null, ioMaximumBandwidth=null, volumesFrom=null, mounts=null, pidMode=null, isolation=null, securityOpts=[label=disable], storageOpt=null, cgroupParent=null, volumeDriver=null, shmSize=null, pidsLimit=null, runtime=null, tmpFs=null, utSMode=null, usernsMode=null, sysctls=null, consoleSize=null, cgroupnsMode=null),hostName=<null>,image=docker.io/buildpack-ephemeralbuilder-vxiahcso:latest,ipv4Address=<null>,ipv6Address=<null>,labels=<null>,macAddress=<null>,name=<null>,networkDisabled=<null>,networkingConfig=<null>,onBuild=<null>,platform=<null>,portSpecs=<null>,shell=<null>,stdInOnce=<null>,stdinOpen=<null>,stopSignal=<null>,stopTimeout=<null>,tty=<null>,user=0,volumes=Volumes(volumes=[]),
workingDir=<null>]

@cmoulliard
Copy link
Member Author

cmoulliard commented Nov 25, 2024

Important If I disable useDaemon=false, then the ephemeral container can be created but we got an unauthenticated error as the docker client resolves my-quarkus-app image name to docker.io/my-quarkus-app.

That will fail too if I try to use quay.io/snowdrop/my-quarkus-app as CNB_REGISTRY_AUTH should also include the credentials to access quay.io

2024-11-25T15:57:45+01:00 Starting analyzer...
2024-11-25T15:57:45+01:00 Parsing inputs...
2024-11-25T15:57:45+01:00 Ensuring privileges...
2024-11-25T15:57:45+01:00 Executing command...
2024-11-25T15:57:49+01:00 ERROR: failed to initialize analyzer: validating registry write access: failed to ensure registry read/write access to quay.io/snowdrop/my-quarkus-app:latest: POST https://quay.io/v2/snowdrop/my-quarkus-app/blobs/uploads/: UNAUTHORIZED: access to the requested resource is not authorized; map[]
[dev.snowdrop.BuildMe.main()] INFO dev.snowdrop.buildpack.lifecycle.phases.Analyzer - Analyze container complete, with exit code 1

I was able to set properly the creds to push on quay and now build works :-)
Full gist: https://gist.github.com/cmoulliard/e3a32338ce82e07e606d15e5704cb118

[dev.snowdrop.BuildMe.main()] DEBUG dev.snowdrop.buildpack.lifecycle.phases.Exporter - - container args [/cnb/lifecycle/exporter, -uid, 1002, -gid, 1000, -app, /workspace, -layers, /layers, -cache-dir, /cache-dir, -launch-cache, /launch-cache-dir, -log-level, debug, quay.io/snowdrop/my-quarkus-app:latest]
[dev.snowdrop.BuildMe.main()] INFO dev.snowdrop.buildpack.lifecycle.phases.Exporter - - launching export container
[dev.snowdrop.BuildMe.main()] DEBUG com.github.dockerjava.core.command.AbstrDockerCmd - Cmd: 18ef9981e5ab9b3e92d6342363335ab2fbdf68757984773655e3f06a09faf0a6
[dev.snowdrop.BuildMe.main()] INFO dev.snowdrop.buildpack.lifecycle.phases.Exporter - - attaching log relay
2024-11-25T16:12:21+01:00 Starting exporter...
2024-11-25T16:12:21+01:00 Parsing inputs...
2024-11-25T16:12:21+01:00 Warning: Ignoring -launch-cache, only intended for use with -daemon
2024-11-25T16:12:21+01:00 Ensuring privileges...
2024-11-25T16:12:21+01:00 Executing command...
2024-11-25T16:12:21+01:00 No project metadata found at path "/layers/project-metadata.toml", project metadata will not be exported
2024-11-25T16:12:21+01:00 Reusing layers from image 'quay.io/snowdrop/my-quarkus-app@sha256:b2ba23df2db32881f4c1b0296c29a5cd09bf0cfcb3be39582e02d41c894418bf'
2024-11-25T16:12:27+01:00 Timer: Exporter started at 2024-11-25T15:12:27Z
2024-11-25T16:12:27+01:00 Reading buildpack directory: /layers/paketo-community_ubi-java-buildpack
2024-11-25T16:12:27+01:00 Reading buildpack directory item: ajre.toml
2024-11-25T16:12:27+01:00 Reading buildpack directory item: helper.sbom.syft.json
2024-11-25T16:12:27+01:00 Reading buildpack directory item: helper.toml
2024-11-25T16:12:27+01:00 Reading buildpack directory item: java-security-properties.toml
2024-11-25T16:12:27+01:00 Processing buildpack directory: /layers/paketo-community_ubi-java-buildpack
2024-11-25T16:12:27+01:00 Processing launch layer: /layers/paketo-community_ubi-java-buildpack/ajre
2024-11-25T16:12:27+01:00 Reusing layer 'paketo-community/ubi-java-buildpack:ajre'
2024-11-25T16:12:27+01:00 Layer 'paketo-community/ubi-java-buildpack:ajre' SHA: sha256:e7f52cdddab6a13420f04397f9e770831c20d56b10c8c09b2f2647e639002aa3
2024-11-25T16:12:29+01:00 Processing launch layer: /layers/paketo-community_ubi-java-buildpack/helper
2024-11-25T16:12:29+01:00 Reusing layer 'paketo-community/ubi-java-buildpack:helper'
2024-11-25T16:12:29+01:00 Layer 'paketo-community/ubi-java-buildpack:helper' SHA: sha256:c4eca2fa18efb1b2ba3bae88dc85e8967e9197a0e450461e80d3b873bf43d95b
2024-11-25T16:12:29+01:00 Processing launch layer: /layers/paketo-community_ubi-java-buildpack/java-security-properties
2024-11-25T16:12:29+01:00 Reusing layer 'paketo-community/ubi-java-buildpack:java-security-properties'
2024-11-25T16:12:29+01:00 Layer 'paketo-community/ubi-java-buildpack:java-security-properties' SHA: sha256:638b85309141bd742d9901c8e919a4d2eb1aa7eaa325526f1c212cf6a0753151
2024-11-25T16:12:29+01:00 Reading buildpack directory: /layers/paketo-buildpacks_quarkus
2024-11-25T16:12:29+01:00 Reading buildpack directory item: launch.toml
2024-11-25T16:12:29+01:00 Reading buildpack directory item: quarkus-build-envvars
2024-11-25T16:12:29+01:00 Reading buildpack directory item: quarkus-build-envvars.toml
2024-11-25T16:12:29+01:00 Processing buildpack directory: /layers/paketo-buildpacks_quarkus
2024-11-25T16:12:29+01:00 Reading buildpack directory: /layers/paketo-buildpacks_ca-certificates
2024-11-25T16:12:29+01:00 Reading buildpack directory item: helper.sbom.syft.json
2024-11-25T16:12:29+01:00 Reading buildpack directory item: helper.toml
2024-11-25T16:12:29+01:00 Reading buildpack directory item: launch.toml
2024-11-25T16:12:29+01:00 Processing buildpack directory: /layers/paketo-buildpacks_ca-certificates
2024-11-25T16:12:29+01:00 Processing launch layer: /layers/paketo-buildpacks_ca-certificates/helper
2024-11-25T16:12:29+01:00 Reusing layer 'paketo-buildpacks/ca-certificates:helper'
2024-11-25T16:12:29+01:00 Layer 'paketo-buildpacks/ca-certificates:helper' SHA: sha256:2fd9704a4ef30abcb18f530898eb647fc642a42f26ba9299054e84a76009e2a9
2024-11-25T16:12:29+01:00 Reading buildpack directory: /layers/paketo-buildpacks_bellsoft-liberica
2024-11-25T16:12:29+01:00 Processing buildpack directory: /layers/paketo-buildpacks_bellsoft-liberica
2024-11-25T16:12:29+01:00 Reading buildpack directory: /layers/paketo-buildpacks_syft
2024-11-25T16:12:29+01:00 Reading buildpack directory item: build.toml
2024-11-25T16:12:29+01:00 Reading buildpack directory item: syft
2024-11-25T16:12:29+01:00 Reading buildpack directory item: syft.sbom.syft.json
2024-11-25T16:12:29+01:00 Reading buildpack directory item: syft.toml
2024-11-25T16:12:29+01:00 Processing buildpack directory: /layers/paketo-buildpacks_syft
2024-11-25T16:12:29+01:00 Reading buildpack directory: /layers/paketo-buildpacks_maven
2024-11-25T16:12:29+01:00 Reading buildpack directory item: application
2024-11-25T16:12:29+01:00 Reading buildpack directory item: application.toml
2024-11-25T16:12:29+01:00 Reading buildpack directory item: build.sbom.cdx.json
2024-11-25T16:12:29+01:00 Reading buildpack directory item: build.sbom.syft.json
2024-11-25T16:12:29+01:00 Reading buildpack directory item: build.toml
2024-11-25T16:12:29+01:00 Reading buildpack directory item: cache
2024-11-25T16:12:29+01:00 Reading buildpack directory item: cache.toml
2024-11-25T16:12:29+01:00 Processing buildpack directory: /layers/paketo-buildpacks_maven
2024-11-25T16:12:29+01:00 Reading buildpack directory: /layers/paketo-buildpacks_executable-jar
2024-11-25T16:12:29+01:00 Reading buildpack directory item: launch.sbom.cdx.json
2024-11-25T16:12:29+01:00 Reading buildpack directory item: launch.sbom.syft.json
2024-11-25T16:12:29+01:00 Reading buildpack directory item: launch.toml
2024-11-25T16:12:29+01:00 Processing buildpack directory: /layers/paketo-buildpacks_executable-jar
2024-11-25T16:12:29+01:00 Reading buildpack directory: /layers/paketo-buildpacks_apache-tomcat
2024-11-25T16:12:29+01:00 Reading buildpack directory item: build.toml
2024-11-25T16:12:29+01:00 Processing buildpack directory: /layers/paketo-buildpacks_apache-tomcat
2024-11-25T16:12:29+01:00 Reading buildpack directory: /layers/paketo-buildpacks_apache-tomee
2024-11-25T16:12:29+01:00 Reading buildpack directory item: build.toml
2024-11-25T16:12:29+01:00 Processing buildpack directory: /layers/paketo-buildpacks_apache-tomee
2024-11-25T16:12:29+01:00 Reading buildpack directory: /layers/paketo-buildpacks_liberty
2024-11-25T16:12:29+01:00 Reading buildpack directory item: build.toml
2024-11-25T16:12:29+01:00 Processing buildpack directory: /layers/paketo-buildpacks_liberty
2024-11-25T16:12:29+01:00 Reading buildpack directory: /layers/paketo-buildpacks_dist-zip
2024-11-25T16:12:29+01:00 Processing buildpack directory: /layers/paketo-buildpacks_dist-zip
2024-11-25T16:12:29+01:00 Reading buildpack directory: /layers/paketo-buildpacks_spring-boot
2024-11-25T16:12:29+01:00 Processing buildpack directory: /layers/paketo-buildpacks_spring-boot
2024-11-25T16:12:29+01:00 Found SBOM of type launch for at /layers/sbom/launch
2024-11-25T16:12:29+01:00 Reusing tarball for layer "buildpacksio/lifecycle:launch.sbom" with SHA: sha256:97826cd947c0f25d8b6cb587f6b9d75570e16d81a021dad89f1227e01d957348
2024-11-25T16:12:29+01:00 Adding layer 'buildpacksio/lifecycle:launch.sbom'
2024-11-25T16:12:29+01:00 Layer 'buildpacksio/lifecycle:launch.sbom' SHA: sha256:97826cd947c0f25d8b6cb587f6b9d75570e16d81a021dad89f1227e01d957348
2024-11-25T16:12:29+01:00 Adding app layers
2024-11-25T16:12:29+01:00 Layer 'slice-1' SHA: sha256:ea990d0ac6d5c256f619f7fa03ed086c38d10c8f811831c8cbd0cff98940c186
2024-11-25T16:12:29+01:00 Layer 'slice-2' SHA: sha256:2702382417271bea5de00ea83b03ef0251e07546f005612cea0500e1910d5d25
2024-11-25T16:12:29+01:00 Layer 'slice-3' SHA: sha256:bc6b89f7a9ee72202210d384bcce8a64f48c1b5011e19a236863189c66f48a28
2024-11-25T16:12:29+01:00 Layer 'slice-4' SHA: sha256:a0666a75e1e35603ebe5e028c413fbed12f573e7758f5e5f1eecf686db686211
2024-11-25T16:12:29+01:00 Layer 'slice-5' SHA: sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef
2024-11-25T16:12:29+01:00 Reused 2/5 app layer(s)
2024-11-25T16:12:29+01:00 Added 3/5 app layer(s)
2024-11-25T16:12:29+01:00 Reusing tarball for layer "buildpacksio/lifecycle:launcher" with SHA: sha256:f7cf50b553e210c29303758ad9be0ba0c054ec3bdda1e8ddf2ab2e2fdba55517
2024-11-25T16:12:29+01:00 Reusing layer 'buildpacksio/lifecycle:launcher'
2024-11-25T16:12:29+01:00 Layer 'buildpacksio/lifecycle:launcher' SHA: sha256:f7cf50b553e210c29303758ad9be0ba0c054ec3bdda1e8ddf2ab2e2fdba55517
2024-11-25T16:12:29+01:00 Reusing tarball for layer "buildpacksio/lifecycle:config" with SHA: sha256:cf317deade8a6a894bd0fa768496203a98594fa40ae13ff1167196c189185734
2024-11-25T16:12:29+01:00 Reusing layer 'buildpacksio/lifecycle:config'
2024-11-25T16:12:29+01:00 Layer 'buildpacksio/lifecycle:config' SHA: sha256:cf317deade8a6a894bd0fa768496203a98594fa40ae13ff1167196c189185734
2024-11-25T16:12:29+01:00 Reusing tarball for layer "buildpacksio/lifecycle:process-types" with SHA: sha256:1dc94a70dbaa2171fb086500a5d27797f779219b126b0a1eebb9180c2792e80e
2024-11-25T16:12:29+01:00 Reusing layer 'buildpacksio/lifecycle:process-types'
2024-11-25T16:12:29+01:00 Layer 'buildpacksio/lifecycle:process-types' SHA: sha256:1dc94a70dbaa2171fb086500a5d27797f779219b126b0a1eebb9180c2792e80e
2024-11-25T16:12:29+01:00 Adding label 'io.buildpacks.lifecycle.metadata'
2024-11-25T16:12:29+01:00 Adding label 'io.buildpacks.build.metadata'
2024-11-25T16:12:29+01:00 Adding label 'io.buildpacks.project.metadata'
2024-11-25T16:12:29+01:00 Setting CNB_LAYERS_DIR=/layers
2024-11-25T16:12:29+01:00 Setting CNB_APP_DIR=/workspace
2024-11-25T16:12:29+01:00 Setting CNB_PLATFORM_API=0.10
2024-11-25T16:12:29+01:00 Setting CNB_DEPRECATION_MODE=quiet
2024-11-25T16:12:29+01:00 Prepending /cnb/process and /cnb/lifecycle to PATH
2024-11-25T16:12:29+01:00 Setting WORKDIR: '/workspace'
2024-11-25T16:12:29+01:00 Setting default process type 'web'
2024-11-25T16:12:29+01:00 Setting ENTRYPOINT: '/cnb/process/web'
2024-11-25T16:12:29+01:00 Timer: Saving quay.io/snowdrop/my-quarkus-app:latest... started at 2024-11-25T15:12:29Z
2024-11-25T16:12:29+01:00 Saving quay.io/snowdrop/my-quarkus-app:latest...
2024-11-25T16:12:39+01:00 *** Images (sha256:00f371f306ccf2e84319a8e8f830980b6c48bf5720d4803bd30f66b4809e383b):
2024-11-25T16:12:39+01:00       quay.io/snowdrop/my-quarkus-app:latest
2024-11-25T16:12:39+01:00 
2024-11-25T16:12:39+01:00 *** Digest: sha256:00f371f306ccf2e84319a8e8f830980b6c48bf5720d4803bd30f66b4809e383b
2024-11-25T16:12:39+01:00 
2024-11-25T16:12:39+01:00 *** Manifest Size: 3020
2024-11-25T16:12:39+01:00 Timer: Saving quay.io/snowdrop/my-quarkus-app:latest... ran for 9.85575587s and ended at 2024-11-25T15:12:39Z
2024-11-25T16:12:39+01:00 Timer: Exporter ran for 11.51058046s and ended at 2024-11-25T15:12:39Z
2024-11-25T16:12:39+01:00 Timer: Cache started at 2024-11-25T15:12:39Z
2024-11-25T16:12:39+01:00 Reading buildpack directory: /layers/paketo-community_ubi-java-buildpack
2024-11-25T16:12:39+01:00 Reading buildpack directory item: ajre.toml
2024-11-25T16:12:39+01:00 Reading buildpack directory item: helper.sbom.syft.json
2024-11-25T16:12:39+01:00 Reading buildpack directory item: helper.toml
2024-11-25T16:12:39+01:00 Reading buildpack directory item: java-security-properties.toml
2024-11-25T16:12:39+01:00 Reading buildpack directory: /layers/paketo-buildpacks_quarkus
2024-11-25T16:12:39+01:00 Reading buildpack directory item: launch.toml
2024-11-25T16:12:39+01:00 Reading buildpack directory item: quarkus-build-envvars
2024-11-25T16:12:39+01:00 Reading buildpack directory item: quarkus-build-envvars.toml
2024-11-25T16:12:39+01:00 Reading buildpack directory: /layers/paketo-buildpacks_ca-certificates
2024-11-25T16:12:39+01:00 Reading buildpack directory item: helper.sbom.syft.json
2024-11-25T16:12:39+01:00 Reading buildpack directory item: helper.toml
2024-11-25T16:12:39+01:00 Reading buildpack directory item: launch.toml
2024-11-25T16:12:39+01:00 Reading buildpack directory: /layers/paketo-buildpacks_bellsoft-liberica
2024-11-25T16:12:39+01:00 Reading buildpack directory: /layers/paketo-buildpacks_syft
2024-11-25T16:12:39+01:00 Reading buildpack directory item: build.toml
2024-11-25T16:12:39+01:00 Reading buildpack directory item: syft
2024-11-25T16:12:39+01:00 Reading buildpack directory item: syft.sbom.syft.json
2024-11-25T16:12:39+01:00 Reading buildpack directory item: syft.toml
2024-11-25T16:12:39+01:00 Adding cache layer 'paketo-buildpacks/syft:syft'
2024-11-25T16:12:39+01:00 Layer 'paketo-buildpacks/syft:syft' SHA: sha256:d31117538f614e2c7439e4ac0889b8db59a73a9e410a7eddb4fe56aade5032e3
2024-11-25T16:12:39+01:00 Reading buildpack directory: /layers/paketo-buildpacks_maven
2024-11-25T16:12:39+01:00 Reading buildpack directory item: application
2024-11-25T16:12:39+01:00 Reading buildpack directory item: application.toml
2024-11-25T16:12:39+01:00 Reading buildpack directory item: build.sbom.cdx.json
2024-11-25T16:12:39+01:00 Reading buildpack directory item: build.sbom.syft.json
2024-11-25T16:12:39+01:00 Reading buildpack directory item: build.toml
2024-11-25T16:12:39+01:00 Reading buildpack directory item: cache
2024-11-25T16:12:39+01:00 Reading buildpack directory item: cache.toml
2024-11-25T16:12:39+01:00 Adding cache layer 'paketo-buildpacks/maven:application'
2024-11-25T16:12:39+01:00 Layer 'paketo-buildpacks/maven:application' SHA: sha256:e5e36116bdec3f7efd54cdf84431adb0ae4cb68642188414bea642e4b844abea
2024-11-25T16:12:40+01:00 Adding cache layer 'paketo-buildpacks/maven:cache'
2024-11-25T16:12:40+01:00 Layer 'paketo-buildpacks/maven:cache' SHA: sha256:a12c74c2c02abbb47a46f66c7ddd0f8685964d089c0ac49cd0441a51c8bbfb46
2024-11-25T16:12:40+01:00 Reading buildpack directory: /layers/paketo-buildpacks_executable-jar
2024-11-25T16:12:40+01:00 Reading buildpack directory item: launch.sbom.cdx.json
2024-11-25T16:12:40+01:00 Reading buildpack directory item: launch.sbom.syft.json
2024-11-25T16:12:40+01:00 Reading buildpack directory item: launch.toml
2024-11-25T16:12:40+01:00 Reading buildpack directory: /layers/paketo-buildpacks_apache-tomcat
2024-11-25T16:12:40+01:00 Reading buildpack directory item: build.toml
2024-11-25T16:12:40+01:00 Reading buildpack directory: /layers/paketo-buildpacks_apache-tomee
2024-11-25T16:12:40+01:00 Reading buildpack directory item: build.toml
2024-11-25T16:12:40+01:00 Reading buildpack directory: /layers/paketo-buildpacks_liberty
2024-11-25T16:12:40+01:00 Reading buildpack directory item: build.toml
2024-11-25T16:12:40+01:00 Reading buildpack directory: /layers/paketo-buildpacks_dist-zip
2024-11-25T16:12:40+01:00 Reading buildpack directory: /layers/paketo-buildpacks_spring-boot
2024-11-25T16:12:40+01:00 Found SBOM of type cache for at /layers/sbom/cache
2024-11-25T16:12:40+01:00 Reusing tarball for layer "buildpacksio/lifecycle:cache.sbom" with SHA: sha256:fced2229dc990d37e3fc46bc3dad9584b19483b90aedf08d0157d5ded9269ef0
2024-11-25T16:12:40+01:00 Adding cache layer 'buildpacksio/lifecycle:cache.sbom'
2024-11-25T16:12:40+01:00 Layer 'buildpacksio/lifecycle:cache.sbom' SHA: sha256:fced2229dc990d37e3fc46bc3dad9584b19483b90aedf08d0157d5ded9269ef0
2024-11-25T16:12:40+01:00 Timer: Cache ran for 1.524789228s and ended at 2024-11-25T15:12:40Z
[dev.snowdrop.BuildMe.main()] INFO dev.snowdrop.buildpack.lifecycle.phases.Exporter - Export container complete, with exit code 0
[dev.snowdrop.BuildMe.main()] DEBUG com.github.dockerjava.core.command.AbstrDockerCmd - Cmd: 18ef9981e5ab9b3e92d6342363335ab2fbdf68757984773655e3f06a09faf0a6,true,<null>
[dev.snowdrop.BuildMe.main()] INFO dev.snowdrop.buildpack.lifecycle.LifecycleExecutor - Buildpack build phases complete, application image is at quay.io/snowdrop/my-quarkus-app:latest
[dev.snowdrop.BuildMe.main()] INFO dev.snowdrop.buildpack.lifecycle.LifecyclePhaseFactory - Post Build cleanup activites:
[dev.snowdrop.BuildMe.main()] DEBUG com.github.dockerjava.core.command.AbstrDockerCmd - Cmd: buildpack-build-hgbvuhguvl
[dev.snowdrop.BuildMe.main()] DEBUG com.github.dockerjava.core.command.AbstrDockerCmd - Cmd: buildpack-launch-azrtxolodp
[dev.snowdrop.BuildMe.main()] DEBUG com.github.dockerjava.core.command.AbstrDockerCmd - Cmd: buildpack-kaniko-zeuesisoph
[dev.snowdrop.BuildMe.main()] DEBUG com.github.dockerjava.core.command.AbstrDockerCmd - Cmd: buildpack-app-zuzbtndrnz
[dev.snowdrop.BuildMe.main()] DEBUG com.github.dockerjava.core.command.AbstrDockerCmd - Cmd: buildpack-output-gfdzcsfuyc
[dev.snowdrop.BuildMe.main()] DEBUG com.github.dockerjava.core.command.AbstrDockerCmd - Cmd: buildpack-platform-fiwqxrvdan
[dev.snowdrop.BuildMe.main()] INFO dev.snowdrop.buildpack.lifecycle.LifecyclePhaseFactory - - temporary build volumes removed
[dev.snowdrop.BuildMe.main()] DEBUG com.github.dockerjava.core.command.AbstrDockerCmd - Cmd: <null>,docker.io/buildpack-ephemeralbuilder-xjyesfcc:latest,<null>

Result: https://quay.io/repository/snowdrop/my-quarkus-app?tab=tags !!

@BarDweller

@BarDweller
Copy link
Collaborator

This issue is reporting issues with code not in this repository, but in my fork of this repo.
Closing this Issue as it has been opened against the wrong repository.

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

No branches or pull requests

2 participants