Outgoing mail marked as spam

Classification

[X] Deliverability issue
[X] Serious bug

Reproducibility

[X] Always

Docker info
Containers: 6
 Running: 6
 Paused: 0
 Stopped: 0
Images: 6
Server Version: 17.12.0-ce
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 89623f28b87a6004d4b785663257362d1658a729
runc version: b2567b37d7b75eb4cf325b77297b140ea686ce8f
init version: 949e6fa
Security Options:
 seccomp
  Profile: default
Kernel Version: 4.9.0-9-amd64
Operating System: Debian GNU/Linux 9 (stretch)
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 1.926GiB
Name: ip-x-x-x-x
ID: x:x:x:x:x:x:x:x:x:x:x:x
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
 <IP_ADDRESS>/8
Live Restore Enabled: false

REPOSITORY            TAG                 DIGEST                                                                    IMAGE ID            CREATED             SIZE
hardware/mailserver   1.1-stable          sha256:0af0d6bb7d5de589cb1cf47811f844d7ed43827a3298197fdd4cafee8d2c8ed5   1d08ae0bb068        3 months ago        380M

Description
I've installed hardware/mailserver on 3 servers. All outgoing mail is always marked as spam by Gmail, Hotmail, etc. I've narrowed down the problem to hardware/mailserver because 1. the same problem happens on 3 different servers with 3 different IPs that all check out as clean, and 2. I now use tutanota.com for outgoing mail for one of these servers and when I send the exact same email as I do from my hardware/mailserver install, it delivers to the inbox.
I've noticed a previous issue regarding this but note that in order to properly test deliverability, you should try sending to a brand new Gmail/Hotmail address that hasn't previously received emails from the address you're testing.
Note that this happens regardless of whether I use RainLoop or my own mail client with IMAP.
My port25.com results are:
SPF check:          pass
"iprev" check:      pass
DKIM check:         pass
SpamAssassin check: ham

Steps to reproduce
Send an email from a hardware/mailserver address.
Expected results
Email goes to inbox of the address at a major email service provider.
Actual results
Email goes to spam.
Debugging information
2019-08-16T21:05:04.577395+00:00 mail dovecot: imap-login: Login<EMAIL_ADDRESS>method=PLAIN, rip=x.x.x.x, lip=x.x.x.x, mpid=7041, TLS, session=<A10kWEKQjddj8AFG>
2019-08-16T21:05:04.795479+00:00 mail dovecot: imap(USER@DOMAIN.com): Logged out in=32 out=486
2019-08-16T21:05:24.794572+00:00 mail dovecot: imap-login: Login<EMAIL_ADDRESS>method=PLAIN, rip=x.x.x.x, lip=x.x.x.x, mpid=7081, TLS, session=<7tlYWUKQktdj8AFG>
2019-08-16T21:05:24.991475+00:00 mail dovecot: imap(USER@DOMAIN.com): Logged out in=32 out=486
2019-08-16T21:05:38.668467+00:00 mail postfix/smtps/smtpd[7088]: connect from CONNECTION.ISP[x.x.x.x]
2019-08-16T21:05:38.876987+00:00 mail postfix/smtps/smtpd[7088]: Anonymous TLS connection established from CONNECTION.ISP[x.x.x.x]: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
2019-08-16T21:05:39.441892+00:00 mail postfix/smtps/smtpd[7088]: 6BC3D80136: client=CONNECTION.ISP[x.x.x.x], sasl_method=PLAIN<EMAIL_ADDRESS>2019-08-16T21:05:39.638598+00:00 mail postfix/authclean/cleanup[7092]: 6BC3D80136: replace: header Received: from [x.x.x.x] (CONNECTION.ISP [x.x.x.x])??(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))??(No client certificate re from CONNECTION.ISP[x.x.x.x]<EMAIL_ADDRESS><EMAIL_ADDRESS>proto=ESMTP helo=<[x.x.x.x]>: Received: from authenticated-user (mail.DOMAIN.com [<IP_ADDRESS>])??(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))??(No client certificate requested)??by mail.DOMAIN.com (Postfix) with ESMTPSA id 6BC3D80136??for<EMAIL_ADDRESS>Fri, 16 Aug 2019 21:05:39 +0000 (UTC)
2019-08-16T21:05:39.638658+00:00 mail postfix/authclean/cleanup[7092]: 6BC3D80136: replace: header Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.11\)) from CONNECTION.ISP[x.x.x.x]<EMAIL_ADDRESS><EMAIL_ADDRESS>proto=ESMTP helo=<[x.x.x.x]>: Mime-Version: 1.0
2019-08-16T21:05:39.638677+00:00 mail postfix/authclean/cleanup[7092]: 6BC3D80136<EMAIL_ADDRESS>2019-08-16T21:05:39.639381+00:00 mail rspamd[741]: <5f26a3>; proxy; rspamd_url_text_extract: got empty text part
2019-08-16T21:05:39.641690+00:00 mail clamd[635]: SelfCheck: Database status OK.
2019-08-16T21:05:39.651070+00:00 mail postfix/qmgr[736]: 6BC3D80136<EMAIL_ADDRESS>size=658, nrcpt=1 (queue active)
2019-08-16T21:05:40.447893+00:00 mail postfix/smtp[7094]: Untrusted TLS connection established to hotmail-com.olc.protection.outlook.com[<IP_ADDRESS>]:25: TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)
2019-08-16T21:05:40.992007+00:00 mail postfix/smtp[7094]: 6BC3D80136<EMAIL_ADDRESS>relay=hotmail-com.olc.protection.outlook.com[<IP_ADDRESS>]:25, delay=1.7, delays=0.36/0.01/0.84/0.49, dsn=2.6.0, status=sent (250 2.6.0<EMAIL_ADDRESS>[InternalId=3968549809999, Hostname=DM6NAM12HT122.eop-nam12.prod.protection.outlook.com] 9872 bytes in 0.239, 40.247 KB/sec Queued mail for delivery -> 250 2.1.5)
2019-08-16T21:05:40.992403+00:00 mail postfix/qmgr[736]: 6BC3D80136: removed

Configuration (docker-compose.yml, traefik.toml)
docker-compose.yml
version: "3"

networks:
  http_network:
    external: true
  mail_network:
    external: false

services:
  traefik:
    image: traefik:1.5-alpine
    container_name: traefik
    restart: ${RESTART_MODE}
    ports:
      - "80:80"
      - "443:443"
    labels:
      - traefik.enable=true
      - traefik.frontend.rule=Host:mail.${MAILSERVER_DOMAIN}
      - traefik.port=8080
      - traefik.docker.network=http_network
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ${VOLUMES_ROOT_PATH}/traefik/traefik.toml:/traefik.toml:ro
      - ${VOLUMES_ROOT_PATH}/traefik/acme:/etc/traefik/acme
    networks:
      - http_network

  mailserver:
    image: hardware/mailserver:${MAILSERVER_DOCKER_TAG}
    container_name: mailserver
    restart: ${RESTART_MODE}
    domainname: ${MAILSERVER_DOMAIN}                    # Mail server A/MX/FQDN & reverse PTR = mail.domain.tld.
    hostname: ${MAILSERVER_HOSTNAME}
    labels:
      - traefik.enable=true
      - traefik.frontend.rule=Host:spam.${MAILSERVER_DOMAIN}
      - traefik.port=11334
      - traefik.docker.network=http_network
    # extra_hosts:                          - Required for external database (on other server or for local databases on host without docker)
    #  - "mariadb:xx.xx.xx.xx"              - Replace with IP address of MariaDB server
    #  - "redis:xx.xx.xx.xx"                - Replace with IP address of Redis server
    ports:
      - "25:25"       # SMTP                - Required
    # - "110:110"     # POP3       STARTTLS - Optional - For webmails/desktop clients
      - "143:143"     # IMAP       STARTTLS - Optional - For webmails/desktop clients
      - "465:465"     # SMTPS      SSL/TLS  - Optional - Enabled for compatibility reason, otherwise disabled
      - "587:587"     # Submission STARTTLS - Optional - For webmails/desktop clients
      - "993:993"     # IMAPS      SSL/TLS  - Optional - For webmails/desktop clients
    # - "995:995"     # POP3S      SSL/TLS  - Optional - For webmails/desktop clients
      - "4190:4190"   # SIEVE      STARTTLS - Optional - Recommended for mail filtering
    environment:
      - DBDRIVER=pgsql
      - DBHOST=postgres
      - DBPORT=5432
      - DBPASS=${DATABASE_USER_PASSWORD}       # MariaDB database password (required)
      - RSPAMD_PASSWORD=${RSPAMD_PASSWORD}     # Rspamd WebUI password (required)
    # - ADD_DOMAINS=aa.tld, www.bb.tld...      # Add additional domains separated by commas (needed for dkim keys etc.)
    # - ENABLE_POP3=true                       # Enable POP3 protocol
    # - ENABLE_FETCHMAIL=true                  # Enable fetchmail forwarding
    # - DISABLE_CLAMAV=true                    # Disable virus scanning
    # - DISABLE_SIGNING=true                   # Disable DKIM/ARC signing
    # - DISABLE_GREYLISTING=true               # Disable greylisting policy
    # - DISABLE_RATELIMITING=true              # Disable ratelimiting policy
    #
    # Full list : https://github.com/hardware/mailserver#environment-variables
    #
    volumes:
      - /mnt/docker/traefik/acme:/etc/letsencrypt/acme
      - ${VOLUMES_ROOT_PATH}/mail:/var/mail
    depends_on:
      - postgres
      - redis
    networks:
      - mail_network
      - http_network

  # Administration interface
  # https://github.com/hardware/postfixadmin
  # http://postfixadmin.sourceforge.net/
  # Configuration : https://github.com/hardware/mailserver/wiki/Postfixadmin-initial-configuration
  postfixadmin:
    image: hardware/postfixadmin
    container_name: postfixadmin
    restart: ${RESTART_MODE}
    domainname: ${MAILSERVER_DOMAIN}
    hostname: ${MAILSERVER_HOSTNAME}
    labels:
      - traefik.enable=true
      - traefik.frontend.rule=Host:postfixadmin.${MAILSERVER_DOMAIN}
      - traefik.port=8888
      - traefik.docker.network=http_network
    environment:
      - DBDRIVER=pgsql
      - DBHOST=postgres
      - DBPORT=5432
      - DBPASS=${DATABASE_USER_PASSWORD}
    depends_on:
      - mailserver
      - postgres
    networks:
      - mail_network
      - http_network

  # Webmail (Optional)
  # https://github.com/hardware/rainloop
  # https://www.rainloop.net/
  # Configuration : https://github.com/hardware/mailserver/wiki/Rainloop-initial-configuration
  rainloop:
    image: hardware/rainloop
    container_name: rainloop
    restart: ${RESTART_MODE}
    labels:
      - traefik.enable=true
      - traefik.port=8888
      - traefik.frontend.rule=Host:webmail.${MAILSERVER_DOMAIN}
      - traefik.docker.network=http_network
    volumes:
      - ${VOLUMES_ROOT_PATH}/rainloop:/rainloop/data
    depends_on:
      - mailserver
      - postgres
    networks:
      - mail_network
      - http_network

  # Authoritative DNS server (Optional)
  # https://github.com/hardware/nsd-dnssec
  # https://www.nlnetlabs.nl/projects/nsd/
  # Configuration : https://github.com/hardware/mailserver/wiki/NSD-initial-configuration
  # nsd:
  #   image: hardware/nsd-dnssec
  #   container_name: nsd
  #   restart: ${RESTART_MODE}
  #   ports:
  #     - "53:53"
  #     - "53:53/udp"
  #   volumes:
  #     - ${VOLUMES_ROOT_PATH}/nsd/conf:/etc/nsd
  #     - ${VOLUMES_ROOT_PATH}/nsd/zones:/zones
  #     - ${VOLUMES_ROOT_PATH}/nsd/db:/var/db/nsd

  # Database
  # https://github.com/docker-library/postgres
  # https://postgresql.org/
  postgres:
    image: postgres:10.3-alpine
    container_name: postgres
    restart: ${RESTART_MODE}
    # Info : These variables are ignored when the volume already exists (if databases was created before).
    environment:
      - POSTGRES_DB=postfix
      - POSTGRES_USER=postfix
      - POSTGRES_PASSWORD=${DATABASE_USER_PASSWORD}
    volumes:
      - ${VOLUMES_ROOT_PATH}/pgsql/db:/var/lib/postgresql/data
    networks:
      - mail_network

  # Database
  # https://github.com/docker-library/redis
  # https://redis.io/
  redis:
    image: redis:4.0-alpine
    container_name: redis
    restart: ${RESTART_MODE}
    command: redis-server --appendonly yes
    volumes:
      - ${VOLUMES_ROOT_PATH}/redis/db:/data
    networks:
      - mail_network

traefik.toml
defaultEntryPoints = ["https","http"]

[api]
entryPoint = "traefik"
dashboard = true

[entryPoints]
  [entryPoints.http]
  address = ":80"
    [entryPoints.http.redirect]
    entryPoint = "https"
  [entryPoints.https]
  address = ":443"
    [entryPoints.https.tls]
  [entryPoints.traefik]
  address = ":8080"
  [entryPoints.traefik.auth.basic]
  users = ["admin:REDACTED"]

[acme]
email =<EMAIL_ADDRESS>storage = "/etc/traefik/acme/acme.json"
entryPoint = "https"
onHostRule = true
onDemand = false
  [acme.httpChallenge]
  entryPoint = "http"

[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "mail.DOMAIN.com"
watch = true
exposedbydefault = false

Nevermind, it appears that the problem is AWS. I installed a different mail server option and emails are still marked as spam. Gmail/Hotmail must list all emails coming from AWS IPs as spam.


Cannot record livestream with mobile's resolution

I want to record livestream when started on mobile, but dimension provided by react native agora just are 4:3 or 16:9
How can i use mobile dimension like 720x1280 or something like that?

@LichKing-2234 can u take a look?

using cloud record?

using cloud record?

yes

@LichKing-2234 any solution?

You can set the size you want to record in the API ‘transcodingConfig ’ of the start request of the recording. If it is 4:3, Please try to set it to 1024*768.

You can set the size you want to record in the API ‘transcodingConfig ’ of the start request of the recording. If it is 4:3, Please try to set it to 1024*768.

@Aries112233 i mean, i want to record with mobile size, like 768*1024, etc

@LichKing-2234 can u support me this issue?


Update dependency on ouroboros-network

WARNING: this breaks binary compatibility of Byron and Shelley ledger
snapshots. The ledger will have to be replayed from genesis!

Protocol(Client)Info no longer needs the SecurityParam.
New TraceForgeEvent messages were added. The constructors have been sorted
to match the order in which they're defined in
Ouroboros.Consensus.Node.Tracers.

Ready to be merged, IMO

bors merge


Fix CDN paths

The external .js files were not loading. Revised to use CDN paths from cdnjs.

I wonder if it's somehow a geographical issue.. I tried the old links in a couple of browsers (in case Chrome had cached a redirect or something) and they seemed to work. However, I see no harm in this changeset! And it pulls things up to latest, illustrating that some recent changes to prevent a warning introduced in React 15.5 have worked.


where to put it? another installation style.

I'm in GFW.
It do not work normal installation.
I have to find another installation style of "canner"
I download cli-3.2.13.tgz, its size 98.6 MB.
BUT
where to put it ??

Hi, @singerswang, here are the steps without npm or yarn in my Macbook:

Download the cli-macos.gz from cli-release
Ungzip it to a folder that I created called test-install, so here is the path: ~/projects/test-install/cli-macos.
Add the script ~/projects/test-install/index.js that enables the binary.const fs = require('fs');

function chmod (file) {
  const s = fs.statSync(file)
  const newMode = s.mode | 64 | 8 | 1
  if (s.mode === newMode) return
  const base8 = newMode.toString(8).slice(-3)
  fs.chmodSync(file, base8)
}

chmod('./cli-macos');

Execute the script$ node ~/projects/test-install/index.js

Then you can exec cli-macos by type ~/projects/test-install/cli-macos

You can also alias the command canner in your ~/.bashrc, like:
alias canner='~/projects/test-install/cli-macos'

Hope this helps you. Thanks!

无论如何多谢 @abz53378 的答案，尽管今天早晨04：28，中国大陆时间我又搞定普通下载安装了。😓

为了贡献社区，下面公布本人安装最短路径。
brew install node -g -s
npm install -g @canner/cli

Thanks, Singers Wang, so I closed this one.

I have send a email to you from @x.ly 我也很 faint，不是拿这小问题可以骚扰你们。


Bosh endpoint

Solves #183 by setting http[s]_proxy

@tcrusson in follow-up to #223 , do you mind looking at this with your team? This PR is essential to get users deploying hubot inside a firewalled network to connect to hipchat via xmpp.
Our team currently uses the fork with my patches in. But having this merged to here would cleanup assets we have to manage.
Thanks!

Upgrade of node-xmpp picked up in a different PR.  Will add the bosh config manually in a new commit.


Debug logs?

Is your feature request related to a problem? Please describe.
Got it running locally, and attempting to run it on Railway.app. Seems it just can't connect, and wondering if there's a way to turn on debug logging
Describe the solution you'd like
An environment variable for: LOG_LEVEL=debug,warn,error
Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
Additional context
Add any other context or screenshots about the feature request here.

Currently the Palworld Dedicated server does not output any logging, this is not something I can fix.

@JakeCooper Is it ok if I close this issue?

Yup all good! Will close myself


GH-4896 LMDB: Update benchmarks and improve performance

GitHub issue resolved: #4896
Briefly describe the changes proposed in this PR:
Use same benchmarks as NativeStore and improve performance of value comparisons.

PR Author Checklist (see the contributor guidelines for more details):

[x] my pull request is self-contained
[ ] I've added tests for the changes I made
[x] I've applied code formatting (you can use mvn process-resources to format from the command line)
[x] I've squashed my commits where necessary
[x] every commit message starts with the issue number (GH-xxxx) followed by a meaningful description of the change

QueryBenchmark:
LmdbStore:
Benchmark                                                     Mode  Cnt     Score     Error  Units
QueryBenchmark.complexQuery                                   avgt    5    32.971 ±   6.779  ms/op
QueryBenchmark.different_datasets_with_similar_distributions  avgt    5    16.640 ±   1.517  ms/op
QueryBenchmark.groupByQuery                                   avgt    5     7.608 ±   1.243  ms/op
QueryBenchmark.long_chain                                     avgt    5  5738.926 ± 120.673  ms/op
QueryBenchmark.lots_of_optional                               avgt    5  1592.388 ±  66.201  ms/op
QueryBenchmark.minus                                          avgt    5  4842.102 ± 900.609  ms/op
QueryBenchmark.nested_optionals                               avgt    5  1265.482 ±  33.340  ms/op
QueryBenchmark.pathExpressionQuery1                           avgt    5   152.972 ±   8.200  ms/op
QueryBenchmark.pathExpressionQuery2                           avgt    5    24.418 ±   2.253  ms/op
QueryBenchmark.query_distinct_predicates                      avgt    5   443.126 ±  23.028  ms/op
QueryBenchmark.simple_filter_not                              avgt    5    48.037 ±   3.259  ms/op

NativeStore:
Benchmark                                                     Mode  Cnt     Score     Error  Units
QueryBenchmark.complexQuery                                   avgt    5    36.808 ±   3.314  ms/op
QueryBenchmark.different_datasets_with_similar_distributions  avgt    5    14.337 ±   1.436  ms/op
QueryBenchmark.groupByQuery                                   avgt    5    29.357 ±   6.870  ms/op
QueryBenchmark.long_chain                                     avgt    5  7252.237 ± 901.852  ms/op
QueryBenchmark.lots_of_optional                               avgt    5  1673.769 ± 189.591  ms/op
QueryBenchmark.minus                                          avgt    5  4349.451 ± 314.739  ms/op
QueryBenchmark.nested_optionals                               avgt    5  1655.361 ± 196.522  ms/op
QueryBenchmark.pathExpressionQuery1                           avgt    5   179.215 ±  14.714  ms/op
QueryBenchmark.pathExpressionQuery2                           avgt    5    29.894 ±   1.878  ms/op
QueryBenchmark.query_distinct_predicates                      avgt    5  1592.579 ± 127.726  ms/op
QueryBenchmark.simple_filter_not                              avgt    5    70.175 ±   2.252  ms/op

QueryWriteBenchmark:
LmdbStore:
Benchmark                                                    Mode  Cnt     Score      Error  Units
QueryWriteBenchmark.clear                                    avgt    3  2483.137 ±  962.811  ms/op
QueryWriteBenchmark.clearByQuery                             avgt    3  2447.176 ± 1341.499  ms/op
QueryWriteBenchmark.clearByQueryReadCommitted                avgt    3  2468.667 ± 1430.495  ms/op
QueryWriteBenchmark.clearContext                             avgt    3  2421.495 ±  634.775  ms/op
QueryWriteBenchmark.clearContextReadCommitted                avgt    3  2400.436 ±  615.277  ms/op
QueryWriteBenchmark.clearReadCommitted                       avgt    3  2483.619 ±  581.417  ms/op
QueryWriteBenchmark.removeByQuery                            avgt    3   366.599 ±  174.149  ms/op
QueryWriteBenchmark.removeByQueryReadCommitted               avgt    3   863.178 ±  498.291  ms/op
QueryWriteBenchmark.simpleUpdateQueryIsolationNone           avgt    3   604.452 ±  107.251  ms/op
QueryWriteBenchmark.simpleUpdateQueryIsolationReadCommitted  avgt    3   975.728 ±  514.399  ms/op

NativeStore:
Benchmark                                                    Mode  Cnt     Score       Error  Units
QueryWriteBenchmark.clear                                    avgt    3  3711.374 ±   338.500  ms/op
QueryWriteBenchmark.clearByQuery                             avgt    3  4988.268 ± 15639.497  ms/op
QueryWriteBenchmark.clearByQueryReadCommitted                avgt    3  4390.204 ±  1864.102  ms/op
QueryWriteBenchmark.clearContext                             avgt    3  3684.772 ±  2865.683  ms/op
QueryWriteBenchmark.clearContextReadCommitted                avgt    3  4129.391 ±  7993.073  ms/op
QueryWriteBenchmark.clearReadCommitted                       avgt    3  4586.808 ±   473.664  ms/op
QueryWriteBenchmark.removeByQuery                            avgt    3   731.911 ±   515.657  ms/op
QueryWriteBenchmark.removeByQueryReadCommitted               avgt    3  1125.343 ±  3172.579  ms/op
QueryWriteBenchmark.simpleUpdateQueryIsolationNone           avgt    3  1113.340 ±  1283.696  ms/op
QueryWriteBenchmark.simpleUpdateQueryIsolationReadCommitted  avgt    3  1070.583 ±   778.378  ms/op

Fixed by https://github.com/eclipse-rdf4j/rdf4j/pull/4897


Contributing

Hey! Awesome project, I am literally in the middle of building something pretty much the same as this - but this is better. I'd love to take my efforts and incorporate them into this project. Are you open to contributions?
Some things I'd love to add immediately

strict mypy
Ensure use of x: Annotated[int, Field(description="...")] results in the description in the json schema (looks like it already does but just needs some tests)
Handle complex inputs like x: list[int], x: list[str] | str | None, x: MyModel - this is actually hard because at least with claude desktop it seems unable to output anything other than an object mapping from string to string/float/number  - so lists/nulls/sub-models end up output as json strings and thus fail validation. I have code that does this that I can contribute, I can see how it would fit into FastMCP without much trouble, just need to rework the use of validate_call
Handle things like x: Annotated[int, Field(1)]\n y: int so like required arg after one with a "default" via pydantic's Field.
Clear docs on logging - since the MCP server runs in the background it's nice to log to a file you can tail, having a nice recipe for this in the docs would be great
Ability to have the server log every request and response so you can watch things as they happen
Remove context items from the generated JSON schema

less critical things

docs on how to test tools/resources/etc with FastMCP
middleware, to inject things into requests/responses. For example, I might like to inject into every response how many characters are in it. Or I might like to transform certain inputs before they're handled for all tools. Possibly overkill
maybe dependency injection. Handy for testing (better typing than overriding env vars), handy in cases where various args need to validate things against some common state. Possibly overkill

@jurasofish that all sounds awesome! Would welcome contributions.
I actually didn’t look closely enough to realize that the input spec was so limited and would love to expand it. ControlFlow may have some helpful code, though it doesn’t have the issue of non-structured inputs.


create static maps for caches imported from gpx files

Static maps are created according to settings during import for every cache that succeed.

During the import? I would not recomend to to that. Import GPX. Then add option to download static images for caches in list. Import might take too much time right now.

I get you right that you would prefer a dialog after the import is done?
(when static maps setting are on) That should be no problem.
Should static maps also be imported if not all caches can be imported?

As far as I remember there was a discussion about a feature freeze starting in February 2012.
My personal opinion: If the changes are major I suggest to wait until other problems (e.g. loogbook) are solved. If this is for sure disjunct with other changes then it should be no problem after there is a conclusion on the way to do this.

However I will look for a solution after all caches are imported from gpx.

I think it is feasible to start without the user asking, as she has already consented to do this through the setting. Anyway a cancelable progress is mandatory IMHO

Is there a possibilty to remove this pull request?
I guess discussion can flow on the related issue page. I think I'll have to do some refactoring and wait for some refactorings before adding this feature with progress or other dialog. To do so I want to reset and start over after discussing.

I think I can just close it but - as I am quite new here - I don't know exactly if this is what you want.
I will give it a try and wait for the punishment if the method was wrong ;-)


why everybody work like a dinosaur ? no ES6/ES7

everybody is working for very old node versions? just a few packages like create-react-app create a nice skeleton to work with modern javascript.
I've got pain on the eyes when i see 'ar, require ,etc,  and i feel like a dionsaur,
I came from php world the big dinosaur , but really feel same on the node packages world
Is for compatibility maintain all in old javascript?

Hi @webmobiles there is currently a pull request with a user working to add this support. You're welcome to help out!

yes, i'd like to help, how to start ?

Probably comment on that pull request to ask the author how you can help.


Implement secrets management solution

You could get rid of all your current managed secrets by moving to Azure SQL DB and using Managed Identity


Fix typo in the README.md

One of the arguments of dataSource.titleForFooterInSection, indexPath is not correct.
index is right and also used in closure.

@432daiki Exactly, Thank you! 💯


⚠ Secret Website 3 has degraded performance

In 9724f62, Secret Website 3 ($SECRET_WEBSITE_3) experienced degraded performance:

HTTP code: 200
Response time: 3279 ms

Resolved: Secret Website 3 performance has improved in a5b772c.


Parallel request processing

I've noticed the following in my testing with RequestResponse:
1. Server responds with mono.Just
// server code
Acceptor(func(setup payload.SetupPayload, sendingSocket rsocket.CloseableRSocket) (rsocket.RSocket, error) {
	return rsocket.NewAbstractSocket(rsocket.RequestResponse(func(request payload.Payload) mono.Mono {
                time.Sleep(time.Second)
		return mono.Just(payload.NewString("data", "metadata"))
	})), nil
}).

Single client connection, multiple requests:  requests are processed in series
Multiple client connection, single request per client: requests are processed in parallel

2. Server responds with mono.Create
// server code
Acceptor(func(setup payload.SetupPayload, sendingSocket rsocket.CloseableRSocket) (rsocket.RSocket, error) {
	return rsocket.NewAbstractSocket(rsocket.RequestResponse(func(request payload.Payload) mono.Mono {
		return mono.Create(func(ctx context.Context, s mono.Sink) {
			time.Sleep(time.Second)
			s.Success(payload.NewString("data", "metadata"))
		})
	})), nil
}).

Single client connection, multiple requests:  requests are processed in parallel
Multiple client connection, single request per client: requests are processed in parallel

Is this by the rsocket protocol specification (could not find any reference)? Or was this a design choice or perhaps it was a non-intentional feature? In any case, will this functionality persist in v1?

Thanks for report!
I think that because time.Sleep is outside the return statement in case 1.

So, this is correct functionally of the above examples and will not change?

The handler which registered by rsocket.RequestResponse will work in event-loop.  So a long-time handler will block the main loop.
I can change something to make it dispatch in parallel, but it maybe cause other problems or reduce performance. I need do some testing before starting it.
The best way is wrapping your codes in Mono just like example 2 because Mono is lazy, don't worry about blocking problem.
In addition, the same problem will happen in Java SDK. Think codes below, it will also work in series.
    RSocketFactory.receive()
        .acceptor(
            (setup, sendingSocket) ->
                Mono.just(
                    new AbstractRSocket() {
                      @Override
                      public Mono<Payload> requestResponse(Payload payload) {
                        try {
                          TimeUnit.SECONDS.sleep(1);
                        } catch (InterruptedException e) {
                          // ignore
                        }
                        log.info("current thread: {}", Thread.currentThread().getName());
                        return Mono.just(DefaultPayload.create("foobar"));
                      }
                    }))
        .transport(TcpServerTransport.create(7878))
        .start()
        .block()
        .onClose()
        .block();

// Requests concurrently, you can see it works in serial from logs.
// 17:22:01.511 [reactor-tcp-nio-2] INFO  com.example.rsdemo.DecTest - current thread: reactor-tcp-nio-2
// 17:22:02.530 [reactor-tcp-nio-2] INFO  com.example.rsdemo.DecTest - current thread: reactor-tcp-nio-2
// 17:22:03.532 [reactor-tcp-nio-2] INFO  com.example.rsdemo.DecTest - current thread: reactor-tcp-nio-2
// 17:22:04.534 [reactor-tcp-nio-2] INFO  com.example.rsdemo.DecTest - current thread: reactor-tcp-nio-2
// 17:22:05.539 [reactor-tcp-nio-2] INFO  com.example.rsdemo.DecTest - current thread: reactor-tcp-nio-2

If you want to work in parallel, you need return like this:
return Mono.delay(Duration.ofSeconds(1)).map(ignore -> payload);

I think there are some use cases for per client sequential execution. For example, to force a client to wait for time consuming request to complete before sending another one, unbeknownst to client who fired multiple requests simultaneously.
On that note, will subsequent requests timeout, be dropped or be affected in any way if the first request execution is, for example, infinite?

	rsocket.RequestResponse(func(msg payload.Payload) mono.Mono {
		// ---->
		// EVENT-LOOP: DO NOT block here
		// <----
		return yourMono
	})

	rsocket.RequestResponse(func(msg payload.Payload) mono.Mono {
		// ---->
		// long-time processing, move into mono creating.
		// <----
		return mono.Create(func(ctx context.Context, sink mono.Sink) {
			// try processing here.
			sink.Success(result)
		})
	})

Hmm... It depends on your code. I kown it is confusing. 😭
I mean if you want to sleep and parallel, you should not block the event-loop, so example 2 is the right solution.
Remember that you should never block event-loop, it doesn't like http response handler. Mono is lazy means that nothing really happend before subscribe it.
	rsocket.RequestResponse(func(msg payload.Payload) mono.Mono {
		// ---->
		// EVENT-LOOP: DO NOT block here
		// <----
		return yourMono
	})

	rsocket.RequestResponse(func(msg payload.Payload) mono.Mono {
		// ---->
		// long-time processing, move into mono creating.
		// <----
		return mono.Create(func(ctx context.Context, sink mono.Sink) {
			// try processing here.
			sink.Success(result)
		})
	})

The sleep was just to simulate a comprehensive task. Here is one real example. I have a service ping that scans the network for online devices. That scan takes a while, depending on the ip range. Because it is a demanding task, I would like to prevent a a single client from calling my service before the his current request has completed. Since I have a 0-trust policy between services, it must be on the ping service side.
This per client sequential request processing feature would fit nicely to solve this issue.

Try this ?

func Ping() {
// take a while
}

...

return mono.Create(func(ctx context.Context, sink mono.Sink) {
	YourPing()
	sink.Success(result)
})

Or you can use channel:
	rsocket.RequestResponse(func(msg payload.Payload) mono.Mono {
		chPayload := make(chan payload.Payload)
		chErr := make(chan error)

		go func() {
			// Invoke ping here
			// ...

			// if success
			chPayload <- payload.NewString("ping ok", "")
			// if failed
			// chErr <- errors.New("your error")
		}()

		return mono.CreateFromChannel(chPayload, chErr)
	})

Hope it helps you! 😃

With that all the pings are executed at the same time, which is not a desired outcome.
Check this out. If you run the code bellow, both clients will send 10 requests for ping and all 10 requests will be executed at the same time.
Now, if you uncomment the code bellow executes sequential per client, it will execute 1 request per client at the same time. This is a desired outcome.
package main

import (
	"context"
	"fmt"
	"sync"
	"time"

	"github.com/rsocket/rsocket-go"
	"github.com/rsocket/rsocket-go/payload"
	"github.com/rsocket/rsocket-go/rx"
	"github.com/rsocket/rsocket-go/rx/mono"
)

const transportString = "tcp://<IP_ADDRESS>:7878"
const number = 13

func main() {

	readyCh := make(chan struct{})

	// start a server in a go routine
	go server(readyCh)

	// wait for the server to be ready
	<-readyCh

	// call the client

	wg := sync.WaitGroup{}
	// create 2 clients
	for i := 0; i < 2; i++ {
		wg.Add(1)
		go client(i, wg.Done)
	}

	wg.Wait()
}

func server(readyCh chan struct{}) {

	err := rsocket.Receive().
		OnStart(func() {
			close(readyCh)
		}).
		Acceptor(func(setup payload.SetupPayload, sendingSocket rsocket.CloseableRSocket) (rsocket.RSocket, error) {
			return rsocket.NewAbstractSocket(rsocket.RequestResponse(func(request payload.Payload) mono.Mono {
                                // executes sequential per client
				// fmt.Printf("Client: %v, Request: %v\n", request.Data()[0], request.Data()[1])
				// ping()
				// return mono.Just(payload.NewString("ping ok", ""))

                                // executes all request in parallel
				return mono.Create(func(ctx context.Context, s mono.Sink) {
					fmt.Printf("Client: %v, Request: %v\n", request.Data()[0], request.Data()[1])
					ping()
					s.Success(payload.NewString("ping ok", ""))
				})
			})), nil
		}).
		Transport(transportString).
		Serve(context.Background())

	panic(err)
}

func client(id int, done func()) {
	// Start a client connection
	client, err := rsocket.Connect().Transport(transportString).Start(context.Background())
	if err != nil {
		panic(err)
	}
	defer client.Close()

	// create a wait group so that the function does not return until the stream completes
	wg := sync.WaitGroup{}

	for i := 0; i < 10; i++ {
		wg.Add(1)
		reqN := i
		f := client.RequestResponse(payload.New([]byte{byte(id), byte(i)}, []byte{}))
		f.DoOnSuccess(func(input payload.Payload) {
			fmt.Printf("Client: %v, Request: %v %v\n", id, reqN, input.DataUTF8())
		}).DoOnError(func(err error) {
			fmt.Println(err)
		}).DoFinally(func(s rx.SignalType) {
			wg.Done()
		}).Subscribe(context.Background())
	}

	wg.Wait()
	done()
}

func ping() {
	// scanning network
	// simulating with Sleep
	time.Sleep(time.Second)
}

Since you don't recommend the use of blocking event loop, what are my other options to achieve the desired outcome? The outcome being, one request per client at the same time, no parallel execution.

Hmm... Maybe you can implement a queue by yourself. Or try using RequestStream instead.

Another way is using single scheduler. Just like this draft:
// create a global single scheduler
var mySche = scheduler.NewSingle()

// change you mono
return mono.Create(...).SubscribeOn(mySche)

Scheduling does work, but I have to have one scheduler per client. Each client has to send and ID in the setup payload so that the server can identify client instance. That, again, requires the client to be trusted.
return rsocket.NewAbstractSocket(rsocket.RequestResponse(func(request payload.Payload) mono.Mono {

	var mySch scheduler.Scheduler

	if sch, ok := schedulerMap[setup.Data()[0]]; ok {
		mySch = sch
	} else {
		mySch = scheduler.NewSingle(1)
		schedulerMap[setup.Data()[0]] = mySch
	}

	return mono.Create(func(ctx context.Context, s mono.Sink) {
		fmt.Printf("Client: %v, Request: %v\n", request.Data()[0], request.Data()[1])
		ping()
		s.Success(payload.NewString("ping ok", ""))
	}).SubscribeOn(mySch)

})), nil

Is there anything internally that can be exposed to the user that identifies the client? If it does maybe we can expand CloseableRSocket interface to include, for example, an .ID() function to get the unique ID of the server socket?

No, there's no .ID() method. But it's easy to make a map to store it when a connection setup.

Thank you for all of the responses.
To conclude:

RequestResponse is called in an event-loop and will block it until the RequestResponse function has completed.
It is recommended, in most cases, to return a lazy mono returned by mono.Create, especially for the time intensive tasks
To achieve per client sequential request execution, the recommended way is to implement custom scheduler or use one jjeffcaii/reactor-go/scheduler per client like in the example bellow

rsocket.Receive().
OnStart(func() {
	close(readyCh)
}).
Acceptor(func(setup payload.SetupPayload, sendingSocket rsocket.CloseableRSocket) (rsocket.RSocket, error) {

	mySch := scheduler.NewSingle(1)

	return rsocket.NewAbstractSocket(rsocket.RequestResponse(func(request payload.Payload) mono.Mono {
		return mono.Create(func(ctx context.Context, s mono.Sink) {
			fmt.Printf("Client: %v, Request: %v\n", request.Data()[0], request.Data()[1])
			ping()
			s.Success(payload.NewString("ping ok", ""))
		}).SubscribeOn(mySch)
	})), nil

}).
Transport(transportString).
Serve(context.Background())

If you agree with the conclusions, we can close this issue.

Yes! That's a good solution. It will accept non-blocking requests in parallel and create a single worker for each connection which consume/process each request one by one. Well, remember close your scheduler when connection closed. (add a close hook) 👍
		mySch := scheduler.NewSingle(1)
		sendingSocket.OnClose(func(_ error) {
			mySch.Close()
		})
		return ...


(RARE) Conduit tessalator crash

if conduits are placed down too quick on occasion a tessalator crash will occur and force you to delete your world as your mc will crash every time you open that world after inducing the error in that world.
refer to #2520 as it is similar except in this case it does this with conduits

closed; I think this is just some MC/java derps that happen and are not on any mod's end

Again - try without Optifine.

it stopped so..... yeah.... its just happens on occasion if I place the conduits too fast other than that its fine


[MODFISTO-206] Changed calculation for EncumbranceRestrictionService.getBudgetRemainingAmount()

Purpose
MODFISTO-206
Approach

Changed calculation for EncumbranceRestrictionService.getBudgetRemainingAmount(), removing "-(allocated - (unavailable + available))" from the result.
Clarified calculation using variables defined in MODFISTO-206.
Updated PaymentCreditRestrictionService and PendingPaymentRestrictionService for consistency, but without changing the calculation.
Improved the related test in PendingPaymentRestrictionServiceTest.
Added EncumbranceRestrictionServiceTest and PaymentCreditRestrictionServiceTest, but only testing the related method.

@folio-org/acquisitions
Pre-Merge Checklist
Before merging this PR, please go through the following list and take appropriate actions.

Does this PR meet or exceed the expected quality standards?

[x] Code coverage on new code is 80% or greater
[x] Duplications on new code is 3% or less
[x] There are no major code smells or security issues

Does this introduce breaking changes?

[ ] Were any API paths or methods changed, added or removed?
[ ] Were there any schema changes?
[ ] Did any of the interface versions change?
[ ] Were permissions changed, added, or removed?
[ ] Are there new interface dependencies?
[x] There are no breaking changes in this PR.

If there are breaking changes, please STOP and consider the following:

What other modules will these changes impact?
Do JIRAs exist to update the impacted modules?

[ ] If not, please create them
[ ] Do they contain the appropriate level of detail?  Which endpoints/schemas changed, etc.
[ ] Do they have all they appropriate links to blocked/related issues?

Are the JIRAs under active development?

[ ] If not, contact the project's PO and make sure they're aware of the urgency.

Do PRs exist for these changes?

[ ] If so, have they been approved?

Ideally all of the PRs involved in breaking changes would be merged in the same day to avoid breaking the folio-testing environment.  Communication is paramount if that is to be achieved, especially as the number of intermodule and inter-team dependencies increase.
While it's helpful for reviewers to help identify potential problems, ensuring that it's safe to merge is ultimately the responsibility of the PR assignee.


Switch to links api

As I see we are using stories API to fetch data from storyblok. Doesn't it make sense to switch to links API instead as mentioned here? https://www.storyblok.com/tp/how-to-generate-sitemap-headless-cms?_ampify=1

Hey, I have checked them already. Links don't have published time, therefore we have no data to generate lastmod node.


Working with latest Ballerina version in IDEA

ballerina version
jBallerina 1.2.4
Language specification 2020R1
Update Tool 0.8.8
but inside IDEA it is still autodetecting 1.0.0? as I am aware strand notation is only available for later versions ?
Mac OS: Catalina 10.15.5

@scheung38
I tried the above scenario locally and IDEA was able to Auto-detect Ballerina Home successfully.

Tested Ballerina version:
jBallerina 1.2.4
Language specification 2020R1
Update Tool 0.8.8

Tested Mac OS:
Mac OS High Sierra
10.13.6

Can you please try it with the latest Ballerina distribution and see whether you are getting the same error again?


Fix UI issue with unused var

lastFetched was used to visually show which link was previously
clicked on. Didn't seem to work since when we switch from file view to
directory view, we always send out a new fetch request, so lastFetched
keeps getting cleared
it's best to just remove it since it has no real usage

pr-link: Alluxio/alluxio#9510
change-id: cid-f2f749ede019f89908da3310ea9598932c835708

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/4676/
Test PASSed.

@calvinjia PTAL, thanks

alluxio-bot, merge this please.


Code Quality: Optimizations

Resolved / Related Issues
Items resolved / related issues by this PR.

Related #4180

Comments
I'm trying to add some minor tweaks that should help us improve the overall performance. Please do not merge
Details

Added StringBuilder where strings are concatenated inside loops
String methods (Contains, IndexOf, StartsWith) now search for chars and not strings, this speeds up the code
Removed some code branches that could have been avoided

Validation
How did you test these changes?

[x] Built and ran the app

What's the status on this pull request?

I'll fix code indentation and then I'll set it as Ready for review

@ferrariofilippo can you resolve the merge conflicts?


hairline crack rendering

rendersvg SilversmithBMP2SVGaccelerated-i-o.svg silver.png -w=3000
there should be any hair-line-cracks

source https://commons.wikimedia.org/wiki/File:Silversmith_BMP2SVG_accelerated-i-o.svg
author DancingPhilosopher
license https://creativecommons.org/licenses/by-sa/3.0/deed.de

Can you explain what is wrong?

There should not be any transparent spaces beteen pixels

Why not? Other applications produce them too.

Why not? Other applications produce them too.

Because there is zero space between the pixels read the file in an texteditor (4.4MB):
view-source:https://upload.wikimedia.org/wikipedia/commons/5/52/Silversmith_BMP2SVG_accelerated-i-o.svg

Because there is zero space between the pixels

This is not how SVG works. Due to antialisaing, floats rounding and scaling it can produce whatever it wants.
Anyway, it's not a resvg bug, since this behavior depends on a 2D graphic library itself.

Why not? Other applications produce them too.

According to https://gitlab.com/inkscape/inkscape/issues/928#note_279440484 Adobe Illustrator does not produce them.

Well, that's the point. The result depends on a rendering library. This out of scope of resvg.


Removing exmaple plugin

@blueorangutan package

@davidjumani a Jenkins job has been kicked to build primate packages. I'll keep you posted as I make progress.

Packaging result: :heavy_check_mark:centos :heavy_check_mark:debian :heavy_check_mark:archive.
QA: http://primate-qa.cloudstack.cloud:8080/client/pr/576 (JID-3081)

@blueorangutan package

@davidjumani a Jenkins job has been kicked to build primate packages. I'll keep you posted as I make progress.


Error:  CopyWith.call has fewer named arguments than those of overridden method

Full error message (with some unimportant details redacted):
Error: The method 'InvalidDataSourceRecordCopyWith.call' has fewer named arguments than those of overridden method 'AppErrorCopyWith.call'.
  $R call({covariant InvalidDataSourceInfo? fields});
     ^
Context: This is the overridden method ('call').
  $R call({String? type, Record? fields});

This is occurring when a subclass doesn't expose all of the named parameters of its superclass in its constructor:
app_error.dart
import 'package:dart_mappable/dart_mappable.dart';
import 'package:recase/recase.dart';

part 'app_error.mapper.dart';

@MappableClass()
class AppError with AppErrorMappable implements Exception {
  late final String type;
  final Record? fields;

  AppError({
    String? type,
    this.fields,
  }) {
    this.type = ReCase(type ?? runtimeType.toString()).paramCase;
  }
}

invalid_data_source_record.dart
import 'package:dart_mappable/dart_mappable.dart';

import 'app_error.dart';

part 'invalid_data_source_record.mapper.dart';

@MappableRecord()
typedef InvalidDataSourceInfo = ({
  int row,
  String message,
});

@MappableClass()
class InvalidDataSourceRecord extends AppError
    with InvalidDataSourceRecordMappable {
  InvalidDataSourceRecord({
    required InvalidDataSourceInfo info,
  }) : super(
          fields: info,
        );
}

I can fix it by adding String? type as a named parameter to the InvalidDataSourceRecord constructor, but I do not want to expose that field (yes, I can just throw it away/disregard it, but it's clunky).
Using dart_mappable and dart_mappable_builder 4.0.0-dev0 (also happens on 3.1.3) with Dart version 3.0.6

This behavior is a bit more widespread than just copyWith.  For example, if I omit the String? type from the InvalidDataSourceRecord constructor and run a .toJson() on an instantiation of the class the type field is missing from the JSON payload.  Adding the stubbed field back to the constructor populates the field in the JSON.

After a bit more experimentation and in light of my other reported issue here I think this is at least partially due to dart_mappable_builder not detecting these classes as being part of a library (am I doing something wrong with defining my library?).  If I explicitly includeSubClasses: [InvalidDataSourceRecord] in AppError it does correct the copyWith issue, however the toJson issue remains.  I have to stub out the type field in the subclass constructor to have it included in the JSON results (same result with toMap as well).

Thanks for your issues, I will try to fix them next week.
It may be because the builder is not correctly handling the 'implements Exception'.

Thank you, opened up a couple more related to MappableField as well.
That's my fault, I'll edit my original post.  The behavior here is the same even with implements Exception removed.  The crux of two of my issues does seem to be dart_mappable not seeing my MappableClasses as part of a common library.  I likely am missing something there.

If I explicitly includeSubClasses: [InvalidDataSourceRecord] in AppError it does correct the copyWith issue, however the toJson issue remains.

Yes this is required, since the classes are defined in different libraries.
I will check the toJson issue.


reduce bootstrapping, set better clock error

add LMIC_setClockError() value that is much more lax
prune the readme header and add a helium header
remove TTN-specific stuff
explain the three config values
hardcode the DEVEUI to reduce out-of-box configuration
add an EOF newline

Test and works well! Thanks for the fix


Paul's latest Fad Weds 2:30

Value: $0.00Closes: Tuesday, April 10, 2018Location: Victoria In-person work NOT requiredOpportunity DescriptionIt is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like).Acceptance CriteriaHow to ApplyGo to the Opportunity Page, click the Apply button above and submit your proposal by 16:00 PST on Tuesday, April 10, 2018.We plan to assign this opportunity by Monday, April 30, 2018 with work to start on Wednesday, April 11, 2018.Proposal Evaluation Criteria

This opportunity has been assigned


Meta tags

We need to add meta tags on our website for Search Engine Optimization

Just confirming if it is for the community site or for both community and pycon site?


Capture additional deployment documentation

@samuelli I'm going to start capturing some of the offline and ticket conversations around deployment to various providers beyond the GAE environment.
Would you prefer that this be in the readme or should I go about capturing this in the wiki or some other spot?

Do you still have the additional docs? I'd love to see them as part of the README

I have more than when I initially talked to Sam about it. :-)
When I get off the road late next week, I'll clearn up some docs and start making PR's.

Awesome, thanks Justin!

Hey Justin, once #316 is merged, we have a bit more infrastructure for this. I'd love to use this issue to fill in docs/deploy.md which should become part of the new Github Pages docs for Rendertron :)
Let me know if you have something you can either dump into this issue or wanna take this one yourself. It's Hacktoberfest so putting a little more details in here would make this a really good starter issue for someone who's new to OSS (or a good PR for you, if you want that T-Shirt ;))


UnexpectedValueException under php 8.1

Describe the bug
I'm trying to use the generator under PHP8.1. As I haven't found any specific information about PHP8 in the documentation, I changed the wget call to:
wget https://phar.wsdltophp.com/wsdltophp-php81.phar

The file is found, but when I want to execute the file, even without parameters, I get the following error:
PHP Fatal error:  Uncaught UnexpectedValueException: DirectoryIterator::__construct(phar:///usr/local/bin/wsdltophp/vendor/symfony/console/Command/../Resources/): Failed to open directory: operation failed in phar:///usr/local/bin/wsdltophp/vendor/symfony/console/Command/DumpCompletionCommand.php:152
Stack trace:
#0 phar:///usr/local/bin/wsdltophp/vendor/symfony/console/Command/DumpCompletionCommand.php(152): DirectoryIterator->__construct()
#1 phar:///usr/local/bin/wsdltophp/vendor/symfony/console/Command/DumpCompletionCommand.php(55): Symfony\Component\Console\Command\DumpCompletionCommand->getSupportedShells()
#2 phar:///usr/local/bin/wsdltophp/vendor/symfony/console/Command/Command.php(137): Symfony\Component\Console\Command\DumpCompletionCommand->configure()
#3 phar:///usr/local/bin/wsdltophp/vendor/symfony/console/Application.php(1136): Symfony\Component\Console\Command\Command->__construct()
#4 phar:///usr/local/bin/wsdltophp/vendor/symfony/console/Application.php(1312): Symfony\Component\Console\Application->getDefaultCommands()
#5 phar:///usr/local/bin/wsdltophp/vendor/symfony/console/Application.php(536): Symfony\Component\Console\Application->init()
#6 phar:///usr/local/bin/wsdltophp/console(11): Symfony\Component\Console\Application->add()
#7 /usr/local/bin/wsdltophp(10): require('...')
#8 {main}
  thrown in phar:///usr/local/bin/wsdltophp/vendor/symfony/console/Command/DumpCompletionCommand.php on line 152

I unpacked the phar archive and it looks like it’s version 4.1.10. But when I download version 4.1.10 from the Github Releases, I don’t get any errors. Are the PHP7 version or the latest release version 4.1.11 compatible with PHP 8.1 and 8.2?
To Reproduce

Download the phar for PHP 8.1:

$ wget https://phar.wsdltophp.com/wsdltophp-php81.phar

Make file executable:

$ chmod +x wsdltophp-php81.phar

Move file:

$ mv wsdltophp-php81.phar /usr/local/bin/wsdltophp

Execute:

wsdltophp

Expected behavior
Generation of the files without errors.

Hi,
The symfony console command requires files that were not included in the phar file, which I just fixed.
You should be able to use the new phar now,
Let me know then

fixed


Error loading command module 'storage'

$ az
Error loading command module 'storage'
init() got multiple values for keyword argument 'default_completer'
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/azure/cli/main.py", line 35, in main
cmd_result = APPLICATION.execute(args)
File "/usr/lib/python3/dist-packages/azure/cli/core/application.py", line 84, in execute
self.parser.load_command_table(command_table)
File "/usr/lib/python3/dist-packages/azure/cli/core/parser.py", line 91, in load_command_table
enable_autocomplete(self)
File "/usr/lib/python3/dist-packages/azure/cli/core/parser.py", line 34, in enable_autocomplete
argcomplete.autocomplete(parser, validator=lambda c, p: c.lower().startswith(p.lower()))
File "/usr/lib/python3/dist-packages/argcomplete/init.py", line 166, in call
default_completer=default_completer)
File "/usr/lib/python3/dist-packages/azure/cli/core/parser.py", line 30, in init
**kwargs)
TypeError: init() got multiple values for keyword argument 'default_completer'
$ az --version
Python (Linux) 3.6.3 (default, Oct  3 2017, 21:45:48)
[GCC 7.2.0]
$ cat /etc/os-release
NAME="Ubuntu"
VERSION="17.10 (Artful Aardvark)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 17.10"
VERSION_ID="17.10"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=artful
UBUNTU_CODENAME=artful

Environment summary
Install Method (e.g. pip, interactive script, apt-get, Docker, MSI, edge build) / CLI version (az --version) / OS version / Shell Type (e.g. bash, cmd.exe, Bash on Windows)

$ dpkg -l python-azure-storage
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                              Version               Architecture          Description
+++-=================================-=====================-=====================-=======================================================================
ii  python-azure-storage              0.33.0-1              all                   Microsoft Azure Storage Library for Python 2.x
$ az --debug
Installed command modules ['component', 'configure', 'feedback', 'iot', 'keyvault', 'network', 'profile', 'redis', 'resource', 'role', 'storage', 'taskhelp', 'vm', 'webapp']
Loading command tables from all installed modules.
Registered application event handler 'CommandTable.Loaded' at <function add_id_parameters at 0x7fbefbc8ed90>
Error loading command module 'storage'
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/azure/cli/core/commands/init.py", line 196, in get_command_table
import_module('azure.cli.command_modules.' + mod)
File "/usr/lib/python3.6/importlib/init.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "", line 994, in _gcd_import
File "", line 971, in _find_and_load
File "", line 955, in _find_and_load_unlocked
File "", line 665, in _load_unlocked
File "", line 678, in exec_module
File "", line 219, in _call_with_frames_removed
File "/usr/lib/python3/dist-packages/azure/cli/command_modules/storage/init.py", line 8, in
import azure.cli.command_modules.storage._params
File "/usr/lib/python3/dist-packages/azure/cli/command_modules/storage/_params.py", line 18, in
from azure.storage.models import AccountPermissions
ModuleNotFoundError: No module named 'azure.storage'

$ sudo apt install python-pip
$ pip install storage
Collecting storage
Collecting paramiko>=1.8.0 (from storage)
Using cached https://files.pythonhosted.org/packages/3e/db/cb7b6656e0e7387637ce850689084dc0b94b44df31cc52e5fc5c2c4fd2c1/paramiko-2.4.1-py2.py3-none-any.whl
Collecting cryptography>=1.5 (from paramiko>=1.8.0->storage)
Using cached https://files.pythonhosted.org/packages/dd/c2/3a5bfefb25690725824ade71e6b65449f0a9f4b29702cce10560f786ebf6/cryptography-2.2.2-cp27-cp27mu-manylinux1_x86_64.whl
Collecting pynacl>=1.0.1 (from paramiko>=1.8.0->storage)
Using cached https://files.pythonhosted.org/packages/80/3d/d709b9fbd69e21dd3a4d34eb690c5484094699e03b7447bc7eb173cfd7b6/PyNaCl-1.2.1-cp27-cp27mu-manylinux1_x86_64.whl
Collecting pyasn1>=0.1.7 (from paramiko>=1.8.0->storage)
Using cached https://files.pythonhosted.org/packages/ba/fe/02e3e2ee243966b143657fb8bd6bc97595841163b6d8c26820944acaec4d/pyasn1-0.4.2-py2.py3-none-any.whl
Collecting bcrypt>=3.1.3 (from paramiko>=1.8.0->storage)
Using cached https://files.pythonhosted.org/packages/2e/5a/2abeae20ce294fe6bf63da0e0b5a885c788e1360bbd124edcc0429678a59/bcrypt-3.1.4-cp27-cp27mu-manylinux1_x86_64.whl
Collecting cffi>=1.7; platform_python_implementation != "PyPy" (from cryptography>=1.5->paramiko>=1.8.0->storage)
Using cached https://files.pythonhosted.org/packages/14/dd/3e7a1e1280e7d767bd3fa15791759c91ec19058ebe31217fe66f3e9a8c49/cffi-1.11.5-cp27-cp27mu-manylinux1_x86_64.whl
Collecting enum34; python_version < "3" (from cryptography>=1.5->paramiko>=1.8.0->storage)
Using cached https://files.pythonhosted.org/packages/c5/db/e56e6b4bbac7c4a06de1c50de6fe1ef3810018ae11732a50f15f62c7d050/enum34-1.1.6-py2-none-any.whl
Collecting idna>=2.1 (from cryptography>=1.5->paramiko>=1.8.0->storage)
Using cached https://files.pythonhosted.org/packages/27/cc/6dd9a3869f15c2edfab863b992838277279ce92663d334df9ecf5106f5c6/idna-2.6-py2.py3-none-any.whl
Collecting asn1crypto>=0.21.0 (from cryptography>=1.5->paramiko>=1.8.0->storage)
Using cached https://files.pythonhosted.org/packages/ea/cd/35485615f45f30a510576f1a56d1e0a7ad7bd8ab5ed7cdc600ef7cd06222/asn1crypto-0.24.0-py2.py3-none-any.whl
Collecting six>=1.4.1 (from cryptography>=1.5->paramiko>=1.8.0->storage)
Using cached https://files.pythonhosted.org/packages/67/4b/141a581104b1f6397bfa78ac9d43d8ad29a7ca43ea90a2d863fe3056e86a/six-1.11.0-py2.py3-none-any.whl
Collecting ipaddress; python_version < "3" (from cryptography>=1.5->paramiko>=1.8.0->storage)
Using cached https://files.pythonhosted.org/packages/fc/d0/7fc3a811e011d4b388be48a0e381db8d990042df54aa4ef4599a31d39853/ipaddress-1.0.22-py2.py3-none-any.whl
Collecting pycparser (from cffi>=1.7; platform_python_implementation != "PyPy"->cryptography>=1.5->paramiko>=1.8.0->storage)
Installing collected packages: pycparser, cffi, enum34, idna, asn1crypto, six, ipaddress, cryptography, pynacl, pyasn1, bcrypt, paramiko, storage
Successfully installed asn1crypto-0.24.0 bcrypt-3.1.4 cffi-1.11.5 cryptography-2.2.2 enum34-1.1.6 idna-2.6 ipaddress-1.0.22 paramiko-2.4.1 pyasn1-0.4.2 pycparser-2.18 pynacl-1.2.1 six-1.11.0 storage-<IP_ADDRESS>
Segmentation fault (core dumped)

@dazdaz Please provide the following information.
Install Method (e.g. pip, interactive script, apt-get, Docker, MSI, edge build) / CLI version (az --version) / OS version / Shell Type (e.g. bash, cmd.exe, Bash on Windows)

That version of the CLI is very old.
Install the latest at https://docs.microsoft.com/en-us/cli/azure/install-azure-cli-apt?view=azure-cli-latest
That should resolve this.

I believe that it's the default Azure CLI which came with Ubuntu 17.10, I had assumed that the latest would be deployed.  Thanks.

Yes we are tracking this at https://github.com/Azure/azure-cli/issues/5480


HDDS-5022. SCM get roles command should provide Ratis Leader/Follower…

… information.
What changes were proposed in this pull request?
"ozone admin scm roles" command currently returns scm role info like this: [scm1:9865, scm2:9865, scm3:9865]. This change is to add: LEADER and FOLLOWER info in the return. The new result from the command is now look like this: [scm3:9865:FOLLOWER, scm2:9865:FOLLOWER, scm1:9865:LEADER]
What is the link to the Apache JIRA
https://issues.apache.org/jira/browse/HDDS-5022
How was this patch tested?
Manually tested locally by creating a SCM HA cluster with 3 SCM nodes and executed command: ozone admin scm roles from one of the SCM node. With this change, the command result was: [scm3:9865:FOLLOWER, scm2:9865:FOLLOWER, scm1:9865:LEADER].
Also manually executed admincli tests under ozonesecure.

LGTM. Thanks @ghuangups for the contribution. Wait for CI.

Failed acceptance test seems unrelated?

get-object --bucket ${BUCKET} --key ${PREFIX}/copyrange/destination /tmp/part-result

${output}
aws s3api --endpoint-url ${ENDPOINT_URL} ${command}

Execute and checkrc
${command}
0
Runs the specified keyword and returns from the enclosing user keyword.

${command}
0

...

...

**
${rc}
${expected_error_code}
Fails if objects are unequal after converting them to integers.
Argument types are:
255 != 0

**

Returning from the enclosing user keyword.

255 != 0

+1. Thanks @ghuangups for the contribution. I will merge it.

Thank you so much, @GlenGeng @avijayanhwx


[Solved] One command stack up with others.

The bot works fine, but the 'inv' command executes above or under the other commands
when they're executed.
This is (a part of) my code without the tabs in front of the cases:
birih = but I removed it here (for my privacy).

case 'brname':
    bot.sendMessage({
        to: channelID,
        message: '`<my name on Fortnite, birih>`. That is correct, eh, <my discord id, birih>?'
    });

// My custom !ping.
case 'moffa':
    bot.sendMessage({
        to: channelID,
        message: 'MOFFA!'
    });

// Sends invite.
case 'inv':
    bot.sendMessage({
        to: channelID,
        message: 'Try this link: <link to my discord, birih>'
    });

break;

Here's an image.
I am 'hux', and my bot is 'K-3PO'.
As you see, when I execute the two commands that aren't 'inv', I get the command 'inv'
on top (or under) the command I really wanted.
I can't see anything wrong with the code, so I'm open to fixes.
EDIT: I had to put break; in between each case.

How did you fix it? I dont know much JS, and I try to avoid thinking that it is just like java


Support for form requests with both file and text fields

Describe the solution you'd like
Support for text fields in MultiPartParser and an HttpRequest constructor option for multipart forms with both files and text fields.
Additional context
According to the MDN docs, in case of forms with files a multipart request is used, and the rest of the text fields are transmitted with one of the parts in URL encoded format.
As far as I know, the only constructor to create multipart requests is newHttpFormPostRequest, which only takes UploadFiles which are represented by paths on the filesystem, so the only way to post multipart requests with text fields seems to be by manually forming the multipart body, which is a unfortunate since it's tedious and the repo already has logic for it.
I'm not familiar enough with the repo to know what's the best way to implement this, but maybe with another multipart constructor that also takes in a vector of string key-value pairs?

@an-tao I was considering working on this, but since I'm not very familiar with the repo, what do you think of the following implementation?
Create a newHttpFormRequest function in HttpRequest that takes in two arguments, a Json::Value for simple key values and a vector<UploadFile> (renaming the existing one as newHttpUrlEncodedFormRequest). It will be responsible for abstracting all form requests, choosing between application/x-www-form-urlencoded and multipart/form-data based on whether vector<UploadFile> has any elements or not.


LocalLifecycleOwner not declared on Desktop

Describe the bug

Create new Compose Multiplatform project, click "Multiple Platforms", JDK 15
In android/src/main/java/com/example/android/MainActivity.kt insert:
import androidx.compose.ui.platform.LocalLifecycleOwner --- no problem
In desktop/src/jvmMain/kotlin/Main.kt insert:
import androidx.compose.ui.platform.LocalLifecycleOwner --- not found

Affected platforms

Desktop

Versions

Kotlin version*: 223-1.8.0-release-345-IJ8836.41
Compose Multiplatform version*: 1.4.0
OS version(s)* (required for Desktop and iOS issues): OpenSuSE Linux Leap 15.2
OS architecture (x86 or arm64): x64
JDK (for desktop issues): 15

Expected behavior
LocalLifecycleOwner should be declared on Desktop
Additional context
I would like to use this code:
@Composable
fun ComposableLifecycle(
    lifeCycleOwner: LifecycleOwner = LocalLifecycleOwner.current,
    onEvent: (LifecycleOwner, Lifecycle.Event) -> Unit
) {
    DisposableEffect(lifeCycleOwner) {
        val observer = LifecycleEventObserver { source, event ->
            onEvent(source, event)
        }
        lifeCycleOwner.lifecycle.addObserver(observer)
        onDispose {
            lifeCycleOwner.lifecycle.removeObserver(observer)
        }
    }
}

The question here is how to determine onCreate/onStart/onResume/ and the counterparts onPause/onStop/onDestroy in a Desktop App?
If the lifecycle was simpler, like onCreate/onStart/onStop/onDestroy
Then you could use the WindowState.isMinimized to track started/stopped. But the original Android lifecycle has too many events, so it makes it harder to port it into other platforms.
You can manually create a lifecycle based on the window isMinimized state and provide it as a CompositionLocal and use it as in your code.

I could do that manually in my app. Also I would like to make a PR so that the declaration is no longer missing on Desktop, but at the moment, I don't have the experience to do that.

Like I said, I believe it is a subject that will require some consensus. It is right that Android APIs are really well designed but some of them are a bit overloaded and centered around a mobile device with low memory restrictions. It is hard to find common ground in order to be able to come up with an interface that pleases all the platforms.
I do believe the Lifecycle API should be ported to the common compose API but it has to be sliced up. For instance, removing onResume/onPause.

I think there is another reason why the LocalLifecycleOwner is not implemented for desktop yet (not known to me though). I don't think that mapping the functions is a problem at all, like I could think of the following mapping:

onCreate -> When the window is executed for the first time
onStart -> When the window is opened (not minimized)
onResume -> When the window is focused (currently selected and in foreground)
onPause -> When the window looses focus (not currently in foreground)
onStop -> When the window is minimized
onDestroy -> When the window is closed

The same behavior applies to Android apps if you think of an app / activity as a window. Additionally, it would also be interesting to include the system tray in the lifecycle states on desktop, if not handled as separate lifecycle owner of course.
However, an interesting and lifecycle-aware implementation provides the MVIKotlin Framework (see Binding and Lifecycle). Maybe using that as a workaround could provide a solution for your code?

Yeah you're right, the focus does map well to resume/pause.
I know iOS UiViewController can be mapped to, not sure about the 'browser'.
Perhaps as you said, the reason might be priorities.

Implemented in https://github.com/JetBrains/compose-multiplatform-core/pull/1198, and available in the latest 1.6.10 dev build

Please check the following ticket on YouTrack for follow-ups to this issue. GitHub issues will be closed in the coming weeks.


Linter Error corrections for Contrast Task

Misc corrections per Linter errors.
https://github.com/KennaSecurity/toolkit/runs/2822866084?check_suite_focus=true

@davidaustinarcher
Cleaned up some linting errors in the Contrast code. Please review if you can to ensure that didn't change what you were doing.
Thanks,
Dbro


Generated bindings for Cairo

The current Cairo bindings are actually mostly "extras" which I've hand-written following the documentation. This is error-prone, tedious, and time-consuming. There should be a way to generate better bindings.
This will almost certainly involve parsing the Cairo C headers to get the necessary information. It's not as simple as using zig translate-c, though, because that will yield raw C bindings which are not compatible with the higher-level GObject-style bindings this project generates.
One attractive idea is parsing the C headers to generate GIR as an intermediate output, then using the same GIR translator as everything else to get to Zig code. This would allow it to integrate seamlessly with the rest of the "real" bindings, and could even be useful to other projects.

For the foreseeable future, I plan to maintain the Cairo bindings by hand. Generating GIR is an appealing idea, but would also take a decent amount of work to implement, and might not be the best fit for the structure of Cairo in general (see https://mail.gnome.org/archives/gtk-list/2017-May/msg00011.html).


[CVP-2252] Add checks for deprecated APIs to midstream pipeline

The OCP 4.9 operator bundles will have to be tested to ensure that they do not use any deprecated apis.  This PR modifieds the validate_operator_bundle role to determine if the bundle being tested supports v4.9 and, if it does, add's a flag to the bundle validation tests to check for the deprecated APIs.

The images used in unit tests have deprecated APIs, so are now failing the tests. We'll need to make sure that we both cover the case where the image fails in the unit tests as well as provide an updated image that has APIs that pass the new validation.

For the positive case we can use the image at quay.io/cvpops/test-operator:test-default-positive-v1 instead the existing outdated one here: https://github.com/redhat-openshift-ecosystem/operator-test-playbooks/blob/master/Dockerfiles/midstream/unit_tests.py#L86

Cannot see negative test-case with some expected failed output for v4.9 deprecated api.

Cannot see negative test-case with some expected failed output for v4.9 deprecated api.

That's because the test cases are covered in the downstream repo.  I'm not sure if I should be linking from an internal repository from GitHub, but the test you're looking for is in OperatorUtilsTest.groovy on line 53

@J0zi @mvalarh can you take a look at the Operator test playbook upstream (otpu) tests / Index from production (pull_request) failure and help us figure out how to get it fixed?

/retest

@14rcole and @dirgim this test can fail now because master branch doesn't have latest changes in upstream-community. We can ignore our tests for now in pull requests to master. I will make PR to fix it

@dirgim please merge this PR (https://github.com/redhat-openshift-ecosystem/operator-test-playbooks/pull/241) and then rerun tests. Thanks

Every one of these tests is failing in the same way:
TASK [parse_operator_bundle : Result of failed task] *****************************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": {
        "changed": false,
        "failed": true,
        "msg": "Required operator bundle image label(s) not found:  com.redhat.openshift.versions"
    }
}

TASK [parse_operator_bundle : Result of failure] *********************************************************************************************************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Ansible playbook while preparing the operator metadata failed"}

This step occurs during the operator bundle extraction stage.  Three of the four failing tests came from images that were changed in this MR, so one of the labels could have been set incorrectly.  The fourth test, test_negative_image_bundle_validation, should not be failing.  It is unmodified in this MR.  I'm continuing to investigate what could be wrong

It's also worth noting that when I run skopeo inspect <image> in the images used in each test, they all have the com.redhat.openshift.versions label set.  Additionally (this is probably irrellevant) most images have the label set to "v4.5"

/retest


executing kustomize build | kubectl apply -f- led to ImagePullBackOff

Hi,
Following the suggestion on slack I took a look to this repository to experiment a bit with the image-automation-controller and, maybe in the future, contribute to this really interesting project.
Once I've cloned the repository I navigated to /config/default folder and I launched the following command:
kustomize build | kubectl apply -f-

Checking the status of the image-automation-controller I saw that is in status ImagePullBackOff.
Looking for the events, I go these ones:
  Normal   Pulled     80s                kubelet            Container image "gcr.io/kubebuilder/kube-rbac-proxy:v0.5.0" already present on machine
  Normal   Created    80s                kubelet            Created container kube-rbac-proxy
  Normal   Started    80s                kubelet            Started container kube-rbac-proxy
  Normal   Pulling    40s (x3 over 80s)  kubelet            Pulling image "fluxcd/image-automation-controller"
  Warning  Failed     39s (x3 over 79s)  kubelet            Failed to pull image "fluxcd/image-automation-controller": rpc error: code = Unknown desc = Error response from daemon: manifest for fluxcd/image-automation-controller:latest not found: manifest unknown: manifest unknown
  Warning  Failed     39s (x3 over 79s)  kubelet            Error: ErrImagePull
  Normal   BackOff    6s (x5 over 78s)   kubelet            Back-off pulling image "fluxcd/image-automation-controller"
  Warning  Failed     6s (x5 over 78s)   kubelet            Error: ImagePullBackOff

After a quick search inside the fluxcd repository I saw that no container is tagged as latest and this is causing the error, the only tag present is: v0.0.1-alpha.1.
This issue can easily be fixed by creating a patch in the the config folder by specifying which container use but since I'm not sure how to do that I opened this issue.

Hi, sorry for the garbled instructions. We're working toward this being part of flux install, but in the meantime, it's a bit janky.
It's worth being able to build the image locally, if you're keen to experiment, since it's moving fast(ish) you may want to get the latest code from time to time. make docker-image will build the image with whichever Docker you're pointed at.
If you're using Docker Desktop or minikube, that's enough to make it available to Kubernetes too.
If you're using Kind, you will need to "side load" it:
kind load docker-image fluxcd/image-automation-controller

If you're hosting Kubernetes some other way, you will have to take other measures to make your locally built image available to it, and that may be a lot more trouble! In which case, you can use one of the published images by (as you suggested) patching the config:
$ mkdir ./config/scratch
$ cp -R config/default/* ./config/scratch
$ (cd config/scratch; kustomize edit set image fluxcd/image-automation-controller=fluxcd/image-automation-controller:v0.0.1-alpha.1)
$ kustomize build ./config/scratch | kubectl apply -f -

(NB the ./config/scratch directory needs to be a sibling to config/default, so that some relative paths in the copied kustomization. yaml work -- if you put it somewhere else, you'll need to fix those up)

The image automation controllers can now be installed with flux, guide here https://toolkit.fluxcd.io/guides/image-update/


fix(ngAnimate): do not alter the provided options data

Prior to this fix the provided options object would be
altered as the animation kicks off due to the underlying
mechanics of ngAnimate. This patch ensures that a
copy of the provided options is used instead. This patch
also works for when $animateCss is used by itself.
Closes #13040

Sorry, I merged this by mistake! :(


Update composer.json

It looks like 5.6 isn't supported anymore.  Should this be updated?

Thanks for this !


Flutter3 cannot build

I've got this message after upgrade flutter to version 3
flutter version 2.10.5 still working
Thanks
e: \AppData\Local\Pub\Cache\hosted\pub.dartlang.org\flutter_callkit_incoming-1.0.2\android\src\main\kotlin\com\hiennv\flutter_callkit_incoming\FlutterCallkitIncomingPlugin.kt: (130, 37): Type mismatch: inferred type is Map<String, Any?>? but Map<String, Any?> was expected
e: \AppData\Local\Pub\Cache\hosted\pub.dartlang.org\flutter_callkit_incoming-1.0.2\android\src\main\kotlin\com\hiennv\flutter_callkit_incoming\FlutterCallkitIncomingPlugin.kt: (142, 37): Type mismatch: inferred type is Map<String, Any?>? but Map<String, Any?> was expected
e: \AppData\Local\Pub\Cache\hosted\pub.dartlang.org\flutter_callkit_incoming-1.0.2\android\src\main\kotlin\com\hiennv\flutter_callkit_incoming\FlutterCallkitIncomingPlugin.kt: (148, 37): Type mismatch: inferred type is Map<String, Any?>? but Map<String, Any?> was expected
e: \AppData\Local\Pub\Cache\hosted\pub.dartlang.org\flutter_callkit_incoming-1.0.2\android\src\main\kotlin\com\hiennv\flutter_callkit_incoming\FlutterCallkitIncomingPlugin.kt: (158, 37): Type mismatch: inferred type is Map<String, Any?>? but Map<String, Any?> was expected
FAILURE: Build failed with an exception.

What went wrong:
Execution failed for task ':flutter_callkit_incoming:compileReleaseKotlin'.

Compilation error. See log for more details

Try:

Run with --stacktrace option to get the stack trace.
Run with --info or --debug option to get more log output.
Run with --scan to get full insights.

Get more help at https://help.gradle.org

BUILD FAILED in 46s
Running Gradle task 'assembleDevRelease'...                        47.7s
Gradle task assembleDevRelease failed with exit code 1

duplicate
#126


gsub() function missing in Lua even when Lua 2.5 manual documents it

I want to convert the text of a tag element into a url path: Firefox add-on -> firefox-add-on.
Using the Lua 2.5 manual, I wrote this transformation: collection_path = gsub(strlower(collection_text), " ", "-")
But, soupault gives an error:
[INFO] Processing widget populate-collection-link on page site/2022/box-sizing.html
[ERROR] Could not process page site/2022/box-sizing.html: Lua code execution failed:
Runtime error: string library does not implement gsub
Stack trace:
`error' fallback (OCaml)
main of dostring('collection_links = HTML.select(page, config["selector"])
loc...') defined in file dostring('collection_links = HTML.select(page, config["selector"])
loc...')

of which the statement of import is: Runtime error: string library does not implement gsub
But Lua 2.5 manual documents it.
Any clue on what's going on?

In case it helps anyone else, I wrote the following function as an alternative that is applicable for my specific use-case:
function make_collection_path(collection_text)
  -- collection_path = gsub(strlower(collection_text), " ", "-")
  local char_idx = 1
  local collection_path = ""
  while char_idx <= strlen(collection_text) do
    local currchar = strlower(strsub(collection_text, char_idx, char_idx))
    if currchar == " " then
      collection_path = collection_path .. "-"
    else
      collection_path = collection_path .. currchar
    end
    char_idx = char_idx + 1
  end
  return collection_path
end

I am still interested in what happened to gsub.

I guess lua-ml does not implement it.

Was gsub in PUC-Rio Lua 2.5?
You can use https://soupault.app/reference-manual/#Regex.replace_all

You can use https://soupault.app/reference-manual/#Regex.replace_all

Thank you!

Was gsub in PUC-Rio Lua 2.5?

Not sure about that. But its documented in the Lua 2.5 reference manual linked to in the soupault reference manual.