Setting up Ecto with App Engine and Google Cloud SQL

Hello! So happy to hear about Elixir being supported on App Engine.
I'm having trouble connecting to my Cloud SQL instance using ecto on App Engine. I'm running into similar problems as these folks. (https://github.com/elixir-ecto/postgrex/issues/355)
The error I'm getting is:
21:03:19.742 [error] Postgrex.Protocol (#PID<0.1369.0>) failed to connect: ** (DBConnection.ConnectionError) tcp connect (/cloudsql/hn-alerts:us-west1:hn-alerts-database:5432): non-existing domain - :nxdomain

My prod ecto config is
config :outlet, Outlet.Repo,
  adapter: Ecto.Adapters.Postgres,
  username: "${DB_USER}",
  password: "${DB_PASS}",
  database: "${DB_NAME}",
  hostname: "${DB_HOST}",
  pool_size: 15

And my app.yaml is
service: outlet

env: flex

runtime: gs://elixir-runtime/elixir.yaml
runtime_config:
    release_app: outlet

env_variables:
  DB_USER: user
  DB_PASS: secretpassword
  DB_NAME: database_name
  DB_HOST: /cloudsql/hn-alerts:us-west1:hn-alerts-database

beta_settings:
  cloud_sql_instances: hn-alerts:us-west1:hn-alerts-database

A tutorial on Ecto + App Engine + Cloud SQL Postgres would be 🙌

I thought I would give you an update on this because I have it working.  You just need the following, using the latest postgrex which supports "socket":
# mix.exs
{:postgrex, "~> 0.13.5"},

# prod.secret.exs, note:

config :api, Api.Repo,
  adapter: Ecto.Adapters.Postgres,
  username: "some-user-name",
  password: "some-pwd",
  database: "some-db-name",
  socket: "/path-to-cloudsql/project-name:region-name:db-instance-name/.s.PGSQL.5432",
  timeout: 7200_000,
  pool_size: 20

@dmin7b5: I'm trying to follow your setup. I have a question:
When you say /path-to-cloudsql/, where do you find that?

@pdgonzalez872 If this is for app engine deployment, use "/cloudsql/project-name:region-name:db-instance-name/.s.PGSQL.5432"

thanks @dazuma

Anybody know why I might get 15:21:54.703 [error] Postgrex.Protocol (#PID<0.1473.0>) failed to connect: ** (DBConnection.ConnectionError) tcp connect (/cloudsql/crypto-identity:us-central1:crypto-identity-db/.s.PGSQL.5432): no such file or directory - :enoent when I try to follow these instructions? I get that error when I run
$ MIX_ENV=prod mix release --env=prod
$ PORT=8080 _build/prod/rel/server/bin/server foreground

My prod.secrets.exs looks like:
config :server, Server.Repo,
  adapter: Ecto.Adapters.Postgres,
  username: System.get_env("DATABASE_USERNAME") || "postgres",
  password: System.get_env("DATABASE_PASSWORD") || "my-awesome-password",
  database: System.get_env("DATABASE") || "server_prod",
  socket: "/cloudsql/crypto-identity:us-central1:crypto-identity-db/.s.PGSQL.5432",
  timeout: 7200_000,
  pool_size: 15

The database I have exists:

And I've tried connecting with gcloud sql connect crypto-identity-db to ensure my IP is whitelisted for local connections.

@paymog A couple of things.
First, the socket path in your config file ("/cloudsql/crypto-identity:us-central1:crypto-identity-db/.s.PGSQL.5432") is intended for the App Engine runtime environment. That is, when your application starts up on App Engine, App Engine will connect to your database and open a socket at that location, so that your application can use it to connect to your cloud sql database. But this means if you try to run your application locally on your workstation, you don't have App Engine running locally to open that socket for you on your local file system. You will need to do so yourself. You can use the the Cloud SQL Proxy for that purpose.
Second, remember that config files are evaluated at compile time. This means, among other things, it will evaluate environment variables (DATABASE_USERNAME, DATABASE_PASSWORD, and DATABASE) at compile time, not at runtime. The Elixir runtime tries to account for this—for example, if you set any env_variables in your app.yaml, it will set them in the build environment when it builds your application release. But it is something to be aware of, depending on how you manage and set your environment variables.

I'm having the same issue as @paymog above. I've set up my database configuration according to all the tutorials / comments, but my GAE app can't connect to my Cloud SQL instance. It's in the same project, so my understanding is that it should just work. But the app can't find the socket file on start up. If I SSH to the VM it looks like the socket directory has been created but there is no actual socket file.
my app.yaml looks like this
env: flex
runtime: gs://elixir-runtime/elixir.yaml
runtime_config:
  release_app: adpq
env_variables:
  POSTGRES_USER: postgres
  POSTGRES_PASSWORD: IjpdBOc6jaq86h7u
  POSTGRES_DATABASE: adpq_production
  POSTGRES_SOCKET_PATH: /cloudsql/my-project:us-central1:my-project-db/.s.PGSQL.5432
beta_settings:
  cloud_sql_instances: my-project:us-central1:my-project-db

and my prod.exs looks like this:
config :adpq, Adpq.Repo,
  adapter: Ecto.Adapters.Postgres,
  username: System.get_env("POSTGRES_USER"),
  password: System.get_env("POSTGRES_PASSWORD"),
  database: System.get_env("POSTGRES_DATABASE"),
  socket: System.get_env("POSTGRES_SOCKET_PATH"),
  timeout: 7200_000,
  pool_size: 10

I've tried it with and without the /.s.PGSQL.5432 because examples seem to vary on that. But in either case I get
[error] Postgrex.Protocol (#PID<0.1451.0>) failed to connect: ** (DBConnection.ConnectionError) tcp connect ( /cloudsql/my-project:us-central1:my-project-db/.s.PGSQL.5432): no such file or directory - :enoent

Ah, a (possibly) relevant discovery. It looks like the socket is being created on one of the two VM instances, but not the other...

That very much should not be happening. Are you certain you're looking inside the application container (not just the VM) and the socket is present in one VM but not the other?

@svoynow ^

Ok, yeah, I wasn't in the app instance. So disregard my last comment
For my next experiment I set max_instances to 1 just to keep it simple.
When I get a shell in the app container I see my app and the cloud proxy containers both running.
I see the socket directory again, but again no socket file.

@svoynow Can you show logs from the sql proxy container? I wonder if there's some permissions issue.
Another thing to try is enable the sqladmin API if it has not been enabled yet. (It has never been completely clear to me whether this API is needed for cloudsql to function.)

@svoynow These are the steps that got everything working for me.

Downloaded the correct version for my Linux distro (64 bit)
mkdir src && cd src
wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy

Make the binary executable
chmod +x cloud_sql_proxy

Move it to /usr/local/bin/
sudo mv cloud_sql_proxy /usr/local/bin

Make the directory path where I want cloud_sql_proxy to put the socket file after it connects
sudo mkdir /run/cloudsql

Test it out...can I connect ok?  NOTE: you don't need a creds.json file on any Google Compute Engine VMs, because you are on Google's service network.  If you are hosted somewhere else you will.  Replace the placeholder values below with your stuff.
sudo /usr/local/bin/cloud_sql_proxy -dir=/run/cloudsql -instances=your-db-instance-name:your-region:your-db-name

Is there a socket file?
cd /run/cloudsql/your-db-instance-name:your-region:your-db-name
ls -la

Try connecting using psql via the cloud-sql proxy
psql -U postgres -h /run/cloudsql/your-db-instance-name:your-region:your-db-name

If that worked you know everything is working properly from the cloud-sql proxy end.  Now its just a matter of troubleshooting the elixir setup.  I would look at making sure you are using the latest postgrex which you need to get socket support:  {:postgrex, "~> 0.13.5"}.  Then I would hard-code all values in your config files until you get it working properly...no need to add to possible problems.  I also have a systemd file I've attached that I use for cloud-sql proxy so that it reconnects after a reboot.

cloudproxy.txt

@dmin7b5 I'm not totally clear how your instructions translate to the GAE environment. I can connect to my Cloud SQL instance via the cloud proxy from my local environment fine. My GAE VMs are transient and are supposed to do all the proxy set up for me.

@dazuma
I have the sqladmin API enabled.
The cloud sql proxy logs look happy.
2018/03/07 18:59:55 Ready for new connections
2018/03/07 18:59:56 Listening on /cloudsql/elixir-futzing:us-central1:elixir-futzing-db/.s.PGSQL.5432 for elixir-fu
tzing:us-central1:elixir-futzing-db
2018/03/07 19:00:00 New connection for "elixir-futzing:us-central1:elixir-futzing-db"
2018/03/07 19:00:00 New connection for "elixir-futzing:us-central1:elixir-futzing-db"
2018/03/07 19:00:00 New connection for "elixir-futzing:us-central1:elixir-futzing-db"
2018/03/07 19:00:00 New connection for "elixir-futzing:us-central1:elixir-futzing-db"
2018/03/07 19:00:00 New connection for "elixir-futzing:us-central1:elixir-futzing-db"
2018/03/07 19:00:00 New connection for "elixir-futzing:us-central1:elixir-futzing-db"
2018/03/07 19:00:00 New connection for "elixir-futzing:us-central1:elixir-futzing-db"
2018/03/07 19:00:00 New connection for "elixir-futzing:us-central1:elixir-futzing-db"
2018/03/07 19:00:00 New connection for "elixir-futzing:us-central1:elixir-futzing-db"
2018/03/07 19:00:00 New connection for "elixir-futzing:us-central1:elixir-futzing-db"

so it appears the proxy can connect to the database instance.

@dazuma That's great news!  Sorry for my confusion, my instructions were for GCE.  I'm using a custom image for my transient VMs.

@dazuma:
I can now see a socket file in my application container, but i'm still getting the same error.
Should I expect to see the same output from gcloud app logs tail from my local machine as from docker logs [app container id]? The former is spewing the errors, the latter is totally silent.

@svoynow App Engine intercepts the application's output streams so you should use gcloud for its logs, although you need to use docker logs for any of the other containers.
Just to double-check the obvious, does your app.yaml literally say:
  POSTGRES_SOCKET_PATH: /cloudsql/my-project:us-central1:my-project-db/.s.PGSQL.5432

or does it actually use your real project and database name?

No, it uses my actual project name. Sorry for any confusion. Always good to
re-check the obvious..
OK, that's what I was assuming about the logs.
On Wed, Mar 7, 2018 at 1:09 PM, Daniel Azuma<EMAIL_ADDRESS>wrote:

@svoynow https://github.com/svoynow App Engine intercepts the
application's output streams so you should use gcloud for its logs,
although you need to use docker logs for any of the other containers.
Just to double-check the obvious, does your app.yaml literally say:
POSTGRES_SOCKET_PATH: /cloudsql/my-project:us-central1:my-project-db/.s.PGSQL.5432
or does it actually use your real project and database name?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/GoogleCloudPlatform/elixir-runtime/issues/11#issuecomment-371285496,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAWhH3AFYz3loaBnYaLZibdhQ8IJS62Oks5tcEyHgaJpZM4RqkgU
.

--
Sasha Voynow
Lab Zero
77 Battery St.
San Francisco CA 94104
510 859 3206
skype: sasha.voynow
www.labzero.com

@svoynow Okay, good to know. So what I'm hearing is:

You've verified that the cloud sql proxy container is running, and its docker logs indicate that it believes it has opened a socket. Furthermore, its logs indicate it appears to be receiving connections on that socket.
You've verified the socket is appearing in the application container in the expected location.
The application, however, is generating (continually) errors of the form[error] Postgrex.Protocol (#PID<0.1451.0>) failed to connect: ** (DBConnection.ConnectionError) tcp connect ( /cloudsql/my-project:us-central1:my-project-db/.s.PGSQL.5432): no such file or directory - :enoent

even though you've verified that the socket is present in the application container. You've also verified that the socket path in the error message matches exactly the socket path that is present (including capitalization).
These errors are not transient. If you wait five minutes and try to hit your application again, it still fails and those errors continue to appear.
You are using postgrex version 0.13.5
If you run your app locally in the prod environment, against a locally running cloud sql proxy (also pointing at a socket), it works fine.

Is that all correct? If so, I'm running out of ideas...

Yeah.
I think the only reasonable assumption to make is that at least one of those things isn't actually true. So probably time to retrace my steps and make sure.

@svoynow since you are retracing your steps...I know you mentioned you have the SQL API enabled.  Just in case you have separate projects, one that hosts the DB and one that hosts the application, you actually have to enable the SQL API not in the project that hosts the DB, but in the project that hosts the application.

I've double-checked everything and it all seems right. So I'm stumped.
One additional perplexing piece of data is that if I change the pool_size in my Ecto config, that changes the number of
2018/03/08 17:36:52 New connection for "elixir-futzing:us-central1:elixir-futzing-db"
2018/03/08 17:36:52 New connection for "elixir-futzing:us-central1:elixir-futzing-db"
2018/03/08 17:36:52 New connection for "elixir-futzing:us-central1:elixir-futzing-db"

lines I see in the logs for the cloud sql proxy container (i.e. if the pool_size is 3, then there are three New Connection lines, if 10, then 10 etc.).
Which makes it look like the app is connecting. Yet I get nothing but the
[error] Postgrex.Protocol (#PID<0.1451.0>) failed to connect: ** (DBConnection.ConnectionError) tcp connect ( /cloudsql/my-project:us-central1:my-project-db/.s.PGSQL.5432): no such file or directory - :enoent

errors in the application logs (and nothing but 502s from nginx).
I'm trying to think of some more troubleshooting/experiments I can do on the VM or app container, but there aren't all that many tools there.

Looks like I'm a bit behind on all this. Thanks for the response @dazuma! Makes sense that the config doesn't work locally without the proxy enabled. I followed @dmin7b5 instructions and they worked! BUT, I had to change prod.secret.exs to have socket: "/run/cloudsql/crypto-identity:us-central1:crypto-identity-db/.s.PGSQL.5432", instead of socket: "/cloudsql/crypto-identity:us-central1:crypto-identity-db/.s.PGSQL.5432", - had to prefix the socket path with /run.
 I was looking at my GAE logs with gcloud app logs tail -s default. I found out yesterday that those logs aren't near-realtime. I was looking at logs from days ago. I think when I originally posted everything was working correctly but I was looking at stale logs from interim deployments. I ended up looking at my logs from the console and saw no connection problems. Thanks for the help everyone!

:facepalm
Yep, same here.  My connectivity error messages were also out of date.
So now I have to figure out what else might be causing my 502s.

Hi guys, any update regarding this? Any tutorial that works for Ecto + App Engine + Cloud SQL Postgres 😥

https://elixirforum.com/t/ecto-migrations-on-google-cloud/12858/5 seems to have figured out connection.. but anyone figured out migrations yet?

@peterromfeldhk Check out the distillery hex package for elixir, it has pre start hook function to combine with ecto migrator module (like this: https://hexdocs.pm/distillery/running-migrations.html#content).
We could do something extremely dangerous like having one GenServer accepting some code from external and execute it. Since we have migrator module, we could do migration updating without downtime of server. (Theoretically but not practically)

@svoynow I encounter the same problem before. I fix it by enabling Google SQL API. LOL! It may work for you as well.

I agree that updating the tutorial would be extremely helpful.
The steps I took were:
Enable the CloudSQL Admin API
Add the following to app.yaml:
beta_settings:
    cloud_sql_instances: "my-project:my-zone:my-db"

Update the postgrex dependency in mix.exs to be:
{:postgrex, "~> 0.13.5"}
Use the socketdir parameter for the connection (and not hostname or socket or port), so my config in prod.secret.exs looks like:
config :doorstep, MyApp.Repo,
  adapter: Ecto.Adapters.Postgres,
  username: "postgres",
  password: "123",
  database: "myapp_prod",
  socket_dir: "/cloudsql/my-project:my-zone:my-db",
  pool_size: 15

@kjrocker its a while when i tried it out but it looks liek thats what i did to make it work:
config :example, Example.Repo,
  adapter: Ecto.Adapters.Postgres,
  username: "postgres",
  password: "${DB_PASS}",
  database: "example",
  socket: "/cloudsql/${GC_PROJECT_ID}:${GC_REGION}:${GC_SQL_ID}/.s.PGSQL.5432",
  timeout: 7200_000,
  pool_size: 15


Deploy Beamer contracts on mainnet Optimism, Boba and L1

Create a deployment config file for deployment on

mainnet L1
mainnet Optimism
mainnet Boba

Run the deployment script.

will close this and reopen if needs redeployment


Adding myself as a new user

Following through the documentation at https://docs.publishing.service.gov.uk/manual/get-started.html and looking to add myself as a new user here.

@maxgds sorry I didn't introduce you to how we write commits (https://github.com/alphagov/styleguides/blob/master/git.md#example-1)
In this case we'd do something like 'Add Max Lehmann to manifest'.
We also tend to squash commits together if they're just to fix a small error in a previous commit.

Closing in favour of #6422


Chatty project systems

Things aren't always smooth so project system tell more explicit when things go bad (more than logging). This PR adds events for these situations

no DNX or no matching version was found
DTH reports, like malformed project.json
MSBuild fails to parse csproject-file
MSBuild fails to process csproject-file, eg missing extra targets

In all cases a ProjectStatusMessage is send via the event bus.

this isn't ready


Enabled selecting UI files and userdata at runtime

Coverage decreased (-1.08%) to 96.575% when pulling d6df927a2c343f5adee386a3fefe7d3d78d31b48 on debork into 4a30c4905aedbbcc05876c8d068c16970a5d3adf on master.


Exception: sbt.TrapExitSecurityException thrown from the UncaughtExceptionHandler in thread "run-main-0"

I am getting this exception while using amandroid as library dependencies.
libraryDependencies += "com.github.arguslab" % "amandroid_2.12" % "3.2.0"
It takes about an hour downloading the package when i do "sbt run" on a simple project with just a single main.scala.
This is the exception.
Exception: sbt.TrapExitSecurityException thrown from the UncaughtExceptionHandler in thread "run-main-0"

I am also having the exact same problem.

I have solved the issue. It occurred due to scala version inconsistency between my laptop and the amandroid module. Later I switched to scala version 2.12 on my laptop and it was resolved.


adding 'Version' to HostStatus

Addresses #403. We'll also need to update AppVeyor to patch the build number into AssemblyFileVersion.

Added a couple of small comments

Looks good!
One small comment is, which is a bit of a nit, but I think it would be a better approach to have the version field made private and expose a property instead, but it's good to :shipit: !

I tried some other things:

a public static property initialized in static ctor, but it wouldn't serialize
a public instance property exposing a private static field. FxCop didn't like that, but I could always suppress it.

The field felt the simplest. If there's a better pattern, I can come back and change it.


a11y enhancements of the multiselect

From https://github.com/cfpb/cfgov-refresh/pull/1249#issuecomment-171749751

I think having the JavaScript toggle aria-hidden to hide the options will be really useful when this has a list of 50 options. I think have a small snippet of code like  Selected fields: Mortgages, Financial Education that we link with aria-describedby might give some additional context for finding what fields were selected in a huge dropdown.

Multiselect appears on the filters on e.g. https://www.consumerfinance.gov/about-us/blog/

@anselmbradford I'm scheduled to put https://www.consumerfinance.gov/about-us/blog/ through our accessibility audit by the end of the week. I'll sync up with you to see what (if any) additional fixes/enhancements should be included in this issue.

Sounds good! Exciting! 👍

Is this still an Open Issue?

We have internal a11y issues filed that I think will cover this


HHH-10659 Fix to handleNaturalIdPostSaveNotifications

Changed code to use the supplied generatedId rather than calling getId().

Thanks, applied upstream on master branch.


Accelerometer simulator not accessible

Describe the bug
User feedback:

Accelerometer. I was not able to access this output; I tried shaking the Microbit to see if values change. I however see an unlabeled clickable graphic (I am assuming this is a graph).

Right, this is going to be the same problem with 3 values changing rapidely.


docs: fix reference issues

This PR fixes issues that were causing warnings when generating the reference with docca. Along with other fixes recently pushed in boostorg/docca, it should completely fix all problems related to the reference.

2e0c3eec) docs: update javadoc deprecated references: This commit fixes a mistake where the javadoc for many deprecated aliases included references to the deprecated alias boost::core::string_view instead of the correct deprecated aliases boost::optional, system::error_category, system::error_code, system::error_condition, system::system_error, and system::result.
3ded066a) docs: remove references to variant: This commit removes links and references to 'variant' in both the .qbk and .xml files under the documentation directory. These references were removed as the variant alias has been deprecated in 96438f68.
0717afec) docs: replace @ref prefix with backtick for references: This change alters the way we reference external symbols within the documentation comments. These direct references became invalid since 96438f68.
aba72cb5) docs: refactor variable name in url::set_params: Renamed method parameter s to ps in url::set_params to ensure it matches the documentation copied from url_base::set_params.

lovely

@sdarwin The runner selection seems to be getting stuck.

The runner selection seems to be getting stuck.

@alandefreitas  The issue is probably cancel-in-progress: true.
There are multiple levels of complexity with that setting for the self-hosted runners.

A workflow is underway and all the jobs are mid-process and running. Then a cancellation happens. Jobs are cancelled, and new ones are started.
A workflow was just start, and many servers are initiating. Those runners aren't yet reachable. Then a cancellation and restart occurs.
Multiple PRs are running simultaneously. They all get cancelled/restarted. Some of them in-progress, others in an intermediate state where newly launched runners aren't online yet.

It looks like yesterday at around the same time multiple PRs were restarted. I will investigate more, and open an issue with the developers. For now, the fix is to cancel all stuck workflows. Wait 5 or 10 minutes. Restart.  Allow them to run without interruption.

Theoretically a fix is now in-place, see https://github.com/philips-labs/terraform-aws-github-runner , pull request: 3408. Let me know if similar issues still happen.


Feature request: Uploading files

Maybe I just can't find it, but it seems like it's impossible to send an attached image or file. This is a quite useful feature and I'd like to see it implemented in Discordo.

wait wtf was this not possible

it would be good @ayn2op

Hello there, Discordo aims to be lightweight and minimalistic, with prime focus on performance. It utilizes the tview library which is built on top of tcell. Though tview has plenty of widgets and it is very feature-rich, it lacks flexibility. I am considering implementing a plugin system to allow users to implement plugins to extend functionality and customize the functionality of the application by installing and uninstalling plugins. Is this sufficient for your needs?

A plugin system would be fantastically useful and definitely should be added, and I think it would work fine as a plugin -- but I think it would probably be a better implementation to just add it straight into the client to create less confusion and hassle, especially with a function as important as that.
That being said, it wouldn't kill anyone to use it as a plugin and regardless a plugin system would be fantastic

What about patches? They are exponentionally asier than implementing a plugin system

Duplicate: #162


Revert "[Exposing ALTS Context 2/2] Utility Wrapper Class"

Reverts grpc/grpc#21456

I would imagine simply removing the same constants defined in internal file will resolve the issue?


Undot fails when key ends in a period

When the key ends in a period, the undot is incorrect.
        $array = [
            'user.name' => 'Kevin Malone',
            'user.occupation.' => 'Accountant',
        ];

        $array = Arr::undot($array);

        dd($array);

results in
array:1 [▼
  "user" => array:2 [▼
    "name" => "Kevin Malone"
    "occupation" => array:1 [▼
      "" => "Accountant"
    ]
  ]
]

expected
array:1 [▼
  "user" => array:2 [▼
    "name" => "Kevin Malone"
    "occupation." => "Accountant"
  ]
]

Never mind...any dot in they key will probably break

@yormy take a look at:
https://github.com/michael-rubel/framework/commit/3b92a3494f8a04bd5f28bcdf85b4e977fdeac858
https://github.com/michael-rubel/framework/commit/f333614ab51e2f55d77e7a536e47090a80fbd42e
But not sure if @taylorotwell would want to merge this.
P.S. PHP 8 required.

I had a similar solution. But a dot somewhere else in the key will still fail. So I abandoned that solution


Release process: fix the way we compute "START_REV" when START_TAG is an ancestor of BRANCH.

The goal of the command "git rev-list --reverse" was to avoid having to manually remove the changelog entry associated with the commit behind START_REV. I wanted to find a command that would find the child commit of START_REV.
Later on, we discovered that v1.7.0 does not belong to the ancestry of master, which means that the following command returns no commit hash at all:
git rev-list --reverse --ancestry-path v1.7.0..release-1.8

In order to work around this specific case, we now start with the merge base between the previous tag (e.g., 1.7.1) and the revision that we plan on releasing (e.g. master). With the command
git rev-list --reverse --ancestry-path $(git merge-base v1.7.0 release-1.8)..release-1.8

With this command, the first commit hash returned corresponds to the first commit right after the merge base (the bottom commit inside the below box):
               master
                  ^
                  |
                +---+ release-1.7
                | + |
       these    | | |     + v1.7.0
       commits  | + |     |
       are part | | |     + <----- these commits
       of the   | + |    /         are not
       changelog| | |   /          part of
                | + |  +  <------- the changelog
                +---+ /            for
                  |  +  <--------- 1.8.0
                  | /
                  |-
                  |
                  +
                  |

@SgtCoDFish Please take a look 😇


#163683203 profile fetch

user and admin profile

What this pr entails

fetch profiles for user and admin

Prerequisites

A modern web browser eg. Chrome
Internet

How to test
1. Locally

Clone the repository    $ git clone https://github.com/kburudi/Questioner-UI/

switch to the UI directory folder    $ cd Questioner-UI/UI

open the index.html file in your preferred browser

2. Online

Click on the hosted link below
Questioner-UI

Related PT Board
163683203

@kburudi  Good job


Investigate min/max int dtype round trip

See this comment for context.
Investigate the limitation of int range values that can be converted to float and back again to int safely, and understand the scope of the problem.
Make recommendations for a way forward or advice to users.

Regarding using the smallest container size, in our project I wrote a simple function for this purpose:
ants.utils.ndarray.as_min_type
With full set of corresponding unittests of course ants/tests/utils/ndarray/test_as_min_type.py.
May come in handy here...

No longer an issue since we're no longer using NaNs to represent masked values.


Remove QNX support

In the event that someone later re-contributes QNX support I think we should accept it as a "bug" fix, i.e. QNX support in 1.1.1 is "broken".

Merged, thanks!


v4l2loopback error

Hi,
here is the error message using v4l2loopback :
$ scrcpy --v4l2-sink=/dev/video1
scrcpy 1.21 <https://github.com/Genymobile/scrcpy>
INFO: Video orientation is locked for v4l2 sink. See --lock-video-orientation.
/usr/share/scrcpy/scrcpy-server: 1 fil...shed. 0.2 MB/s (39473 bytes in 0.166s)
[server] INFO: Device: LGE LG-H870 (Android 11)
INFO: Renderer: opengl
INFO: OpenGL version: 2.1 Mesa 23.2.1-1ubuntu3.1~22.04.2
WARN: Trilinear filtering disabled (OpenGL 3.0+ or ES 2.0+ required)
INFO: Initial texture: 1440x2880
ERROR: Failed to open output device: /dev/video1
ERROR: Could not open frame sink 1
ERROR: Could not open decoder sinks
ERROR: Could not open packet sink 0
ERROR: Could not open stream sinks
WARN: Device disconnected
WARN: Killing the server...

I posted the message in the wrong place. Can you move it to the correct section please?
https://github.com/umlaeute/v4l2loopback/issues

scrcpy 1.21 https://github.com/Genymobile/scrcpy

First of all, that's a very old and obsolete version.

ERROR: Failed to open output device: /dev/video1

How did you create the v4l2loopback before calling scrcpy?

I followed this link : https://github.com/Genymobile/scrcpy/blob/master/doc/v4l2.md

v4l2-ctl --list-devices
ls /dev/video*

?

v4l2-ctl --list-devices
I connect the phone with ssh tunnel : so Acer is the server, not the phone
$ v4l2-ctl --list-devices
Acer Crystal Eye webcam: Acer C (usb-0000:00:1a.7-6):
	/dev/video0
	/dev/video1
	/dev/media0

$ ls /dev/video*
/dev/video0  /dev/video1

I connect the phone with ssh tunnel

First, does it work without an ssh tunnel? (this might add permissions issues)
You use an SSH tunnel between what and what here?

You use an SSH tunnel between what and what here?
https://github.com/Genymobile/scrcpy/issues/5254
Your server: 65.xx.xxx.yyy (machine with local ip: <IP_ADDRESS>).
Your client: localhost (machine with the local ip: <IP_ADDRESS>).

I assume both computers are on Linux.
From the client, execute:
ssh -CN -L5038:localhost:5037 -R27183:localhost:27183 65.xx.xxx.yyy
keep this open

First, does it work without an ssh tunnel?

I will try this afternoon

So your v4l2loopback module must be on the local client (not the server).
Scrpy uses the tunnel to communicate to the adb daemon running on the remote computer (where the phone is connected), and displays (either in a window or to a v4l2 sink) the content locally.

So, i am at home : on my pc, i follow this : https://github.com/Genymobile/scrcpy/blob/master/doc/v4l2.md
error with : sudo modprobe v4l2loopback
$ sudo modprobe v4l2loopback
modprobe: FATAL: Module v4l2loopback not found in directory /lib/modules/6.0.0-kali6-amd64

So you must install it (as explained at the top of the page you linked).

it is installed. But I still get the modprobe error...


Upgrade to Spring Cloud Build and Commons 1.0.0.RC1

Closed via https://github.com/spring-cloud/spring-cloud-stream/commit/1ab1d096ed3d444f94dc6f0ef79cb2960fa8f310


New logo applied to "brand logo" "Chainsfr Wallet logo"

logo add beta
logo add demo
where to use "text" "icon with text" "icon" logo
use new chainsfr logo
navigation bar logo color ajustment

to be designed

Combine with #691.
In the user testing, we found that users are confused about "testnet" and "mainnet".
Rename "testnet" in the Chainsfr app to be more user-friendly, like "demo".
Put more indications of "demo" feature on every page of "testnet.chainsfr.com", like on the logo, where to put it on every page.
Remove the word "mainnet" from all pages except help center.
Explain demo/testnet and mainnet in the help center.
The following might not be implemented:
3. Consider using "demo.chainsfr.com" to replace "testnet.chainsfr.com"


Processing TMDB Data fails

Is there already an issue for your problem?

[X] I have checked older issues, open and closed

Bug Description
Starting TMDBTraktSyncer....
Your settings are saved at:
/usr/lib/python3.12/site-packages/TMDBTraktSyncer
Processing Trakt Data
Processing Trakt Data Complete
Processing TMDB Data

Request failed with status code 401: This resource is private

--- ERROR ---
An error occurred while running the script.
Please submit the error to GitHub with the following information:
Traceback (most recent call last):
File "/usr/lib/python3.12/site-packages/TMDBTraktSyncer/TMDBTraktSyncer.py", line 24, in main
tmdb_watchlist, tmdb_ratings = tmdbData.getTMDBRatings()
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/site-packages/TMDBTraktSyncer/tmdbData.py", line 24, in getTMDBRatings
json_data = json.loads(response.text)
^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'text'
Environment
OS linux vm
Install method using pip
Screenshots
No response

Hi sorry for the late reply. This issue should be fixed in the latest version v1.7.2. A problem was identified in another project where the script was improperly handling network errors such as error 54 connection reset by server (rate limiting). If you are still having problems with this let me know and I can reopen this issue. Thanks


Issue/4273 partial compile compilerservice (#4486)

Pull request opened by the merge tool on behalf of #4486

Merged into branches iso5 in 081c884e56f0bd7a7eefe8a3d4c6df12cb6f4539


Can't read mounted direcory whith Goofys and Catfs

Hello, i need your help.
I mounted s3 volume from /etc/fstab
goofys#s3-bucket /home/user/media	fuse	_netdev,allow_other,--file-mode=0666,--dir-mode=0777,--uid=1007,--gid=1008,--cache=/tmp/catfs	0	0

If i try execute ls or other I/O operations i have errors:
 ls -la /home/user/

d?????????  ? ?          ?                  ?            ? media

 ls -la /home/user/media

ls: cannot access '/home/user/media': Permission denied

but if i try this commands with sudo user i haven't any issues:
sudo  ls -la /home/carlos.zrm/

drwxrwxrwx  2 user user      4096 Jan 22 18:01 media

So i executed strace i get this output:
strace ls -la

lstat("media", 0x5604f1dba9a0)          = -1 EACCES (Permission denied)
openat(AT_FDCWD, "/usr/share/locale/C.UTF-8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/C.utf8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/C/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale-langpack/C.UTF-8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale-langpack/C.utf8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale-langpack/C/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
write(2, "ls: ", 4ls: )                     = 4
write(2, "cannot access 'media'", 21cannot access 'media')   = 21
openat(AT_FDCWD, "/usr/share/locale/C.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/C.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/C/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale-langpack/C.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale-langpack/C.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale-langpack/C/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
write(2, ": Permission denied", 19: Permission denied)     = 19
write(2, "\n", 1
)

goofys#buquet	/home/user/media 	fuse	_netdev,allow_other,--uid=65534,--gid=33,--cache=-o:allow_other:/tmp/cache 0 0

goofys#buquet	/home/user/media 	fuse	_netdev,allow_other,--uid=65534,--gid=33,--cache=-o:allow_other:/tmp/cache 0 0

Thanks @Carlos-ZRM ! I ran into this as well and was quite helpful!


ARROW-13051: [Release][Java] Use artifacts built by Crossbow

@github-actions crossbow submit --group verify-rc --param release=6.0.1 --param rc=1

@github-actions crossbow submit verify-rc-binaries-* verify-rc-*-windows --param release=6.0.1 --param rc=1

@github-actions crossbow submit verify-rc-binaries-* verify-rc-*-windows --param release=6.0.1 --param rc=1

@github-actions crossbow submit verify-rc-*-windows --param release=6.0.1 --param rc=1

+1


[BUG] Rename app title to Bunk Mate

Description
The app title in the navigation drawer is named as Flutter Demo which needs to be changed to the actual application name.
Screenshots

Platform:

[x] Android

[x] iOS

Closed by #45. Thanks a lot @andi-mache. Hope we can see you contributing more to the Bunk-Mate project.


feat: expose resolveUserConfig for resolving user config programmatic usages

This allows programmatic use to resolve custom config that may not comes from a single configure file entry.
related https://github.com/vuejs/vitepress/issues/189

@knightly-bot build this


Stale options bugfix (and lots more)

Description
The core of the referenced issue was way too difficult to find, but everything comes down to the fact that the mapping used to fetch options utilized the debounced data model, while the node generator (and the repeating group itself for that matter) uses the current data model. So when deleting a row near the top in a repeating group it would take a while for the debouncing to happen, and for that row to be removed from the debounced data as well. I struggled with getting the 'remove stale options' effect to wait to do its job until that time, but when I figured out the root cause of the problem the fix is relatively simple - deleting (and adding) rows now performs the same action on both models (the current and debounced), which also causes this data change to be immediately saved to the backend.
While debugging this, I found and fixed multiple performance-related oddities and unnecessary re-renders, or other jankiness. Notable changes, in chronological order from the beginning:

I renamed all the PerformWork components to something unique. When you use the react profiler these would otherwise be hard to tell apart.
I moved the options-related effects (removing stale data, setting preselectedOptionIndex, saving downstream parameters and storing the label/displayValue) into separate components that will generally not even be rendered unless options-components are ready for it. I'm hoping this makes this functionality easier to read and reason about.
I added a key to all GeneratorRunProvider components inside the NodeGenerator. Not because it's strictly needed, but because it makes it much easier to debug and read the tree in the react devtools.
When rows are removed from a repeating group, the nodes context is marked as 'not ready' a bit earlier, and the logging (which can be set up in debug.ts) now shows you more info about why the state was marked as not ready.
All the components in the node hierarchy that sets data in a commit-queue doesn't really need to do that inside a useEffect(), because adding something to the commit-queue does not set state directly - it just schedules state to be set later. I rewrote all of these to add commits during rendering instead, and using a bit more logic to check if data should be set or not. When doing this I discovered that some of that state-setting could overwrite existing state unintentionally, such as overwriting updating: true in attachments or clearing visibility for attachment validations. With the later fixes to this logic, it's now much clearer when we overwrite state and what we keep.
I removed some complexity that we don't need in the hierarchy generator, such as having its own wrapped and tracked variant of useEffect and useConditionalEffect. From now on, conditional rendering should work as the only mechanism we need to delay these state changes until parents, etc, has been added.
The GeneratorStages had its own store, but didn't really need to. I moved the store into NodesContext to avoid having to pass things between them (such as the markAsReady function).
Some parts of the earlier GeneratorStages behaved like refs (were mutated) instead of the more common immutable object pattern used in zustand stores. Instead of putting these in zustand, I moved them to a separate useRef() bootstrapped in GeneratorContext.
A bug that was discovered in the Subform branch was fixed there by moving commitTimeout (in GeneratorStages.tsx) to a ref instead of a global variable. I changed this here as well (which will cause a merge conflict), by moving that ref to one that is global for the entire NodesContext, not local to the hook.
All the commit-queue stuff was moved into its own file (CommitQueue.tsx) and out from GeneratorStages.tsx (this caused quite a bit of the line-count, I would think)
Avoiding re-rendering in GenericComponent by only fetching what is needed there. It would routinely re-render a bit much every time something changed in (for example) a RepeatingGroup item.
Using requestIdleCallback when available to mark the NodesContext as ready, instead of an over-active setInterval. This reduces the load required to check if we can mark the state as ready.
In a RepeatingGroup we'd set the row UUID in the state for each row, but when deleting an earlier row that state could be stale/outdated for a while. I opted to remove the value instead (set it to undefined) when rows are removed so we'd notice sooner that the UUID was not the correct one. This is then updated later by MaintainRowUuid so that we can know when the item state is up to date with the data model.
In useNodeItem() I used to just return the latest state when components re-ran their selectors in the periods where the NodesContext is not ready. In this change I added a ref with the previous value and let the selector run on that while the store is not ready - that way lots of re-renders for visible components are delayed until state has stabilized. I also added a check to make sure useNodeItem() is not called inside the generator itself, which we've seen before could cause unexpected results (this hook simplifies the world for you and lets you think the item is always set, but in the generator it isn't).
Rewriting deepValidationsForNode to not use node traversal, as it would cause unneccessary re-renders when deleting a repeating group row.
Every component (and plugin) can now check if their state is ready, and the readiness-checker is guaranteed not to mark the state as ready until that's done.
I noticed that string[] in the data model could cause patch changes even when the prev/next values were essentially the same. Comparing with deepEqual fixed that.
When uploading attachments to repeating groups, I saw gigantic re-renders because data in InstanceContext was altered. As a quick stop-gap solution, I rewrote it to use a zustand store instead.
Same goes with ProcessContext.tsx. Now I only see large re-renders when uploading attachments because of changes in ProcessWrapper, but I suspect that will be fixed in upcoming changes in Subform.
Asking the backend to include row UUIDs when performing a regular single-data-model PATCH request. I supect this was left out by mistake when adding support for multiple data models.
In repeating groups, when earlier rows are deleted (or all rows sorted), the UUIDs in the store would not match the data model for a while, and when that happened the edit/delete buttons would fail to work. Fixing this by disabling the buttons while the row is not 'fresh' according to the data model.

Test changes:

Rewrote some tests that used fake timers, but broke (presumably because of requestIdleCallback).
Various minor updates to cypress tests, typically to make them wait until things show up before performing the next action
I implemented a mechanism to simulate form data saving in unit tests, along with faking ProcessDataWrite (untested as of now). One test failed because adding/removing rows are now debounced immediately, and then it would get stuck waiting for saving - it would previously finish before saving occurred.
At least one test failed because useDeviceWidths() did not catch a resize after rendering, before useEffect() was called

Related Issue(s)

closes #2429

Verification/QA

Manual functionality testing

[x] I have tested these changes manually
[ ] Creator of the original issue (or service owner) has been contacted for manual testing (or will be contacted when released in alpha)
[ ] No testing done/necessary

Automated tests

[ ] Unit test(s) have been added/updated
[ ] Cypress E2E test(s) have been added/updated
[x] No automatic tests are needed here (no functional changes/additions)
[ ] I want someone to help me make some tests

UU/WCAG (follow these guidelines until we have our own)

[ ] I have tested with a screen reader/keyboard navigation/automated wcag validator
[x] No testing done/necessary (no DOM/visual changes)
[ ] I want someone to help me perform accessibility testing

User documentation @ altinn-studio-docs

[ ] Has been added/updated

[x] No functionality has been changed/added, so no documentation is needed
[ ] I will do that later/have created an issue

Support in Altinn Studio

[ ] Issue(s) created for support in Studio

[x] This change/feature does not require any changes to Altinn Studio

Sprint board

[x] The original issue (or this PR itself) has been added to the Team Apps project and to the current sprint board
[ ] I don't have permissions to do that, please help me out

Labels

[x] I have added a kind/* label to this PR for proper release notes grouping
[ ] I don't have permissions to add labels, please help me out

Percy snapshot shows some issues with Map, along with a disappearing nested group in summary. I'll look into it.


more docs

Why is this pull request needed?
add more docs about using Git and setting up debugger
What does this pull request change?
docs
Issues related to this change:

todo
should add info about env vars to docs (see for example https://github.com/equinor/QuatoOps/blob/master/docs/getting_started.md )

note: some github repos add a description of the project file structure, which can be useful but also difficult to maintain
https://github.com/microsoft/MLOpsPython/blob/master/docs/code_description.md

outdated, see #78


Support of string-typed parameters

I notice that we can set boolean or integer typed parameters to a tactic such as `simplify'.
Can we specify a parameter whose type is string? Thank you!
          "simplify":
                "boolean": [
                    "elim_and",
                    "som",
                    "blast_distinct",
                    "flat",
                    "hi_div0",
                    "local_ctx",
                    "hoist_mul"
                ]
            },

Hi, unfortunately we do not support string parameters at the moment.


Issue 245

Fix #245
Test URLs:

Before: https://main--hubblehomes-com--aemsites.hlx.live/contact-us/subscribe
After: https://issue-245--hubblehomes-com--aemsites.hlx.page/contact-us/subscribe

https://main--hubblehomes-com--aemsites.hlx.live/news
https://issue-245--hubblehomes-com--aemsites.hlx.page/news
https://issue-245--hubblehomes-com--aemsites.hlx.page/news/news-detail/hubble-homes-earns-2022-energy-star-market-leader-award-106

Using AEM Forms as the otehr is deprecated, hence all the files

Closing as customer no longer wants a subscribe page


Docs for all Rust services

DoD

[ ] Requirements of the issue: (docs) are met
[ ] Code has been reviewed

I could not start the development server, as i am getting:
[WARNING] No docs found in "graphql/address": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/catalog": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/discount": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/inventory": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/notification": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/return": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/review": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/shipment": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/shoppingcart": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/tax": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/user": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/wishlist": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/schema": can't auto-generate a sidebar.
[ERROR] Loading of version failed for version current

I think this is because of the auto-generated GraphQL docs

I could not start the development server, as i am getting:
[WARNING] No docs found in "graphql/address": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/catalog": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/discount": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/inventory": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/notification": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/return": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/review": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/shipment": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/shoppingcart": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/tax": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/user": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/wishlist": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/schema": can't auto-generate a sidebar.
[ERROR] Loading of version failed for version current

I think this is because of the auto-generated GraphQL docs

you can fix this by running npm run update-graphql-docs

Additionally, @nk-coding needs to draw a few more diagrams

done
@legendofa  please review
note that I already included some of the stuff we discussed on Discord

I could not start the development server, as i am getting:
[WARNING] No docs found in "graphql/address": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/catalog": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/discount": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/inventory": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/notification": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/return": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/review": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/shipment": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/shoppingcart": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/tax": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/user": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/wishlist": can't auto-generate a sidebar.
[WARNING] No docs found in "graphql/schema": can't auto-generate a sidebar.
[ERROR] Loading of version failed for version current

I think this is because of the auto-generated GraphQL docs

you can fix this by running npm run update-graphql-docs

I am getting the following error when running the graphql docs update, also tried it with Node v21. If it is just on my system then we can ignore it, just needed it to check how this PR looks like when running:

><EMAIL_ADDRESS>update-graphql-docs
> node scripts/updateGraphQLDocs.mjs

Error:
      Unable to find any GraphQL type definitions for the following pointers:

          - schemas/address.graphql

    at prepareResult (/home/julian/Documents/Git/misarch-docs/node_modules/@graphql-tools/load/cjs/load-typedefs.js:82:15)
    at loadTypedefs (/home/julian/Documents/Git/misarch-docs/node_modules/@graphql-tools/load/cjs/load-typedefs.js:40:20)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async loadSchema (/home/julian/Documents/Git/misarch-docs/node_modules/@graphql-tools/load/cjs/schema.js:15:21)
    at async loadSchema (/home/julian/Documents/Git/misarch-docs/node_modules/@graphql-markdown/graphql/dist/loader.js:60:20)
    at async generateDocFromSchema (/home/julian/Documents/Git/misarch-docs/node_modules/@graphql-markdown/core/dist/generator.js:20:20)
    at async Command.<anonymous> (/home/julian/Documents/Git/misarch-docs/node_modules/@graphql-markdown/docusaurus/dist/index.js:57:17)
node:internal/errors:865
  const err = new Error(message);
              ^

Error: Command failed: npx docusaurus graphql-to-doc:address -f
Error:
      Unable to find any GraphQL type definitions for the following pointers:

          - schemas/address.graphql

    at prepareResult (/home/julian/Documents/Git/misarch-docs/node_modules/@graphql-tools/load/cjs/load-typedefs.js:82:15)
    at loadTypedefs (/home/julian/Documents/Git/misarch-docs/node_modules/@graphql-tools/load/cjs/load-typedefs.js:40:20)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async loadSchema (/home/julian/Documents/Git/misarch-docs/node_modules/@graphql-tools/load/cjs/schema.js:15:21)
    at async loadSchema (/home/julian/Documents/Git/misarch-docs/node_modules/@graphql-markdown/graphql/dist/loader.js:60:20)
    at async generateDocFromSchema (/home/julian/Documents/Git/misarch-docs/node_modules/@graphql-markdown/core/dist/generator.js:20:20)
    at async Command.<anonymous> (/home/julian/Documents/Git/misarch-docs/node_modules/@graphql-markdown/docusaurus/dist/index.js:57:17)

    at checkExecSyncError (node:child_process:890:11)
    at execSync (node:child_process:962:15)
    at file:///home/julian/Documents/Git/misarch-docs/scripts/updateGraphQLDocs.mjs:7:20
    at ModuleJob.run (node:internal/modules/esm/module_job:195:25)
    at async ModuleLoader.import (node:internal/modules/esm/loader:336:24)
    at async loadESM (node:internal/process/esm_loader:34:7)
    at async handleMainPromise (node:internal/modules/run_main:106:12) {
  status: 1,
  signal: null,
  output: [
    null,
    '\n\n[INFO] Docusaurus version: 3.1.1\nNode version: v18.19.1\n',
    'Error: \n' +
      '      Unable to find any GraphQL type definitions for the following pointers:\n' +
      '        \n' +
      '          - schemas/address.graphql\n' +
      '          \n' +
      '    at prepareResult (/home/julian/Documents/Git/misarch-docs/node_modules/@graphql-tools/load/cjs/load-typedefs.js:82:15)\n' +
      '    at loadTypedefs (/home/julian/Documents/Git/misarch-docs/node_modules/@graphql-tools/load/cjs/load-typedefs.js:40:20)\n' +
      '    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n' +
      '    at async loadSchema (/home/julian/Documents/Git/misarch-docs/node_modules/@graphql-tools/load/cjs/schema.js:15:21)\n' +
      '    at async loadSchema (/home/julian/Documents/Git/misarch-docs/node_modules/@graphql-markdown/graphql/dist/loader.js:60:20)\n' +
      '    at async generateDocFromSchema (/home/julian/Documents/Git/misarch-docs/node_modules/@graphql-markdown/core/dist/generator.js:20:20)\n' +
      '    at async Command.<anonymous> (/home/julian/Documents/Git/misarch-docs/node_modules/@graphql-markdown/docusaurus/dist/index.js:57:17)\n'
  ],
  pid: 72348,
  stdout: '\n\n[INFO] Docusaurus version: 3.1.1\nNode version: v18.19.1\n',
  stderr: 'Error: \n' +
    '      Unable to find any GraphQL type definitions for the following pointers:\n' +
    '        \n' +
    '          - schemas/address.graphql\n' +
    '          \n' +
    '    at prepareResult (/home/julian/Documents/Git/misarch-docs/node_modules/@graphql-tools/load/cjs/load-typedefs.js:82:15)\n' +
    '    at loadTypedefs (/home/julian/Documents/Git/misarch-docs/node_modules/@graphql-tools/load/cjs/load-typedefs.js:40:20)\n' +
    '    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n' +
    '    at async loadSchema (/home/julian/Documents/Git/misarch-docs/node_modules/@graphql-tools/load/cjs/schema.js:15:21)\n' +
    '    at async loadSchema (/home/julian/Documents/Git/misarch-docs/node_modules/@graphql-markdown/graphql/dist/loader.js:60:20)\n' +
    '    at async generateDocFromSchema (/home/julian/Documents/Git/misarch-docs/node_modules/@graphql-markdown/core/dist/generator.js:20:20)\n' +
    '    at async Command.<anonymous> (/home/julian/Documents/Git/misarch-docs/node_modules/@graphql-markdown/docusaurus/dist/index.js:57:17)\n'
}

Node.js v18.19.1

Not sure about the invoice service yet: MiSArch/invoice#1, but otherwise looks good

The Invoice interface is adapted to match the PR: https://github.com/MiSArch/invoice/pull/1


'kubectl proxy' not working

I started a k8s cluster on GCE, and then I ran
$ kubectl proxy
Starting to serve on localhost:8001
$ curl localhost:8001/api/v1beta1/pods
404 page not found
$ curl localhost:8001
404 page not found

Is this behavior abnormal or did I misuse the command? Thanks.
@jlowdermilk @nikhiljindal @bgrant0607

Usage looks ok:
https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/kubectl_proxy.md
Did kubectl proxy exit immediately? Maybe it didn't get the port, though there should have been an error message.
Try specifying a different port (see doc).

You also may need to do curl --insecure

Thanks. Should kubectl proxy exit immediately? It stuck at Starting to serve on localhost:xxxx no matter what port I specified. I think it got the port, because I compare the netstat --listen result before and after I ran kubectl proxy. It showed the specified port entered LISTEN state after I ran the kubectl proxy command.
curl --insecure doesn't help.

Does kubectl otherwise work?

Yes. I've run through several other examples with the same build of kubectl.

It stuck at Starting to serve on localhost:xxxx no matter what port I specified.

That is expected behavior. It spins forever running the proxy server on localhost until you kill it with ctrl-c. You shouldn't need --insecure to access the localhost proxy (that's kind of the point). What version are you running? I'm spinning up a cluster at head to see if I can repro.

kubectl version
Client Version: version.Info{Major:"0", Minor:"17+", GitVersion:"v0.17.0-471-ge41e5c65fc80fe-dirty", GitCommit:"e41e5c65fc80fe96a3cc2c1d933dd3e623b75a13", GitTreeState:"dirty"}
Server Version: version.Info{Major:"0", Minor:"17+", GitVersion:"v0.17.0-471-ge41e5c65fc80fe-dirty", GitCommit:"e41e5c65fc80fe96a3cc2c1d933dd3e623b75a13", GitTreeState:"dirty"}

updated to the head and had the same 404 page not found response
$ kubectl version
Client Version: version.Info{Major:"0", Minor:"17+", GitVersion:"v0.17.0-535-g2c545408968e08-dirty", GitCommit:"2c545408968e0848b6b495f0b8b36800fcbb2c64", GitTreeState:"dirty"}
Server Version: version.Info{Major:"0", Minor:"17+", GitVersion:"v0.17.0-535-g2c545408968e08-dirty", GitCommit:"2c545408968e0848b6b495f0b8b36800fcbb2c64", GitTreeState:"dirty"}

I just spun up a cluster from head and it's working for me.
kubectl version
Client Version: version.Info{Major:"0", Minor:"17+", GitVersion:"v0.17.0-537-gc743011e195139", GitCommit:"c743011e19513949433e1b47ecb7c2f4ffa795cd", GitTreeState:"clean"}
Server Version: version.Info{Major:"0", Minor:"17+", GitVersion:"v0.17.0-537-gc743011e195139", GitCommit:"c743011e19513949433e1b47ecb7c2f4ffa795cd", GitTreeState:"clean"}

curl localhost:8001/api/
{
  "versions": [
    "v1beta1",
    "v1beta2",
    "v1beta3"
  ]
}

Are you running kubectl proxy in its own terminal window and curl in another? If kubectl commands work, the only thing I can think of is maybe url is misspelled. Note that localhost:8001 will always return 404, as there is no index. localhost:8001/api/ is a good test endpoint.

Thanks @jlowdermilk. It seems the problem is solved. localhost:8001/api/ returns the expected output.
I still don't know why $ curl localhost:8001/api/v1beta1/pods returned 404 yesterday.

Kubectl proxy fails with the error
F0806 15:37:15.715395   10814 proxy.go:155] listen tcp <IP_ADDRESS>:8001: bind: address already in use
Is there a way to bind proxy to another custom port? Thanks.


Nlog.config Jsonlayout array footer doesnt work for me

One of the simplest solution is configure NLog.Layouts.CompoundLayout to concat NLog.Layouts.JsonLayout and NLog.Layouts.SimpleLayout(","). Then set Header to "[" and the Footer to "{}]" :)
Then the log file will be closed correctly and the result is valid json.
[
{ "level": "error", "message": "msg1"},
{ "level": "info", "message": "msg2"},
{}]
Originally posted by @tpilat in https://github.com/NLog/NLog/issues/1658#issuecomment-360911742
hi I wanted to do exactly what you suggested but for some reason the footer text is not written in the logfile.
my nlog config looks like this:
 <targets>
    <target name="jsonfile" xsi:type="File" writeFooterOnArchivingOnly="false" fileName="${basedir}/logfile/${date:format=yyyy-MM-dd HH-mm}.json">
      <layout xsi:type="LayoutWithHeaderAndFooter">
        <header xsi:type="SimpleLayout" text="[" />
        <footer xsi:type="SimpleLayout" text="{}]" />
        <layout xsi:type='CompoundLayout'>
      <layout xsi:type="JsonLayout">
        <attribute name="time" layout="${date:format=yyyy-MM-dd HH-mm}" escapeUnicode="false"/>
        <attribute name="level" layout="${level:upperCase=true}" escapeUnicode="false"/>
        <attribute name="message" layout="${message}${exception:format=tostring}" escapeUnicode="false"/>
      </layout>
      <layout xsi:type='SimpleLayout' text="," />
      </layout>
        </layout>
    </target>
  </targets>

and the logfile looks like this:
[
{ "time": "2020-06-09 11-02", "level": "INFO", "message": "random logg message ÜüÄÄä" },
{ "time": "2020-06-09 11-02", "level": "WARN", "message": "$$3$$10,26" },
{ "time": "2020-06-09 11-02", "level": "INFO", "message": "random logg message ÜüÄÄä" },
{ "time": "2020-06-09 11-02", "level": "WARN", "message": "$$1$$3,42" },
{ "time": "2020-06-09 11-02", "level": "INFO", "message": "random logg message ÜüÄÄä" },
{ "time": "2020-06-09 11-02", "level": "WARN", "message": "$$2$$6,84" },
as you can see the "[" and the "," after every logmessage are working fine but the text of the footer is never written in the logfile even when I restart the program or when a new logfile gets created because of the timestamp in the filename. Ive played around with a few archiving functions but I was never able to get the footers text written into the file.
Does anyone have an idea what im doing wrong?

This issue is a duplicate of #1658, and if you read all the comments for that issue then you will notice the advice is to either:

Fix your LogViewer-tool so it can handle that Json-file is not completely valid, but each line is a json-document.
Create PullRequest for the NLog-project that enables NLog FileTarget to rewrite the Footer-Layout on file-append in an elegant way.


Customize page size for a calendar showing multiple months

🙋 Feature Request

I would like to have a calendar showing two months, that goes forward only one month when pressing the next button.
🤔 Expected Behavior

The behavior of previous/next buttons does not implicitly change when changing visibleDuration, but can be customized in a different way.
😯 Current Behavior

When using a calendar with a custom visibleDuration (for example 2 months), the behavior of the previous and next buttons also changes. Pressing next suddenly goes forward two months instead of one. This behavior is a bit implicit and not customizable.
💁 Possible Solution

Breaking change: The behavior of previous/next buttons DOES NOT change when changing visibleDuration. It can instead be customized using a new prop like pageSize of type Duration.
OR
Non-breaking change: The behavior of previous/next buttons DOES change when changing visibleDuration as is already the case. It can be customized using a new prop like pageSize of type Duration.
💻 Examples

https://airbnb.com has a calendar range picker when selecting a date. Clicking next only goed forward one month, not two.

Thank you for filing this feature request, the team will have to discuss on the expected behavior, will bring this up in our next sprint grooming session.

The team has discussed the above behavior and we've added it to our backlog. It may take us some time to get to this due to other priorities, but we'd be happy to accept any PRs for this!


calling background functions triggers twice

Hi,
I don`t know if this is the intended result, but subscribing to the store through
store.subscribe(handleChange)

(within src/browser/extension/background/badge.js)
triggers twice if the increment function was called with
bg('increment')

(from src/app/components/Counter.js) .
badge.js compares previousValue and currentValue and decides if to update the badge text.
I don`t know anything about redux-persist and other involvement libraries but causing an automated secondary call of the listener function requires a state traversal like previousValue and currentValue even if the intended function call (background script) does not depend / involve on any state changes e.g. the increment action changing the state.counter.count value.
Maybe someone could explain which parts are responsible calling the listeners?
Thanks!

Hey, @gurkerl83.
Yes, it is the intended result as the state is changed twice:

The background page receive the command from an other page through a state rehydrate action.
The background page dispatch a new action ('increment').

The idea of this approach was to replace the classic chrome extension messaging with just state rehydratations (chrome/local storage listiner), so it would be easy to make a cross browser extension and you have to care only about actions and states. But as you see, we loose the performance. As I told, I want to implement a better way for using background's store in v0.5.
I will create a new issue with the proposal for v0.5. Any suggestions are welcome.

I created a simple redux middleware, which notifies when counter is changed, and now use a redux action to update the badge. Any feedback regarding this solution is welcome.


Analyzing in background runs forever. The python tools server crashes 5 times in the last 3 minutes

Issue Type: Bug
When I save files (ex: https://github.com/freqtrade/freqtrade/blob/develop/tests/strategy/test_interface.py )
I get analyzing in background at the bottom of my VSCode running  forever and eventually I get "The Python tools server crashed 5 times in the last 3 minutes. The server will not restart"
This is my list of extensions in my workspace
aaron-bond.better-comments
alefragnani.Bookmarks
alefragnani.rtf
alexcvzz.vscode-sqlite
almenon.arepl
bierner.markdown-preview-github-styles
christian-kohler.path-intellisense
CoenraadS.bracket-pair-colorizer
dunstontc.dark-plus-syntax
eamodio.gitlens
evgeniypeshkov.syntax-highlighter
GitHub.vscode-pull-request-github
GrapeCity.gc-excelviewer
ionutvmi.path-autocomplete
janisdd.vscode-edit-csv
mechatroner.rainbow-csv
ms-python.python
ms-python.vscode-pylance
ms-toolsai.jupyter
mtxr.sqltools
mtxr.sqltools-driver-sqlite
naumovs.color-highlight
njqdev.vscode-python-typehint
rsbondi.highlight-words
tomoki1207.pdf
Tyriar.sort-lines
usernamehw.remove-empty-lines
VisualStudioExptTeam.vscodeintellicode

and this is the full list  including disabled extensions
aaron-bond.better-comments
adamwalzer.scss-lint
alefragnani.Bookmarks
alefragnani.rtf
alexcvzz.vscode-sqlite
almenon.arepl
andrewdircks.google-cloud-platform-ssh
bierner.markdown-preview-github-styles
bradgashler.htmltagwrap
christian-kohler.npm-intellisense
christian-kohler.path-intellisense
CoenraadS.bracket-pair-colorizer
cssho.vscode-svgviewer
dbaeumer.vscode-eslint
dsznajder.es7-react-js-snippets
dunstontc.dark-plus-syntax
eamodio.gitlens
ecmel.vscode-html-css
esbenp.prettier-vscode
evgeniypeshkov.syntax-highlighter
formulahendry.auto-close-tag
formulahendry.auto-rename-tag
GitHub.vscode-pull-request-github
GrapeCity.gc-excelviewer
ionutvmi.path-autocomplete
janisdd.vscode-edit-csv
jock.svg
kisstkondoros.vscode-gutter-preview
leizongmin.node-module-intellisense
mechatroner.rainbow-csv
meganrogge.template-string-converter
mkaufman.HTMLHint
mrmlnc.vscode-scss
ms-python.python
ms-python.vscode-pylance
ms-toolsai.jupyter
mtxr.sqltools
mtxr.sqltools-driver-sqlite
naumovs.color-highlight
njqdev.vscode-python-typehint
OfHumanBondage.react-proptypes-intellisense
pentium10.vscode-gcp-project-switcher
plievone.vscode-template-literal-editor
riazxrazor.html-to-jsx
rsbondi.highlight-words
rvest.vs-code-prettier-eslint
sibiraj-s.vscode-scss-formatter
SimonSiefke.svg-preview
stylelint.vscode-stylelint
tomoki1207.pdf
Tyriar.sort-lines
usernamehw.remove-empty-lines
VisualStudioExptTeam.vscodeintellicode
waleedj1699.css-dictionary

Extension version: 2021.8.1105858891
VS Code version: Code 1.59.0 (Universal) (379476f0e13988d90fab105c5c19e7abc8b1dea8, 2021-08-04T23:14:40.191Z)
OS version: Darwin x64 20.5.0
Restricted Mode: No

System Info

Item
Value

CPUs
Intel(R) Core(TM) i3-8100B CPU @ 3.60GHz (4 x 3600)

GPU Status
2d_canvas: enabledgpu_compositing: enabledmetal: disabled_offmultiple_raster_threads: enabled_onoop_rasterization: enabledopengl: enabled_onrasterization: enabledskia_renderer: disabled_off_okvideo_decode: enabledwebgl: enabledwebgl2: enabled

Load (avg)
3, 3, 3

Memory (System)
20.00GB (2.81GB free)

Process Argv
--crash-reporter-id ff400021-a583-49cd-bc06-f61e35efd2d1

Screen Reader
no

VM
0%

A/B Experiments
vsliv368:30146709
vsreu685:30147344
python383:30185418
pythonvspyt678:30270856
pythonvspyt602:30300191
vspor879:30202332
vspor708:30202333
vspor363:30204092
pythonvspyt639:30300192
pythontb:30283811
pythonptprofiler:30281270
vshan820:30294714
vstes263:30335439
pythondataviewer:30285071
pythonvsuse255:30340121
vscod805:30301674
pythonvspyt200:30340761
vscextlang:30333561
binariesv615:30325510
vsccppwtct:30329789
pythonvssor306:30344512
bridge0708:30335490
vstre464:30346472

@samgermain What do you have for python.languageServer setting?

Also, can you share logs from either developer tools (Help > Toggle developer tools) or Output > Python panel?

+1 I'm also having this issue, started within the last week. It seems like the background analysis keeps restarting over and over? See screenshot.
User belongs to experiment group 'pythonaa'
User belongs to experiment group 'pythonJediLSP'
User belongs to experiment group 'pythonDiscoveryModuleWithoutWatcher'
User belongs to experiment group 'pythonTensorboardExperiment'
User belongs to experiment group 'pythonSurveyNotification'
User belongs to experiment group 'PythonPyTorchProfiler'
User belongs to experiment group 'pythonDeprecatePythonPath'
User belongs to experiment group 'pythonSortEnvs'
Python interpreter path: ./venv/bin/python3.7
Starting Microsoft Python language server.

notificationsAlerts.ts:40 The Python Tools server crashed 5 times in the last 3 minutes. The server will not be restarted.

Python v2021.8.1105858891
VSCode:
Version: 1.59.0
Commit: 379476f0e13988d90fab105c5c19e7abc8b1dea8
Date: 2021-08-04T23:14:40.191Z (1 wk ago)
Electron: 13.1.7
Chrome: 91.0.4472.124
Node.js: 14.16.0
V8: 9.1.269.36-electron.0
OS: Darwin x64 19.6.0

@timothyshaw Change language server to either Default (selects Pylance or Jedi based on the python version), Pylance or JediLSP. Microsoft Python Language server is not actively developed on.

Got it, didn't realize that. Maybe "Default" was somehow still selecting Microsoft Python Language server for me. Switched to JediLSP and working well.

"python.linting.pylintEnabled": false,
    "python.linting.flake8Enabled": true,
    "python.linting.lintOnSave": true,
    "editor.formatOnPaste": true,
    "editor.formatOnSave": true,
    "editor.wordWrapColumn": 100,
    "python.formatting.provider": "autopep8",
    "python.formatting.autopep8Path": "autopep8",
    "python.linting.mypyEnabled": true,
    "python.linting.enabled": true,
    ```

    Python: Language Server -> Default
    Python: Auto Update Language Server -> Checked

    ```
    workbench.desktop.main.js:62 [Extension Host] (node:7509) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.(Use `Code Helper (Renderer) --trace-deprecation ...` to show where the warning was created)
S @ workbench.desktop.main.js:62
workbench.desktop.main.js:2897 [GitHub.vscode-pull-request-github]: `remoteHub/pullRequest` is not a valid menu identifier
_logMessageInConsole @ workbench.desktop.main.js:2897
workbench.desktop.main.js:1733 Overwriting grammar scope name to file mapping for scope source.sql.
Old grammar file: file:///Applications/Visual%20Studio%20Code.app/Contents/Resources/app/extensions/sql/syntaxes/sql.tmLanguage.json.
New grammar file: file:///Users/sam/.vscode/extensions/mtxr.sqltools-0.23.0/language/sql.tmLanguage.json
register @ workbench.desktop.main.js:1733
workbench.desktop.main.js:749 𝗛𝗶𝗴𝗵𝗹𝗶𝗴𝗵𝘁 - 𝗙𝘂𝗻𝗱𝗿𝗮𝗶𝘀𝗶𝗻𝗴 𝗔𝗻𝗻𝗼𝘂𝗻𝗰𝗲𝗺𝗲𝗻𝘁: We are collecting some money to allow for further development, if you find this extension useful please please please consider donating to it and be part of something amazing!
onDidChangeNotification @ workbench.desktop.main.js:749
workbench.desktop.main.js:749 The Python Tools server crashed 5 times in the last 3 minutes. The server will not be restarted.
onDidChangeNotification @ workbench.desktop.main.js:749
workbench.html:1 Access to XMLHttpRequest at 'https://bingsettingssearch.trafficmanager.net/api/Search' from origin 'vscode-file://vscode-app' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
workbench.desktop.main.js:630  INFO Setting search error: XHR failed
bingsettingssearch.trafficmanager.net/api/Search:1 Failed to load resource: net::ERR_FAILED
workbench.html:1 Access to XMLHttpRequest at 'https://bingsettingssearch.trafficmanager.net/api/Search' from origin 'vscode-file://vscode-app' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
workbench.desktop.main.js:630  INFO Setting search error: XHR failed
bingsettingssearch.trafficmanager.net/api/Search:1 Failed to load resource: net::ERR_FAILED
workbench.html:1 Access to XMLHttpRequest at 'https://bingsettingssearch.trafficmanager.net/api/Search' from origin 'vscode-file://vscode-app' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
workbench.desktop.main.js:630  INFO Setting search error: XHR failed
bingsettingssearch.trafficmanager.net/api/Search:1 Failed to load resource: net::ERR_FAILED
workbench.html:1 Access to XMLHttpRequest at 'https://bingsettingssearch.trafficmanager.net/api/Search' from origin 'vscode-file://vscode-app' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
workbench.desktop.main.js:630  INFO Setting search error: XHR failed
bingsettingssearch.trafficmanager.net/api/Search:1 Failed to load resource: net::ERR_FAILED
DevTools failed to load source map: Could not load content for https://ticino.blob.core.windows.net/sourcemaps/3866c3553be8b268c8a7f8c0482c0c0177aa8bfa/core/vs/workbench/workbench.desktop.main.js.map: Load canceled due to load timeout

@samgermain what you are seeing there looks like a network issue. and seems to be related to mtxr.sqltools-0.23.0.


Migrate playground to TypeScript

Starts work on #1242, by migrating the Playground to TypeScript.
These are the steps I took to do the migration:

Add simple tsconfig.json and eslint rules, and installed dependencies.
Update the files names with Git to preserve the commit histories:

for i in $(find ./packages/$directory -iname "*.js" -not -path "*__tests__*" -not -path "*dist*");
    do git mv "$i" "$(echo $i | rev | cut -d '.' -f 2- | rev).ts";
done
for i in $(find ./packages/$directory -iname "*.jsx" -not -path "*__tests__*" -not -path "*dist*");
    do git mv "$i" "$(echo $i | rev | cut -d '.' -f 2- | rev).tsx";
done

Run migration scripts from @khanacademy (this added some new lines in places):

for i in $(find ./packages/$directory -iname "*.ts" -not -path "*__tests__*" -not -path "*dist*");
    do @khanacademy/flow-to-ts --write  "**/*.ts";
done
for i in $(find ./packages/$directory -iname "*.tsx" -not -path "*__tests__*" -not -path "*dist*");
    do @khanacademy/flow-to-ts --write "**/*.tsx";
done

Run npm run prettier:fix.
Remove @flow strict mentions.
Manually fix new TS errors which prevented the Vite app from building.

TODO
There are around 500 new TS lint errors to fix with the config set to strict. Fun times! We're not linting for these yet, but they all seem like worthwhile fixes.

None of the CI tasks ran?

None of the CI tasks ran?

No idea what happened there. Another push though and they're working again.


Use framebuffer line to improve performance

Currently updates to the frame buffer pain the pixels individually even though the painting can be expressed by a single line.
We should make a single line call with the two coordinates reducing updates and improving performance.
https://docs.micropython.org/en/latest/library/framebuf.html#framebuf.FrameBuffer.line

I'm not 100% sure that Bresenham's line algorithm will be more performant, but it's easy enough to test.
https://github.com/adafruit/micropython-adafruit-framebuf/blob/master/framebuf.py#L110


API support dblib

Follow up from https://github.com/silverstripe/silverstripe-mssql/issues/32
Will need to be merged up into master.

I think I need an abstract PDO DSN builder. It's getting a bit ridiculous hard-coding all these various configurations into one class.

Could we just accept a string DSN arg?

We could but it would be a little less user friendly to force anyone on PDO to generate their own DSN. It's an option though. ;)


Docs / fix typos

Fixes some docs typos.

Also small question:
https://github.com/reagento/dishka/blob/759234c87aa96f8a3c5cd6b5714cca8dc71c9e6a/docs/advanced/context.rst?plain=1#L11
Looks like the second sentence is not full.
Would you like to remove it or finish the initial idea?

@Tishka17 , please, review.

Thank you, I just removed that sentence


fix: conflict error

Like https://github.com/codepunkt/webpack-license-plugin/issues/581, https://github.com/codepunkt/webpack-license-plugin/issues/564 and https://github.com/codepunkt/webpack-license-plugin/issues/491 I recently ran into the ERROR in Conflict: Multiple assets emit different content to the same filename error. In my case it happend after I added the mini-css-extract-plugin to my webpack 5 config. After some experimenting I discovered that the error occurs when a combination of mini-css-extract-plugin, html-webpack-plugin and webpack-license-plugin is used (a full reproduction project can be found here). It turns out that both mini-css-extract-plugin and html-webpack-plugin spawn child compilers and webpack-license-plugin gets called by them. My best guess is that the error occurs because there are now two child compilations each containing an asset called oss-licenses.json (you can see the contents of these in the reproduction project).
This PR fixes that by checking if handleChunkAssetOptimization is called by a child compiler. If that is the case, the filenames are saved but no files are being written yet. writeLicenseFiles is only called with the list of all filenames if the current compiler is the root compiler.

Codecov Report

Merging #619 (747dfbe) into main (b7e07f3) will not change coverage.
The diff coverage is 100.00%.

@@            Coverage Diff            @@
##              main      #619   +/-   ##
=========================================
  Coverage   100.00%   100.00%
=========================================
  Files           15        15
  Lines          277       281    +4
  Branches        25        30    +5
=========================================
+ Hits           277       281    +4

Impacted Files
Coverage Δ

src/WebpackLicensePlugin.ts
100.00% <100.00%> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update b7e07f3...747dfbe. Read the comment docs.

@WIStudent This is nice! However, I'm unsure if this is mergeable because I don't know if there are legitimate configuration examples where the webpack compile step spawns child compilers whose dependencies/modules/chunks should be part of the license analysis. If this is possible, we can not simply discard everything but the root compilers compilation.

@codepunkt I am not sure if I understood your concern correctly.
This solution should include the dependencies found by child compilers in the final output.
this.filenames = [...this.filenames, ...chunkIterator.iterateChunks(compilation, chunks)]

merges the dependency filenames of the current compilation with the filenames of the pervious compilations. The final output will be generated usign this combined list when webpack triggers the optimizeChunkAsset hook in the root compiler.
Running this PR against the reproduction repo produces the follwing:
After the html-webpack-plugin child compiler is done this.filenames includes:
 [
  'data:text/javascript,__webpack_public_path__ = __webpack_base_uri__ = htmlWebpackPluginPublicPath;',
  'X:\\PRPL\\webpack-license-plugin-conflict-issue\\node_modules\\html-webpack-plugin\\default_index.ejs',
  'data:text/javascript,__webpack_public_path__ = __webpack_base_uri__ = htmlWebpackPluginPublicPath;',
  'X:\\PRPL\\webpack-license-plugin-conflict-issue\\node_modules\\html-webpack-plugin\\default_index.ejs'
]

After the mini-css-extract-plugin child compiler:
 [
  'data:text/javascript,__webpack_public_path__ = __webpack_base_uri__ = htmlWebpackPluginPublicPath;',
  'X:\\PRPL\\webpack-license-plugin-conflict-issue\\node_modules\\html-webpack-plugin\\default_index.ejs',
  'data:text/javascript,__webpack_public_path__ = __webpack_base_uri__ = htmlWebpackPluginPublicPath;',
  'X:\\PRPL\\webpack-license-plugin-conflict-issue\\node_modules\\html-webpack-plugin\\default_index.ejs',
  'X:\\PRPL\\webpack-license-plugin-conflict-issue\\src\\style.css',
  'X:\\PRPL\\webpack-license-plugin-conflict-issue\\node_modules\\css-loader\\dist\\runtime\\api.js',
  'X:\\PRPL\\webpack-license-plugin-conflict-issue\\src\\style.css'
]

After the root compiler:
[
  'data:text/javascript,__webpack_public_path__ = __webpack_base_uri__ = htmlWebpackPluginPublicPath;',
  'X:\\PRPL\\webpack-license-plugin-conflict-issue\\node_modules\\html-webpack-plugin\\default_index.ejs',
  'data:text/javascript,__webpack_public_path__ = __webpack_base_uri__ = htmlWebpackPluginPublicPath;',
  'X:\\PRPL\\webpack-license-plugin-conflict-issue\\node_modules\\html-webpack-plugin\\default_index.ejs',
  'X:\\PRPL\\webpack-license-plugin-conflict-issue\\src\\style.css',
  'X:\\PRPL\\webpack-license-plugin-conflict-issue\\node_modules\\css-loader\\dist\\runtime\\api.js',
  'X:\\PRPL\\webpack-license-plugin-conflict-issue\\src\\style.css',
  'X:\\PRPL\\webpack-license-plugin-conflict-issue\\src\\style.css',
  'X:\\PRPL\\webpack-license-plugin-conflict-issue\\src\\index.js',
  'X:\\PRPL\\webpack-license-plugin-conflict-issue\\src\\index.js'
]

The final oss-licenses.json file:
[
  {
    "name": "css-loader",
    "version": "6.2.0",
    "author": "Tobias Koppers @sokra",
    "repository": null,
    "source": "https://registry.npmjs.org/css-loader/-/css-loader-6.2.0.tgz",
    "license": "MIT",
    "licenseText": "Copyright JS Foundation and other contributors\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "name": "html-webpack-plugin",
    "version": "5.3.2",
    "author": "Jan Nicklas<EMAIL_ADDRESS>(https://github.com/jantimon)",
    "repository": null,
    "source": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.3.2.tgz",
    "license": "MIT",
    "licenseText": "Copyright JS Foundation and other contributors\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  }
]

Including css-loader and html-webpack-plugin in oss-licenses.json makes sence because both these webpack plugins end up injecting some of their code into the final compilation.

Just a small update, using Set instead of Array for filenames to avoid unnecessary duplicate entries. The set looks like this after each compiler:
After html-webpack-plugin:
Set(2) {
  'data:text/javascript,__webpack_public_path__ = __webpack_base_uri__ = htmlWebpackPluginPublicPath;',
  '/home/tobias/node-projects/webpack-license-plugin-conflict-issue/node_modules/html-webpack-plugin/default_index.ejs'
}

After mini-css-extract-plugin:
Set(4) {
  'data:text/javascript,__webpack_public_path__ = __webpack_base_uri__ = htmlWebpackPluginPublicPath;',
  '/home/tobias/node-projects/webpack-license-plugin-conflict-issue/node_modules/html-webpack-plugin/default_index.ejs',
  '/home/tobias/node-projects/webpack-license-plugin-conflict-issue/src/style.css',
  '/home/tobias/node-projects/webpack-license-plugin-conflict-issue/node_modules/css-loader/dist/runtime/api.js'
}

After root compiler:
Set(5) {
  'data:text/javascript,__webpack_public_path__ = __webpack_base_uri__ = htmlWebpackPluginPublicPath;',
  '/home/tobias/node-projects/webpack-license-plugin-conflict-issue/node_modules/html-webpack-plugin/default_index.ejs',
  '/home/tobias/node-projects/webpack-license-plugin-conflict-issue/src/style.css',
  '/home/tobias/node-projects/webpack-license-plugin-conflict-issue/node_modules/css-loader/dist/runtime/api.js',
  '/home/tobias/node-projects/webpack-license-plugin-conflict-issue/src/index.js'
}

Another update: I think it is better to raise an error instead of silently ignoring licenses. If handleChunkAssetOptimization is called again after the license files were created the following error will be shown (including a log of encountered compilers for better debugability):
WebpackLicensePlugin: Found licenses after license files were already created.
If you see this message, you ran into an edge case we thought would not happen. Please open an isssue at https://github.com/codepunkt/webpack-license-plugin/issues with details of your webpack configuration so we can invastigate it further.
compiler: mockCompiler1, isChild: false
compiler: mockCompiler2, isChild: true

To not break in watch mode the state that keeps track of the handleChunkAssetOptimization calls is reset when the watchRun hook is triggered.


eslint

I recommend reviewing this commit-by-commit
https://github.com/raylu/craftingway/actions/runs/4728566691
I didn't know what to do about @typescript-eslint/no-empty-function. options are ignore globally, write a comment about why it's empty, or leave as-is

I didn't know what to do about @typescript-eslint/no-empty-function. options are ignore globally, write a comment about why it's empty, or leave as-is

Ignoring the line is probably fine. This is a very nice PR, thank you!