Feature: Support gitea as internal registry

Have you searched for this feature request?

[X] I searched but did not find similar requests

Problem Statement
Description
To build/push an image against the gitea registry, the way to go is to use the ingress-nginx address resolved against the localhost <IP_ADDRESS>. While this approach is fine when users will build/push an image outside of the k8s cluster, that will fail using the internal k8s service of gitea as you can see hereafter the error reported doing in a pod a buildah build of a dockerfile
[buildah-image : build-and-push] ## Buildah version
[buildah-image : build-and-push] buildah version 1.37.3 (image-spec 1.1.0, runtime-spec 1.2.0)

[buildah-image : build-and-push] ## Build the project ...
[buildah-image : build-and-push] STEP 1/11: FROM registry.access.redhat.com/ubi8/openjdk-21:1.20
[buildah-image : build-and-push] Trying to pull registry.access.redhat.com/ubi8/openjdk-21:1.20...
[buildah-image : build-and-push] Getting image source signatures
[buildah-image : build-and-push] Checking if image destination supports signatures
[buildah-image : build-and-push] Copying blob sha256:8dc97931d0a29118b7e8dd695ac355f7b569223a972f3eb87f2ff07fc9fc190a
[buildah-image : build-and-push] Copying blob sha256:b46e4e7892d6177335aee5445f59105231c351f2fb68a24f25ee7b2656e29674
[buildah-image : build-and-push] Copying config sha256:b8d81704f56858c6859ce949133635bb716162ddd3c8d012ec77572449403153
[buildah-image : build-and-push] Writing manifest to image destination
[buildah-image : build-and-push] Storing signatures
[buildah-image : build-and-push] STEP 2/11: ENV LANGUAGE='en_US:en'
[buildah-image : build-and-push] STEP 3/11: COPY --chown=185 target/quarkus-app/lib/ /deployments/lib/
[buildah-image : build-and-push] STEP 4/11: COPY --chown=185 target/quarkus-app/*.jar /deployments/
[buildah-image : build-and-push] STEP 5/11: COPY --chown=185 target/quarkus-app/app/ /deployments/app/
[buildah-image : build-and-push] STEP 6/11: COPY --chown=185 target/quarkus-app/quarkus/ /deployments/quarkus/
[buildah-image : build-and-push] STEP 7/11: EXPOSE 8080
[buildah-image : build-and-push] STEP 8/11: USER 185
[buildah-image : build-and-push] STEP 9/11: ENV JAVA_OPTS_APPEND="-Dquarkus.http.host=<IP_ADDRESS> -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
[buildah-image : build-and-push] STEP 10/11: ENV JAVA_APP_JAR="/deployments/quarkus-run.jar"
[buildah-image : build-and-push] STEP 11/11: ENTRYPOINT [ "/opt/jboss/container/java/run/run-java.sh" ]
[buildah-image : build-and-push] COMMIT my-gitea-http.gitea:3000/giteaadmin/my-quarkus-app
[buildah-image : build-and-push] Getting image source signatures
[buildah-image : build-and-push] Copying blob sha256:dd5e77a90e609b328f2e49aa60e50bd8837e505c157060c337725413ccf449f1
[buildah-image : build-and-push] Copying blob sha256:8b30b41a0b038bf660c4538ae04bb77b7cdbfcfcb0f5a378129ddf82b91542e7
[buildah-image : build-and-push] Copying blob sha256:3d118423613f432336691bc30be7ef697cabccac4f7c386b134418b876c55428
[buildah-image : build-and-push] Copying config sha256:7ebf93612de328321595acc2f8343ece1adb6def11e963614331b4e70a20f257
[buildah-image : build-and-push] Writing manifest to image destination
[buildah-image : build-and-push] --> 7ebf93612de3

[buildah-image : build-and-push] Successfully tagged my-gitea-http.gitea:3000/giteaadmin/my-quarkus-app:latest
[buildah-image : build-and-push] 7ebf93612de328321595acc2f8343ece1adb6def11e963614331b4e70a20f257

[buildah-image : build-and-push] + buildah --storage-driver=overlay push --tls-verify=false --digestfile /tmp/image-digest my-gitea-http.gitea:3000/giteaadmin/my-quarkus-app docker://my-gitea-http.gitea:3000/giteaadmin/my-quarkus-app
[buildah-image : build-and-push] Getting image source signatures
[buildah-image : build-and-push] Copying blob sha256:3d118423613f432336691bc30be7ef697cabccac4f7c386b134418b876c55428
[buildah-image : build-and-push] Copying blob sha256:dd5e77a90e609b328f2e49aa60e50bd8837e505c157060c337725413ccf449f1
[buildah-image : build-and-push] Copying blob sha256:8b30b41a0b038bf660c4538ae04bb77b7cdbfcfcb0f5a378129ddf82b91542e7
[buildah-image : build-and-push] Error: pushing image "my-gitea-http.gitea:3000/giteaadmin/my-quarkus-app" to "docker://my-gitea-http.gitea:3000/giteaadmin/my-quarkus-app": trying to reuse blob sha256:dd5e77a90e609b328f2e49aa60e50bd8837e505c157060c337725413ccf449f1 at destination: Get "https://gitea.cnoe.localtest.me:8443/v2/token?scope=repository%3Agiteaadmin%2Fmy-quarkus-app%3Apull%2Cpush&service=container_registry": dial tcp: lookup gitea.cnoe.localtest.me: no such host

Possible Solution
I suggest that we support such an option. That will require that we do different things such as:

Adapt the kind template file https://github.com/cnoe-io/idpbuilder/blob/main/pkg/kind/resources/kind.yaml.tmpl to include the internal address of the registry

containerdConfigPatches:
- |-
  [plugins."io.containerd.grpc.v1.cri".registry.mirrors."gitea.{{ .Host }}:{{ .Port }}"]
    endpoint = ["https://gitea.{{ .Host }}"]
  [plugins."io.containerd.grpc.v1.cri".registry.configs."gitea.{{ .Host }}".tls]
    insecure_skip_verify = true

In a 2nd step, we should also mount the Certificate to the HTTP(S) endpoint the gitea service as secret or configMap to support HTTP & HTTPS calls as some clients could refuse to access the oci registry using plain HTTP

Alternatives Considered
No response

Questions:
Are we sure that changes documented here https://cnoe.io/docs/reference-implementation/installations/idpbuilder/how-it-works#in-cluster-dns-configuration and coded using such a template https://github.com/cnoe-io/idpbuilder/blob/main/pkg/build/templates/coredns/cm-coredns-default.yaml.tmpl#L6-L13 work ?
Could it be possible that when a DNS request is issued by a pod running inside the cluster that it gets first the loopback address instead of the internal ingress-nginx-controller.ingress-nginx.svc.cluster.local ?
Remark: I'm asking such a question as this is typical what I'm observing here: https://github.com/containers/buildah/issues/5767#issuecomment-2393969891
@nabuskey

I'm becoming mad as all the tests that I'm doing work using: ping, curl, dig executed part of a pod created using dnsutils tool : kubectl apply -f https://k8s.io/examples/admin/dns/dnsutils.yaml
1.  IN  A

;; ANSWER SECTION:
ingress-nginx-controller.ingress-nginx.svc.cluster.local. 6 IN A <IP_ADDRESS>

;; Query time: 1 msec
;; SERVER: <IP_ADDRESS>#53(<IP_ADDRESS>)
;; WHEN: Mon Oct 07 11:59:17 UTC 2024
;; MSG SIZE  rcvd: 136

2. Test using curl (OK)
CoreDNS
[INFO] <IP_ADDRESS>:52236 - 58946 "AAAA IN gitea.cnoe.localtest.me.default.svc.cluster.local. udp 67 false 512" NOERROR qr,aa,rd 160 0.000073625s                                                          │
[INFO] <IP_ADDRESS>:52236 - 58738 "A IN gitea.cnoe.localtest.me.default.svc.cluster.local. udp 67 false 512" NOERROR qr,aa,rd 139 0.000102542s                                                             │

Curl
kubectl exec -i -t dnsutils -- curl -s -k  https://gitea.cnoe.localtest.me:8443
*   Trying <IP_ADDRESS>:8443...
* Connected to gitea.cnoe.localtest.me (<IP_ADDRESS>) port 8443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use h2
* Server certificate:
*  subject: O=cnoe.io
*  start date: Oct  7 10:18:58 2024 GMT
*  expire date: Oct  7 16:18:58 2025 GMT
*  issuer: O=cnoe.io
*  SSL certificate verify result: self signed certificate (18), continuing anyway.
* Using HTTP2, server supports multiplexing
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0xaaaaeb64fca0)
> GET / HTTP/2
> Host: gitea.cnoe.localtest.me:8443
...
<!DOCTYPE html>

  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Gitea: Git with a cup of tea</title>
  <link rel="manifest" href="data:application/json;base64,eyJuYW1lIjoiR2l0ZWE6IEdpdCB3aXRoIGEgY3VwIG9mIHRlYSIsInNob3J0X25hbWUiOiJHaXRlYTogR2l0IHdpdGggYSBjdXAgb2YgdGVhIiwic3RhcnRfdXJsIjoiaHR0cHM6Ly9naXRlYS5jbm9lLmxvY2FsdGVzdC5tZTo4NDQzLyIsImljb25zIjpbeyJzcmMiOiJodHRwczovL2dpdGVhLmNub2UubG9jYWx0ZXN0Lm1lOjg0NDMvYXNzZXRzL2ltZy9sb2dvLnBuZyIsInR5cGUiOiJpbWFnZS9wbmciLCJzaXplcyI6IjUxMng1MTIifSx7InNyYyI6Imh0dHBzOi8vZ2l0ZWEuY25vZS5sb2NhbHRlc3QubWU6ODQ0My9hc3NldHMvaW1nL2xvZ28uc3ZnIiwidHlwZSI6ImltYWdlL3N2Zyt4bWwiLCJzaXplcyI6IjUxMng1MTIifV19">
  <meta name="author" content="Gitea - Git with a cup of tea">

3. Test using ping
CoreDNS
[INFO] <IP_ADDRESS>:37510 - 43524 "AAAA IN gitea.cnoe.localtest.me.default.svc.cluster.local. udp 67 false 512" NOERROR qr,aa,rd 160 0.000067583s                                                          │
[INFO] <IP_ADDRESS>:37510 - 43358 "A IN gitea.cnoe.localtest.me.default.svc.cluster.local. udp 67 false 512" NOERROR qr,aa,rd 139 0.000082042s

Ping
kubectl exec -i -t dnsutils -- ping -c 4 gitea.cnoe.localtest.me
E1007 14:03:58.078530   20398 websocket.go:296] Unknown stream id 1, discarding message
PING gitea.cnoe.localtest.me (<IP_ADDRESS>): 56 data bytes
64 bytes from <IP_ADDRESS>: seq=0 ttl=62 time=0.199 ms
64 bytes from <IP_ADDRESS>: seq=1 ttl=62 time=0.568 ms
64 bytes from <IP_ADDRESS>: seq=2 ttl=62 time=0.812 ms
64 bytes from <IP_ADDRESS>: seq=3 ttl=62 time=0.449 ms

To fix my issue, this is I what I hard coded as coreDNS rewrite rules.
rewrite name regex gitea.cnoe.localtest.me.gitea.svc.cluster.local ingress-nginx-controller.ingress-nginx.svc.cluster.local
rewrite name exact cnoe.localtest.me ingress-nginx-controller.ingress-nginx.svc.cluster.local

@nabuskey

To fix my issue, this is I what I hard coded as coreDNS rewrite rules.
rewrite name regex gitea.cnoe.localtest.me.gitea.svc.cluster.local ingress-nginx-controller.ingress-nginx.svc.cluster.local
rewrite name exact cnoe.localtest.me ingress-nginx-controller.ingress-nginx.svc.cluster.local

@nabuskey

Hmm this shouldn't be necessary because anything under cnoe.localtest.me gets re-written to the ingress address: https://github.com/cnoe-io/idpbuilder/blob/main/pkg/build/templates/coredns/cm-coredns-default.yaml.tmpl
We are also building an example of using the gitea registry and it does seem to work. Your dig, curl, and ping tests all show things are working. It's possible buildah is using its own way of resolving names.

We are also building an example of using the gitea registry and it does seem to work. Your dig, curl, and ping tests all show things are working. It's possible buildah is using its own way of resolving names.

I don't think so. As buildah client don't offer a verbose mode, the only way to figure out what it does is to look into the code :-(
Such a problem will certainly occur with other container image building tool.
Ideally we should try to better match the incoming DNS requests as here that fails with buildah.
Unfortunately the regex syntax is not well documented, horrible to be used. I spend hours this afternoon without success using different examples
name regex .*\.cnoe\.localtest\.me\.demo\.cluster\.local ingress-nginx-controller.ingress-nginx.svc.cluster.local

name regex (.*)\.cnoe\.localtest\.me\.demo\.svc\.cluster\.local ingress-nginx-controller.ingress-nginx.svc.cluster.local
name regex (.*)\.cnoe\.localtest\.me\.demo\.cluster\.local ingress-nginx-controller.ingress-nginx.svc.cluster.local

name regex (.*)\.cnoe\.localtest\.me\.(.*)\.svc\.cluster\.local ingress-nginx-controller.ingress-nginx.svc.cluster.local
name regex (.*)\.cnoe\.localtest\.me\.(.*)\.cluster\.local ingress-nginx-controller.ingress-nginx.svc.cluster.local

gitea.cnoe.localtest.me.gitea.svc.cluster.local

Is this the address that's being queried? That does not look right to me. Queries should be made for gitea.cnoe.localtest.me. Do you have domain search configured in your pod that's adding the cluster.local stuff?

Is this the address that's being queried?

No .The address which is requested by buildah is gitea.cnoe.localtest.me as the image is referenced as gitea.cnoe.localtest.me:8443/giteaadmin/my-quarkus-app
Here is the buildah log
[buildah-image : build-and-push] Error: pushing image "gitea.cnoe.localtest.me:8443/giteaadmin/my-quarkus-app" to "docker://gitea.cnoe.localtest.me:8443/giteaadmin/my-quarkus-app": trying to reuse blob sha256:dd5e77a90e609b328f2e49aa60e50bd8837e505c157060c337725413ccf449f1 at destination: pinging container registry gitea.cnoe.localtest.me:8443: Get "http://gitea.cnoe.localtest.me:8443/v2/": dial tcp: lookup gitea.cnoe.localtest.me: no such host

The address queried gitea.cnoe.localtest.me.gitea.svc.cluster.local is reported within the log of coreDNS.

Do you have domain search configured in your pod that's adding the cluster.local stuff?

No

I just tested with buildah in k8s cluster and it does work for me:

Did you created a pod within the idpbuilder cluster to test the commands you mentioned ?

I will create a new pipeline using simply your test case to reproduce the error.

I can reproduce the error using the default configMap of CoreDNS.
The pod (created by a Tekton task) can curl the gitea API Swagger
## Host and DNS nameservers cfg ...
# Kubernetes-managed hosts file.
<IP_ADDRESS>	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
fe00::0	ip6-mcastprefix
fe00::1	ip6-allnodes
fe00::2	ip6-allrouters
<IP_ADDRESS>	build-push-image-curl-gitea-pod
search demo.svc.cluster.local svc.cluster.local cluster.local dns.podman
nameserver <IP_ADDRESS>
options ndots:5
## Using as image: [quay.io/curl/curl](http://quay.io/curl/curl)
## Curl to the registry host: https://gitea.cnoe.localtest.me:8443/api/swagger ...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Host [gitea.cnoe.localtest.me:8443](http://gitea.cnoe.localtest.me:8443/) was resolved.
* IPv6: (none)
* IPv4: <IP_ADDRESS>
*   Trying <IP_ADDRESS>:8443...
* ALPN: curl offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [122 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [19 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [447 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [80 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [52 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [52 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 / x25519 / id-ecPublicKey
* ALPN: server accepted h2
* Server certificate:
*  subject: [O=cnoe.io](http://o=cnoe.io/)
*  start date: Oct  7 10:18:58 2024 GMT
*  expire date: Oct  7 16:18:58 2025 GMT
*  issuer: [O=cnoe.io](http://o=cnoe.io/)
*  SSL certificate verify result: self-signed certificate (18), continuing anyway.
*   Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA256
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [57 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [57 bytes data]
* Connected to [gitea.cnoe.localtest.me](http://gitea.cnoe.localtest.me/) (<IP_ADDRESS>) port 8443
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://gitea.cnoe.localtest.me:8443/api/swagger
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: [gitea.cnoe.localtest.me:8443](http://gitea.cnoe.localtest.me:8443/)]
* [HTTP/2] [1] [:path: /api/swagger]
* [HTTP/2] [1] [user-agent: curl/8.10.1]
* [HTTP/2] [1] [accept: */*]
} [5 bytes data]
> GET /api/swagger HTTP/2
> Host: [gitea.cnoe.localtest.me:8443](http://gitea.cnoe.localtest.me:8443/)
> User-Agent: curl/8.10.1
> Accept: */*
>
* Request completely sent off
{ [5 bytes data]
< HTTP/2 200
< date: Tue, 08 Oct 2024 12:57:41 GMT
< content-type: text/html; charset=utf-8
< content-length: 701
< cache-control: max-age=0, private, must-revalidate, no-transform
< set-cookie: i_like_gitea=0094044c3a9cf9af; Path=/; HttpOnly; Secure; SameSite=Lax
< set-cookie: _csrf=9Xp8AFgYupbIHdyoC0vjp558G8U6MTcyODM5MjI2MTU3NjQyMzEwMg; Path=/; Max-Age=86400; HttpOnly; Secure; SameSite=Lax
< x-frame-options: SAMEORIGIN
<!DOCTYPE html>
< strict-transport-security: max-age=31536000; includeSubDomains
<

		<title>Gitea API</title>
		<link href="/assets/css/swagger.css?v=1.22.0" rel="stylesheet">

		<svg viewBox="0 0 16 16" class="svg octicon-reply" aria-hidden="true" width="16" height="16"><path d="M6.78 1.97a.75.75 0 0 1 0 1.06L3.81 6h6.44A4.75 4.75 0 0 1 15 10.75v2.5a.75.75 0 0 1-1.5 0v-2.5a3.25 3.25 0 0 0-3.25-3.25H3.81l2.97 2.97a.749.749 0 0 1-.326 1.275.75.75 0 0 1-.734-.215L1.47 7.28a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0"/></svg>Return to Gitea
{ [701 bytes data]

100   701  100   701    0     0  67690      0 --:--:-- --:--:-- --:--:-- 70100
* Connection #0 to host [gitea.cnoe.localtest.me](http://gitea.cnoe.localtest.me/) left intact

and coreDNS logs such information
[INFO] <IP_ADDRESS>:34821 - 19433 "A IN gitea.cnoe.localtest.me.argocd.svc.cluster.local. udp 77 false 1232" NXDOMAIN qr,aa,rd 159 0.000122458s
[INFO] <IP_ADDRESS>:60991 - 65075 "AAAA IN gitea.cnoe.localtest.me.argocd.svc.cluster.local. udp 77 false 1232" NXDOMAIN qr,aa,rd 159 0.000105833s
[INFO] <IP_ADDRESS>:47992 - 35361 "A IN gitea.cnoe.localtest.me.svc.cluster.local. udp 70 false 1232" NXDOMAIN qr,aa,rd 152 0.000052625s
[INFO] <IP_ADDRESS>:46282 - 64908 "AAAA IN gitea.cnoe.localtest.me.svc.cluster.local. udp 70 false 1232" NXDOMAIN qr,aa,rd 152 0.000067584s
[INFO] <IP_ADDRESS>:45610 - 13287 "AAAA IN gitea.cnoe.localtest.me.cluster.local. udp 66 false 1232" NOERROR qr,aa,rd 148 0.000096375s
[INFO] <IP_ADDRESS>:46353 - 30971 "A IN gitea.cnoe.localtest.me.cluster.local. udp 66 false 1232" NOERROR qr,aa,rd 127 0.000074416s

The Buildah pod created also by a tekton task fails
[maven-package-test : mvn-goals] [INFO] ------------------------------------------------------------------------
[maven-package-test : mvn-goals] [INFO] BUILD SUCCESS
[maven-package-test : mvn-goals] [INFO] ------------------------------------------------------------------------
[maven-package-test : mvn-goals] [INFO] Total time:  30.867 s
[maven-package-test : mvn-goals] [INFO] Finished at: 2024-10-08T14:33:29Z
[maven-package-test : mvn-goals] [INFO] ------------------------------------------------------------------------

[buildah-image : build-and-push] ## Buildah version
[buildah-image : build-and-push] buildah version 1.37.3 (image-spec 1.1.0, runtime-spec 1.2.0)
[buildah-image : build-and-push] ## Build the project ...
[buildah-image : build-and-push] STEP 1/11: FROM registry.access.redhat.com/ubi8/openjdk-21:1.20
[buildah-image : build-and-push] Trying to pull registry.access.redhat.com/ubi8/openjdk-21:1.20...
[buildah-image : build-and-push] Getting image source signatures
[buildah-image : build-and-push] Checking if image destination supports signatures
[buildah-image : build-and-push] Copying blob sha256:b46e4e7892d6177335aee5445f59105231c351f2fb68a24f25ee7b2656e29674
[buildah-image : build-and-push] Copying blob sha256:8dc97931d0a29118b7e8dd695ac355f7b569223a972f3eb87f2ff07fc9fc190a
[buildah-image : build-and-push] Copying config sha256:b8d81704f56858c6859ce949133635bb716162ddd3c8d012ec77572449403153
[buildah-image : build-and-push] Writing manifest to image destination
[buildah-image : build-and-push] Storing signatures
[buildah-image : build-and-push] STEP 2/11: ENV LANGUAGE='en_US:en'
[buildah-image : build-and-push] STEP 3/11: COPY --chown=185 target/quarkus-app/lib/ /deployments/lib/
[buildah-image : build-and-push] STEP 4/11: COPY --chown=185 target/quarkus-app/*.jar /deployments/
[buildah-image : build-and-push] STEP 5/11: COPY --chown=185 target/quarkus-app/app/ /deployments/app/
[buildah-image : build-and-push] STEP 6/11: COPY --chown=185 target/quarkus-app/quarkus/ /deployments/quarkus/
[buildah-image : build-and-push] STEP 7/11: EXPOSE 8080
[buildah-image : build-and-push] STEP 8/11: USER 185
[buildah-image : build-and-push] STEP 9/11: ENV JAVA_OPTS_APPEND="-Dquarkus.http.host=<IP_ADDRESS> -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
[buildah-image : build-and-push] STEP 10/11: ENV JAVA_APP_JAR="/deployments/quarkus-run.jar"
[buildah-image : build-and-push] STEP 11/11: ENTRYPOINT [ "/opt/jboss/container/java/run/run-java.sh" ]
[buildah-image : build-and-push] COMMIT gitea.cnoe.localtest.me:8443/giteaadmin/my-quarkus-app
[buildah-image : build-and-push] Getting image source signatures
[buildah-image : build-and-push] Copying blob sha256:dd5e77a90e609b328f2e49aa60e50bd8837e505c157060c337725413ccf449f1
[buildah-image : build-and-push] Copying blob sha256:8b30b41a0b038bf660c4538ae04bb77b7cdbfcfcb0f5a378129ddf82b91542e7
[buildah-image : build-and-push] Copying blob sha256:1afbc0eb5ccf4bc27865798faecac3391e265df9bfaeb5e133588be2df4f8c1e
[buildah-image : build-and-push] Copying config sha256:e14b39998e596b26b458e30899950342808ec56855cc4efe2701d752b449b4c9
[buildah-image : build-and-push] Writing manifest to image destination
[buildah-image : build-and-push] --> e14b39998e59
[buildah-image : build-and-push] Successfully tagged gitea.cnoe.localtest.me:8443/giteaadmin/my-quarkus-app:latest
[buildah-image : build-and-push] e14b39998e596b26b458e30899950342808ec56855cc4efe2701d752b449b4c9
[buildah-image : build-and-push] + buildah --storage-driver=overlay push --tls-verify=false --digestfile /tmp/image-digest gitea.cnoe.localtest.me:8443/giteaadmin/my-quarkus-app docker://gitea.cnoe.localtest.me:8443/giteaadmin/my-quarkus-app
[buildah-image : build-and-push] Getting image source signatures
[buildah-image : build-and-push] Copying blob sha256:dd5e77a90e609b328f2e49aa60e50bd8837e505c157060c337725413ccf449f1
[buildah-image : build-and-push] Copying blob sha256:8b30b41a0b038bf660c4538ae04bb77b7cdbfcfcb0f5a378129ddf82b91542e7
[buildah-image : build-and-push] Copying blob sha256:1afbc0eb5ccf4bc27865798faecac3391e265df9bfaeb5e133588be2df4f8c1e
[buildah-image : build-and-push] Error: pushing image "gitea.cnoe.localtest.me:8443/giteaadmin/my-quarkus-app" to "docker://gitea.cnoe.localtest.me:8443/giteaadmin/my-quarkus-app": trying to reuse blob sha256:dd5e77a90e609b328f2e49aa60e50bd8837e505c157060c337725413ccf449f1 at destination: pinging container registry gitea.cnoe.localtest.me:8443: Get "http://gitea.cnoe.localtest.me:8443/v2/": dial tcp: lookup gitea.cnoe.localtest.me: no such host

and coredns log reports
[INFO] <IP_ADDRESS>:35516 - 11795 "AAAA IN gitea.cnoe.localtest.me.svc.cluster.local. udp 59 false 512" NXDOMAIN qr,aa,rd 152 0.000026083s
[INFO] <IP_ADDRESS>:35516 - 62994 "A IN gitea.cnoe.localtest.me.svc.cluster.local. udp 59 false 512" NXDOMAIN qr,aa,rd 152 0.000030917s
[INFO] <IP_ADDRESS>:38213 - 20558 "AAAA IN gitea.cnoe.localtest.me.cluster.local. udp 55 false 512" NOERROR qr,aa,rd 148 0.000018417s
[INFO] <IP_ADDRESS>:38213 - 53833 "A IN gitea.cnoe.localtest.me.cluster.local. udp 55 false 512" NOERROR qr,aa,rd 127 0.000017834s
[INFO] <IP_ADDRESS>:52151 - 29077 "A IN gitea.cnoe.localtest.me.demo.svc.cluster.local. udp 64 false 512" NXDOMAIN qr,aa,rd 157 0.000017459s
[INFO] <IP_ADDRESS>:52151 - 33172 "AAAA IN gitea.cnoe.localtest.me.demo.svc.cluster.local. udp 64 false 512" NXDOMAIN qr,aa,rd 157 0.000035791s
[INFO] <IP_ADDRESS>:51807 - 6290 "AAAA IN gitea.cnoe.localtest.me.svc.cluster.local. udp 59 false 512" NXDOMAIN qr,aa,rd 152 0.000041708s
[INFO] <IP_ADDRESS>:51807 - 26514 "A IN gitea.cnoe.localtest.me.svc.cluster.local. udp 59 false 512" NXDOMAIN qr,aa,rd 152 0.000103916s
...

@cmoulliard Can you test this for me? I tested with fedora image. I think there's an additional security feature that's causing this issue.

Run a pod with quay.io/buildah/stable:v1
Reproduce and observe dns response.

# curl https://argocd.cnoe.localtest.me
curl: (6) Could not resolve host: argocd.cnoe.localtest.me
# # curl https://cnoe.localtest.me
curl: (60) SSL certificate problem: self-signed certificate
More details here: https://curl.se/docs/sslcerts.html

So http request against cnoe.localtest.me works, but argoc.cnoe.localtest.me does not. Because...

# dig argocd.cnoe.localtest.me
;; QUESTION SECTION:
;argocd.cnoe.localtest.me.	IN	A

;; ANSWER SECTION:
ingress-nginx-controller.ingress-nginx.svc.cluster.local. 30 IN	A <IP_ADDRESS>

# dig cnoe.localtest.me
;; QUESTION SECTION:
;cnoe.localtest.me.		IN	A

;; ANSWER SECTION:
cnoe.localtest.me.	30	IN	A	<IP_ADDRESS>

The difference is the answer response. Apparently exact match in coredns returns the answer section as requested while regex match is up to users. See: https://coredns.io/plugins/rewrite/#response-rewrites
Some distributions like Fedora are apparently very sensitive to this. To resolve this, try updating the coredns config like so:
rewrite stop {
        name regex (.*).cnoe.localtest.me ingress-nginx-controller.ingress-nginx.svc.cluster.local answer auto
    }

The answer auto section is what you need.
Once updated, wait for it to propagate. About 30 seconds.
# curl https://argocd.cnoe.localtest.me
curl: (60) SSL certificate problem: self-signed certificate
More details here: https://curl.se/docs/sslcerts.html

The difference is the answer response. Apparently exact match in coredns returns the answer section as requested while regex match is up to users. See: https://coredns.io/plugins/rewrite/#response-rewrites

I was exactly thinking about that as I read somewhere that some CLI check also the answer to be sure that there is no man in the middle attack. I will make a test tomorrow. Many thanks for your feedback

I did a new test successfully this morning
[buildah-image : build-and-push] Successfully tagged gitea.cnoe.localtest.me:8443/giteaadmin/my-quarkus-app:latest
[buildah-image : build-and-push] 74674d0d1472ecfb8bb2e42cf9a0a96b7d76d4820172aee9d903dae87dc3fd90
[buildah-image : build-and-push] + buildah --storage-driver=overlay push --tls-verify=false --digestfile /tmp/image-digest gitea.cnoe.localtest.me:8443/giteaadmin/my-quarkus-app docker://gitea.cnoe.localtest.me:8443/giteaadmin/my-quarkus-app
[buildah-image : build-and-push] Getting image source signatures
[buildah-image : build-and-push] Copying blob sha256:20389ed4aeda74d541449deffb02c642dac8a466318e5659eac7444bfe4343cc
[buildah-image : build-and-push] Copying blob sha256:dd5e77a90e609b328f2e49aa60e50bd8837e505c157060c337725413ccf449f1
[buildah-image : build-and-push] Copying blob sha256:8b30b41a0b038bf660c4538ae04bb77b7cdbfcfcb0f5a378129ddf82b91542e7
[buildah-image : build-and-push] Copying config sha256:74674d0d1472ecfb8bb2e42cf9a0a96b7d76d4820172aee9d903dae87dc3fd90
[buildah-image : build-and-push] Writing manifest to image destination
[buildah-image : build-and-push] + set +x
[buildah-image : build-and-push] sha256:4e236a2bce1f0102f505d35a2661d2e9c214f5a84373ca2942a388b3b566768bgitea.cnoe.localtest.me:8443/giteaadmin/my-quarkus-app

using as rewrite rules
rewrite stop {
  name regex (.*).cnoe.localtest.me ingress-nginx-controller.ingress-nginx.svc.cluster.local answer auto
}
rewrite name exact cnoe.localtest.me ingress-nginx-controller.ingress-nginx.svc.cluster.local

Will you or should I submit a PR ?
@nabuskey

PR by you would be great :)


Maybe deprecate TSLint?

https://medium.com/palantir/tslint-in-2019-1a144c2317a9

In order to avoid bifurcating the linting tool space for TypeScript, we therefore plan to deprecate TSLint and focus our efforts instead on improving ESLint’s TypeScript support.

Eslint is the better choice in the visible future.
https://github.com/typescript-eslint/typescript-eslint

Just find some sane defaults and extend from there. Try @typescript-eslint


Artifact pull jobs say "SUCCESS" even when no artifact was fetched

See original issue on GitLab
In GitLab by [Gitlab user @samthursfield] on Jul 14, 2017, 13:51
It's misleading for users to see "SUCCESS" for a pull job, when in fact the pull job did nothing.
It should say something like "NOT FOUND" or "MISSING" instead so it's clear that it needs to be built.

In GitLab by [Gitlab user @juergbi] on Jul 19, 2017, 07:12
assigned to [Gitlab user @juergbi]

In GitLab by [Gitlab user @tristanvb] on Jul 19, 2017, 09:31
Not sure if it makes sense to flat out assign this to [Gitlab user @juergbi] ... anyway leaving as is for the moment...
The problems here are:

Plugin.timed_activity() assumes that any activity is either going to succeed or fail
The outer activity timer in the scheduler (job.py) does not have a way of knowing if a job is a succeed or fail kind of job either

So, we would have to fix both of these for more comprehensive output for the kind of task which only might have some effect.
First we'd need some parameter to timed activity to change the success message to something else (and we would have to know what that something else is going to be... green "OK" ? or what ?)
Then we'd have to mark the specific scheduler Queue with some attribute to inform the scheduler what kind of timed activity flavor to use.

In GitLab by [Gitlab user @juergbi] on Jul 19, 2017, 10:03
With my OSTree summary file branch, pull jobs are scheduled only when BuildStream knows that the remote artifact repository already has that artifact. I.e., the 'not found' case should not occur anymore. And as the build plan in my branch is constructed based on the summary file, pull errors can no longer be ignored.

In GitLab by [Gitlab user @tristanvb] on Jul 19, 2017, 10:30
[Gitlab user @juergbi] Good that we can just avoid this !
But I wonder how this plays out for:

User who has artifact cache configured
Is currently performing an offline build

In GitLab by [Gitlab user @juergbi] on Jul 19, 2017, 10:35
If fetching the summary file fails, we could switch to offline mode instead of bailing out.

In GitLab by [Gitlab user @juergbi] on Jul 20, 2017, 07:15
mentioned in merge request !59

In GitLab by [Gitlab user @tristanvb] on Jul 20, 2017, 10:28
closed via merge request !59


entities card does not present header toggle for automation entities

I have an entities card with all of my automations on it for ease of disabling when guest are over, I am working on something, etc.  In doing so, I have noticed that on an entities card that only contains automation entities, there is no header toggle presented.  For example:
- type: entities
  title: Test Card
  entities:
    - automation.apartment_alarms
    - automation.arrive_actions
    - automation.attic_lights_autooff

shows:

Also, show_header_toggle: true has no effect.
I would expect there to be a group toggle at the top to allow turning off all the automations at once.

/move home-assistant-polymer


add './create_values_yaml.sh' to kops.yaml, fix #398

Issue #, if available:
#398
Description of changes:
fix #398 stat .//values.yaml: no such file or directory
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

Thanks!


Need to create HTML

HTML code needs to be created within the index.html file.

can you explain more about what is needed?


chore(ci): Setup CircleCI

:tada: This PR is included in version 1.0.0 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:

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

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


NNI does not detect GPU on Windows

Short summary about the issue/question:
On my Windows machine, which has only one GPU, the GPU Metrics collector does not detect my GPU.
Brief what process you are following:
Run NNI with a sample experiment.
How to reproduce it:
nni Environment:

nni version: 1.3
nni mode(local|pai|remote): local
OS: Windows 10 1909
python version: 3.7.3
is conda or virtualenv used?:  conda
is running in docker?: no

Anything else we need to know:
Bug seems to be related to the GPU metrics collector script. Here's sample output:
{"Timestamp": "Thu Feb 13 15:55:28 2020", "gpuCount": 0, "gpuInfos": []}

Running NVIDIA-SMI results in the following. The GPU is detect and the tool is in path,
C:\Users\xxx>nvidia-smi
Thu Feb 13 17:02:08 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 432.00       Driver Version: 432.00       CUDA Version: 10.1     |
|-------------------------------+----------------------+----------------------+
| GPU  Name            TCC/WDDM | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  TITAN Xp           WDDM  | 00000000:03:00.0 Off |                  N/A |
| 23%   37C    P8    17W / 250W |   1827MiB / 12288MiB |      3%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0       432    C+G   ...ge_8wekyb3d8bbwe\MicrosoftPdfReader.exe N/A      |
....
|    0     21596    C+G   ...6)\Google\Chrome\Application\chrome.exe N/A      |
+-----------------------------------------------------------------------------+

Hi @Markus92 , could you please run this script file gpu_metrics_collector.zip in your machine? This is the script NNI used to detect your gpu devices, you could change the $env:METRIC_OUTPUT_DIR="C:\Users" field to your own path.

Hi @Markus92 , could you please run this script file gpu_metrics_collector.zip and get the output in your machine? This is the script NNI used to detect your gpu devices, you could change the $env:METRIC_OUTPUT_DIR="C:\Users" field in the script to your own path.

@Markus92 any feedback? thanks.

Hi @scarlett2018, due to the covid-19 situation we have very limited access to research PCs right now and have not had the opportunity to run this script yet, sorry about that. We have to use all resources for caring for our patients :)
Feel free to close this issue and I will reopen it when things have calmed down a bit, and I can run the script and have access again.

Hi @scarlett2018, due to the covid-19 situation we have very limited access to research PCs right now and have not had the opportunity to run this script yet, sorry about that. We have to use all resources for caring for our patients :)
Feel free to close this issue and I will reopen it when things have calmed down a bit, and I can run the script and have access again.

Thanks @Markus92 , stay healthy =).


Multiple Calls to Consolidate RollingWindows Only Updates One RollingWindow

Expected Behavior
Each RollingWindow of Consolidated Bars should be populated with data
Actual Behavior
Only the most recent call to self.Consolidate populates a RollingWindow
Reproducing the Problem
class CryingFluorescentYellowHippopotamus(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2015, 1, 5)
        self.SetEndDate(2015, 1, 6)
        self.SetCash(1)

        # Subscribe to minute data
        self.symbols = ['EURUSD', 'GBPUSD', 'USDJPY']
        for symbol in self.symbols: self.AddForex(symbol, Resolution.Minute, Market.Oanda)

        # Expect: Rolling Window of 4 Hourly bars for each symbol
        self.symbolConsolidatedData = { symbol : RollingWindow[QuoteBar](4) for symbol in self.symbols }
        for symbol in self.symbols:
            self.Consolidate(symbol, Resolution.Hour, lambda x: self.symbolConsolidatedData[symbol].Add(x) )

        #
        self.Schedule.On(self.DateRules.EveryDay('EURUSD'),
                         self.TimeRules.Every(timedelta(hours=1)),
                         self.CheckDataWindows)

    def OnData(self, data):
        pass

    def CheckDataWindows(self):

        # Number of bars in each window
        count = { symbol : window.Count for symbol, window in self.symbolConsolidatedData.items() }
        self.Log(count)

        return

Sample Logs:
2015-01-05 00:00:00 : | {'EURUSD': 0, 'GBPUSD': 0, 'USDJPY': 0}
2015-01-05 01:00:00 : | {'EURUSD': 0, 'GBPUSD': 0, 'USDJPY': 3}
2015-01-05 02:00:00 : | {'EURUSD': 0, 'GBPUSD': 0, 'USDJPY': 4}
2015-01-05 03:00:00 : | {'EURUSD': 0, 'GBPUSD': 0, 'USDJPY': 4}
2015-01-05 04:00:00 : | {'EURUSD': 0, 'GBPUSD': 0, 'USDJPY': 4}
2015-01-05 05:00:00 : | {'EURUSD': 0, 'GBPUSD': 0, 'USDJPY': 4}

In particular, note that data for 2015-01-05 00:00:00 for all three symbols were sent to the last RollingWindow.
Manually adding the subscription works as expected:
class CryingFluorescentYellowHippopotamus(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2015, 1, 5)
        self.SetEndDate(2015, 1, 6)
        self.SetCash(1)

        # Subscribe to minute data
        self.symbols = ['EURUSD', 'GBPUSD', 'USDJPY']
        for symbol in self.symbols: self.AddForex(symbol, Resolution.Minute, Market.Oanda)

        # Expect: Rolling Window of 4 Hourly bars for each symbol
        self.symbolConsolidatedData = { symbol : RollingWindow[QuoteBar](4) for symbol in self.symbols }
        for symbol in self.symbols:
            consolidator = QuoteBarConsolidator(timedelta(hours=1))
            consolidator.DataConsolidated += self.OnDataConsolidated
            self.SubscriptionManager.AddConsolidator(self.Symbol(symbol), consolidator)
            #self.Consolidate(symbol, Resolution.Hour, lambda x: self.symbolConsolidatedData[symbol].Add(x) )

        self.Schedule.On(self.DateRules.EveryDay('EURUSD'),
                         self.TimeRules.Every(timedelta(hours=1)),
                         self.CheckDataWindows)

    def OnData(self, data):
        pass

    def OnDataConsolidated(self, sender, bar):
        self.symbolConsolidatedData[bar.Symbol.Value].Add(bar)

    def CheckDataWindows(self):

        # Number of bars in each window
        count = { symbol : window.Count for symbol, window in self.symbolConsolidatedData.items() }
        self.Log(count)

        return

Sample Logs:
2015-01-05 00:00:00 : | {'EURUSD': 0, 'GBPUSD': 0, 'USDJPY': 0}
2015-01-05 01:00:00 : | {'EURUSD': 1, 'GBPUSD': 1, 'USDJPY': 1}
2015-01-05 02:00:00 : | {'EURUSD': 2, 'GBPUSD': 2, 'USDJPY': 2}
2015-01-05 03:00:00 : | {'EURUSD': 3, 'GBPUSD': 3, 'USDJPY': 3}
2015-01-05 04:00:00 : | {'EURUSD': 4, 'GBPUSD': 4, 'USDJPY': 4}
2015-01-05 05:00:00 : | {'EURUSD': 4, 'GBPUSD': 4, 'USDJPY': 4}

System Information
LEAN master (v11908)
Checklist

[ x] I have completely filled out this template
[ x] I have confirmed that this issue exists on the current master branch
[ x] I have confirmed that this is not a duplicate issue by searching issues

[ x] I have provided detailed steps to reproduce the issue

Hey @adamw96!
It's something about the lambda x: self.symbolConsolidatedData[symbol].Add(x) that isn't working correctly, not sure exactly what yet, but the following algorithm works as expected I believe:
class CryingFluorescentYellowHippopotamus(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2015, 1, 5)
        self.SetEndDate(2015, 1, 6)
        self.SetCash(1)

        # Subscribe to minute data
        self.symbols = ['EURUSD', 'GBPUSD', 'USDJPY']
        for symbol in self.symbols: self.AddForex(symbol, Resolution.Minute, Market.Oanda)

        # Expect: Rolling Window of 4 Hourly bars for each symbol
        self.symbolConsolidatedData = { symbol : RollingWindow[QuoteBar](4) for symbol in self.symbols }
        self.Log(str(self.symbolConsolidatedData))
        for symbol in self.symbols:
            self.Consolidate(symbol, Resolution.Hour, self.OnDataConsolidated )

        self.Schedule.On(self.DateRules.EveryDay('EURUSD'),
                         self.TimeRules.Every(timedelta(hours=1)),
                         self.CheckDataWindows)

    def CheckDataWindows(self):
        count = { symbol : window.Count for symbol, window in self.symbolConsolidatedData.items() }
        self.Log(count)

        return
    def OnDataConsolidated(self, bar):
        self.symbolConsolidatedData[bar.Symbol.Value].Add(bar)

okay, after some reading I believe this is an expected (weird) behavior of python lambdas, see https://stackoverflow.com/questions/938429/scope-of-lambda-functions-and-their-parameters/938493#938493 and https://stackoverflow.com/questions/7514093/lambda-function-dont-closure-the-parameter-in-python
from pprint import pprint

li = []

for i in range(5):
        li.append(lambda : pprint(i))

for k in li:
        k()

Will print
4
4
4
4
4

Closing for now, suggest just create a method and use it instead as can be seen in previous response https://github.com/QuantConnect/Lean/issues/5650#issuecomment-861069023


Add a GH Action for checking spellings

Refer here

I will like to work on this  @HarshCasper  :)


Vibora unusable: doesn't works with Python 3.7 and can't install from sources

Describe the bug
Right now, installing from pypi and using python 3.7 makes unusable vibora, if you try install from sources there is a missing file (parser.c) make impossible to work in Linux.
To Reproduce
With pip

pip install vibora (using python 3.7)
Run any example
With sources
Clone repo
python setup.py install

Expected behavior
The library needs to work, right now is imposible to do that
Screenshots
With sources i get:
building 'vibora.parsers.parser' extension
creating build/temp.linux-x86_64-3.7
creating build/temp.linux-x86_64-3.7/vibora
creating build/temp.linux-x86_64-3.7/vibora/parsers
creating build/temp.linux-x86_64-3.7/vendor
creating build/temp.linux-x86_64-3.7/vendor/http-parser-2.8.1
gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -fno-plt -flto -fuse-linker-plugin -ffat-lto-objects -flto-partition=none -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -fno-plt -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -fno-plt -fPIC -I. -I/git/vibora/vibora -I/usr/include/python3.7m -c vibora/parsers/parser.c -o build/temp.linux-x86_64-3.7/vibora/parsers/parser.o -O3
gcc: error: vibora/parsers/parser.c: No existe el fichero o el directorio
gcc: error fatal: no hay ficheros de entrada
Additional context

run build.py

+1 having this issue also on python 3.7

Using conda and a fresh checkout of vibora:
my environment.yml:
name: vibora-py37
dependencies:
  - python>=3.7
  - pip:
    - vibora

conda env create --file environment.yml
conda activate vibora-py37
git clone https://github.com/vibora-io/vibora.git
cd vibora/samples

python --version
Python 3.7.0

Running any vibora script results in an error:
python simple.py
Traceback (most recent call last):
  File "simple.py", line 1, in <module>
    from vibora import Vibora
  File "/Users/endafarrell/anaconda/anaconda3/envs/vibora-py37/lib/python3.7/site-packages/vibora/__init__.py", line 7, in <module>
    from .server import *
  File "/Users/endafarrell/anaconda/anaconda3/envs/vibora-py37/lib/python3.7/site-packages/vibora/server.py", line 11, in <module>
    from .workers.handler import RequestHandler
  File "/Users/endafarrell/anaconda/anaconda3/envs/vibora-py37/lib/python3.7/site-packages/vibora/workers/handler.py", line 7, in <module>
    from ..hooks import Events
  File "/Users/endafarrell/anaconda/anaconda3/envs/vibora-py37/lib/python3.7/site-packages/vibora/hooks.py", line 38
    self.async = iscoroutinefunction(handler)
             ^
SyntaxError: invalid syntax

Same on the v0.1.0 branch:
endafarrell@SpaceGrey ~/W/g/v/v/samples (master) [1]> git checkout v0.1.0                           (vibora-py37)
Switched to branch 'v0.1.0'
Your branch is up to date with 'origin/v0.1.0'.
endafarrell@SpaceGrey ~/W/g/v/v/samples (v0.1.0)> python simple.py                                  (vibora-py37)
Traceback (most recent call last):
  File "simple.py", line 1, in <module>
    from vibora import Vibora, Response
  File "/Users/endafarrell/anaconda/anaconda3/envs/vibora-py37/lib/python3.7/site-packages/vibora/__init__.py", line 7, in <module>
    from .server import *
  File "/Users/endafarrell/anaconda/anaconda3/envs/vibora-py37/lib/python3.7/site-packages/vibora/server.py", line 11, in <module>
    from .workers.handler import RequestHandler
  File "/Users/endafarrell/anaconda/anaconda3/envs/vibora-py37/lib/python3.7/site-packages/vibora/workers/handler.py", line 7, in <module>
    from ..hooks import Events
  File "/Users/endafarrell/anaconda/anaconda3/envs/vibora-py37/lib/python3.7/site-packages/vibora/hooks.py", line 38
    self.async = iscoroutinefunction(handler)
             ^
SyntaxError: invalid syntax

Not being able to use the current version of python is a showstopper (to me at least).

OK: I realise I've made a mistake by having vibora in my conda env file.
New env file:
name: vibora-py37
dependencies:
  - python>=3.7
  - cython=0.28.3

Then update conda env, run the checked-out build.py, then python setup.py install.
Now, running python samples/simple.py works.

I think this can be caused by the fact that since Python 3.7, async and await are reserved keywords: source.

It seems that the latest version is not on the pip source. self.async = iscoroutinefunction(handler) in the error message above is self.is_async = iscoroutinefunction(handler) in the git project.

I thought I'd try out vibora but installing from pip and then running the sample hello world program gives:
  File "../env/lib/python3.7/site-packages/vibora/hooks.py", line 38
    self.async = iscoroutinefunction(handler)
             ^
SyntaxError: invalid syntax

I then searched and found this relatively old bug. So it seems that this project is abandoned ?

I asked the author some time ago that he is working on the official version, indicating that the latest version should be released soon. But it seems that this time is a bit long.

April 27, 2019. Vibora is still unusable on Python 3.7. Same error.

April 27, 2019. Vibora is still unusable on Python 3.7. Same error.

@inadarei
It looks like there is some design issue in Vibora, and its micro-benchmarks weren't correct after all. If you look at the results of new rounds of tests from TechEmpower, you will see that Vibora didn't shine in performance:

run completed on the 19th of April
run completed on the 26th of April

My web framework BlackSheep, which is also using Cython, httptools, and uvloop, did much better in these tests; and also the frameworks from Tom Christie Uvicorn and Starlette (the latter uses the former as its base, they both use uvloop and httptools but without Cythonizing things).
Something looks wrong - I also wasn't able to reproduce such good results on my local PC and using wrk to generate load, a few months ago. Maybe in how it handles multiprocessing (?).

A 3 seconds look at the benchmark code and voilà: someone is benchmarking Vibora in debug mode lol.
https://github.com/TechEmpower/FrameworkBenchmarks/blob/master/frameworks/Python/vibora/app.py
I'll add Vibora to TechEmpower myself after the release.
BTW: If you want to reproduce the results of my micro-benchmarks (lookout the machine specs):
https://github.com/vibora-io/benchmarks
It's quite simple, and I'll be glad to add your framework there if you wish.
Anyway, great job on BlackSheep :)

Hi Frank,
So somebody added your framework to TechEmpower benchmarks without your knowledge and making such mistake! I feel sorry for this, and sorry for my previous words: for sure I didn't imagine something like this.
I rapidly gave a look at the source code you linked to, and the source code of your benchmarks in GitHub, and I think the person who added Vibora to TechEmpower benchmark is forgivable:

it doesn't look intuitive that app.run by default is in debug mode, it violates the principle of least astonishment and this case demonstrates it
I would recommend changing this method to run in production mode by default

I didn't lie when I wrote that I couldn't reproduce the same results when running the tests locally, but maybe I did something wrong. This is what I did some months ago:

cloned your vibora benchmarks repository (and learnt something more about wrk in the process - so thank you :smile:)
added uvicorn / Starlette to them
ran tests using the same version of Python used there (3.6)
updated Dockerfile to use Python 3.7 image and ran tests with the newest version of Python, and here I didn't manage to get the same results even rebuilding Vibora for P3.7

Yes, if you have time and mood, I would be grateful if you added BlackSheep there too, and thanks for you kind words. :blush:
PS. I am happy that I managed to get you answer on this thread! Now it got a bit out of topic, my fault.

Regarding the app.run, I completely agree with you and this is already done in the upcoming release (I learned so much building this project that I decided to build it again lol).
I'll add BlackSheep there (and a few other async frameworks) too.
I'm three months late on my release so just be patient :)

Vibora has been broken for a very long time on the later versions of Python - even if you're not ready for a feature release, it would make a lot of sense to make a release fixing this problem either way, right? It's a complete showstopper for a lot of people, after all.
I'd install from Git, but it's impossible to automate the install using normal tools - I can't integrate Vibora into my build that way, because I need to be able to use Pipenv and lock the dependencies.


Rectify the output of the sample program

The README.md file shows what I think is an outdated output of the sample C program.

Yes, you are indeed correct - thanks for noticing and fixing!


[Ubuntu] Fix cargo outdated version in report

Description
Bug fix for cargo outdated version in software report
Related issue:
n/a
Check list

[ ] Related issue / work item is attached
[x] Tests are written (if applicable)
[ ] Documentation is updated (if applicable)
[ ] Changes are tested and related VM images are successfully generated

/azp run ubuntu2204


Create lipsum.txt

Ipsum file

This is a de,o text file
Content are from Lorem ipsum

Addind Ipsum.txt
The file was reviewed and added.


Return value instead of key for getCurrentString et al in Cursor

Addresses #51. Affects: getCurrentString(), getCurrentStringUnsafe(), getCurrentBinary(), getCurrentBinaryUnsafe(), getCurrentNumber(), and getCurrentBoolean() in Cursor.
When using a Cursor, the key is always available as the return value from goToNext() et al, and some (including myself) find using a callback to access the value is unnecessary and slow. This change returns the value directly, instead of the key. The callback interface is still enabled if a function is passed, however, so this shouldn't affect existing code.

Cool, thanks!


Add awesome-blender

awesome-blender, list of Blender add-ons, tools, tutorials and resources.

Thank you @agmmnn!

Oops, i did a mistake, the repo link is incorrect.

Right, my mistake I overlooked it. 🤦♂
Feel free to open a new pr with fix.


Removed duplicated dependencies from the root package.json file

Task name: Root folder
Description: Removed duplicated dependencies.
Documentation changes required: N
Added unit tests: N
Attached related issue: https://github.com/microsoft/azure-pipelines-tasks/commit/243b341bbecd806d7e4dd8bd06e261ba0525addc
Checklist:

[ ] Task version was bumped - please check instruction how to do it
[ ] Checked that applied changes work as expected

Fixed in https://github.com/microsoft/azure-pipelines-tasks/pull/16370/files


Cops with "Include" param in default config break Ale integration

In my opinion this is not a bug, but a request for advice on how to get the ALE plugin for vim running better with RuboCop.
Currently, the default configuration has an Include param for a few cops (all Rails related as far as I can see), e.g.:
Rails/InverseOf:
  Include:
    - app/models/**/*.rb

So if I copy a file from e.g. app/models/user.rb to tmp/models/user.rb, the InverseOf cop will not run on it, since Include matches relative to the .rubocop.yml, and not simply on the filename.
What's worse, if there is a rubocop:disable Rails/InverseOf directive, it will be automatically deleted. This happens because the cop is not running, so the Lint/UnneededCopDisableDirective /  Lint/UnneededDisable cop thinks the disable is unneeded.
All of this is very understandable, but it breaks in combination with the popular ALE linter / fixer for vim. The way it works is that it write the current buffer to a file under /tmp/some_tmp_dir/some_tmp_dir/filename.rb and runs rubocop on that file, with the correct .rubocop.yml and using the --stdin option. (Note that it does not write to /tmp/some_tmp_dir/some_tmp_dir/app/models/filename.rb, which might have to be fixed in ALE).
A workaround would be to overwrite Include in .rubocop.yml for every affected cop, but then that will need to be done manually for new cops, and I think currently absolute paths are not supported.
A different idea would be try and match the Include pattern to the of the inspected file path (combined from the root .rubocop.yml), but that would probably be some implentation effort, because the current File.fnmatch? logic does not support it.
Third idea: remove the Includes from the default config. I have no idea what side effects this will have, apart from a very small perfomance impact.
Do you have any ideas on how to improve on this?
For reference, an example issue on ALE.

Expected behavior
RuboCop runs with the same configuration will lint a file the same regardless of it's location.
Actual behavior
Some cops are only enabled only for certain file patterns.
Steps to reproduce the problem
In some directory:
mkdir -p app/models
mkdir -p /tmp/app/models
cat > app/models/my_model.rb <<MODEL
class MyModel < ApplicationRecord
  # rubocop:disable Rails/InverseOf
  has_one :something
  # rubocop:enable Rails/InverseOf
end
MODEL

cat > /tmp/app/models/my_model.rb <<MODEL
class MyModel < ApplicationRecord
  # rubocop:disable Rails/InverseOf
  has_one :something
  # rubocop:enable Rails/InverseOf
end
MODEL

cat > .rubocop.yml <<RUBOCOP
AllCops:
  DisabledByDefault: true

Rails/InverseOf:
  Enabled: true
RUBOCOP

rubocop app/models/my_model.rb
rubocop /tmp/app/models/my_model.rb

RuboCop version
Include the output of rubocop -V or bundle exec rubocop -V if using Bundler. Here's an example:
0.58.2, but I suspect it affects many / all versions.

I had a thought over the weekend - would it make sense to match Include / Exclude on the stdin parameter instead of the path on disk?

I think the best way to fix this would be to add support for fixing a file via stdin and also letting rubocop know where the file will be on disk. That will make it possible to fix a file without having to write to the file. ESLint does this with --stdin-filename FILENAME --stdin --fix-dry-run.

Here is some activity. Don't use bots to close issues automatically. It doesn't make sense, and there's nothing wrong with having a lot of issues open. ALE has 293 open issues. The oldest issue is from February 2017, and it's still valid. Software issues don't go "stale." The concept is ridiculous. They remain until someone feels like resolving them.

@w0rp why not comment on whether the issue is still relevant? I think it is resolved.

I already asked a question about it on January 30th. Look above.

Yeah, the issue I rightly stale because nobody wants to the work. Closing seems appropriate to me.

@w0rp I understand your perspective, but I don't think it makes sense to keep issues open indefinitely if no progress is happening on them. More about this - https://metaredux.com/posts/2019/05/09/always-be-closing.html

The philosophy that issues should be closed just because they are old makes no sense at all. Having old issues open doesn't harm anyone. I'd had issues open for years that are later closed when someone finally decides to fix them. You don't have to fix the issues, just leave them open and someone else might submit a patch for them some day.

My apologies, as this did not affect me in my job any more, and I have no free time, I did not give it the attention it deserves.
This weekend, I will check whether the problem still exists. If it is fixed, as @mikegee believes, we can close it without philosophical discussion :)
That being said, ALE already used --stdin with a parameter when I posted the issue, as is visible in the issue I linked in the original post.

ALE doesn't use --stdin for fixing files at the moment. I'm waiting for an answer to my previous question, as quoted here.

Can you use something like rubocop --auto-correct --stdin filename < temporary_file and read the updated file from stdout?

I just double checked, issue still persists.

ALE doesn't use --stdin for fixing files at the moment.

You are correct of course. It was only used for linting.

I'm waiting for an answer to my previous question, as quoted here.

Can you use something like rubocop --auto-correct --stdin filename < temporary_file and read the updated file from stdout?

Would be good to get a definitive answer from a maintainer, but from what I can see, there is no formatter for that.
I have written the dumbest possible custom formatter I could think of to solve this:

Is this something we could get into RuboCop core?

I'm pretty sure this is resolved now. I had a similar error so I found this bug, but my problem was caused by some weird interaction with --force-exclusion.
In order to isolate this problem I did some experiments with the --stdin option, and the filename passed to it is definitely considered correctly.
› rubocop --force-exclusion --stdin test.rb < config/initializers/rgeo_support_guard.rb
(→ bin/rubocop --force-exclusion --stdin test.rb)
Inspecting 1 file
.

1 file inspected, no offenses detected
› rubocop --force-exclusion --stdin config/initializers/rgeo_support_guard.rb < config/initializers/rgeo_support_guard.rb
(→ bin/rubocop --force-exclusion --stdin config/initializers/rgeo_support_guard.rb)
Inspecting 1 file
C

Offenses:

config/initializers/rgeo_support_guard.rb:34:3: C: Rails/Exit: Do not use exit in Rails applications.
  exit 1
  ^^^^

1 file inspected, 1 offense detected

Here is some activity.


Change party order, un/favourite, change slime name

This screen (MonsterCollection) should also show Sky's HP and XP.


Make loop.times value dynamic

That's actually quite difficult.
In current TimesLoopHandlerBuilder implementation, times is used on scenario build to transform the loop into a chain, so it can't be a Session based function.

@BluePyth WDYT?

If we do so, we can use the while implementation.
If we actually plan to use actors pools, it can be fine, but in the mean time, efficiency may be reduced on large loops.
One can achieve dynamic value for the loop as following in the mean time:
loop(...).counterName("test").asLongAs((s: Session) => getCounter(s, "test") < s.getAttribute("myDynamicValue"))

OK, so let's postpone this for when we'll move to Akka 2


Programming exercises: Add information box to exercise details page

Checklist
General

[x] I tested all changes and their related features with all corresponding user types on a test server.
[x] Language: I followed the guidelines for inclusive, diversity-sensitive, and appreciative language.
[x] I chose a title conforming to the naming conventions for pull requests.

Client

[x] Important: I implemented the changes with a very good performance, prevented too many (unnecessary) REST calls and made sure the UI is responsive, even with large data.
[x] I strictly followed the client coding and design guidelines.
[x] Following the theming guidelines, I specified colors only in the theming variable files and checked that the changes look consistent in both the light and the dark theme.
[x] I added multiple integration tests (Jest) related to the features (with a high test coverage), while following the test guidelines.
[x] I added authorities to all new routes and checked the course groups for displaying navigation elements (links, buttons).
[x] I documented the TypeScript code using JSDoc style.
[x] I added multiple screenshots/screencasts of my UI changes.
[x] I translated all newly inserted strings into English and German.

Motivation and Context

This PR is part of the new design; it enhances usability and aligns with the updated layout.
Description

All important information for an exercise is now displayed in the information boxes at the top. Additionally, the Instructor Actions are consolidated into a dropdown button.
This is a reopened PR of the stale PR #9089: Programming exercises: Add information box to exercise details page.
Steps for Testing

Prerequisites:

1 Instructor
1 Students
1 Programming Exercise

Log in to Artemis
Navigate to Exercises
Check differently configured exercises and verify that the information are displayed correctly

Testserver States

[!NOTE]
These badges show the state of the test servers.
Green = Currently available, Red = Currently locked
Click on the badges to get to the test servers.

Review Progress

Performance Review

[ ] I (as a reviewer) confirm that the client changes (in particular related to REST calls and UI responsiveness) are implemented with a very good performance
[ ] I (as a reviewer) confirm that the server changes (in particular related to database calls) are implemented with a very good performance

Code Review

[x] Code Review 1
[x] Code Review 2

Manual Tests

[x] Test 1
[x] Test 2

Test Coverage

Class/File
Line Coverage
Confirmation (assert/expect)

exam-start-information.component.ts
100%
✅

exercise-headers-information.component.ts
76.47%
✅

result.component.ts
88.88%
✅

updating-result.component.ts
97.05%
✅

course-overview.component.ts
87.15%
✅

submission-result-status.component.ts
100%
✅

code-button.component.ts
93.28%
✅

difficulty-level.component.ts
94.11%
✅

exercise-categories.component.ts
100%
✅

information-box.component.ts
100%
✅

date.utils.ts
100%
✅

Screenshots

Summary by CodeRabbit
Release Notes

New Features

Introduced a new ExerciseHeadersInformationComponent to display detailed exercise information.
Added a DifficultyLevelComponent for visual representation of difficulty levels.
Enhanced rendering logic for exercise categories and submission results.
Implemented a new InformationBox structure for better content handling.
Added a new input property showCompletion to control the display of completion information in results.

Improvements

Streamlined the display logic for exercise details and submission policies.
Improved localization for submission penalties and titles in multiple languages.
Adjusted sidebar and drawer dimensions for better layout consistency.
Enhanced the styling of message input areas and card components for improved responsiveness.
Updated the navbar and breadcrumb styles for better visual hierarchy and consistency.

Bug Fixes

Adjusted conditional rendering for completion dates and exercise action buttons.
Fixed rendering issues related to the sidebar and exercise detail components.
Resolved issues with the visibility of score displays in exercise results.

Styling Updates

Refined styles for various components, including sidebar and card elements, to improve user experience.
Updated styles for message input areas and card components for better responsiveness.

Tests

Added comprehensive test suites for new components and utility functions to ensure functionality and reliability.
Enhanced test coverage for existing components to validate rendering and behavior under various conditions.

Tested on ts3, works great :) Maybe one small issue regarding information boxes: I think there is no vertical spacing between boxes anymore, which seems a little bit off if the boxes are displayed one under the other. Maybe it should not be problematic for exercises, but it will be the case in exam mode, where we have at least 7 information boxes. Exercises:  in Exam Mode:

Good Catch! I'll fix it.


How to integrate fzf to oni Fuzzy Finder?

I try to integrate fzf to oni Fuzzy Finder by set :
editor.quickOpen.execCommand = "fzf"

But there is no change, oni still use git ls-files

Interesting, I haven't used fzf much. If anyone would be up for taking a look at this, browser\src\Services\QuickOpen.ts would be a good starting point, particularly this code path:
    public show(): void {
        const config = Config.instance()
        const overrriddenCommand = config.getValue("editor.quickOpen.execCommand")
        const exclude = config.getValue("oni.exclude")

        UI.Actions.showPopupMenu("quickOpen", [{
            icon: "refresh fa-spin fa-fw",
            label: "Loading Files...",
            detail: "",
            pinned: false,
        }])

        // Overridden strategy
        if (overrriddenCommand) {
            const files = execSync(overrriddenCommand)
                .toString("utf8")
                .split("\n")
            this._showMenuFromFiles(files)
            return
        }
...

A couple of things to sanity-check:

Is overriddenCommand being set correctly?
Does fzf need arguments passed to it? We may need a way to update the execCommand string to incorporate the search arguments.
I wonder if the command is being executed from the correct working directory - it seems like we may need to set the working directory here for it to work as expected.

Woops, didn't mean to click that button...

@saibing, I finally got a chance to look at this.  First of all, you said:

editor.quickOpen.execCommand = "fzf"

The format actually needs to be in json, so the string should be:

"editor.quickOpen.execCommand": "fzf"

Now, even with the correct format, this still fails:

Uncaught Error: Command failed: fzf
panic: Failed to open /dev/tty
goroutine 1 [running]:
github.com/junegunn/fzf/src/tui.openTtyIn(0x551c20)
/Users/jg/.vim/plugged/fzf/gopath/src/github.com/junegunn/fzf/src/tui/light.go:35 +0xb0
github.com/junegunn/fzf/src/tui.NewLightRenderer(0xc420012e40, 0x100, 0x8, 0x610101, 0x562bb8, 0x0, 0xb)
/Users/jg/.vim/plugged/fzf/gopath/src/github.com/junegunn/fzf/src/tui/light.go:116 +0x4e
github.com/junegunn/fzf/src.NewTerminal(0xc4200ac000, 0xc42000af80, 0xc420014730)
/Users/jg/.vim/plugged/fzf/gopath/src/github.com/junegunn/fzf/src/terminal.go:311 +0x189
github.com/junegunn/fzf/src.Run(0xc4200ac000, 0x569ab0, 0x7)
/Users/jg/.vim/plugged/fzf/gopath/src/github.com/junegunn/fzf/src/core.go:209 +0xc58
main.main()
/Users/jg/.vim/plugged/fzf/main.go:8 +0x47
at checkExecSyncError (child_process.js:502:13)

If you look closely at that stack trace, fzf is created by junegunn and apparently the code is trying to access /Users/jg/.  I'm not sure if that's relevant, I just find it odd.
I can run fzf from the command-line so I'm not sure if Oni is doing something wrong or if fzf is making assumptions which aren't true when run by Oni.

@extr0py, I think the overriddenCommand feature is fundamentally flawed.  That external command is only used to fetch the initial set of files.  All filtering is then done in Reducer.ts:filterMenuOptions().  So even if fzf has lightning fast filtering and clever algorithms for fuzzy matching, Oni wouldn't use them.
I think if overriddenCommand is defined we should probably send searchString to it in filterMenuOptions and hope the overriddenCommand takes the string as an argument.  I'd be happy to make that change if I could get fzf working as an example.  I think we need to launch fzf in a non-interactive mode so we can send it a string (or "") and have it return the filter to us.  I'm just not sure if that's a feature fzf supports.

@keforbes , thanks for your answer.
fzf is supported non-interactive mode:
$ fzf -f  querystring

Yes, good point, seems like we need to re-think that flow, and make sure we're re-invoking the external command as the search string is updated. And thanks @saibing for the help with the command line invocation!
Seems like there are a couple of blockers here:
Issue 1: overriddenCommand not running from correct directory

If you look closely at that stack trace, fzf is created by junegunn and apparently the code is trying to access /Users/jg/. I'm not sure if that's relevant, I just find it odd.

Anyway, I can run fzf from the command-line so I'm not sure if Oni is doing something wrong or if fzf is making assumptions which aren't true when run by Oni.

I think this is due to us not passing in the current working directory to fzf. We should be running the fzf command as if it is being run from the current directory open in Oni, but that's not being explicitly - I think that would explain this issue. This can be fixed by changing this in QuickOpen.ts:
        // Overridden strategy
        if (overrriddenCommand) {
            const files = execSync(overrriddenCommand)

to something like:
        // Overridden strategy
        if (overrriddenCommand) {
            const files = execSync(overrriddenCommand, { cwd: process.cwd() })

Can you try that and see if that resolves that first blocker?
Issue 2: The search string isn't passed to the overridden command
It seems like right now we just run execSync against the overriddenCommand.... But we don't inject the searchString. I think the convention in JavaScript is to have templated variables, like ${searchString}. It would be great to add support for this, so that we could specify the config like:
editor.quickOpen.execCommand = "fzf -f ${searchString}"

Hope that is useful... thanks for your help looking at this, @keforbes ! FYI I also put a small bounty on this, it will be a nice issue to have resolved.


Set unselected datapoints as background/noise

This is an implementation for this issue:
closes #192
I followed the instructions @lazigu gave in #191 .
This how it looks when you freshly load data:

This is how it looks when you circled your first cluster:

This is how it looks when you activate the checkbox:

The plot is automatically redrawn when the checkbox state is changed.
I automatically make the label layer invisible when I select the first cluster. Otherwise it would look like this after clustering:

Issue that see:

Expanding the collapsible box takes ages if you have a dataset with many points (like we do). Probably because it needs to redraw the plot. Any ideas on this @lazigu ?

Best,
Thorsten

I could imagine the checkbox should be selected before doing any plotting (before clicking run). And instead of redrawing being triggered each time the status of the checkbox changes, when the selection of data points is made with the lasso/rectangle tool, the check is made what is the status of this box, and it proceeds accordingly with the visualisation of clusters. Does it make sense?

With my current implementation you can also select it before you do any plotting.  But in case you change the status when you have data plotted, it will update the plots, which is I think what I would expect as a user?
I can also deactivate this, but I think it makes sense from the user perspective?

Ah alright, I did not think that from the user's perspective it would be expected to hide those points on the fly, but it makes sense.  I was thinking only about how computationally costly it is to keep redrawing the plot. I will think a bit about this.
Marcelo @zoccoler, maybe you have an idea regarding this?

Hi @lazigu ,
if you would not update it after changing the checkbox, then it would not be possible to get an updated visualization without label a second cluster, right?
And I guess, you only change this setting once, and then you keep it. So probably it you only do one additional replot.
I'm a bit more worried that extending the box takes 15-20s. However, that is probably solved once we get the overplotting issue under control.

Ah, maybe also a misunderstanding:

Expanding the collapsible box takes ages if you have a dataset with many points (like we do). Probably because it needs to redraw the plot.

The replot is not triggered because of the checkbox, its triggered because the size of plot changes whens the box the expanded.

Ahh then yes I misunderstood. However, it is weird for me that expanding the collapsible box would make the size of the plot bigger. It doesn't happen on my machine. I was playing around with your testing data on my personal laptop, which is very weak and slow, and I was pleasantly surprised that I could make it work (very cool!). Shall we introduce a minimum width for the plotter widget, so it wouldn't open for you a very small widget initially? Expanding the collapsible box shouldn't change the dimensions of the plot/plotter widget..

Sure we can! Please go ahead an put whatever minimum size looks pleased for you :-)

After a bit more testing I could reproduce the issue of the collapsible box being slow to open if I have a plotter widget at the top of napari instead of the right. I merged this branch with the fix-axes-labels one, which implements a scrollbar to the plotter widget, and it seems that the slow-to-expand collapsible box issue is fixed, however, not to minimize it. I couldn't find the culprit though, need to dig a bit deeper. I think this could be opened as a separate issue, but a minor one, because now at least it seems to be fast to open the box. Otherwise, I will approve this PR, and I will add minimum widget width with another small PR.

Could your try to select histogram instead of scatter plot? For me the issue is gone when I do that.
10.03.2023 16:56:43 Laura Žigutytė @.***>:

After a bit more testing I could reproduce the issue of the collapsible box being slow to open if I have a plotter widget at the top of napari instead of the right. I merged this branch with the fix-axes-labels one, which implements a scrollbar to the plotter widget, and it seems that the slow-to-expand collapsible box issue is fixed, however, not to minimize it. I couldn't find the culprit though, need to dig a bit deeper. I think this could be opened as a separate issue, but a minor one, because now at least it seems to be fast to open the box. Otherwise, I will approve this PR, and I will add minimum widget width with another small PR.
—
Reply to this email directly, view it on GitHub[https://github.com/BiAPoL/napari-clusters-plotter/pull/193#issuecomment-1464014652], or unsubscribe[https://github.com/notifications/unsubscribe-auth/AAIP66NTXMJ3B6D4DXI4RZLW3NFLTANCNFSM6AAAAAAVSSJA4Q].
You are receiving this because you authored the thread.[Verfolgungsbild][https://github.com/notifications/beacon/AAIP66JUEW4SKEMZN7B2E63W3NFLTA5CNFSM6AAAAAAVSSJA4SWGG33NNVSW45C7OR4XAZNMJFZXG5LFINXW23LFNZ2KUY3PNVWWK3TUL5UWJTSXIMLTY.gif]

Good to hear! But that branch is also merged with the branch that implements a scroll bar, plus in a way fixes overplotting. Therefore, I'm still suspicious whether redrawing or something else is happening somewhere when it shouldn't and happens anytime widget resizes :)
By the way, there is one warning from pandas I think that keeps popping up (I can paste it later), I think if it's minor, and doesn't influence functionality, we should at least suppress it not to be annoying for the user.

Did you tested the latest version? Because in got rid of this warning with this commit: https://github.com/BiAPoL/napari-clusters-plotter/pull/196/commits/a06800885a01768cb351987b7dd2f546a4f40a82
Its just in a different branch.
10.03.2023 17:13:50 Laura Žigutytė @.***>:

Good to hear! But that branch is also merged with the branch that implements a scroll bar, plus in a way fixes overplotting. Therefore, I'm still suspicious whether redrawing or something else is happening somewhere when it shouldn't and happens anytime widget resizes :)
By the way, there is one warning from pandas I think that keeps popping up (I can paste it later), I think if it's minor, and doesn't influence functionality, we should at least suppress it not to be annoying for the user.
—
Reply to this email directly, view it on GitHub[https://github.com/BiAPoL/napari-clusters-plotter/pull/193#issuecomment-1464039132], or unsubscribe[https://github.com/notifications/unsubscribe-auth/AAIP66P4BEEMCGB75S3VZUTW3NHLZANCNFSM6AAAAAAVSSJA4Q].
You are receiving this because you authored the thread.[Verfolgungsbild][https://github.com/notifications/beacon/AAIP66P43PKTJLTPZZ5YHRDW3NHLZA5CNFSM6AAAAAAVSSJA4SWGG33NNVSW45C7OR4XAZNMJFZXG5LFINXW23LFNZ2KUY3PNVWWK3TUL5UWJTSXIN3NY.gif]

Ah no I was testing this PR separately.


Test agains Ruby 2.3.x

Hi @joneslee85, it looks like the build with Ruby 2.3 is not passing (even the others, but for another reason I've just fixed in https://github.com/aetrion/dnsimple-ruby/commit/aa6405c2191452a4d696834709c8e2f8a93c88e7).
Have you been able to use Ruby 2.3 on Travis? I tried it in a couple of other libraries, but I had to remove it (see https://github.com/weppos/whois/commit/4955370698ff2f17d453b89de9cf5fe9fb4398db) as it seems Travis is not able to install it.

@weppos I've just amended the PR so that it will test against all Rubies. There is an issue with webmock gem that fails 2.3.0, I am following up with webmock ppl

@joneslee85 Honestly, I'm not interested in testing against all ruby versions. It's enough for us to use the minor releases and test against the latest bugfix release in each minor release.

@weppos I'll re-submit a new PR


Go west

Docs for 8780dcc869834fb0c94c87cf353e27471eb28c8b are browesable at: https://ci.foundries.io/projects/fio-docs/builds/281/docs/artifacts/html/index.html

Docs for 75d1199d9842fb003e967fc601a467b3fd250cb4 are browesable at: https://ci.foundries.io/projects/fio-docs/builds/282/docs/artifacts/html/index.html

Docs for 7b934306494d90e47861687ff48c517a05a7169b are browesable at: https://ci.foundries.io/projects/fio-docs/builds/283/docs/artifacts/html/index.html

Doc failure is odd.  I checked https://mgmt.foundries.io/leshan/#/security and it works fine.

I've used the docs to figure out how to get CI working, so +1 from me.


Lumen IOC Dependancy Problem

The constructor for the LaravelFacebookSdk required $url and $config which cannot be resolved
Unresolvable dependency resolving [Parameter #2 [ <required> array $config ]] in class SammyK\\LaravelFacebookSdk\\LaravelFacebookSdk

I have fixed it and made a pull request for this
https://github.com/SammyK/LaravelFacebookSdk/pull/136

Hey @linkthrow! I'm not sure why you're getting this error as the dependencies are resolved in the server provider. Are you using the package's service provider?

Correction: I see what you're saying now. Let me dig into this a bit more.

Ok - so I still don't know how you're getting this message if you're using the package's service provider. Did you add the provider to your bootstrap/app.php file?


Find a online support forum for MDW 6

Internal SharePoint discussion forum will not work

Most open-source projects use stack overflow as their support channel, and I think that's what we should do too.


JFrog CLI adoption

... as a replacement for the curl-hacks.
[1] https://www.jfrog.com/confluence/display/CLI/JFrog+CLI
[2] https://jfrog.com/getcli/
[3] https://github.com/JFrogDev/jfrog-cli-go

note: https://github.com/JFrogDev/jfrog-cli-go/issues/146


Latest update causing big fps drop

I was using the mod yesterday perfectly fine. Now, it auto-updates and when using it, my frametime goes crazy, cause fps drops and instability.
I will try to use the older version by now, is there an way to disable automatic update?

From the README.

How to update

Following the commit https://github.com/gabrielefilipp/SmartHunter/commit/305b8a55eb4cd40c31a06a30ab862b4f803baa84 I've added an AutoUpdater module to this Application.
To enable this feature just set the key 'AutomaticallyCheckAndDownloadUpdates' to 'true', if present, otherwise just add it, to the file Config.json.
NOTE that this feature is already active if it's the first time you follow the "How to install" steps and download the mentioned files in a new directory.

So just set this flag to false and updates will be disabled.

From the README.

How to update

Following the commit 305b8a5 I've added an AutoUpdater module to this Application.
To enable this feature just set the key 'AutomaticallyCheckAndDownloadUpdates' to 'true', if present, otherwise just add it, to the file Config.json.
NOTE that this feature is already active if it's the first time you follow the "How to install" steps and download the mentioned files in a new directory.

So just set this flag to false and updates will be disabled.

Thanks, i was able to disable automatic updates.
Here is some prints with the Frametime graphs (it may seems to be an small thing but it makes the FPS goes crazy, making 30fps better than this):
MOD ENABLED

MOD DISABLED:

@maxjf1 if you see the latest commits you will find that i have changed only json files and deleted a few comments from code, so that being said it's impossible that those changes caused your issue. Also it is normal that the application lower your FPS when it's on; in order to try to imrpove your FPS you can try to change the value for the key "UpdatesPerSecond" inside Config.json

I am using now the older version (from feb 1) and it is working perfectly.

There were a few commits on Feb 1st, and at least one did modify some important code, though it doesn't look like anything that should affect performance. Which commit specifically did you download from, for this "working" version?

I've downloaded the latest commit of feb 1st

Coming back later to report that this is still a bug. Even dropping the updatesPerSecond to 1, the game frametime is terrible.
I am downloading the exe on the github repo https://github.com/gabrielefilipp/SmartHunter/tree/master/SmartHunter/bin/Debug and i'm still getting the big fps drop (but i don't have this problem on this commit  https://github.com/gabrielefilipp/SmartHunter/commit/9ac041ed5894bb8ee361bde80e1ff8c08e0a42aa)

Mmmmm can you narrow down which commit started your issue? (is it the one before 9ac041e?)

I think it starts at https://github.com/gabrielefilipp/SmartHunter/commit/ea65a85995eb243621dc4c16c82b0b6e447670e0 but i will check every version

After some boring testing, i've find out that the problem isn't with the later versions, but with the updater. For some reason, when i run an clean version it always happens, but if i run the version i have (with updates disabled) and just update the .exe and .dll, it will run fine. I also think it happens when you restart the smart hunter many times (i need to reboot to get it back to normal)
Here is all the files inside my smartHunter folder (except the .exe and .dll, i'm using the latest version of then downloaded manually)
Files.zip


Disable codecov annotations

I find codecov annotations like the example below to be pretty distracting when reviewing a PR.
It looks like we can disable them: https://docs.codecov.com/docs/codecovyml-reference#github_checks-github-users-only
What do y'all think @cguedes @sehyod ?

IMO if we want to know what lines are not covered by tests, we should do that separately directly within codecov's app (i.e. #187 )

@gjreda we also don't like find them very useful ourselves.
I've added the following setting in the codecov global settings file. Maybe we should have it at the project level instead.

@gjreda that configuration worked.
You can see that this commit don't have annotation and that this previous one has!
Would be nice to be able to configure the YAML only for this project, here, but I can't edit online! Let me know if you can. Otherwise we can always create the config file in the project root dir.

Just noting that one can also enable/disable annotations (per file) using this menu (also using shortcut a).


Fixed non-deterministic CSporkMessage hash function

CSporkMessage::GetHash() was including random data
in the hash due to 4 bytes of structure padding between the 32 bit
nSporkID and the following 64 bit nValue members.
This has been fixed by using CHashWriter which serializes the structure
data properly before hashing rather than relying on compiler defined behavior
such as structure alignment.  The underlying hash function is CHash256 which is
bitcoin's double SHA-256 hash.  HashX11 is not necessary here
because the hash is only used to identify distinct spork messages.

Nice, thanks!
utACK 5bb8dca

Nice find - utACK 5bb8dca


refactor/perf: Mongoose improvements

PULL REQUEST
Overview
Mongoose use lean for everything apart from getGuildSchema to increase speed significantly - see here
Status

[X] Typings have been updated or don't need to be.
[X] This PR have been tested and is ready to be merged.

Semantic versioning classification

[ ] MAJOR: This PR introduces BREAKING changes (direct API change).
[ ] MINOR: This PR adds new features, improve the code and/or implies minimal API changes.
[ ] PATCH: This PR fixes a bug, if needed it also references the relevant issue or documentation.
[X] PATCH: This PR improve performance or code refactor without API changes.
[ ] PATCH: This PR only includes non-code changes (documentation, style, CI, tools...).

Since we are optimising mongoose queries, we should also add .exec().
See https://mongoosejs.com/docs/promises.html#should-you-use-exec-with-await?. Better stack trace and true promise.

As we discussed, we will also use updateOne (https://mongoosejs.com/docs/api/query.html#query_Query-updateOne) for updateGuild and updateAxon as we don't need to return nor use the whole schema.


fix: add micro app template

Added micro app setup
TODO
In short -- Sync up micro-app template with base template

Merge micro app template with other templates
Added TS setup/babel setup from the base template, remove duplicate babel dependencies if not required
Merge src/components, src/styles from the base ( currently, base overrides the micro app template )

I think we should use TurboRepo folder structure so multiple micro apps can be created.


[Feature][SPARK] Can Spark nodes support running in Spark Standalone mode?

Search before asking

[X] I had searched in the issues and found no similar feature requirement.

Description
目前，在国内项目中，spark使用standalone方式部署的也不少。那么，我们的Spark节点是否可以支持此种模式。
Use case
No response
Related issues
No response
Are you willing to submit a PR?

[ ] Yes I am willing to submit a PR!

Code of Conduct

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

dolphinsheduler support spark to deploy on standalone mode . You need to add a master in the parameter, too


feat: add PhaseUnrecoverable in case of no pvc left

Closes #5912
Release Notes
The operator sets the phase to Unrecoverable when previously generated PersistentVolumeClaims are no longer present.

/test limit=local


Add auto-baseline main pipeline config for core

This should address the baseline PRs coming in for every pipeline

/azp run python - core

The core failure is a timeout on talking to bing.com. Can be ignored.


Incorrect values for Amigo, plus further error

No LVGL touchscreen demo does work with MaixPy Amigo.
For once, the i2c pins are not right
https://github.com/sipeed/MaixPy_scripts/blob/6ac4f4e97d596d2132b0be0b1fc6bf4139b2fda7/application/lvgl/lvgl_button.py#L11
These should be 24 and 27 for Amigo.
Then, there is a further error "OSError: [Errno 5] EIO"
when calling ts.init(i2c).
(tried with several firmwares: factory, 0.5.0, 0.5.1, including a custom built one from current master)
In current state, touch panel is not usable with LVGL.
Can you point us to a fix?

Got it finally working by coding a pure python input callback for lvgl, using sample code from MaixUI.
Not perfect, but allows to get touch screen semi working with LVGL at least.
Will post it later on.
A better option would be to include the full C driver of FT6x36.
It's been done for ESP32, could be added as a module to the MaixPy firmware build, see
https://github.com/lvgl/lv_port_esp32/pull/48/files
Didn't do it because of the custom build system of MaixPy, didn't know where to put and activate micropython usermods, should be a simple drop and compile op.


SQL Server support

I am really impress by Kysely and your work. Any plan for SQL Server dialect?

Thank you!
I don't know how popular SQL Server is compared to MySQL and PostgreSQL. If this gets enough upvotes I'll add the dialect. The problem with SQL Server dialect is that it's so different from all the others. There's so many non-standard keywords, statements and other stuff that we'd need to add a huge amount of SQL Server specific methods to the query builders. An to be honest, I have very little experience in using SQL Server.

Yeah, I know this pain. My current attempt for create a SQL Server dialect that currently serve my purpose.
class MssqlQueryCompiler extends DefaultQueryCompiler {
    override compileQuery(node: RootOperationNode): CompiledQuery {
        return super.compileQuery(node);
    }

    protected override getCurrentParameterPlaceholder() {
        return '@' + this.numParameters;
    }

    protected override getLeftIdentifierWrapper(): string {
        return '"';
    }

    protected override getRightIdentifierWrapper(): string {
        return '"';
    }

    protected override visitOffset(node: OffsetNode): void {
        if (this.parentNode != null && isSelectQueryNode(this.parentNode) && this.parentNode.limit != null) return; // will be handle when visitLimit

        this.append(' OFFSET ');
        this.visitNode(node.offset);
        this.append(' ROWS ');
    }

    protected override visitLimit(node: LimitNode): void {
        if (this.parentNode != null && isSelectQueryNode(this.parentNode)) {
            if (this.parentNode.offset != null) {
                this.append(' OFFSET ');
                this.visitNode(this.parentNode.offset.offset);
                this.append(' ROWS ');
            } else this.append(' OFFSET 0 ROWS ');
        }

        this.append(' FETCH NEXT ');
        this.visitNode(node.limit);
        this.append(' ROWS ONLY ');
    }
}

Not sure about node.js / deno ecosystem, but according to some "popularity" statistics [1], the standings are:

Oracle
MySQL.
SQL Server.
Postgres.

This issue open since 12.2021 and only has 4 upvotes, so my opinion leans towards "this should be a 3rd party package".

DB-Engines uses Google trends, # tweets, # jobs, # questions on Stack Overflow...
Here some numbers from the 2022 Stack Overflow survey:

https://survey.stackoverflow.co/2022/#most-popular-technologies-database-prof

https://survey.stackoverflow.co/2022/#most-loved-dreaded-and-wanted-database-want

it seems to me that Microsoft SQL Server is on a slow decline when comparing with previous surveys

Thank you!
Sadly we can't even tell how many responders are using typescript. Gut feeling tells me its mostly C# & Java codebases.

Our use cases are mostly corporate revamps that requires incremental adoption of Node.js, large companies usually don't have the luxury and agility to completely move away from existing stacks.
We are lucky to strike deals with 90% of edge compatible stacks, but they usually ends up requiring at least one connection to their existing infrastructure such as SQL Server. We really want to use Kysely in these projects for it's small bundle size and performance when compared with TypeORM.

Many legacy systems still uses Microsoft SQL Server. I too would very much like Kysely support. I will try to see how far I get with @rexpan´s attempt above

I'm in a similar situation to vicary above. Kysely truly seems like the best option for our use case.
@LarsBuur Do you have a repository we can check out and contribute to?

We're investigating adding mssql support, seeing if the experience will be decent enough and what gaps we need to tackle. No promises.

Really wanted to use node-mssql as the underlying driver for the dialect implementation (connection pools, result streaming, js to tedious data type mapping, etc.), but it's not 100% aligned with Kysely's API requirements (no single connection reservation). I've submitted https://github.com/tediousjs/node-mssql/issues/1517.

@rexpan @LarsBuur How would I go about implementing the above example?

@BStoller for now, you can copy the dialect implementation from #595, it's fully functional and ready for review. see the PR description for a list of things that are missing from Kysely.

Just curious, is it possible for the new dialect to interact with tempdb tables at it's current state?

@vicary no idea. try it and let us know.

@igalklebanov I want to give it a try. Do I clone and build, then npm link?

@vicary that'd work. you can also add a file, import straight from src, and run it with tsx.

@igalklebanov It works!
Some notes for future users and/or upcoming docs, please correct me if I'm wrong.

tempdb allows you to SELECT ... INTO #tempTable without creating a table structure, these tables are inherently dynamic and is difficult to type.
Objects in tempdb will be deleted once the server session is gone. With the current implementation, it seems that they are deleted after each query execution, therefore you kinda have to use raw SQL at the moment.

This won't work
await sql`SELECT * INTO #tempTable FROM table1`.execute(db);
await sql`SELECT * FROM #tempTable`.execute(db); // Invalid object name '#tempTable'.

Therefore using the normal query builder API is close to impossible.
await db.insertInto("#tempTable")
  .columns(...)
  .expression(
    db.selectFrom("table1").select(...)
  )
  .execute();
await sql`SELECT * FROM #tempTable`.execute(db); // Invalid object name '#tempTable'.

Forcing tarn to use 1 connection via { min: 1, max: 1 } in theory should keep your server session, but it still fails for some reason.
This will work
await sql`
  SELECT * INTO #tempTable FROM table1;
  SELECT * FROM #tempTable;
`.execute(db);

@vicary Try this.

Sorry I don't know how to derive the commit hash from the diff URL.
I pulled the latest changes from PR instead, and the following code fails the same way.
// tarn: { min: 1, max: 1 }

await db.transaction().execute(async (manager) => {
  await sql`SELECT TOP 1 * INTO #tempTable FROM Table1`.execute(manager);
  return await sql`SELECT * FROM #tempTable`.execute(manager); // Invalid object name '#tempTable'.
});

Running multiple statements in the same request still works, and that's the only way it works.
await sql`
  SELECT TOP 1 * INTO #tempTable FROM Table1;
  SELECT * FROM #tempTable;
`.execute(db);

Although I want the first one to work, I can live with it. At least there is a way.

@vicary Try this.

@igalklebanov Got it.

[x] Create ##test
[x] Select ##test within the connection callback.
[ ] Select ##test outside the connection callback.

Switching create table with select into behaves the same way.
Switching ##test with #test requires everything to live inside the same SQL.

We usually use local temp objects (# instead of ##) to prevent naming collision with other users.

@vicary

We usually use local temp objects (# instead of ##) to prevent naming collision with other users.

Could simply suffixing the table name with a random id or a request id work here?

@igalklebanov Yeah that would work.

@igalklebanov I wonder how does new driver handles columns with whitespaces.

.select("Full Name") becomes SELECT "Full Name" would be correct
But with table alias, either .select(`alias."Full Name"`) or .select("alias.[Full Name]") fails type checking. .select("alias.Full Name") passes typecheck but it's incorrect syntax in runtime.
.orderBy("Full Name") would also fails an internal check Invalid order by direction: Name

Is it left for future PRs, or is there another way to use it?

@vicary Kysely automatically inserts " around every identifier.

@igalklebanov The generated statement from SELECT actually works even with alias, double quotes are placed perfectly fine even with whitespaces AND alias. e.g. .select("alias.Full Name") becomes SELECT "alias"."Full Name".
Frankly I'm not particularly fond of [Full Name] if "Full Name" also does the job.
I think the only issue is that order by parser does a simple split and checks the second part,
https://github.com/kysely-org/kysely/blob/2c3603e18c91b474b03a4a1c71597fbc37593e95/src/parser/order-by-parser.ts#L81-L82
If it is possible to let it slip, theoretically we should have no performance hit. I am not familiar with the plugin API yet, is it capable of doing this?

Don't use whitespaces in naming. 🤷
Sadly, not my choice. On the bright side, you may call it a migration plan, away from those naming conventions.

Check out CamelCasePlugin. The whitespace plugin you would implement is quite similar.


Update README

This PR updates the repo README and fixes #16.

Thanks, Heather. I've addressed your comments and pushed the commit.

Thanks, Heather. I've addressed your comments and pushed the commit.


Improved breaker for equal-length query & text

If the lengths are equal but the query does not equal the text, there is no way the query will match the text.
Closes #8

Thanks!

Published as 1.0.3


Add note README.md.

Q
A

Is bugfix?
✔

New feature?
❌

Breaks BC?
❌

Closed in favor #80


Updated LOCKDOWN cases for new libimobiledevice

Thanks for the PR. I believe I  have fixed this issue in the commit 0b46992e84d4acce5036e2cac3a803f4076aef1f


Fix logo URL

Coverage remained the same at 99.253% when pulling 3145d3885c4b5d9c4473bb624791c1a2b550cce2 on nrabinowitz:fix-logo into 716e57a0ccfe57e1a9cf0b0cef1892d20d84662d on uber:master.


Fixed problems caused by #1184

Reworked how 'checked' is determined to allow string values. Originally started in #1184.
It's a shame that Boolean('false') === true. Silly javascript!
This change makes any case of 'true' or 'false' convert properly to boolean for checkboxes.
@ooflorent Review?

lgtm

[Current coverage][cc-pull] is 97.11%

No coverage report found for master at abebba6.

Powered by Codecov. Last updated by [abebba6...79780d1][cc-compare]
[cc-base-branch]: https://codecov.io/gh/erikras/redux-form/branch/master?src=pr
[cc-compare]: https://codecov.io/gh/erikras/redux-form/compare/abebba61d0f462f3a1286b3e316a9f5a10f60ca8...79780d110a0169f6ab9041461467f58de613334c
[cc-pull]: https://codecov.io/gh/erikras/redux-form/pull/1187?src=pr

Published in v5.3.0.