Still can't clone even networking is fine: No such device or address

Component
agent, other
Describe the bug
After resolving https://github.com/woodpecker-ci/woodpecker/issues/1471 by updating git-plugin to the newest version, the new problem comes:
clone pipeline logs:
+ git init -b main
Initialized empty Git repository in /woodpecker/src/example.com/sbchild/mirror-bot/.git/
+ git remote add origin https://example.com:3943/sbchild/mirror-bot.git
+ git fetch --no-tags --depth=1 --filter=tree:0 origin +main:
fatal: could not read Username for 'https://example.com:3943': No such device or address
exit status 128

I had tried https://woodpecker-ci.org/faq#how-to-debug-clone-issues, but I can clone the repo by enter username and password in container without any problem.
I have run this pipeline file, then tried to copy /root/.netrc out when the clone pipeline was running:
pipeline:
  build:
    image: alpine:3.17.0
    commands:
      - echo "done"

machine example.com
login sbchild
password eyJhbGciOiJSUzI...Nf--Eg0oYPYfEQe4

Note that the first line is blank
I have no idea about how to debug that. Should I provide more information? Please let me know, thanks!
System Info
Gitea version: `1.18.0-rc1`
Woodpecker version: next-a3f4f305
Linux version: Linux n2s2 5.10.0-19-amd64 #1 SMP Debian 5.10.149-2 (2022-10-21) x86_64 GNU/Linux
Docker version:
    Client: Docker Engine - Community
    Version:           20.10.21
    API version:       1.41
    Go version:        go1.18.7
    Git commit:        baeda1f
    Built:             Tue Oct 25 18:02:28 2022
    OS/Arch:           linux/amd64
    Context:           default
    Experimental:      true

    Server: Docker Engine - Community
    Engine:
      Version:          20.10.21
      API version:      1.41 (minimum version 1.12)
      Go version:       go1.18.7
      Git commit:       3056208
      Built:            Tue Oct 25 18:00:19 2022
      OS/Arch:          linux/amd64
      Experimental:     false
    containerd:
      Version:          1.6.12
      GitCommit:        a05d175400b1145e5e6a735a6710579d181e7fb0
    runc:
      Version:          1.1.4
      GitCommit:        v1.1.4-0-g5fd4c4d
    docker-init:
      Version:          0.19.0
      GitCommit:        de40ad0

Additional context
Woodpecker docker-compose.yml:
version: '3'

networks:
  wp_net:
    driver: bridge
    ipam:
      driver: default
      config:
        -
          subnet: <IP_ADDRESS>/24
          gateway: <IP_ADDRESS>

services:
  woodpecker-server:
    image: woodpeckerci/woodpecker-server:next-alpine@sha256:ab399931b38e35f20d57492930c9908eda2184a122afbe68cf0ef9deef465ecd
    networks:
      wp_net:
        ipv4_address: <IP_ADDRESS>
    ports:
      - <IP_ADDRESS>:3944:443
    expose:
      - "9000"
    volumes:
      - /srv/cicd/wpdata:/var/lib/woodpecker/
      - /home/sbchild/.acme.sh/example.com/fullchain.cer:/etc/certs/example.com/fullchain.cer:ro
      - /home/sbchild/.acme.sh/example.com/example.com.key:/etc/certs/example.com/example.com.key:ro
    environment:
      - WOODPECKER_LOG_LEVEL=trace
      - WOODPECKER_DEBUG_PRETTY=true
      - WOODPECKER_OPEN=true
      - WOODPECKER_AUTHENTICATE_PUBLIC_REPOS=true
      - WOODPECKER_ORGS=WoodpeckerUsers
      - WOODPECKER_HOST=https://example.com:3944
      - WOODPECKER_SERVER_CERT=/etc/certs/example.com/fullchain.cer
      - WOODPECKER_SERVER_KEY=/etc/certs/example.com/example.com.key
      - WOODPECKER_GITEA=true
      - WOODPECKER_GITEA_URL=https://example.com:3943/
      - WOODPECKER_GITEA_CLIENT=698c41b2-...-d57ee084f462
      - WOODPECKER_GITEA_SECRET=gto_secret
      - WOODPECKER_AGENT_SECRET=b55228f9...13fd5f59
      - WOODPECKER_DATABASE_DRIVER=postgres
      - WOODPECKER_DATABASE_DATASOURCE=postgres://woodpecker_u:password@<IP_ADDRESS>:5432/woodpecker_db?sslmode=disable
      - WOODPECKER_DEFAULT_CLONE_IMAGE=woodpeckerci/plugin-git:next@sha256:4d9fda89c6a888bbdf534df449888960e1a270d74a10eec25cecb55c084eba79
      - WOODPECKER_ADMIN=sbchild,WoodpeckerBot
      - WOODPECKER_LIMIT_MEM=100000000

  woodpecker-agent:
    image: woodpeckerci/woodpecker-agent:next-alpine@sha256:02a340874fd1e290c9edcf2cfe669ec9498799a867a76b8d047631c318095db9
    networks:
      wp_net:
        ipv4_address: <IP_ADDRESS>
    command: agent
    restart: always
    depends_on:
      - woodpecker-server
    links:
      - woodpecker-server
    tmpfs:
      - /tmp
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - WOODPECKER_LOG_LEVEL=trace
      - WOODPECKER_SERVER=woodpecker-server:9000
      - WOODPECKER_AGENT_SECRET=b55228f9...13fd5f59
      - WOODPECKER_BACKEND=docker

Logs:
wpconf-woodpecker-server-1  | 6:22PM TRC woodpecker/src/github.com/woodpecker-ci/woodpecker/server/cron/cron.go:48 > Cron: fetch next crons
wpconf-woodpecker-server-1  | 6:22PM TRC woodpecker/src/github.com/woodpecker-ci/woodpecker/server/cron/cron.go:48 > Cron: fetch next crons
wpconf-woodpecker-server-1  | 6:22PM TRC woodpecker/src/github.com/woodpecker-ci/woodpecker/server/cron/cron.go:48 > Cron: fetch next crons
wpconf-woodpecker-server-1  | 6:22PM TRC woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/router.go:38 > [GET] /sbchild/mirror-bot/pipeline/44
wpconf-woodpecker-server-1  | 6:22PM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/middleware/logger.go:45 > ip=<IP_ADDRESS> latency=1.133365 method=GET path=/sbchild/mirror-bot/pipeline/44 status=200 user-agent="Mozilla/5.0 (X11; Linux x86_64; rv:107.0) Gecko/20100101 Firefox/107.0"
wpconf-woodpecker-server-1  | 6:22PM TRC woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/router.go:38 > [GET] /web-config.js
wpconf-woodpecker-server-1  | 6:22PM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/middleware/logger.go:45 > ip=<IP_ADDRESS> latency=1.252774 method=GET path=/web-config.js status=200 user-agent="Mozilla/5.0 (X11; Linux x86_64; rv:107.0) Gecko/20100101 Firefox/107.0"
wpconf-woodpecker-server-1  | 6:22PM TRC woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/router.go:38 > [GET] /assets/logo.c3ebba12.svg
wpconf-woodpecker-server-1  | 6:22PM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/middleware/logger.go:45 > ip=<IP_ADDRESS> latency=1.280026 method=GET path=/assets/logo.c3ebba12.svg status=200 user-agent="Mozilla/5.0 (X11; Linux x86_64; rv:107.0) Gecko/20100101 Firefox/107.0"
wpconf-woodpecker-server-1  | 6:22PM TRC woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/router.go:38 > [GET] /api/user/feed?
wpconf-woodpecker-server-1  | 6:22PM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/middleware/logger.go:45 > ip=<IP_ADDRESS> latency=5.607318 method=GET path=/api/user/feed status=200 user-agent="Mozilla/5.0 (X11; Linux x86_64; rv:107.0) Gecko/20100101 Firefox/107.0"
wpconf-woodpecker-server-1  | 6:22PM TRC woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/router.go:38 > [GET] /stream/events
wpconf-woodpecker-server-1  | 6:22PM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/api/stream.go:59 > user feed: connection opened
wpconf-woodpecker-server-1  | 6:22PM TRC woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/router.go:38 > [GET] /api/repos/sbchild/mirror-bot/permissions
wpconf-woodpecker-server-1  | 6:22PM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/middleware/session/repo.go:102 > Synced user permission for sbchild sbchild/mirror-bot
wpconf-woodpecker-server-1  | 6:22PM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/middleware/session/repo.go:132 > sbchild granted &{UserID:1 RepoID:29 Repo:0xc0004d3100 Pull:true Push:true Admin:true Synced:1670696568 Created:0 Updated:1670696568} permission to sbchild/mirror-bot
wpconf-woodpecker-server-1  | 6:22PM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/middleware/logger.go:45 > ip=<IP_ADDRESS> latency=444.768306 method=GET path=/api/repos/sbchild/mirror-bot/permissions status=200 user-agent="Mozilla/5.0 (X11; Linux x86_64; rv:107.0) Gecko/20100101 Firefox/107.0"
wpconf-woodpecker-server-1  | 6:22PM TRC woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/router.go:38 > [GET] /api/repos/sbchild/mirror-bot
wpconf-woodpecker-server-1  | 6:22PM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/middleware/session/repo.go:132 > sbchild granted &{UserID:1 RepoID:29 Repo:<nil> Pull:true Push:true Admin:true Synced:1670696568 Created:1670614231 Updated:1670696568} permission to sbchild/mirror-bot
wpconf-woodpecker-server-1  | 6:22PM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/middleware/logger.go:45 > ip=<IP_ADDRESS> latency=2.770905 method=GET path=/api/repos/sbchild/mirror-bot status=200 user-agent="Mozilla/5.0 (X11; Linux x86_64; rv:107.0) Gecko/20100101 Firefox/107.0"
wpconf-woodpecker-server-1  | 6:22PM TRC woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/router.go:38 > [GET] /api/repos/sbchild/mirror-bot/pipelines/44
wpconf-woodpecker-server-1  | 6:22PM TRC woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/router.go:38 > [GET] /api/repos/sbchild/mirror-bot/pipelines?
wpconf-woodpecker-server-1  | 6:22PM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/middleware/session/repo.go:132 > sbchild granted &{UserID:1 RepoID:29 Repo:<nil> Pull:true Push:true Admin:true Synced:1670696568 Created:1670614231 Updated:1670696568} permission to sbchild/mirror-bot
wpconf-woodpecker-server-1  | 6:22PM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/middleware/session/repo.go:132 > sbchild granted &{UserID:1 RepoID:29 Repo:<nil> Pull:true Push:true Admin:true Synced:1670696568 Created:1670614231 Updated:1670696568} permission to sbchild/mirror-bot
wpconf-woodpecker-server-1  | 6:22PM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/middleware/logger.go:45 > ip=<IP_ADDRESS> latency=7.541741 method=GET path=/api/repos/sbchild/mirror-bot/pipelines status=200 user-agent="Mozilla/5.0 (X11; Linux x86_64; rv:107.0) Gecko/20100101 Firefox/107.0"
wpconf-woodpecker-server-1  | 6:22PM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/middleware/logger.go:45 > ip=<IP_ADDRESS> latency=8.984797 method=GET path=/api/repos/sbchild/mirror-bot/pipelines/44 status=200 user-agent="Mozilla/5.0 (X11; Linux x86_64; rv:107.0) Gecko/20100101 Firefox/107.0"
wpconf-woodpecker-server-1  | 6:22PM TRC woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/router.go:38 > [GET] /api/repos/sbchild/mirror-bot/logs/44/2
wpconf-woodpecker-server-1  | 6:22PM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/middleware/session/repo.go:132 > sbchild granted &{UserID:1 RepoID:29 Repo:<nil> Pull:true Push:true Admin:true Synced:1670696568 Created:1670614231 Updated:1670696568} permission to sbchild/mirror-bot
wpconf-woodpecker-server-1  | 6:22PM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/middleware/logger.go:45 > ip=<IP_ADDRESS> latency=5.273635 method=GET path=/api/repos/sbchild/mirror-bot/logs/44/2 status=200 user-agent="Mozilla/5.0 (X11; Linux x86_64; rv:107.0) Gecko/20100101 Firefox/107.0"
wpconf-woodpecker-server-1  | 6:22PM TRC woodpecker/src/github.com/woodpecker-ci/woodpecker/server/cron/cron.go:48 > Cron: fetch next crons
wpconf-woodpecker-server-1  | 6:22PM TRC woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/router.go:38 > [POST] /api/repos/sbchild/mirror-bot/pipelines/44?fork=true
wpconf-woodpecker-server-1  | 6:22PM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/middleware/session/repo.go:132 > sbchild granted &{UserID:1 RepoID:29 Repo:<nil> Pull:true Push:true Admin:true Synced:1670696568 Created:1670614231 Updated:1670696568} permission to sbchild/mirror-bot
wpconf-woodpecker-server-1  | 6:22PM TRC woodpecker/src/github.com/woodpecker-ci/woodpecker/server/api/stream.go:85 > pubsub subscribe recover return: <nil>
wpconf-woodpecker-server-1  | 6:22PM TRC woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/router.go:38 > [GET] /api/repos/sbchild/mirror-bot/pipelines/44
wpconf-woodpecker-server-1  | 6:22PM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/queue/fifo.go:335 > queue: pending right now: 135
wpconf-woodpecker-server-1  | 6:22PM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/middleware/session/repo.go:132 > sbchild granted &{UserID:1 RepoID:29 Repo:<nil> Pull:true Push:true Admin:true Synced:1670696568 Created:1670614231 Updated:1670696568} permission to sbchild/mirror-bot
wpconf-woodpecker-server-1  | 6:22PM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/queue/fifo.go:307 > queue: trying to assign task: 135 with deps []
wpconf-woodpecker-server-1  | 6:22PM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/queue/fifo.go:311 > queue: assigned task: 135 with deps []
wpconf-woodpecker-server-1  | 6:22PM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/queue/persistent.go:102 > pull queue item: 135: remove from backup
wpconf-woodpecker-server-1  | 6:22PM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/middleware/logger.go:45 > ip=<IP_ADDRESS> latency=6.216676 method=GET path=/api/repos/sbchild/mirror-bot/pipelines/44 status=200 user-agent="Mozilla/5.0 (X11; Linux x86_64; rv:107.0) Gecko/20100101 Firefox/107.0"
wpconf-woodpecker-server-1  | 6:22PM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/queue/persistent.go:106 > pull queue item: 135: successfully removed from backup
wpconf-woodpecker-agent-1   | {"level":"debug","repo":"sbchild/mirror-bot","pipeline":"48","id":"135","time":"2022-12-10T18:22:51Z","caller":"/src/agent/runner.go:97","message":"received execution"}
wpconf-woodpecker-agent-1   | {"level":"debug","repo":"sbchild/mirror-bot","pipeline":"48","id":"135","time":"2022-12-10T18:22:51Z","caller":"/src/agent/runner.go:111","message":"listen for cancel signal"}
wpconf-woodpecker-server-1  | 6:22PM TRC woodpecker/src/github.com/woodpecker-ci/woodpecker/server/api/stream.go:85 > pubsub subscribe recover return: <nil>
wpconf-woodpecker-agent-1   | {"level":"debug","ID":"135","Repo":"sbchild/mirror-bot","Pipeline":"48","time":"2022-12-10T18:22:51Z","caller":"/src/pipeline/pipeline.go:75","message":"Executing 2 stages, in order of:"}
wpconf-woodpecker-agent-1   | {"level":"debug","ID":"135","Repo":"sbchild/mirror-bot","Pipeline":"48","Stage":"wp_0_3237743939574243616_clone","Steps":"wp_0_3237743939574243616_clone","time":"2022-12-10T18:22:51Z","caller":"/src/pipeline/pipeline.go:85","message":"stage"}
wpconf-woodpecker-agent-1   | {"level":"debug","ID":"135","Repo":"sbchild/mirror-bot","Pipeline":"48","Stage":"wp_0_3237743939574243616_stage_0","Steps":"wp_0_3237743939574243616_step_0","time":"2022-12-10T18:22:51Z","caller":"/src/pipeline/pipeline.go:85","message":"stage"}
wpconf-woodpecker-server-1  | 6:22PM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/middleware/logger.go:45 > ip=<IP_ADDRESS> latency=125.096083 method=POST path=/api/repos/sbchild/mirror-bot/pipelines/44 status=200 user-agent="Mozilla/5.0 (X11; Linux x86_64; rv:107.0) Gecko/20100101 Firefox/107.0"
wpconf-woodpecker-server-1  | 6:22PM TRC woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/router.go:38 > [GET] /api/repos/sbchild/mirror-bot/pipelines/44
wpconf-woodpecker-server-1  | 6:22PM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/middleware/session/repo.go:132 > sbchild granted &{UserID:1 RepoID:29 Repo:<nil> Pull:true Push:true Admin:true Synced:1670696568 Created:1670614231 Updated:1670696568} permission to sbchild/mirror-bot
wpconf-woodpecker-server-1  | 6:22PM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/middleware/logger.go:45 > ip=<IP_ADDRESS> latency=3.471397 method=GET path=/api/repos/sbchild/mirror-bot/pipelines/44 status=200 user-agent="Mozilla/5.0 (X11; Linux x86_64; rv:107.0) Gecko/20100101 Firefox/107.0"
wpconf-woodpecker-agent-1   | {"level":"debug","ID":"135","Repo":"sbchild/mirror-bot","Pipeline":"48","Step":"wp_0_3237743939574243616_clone","time":"2022-12-10T18:22:51Z","caller":"/src/pipeline/pipeline.go:157","message":"Prepare"}
wpconf-woodpecker-agent-1   | {"level":"debug","repo":"sbchild/mirror-bot","pipeline":"48","id":"135","image":"woodpeckerci/plugin-git:next@sha256:4d9fda89c6a888bbdf534df449888960e1a270d74a10eec25cecb55c084eba79","stage":"clone","exit_code":0,"exited":false,"time":"2022-12-10T18:22:51Z","caller":"/src/agent/tracer.go:51","message":"update step status"}
wpconf-woodpecker-server-1  | 6:22PM TRC woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/router.go:38 > [GET] /api/badges/sbchild/mirror-bot/status.svg
wpconf-woodpecker-server-1  | 6:22PM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/middleware/logger.go:45 > ip=<IP_ADDRESS> latency=1.899609 method=GET path=/api/badges/sbchild/mirror-bot/status.svg status=200 user-agent="Mozilla/5.0 (X11; Linux x86_64; rv:107.0) Gecko/20100101 Firefox/107.0"
wpconf-woodpecker-server-1  | 6:22PM TRC woodpecker/src/github.com/woodpecker-ci/woodpecker/server/api/stream.go:85 > pubsub subscribe recover return: <nil>
wpconf-woodpecker-agent-1   | {"level":"debug","repo":"sbchild/mirror-bot","pipeline":"48","id":"135","image":"woodpeckerci/plugin-git:next@sha256:4d9fda89c6a888bbdf534df449888960e1a270d74a10eec25cecb55c084eba79","stage":"clone","exit_code":0,"exited":false,"time":"2022-12-10T18:22:51Z","caller":"/src/agent/tracer.go:59","message":"update step status complete"}
wpconf-woodpecker-agent-1   | {"level":"debug","ID":"135","Repo":"sbchild/mirror-bot","Pipeline":"48","Step":"wp_0_3237743939574243616_clone","time":"2022-12-10T18:22:51Z","caller":"/src/pipeline/pipeline.go:184","message":"Executing"}
wpconf-woodpecker-server-1  | 6:22PM TRC woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/router.go:38 > [GET] /api/repos/sbchild/mirror-bot/branches
wpconf-woodpecker-server-1  | 6:22PM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/middleware/session/repo.go:132 > sbchild granted &{UserID:1 RepoID:29 Repo:<nil> Pull:true Push:true Admin:true Synced:1670696568 Created:1670614231 Updated:1670696568} permission to sbchild/mirror-bot
wpconf-woodpecker-server-1  | 6:22PM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/router/middleware/logger.go:45 > ip=<IP_ADDRESS> latency=30.300514 method=GET path=/api/repos/sbchild/mirror-bot/branches status=200 user-agent="Mozilla/5.0 (X11; Linux x86_64; rv:107.0) Gecko/20100101 Firefox/107.0"
wpconf-woodpecker-agent-1   | {"level":"debug","repo":"sbchild/mirror-bot","pipeline":"48","id":"135","image":"woodpeckerci/plugin-git:next@sha256:4d9fda89c6a888bbdf534df449888960e1a270d74a10eec25cecb55c084eba79","stage":"clone","time":"2022-12-10T18:22:54Z","caller":"/src/agent/logger.go:53","message":"log stream opened"}
wpconf-woodpecker-agent-1   | {"level":"trace","name":"clone","ID":"135","time":"2022-12-10T18:22:54Z","caller":"/src/pipeline/rpc/line.go:69","message":"grpc write line: + git init -b main\n"}
wpconf-woodpecker-agent-1   | {"level":"trace","name":"clone","ID":"135","time":"2022-12-10T18:22:54Z","caller":"/src/pipeline/rpc/line.go:69","message":"grpc write line: Initialized empty Git repository in /woodpecker/src/example.com/sbchild/mirror-bot/.git/\n"}
wpconf-woodpecker-agent-1   | {"level":"trace","name":"clone","ID":"135","time":"2022-12-10T18:22:54Z","caller":"/src/pipeline/rpc/line.go:69","message":"grpc write line: + git remote add origin https://example.com:3943/sbchild/mirror-bot.git\n"}
wpconf-woodpecker-agent-1   | {"level":"trace","name":"clone","ID":"135","time":"2022-12-10T18:22:54Z","caller":"/src/pipeline/rpc/line.go:69","message":"grpc write line: + git fetch --no-tags --depth=1 --filter=tree:0 origin +main:\n"}
wpconf-woodpecker-agent-1   | {"level":"trace","name":"clone","ID":"135","time":"2022-12-10T18:22:54Z","caller":"/src/pipeline/rpc/line.go:69","message":"grpc write line: fatal: could not read Username for 'https://example.com:3943': No such device or address\n"}
wpconf-woodpecker-agent-1   | {"level":"trace","name":"clone","ID":"135","time":"2022-12-10T18:22:54Z","caller":"/src/pipeline/rpc/line.go:69","message":"grpc write line: exit status 128\n"}
wpconf-woodpecker-agent-1   | {"level":"error","error":"io: read/write on closed pipe","time":"2022-12-10T18:22:54Z","caller":"/src/agent/logger.go:58","message":"copy limited logStream part"}
wpconf-woodpecker-agent-1   | {"level":"debug","repo":"sbchild/mirror-bot","pipeline":"48","id":"135","image":"woodpeckerci/plugin-git:next@sha256:4d9fda89c6a888bbdf534df449888960e1a270d74a10eec25cecb55c084eba79","stage":"clone","time":"2022-12-10T18:22:54Z","caller":"/src/agent/logger.go:61","message":"log stream copied"}
wpconf-woodpecker-agent-1   | {"level":"debug","repo":"sbchild/mirror-bot","pipeline":"48","id":"135","image":"woodpeckerci/plugin-git:next@sha256:4d9fda89c6a888bbdf534df449888960e1a270d74a10eec25cecb55c084eba79","stage":"clone","time":"2022-12-10T18:22:54Z","caller":"/src/agent/logger.go:77","message":"log stream uploading"}
wpconf-woodpecker-agent-1   | {"level":"debug","repo":"sbchild/mirror-bot","pipeline":"48","id":"135","image":"woodpeckerci/plugin-git:next@sha256:4d9fda89c6a888bbdf534df449888960e1a270d74a10eec25cecb55c084eba79","stage":"clone","time":"2022-12-10T18:22:54Z","caller":"/src/agent/logger.go:81","message":"log stream upload complete"}
wpconf-woodpecker-agent-1   | {"level":"debug","repo":"sbchild/mirror-bot","pipeline":"48","id":"135","image":"woodpeckerci/plugin-git:next@sha256:4d9fda89c6a888bbdf534df449888960e1a270d74a10eec25cecb55c084eba79","stage":"clone","time":"2022-12-10T18:22:54Z","caller":"/src/agent/logger.go:85","message":"log stream closed"}
wpconf-woodpecker-agent-1   | {"level":"debug","ID":"135","Repo":"sbchild/mirror-bot","Pipeline":"48","Step":"wp_0_3237743939574243616_clone","time":"2022-12-10T18:22:56Z","caller":"/src/pipeline/pipeline.go:190","message":"Complete"}
wpconf-woodpecker-agent-1   | {"level":"debug","repo":"sbchild/mirror-bot","pipeline":"48","id":"135","image":"woodpeckerci/plugin-git:next@sha256:4d9fda89c6a888bbdf534df449888960e1a270d74a10eec25cecb55c084eba79","stage":"clone","exit_code":128,"exited":true,"time":"2022-12-10T18:22:56Z","caller":"/src/agent/tracer.go:51","message":"update step status"}
wpconf-woodpecker-server-1  | 6:22PM TRC woodpecker/src/github.com/woodpecker-ci/woodpecker/server/api/stream.go:85 > pubsub subscribe recover return: <nil>
wpconf-woodpecker-agent-1   | {"level":"debug","repo":"sbchild/mirror-bot","pipeline":"48","id":"135","image":"woodpeckerci/plugin-git:next@sha256:4d9fda89c6a888bbdf534df449888960e1a270d74a10eec25cecb55c084eba79","stage":"clone","exit_code":128,"exited":true,"time":"2022-12-10T18:22:56Z","caller":"/src/agent/tracer.go:59","message":"update step status complete"}
wpconf-woodpecker-agent-1   | {"level":"debug","ID":"135","Repo":"sbchild/mirror-bot","Pipeline":"48","Step":"wp_0_3237743939574243616_step_0","time":"2022-12-10T18:22:56Z","caller":"/src/pipeline/pipeline.go:157","message":"Prepare"}
wpconf-woodpecker-agent-1   | {"level":"debug","ID":"135","Repo":"sbchild/mirror-bot","Pipeline":"48","Step":"wp_0_3237743939574243616_step_0","error":"wp_0_3237743939574243616_clone : exit code 128","time":"2022-12-10T18:22:56Z","caller":"/src/pipeline/pipeline.go:164","message":"Skipped due to OnFailure=false"}
wpconf-woodpecker-agent-1   | {"level":"debug","repo":"sbchild/mirror-bot","pipeline":"48","id":"135","error":"","exit_code":128,"canceled":false,"time":"2022-12-10T18:22:56Z","caller":"/src/agent/runner.go:185","message":"pipeline complete"}
wpconf-woodpecker-agent-1   | {"level":"debug","repo":"sbchild/mirror-bot","pipeline":"48","id":"135","time":"2022-12-10T18:22:56Z","caller":"/src/agent/runner.go:187","message":"uploading logs"}
wpconf-woodpecker-agent-1   | {"level":"debug","repo":"sbchild/mirror-bot","pipeline":"48","id":"135","time":"2022-12-10T18:22:56Z","caller":"/src/agent/runner.go:189","message":"uploading logs complete"}
wpconf-woodpecker-agent-1   | {"level":"debug","repo":"sbchild/mirror-bot","pipeline":"48","id":"135","error":"","exit_code":128,"time":"2022-12-10T18:22:56Z","caller":"/src/agent/runner.go:194","message":"updating pipeline status"}
wpconf-woodpecker-server-1  | 6:22PM TRC woodpecker/src/github.com/woodpecker-ci/woodpecker/server/grpc/rpc.go:326 > gRPC Done with state: rpc.State{Step:"", Exited:true, ExitCode:128, Started:1670696571, Finished:1670696576, Error:""} build_id=48 repo_id=29 step_id=135
wpconf-woodpecker-agent-1   | {"level":"error","error":"rpc error: code = Unknown desc = Step finished with exitcode 128, ","time":"2022-12-10T18:22:56Z","caller":"/src/pipeline/rpc/client_grpc.go:97","message":"grpc error: wait(): code: Unknown: rpc error: code = Unknown desc = Step finished with exitcode 128, "}
wpconf-woodpecker-agent-1   | {"level":"warn","repo":"sbchild/mirror-bot","pipeline":"48","id":"135","error":"rpc error: code = Unknown desc = Step finished with exitcode 128, ","time":"2022-12-10T18:22:56Z","caller":"/src/agent/runner.go:115","message":"cancel signal received"}
wpconf-woodpecker-agent-1   | {"level":"debug","repo":"sbchild/mirror-bot","pipeline":"48","id":"135","time":"2022-12-10T18:22:56Z","caller":"/src/agent/runner.go:127","message":"pipeline done"}
wpconf-woodpecker-server-1  | 6:22PM TRC woodpecker/src/github.com/woodpecker-ci/woodpecker/server/api/stream.go:85 > pubsub subscribe recover return: <nil>
wpconf-woodpecker-agent-1   | {"level":"debug","repo":"sbchild/mirror-bot","pipeline":"48","id":"135","time":"2022-12-10T18:22:56Z","caller":"/src/agent/runner.go:199","message":"updating pipeline status complete"}
wpconf-woodpecker-agent-1   | {"level":"debug","time":"2022-12-10T18:22:56Z","caller":"/src/cmd/agent/agent.go:171","message":"polling new steps"}
wpconf-woodpecker-agent-1   | {"level":"debug","time":"2022-12-10T18:22:56Z","caller":"/src/agent/runner.go:61","message":"request next execution"}
wpconf-woodpecker-server-1  | 6:22PM DBG woodpecker/src/github.com/woodpecker-ci/woodpecker/server/grpc/rpc.go:61 > agent connected: d4a28206fc36: polling
wpconf-woodpecker-server-1  | 6:23PM TRC woodpecker/src/github.com/woodpecker-ci/woodpecker/server/cron/cron.go:48 > Cron: fetch next crons
wpconf-woodpecker-server-1  | 6:23PM TRC woodpecker/src/github.com/woodpecker-ci/woodpecker/server/cron/cron.go:48 > Cron: fetch next crons
wpconf-woodpecker-server-1  | 6:23PM TRC woodpecker/src/github.com/woodpecker-ci/woodpecker/server/cron/cron.go:48 > Cron: fetch next crons

Validations

[X] Read the Contributing Guidelines.
[X] Read the docs.
[X] Check that there isn't already an issue that reports the same bug to avoid creating a duplicate.
[X] Check that this is a concrete bug. For Q&A join our Discord Chat Server or the Matrix room.

that sould strange :/
you can use as a workaround a custom clone step and use settings and secrets to auth to your gitea ...
... but I guess it might have to do something with how git does handle auth +netrc+non-default-port ?

Same issue after upgrading docker images (next tags). CI can't clone private repositories.
woodpecker-agent_1   | {"level":"debug","repo":"murph/murph-doc","pipeline":"27","id":"615","image":"docker.io/woodpeckerci/plugin-git:2.0","stage":"clone","time":"2022-12-25T22:05:34Z","caller":"/src/agent/logger.go:53","message":"log stream opened"}
woodpecker-agent_1   | {"level":"trace","name":"clone","ID":"615","time":"2022-12-25T22:05:34Z","caller":"/src/pipeline/rpc/line.go:69","message":"grpc write line: + git init -b master\n"}
woodpecker-agent_1   | {"level":"trace","name":"clone","ID":"615","time":"2022-12-25T22:05:34Z","caller":"/src/pipeline/rpc/line.go:69","message":"grpc write line: Initialized empty Git repository in /woodpecker/src/gitnet.fr/murph/murph-doc/.git/\n"}
woodpecker-agent_1   | {"level":"trace","name":"clone","ID":"615","time":"2022-12-25T22:05:34Z","caller":"/src/pipeline/rpc/line.go:69","message":"grpc write line: + git remote add origin https://gitnet.fr/murph/murph-doc.git\n"}
woodpecker-agent_1   | {"level":"trace","name":"clone","ID":"615","time":"2022-12-25T22:05:34Z","caller":"/src/pipeline/rpc/line.go:69","message":"grpc write line: + git fetch --no-tags --depth=1 --filter=tree:0 origin +refs/heads/master:\n"}
woodpecker-agent_1   | {"level":"trace","name":"clone","ID":"615","time":"2022-12-25T22:05:34Z","caller":"/src/pipeline/rpc/line.go:69","message":"grpc write line: fatal: could not read Username for 'https://gitnet.fr': No such device or address\n"}
woodpecker-agent_1   | {"level":"trace","name":"clone","ID":"615","time":"2022-12-25T22:05:34Z","caller":"/src/pipeline/rpc/line.go:69","message":"grpc write line: exit status 128\n"}

Same problem on upgrading.
Found a way to make it work with lastest plugin-git
Need to set home to /root, default is /app
clone:
  git:
    image: woodpeckerci/plugin-git
    settings:
      home: /root

ahh maybe the folder / file permissions of /app are to open?

The problem is .netrc location, it's written in /root instead of /app.
https://github.com/woodpecker-ci/plugin-git/blob/3b7301e692d8fc8c85328d6c213e0fc2abeb2b8a/utils.go#L70
home := os.Getenv("PLUGIN_HOME")  fix it but will not work with home config override.

->  #1505


[Event Request] - Change event OnBeforeUpdateAmountinside signature on Page 12171 "Payment Date Lines"

Hello, please consider changing the signature of the event OnBeforeUpdateAmount to Page 12171 "Payment Date Lines", from:
    [IntegrationEvent(false, false)]
    local procedure OnBeforeUpdateAmount(var PaymentLines: Record "Payment Lines")
    begin
    end;

to:
    [IntegrationEvent(false, false)]
    local procedure OnBeforeUpdateAmount(var PaymentLines: Record "Payment Lines"; var IsHandled: Boolean)
    begin
    end;

and call it inside the "UpdateAmount" procedure :
    procedure UpdateAmount()
    var
        ServiceHeader: Record "Service Header";
        ServiceLine: Record "Service Line";

        **IsHandled: Boolean;**
    begin

        **IsHandled := false;
        OnBeforeUpdateAmount(Rec, IsHandled);
        if IsHandled then
            exit;**

        ClearAll();
        if Find('-') then
            repeat
                if Type <> Type::"Blanket Order" then
                    DocType := Type
                else
                    DocType := DocType::"Blanket Order";
...
...

Thanks!

Thanks for reporting this. We agree, and we’ll publish a fix asap, either in an update for the current version or in the next major release. Please do not reply to this, as we do not monitor closed issues. If you have follow-up questions or requests, please create a new issue where you reference this one.
Build ID: 53542.


Question: What is the difference here with your m4q?

Hi, Im just going through your stuff. lovely?
What is the difference here between this lib and the m4q lib?

Hi! This is the next version of M4Q for Metro 5 (such as Datetime, String, Animation, Color, and others). Soon the development of Metro 4 will stop completely and I will concentrate on maintaining the existing code on a paid subscription and the development of Metro 5. Unlike Metro 4, which is monolithic, Metro 5 will be modular, and this is a part of it.


feat: add override prop for CloudFront behaviour

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

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


📖 docs: fix link pointing to dotenv guide

Summary
Doc link was changed, but .env.example still had an old link.
Change Type
Please delete any irrelevant options.

[x] Documentation update

Testing
N/A
Checklist

[x] My code adheres to this project's style guidelines
[x] I have performed a self-review of my own code
[x] My changes do not introduce new warnings

thanks!


String concatenation in key

I have a small function in my Go program that prepares the key:
func redisKey(_id int) string {   return "user:" + string(_id) }
I use the same function for both SETting and GETting a value:
err = storage.client.Cmd("SET", redisKey(_id), user).Err
r := storage.client.Cmd("GET", redisKey(_id))
Strangely, I the GET command does not retrieve the value. Upon inspection with SCAN via a redis cli, the key is stored as something on the lines of "user:\x06". When I hardcode the key in SET as "user:12", I can successfully retrieve the value and it is stored as "user:12", verified via redis cli.
This may be something to do with Go string concatenation but, being relatively new to Go, I'd appreciate any thoughts.

Hey there! The problem is in string(_id), which doesn't do what you want it to do (and which I didn't know you could even do). It's converting the raw int value (which I'm guessing was 6) into a string, but 0x06 isn't a printable character so it's being escaped. What you want is strconv.Atoi(_id) which will return the ascii form of the integer.
https://play.golang.org/p/XVSCofPHyd
As a side-note, I think it's not idiomatic in go to prefix variables with underscores, but that won't actually cause any problems. Hope this helps!

Great thanks! That was indeed the issue :)


Update GitVersion tool to 0.4.0 version

#289
In 4.0.0 version new mode was introduced: Mainline.
It would be nice to update GitVersion.CommandLine in Cake.Recipe to 4.0.0 to support this mode, which can be helpful for many open source libraries.

Hey, guys. Do you have any plans for this PR? It would be nice to merge or close it

@vhatsura apologies for not responding to this, I must have missed the notification 😢
This is actually being discussed further in this PR:
https://github.com/cake-contrib/Cake.Recipe/pull/314
Where the same work was also done.  As a result, I am going to close this PR, and continue discussing in other PR.
I appreciate you taking the time to raise this PR, and apologies again for not seeing it sooner.


Export limit available?

Hello, can you tell me if export-limit is available to view using registers on the inverter? If yes, can it be changes on-the-fly? I would like to change export limit based on some other circumstances in the grid.

No, the list of exposed values is found on page 16 of this document. The value you are looking for is available through the SetApp API, though. Have a look at solaredge-local or solaredge_setapp.

Thanks I will have a look and try to work with these repos. So you think export limit can't be changed with code, only read?

Thanks I will have a look and try to work with these repos. So you think export limit can't be changed with code, only read?

SetApp is a standard rest API over http. If you can access SetApp, you can change the export limit.

Hey, thanks for your fast feedback and your help. Hope I will figure out.


Create a glossary of Guardian terminology

Problem description
Currently there is reference to which someone new to Guardian can be directed. The documentation is extensive, but it uses many specialist terms which can be confusing to someone unfamiliar with the domain or technology space.
Requirements
Create a glossary of terms used in Guardian, with the definitions matching the common understanding of the terms by Guardian community.
Definition of done
The glossary is available in the documentation.
Acceptance criteria
Glossary contains most important terms for understanding Guardian concepts and operations, both from ESG domain and blockchain technology.

There is already a glossary in the docs https://docs.hedera.com/guardian/user-guide-glossary/guardian-glossary


Improvement in cluster and navbar

Navbar links now change color on hover
Open cluster view in iframe so that navigation back is available

Solves some things from issue #15

@jeremyphilemon Can we look at this?

Looks good! Could you remove the borders though?

@jeremyphilemon it has been removed

Thanks for the fix!


Dependabot fails to identify latest tag from dependency after default branch changed

Package ecosystem
github-actions
dependabot.yml content
version: 2
updates:
- package-ecosystem: github-actions
  directory: "/"
  schedule:
    interval: weekly
    day: saturday
    time: "10:00"
  open-pull-requests-limit: 10
  target-branch: development

Updated dependency
 uses<EMAIL_ADDRESS>What you expected to see, versus what you actually saw
Expect new PR for<EMAIL_ADDRESS>Observed: No update needed
Log:
updater | INFO <job_428051179> Checking if actions/checkout 3.0.0 needs updating
  proxy | 2022/07/26 08:08:48 [028] GET https://github.com:443/actions/checkout.git/info/refs?service=git-upload-pack
  proxy | 2022/07/26 08:08:48 [028] * authenticating git server request (host: github.com)
  proxy | 2022/07/26 08:08:48 [028] 200 https://github.com:443/actions/checkout.git/info/refs?service=git-upload-pack
updater | INFO <job_428051179> Latest version is 61b9e3751b92087fd0b06925ba6dd6314e06f089
updater | INFO <job_428051179> No update needed for actions/checkout 3.0.0

I'm using dependabot to update github-actions. One of those is https://github.com/actions/checkout. When specifying an "old" tag (v3.0.0) I expect dependabot to open a PR for the latest v3 versio (v3.0.2). See here for tags: https://github.com/actions/checkout/tags.
However, dependabot is referencing an "old" commit as latest version. This commit is the latest in their master branch (https://github.com/actions/checkout/commits/master), but they have changed to main as their default branch (https://github.com/actions/checkout/commits/main).

Are you pinning to a tag or a SHA? Because https://github.com/dependabot/dependabot-core/pull/5516 may have fixed this. Can you check?

Actually, I'm fairly sure this a dupe of https://github.com/dependabot/dependabot-core/issues/5421

We are pining by tag. https://github.com/dependabot/dependabot-core/pull/5516 was merged 14 days ago, so I guess every dependabot run afterwards includes the new logic already, or?
This log is from 5 days ago, it did not work.
updater | INFO <job_442952051> Checking if actions/checkout 3.0.0 needs updating
  proxy | 2022/08/20 10:17:47 [034] GET https://github.com:443/actions/checkout.git/info/refs?service=git-upload-pack
  proxy | 2022/08/20 10:17:47 [034] * authenticating git server request (host: github.com)
  proxy | 2022/08/20 10:17:47 [034] 200 https://github.com:443/actions/checkout.git/info/refs?service=git-upload-pack
updater | INFO <job_442952051> Latest version is 61b9e3751b92087fd0b06925ba6dd6314e06f089
updater | INFO <job_442952051> No update needed for actions/checkout 3.0.0

@yubiuser Can you check again? I think #6052 should've fixed this.

It's actually hard to tell. I've a private test repo with multiple workflows using actions/checkout at various different outdated versions. Dependabot created a PR already 1 month ago to update all of the actions to the latest version (3.1.0).
However, when I manually trigger a dependabot check I still get this output
updater | INFO <job_513159305> Checking if actions/checkout 3.0.0 needs updating
  proxy | 2022/11/15 20:52:32 [030] GET https://github.com:443/actions/checkout.git/info/refs?service=git-upload-pack
  proxy | 2022/11/15 20:52:32 [030] * authenticating git server request (host: github.com)
  proxy | 2022/11/15 20:52:32 [030] 200 https://github.com:443/actions/checkout.git/info/refs?service=git-upload-pack
updater | INFO <job_513159305> Latest version is 61b9e3751b92087fd0b06925ba6dd6314e06f089
updater | INFO <job_513159305> No update needed for actions/checkout 3.0.0

I that may be because of https://github.com/dependabot/dependabot-core/issues/3750?

I think this are two distinct issues. The one you linked happens when multiple instances with different versions are used and dependabot did not check for updates for the lower/lowest version.
However, in my case it's simply returning a false Latest version (it's not even the same reference style  - I use tags, it's returning a hash). 61b9e3751b92087fd0b06925ba6dd6314e06f089 is from 2020, whereas v3.0.0. is from 2022. So it's not only Latest version is not the latest, it's also older than the currently used action.

Oh, ok, I misunderstood that you were actually using actions/checkout in multiple workflows with different outdated versions.
Can you try creating a public repository with the same checkout usages so that I can reproduce this?

I setup a new test repo (https://github.com/yubiuser/dependabot_test) and there everything is working as expected. I have no idea why it is not working in the other....
updater | INFO <job_515551321> Checking if actions/checkout 3.0.0 needs updating
  proxy | 2022/11/17 09:59:24 [012] GET https://github.com:443/actions/checkout.git/info/refs?service=git-upload-pack
  proxy | 2022/11/17 09:59:24 [012] * authenticating git server request (host: github.com)
  proxy | 2022/11/17 09:59:27 [012] 200 https://github.com:443/actions/checkout.git/info/refs?service=git-upload-pack
updater | INFO <job_515551321> Latest version is 3.1.0

However, your sample repo does not pin by sha, right? And you mentioned previously that the problem was pinning by SHA?

No, we always pin by tag. But as you can see here, it's returning SHA:
updater | INFO <job_513159305> Latest version is 61b9e3751b92087fd0b06925ba6dd6314e06f089

Sorry, misunderstood again! So you real repository is simply pinning actions/checkout to 3.0.0 in a single workflow, like in https://github.com/yubiuser/dependabot_test/blob/master/.github/workflows/test_workflow.yml#L11? This is such a simple case that should just work, I have no idea why it's not working for you.

Thanks for letting me know. I'll test again when https://github.com/dependabot/dependabot-core/pull/5963 is merged.

@yubiuser I just temporarily deployed #5963, can you try again now?

No avail.
updater | INFO <job_515759848> Checking if actions/checkout 3.0.0 needs updating
  proxy | 2022/11/17 12:16:32 [034] GET https://github.com:443/actions/checkout.git/info/refs?service=git-upload-pack
  proxy | 2022/11/17 12:16:32 [034] * authenticating git server request (host: github.com)
  proxy | 2022/11/17 12:16:32 [034] 200 https://github.com:443/actions/checkout.git/info/refs?service=git-upload-pack
updater | INFO <job_515759848> Latest version is 61b9e3751b92087fd0b06925ba6dd6314e06f089
updater | INFO <job_515759848> No update needed for actions/checkout 3.0.0

That's too bad. And there are not other places in your configuration files that use actions/checkout, only the one that pins to 3.0.0?

No, there are others.

Ok, ok. Then again this looks like #3750. From all the actions, Dependabot is only considering the first one. And it can't propose any updates for the first one because it's pinned to a branch without any version requirement, makes sense?

I think you disentangled it!

Let me close this issue in favor of #3750 then. There's already an open PR for that ticket, so I expect to get that fixed soonish.


docs(ui): Add card features in README

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 97.70%. Comparing base (e52f88e) to head (85cfa23).
Report is 2 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main      #50   +/-   ##
=======================================
  Coverage   97.70%   97.70%
=======================================
  Files          10       10
  Lines         349      349
=======================================
  Hits          341      341
  Misses          8        8

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


Rename CustomActionComponentRegistration to MultiplyDialogComponentRegistration

The example works, but I think it would be more clear if CustomActionComponentRegistration  is renamed to MultiplyDialogComponentRegistration so it is clear that it is tied to Multiply, and that we need to register also any other new custom actions that we build afterwards.
would rename that class, and also update the Startup.cs to reflect that
   // This is for custom action component registration.
   ComponentRegistration.Add(new MultiplyDialogComponentRegistration());

it was not very clear what needed to be updated when I added a second custom action. and I think this makes it clearer. Also, would be great to add a note on what needs to be done to add a second custom action.

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: b45a275f-7b99-3611-589c-76774e23b35f
Version Independent ID: 5c85f403-d998-ff31-a08e-6bb9d3a8cdb9
Content: Customize actions - Bot Composer
Content Source: composer-docs/how-to-add-custom-action.md
Service: bot-composer
GitHub Login: @zxyanliu
Microsoft Alias: kamrani

Thanks for your feedback. I think CustomActionComponentRegistration() is intended to be general instead of specific in this case. If you have questions regarding the code, this might not be the repo you should file an issue. :-)

Thanks for your feedback. I think CustomActionComponentRegistration() is intended to be general instead of specific in this case. If you have questions regarding the code, this might not be the repo you should file an issue. :-)

This is a documentatio of the code issue :) I think would be better to name it after the custom action you are building as each new custom action that is created needs to be registered.
I created two custom actions, and had to register them both. So it makes sense that the registration is specific to the custom action. It is not generic. Unless I got it wrong.
Here is how I added two custom actions:

And in Startup.cs
            // This is for custom action component registration.
            ComponentRegistration.Add(new MultiplyDialogComponentRegistration());
            ComponentRegistration.Add(new GamesOptionsDialogComponentRegistration());

so I do think this article would benefit from adding these suggestions.

This is a documentatio of the code issue :) I think would be better to name it after the custom action you are building as each new custom action that is created needs to be registered.
I created two custom actions, and had to register them both. So it makes sense that the registration is specific to the custom action. It is not generic. Unless I got it wrong.
Here is how I added two custom actions:

And in Startup.cs
            // This is for custom action component registration.
            ComponentRegistration.Add(new MultiplyDialogComponentRegistration());
            ComponentRegistration.Add(new GamesOptionsDialogComponentRegistration());

so I do think this article would benefit from adding these suggestions.

@tiagonmas cool! I am going to discuss with our dev for suggestions on this.
Thanks again for your feedback! :-)

@tiagonmas cool! I am going to discuss with our dev for suggestions on this.
Thanks again for your feedback! :-)

FYI, I am a FTE ... just flagging since you tagged this as source:customer.

FYI, I am a FTE ... just flagging since you tagged this as source:customer.

Got it! Let me fix it now! Thanks!

Got it! Let me fix it now! Thanks!

I talked to our developer about this specific issue you brought up. She said we are not changing this class name at this point. cc: @luhan2017
Thanks again for your feedback.

I talked to our developer about this specific issue you brought up. She said we are not changing this class name at this point. cc: @luhan2017
Thanks again for your feedback.

Because it does not make sense or because lack of time ? I struggled with it, and I think this would help others!

Because it does not make sense or because lack of time ? I struggled with it, and I think this would help others!

Adding @luhan2017 Can you help take a look?

Adding @luhan2017 Can you help take a look?


Erroneous type narrowing in finally

TypeScript Version:  Version 2.6.0-dev.20170914
Code
function test() {
    type YesNo = ('No' | 'Yes');
    let answer: YesNo = 'No'; // Bug disappears after adding 'as YesNo'.
    try {
        answer = 'Yes';
        return; // Bug disappears after removing the return.
    } finally {
        if (answer === 'Yes') { // Bug: Operator === cannot be applied to types 'No' and 'Yes'
        } else if (answer === 'No') {
        }
    }
}

Expected behavior:
No compilation errors.
Actual behavior:
Compilation error:
bug.ts(8,13): error TS2365: Operator '===' cannot be applied to types '"No"' and '"Yes"'.
Note:
This bug is similar to "Erroneous control flow type narrowing in loops": https://github.com/Microsoft/TypeScript/issues/15835

We should also handle catch correctly.
function f(x: boolean) {
    let a: boolean = false;
    try {
        a = true;
        if (x) throw new Error();
        a = false;
    }
    catch (e) {
        // this is possible, should be allowed to test
        a === true;
    }
}

Also facing this while setup a DB connection and trying to finalize it under the finally block if it was created.
  let connection;

  try {
    connection = await getConnection();

    const { rows } = await connection.query(sql, values);

    return camelizeKeys(rows);
  } finally {
    if (connection) {
      // [ts] Property 'end' does not exist on type 'never'. [2339]
      await connection.end();
    }
  }

I'm facing the SAME issue, trying to finalize a db connection.
What I could figure out is that it happends when a function returns anything at all, it presents the error, but if it's a void function, the issue is not present.
Here's a playground with both scenarios: http://www.typescriptlang.org/play/?ssl=1&ssc=1&pln=29&pc=4#code/FAMwrgdgxgLglgewgAhHCATAQgTwHICGAtgKYAUExJAXMgM4wBO6A5gJS0BuCcGyA3sGTDkAGxIxkUJBBKxEEWg2YQWyAD7IIYUaOQBeLTtEBuYEJFMcAiyKky58JAa1UzdgL5SCMKAAtkMhI2Gzs7aQg6BHEAOlEEFiC2WzCYP0YEAHdkEncRLzRKXWtBMOQ4EDII2XlnAEJDbV0QiKjY+MTqxwU4klU05M8LD3NQSFqUQuwcAEkMMl4lJlYOemXVDSNdUJFxSS6JpZU1TSa9RuMzFKsd8IcJl14rsuFGCTBGFAOnCDzhLygPn8gWCtzCrWiJDiCSSKTsaQy2VyKQK6AIxTBwgqVXuP2QDS2ohaSDaUI6OIgNR+vX6fkG+WGQA
also the code below:
`// No issues at all
function findByName(name: string): void {
let connection: string | null = null;
try {
  connection = name;
} catch (e) {
    console.log(e)
    throw e;
} finally {
  if(connection != null) console.log(connection.length)
}

}
// variable connection as never on finally block
function findById(id: string): string | null {
let connection: string | null = null;
try {
  connection = id;

    return connection;
} catch (e) {
    console.log(e)
    throw e;
} finally {
  if(connection != null) console.log(connection.length)
}

}`

I can't reproduce the earlier problems in this issue anymore (using typescript@3.7.4), but I do get the same CFA problem described by @dtiziani in the findById()-example.
Commenting-out either the return or the throw statement prevents the problem.

Now, if you slightly tweak the example (to use undefined instead of null), there's another interesting bit that not explicitly initializing to = undefined prevents the problem as well:
function findById2(id: string) {
   // not explicitly initializing this to `= undefined` prevents the problem
   let connection: string | undefined = undefined;

   try {
      connection = id;

      // commenting-out this `return` -OR- the `throw` below prevents the problem
      return connection;
   } catch (e) {
      console.log(e);

      // commenting-out this `throw` -OR- the `return` above prevents the problem
      throw e;
   } finally {
      if (connection) {
         // ts(2339) -
         //   Property 'length' does not exist on type 'never'.
         console.log(connection.length);
      }
   }
}

And this "work-around" reminds me of this CFA conversation... only there's no function expression involved.

@SlurpTheo fixed in nightly; see #34880


The heartbeat implementation for all the scopes.

FYI @hanahmily Heartbeat(new and old protocols) has been supported with a test case.

Coverage decreased (-0.003%) to 14.211% when pulling ccebc95c6212ee2fe1d20ee368c2600072d19355 on peng-yongsheng:feature/update into b643190005ee03d49ef2e8543902c0daaf7ed8b0 on apache:master.


Prettify identity code

This patch makes the code look better and conform to the standards of the go language.

All variables var_name were renamed to varName.
Comments were added for all public facing entities.
Entities that are not used outside of the module were declared as private.
Several small typos were fixed as well.

/ok-to-test

/retest

looks good, looks like one failure

Yeah, I just rebased on master

/approve

Thanks for the updates.
/approve

/lgtm


Can use set_ic! with arrays

This PR follows up on PR #337
Should help with adding noise to initial conditions as rand and randn aren't available in CUDAnative.jl. So we can use arrays to initialize with noise.
@glwagner you had issues with generating random numbers on the GPU in the past?
Looks like a ridiculously simple kernel lol but it means you just supply an Nx*Ny*Nz sized array and not have to worry about halos, or broadcasting over views of non-contiguous views (which results is slow CuArray scalar operations).

@ali-ramadhan I think it is not a good idea to calculate the ic function directly on the GPU. This leads to problems --- for example, there is no rand function on the GPU. I think a better method is to calculate the result of the function on the CPU, and then copy that data to the GPU. I believe this second method will be much more robust across a range of use cases and therefore more useful for users.

Closing this PR. Will reopen a new PR with a more robust set_ic! function that combines this PR and PR #337.


Refactoring the init warnings

This PR resolves #24 by adding warning on Windows 10 1903 and higher for the requirement of administrative privileges. I think that it is a good idea and avoids user confusion - at least until the fido2 library or solo gets proper workaround.

Together with the Windows warning, I did refactoring for the Linux root warning as well.

And actually I have a quick question.
I did 'solo key update' without --hacker (because it's not supported anymore) on my kickstarter Solo Hacker and it updated the firmware from 2.3.0 to 3.0.0.
But now solo key version shows 3.0.0 locked!?
Wasn't it supposed to automatically update my Solo Hacker to the unlocked setting?
Also my bootloader version is still 2.3.0 (extracted via solo program aux bootloader-version)
And I did the update as Admin, so I kind wondering if this is intended behavior?

Second one is intended, need to do the DFU dance.
First one sounds like a horrible bug 😔

@int3l Is there a chance you accidentally programmed a secure firmware?  If you did this, then it would have locked the flash with the unlocked bootloader.  The latest 3.0.0 firmware adds an extra byte of info about the lock setting when reporting the version.

@conorpp I don't think so. Is there a way to revert to older unlocked (hacker) version in order to test if the latest version of solo-python is doing the change?
I still have the old bootloader 2.3.0.

We do not record key serial numbers, no.

 I think that updated only one time via the webupdate or something like that. And now I wanted to test solo-python.

Hi @nickray is this still relevant or should I close it?

It looks good to me, thank you for the PR and sorry for delay :)


Set up GitHub actions

[x] Set up unit tests for different python versions.
[x] Set up unit tests for different operating systems.
[x] Set up unit tests coverage test.
[ ] Set up sphinx documentation test.
[x] Set up copyright tests.
[x] Set up flake8 tests.

For some inspiration:
https://github.com/pints-team/pints/tree/master/.github/workflows
They use run-tests.py to execute the tests.
https://github.com/pints-team/pints/blob/master/run-tests.py

Sphinx documentation test to be addressed in #8

Setting up the docstring tests has been moved to a separate issue #19 .


Expose AudioNode class

Exposing AudioNode class to JS so we can do node instanceof AudioNode. Did not test the monkey patching yet.

Cool thanks!


SendDocumentAsync with InputOnlineFile is not working

it does not send the pdf file I have selected to telegram

Please follow issue template
If you want to chat, feel free to join our group.

Did you find the solution, because once I updated Telegram.Bot to (<IP_ADDRESS>) version I could not use this code anymore.

me too... as if there's no InputOnlineFile a method. I'm stuck. the only way for me to return back older version of telegram.bot.

Now I just use the following commands:
async static Task SendVideo(ITelegramBotClient BotClient, Update update, CancellationToken arg3, Message message, string filename)
{
try
{
using (var videoStream = System.IO.File.OpenRead(@"D:\VideosAPI\Video"))
{
await BotClient.SendVideoAsync(
chatId: message.Chat.Id,
video: new InputFileStream(videoStream, "video.mp4"), // Use InputFileStream for local files
supportsStreaming: true,
cancellationToken: arg3
);
}
Console.WriteLine("Video sent successfully!");
}
catch (Exception ex)
{
Console.WriteLine($"Failed to send the video: {ex.Message}");
}
}.
Bbecause I keep video on my computer.

So guys there is an abstract class. I used it's InputFile.FromStream(stream, "Points.xlsx") method. All work fine 👯


isFunction is not compatible with IE11

Hey.
The internal "isFunction" function is not compatible with IE11, on which "fn.constructor.name" will return undefined. Causing this library doesn't work at all on IE11

Hey.
Given that IE11 doesn't support ES6 (which is used by this library), I don't think this library should be adapted to support it, too, specially considering that IE11 isn't supported even by Microsoft, which used to develop it..

I agree with you.
However it looks like most of your this is compatible with IE11 except this core functionality.
I made a PR which is a potential simplification of this function.
Feel free to integrate or not ;)


Added missing ESM types subpath export condition.

The TypeScript 4.7 NodeNext module resolver does not honor the legacy types property in the package.json file.  You need to add a types export condition as described here.

Note that the "types" condition should always come first in "exports".

@scott-lc Could you install<EMAIL_ADDRESS>and check whether that works in your TypeScript 4.7 project? If it works, I'll do a new prod release for tailwind-merge. 😊

@dcastil - Thanks for the quick turnaround<EMAIL_ADDRESS>works like I expected it to.

Just released v1.5.0 with your fix in it. I just investigated a little and noticed that my projects also use TypeScript 4.7 where it works fine. Did the problem only occur when you use TypeScript 4.7 and use type: "module" in your package.json?

Ah got it, I clarified that in the release. Thanks for explaining!


After some time Listening works but texttospeech not any more

Hi,
I use the node since 2 weeks. But now the routine speak node only works after redeploy and after some time it‘s stop working.
The listening node seams to work because other nodes in the flow are triggered. The speak node seams trigger too (the status change zu success) but nothing happens. After a redeploy, it works again.
I use the proxy mode with a auth file. No errors in the debug.
Any ideas? thanks Alex

It’s seams that the refresh dose not the same as a deployment? Is there e way to restart/initial the node instead of a refresh? The redeploy seams to fix the connection.

I am having this issue almost daily. I currently recover by making a slight change to the flow and re-deploying.

I think that I found a solution.

Every hour a cookie refresh and if this fail a reauthorization with the catch node.
Alex

I have the same error, but I don't think a missing or expired cookie is the reason, because all other alexa-functions are working fine.
The debug window also shows the correct speak-payload - there is just no output and Alexa does not say it.
Achim

it seems to be a known problem - still without a permanently working solution
Alexa forgets how to talk #99
Speak and other commands stop working after a few hours #40
Achim

I suffer same issue. Once redeploy flow work for some time, but after a day or so it stops to send any to my Echo device.
I'm not debugging what's happened but visually all nodes are ready and not raising error.
I'm ussing v3.10.4 (I think latest) but this issue is really anoying.
Any news about how to solve it ?

No, unfortunately there is nothing new. I'm not sure if the module will get any updates, because there is no contributor activity since the end of July.
I use a comparable module in FHEM, which runs absolutely stable with only one refresh a day. I will probably not use Alexa with node-red anymore.


olpc-cjson != JSON

ref https://github.com/ostreedev/ostree-rs-ext/pull/652#discussion_r1702163548
Today the image spec talks about canonical JSON and specifically links to the OLPC canonical json but:
Quoting https://docs.rs/olpc-cjson/latest/olpc_cjson/

(specifically, ASCII control characters 0x00–0x1f are printed literally, which is not valid JSON). Therefore, serde_json cannot necessarily deserialize JSON produced by this formatter.

The efforts in this area are clearly a mess; the spec also links to a fork of Go's encoding/json that is very dead. Since TUF also uses it, its ecosystem looks a bit more maintained and hmm, maybe we just need to add a PR to canonical-json to add an option to fix this?

Ah ah wait, I see olpc-cjson's repo is now at https://github.com/awslabs/tough which definitely looks maintained.

cc https://github.com/awslabs/tough/issues/810


merge() in concatenate_layers() is being called with mode='sum' when using Keras 1

Hi,
Since the addition of the compatibility with Keras 2, the call to merge() in concatenate_layers() no longer includes the mode parameter when used with Keras 1. Thus, merge() is now called with the default mode='sum' default value instead of , which I understand that is not the expected behaviour (and crashes if the number of channels is different for A and B).
Many thanks for sharing this work!
Best,
Aitor

Hi,
Thank you for pointing out the error.
The merge layer is now using the mode parameter and so I think this issue is solved now.
Thanks again.


Restrict access to certain email domains

I was wondering if anyone had interest in an feature that restricted signups to a certain domain name?  AKA only allow external users from your school or organization to sign up.  I'm thinking RESTRICTED_DOMAIN=school.edu?  If the value is null/the variable is nonexistent it would default to normal behavior.
I have implemented this feature and am just trying to get a sense of if anyone else would benefit from it.
In the meantime, you can drop something like this into your app/controllers/invite_controller.rb, at around line 22.
if email.split("@").last != "school.edu"
  @message = "Sorry! Early access is currently restricted to people within the @school.edu domain.  We will be opening it up soon, though!"
  @type = "warning"
  render :index
  return
end

@ruddfawcett I like the idea and would happily merge a pull request :+1: You can use an environment variable to pass the email host.

@KrauseFx yep -- current implementation... I'll send a PR when I get a chance.
if ENV["RESTRICTED_DOMAIN"]
  if email.split("@").last != ENV["RESTRICTED_DOMAIN"]
    @message = "Sorry! Early access is currently restricted to people within the #{ENV["RESTRICTED_DOMAIN"]} domain.  We will be opening it up soon, though!"
    @type = "warning"
    render :index
    return
  end
end

Interesting, looks great. Thank you @ruddfawcett :+1:


devextreme-angular 21.1.3: dxDataGridColumn deprecated

columns property of dx-data-grid has this type definition:
// \devextreme-angular\ui\data-grid\index.d.ts

export declare class DxDataGridComponent extends DxComponent implements OnDestroy, OnChanges, DoCheck {

    columns: Array<DevExpress.ui.dxDataGridColumn | string>;

}

but the dxDataGridColumn is marked as deprecated:
// \devextreme\bundles\dx.all.d.ts

/**
 * @deprecated
 */
export type dxDataGridColumn = DevExpress.ui.dxDataGrid.Column;

what is the correct type definition if I want set the correct type to a property into my component, eg.:
import { dxDataGridColumn } from 'devextreme/ui/data_grid';

public columnDefs: Array<dxDataGridColumn> = [];

<dx-data-grid [columns]="columnDefs"></dx-data-grid>

Hi @cesco69,
In v.21.1.3 we made our TypeScript definitions stricter and deprecated all internal types that we plan to remove in the future. Please refer to this BC for more information: DevExtreme TypeScript declarations become stricter.
We will add the information about new types to the deprecation message in the next releases so that you can migrate to the correct types. Currently, you can ignore this message.

@cesco69, we are currently reviewing existing type names and locations. To determine the most demanded types and process them first, we marked types under review as deprecated. dxDataGridColumn is already on the list.
If you get more of these warnings, you can report them in the https://github.com/DevExpress/DevExtreme/issues/17885 thread, and we'll provide public substitutions.

This is a very poor way of handling this issue.  I have implemented a CustomStore and to upgrade to the latest version of DevExtreme, I have to beg you to provide a suitable replacement class to use for LoadOptions.  Public APIs should always have been provided for these documented API elements.  By all means have a private implementation type, but when you are  documenting a public API you should be adhering to it.


Webpack2 causes Depreciation Warning of loaderUtils.parseQuer()

Description of Issue
The following warning is received when running nightwatch tests with webpack v2.

(node:9247) DeprecationWarning: loaderUtils.parseQuery() received a non-string value which can be problematic, see https://github.com/webpack/loader-utils/issues/56
parseQuery() will be replaced with getOptions() in the next major version of loader-utils.

Discussion regarding the issues is found here.

➜  terra-site git:(master) node --trace-deprecation node_modules/.bin/webpack
(node:13828) DeprecationWarning: loaderUtils.parseQuery() received a non-string value which can be problematic, see https://github.com/webpack/loader-utils/issues/56
parseQuery() will be replaced with getOptions() in the next major version of loader-utils.
    at Object.parseQuery (/Users/mb034780/public_github/terra-core/packages/terra-site/node_modules/loader-utils/index.js:78:3)
    at getLoaderConfig (/Users/mb034780/public_github/terra-core/packages/terra-site/node_modules/sass-loader/index.js:387:23)
    at Object.module.exports (/Users/mb034780/public_github/terra-core/packages/terra-site/node_modules/sass-loader/index.js:42:23)
    at LOADER_EXECUTION (/Users/mb034780/public_github/terra-core/packages/terra-site/node_modules/loader-runner/lib/LoaderRunner.js:119:14)
    at runSyncOrAsync (/Users/mb034780/public_github/terra-core/packages/terra-site/node_modules/loader-runner/lib/LoaderRunner.js:120:4)
    at iterateNormalLoaders (/Users/mb034780/public_github/terra-core/packages/terra-site/node_modules/loader-runner/lib/LoaderRunner.js:229:2)
    at Array.<anonymous> (/Users/mb034780/public_github/terra-core/packages/terra-site/node_modules/loader-runner/lib/LoaderRunner.js:202:4)
    at Storage.finished (/Users/mb034780/public_github/terra-core/packages/terra-site/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:38:15)
    at /Users/mb034780/public_github/terra-core/packages/terra-site/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:69:9
    at /Users/mb034780/public_github/terra-core/packages/terra-site/node_modules/graceful-fs/graceful-fs.js:78:16
    at FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:445:3)

Updating the sass-loader to 6.x removes the deprecation warning.

Update sass-loader to 6.0.3 and also upgrade other devDependencies versions.
// only in terra-site
devDependencies
    "autoprefixer": "^6.7.7”,
    "babel-loader": "^6.4.1",
    "clean-webpack-plugin": "^0.1.16",
    "css-loader": "^0.28.0",
    "extract-text-webpack-plugin": "^2.1.0",
    "gh-pages": "^0.12.0”,
    "json-loader": "^0.5.4",
    "node-sass": "^4.5.2",
    "postcss-loader": "^1.3.3",
    "raw-loader": "^0.5.1",
    "sass-loader": "^6.0.3",
    "style-loader": "^0.13.2",

// also used in terra-toolkit
    "html-webpack-plugin": "^2.28.0”,
    "webpack": "^2.4.1",
    "webpack-dev-server": "^2.4.2"

// also used in terra-core
    "babel-cli": "^6.24.1”,


Refactor pay with wallet API

CC @mountiny @youssef-lr
Details

Fixed Issues
$ https://github.com/Expensify/Expensify/issues/213711
Tests
This will need to be tested with this Web PR
To test this you will need a user with a Gold Wallet - This SO explains how to create/update one on dev
You also need to make sure the money payments are all done in USD, other wise the correct button will not appear.
Remember you can always tap the currency symbol to change it.
In QA you need to be in both the betas
1. SendMoney With Wallet
Tip: Trigger offline state in App using Preferences -> Force offline.
Offline

As User B, click on the global create menu +, select Send Money
Go through the prompt and select and account you have never chatted before, let's call it User A
Make sure the Currency is in USD
In the last payment page, add a comment describing what the payment is for
Choose Pay with Expensify option in the settlement button dropdown, if you have more options (otherwise you can only see this option)
Press the button to pay
Make sure you have been navigated to this new chat which is greyed out since it was optimistically created
Confirm there is IOU preview showing the correct amount you have sent with.
The report message says Sent $X for <comment>
Click on the payment details and the message and amount is also correct in the right hand side and greyed out.
Now click on the + in the chat report.
Select Send Money
Follow the prompt and send more money to User A
Confirm there has been another Sent $X for <comment> comment left and IOU preview with the correct amount
Now, click the global create + again and choose Send Money
This time choose account you have already chatted with before (User C)
Follow the prompts to sent money and choose Pay with Expensify
Confirm you have been navigated to the correct report and the payment details are showing there greyed out

Online

Go back online
Confirm that the IOUPreview and the message are same and no longer greyed out in both of the chats
Click on the global create button + again, Send Money and choose either User A or User C
Follow the prompt and sent them money using the Pay with Expensify option.
Confirm you have been navigated to the correct report and the payment details showed up correct, this time not greyed out.

Error

Login as User A and go offline
In other incognito window, login as User B
There is no previous chat between User A and User B
As User B, who is online, create chat with User A and send them a message
As User A, who is offline, click on the global create + button and select Send Money
Send money to User B and choose Pay with Expensify
Send the moeny and see new chat being created and greyed out.
As User A, go back online
See an error on the optimistically created chat
See the message from User B in a different report.
You are able to clear the stale report.

2. PayMoneyRequest
Offline
Pre-requisites:

Have a chat between User A and User B, such that User B owes money to User A
Have a chat between User B and User C, such that User B owes money User C
All of this IOU need to be in USD

As User B, navigate to the chat with User A and you should see an IOU preview with Pay button
Press the Pay button
In the IOU Details page, choose Pay with Expensify option in the dropdown and click the settlement button
Verify a greyed out Settled up! message displays immediately
Verify the IOU Preview at the top of the modal says You paid <name of the receiver> and the preview is greyed out
Click the X to close the modal and navigate away to a different chat and back again
Verify the IOUPreview and settled message in the chat view are greyed out
Click the IOUPreview to access the detailed view again
Verify that the message on the report and the IOUPreview in the header are still both greyed out

Online

Go back online
Confirm that the IOUPreview and the message don't change and are no longer greyed out.
Still as User B, navigate to the chat with User C
Click Pay in the IOU Details page, choose Pay with Expensify option in the dropdown and click the settlement button
Verify the "Settled up!" message has immediately appeared in the IOU details modal and doesn't appear greyed out
Verify the IOU Preview reads You paid <name of the receiver> and is not greyed out.

Error

Login as User A
Request $10 from User B
Login as User B in another incognito window
Navigate to the chat report with User A
Go offline
Click Pay in the IOU Preview
As User A, go to the chat with User B and click on the IOU request details
Click Cancel on the $10 request
As User B, still offline, click the Pay with Expensify button in the IOU details modal to pay it
Verify the greyed out "Settled up!" message has shown up and the report shows as paid.
Go back online
Verify you see an error message in-line because the request was cancelled before the payment was made offline.
Navigate back to the LHN
Verify you see a single red dot on the chat row that contains the failed settlement
Navigate into the chat
Verify you see an in-line error message on the failed settlement
Click/tap the X to dismiss the error message
Verify the error message disappears

[ ] Verify that no errors appear in the JS console

QA Steps

Follow the same steps than in tests

[ ] Verify that no errors appear in the JS console

PR Author Checklist

[ ] I linked the correct issue in the ### Fixed Issues section above
[ ] I wrote clear testing steps that cover the changes made in this PR

[ ] I added steps for local testing in the Tests section
[ ] I added steps for Staging and/or Production testing in the QA steps section
[ ] I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[ ] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)

[ ] I included screenshots or videos for tests on all platforms
[ ] I ran the tests on all platforms & verified they passed on:

[ ] iOS / native
[ ] Android / native
[ ] iOS / Safari
[ ] Android / Chrome
[ ] MacOS / Chrome
[ ] MacOS / Desktop

[ ] I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
[ ] I followed proper code patterns (see Reviewing the code)

[ ] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
[ ] I verified that comments were added to code that is not self explanatory
[ ] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[ ] I verified any copy / text shown in the product was added in all src/languages/* files
[ ] I verified any copy / text that was added to the app is correct English and approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
[ ] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[ ] I verified the JSDocs style guidelines (in STYLE.md) were followed

[ ] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[ ] I followed the guidelines as stated in the Review Guidelines
[ ] I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
[ ] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[ ] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[ ] If a new component is created I verified that:

[ ] A similar component doesn't exist in the codebase
[ ] All props are defined accurately and each prop has a /** comment above it */
[ ] The file is named correctly
[ ] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[ ] The only data being stored in the state is data necessary for rendering and nothing else
[ ] For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
[ ] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
[ ] All JSX used for rendering exists in the render method
[ ] The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

[ ] If a new CSS style is added I verified that:

[ ] A similar style doesn't already exist
[ ] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG)

[ ] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[ ] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[ ] I have checked off every checkbox in the PR author checklist, including those that don't apply to this PR.

PR Reviewer Checklist
The reviewer will copy/paste it into a new comment and complete it after the author checklist is completed

[ ] I have verified the author checklist is complete (all boxes are checked off).
[ ] I verified the correct issue is linked in the ### Fixed Issues section above
[ ] I verified testing steps are clear and they cover the changes made in this PR

[ ] I verified the steps for local testing are in the Tests section
[ ] I verified the steps for Staging and/or Production testing are in the QA steps section
[ ] I verified the steps cover any possible failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[ ] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)

[ ] I checked that screenshots or videos are included for tests on all platforms
[ ] I included screenshots or videos for tests on all platforms
[ ] I verified tests pass on all platforms & I tested again on:

[ ] iOS / native
[ ] Android / native
[ ] iOS / Safari
[ ] Android / Chrome
[ ] MacOS / Chrome
[ ] MacOS / Desktop

[ ] If there are any errors in the console that are unrelated to this PR, I either fixed them (preferred) or linked to where I reported them in Slack
[ ] I verified proper code patterns were followed (see Reviewing the code)

[ ] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick).
[ ] I verified that comments were added to code that is not self explanatory
[ ] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[ ] I verified any copy / text shown in the product was added in all src/languages/* files
[ ] I verified any copy / text that was added to the app is correct English and approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
[ ] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[ ] I verified the JSDocs style guidelines (in STYLE.md) were followed

[ ] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[ ] I verified that this PR follows the guidelines as stated in the Review Guidelines
[ ] I verified other components that can be impacted by these changes have been tested, and I retested again (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar have been tested & I retested again)
[ ] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[ ] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[ ] If a new component is created I verified that:

[ ] A similar component doesn't exist in the codebase
[ ] All props are defined accurately and each prop has a /** comment above it */
[ ] The file is named correctly
[ ] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[ ] The only data being stored in the state is data necessary for rendering and nothing else
[ ] For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
[ ] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
[ ] All JSX used for rendering exists in the render method
[ ] The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

[ ] If a new CSS style is added I verified that:

[ ] A similar style doesn't already exist
[ ] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG)

[ ] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[ ] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[ ] I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots

Web

Mobile Web - Chrome

Mobile Web - Safari

Desktop

iOS

Android

I'm going to remove the draft as the PR is mostly done, but this still needs to be tested with the Web PR that is very WIP atm, so just code review for now.

@thesahindia FYI we will let you know when you can help with testing here 🙇 thanks

Until the Web one is merged to staging you still can't test @thesahindia but the other reviewers please take a look 🙇🏼

we will need to remove these two methods from the DeprecatedAPI

Could only find one of them, seems the other one has already been removed...

Looks like you modified deprecatedAPI.js! To be clear, you should not be adding any code to this file.

It was the good kinda change Melvin, do not worry

@thesahindia this PR is back, do you mind giving it a go and testing it out?

Here's my email:-<EMAIL_ADDRESS>

ok you have been added to the betas, can you try again, I'm not 100% sure that will work, but we'll try to get this work

It didn't work 😔

asking in slack to see if anyone can help

Sorry @thesahindia it seems only an Expensify employee that is in US can test this atm.
So apart from your PR code review, there is not much for you to do here.
I'll see if someone already reviewing or a volunteer from the internal team can help testing this.
Thanks

@stitesExpensify atm I think only you can test this, if this is overlwelming or you don't have time to test eveything (it is a rather big test case) we can ask for volunteers in slack

In that case, should we take @thesahindia request for review down as there is not much they can help with here. Sorry for the confusion 🙇

I'm unable to successfully test this (as we've been discussing in DMs). When I try to send money to an account that doesn't exist I get this screen:

With these errors:

I've also been noticing this on desktop where the welcome message is below the request while offline. AFAIK that shouldn't ever happen because we are manually generating those actions and their sequence numbers

Reviewer Checklist

[ ] I have verified the author checklist is complete (all boxes are checked off).
[ ] I verified the correct issue is linked in the ### Fixed Issues section above
[ ] I verified testing steps are clear and they cover the changes made in this PR

[ ] I verified the steps for local testing are in the Tests section
[ ] I verified the steps for Staging and/or Production testing are in the QA steps section
[ ] I verified the steps cover any possible failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[ ] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)

[ ] I checked that screenshots or videos are included for tests on all platforms
[ ] I included screenshots or videos for tests on all platforms
[ ] I verified tests pass on all platforms & I tested again on:

[ ] iOS / native
[ ] Android / native
[ ] iOS / Safari
[ ] Android / Chrome
[ ] MacOS / Chrome
[ ] MacOS / Desktop

[ ] If there are any errors in the console that are unrelated to this PR, I either fixed them (preferred) or linked to where I reported them in Slack
[ ] I verified proper code patterns were followed (see Reviewing the code)

[ ] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick).
[ ] I verified that comments were added to code that is not self explanatory
[ ] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[ ] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method
[ ] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[ ] I verified any copy / text that was added to the app is correct English and approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
[ ] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[ ] I verified the JSDocs style guidelines (in STYLE.md) were followed

[ ] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[ ] I verified that this PR follows the guidelines as stated in the Review Guidelines
[ ] I verified other components that can be impacted by these changes have been tested, and I retested again (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar have been tested & I retested again)
[ ] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[ ] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[ ] If a new component is created I verified that:

[ ] A similar component doesn't exist in the codebase
[ ] All props are defined accurately and each prop has a /** comment above it */
[ ] The file is named correctly
[ ] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[ ] The only data being stored in the state is data necessary for rendering and nothing else
[ ] For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
[ ] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
[ ] All JSX used for rendering exists in the render method
[ ] The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

[ ] If any new file was added I verified that:

[ ] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[ ] If a new CSS style is added I verified that:

[ ] A similar style doesn't already exist
[ ] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG)

[ ] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[ ] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[ ] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[ ] I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots/Videos

Web

Mobile Web - Chrome

Mobile Web - Safari

Desktop

iOS

Android

This one https://github.com/Expensify/App/pull/12646#issuecomment-1355385811 happens on main as well for sure with other optimistic actions

I'm also getting a 401 while trying to cancel IOU requests while online

I was able to cancel IOU with no issue, weird, maybe something is wrong with the account, can you share the error message as well?

the error @stitesExpensify is having is here
and it seems that you have a chatReport with ID 0, which is a bit weird.

:hand: This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release.

Unfortunately whenever I do the following test steps while offline:

Offline
16. This time choose account you have already chatted with before (User C)
17. Follow the prompts to sent money and choose Pay with Expensify
19. Confirm you have been navigated to the correct report and the payment details are showing there greyed out
Online

Go back online
Confirm that the IOUPreview and the message are same and no longer greyed out in the chats

Any console errors or anything?

Sorry moved onto the next step (which worked great!):

Hmmmm... Can't get that error to trigger again - it's working fine now 🤷♂

It's a CORS error weirdly?

I've seen errors in PHP before cause CORS errors for me in the VM. It might be worth checking the logs.

Hmmm... this isn't the VM though this is Staging 🤔

🚀 Deployed to production by @yuwenmemon in version: 1.2.42-2 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅


Activation Layer is not parsed correctly

type activation is not parsed correctly

:octocat: cibot: Thank you for posting issue #392. The person in charge will reply soon.


MS 2023 bigwage single

1 millioin dollars wage income, single MS return.
See
http://taxsim.nber.org/out2psl/ms
and note that emulator siitax is exactly twice TaxAct tax.

This was actually an issue in PolicyEngine US - will be fixed by #5325 we were missing a top bracket in 2023 which was causing the state income tax amounts to double - thank you for filing this


Workflow refactor

Rename tortelline.yml to usage.yml, this is workflow that tests if workflow examples in README work
Add job to testing.yml to test action with multiple repos on branch of PR
Add job to testing.yml to test action with custom config on branch of PR

PR was merged, can we close this?

Yes


BUGFIX: Use Object->hasMethod() instead of method_exists()

BUGFIX: Use Object->hasMethod() instead of method_exists()
This fixes an issue when you pass a PaginatedList back from ModelAdmin::getList(). The original issue can be replicated with the following:
<?php
class AdminTest extends ModelAdmin {
    private static $managed_models = array('SiteTree');
    private static $url_segment = 'test';
    private static $menu_title = 'Test';

    public function getList() {
        return new PaginatedList(parent::getList(), $this->request);
}

Note: The reason I'm passing a PaginatedList back from ModelAdmin::getList() is for performance reasons.
With 1.4m records, it takes ~14 seconds to render the standard ModelAdmin interface without getList() being overridden (even with GridFieldPaginator), and takes ~4 seconds after this patch. Not really sure why as they both limit the list, just anecdotal evidence :)


Productivity Tool usability

The Open XML SDK 2.5 Productivity Tool does some amazing things for me, but it would be even better if there could be some way to automatically fill in the Browse Files to Compare dialog box, such as with the last files opened.
What I tried:

Google search for: Open XML SDK Productivity Tool command line
I used the Spy++ program that comes with Visual Studio. It only recognizes the dialog box, not the dialog box controls.
I wrote the below program to find the dialog using EnumWindows(). I can find the dialog and move the control focus by sending it tab characters, but EnumChildWindows() doesn't find the dialog controls, and sending keystrokes to the dialog doesn't fill in the dialog controls.

Howard Rubin
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam);

int _tmain(int argc, _TCHAR* argv[]) {
    EnumWindows(EnumWindowsProc, NULL);
    return 0;
}

using namespace std;

BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam) {
    wcout << hwnd << std::endl;
    return TRUE;
}

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) {
    wchar_t title[1000];
    GetWindowText(hwnd, title, sizeof(title)-1);
    if (!wcscmp(L"Browse Files to Compare", title)) {
            wcout << "Window title: " << title << endl;
        EnumChildWindows(hwnd, EnumChildProc, NULL);

        for (int i = 0; i < 2; ++i) {
            SendMessage(hwnd, WM_KEYDOWN, VK_TAB, 0);
            SendMessage(hwnd, WM_KEYUP, VK_TAB, 0);
        }
        //SendMessage(hwnd, WM_CLOSE, NULL, NULL);
    }
    return TRUE;
}

@HowardRubin thank you for the suggestion and the code sample, but the Productivity Tool is not currently part of this repository. If you don't mind, please post your suggestion here:
https://social.msdn.microsoft.com/Forums/office/en-us/home?forum=oxmlsdk


helm: Remove duplicated key k8sClientRateLimit

The object k8sClientRateLimit is already specified in the below lines
https://github.com/cilium/cilium/blob/338947e0bbbe49781ba32e668e57f8c45dcf23a1/install/kubernetes/cilium/values.yaml.tmpl#L41-L51
Fixes: e2f475dfd088af34559657f09a77fc6937f431d6

/test

Reviews from required code owners are in, merging this in.