Fix squashing the error (vol = nil) when doing a volume create

The issue https://github.com/emccode/polly/issues/88 was reported in Polly, but the root cause exists in rexray.
root@node1:/tmp# rexray volume create --volumename=haha
FATA[0001] error creating new volume                     inner.size=0 inner.volumeName=haha inner.provider=virtualbox status=500

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

Merging [#478][cc-pull] into [master][cc-base-branch] will not change coverage

@@             master       #478   diff @@
==========================================
  Files             2          2
  Lines           187        187
  Methods           0          0
  Messages          0          0
  Branches          0          0
==========================================
  Hits             86         86
  Misses          101        101
  Partials          0          0

[][cc-pull]

Powered by Codecov. Last updated by [2ee18a5...c4a3f54][cc-compare]
[cc-base-branch]: https://codecov.io/gh/emccode/rexray/branch/master?src=pr
[cc-compare]: https://codecov.io/gh/emccode/rexray/compare/2ee18a5be342ce038d65e9918f18fd22c0313fd3...c4a3f54c4ff4f30c24de59c114ebfb2a4156ed26
[cc-pull]: https://codecov.io/gh/emccode/rexray/pull/478?src=pr

@dvonthenen I am not quite sure I understand the fix here. Can you provide the result of the fix that you applied in terms of the response after the fix?
It just doesn't make sense that this would provide the fix for the squashing errors problem.

Hi @clintonskitson,
It's not about squashing errors actually. The title is misleading. Let's jump on a hangout?

In a nutshell, the errors sent back are expected to be an object serialized in JSON. The issue is we never get a volume object which in turn only gives us a generic error in non-object form (just a string error). The deserialization fails on the client which gives us the "http error".
If that still doesnt make any sense, we can talk about it on hangouts later like Andrew was trying to organize.

Since @clintonskitson isn't available to V-chat at the moment, I'll do my best to explain the issue here. Clint, what David and I found was that the original logic of the Create command was preventing the remote Create call if the volume name was not provided:
} else if c.volumeName != "" {

The issue is that if the remote call is not performed then neither the err or volume variables are assigned.
Thus since there is no error, this is hit:
			if err != nil {
				log.Fatal(err)
			}

			out, err := c.marshalOutput(&volume)
			if err != nil {
				log.Fatal(err)
			}
			fmt.Println(out)

The address of the volume variable is marshalled to YAML/JSON and emitted to Stdout. Since nil is a perfectly valid value to marshal, and it's marshaled as the string <nil>, that's what was being printed and displayed to the user. Here's an example on the Golang Playground:
package main

import (
	"fmt"
)

func main() {
	fmt.Println(nil)
}

The above code prints <nil> to Stdout.
What @dvonthenen and I decided was that we should only do variable and flag checking locally IFF it is used to determine the remote route. For example:
			if c.volumeID != "" && c.volumeName != "" {
				volume, err = c.r.Storage().VolumeCopy(
					c.ctx, c.volumeID, c.volumeName, opts.Opts)
			} else if c.snapshotID != "" && c.volumeName != "" {
				volume, err = c.r.Storage().VolumeCreateFromSnapshot(
					c.ctx, c.snapshotID, c.volumeName, opts)
			} else {
				volume, err = c.r.Storage().VolumeCreate(
					c.ctx, c.volumeName, opts)
			}

In the above snippet if the volumeID and volumeName are both set the VolumeCopy route is used. If the snapshotID and volumeName fields are set then the VolumeCreateFromSnapshot route is used instead.
The final condition is simply an else block that defaults to the VolumeCreate route. If the volumeName value is not set then the REMOTE server will send back the appropriate error, and it will be displayed to the user.
tl;dr - the local client should not be responsible for input validation unless it affects the route; that job belongs to the libStorage API.

@dvonthenen - Your comment isn't quite accurate. The issue isn't anything to do with not getting a volume object -- the issue is what I described above -- the logic to create a volume was simply never being invoked since we were validating a the volumeName locally instead of deferring that to the server.
Anyway, this code should fix the issue.


WIN64: OpenBLAS ctest with errors when linked against libopenblas.dll but works if build statically.

This is with Windows 64 bit, Msys2 gcc-12. (Both: UCRT and MSVCRT)
I tested for curiosity what happens if the test programs located in ctest are dynamically linked against libopenblas.dll. To my surprise the blat2 and blat3 test mostly failed. If the test programs are statically linked with the static import library all is fine.
(BTW: exclusively statically linked test programs are being build with make.)
This results is surprising as the libopenblas.dll itself is basically built from the static import library with the addition of dllinit.obj that is responsible to call gotoblas_init or gotoblas_dynamic_init.
For now I didn't perform further tests with the test or utest programs.

Weird, and does not even look like missed initialization. ABI mismatch between the C and Fortran code parts perhaps - could the dynamic version be picking up a different libgfortran?

Unfortunately not. I tested this on two computers with a clean Msys2 install. And traced the linking process with -Wl,-t.
All this reminds me a little bit on the Windows fmod error two years ago. (staled FPU state)

I would like to add that I have exactly the same experience with an own compiled OpenBLAS install.

Well of course the error message is similar, as it simply tells you that an input argument is wrong - but back then it was something (mis)computed in an earlier step, here it is one of the dimensions that is wrong (or passed wrongly). If it isn't a wrong-generation libgfortran getting loaded, having only parts of the code built with INTERFACE64 would probably cause similar effects (but I have no idea if/how that could have happened)

Oh wait, there is something else going wrong. The illegal parameter errors are expected at this point in the tests, it is only that the test framework does not recognize that the invalid values were caught and reported correctly. Are you building with the gfortran compiler at all, or are you using the f2c-converted fallbacks that were added in 0.3.21 ? I suspect it might be the latter with some f2c-induced quirk, though that would not immediately explain why everything works in the static build.

This is a limitation in windows. The tests rely on a test specific xerbla to be used to catch these illegal parameters given in tests.
This works fine on Unix where the routines in the shared library use the xerbla in the executable and not the xerbla in the shared library. However on windows this is not the case and xerbla in the DLL is used leading to the error messages.

@isuruf, xzcblat3 < zin3 is using cblas_xerbla. From the analysis of the linker map it doesn't seems to use the openblas version.
I have now a debug build of everything. Unfortunately gdb doesn't seem to work with these binaries (usually no problem) so I have to dig into this further.

Oops, thanks @isuruf. Guess I should not try to do half-assed support when my f(r)oggy brain is completely elsewhere. (And it may make sense to add a short comment to the Makefile ?)
@carlkl not sure what the linker map tells you, but the On entry to... message is generated by the xerbla in the dll (which only prints error messages) rather than the local one in the testcase (which sets a global variable depending on whether the BLAS function returned the expected error code)

xzcblat3.exe i.e. is not linked against cblas_xerbla from libopenblas.dll. However, the test programs are linked against the cblas lapack routines in libopenblas.dll amd these routines are using cblas_xerbla from libopenblas.dll. There is no easy way to prevent this.
Lessons learned: On the windows platform these tests needs to be built staticcally against libopenblas. Thanks for this insight @isuruf

Since all this is considered as expected on Windows, I will close this issue.


add fn free_user_texture as egui does.

egui_texture should be dropped on drop as well.

Thanks again :)
You're more knowledgeable about egui, would you mind if I give you direct write access to the repo?

"direct write access", my pleasure, i mind that @MoAlyousef :D


[5.6] Breaking the loop when abstract alias is found

Thanks for the PR. Is this not a breaking change though?

What does this fix please?

Prevents unnecessary iterations?

I think this is fine. The same alias shouldn't appear multiple times in the aliases array.

@tillkruss Exactly.Like @thecrypticace said, same alias shouldn't appear multiple times.


Expose the type Column from the table

Description
Hello 👋,
Do you think it could be possible to export the type Column, https://github.com/nuxt/ui/blob/dev/src/runtime/components/data/Table.vue#L121?
Additional context
No response

I have the same need. Until it is available you can get it with :
type Columns = InstanceType<typeof Table>['$props']['columns']

Fixed by https://github.com/nuxt/ui/commit/c36964b5eacbd61a661f02953f0297a390fd1d34.


moment.isDSTShifted() not reporting expected values

I'm having issues with isDSTShifted() working as expected. Please see the following fiddle:
http://jsfiddle.net/natewittstock/s2uf18ea/1/
My Output:
// Chrome
2015-03-08 1:30:
	2015-03-08T01:30:00-08:00	false
2015-03-08 2:30:
	2015-03-08T03:30:00-07:00	false
2015-03-08 3:30:
	2015-03-08T03:30:00-07:00	false

// Firefox
2015-03-08 1:30:
	2015-03-08T01:30:00-08:00	false
2015-03-08 2:30:
	2015-03-08T01:30:00-08:00	false
2015-03-08 3:30:
	2015-03-08T03:30:00-07:00	false

// nodejs (entered in REPL as below)
> moment('2015-03-08 1:30', 'YYYY-MM-DD HH:mm').format()
'2015-03-08T01:30:00-08:00'
> moment('2015-03-08 2:30', 'YYYY-MM-DD HH:mm').format()
'2015-03-08T01:30:00-08:00'
> moment('2015-03-08 3:30', 'YYYY-MM-DD HH:mm').format()
'2015-03-08T03:30:00-07:00'
> moment('2015-03-08 1:30', 'YYYY-MM-DD HH:mm').isDSTShifted()
false
> moment('2015-03-08 2:30', 'YYYY-MM-DD HH:mm').isDSTShifted()
false
> moment('2015-03-08 3:30', 'YYYY-MM-DD HH:mm').isDSTShifted()
false

I'd expect the calls with 2015-03-08 2:30 to show true for calls to isDSTShifted()
I'm seeing this issue on:

nodejs v0.10.35
Chrome 39.0.2171.95 (64-bit)
Firefox 34.0.5

…all on Mac OS X 10.10.1; reproducible across varying systems of relatively the same spec (either OS X 10.9 or 10.10; latest-ish of Chrome, as confirmed by my co-workers)
My system's timezone is being set automatically by the Apple preference pane, and reports "Time Zone: Pacific Standard Time" and "Closest City: Portland, OR - United States"
Can confirm the Javascript date object thinks I'm in PST, via
> new Date()
Fri Jan 02 2015 14:25:10 GMT-0800 (PST)

Let me know if there's any other information I can give you. Thanks!

Looks like a bug to me. isDSTShifted() doesn't really have test coverage because we can't make a reproducible test for it. @ichernev: looks like this broke because we no longer leave _a attached to the moment object.

Thanks for the confirmation @icambron!


[coap] ensure to set token on next block request

This commit updates PrepareNextBlockRequest() to set the token
on new request message from old request.

Should help resolve https://github.com/openthread/openthread/issues/7976.
Thanks @dilipzi for finding and reporting this.

We can close this as per discussion in https://github.com/openthread/openthread/issues/7976.


[FEATURE] Add actions-localize-free & actions-localize-connected

Please have a look at the proposed images, they are very small, and almost impossible to see a difference in small size (16x16px). In addition, the icons currently are blurry and the outlines are not set on pixels.

Hi!
I just commited 2 new proposals more appropriated for small size and action buttons, not blurry, and outlines set on pixel.
I hope it will better fit.
Thank you in advance,
Rachel


clicking an attribute on the identities list page leads to a broken route

Using ZAC version 3.4.5
Click on any attribute on the Identities list page, and it leads to a stubbed-in "page-not-found works!" component. I suspect the issue is in the route generation. The route changes to this: /zac/identitiesDz7eGlInc- which looks like it might be missing a slash. When I click on the same identity's name I get the same route, but with a slash /zac/identities/Dz7eGlInc-

This should hopefully be resolved in the 3.4.6 release that went out today. If you're still seeing it though after you update I can take another look.

Should be resolved as of 3.4.6


Add detective to saltern

About the PR

Adds the detective to saltern, along with their office.
Why / Balance

Sec needs the detective kind of.
Technical details

Media

[X] I have added screenshots/videos to this PR showcasing its changes ingame, or this PR does not require an ingame showcase

Breaking changes

might break some saltern stuff? dunno.
Changelog

:cl:
Added the detective to saltern.

some other branch leaked into this one somehow, so thats what the banish commit was about.

did you remove det stuff from sec interrogation room too

No more jensen coat in that room. Wah


🐛 Bug Report: Sentry plugin fails "Missing required config value at 'sentry.organization'"

📜 Description
Sentry plugin doesn't find the organization. I have added it in app-config.yaml following this tutorial
The error:
Error: Missing required config value at 'sentry.organization'
    at E.getString (https://backstage.XXXXX/static/module-backstage.aa1cee7f.js:9:32359)
    at Object.factory (https://backstage.XXXXX/static/module-backstage.aa1cee7f.js:61:38234)
    at rt.load (https://backstage.XXXXX/static/module-backstage.aa1cee7f.js:9:35074)
    at rt.get (https://backstage.XXXXX/static/module-backstage.aa1cee7f.js:9:34829)
    at t (https://backstage.XXXXX/static/module-backstage.aa1cee7f.js:40:86333)
    at tt (https://backstage.XXXXX/static/module-backstage.aa1cee7f.js:61:37418)
    at Gl (https://backstage.XXXXX/static/module-react-dom.d69a898f.js:12:52799)
    at hs (https://backstage.XXXXX/static/module-react-dom.d69a898f.js:16:8596)
    at cs (https://backstage.XXXXX/static/module-react-dom.d69a898f.js:16:930)
    at Za (https://backstage.XXXXX/static/module-react-dom.d69a898f.js:16:861)

👍 Expected behavior
It should work following the plugin tutorial
👎 Actual Behavior with Screenshots
It actually doesn't work. It complains about the missing organization
👟 Reproduction steps
Follow all the steps of the tutorial
📃 Provide the context for the Bug.
No response
🖥 Your Environment
No response
👀 Have you spent some time to check if this bug has been raised before?

[X] I checked and didn't find similar issue

🏢 Have you read the Code of Conduct?

[X] I have read the Code of Conduct

Are you willing to submit PR?
None

In the read me, step 3 says "add the proxy config" but the example adds both a proxy config and the sentry.organization config key. Just to triple check, Can you confirm you've added it ? Wonder if the instructions could use a bit of improvement.

Hi @adamdmharvey
Yes, I have configured the proxy and the organization. And also I have tested adding the organization in the annotations of the component.
      sentry:
        organization: XXXXXXXX

      proxy:
        '/sentry/api':
          target: https://sentry.io/api/
          allowedMethods: ['GET']
          headers:
            Authorization: Bearer ${SENTRY_TOKEN}

Also I have tested the token doing a curl to sentry's API to get the info of the project.
I have run the config:check with the strict mode I have several errors, but most of them are in plugins that are working.
Error: Configuration does not match schema

  Config must NOT have additional properties { additionalProperty=organization } at
  Config must NOT have additional properties { additionalProperty=sentry } at
  Config must NOT have additional properties { additionalProperty=sonarqube } at
  Config must NOT have additional properties { additionalProperty=argocd } at
  Config must NOT have additional properties { additionalProperty=host } at /backend/database/connection
  Config must NOT have additional properties { additionalProperty=port } at /backend/database/connection
  Config must NOT have additional properties { additionalProperty=user } at /backend/database/connection
  Config must be string { type=string } at /backend/database/connection
  Config must match a schema in anyOf {  } at /backend/database/connection
  Config must NOT have additional properties { additionalProperty=providers } at /catalog
  Config must NOT have additional properties { additionalProperty=PRIVATE-TOKEN } at /proxy//gitlabci/headers
  Config must be string { type=string } at /proxy//gitlabci
  Config must match a schema in anyOf {  } at /proxy//gitlabci
  Config must NOT have additional properties { additionalProperty=secure } at /proxy//argocd/api
  Config must be string { type=string } at /proxy//argocd/api
  Config must match a schema in anyOf {  } at /proxy//argocd/api
  Config must NOT have additional properties { additionalProperty=auth } at /proxy//sonarqube
  Config must be string { type=string } at /proxy//sonarqube
  Config must match a schema in anyOf {  } at /proxy//sonarqube

I am having the same issue in all plugins that don't have backend config.

Sentry
Grafana
Opsgenie

My configuration
Loaded config from app-config-from-configmap.yaml, env
app:
  title: xxxxx Backstage
  baseUrl: https://backstage.xxxxx
backend:
  baseUrl: https://backstage.xxxxx
  listen:
    port: 7007
  csp:
    connect-src:
      - "'self'"
      - "http:"
      - "https:"
  database:
    client: pg
    connection:
      host: postgresql.xxxxx
      port: "5432"
      user: xxxxx
      password: <secret>
    plugin:
      auth:
        connection:
          database: backstage_auth
      catalog:
        connection:
          database: backstage_plugin_catalog
organization:
  name: xxxxx
sentry:
  organization: xxxxx
sonarqube:
  baseUrl: https://sonar.xxxxx
  apiKey: xxxxx
proxy:
  /sentry/api:
    target: https://sentry.io/api/
    allowedMethods:
      - GET
    headers:
      Authorization: <secret>
  /gitlabci:
    target: https://gitlab.com/api/v4
    allowedMethods:
      - GET
    headers:
      PRIVATE-TOKEN: xxxxx
  /argocd/api:
    target: https://argocd.xxxxx/api/v1/
    changeOrigin: true
    secure: false
    headers:
      Authorization: <secret>
  /sonarqube:
    target: https://sonar.xxxxx/api
    allowedMethods:
      - GET
    auth: xxxxx
  /grafana/api:
    target: https://grafana.xxxxx/
    headers:
      Authorization: <secret>
  /opsgenie/api:
    target: https://api.eu.opsgenie.com
    headers:
      Authorization: <secret>
opsgenie:
  domain: https://xxxxx.app.eu.opsgenie.com
argocd:
  appLocatorMethods:
    - type: config
      instances:
        - name: devops
          url: https://argocd.xxxxx
          token: xxxxx
grafana:
  domain: https://grafana.xxxxx/
  unifiedAlerting: "false"
techdocs:
  builder: local
  generator:
    runIn: local
  publisher:
    type: local
integrations:
  gitlab:
    - host: gitlab.com
      token: <secret>
auth:
  environment: production
  providers:
    google:
      production:
        clientId: xxxxx
        clientSecret: <secret>
catalog:
  rules:
    - allow:
        - Component
        - API
        - Location
        - Template
  providers:
    gitlab:
      gitlab_xxxxx_catalog:
        host: gitlab.com
        orgEnabled: true
        group: xxxxx
        groupPattern: "[\\s\\S]*"
        branch: main
        fallbackBranch: master
        entityFilename: catalog-info.yaml
        schedule:
          frequency:
            minutes: 30
          timeout:
            minutes: 3
      gitlab_xxxxx_api:
        host: gitlab.com
        orgEnabled: true
        group: xxxxx/backend
        groupPattern: "[\\s\\S]*"
        branch: main
        fallbackBranch: master
        entityFilename: api-info.yaml
        schedule:
          frequency:
            minutes: 30
          timeout:
            minutes: 3
  locations:
    - type: url
      target: https://gitlab.com/xxxxx/devops/backstage/-/blob/main/groups.yaml
      rules:
        - allow:
            - Group

I am deploying it in kubernetes cluster
Thanks!

I think it is related to this issue #6476
It would be great to document it in the plugin installation document. I don't know which is the best way to fix this.

@OrkoHunter could you help me :)

Just created a new backstage app, added the sentry plugin and the sentry.organization config and it shows up in the app. I know this doesn't help, but shows that this is not broken in the default scenario.

Hi @OrkoHunter ,
This is the schema
Loaded config from app-config.yaml, env
$schema: https://backstage.io/schema/config-v1
title: Application Configuration Schema
type: object
required:
  - app
  - backend
  - techdocs
definitions:
  "Partial<{[key:string]:unknown;password:string;}>":
    type: object
    properties:
      password:
        description: Password that belongs to the client User
        visibility: secret
        type: string
  "Partial<{[key:string]:string;Authorization:string;authorization:string;'X-Api-Key':string;'x-api-key':string;}>":
    type: object
    properties:
      Authorization:
        visibility: secret
        type: string
      authorization:
        visibility: secret
        type: string
      X-Api-Key:
        visibility: secret
        type: string
      x-api-key:
        visibility: secret
        type: string
properties:
  app:
    type: object
    required:
      - baseUrl
    properties:
      baseUrl:
        type: string
        visibility: frontend
      title:
        type: string
        visibility: frontend
      datadogRum:
        type: object
        description: Datadog RUM events configuration
        required:
          - clientToken
          - applicationId
        properties:
          env:
            type: string
            visibility: frontend
            description: Environment for Datadog RUM events
          clientToken:
            type: string
            visibility: frontend
            description: clientToken for Datadog RUM events
          applicationId:
            type: string
            visibility: frontend
            description: applicationId for Datadog RUM events
          site:
            type: string
            visibility: frontend
            description: site for Datadog RUM events
      listen:
        type: object
        description: Listening configuration for local development
        properties:
          host:
            type: string
            visibility: frontend
            description: The host that the frontend should be bound to. Only used for local
              development.
          port:
            type: number
            visibility: frontend
            description: The port that the frontend should be bound to. Only used for local
              development.
      https:
        type: object
        description: Only used for local development. The https object is passed to
          webpack in order to enable using https on localhost.
        properties:
          certificate:
            type: object
            description: Parent object containing certificate and the private key
            required:
              - key
              - cert
            properties:
              key:
                type: string
                visibility: secret
                description: Https Certificate private key. Use $file to load in a file
              cert:
                type: string
                visibility: secret
                description: Https Certificate. Use $file to load in a file
  backend:
    type: object
    required:
      - baseUrl
      - database
      - listen
    properties:
      auth:
        description: Backend configuration for when request authentication is enabled
        type: object
        properties:
          keys:
            description: Keys shared by all backends for signing and validating backend
              tokens.
            type: array
            items:
              type: object
              required:
                - secret
              properties:
                secret:
                  description: >-
                    Secret for generating tokens. Should be a base64 string,
                    recommended

                    length is 24 bytes.
                  visibility: secret
                  type: string
      baseUrl:
        type: string
      listen:
        description: Address that the backend should listen to.
        anyOf:
          - type: object
            properties:
              host:
                description: Address of the interface that the backend should bind to.
                type: string
              port:
                description: Port that the backend should listen to.
                type:
                  - string
                  - number
          - type: string
      https:
        description: >-
          HTTPS configuration for the backend. If omitted the backend will serve
          HTTP.

          Setting this to `true` will cause self-signed certificates to be generated, which

          can be useful for local development or other non-production scenarios.
        anyOf:
          - type: object
            properties:
              certificate:
                description: Certificate configuration
                type: object
                required:
                  - cert
                  - key
                properties:
                  cert:
                    description: PEM encoded certificate. Use $file to load in a file
                    type: string
                  key:
                    description: PEM encoded certificate key. Use $file to load in a file.
                    visibility: secret
                    type: string
          - enum:
              - true
            type: boolean
      database:
        description: Database connection configuration, select base database type using
          the `client` field
        type: object
        required:
          - client
          - connection
        properties:
          client:
            description: Default database client to use
            enum:
              - better-sqlite3
              - pg
              - sqlite3
            type: string
          connection:
            description: Base database connection string, or object with individual
              connection properties
            visibility: secret
            anyOf:
              - $ref: "#/definitions/Partial<{[key:string]:unknown;password:string;}>"
              - type: string
          prefix:
            description: Database name prefix override
            type: string
          ensureExists:
            description: >-
              Whether to ensure the given database exists by creating it if it
              does not.

              Defaults to true if unspecified.
            type: boolean
          pluginDivisionMode:
            description: >-
              How plugins databases are managed/divided in the provided database
              instance.

              `database` -> Plugins are each given their own database to manage their schemas/tables.

              `schema` -> Plugins will be given their own schema (in the specified/default database)
                          to manage their tables.

              NOTE: Currently only supported by the `pg` client.
            default: database
            enum:
              - database
              - schema
            type: string
          role:
            description: Configures the ownership of newly created schemas in pg databases.
            type: string
          knexConfig:
            description: >-
              Arbitrary config object to pass to knex when initializing

              (https://knexjs.org/#Installation-client). Most notable is the debug

              and asyncStackTraces booleans
            type: object
            additionalProperties: true
          plugin:
            description: Plugin specific database configuration and client override
            type: object
            additionalProperties:
              type: object
              properties:
                client:
                  description: Database client override
                  enum:
                    - better-sqlite3
                    - pg
                    - sqlite3
                  type: string
                connection:
                  description: Database connection string or Knex object override
                  visibility: secret
                  anyOf:
                    - type: object
                      properties: {}
                      additionalProperties: true
                    - type: string
                ensureExists:
                  description: >-
                    Whether to ensure the given database exists by creating it
                    if it does not.

                    Defaults to base config if unspecified.
                  type: boolean
                knexConfig:
                  description: >-
                    Arbitrary config object to pass to knex when initializing

                    (https://knexjs.org/#Installation-client). Most notable is the

                    debug and asyncStackTraces booleans.

                    This is merged recursively into the base knexConfig
                  type: object
                  additionalProperties: true
                role:
                  description: Configures the ownership of newly created schemas in pg databases.
                  type: string
      cache:
        description: Cache connection configuration, select cache type using the `store`
          field
        anyOf:
          - type: object
            properties:
              store:
                type: string
                enum:
                  - memory
            required:
              - store
          - type: object
            properties:
              store:
                type: string
                enum:
                  - redis
              connection:
                description: A redis connection string in the form
                  `redis://user:pass@host:port`.
                visibility: secret
                type: string
            required:
              - connection
              - store
          - type: object
            properties:
              store:
                type: string
                enum:
                  - memcache
              connection:
                description: A memcache connection string in the form `user:pass@host:port`.
                visibility: secret
                type: string
            required:
              - connection
              - store
      cors:
        type: object
        properties:
          origin:
            anyOf:
              - type: array
                items:
                  type: string
              - type: string
          methods:
            anyOf:
              - type: array
                items:
                  type: string
              - type: string
          allowedHeaders:
            anyOf:
              - type: array
                items:
                  type: string
              - type: string
          exposedHeaders:
            anyOf:
              - type: array
                items:
                  type: string
              - type: string
          credentials:
            type: boolean
          maxAge:
            type: number
          preflightContinue:
            type: boolean
          optionsSuccessStatus:
            type: number
      reading:
        description: >-
          Configuration related to URL reading, used for example for reading
          catalog info

          files, scaffolder templates, and techdocs content.
        type: object
        properties:
          allow:
            description: >-
              A list of targets to allow outgoing requests to. Users will be
              able to make

              requests on behalf of the backend to the targets that are allowed by this list.
            type: array
            items:
              type: object
              required:
                - host
              properties:
                host:
                  description: >-
                    A host to allow outgoing requests to, being either a full
                    host or

                    a subdomain wildcard pattern with a leading `*`. For example `example.com`

                    and `*.example.com` are valid values, `prod.*.example.com` is not.

                    The host may also contain a port, for example `example.com:8080`.
                  type: string
                paths:
                  description: >-
                    An optional list of paths. In case they are present only
                    targets matching

                    any of them will are allowed. You can use trailing slashes to make sure only

                    subdirectories are allowed, for example `/mydir/` will allow targets with

                    paths like `/mydir/a` but will block paths like `/mydir2`.
                  type: array
                  items:
                    type: string
      csp:
        description: >-
          Content Security Policy options.

          The keys are the plain policy ID, e.g. "upgrade-insecure-requests". The

          values are on the format that the helmet library expects them, as an

          array of strings. There is also the special value false, which means to

          remove the default value that Backstage puts in place for that policy.
        type: object
        additionalProperties:
          anyOf:
            - type: array
              items:
                type: string
            - enum:
                - false
              type: boolean
  discovery:
    description: Discovery options.
    type: object
    required:
      - endpoints
    properties:
      endpoints:
        description: |-
          Endpoints

          A list of target baseUrls and the associated plugins.
        type: array
        items:
          type: object
          required:
            - plugins
            - target
          properties:
            target:
              description: >-
                The target baseUrl to use for the plugin

                Can be either a string or an object with internal and external keys.

                Targets with `{{pluginId}}` or `{{ pluginId }} in the url will be replaced with the pluginId.
              anyOf:
                - type: object
                  properties:
                    internal:
                      type: string
                    external:
                      type: string
                  required:
                    - external
                    - internal
                - type: string
            plugins:
              description: Array of plugins which use the target baseUrl.
              type: array
              items:
                type: string
  auth:
    description: Configuration options for the auth plugin
    type: object
    properties:
      environment:
        description: The 'environment' attribute
        visibility: frontend
        type: string
      session:
        type: object
        properties:
          secret:
            description: The secret attribute of session object.
            visibility: secret
            type: string
      keyStore:
        description: To control how to store JWK data in auth-backend
        type: object
        properties:
          provider:
            enum:
              - database
              - firestore
              - memory
            type: string
          firestore:
            type: object
            properties:
              host:
                description: The host to connect to
                type: string
              port:
                description: The port to connect to
                type: number
              ssl:
                description: Whether to use SSL when connecting.
                type: boolean
              projectId:
                description: The Google Cloud Project ID
                type: string
              keyFilename:
                description: |-
                  Local file containing the Service Account credentials.
                  You can omit this value to automatically read from
                  GOOGLE_APPLICATION_CREDENTIALS env which is useful for local
                  development.
                type: string
              path:
                description: The path to use for the collection. Defaults to 'sessions'
                type: string
              timeout:
                description: Timeout used for database operations.

          An undefined list of matchers means match all, an empty list of
          matchers means match none.

          This is commonly used to put in what amounts to an allowlist of kinds
          that regular users of Backstage are permitted to register locations
          for. This can be used to stop them from registering yaml files
          describing for example a Group entity called "admin" that they make
          themselves members of, or similar.
        type: array
        items:
          type: object
          required:
            - allow
          properties:
            allow:
              description: |-
                Allow entities of these particular kinds.

                E.g. ["Component", "API", "Template", "Location"]
              type: array
              items:
                type: string
            locations:
              description: >-
                Limit this rule to a specific location

                Example with a fixed location
                 { "type": "url", "exact": "https://github.com/a/b/blob/file.yaml"}

                Example using a Regex
                 { "type": "url", "pattern": "https://github.com/org/*\/blob/master/*.yaml"}

                Using both exact and pattern will result in an error starting the application
              type: array
              items:
                type: object
                required:
                  - type
                properties:
                  type:
                    description: The type of location, e.g. "url".
                    type: string
                  exact:
                    description: |-
                      The exact location, e.g.
                      "https://github.com/org/repo/blob/master/users.yaml".

                      The exact location can also be used to match on locations
                      that contain glob characters themselves, e.g.
                      "https://github.com/org/*\/blob/master/*.yaml".
                    type: string
                  pattern:
                    description: |-
                      The pattern allowed for the location, e.g.
                      "https://github.com/org/*\/blob/master/*.yaml".
                    type: string
      readonly:
        description: >-
          Readonly defines whether the catalog allows writes after startup.

          Setting 'readonly=false' allows users to register their own components.

          This is the default value.

          Setting 'readonly=true' configures catalog to only allow reads. This can

          be used in combination with static locations to only serve operator

          provided locations. Effectively this removes the ability to register new

          components to a running backstage instance.
        type: boolean
      locations:
        description: >-
          A set of static locations that the catalog shall always keep itself

          up-to-date with. This is commonly used for large, permanent integrations

          that are defined by the Backstage operators at an organization, rather

          than individual things that users register dynamically.

          These have (optional) rules of their own. These override what the global

          rules above specify. This way, you can prevent everybody from register

          e.g. User and Group entities, except for one or a few static locations

          that have those two kinds explicitly allowed.

          For example:

          ```yaml

          rules:
            - allow: [Component, API, Template, Location]
          locations:
            - type: url
              target: https://github.com/org/repo/blob/master/users.yaml
              rules:
                - allow: [User, Group]
            - type: url
              target: https://github.com/org/repo/blob/master/systems.yaml
              rules:
                - allow: [System]
          ```
        type: array
        items:
          type: object
          required:
            - target
            - type
          properties:
            type:
              description: The type of location, e.g. "url".
              type: string
            target:
              description: |-
                The target URL of the location, e.g.
                "https://github.com/org/repo/blob/master/users.yaml".
              type: string
            rules:
              description: |-
                Optional extra rules that apply to this particular location.

                These override the global rules above.
              type: array
              items:
                type: object
                required:
                  - allow
                properties:
                  allow:
                    description: |-
                      Allow entities of these particular kinds.

                      E.g. ["Group", "User"]
                    type: array
                    items:
                      type: string
      orphanStrategy:
        description: >-
          The strategy to use for entities that are orphaned, i.e. no longer
          have

          any other entities or providers referencing them. The default value is

          "keep".
        enum:
          - delete
          - keep
        type: string
  permission:
    description: Configuration options for Backstage permissions and authorization
    type: object
    properties:
      enabled:
        description: >-
          Whether authorization is enabled in Backstage. Defaults to false,
          which means authorization

          requests will be automatically allowed without invoking the authorization policy.
        visibility: frontend
        type: boolean
  proxy:
    description: |-
      A list of forwarding-proxies. Each key is a route to match,
      below the prefix that the proxy plugin is mounted on. It must
      start with a '/'.
    type: object
    additionalProperties:
      anyOf:
        - type: object
          properties:
            target:
              description: Target of the proxy. Url string to be parsed with the url module.
              type: string
            headers:
              description: Object with extra headers to be added to target requests.
              $ref: "#/definitions/Partial<{[key:string]:string;Authorization:string;authoriz\
                ation:string;'X-Api-Key':string;'x-api-key':string;}>"
            changeOrigin:
              description: "Changes the origin of the host header to the target URL. Default:
                true."
              type: boolean
            pathRewrite:
              description: >-
                Rewrite target's url path. Object-keys will be used as RegExp to
                match paths.

                If pathRewrite is not specified, it is set to a single rewrite that removes the entire prefix and route.
              type: object
              additionalProperties:
                type: string
            allowedMethods:
              description: "Limit the forwarded HTTP methods, for example allowedMethods:
                ['GET'] to enforce read-only access."
              type: array
              items:
                type: string
            allowedHeaders:
              description: >-
                Limit the forwarded HTTP methods. By default, only the headers
                that are considered safe for CORS

                and headers that are set by the proxy will be forwarded.
              type: array
              items:
                type: string
          required:
            - target
        - type: string
  scaffolder:
    description: Configuration options for the scaffolder plugin
    type: object
    properties:
      defaultAuthor:
        description: The commit author info used when new components are created.
        type: object
        properties:
          name:
            type: string
          email:
            type: string
      defaultCommitMessage:
        description: The commit message used when new components are created.
        type: string
  search:
    description: Configuration options for the search plugin
    type: object
    properties:
      pg:
        description: Options for PG
        type: object
        properties:
          highlightOptions:
            description: >-
              Options for configuring highlight settings

              See https://www.postgresql.org/docs/current/textsearch-controls.html#TEXTSEARCH-HEADLINE
            type: object
            properties:
              useHighlight:
                description: Used to enable to disable the highlight feature. The default value
                  is true
                type: boolean
              maxWords:
                description: Used to set the longest headlines to output. The default value is
                  35.
                type: number
              minWords:
                description: Used to set the shortest headlines to output. The default value is
                  15.
                type: number
              shortWord:
                description: >-
                  Words of this length or less will be dropped at the start and
                  end of a headline, unless they are query terms.

                  The default value of three (3) eliminates common English articles.
                type: number
              highlightAll:
                description: If true the whole document will be used as the headline, ignoring
                  the preceding three parameters. The default is false.
                type: boolean
              maxFragments:
                description: >-
                  Maximum number of text fragments to display. The default value
                  of zero selects a non-fragment-based headline generation
                  method.

                  A value greater than zero selects fragment-based headline generation (see the linked documentation above for more details).
                type: number
              fragmentDelimiter:
                description: Delimiter string used to concatenate fragments. Defaults to " ...
                  ".
                type: string
  techdocs:
    description: Configuration options for the techdocs-backend plugin
    type: object
    required:
      - builder
    properties:
      builder:
        description: Documentation building process depends on the builder attr
        visibility: frontend
        enum:
          - external
          - local
        type: string
      generator:
        description: Techdocs generator information
        type: object
        required:
          - runIn
        properties:
          runIn:
            description: Where to run the techdocs (mkdocs) generator
            enum:
              - docker
              - local
            type: string
          dockerImage:
            description: Override the default techdocs docker image
            type: string
          pullImage:
            description: Pull the latest docker image
            type: boolean
          mkdocs:
            description: Override behavior specific to mkdocs.
            type: object
            properties:
              legacyCopyReadmeMdToIndexMd:
                description: >-
                  (Optional and not recommended) Configures the techdocs
                  generator to

                  attempt to ensure an index.md exists falling back to using <docs-dir>/README.md

                  or README.md in case a default <docs-dir>/index.md is not provided.

                  Note that https://www.mkdocs.org/user-guide/configuration/#edit_uri behavior

                  will be broken in these scenarios.
                type: boolean
      publisher:
        description: Techdocs publisher information
        anyOf:
          - type: object
            properties:
              type:
                type: string
                enum:
                  - local
              local:
                type: object
                properties:
                  publishDirectory:
                    description: Directory to store generated static files.
                    type: string
            required:
              - type
          - type: object
            properties:
              type:
                type: string
                enum:
                  - awsS3
              awsS3:
                description: Required when 'type' is set to awsS3
                type: object
                required:
                  - bucketName
                properties:
                  accountId:
                    description: >-
                      (Optional) The AWS account ID where the storage bucket is
                      located.

                      Credentials for the account ID will be sourced from the 'aws' app config section.

                      See the

                      [integration-aws-node package](https://github.com/backstage/backstage/blob/master/packages/integration-aws-node/README.md)

                      for details on how to configure the credentials in the app config.

                      If account ID is not set and no credentials are set, environment variables or aws config file will be used to authenticate.
                    visibility: secret
                    type: string
                  credentials:
                    description: >-
                      (Optional) Credentials used to access a storage bucket.

                      This section is now deprecated. Configuring the account ID is now preferred, with credentials in the 'aws'

                      app config section.

                      If not set and no account ID is set, environment variables or aws config file will be used to authenticate.
                    visibility: secret
                    type: object
                    properties:
                      accessKeyId:
                        description: User access key id
                        visibility: secret
                        type: string
                      secretAccessKey:
                        description: User secret access key
                        visibility: secret
                        type: string
                      roleArn:
                        description: ARN of role to be assumed
                        type: string
                  bucketName:
                    description: (Required) Cloud Storage Bucket Name
                    type: string
                  region:
                    description: >-
                      (Optional) AWS Region.

                      If not set, AWS_REGION environment variable or aws config file will be used.
                    visibility: secret
                    type: string
                  endpoint:
                    description: >-
                      (Optional) AWS Endpoint.

                      The endpoint URI to send requests to. The default endpoint is built from the configured region.
                    visibility: secret
                    type: string
                  s3ForcePathStyle:
                    description: >-
                      (Optional) Whether to use path style URLs when
                      communicating with S3.

                      Defaults to false.

                      This allows providers like LocalStack, Minio and Wasabi (and possibly others) to be used to host tech docs.
                    type: boolean
                  sse:
                    description: >-
                      (Optional) AWS Server Side Encryption

                      Defaults to undefined.

                      If not set, encrypted buckets will fail to publish.

                      https://docs.aws.amazon.com/AmazonS3/latest/userguide/specifying-s3-encryption.html
                    enum:
                      - AES256
                      - aws:kms
                    type: string
            required:
              - type
          - type: object
            properties:
              type:
                type: string
                enum:
                  - openStackSwift
              openStackSwift:
                description: Required when 'type' is set to openStackSwift
                type: object
                required:
                  - authUrl
                  - containerName
                  - credentials
                  - swiftUrl
                properties:
                  credentials:
                    description: (Required) Credentials used to access a storage bucket.
                    visibility: secret
                    type: object
                    required:
                      - id
                      - secret
                    properties:
                      id:
                        description: (Required) Application Credential ID
                        visibility: secret
                        type: string
                      secret:
                        description: (Required) Application Credential Secret
                        visibility: secret
                        type: string
                  containerName:
                    description: (Required) Cloud Storage Container Name
                    type: string
                  authUrl:
                    description: (Required) Auth url sometimes OpenStack uses different port check
                      your OpenStack apis.
                    type: string
                  swiftUrl:
                    description: (Required) Swift URL
                    type: string
            required:
              - type
          - type: object
            properties:
              type:
                type: string
                enum:
                  - azureBlobStorage
              azureBlobStorage:
                description: Required when 'type' is set to azureBlobStorage
                type: object
                required:
                  - containerName
                  - credentials
                properties:
                  credentials:
                    description: (Required) Credentials used to access a storage container.
                    visibility: secret
                    type: object
                    required:
                      - accountName
                    properties:
                      accountName:
                        description: Account access name
                        visibility: secret
                        type: string
                      accountKey:
                        description: >-
                          (Optional) Account secret primary key

                          If not set, environment variables will be used to authenticate.
                        visibility: secret
                        type: string
                  containerName:
                    description: (Required) Cloud Storage Container Name
                    type: string
            required:
              - type
          - type: object
            properties:
              type:
                type: string
                enum:
                  - googleGcs
              googleGcs:
                description: Required when 'type' is set to googleGcs
                type: object
                required:
                  - bucketName
                properties:
                  bucketName:
                    description: (Required) Cloud Storage Bucket Name
                    type: string
                  credentials:
                    description: >-
                      (Optional) API key used to write to a storage bucket.

                      If not set, environment variables will be used to authenticate.
                    visibility: secret
                    type: string
                  projectId:
                    description: >-
                      (Optional) GCP project ID that contains the bucket. Should
                      be

                      set if credentials is not set, or if the service account in

                      the credentials belongs to a different project to the bucket.
                    type: string
            required:
              - type
      cache:
        type: object
        required:
          - ttl
        properties:
          ttl:
            description: >-
              The cache time-to-live for TechDocs sites (in milliseconds). Set
              this

              to a non-zero value to cache TechDocs sites and assets as they are

              read from storage.

              Note: you must also configure `backend.cache` appropriately as well,

              and to pass a PluginCacheManager instance to TechDocs Backend's

              createRouter method in your backend.
            type: number
          readTimeout:
            description: >-
              The time (in milliseconds) that the TechDocs backend will wait for

              a cache service to respond before continuing on as though the cached

              object was not found (e.g. when the cache sercice is unavailable).

              Defaults to 1000 milliseconds.
            type: number
      legacyUseCaseSensitiveTripletPaths:
        description: >-
          (Optional and not recommended) Prior to version [0.x.y] of TechDocs,
          docs

          sites could only be accessed over paths with case-sensitive entity triplets

          e.g. (namespace/Kind/name). If you are upgrading from an older version of

          TechDocs and are unable to perform the necessary migration of files in your

          external storage, you can set this value to `true` to temporarily revert to

          the old, case-sensitive entity triplet behavior.
        type: boolean
  integrations:
    description: Configuration for integrations towards various external repository
      provider systems
    visibility: frontend
    type: object
    properties:
      azure:
        description: Integration configuration for Azure
        type: array
        items:
          type: object
          required:
            - host
          properties:
            host:
              description: The hostname of the given Azure instance
              visibility: frontend
              type: string
            token:
              description: Token used to authenticate requests.
              visibility: secret
              type: string
      bitbucket:
        description: Integration configuration for Bitbucket
        deprecated: replaced by bitbucketCloud and bitbucketServer
        type: array
        items:
          type: object
          required:
            - host
          properties:
            host:
              description: The hostname of the given Bitbucket instance
              visibility: frontend
              type: string
            token:
              description: Token used to authenticate requests.
              visibility: secret
              type: string
            apiBaseUrl:
              description: The base url for the Bitbucket API, for example
                https://api.bitbucket.org/2.0
              visibility: frontend
              type: string
            username:
              description: The username to use for authenticated requests.
              visibility: secret
              type: string
            appPassword:
              description: Bitbucket app password used to authenticate requests.
              visibility: secret
              type: string
      bitbucketCloud:
        description: Integration configuration for Bitbucket Cloud
        type: array
        items:
          type: object
          required:
            - appPassword
            - username
          properties:
            username:
              description: The username to use for authenticated requests.
              visibility: secret
              type: string
            appPassword:
              description: Bitbucket Cloud app password used to authenticate requests.
              visibility: secret
              type: string
      bitbucketServer:
        description: Integration configuration for Bitbucket Server
        type: array
        items:
          type: object
          required:
            - host
          properties:
            host:
              description: The hostname of the given Bitbucket Server instance
              visibility: frontend
              type: string
            token:
              description: Token used to authenticate requests.
              visibility: secret
              type: string
            username:
              description: Username used to authenticate requests with Basic Auth.
              visibility: secret
              type: string
            password:
              description: Password (or token as password) used to authenticate requests with
                Basic Auth.
              visibility: secret
              type: string
            apiBaseUrl:
              description: The base url for the Bitbucket Server API, for example
                https://<host>/rest/api/1.0
              visibility: frontend
              type: string
      gerrit:
        description: Integration configuration for Gerrit
        type: array
        items:
          type: object
          required:
            - host
          properties:
            host:
              description: The hostname of the given Gerrit instance
              visibility: frontend
              type: string
            baseUrl:
              description: The base url for the Gerrit instance.
              visibility: frontend
              type: string
            cloneUrl:
              description: The base url for cloning repos.
              visibility: frontend
              type: string
            username:
              description: The username to use for authenticated requests.
              visibility: secret
              type: string
            password:
              description: >-
                Gerrit password used to authenticate requests. This can be
                either a password

                or a generated access token.
              visibility: secret
              type: string
      github:
        description: Integration configuration for GitHub
        type: array
        items:
          type: object
          required:
            - host
          properties:
            host:
              description: The hostname of the given GitHub instance
              visibility: frontend
              type: string
            token:
              description: Token used to authenticate requests.
              visibility: secret
              type: string
            apiBaseUrl:
              description: The base url for the GitHub API, for example https://api.github.com
              visibility: frontend
              type: string
            rawBaseUrl:
              description: The base url for GitHub raw resources, for example
                https://raw.githubusercontent.com
              visibility: frontend
              type: string
            apps:
              description: GitHub Apps configuration
              type: array
              items:
                type: object
                required:
                  - appId
                  - clientId
                  - clientSecret
                  - privateKey
                  - webhookSecret
                properties:
                  appId:
                    description: The numeric GitHub App ID, string for environment variables
                    type:
                      - string
                      - number
                  privateKey:
                    description: The private key to use for auth against the app
                    visibility: secret
                    type: string
                  webhookSecret:
                    description: The secret used for webhooks
                    visibility: secret
                    type: string
                  clientId:
                    description: The client ID to use
                    type: string
                  clientSecret:
                    description: The client secret to use
                    visibility: secret
                    type: string
                  allowedInstallationOwners:
                    description: >-
                      List of installation owners allowed to be used by this
                      GitHub app. The GitHub UI does not provide a way to list
                      the installations.

                      However you can list the installations with the GitHub API. You can find the list of installations here:

                      https://api.github.com/app/installations

                      The relevant documentation for this is here.

                      https://docs.github.com/en/rest/reference/apps#list-installations-for-the-authenticated-app--code-samples
                    type: array
                    items:
                      type: string
      gitlab:
        description: Integration configuration for GitLab
        type: array
        items:
          type: object
          required:
            - host
          properties:
            host:
              description: The host of the target that this matches on, e.g. "gitlab.com".
              visibility: frontend
              type: string
            apiBaseUrl:
              description: >-
                The base URL of the API of this provider, e.g.

                "https://gitlab.com/api/v4", with no trailing slash.

                May be omitted specifically for public GitLab; then it will be deduced.
              visibility: frontend
              type: string
            token:
              description: |-
                The authorization token to use for requests to this provider.

                If no token is specified, anonymous access is used.
              visibility: secret
              type: string
            baseUrl:
              description: >-
                The baseUrl of this provider, e.g. "https://gitlab.com", which
                is

                passed into the GitLab client.

                If no baseUrl is provided, it will default to https://${host}.
              visibility: frontend
              type: string
      googleGcs:
        description: Integration configuration for Google Cloud Storage
        type: object
        properties:
          clientEmail:
            description: Service account email used to authenticate requests.
            type: string
          privateKey:
            description: Service account private key used to authenticate requests.
            visibility: secret
            type: string
      awsS3:
        description: Integration configuration for AWS S3 Service
        type: array
        items:
          type: object
          properties:
            endpoint:
              description: >-
                AWS Endpoint.

                The endpoint URI to send requests to. The default endpoint is built from the configured region.
              visibility: frontend
              type: string
            s3ForcePathStyle:
              description: >-
                Whether to use path style URLs when communicating with S3.

                Defaults to false.

                This allows providers like LocalStack, Minio and Wasabi (and possibly others) to be used.
              visibility: frontend
              type: boolean
            accessKeyId:
              description: Account access key used to authenticate requests.
              type: string
            secretAccessKey:
              description: Account secret key used to authenticate requests.
              visibility: secret
              type: string
            roleArn:
              description: ARN of the role to be assumed
              type: string
            externalId:
              description: External ID to use when assuming role
              type: string
      gitea:
        description: Integration configuration for Gitea
        type: array
        items:
          type: object
          required:
            - host
          properties:
            host:
              description: The hostname of the given Gitea instance
              visibility: frontend
              type: string
            baseUrl:
              description: The base url for the Gitea instance.
              visibility: frontend
              type: string
            username:
              description: The username to use for authenticated requests.
              visibility: secret
              type: string
            password:
              description: >-
                Gitea password used to authenticate requests. This can be either
                a password

                or a generated access token.
              visibility: secret
              type: string
  aws:
    description: Configuration for access to AWS accounts
    type: object
    properties:
      accountDefaults:
        description: Defaults for retrieving AWS account credentials
        type: object
        properties:
          roleName:
            description: The IAM role to assume to retrieve temporary AWS credentials
            type: string
          partition:
            description: The AWS partition of the IAM role, e.g. "aws", "aws-cn"
            type: string
          region:
            description: The STS regional endpoint to use when retrieving temporary AWS
              credentials, e.g. "ap-northeast-1"
            type: string
          externalId:
            description: The unique identifier needed to assume the role to retrieve
              temporary AWS credentials
            visibility: secret
            type: string
      mainAccount:
        description: Main account to use for retrieving AWS account credentials
        type: object
        properties:
          accessKeyId:
            description: The access key ID for a set of static AWS credentials
            visibility: secret
            type: string
          secretAccessKey:
            description: The secret access key for a set of static AWS credentials
            visibility: secret
            type: string
          profile:
            description: >-
              The configuration profile from a credentials file at
              ~/.aws/credentials and

              a configuration file at ~/.aws/config.
            type: string
          region:
            description: The STS regional endpoint to use for the main account, e.g.
              "ap-northeast-1"
            type: string
      accounts:
        description: Configuration for retrieving AWS accounts credentials
        type: array
        items:
          type: object
          required:
            - accountId
          properties:
            accountId:
              description: The account ID of the target account that this matches on, e.g.
                "123456789012"
              type: string
            accessKeyId:
              description: The access key ID for a set of static AWS credentials
              visibility: secret
              type: string
            secretAccessKey:
              description: The secret access key for a set of static AWS credentials
              visibility: secret
              type: string
            profile:
              description: >-
                The configuration profile from a credentials file at
                ~/.aws/credentials and

                a configuration file at ~/.aws/config.
              type: string
            roleName:
              description: The IAM role to assume to retrieve temporary AWS credentials
              type: string
            partition:
              description: The AWS partition of the IAM role, e.g. "aws", "aws-cn"
              type: string
            region:
              description: The STS regional endpoint to use when retrieving temporary AWS
                credentials, e.g. "ap-northeast-1"
              type: string
            externalId:
              description: The unique identifier needed to assume the role to retrieve
                temporary AWS credentials
              visibility: secret
              type: string

I have deployed it with docker multistage in a kubernetes cluster with HELM. This is the dockerfile
# Stage 1 - Create yarn install skeleton layer
FROM node:16-bullseye-slim AS packages

WORKDIR /app
COPY package.json yarn.lock ./

COPY packages packages

# Comment this out if you don't have any internal plugins
# COPY plugins plugins

RUN find packages \! -name "package.json" -mindepth 2 -maxdepth 2 -exec rm -rf {} \+

# Stage 2 - Install dependencies and build packages
FROM node:16-bullseye-slim AS build

# Install isolate-vm dependencies, these are needed by the @backstage/plugin-scaffolder-backend.
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
    --mount=type=cache,target=/var/lib/apt,sharing=locked \
    apt-get update && \
    apt-get install -y --no-install-recommends python3 g++ build-essential && \
    yarn config set python /usr/bin/python3

USER node
WORKDIR /app

COPY --from=packages --chown=node:node /app .

# Stop cypress from downloading it's massive binary.

RUN yarn tsc
RUN yarn --cwd packages/backend build
# If you have not yet migrated to package roles, use the following command instead:
# RUN yarn --cwd packages/backend backstage-cli backend:bundle --build-dependencies

RUN mkdir packages/backend/dist/skeleton packages/backend/dist/bundle \
    && tar xzf packages/backend/dist/skeleton.tar.gz -C packages/backend/dist/skeleton \
    && tar xzf packages/backend/dist/bundle.tar.gz -C packages/backend/dist/bundle

# Stage 3 - Build the actual backend image and install production dependencies
FROM node:16-bullseye-slim

# Install isolate-vm dependencies, these are needed by the @backstage/plugin-scaffolder-backend.
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
    --mount=type=cache,target=/var/lib/apt,sharing=locked \
    apt-get update && \
    apt-get install -y --no-install-recommends python3 python3-pip g++ build-essential && \
    pip3 install mkdocs-techdocs-core==1.1.7 && \
    yarn config set python /usr/bin/python3

# From here on we use the least-privileged `node` user to run the backend.
USER node

# This should create the app dir as `node`.
# If it is instead created as `root` then the `tar` command below will fail: `can't create directory 'packages/': Permission denied`.
# If this occurs, then ensure BuildKit is enabled (`DOCKER_BUILDKIT=1`) so the app dir is correctly created as `node`.
WORKDIR /app

# Copy the install dependencies from the build stage and context
COPY --from=build --chown=node:node /app/yarn.lock /app/package.json /app/packages/backend/dist/skeleton/ ./

# Copy any other files that we need at runtime
COPY --chown=node:node app-config.yaml ./

# This switches many Node.js dependencies to production mode.
ENV NODE_ENV production

CMD ["node", "packages/backend", "--config", "app-config.yaml"]

Installing the plugins as backend instead as frontend works


remove Makefile from plugin dev

The current book https://book.rizin.re/plugins/dev-asm.html speaks of a Makefile. There is no Makefile anymore in rizin. Only meson.
I suggest to update the documentation.

that is need something that needs to be updated.

Yes @wargio . @ret2libc you could assign me as well if you want. Sounds a good first issue.

Great!. I was busy. Let me do it right now.


When the next release of OpenShift 3.7 is made  we can probably remove this custom oc tool install logic and use the Ansible Galaxy role.

@aidenkeating  :+1:  on this after various tweaks.
Lets merge

@david-martin Would you mind approving?


Wer is the definition of CONFIG_HREF

Hello I try to convert this wonderful piece of code to the Arduino IDE. My question, where is the definition
CONFIG_HREF and all the other Pin configs.

In the beginning, I have the same problem as you too, the pin settings can be changed in Main/kconfigprojbuild, good luck.

Thank you
I got it


Add optional onPhoneNumberFocus function

Added optional onPhoneNumberFocus function, similar to onPhoneNumberBlur.
Description
Added onPhoneNumberFocus because it's not possible to extended onFocus in telInputProps property due to onFocus being overwritten in src/components/TelInput.js. There is an open PR addressing the same thing in #239, but it has been stale for some time and lack tests.
Types of changes

[x] New feature (non-breaking change which adds functionality)

Checklist:

[x] I have used ESLint & Prettier to follow the code style of this project.
[x] I have updated the documentation accordingly.
[x] I have added tests to cover my changes.
[x] All new and existing tests passed.

Coverage increased (+0.08%) to 93.656% when pulling 0362b6bc18119b3b210d3fa9713a1167715a6f3b on DPOrganizer:feature/on-phone-number-focus into ced4b09318d62c62e33285b215ca0118214c3bf1 on patw0929:master.

Thanks a lot! Looks great! 🙌
Could you help to update Documentation - Props?

Thanks @patw0929! From what I understood the Props storybook automatically picks things from IntlTelInput.propTypes so it should already be in place ☺

You're right! I forgot it 😅
Thank you!
Merged & released as v7.1.0.

Thanks @patw0929 for the fast response and feedback! Great lib! 👍


Downmerge nrf54l15bsim upd

Downmerge
https://github.com/zephyrproject-rtos/zephyr/pull/77893
&
https://github.com/zephyrproject-rtos/zephyr/pull/77942

The following west manifest projects have been modified in this Pull Request:

Name
Old Revision
New Revision
Diff

nrf_hw_models
https://github.com/zephyrproject-rtos/nrf_hw_models/commit/6e70c2dc5d4c67c4da5913b2969c0774b27f0cd0
https://github.com/zephyrproject-rtos/nrf_hw_models/commit/4b0b020e25dbf1a11ccccf7b7741d6ca991ba9e4 (main)
<EMAIL_ADDRESS>

Note: This message is automatically posted and updated by the Manifest GitHub Action.


External send message

Builds on #862 and #863
This adds a sendMessage prop to the space widget that will allow you to pass a string to have it automatically send.

Closes #863


Enhancement: api-root to act as a bookmark

Problem description

This enhancement proposes that the api-root URI should host an API catalogue resource, to facilitate discovery of CAMARA APIs - by both human developers and automated machine processes.
As well as benefiting API consumers, this can also help aggregators, industry bodies, and CAMARA itself know the state of deployment of CAMAAR APIs per operator.
Possible evolution

GET {api_root} to return a machine-readable set of links to the operator's CAMARA endpoints, associated metadata, and (optionally) non-CAMARA endpoints. This supports the HATEOAS principle of REST, i.e. "A REST API should be entered with no prior knowledge beyond the initial URI (bookmark)"
The machine-readable format will need to apply a semantic binding of each operator's API endpoint to the CAMARA API definition it implements. For example,  a JSON Resource Descriptor utilising  RFC 8288 extension relation types snippet:
 "links" : [
   {
     "rel" : "http://openid.net/specs/connect/1.0/issuer",
     "href" : "https://auth.operator.com"
   },
   {
     "rel" : "https://camaraproject.org/location-verification",
     "href" : "https://api.operator.com/camara/location-verification/v1"
   },
   {
     "rel" : "https://camaraproject.org/location-retrieval",
     "href" : "https://api.operator.com/camara/location-retrieval/v1"
   },
   {
     "rel" : "https://camaraproject.org/number-verification",
     "href" : "https://api.operator.com/camara/number-verification/v1"
   }
 ]

Alternative solution

This guidance could be added to API Design Guidelines as an Appendix, or Commonalities could consider an 'implementation guidelines' document in case there is sufficient interest/benefit.
Additional context

Hi Kevin,
an alternative could be to use a discovery scheme such as (Open)CAPIF.
Further, and independent, I have two questions on your proposal:

wouldn't the hrefs be local to API root by default, apart from e.g. the related security / token endpoint?
where is the semantics of the rel URIs defined?

Kind regards, Uwe
Sent using Outlook for Androidhttps://aka.ms/AAb9ysg - typos probably auto-generated

Von: Kevin Smith @.>
Gesendet: Mittwoch, September 4, 2024 6:35:21 PM
An: camaraproject/Commonalities @.>
Cc: Subscribed @.***>
Betreff: [camaraproject/Commonalities] Enhancement: api-root to act as a bookmark (Issue #294)
Problem description
This enhancement proposes that the api-root URI should host an API catalogue resource, to facilitate discovery of CAMARA APIs - by both human developers and automated machine processes.
As well as benefiting API consumers, this can also help aggregators, industry bodies, and CAMARA itself know the state of deployment of CAMAAR APIs per operator.
Possible evolution
GET {api_root} to return a machine-readable set of links to the operator's CAMARA endpoints, associated metadata, and (optionally) non-CAMARA endpoints. This supports the HATEOAS principle of REST, i.e. "A REST API should be entered with no prior knowledge beyond the initial URI (bookmark)"https://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
The machine-readable format will need to apply a semantic binding of each operator's API endpoint to the CAMARA API definition it implements. For example, a JSON Resource Descriptorhttps://www.rfc-editor.org/rfc/rfc7033#page-11 utilising RFC 8288 extension relation typeshttps://www.rfc-editor.org/rfc/rfc8288.html#section-2.1.2 snippet:
"links" : [
{
"rel" : "http://openid.net/specs/connect/1.0/issuer",
"href" : "https://auth.operator.com"
},
{
"rel" : "https://camaraproject.org/location-verification",
"href" : "https://api.operator.com/camara/location-verification/v1"
},
{
"rel" : "https://camaraproject.org/location-retrieval",
"href" : "https://api.operator.com/camara/location-retrieval/v1"
},
{
"rel" : "https://camaraproject.org/number-verification",
"href" : "https://api.operator.com/camara/number-verification/v1"
}
]
Alternative solution
This guidance could be added to API Design Guidelines as an Appendix, or Commonalities could consider an 'implementation guidelines' document in case there is sufficient interest/benefit.
Additional context
—
Reply to this email directly, view it on GitHubhttps://github.com/camaraproject/Commonalities/issues/294, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AAKRTHO6CZFKTTYZ4WHJMBDZU4ZENAVCNFSM6AAAAABNUWQYDOVHI2DSMVQWIX3LMV43ASLTON2WKOZSGUYDKOBTGQ3DKNA.
You are receiving this because you are subscribed to this thread.Message ID: @.***>

HI @uwerauschenbach

an alternative could be to use a discovery scheme such as (Open)CAPIF

...or as a complement to CAPIF. This is a simple proposal  which should be quick and  straightforward to implement, and I can see it co-existing with (or preceding) CAPIF implementations. Where additional discovery mechanisms do not incur a significant overhead, then I think they can only be of benefit :)

wouldn't the hrefs be local to API root by default, apart from e.g. the related security / token endpoint?

I was following the recommendation  in RFC 9264 :
"For the link context ("anchor" attribute) and link target ("href" attribute), use URI references that are not relative references (as defined in Section 4.1 of [RFC3986])."
...but, that would only apply if the document was a strict RFC9264 linkset. One for further discussion if the idea is accepted.

where is the semantics of the rel URIs defined?

Either IANA - which I have not chosen here, because each API would require a separate rel registration - or at the URI itself. This is an optional step per RFC 5988 , but I think it makes sense for e.g. https://camaraproject.org/location-verification to return a short description of the purpose of the CAMARA location verification API . Or  the semantic could be bound by the URI being a pointer to a specific CAMARA OAS definition, e.g. https://camaraproject.org/location-verification/v1.0/location-verification.yaml, which is probably better. But again one for discussion as required.

Could it be covered by Runtime Restrictions API:

https://github.com/camaraproject/Commonalities/discussions/183 ?

Hi @Kevsy
Do you see that as a complete distinct thing that the Telco Finder definition done in GSMA?
for me there are some overlap on the data provided and probable consumer of this service but anyway good topic to be discussed...

HI @rartych

Could it be covered by Runtime Restrictions API:

Proposal - Runtime Restrictions API #183 ?

The proposal applies at the api-root level, so it does not require a specific API to be implemented to support it.
Also, the current scope for Runtime Restrictions appears to be a different scope:  to expose 'optional capabilities/features/parameters are supported and enabled ' at the per-API level, rather than exposing the API catalogue for that operator.
But, if the scope for Runtime Restrictions extends to cover that too, then I think my proposal can be a source of information that the Runtime Restrictions API can utilise. E.g.  I think an API catalogue maps to the 'B' layer in the Footprint & Capabilities diagram.

Hi @Kevsy Do you see that as a complete distinct thing that the Telco Finder definition done in GSMA? for me there are some overlap on the data provided and probable consumer of this service but anyway good topic to be discussed...

Hi @bigludo7
I think there is some overlap, but no conflict. For example, Telco Finder could GET api-root and quickly parse the available CAMARA APIs for that operator. It also means that CAMARA operators without Telco Finder can also expose an easy-to-find catalogue, and could make their migration to Telco Finder easier if they already have this approach in place.

Hi,
@Kevsy I would like to understand which is the Business Case and the topic which is aimed to be resolved by this issue.
I mean, is this "catalogue resource feature" a topic raised by developers/aggregators in other Forum or is something raised in our own?

Hi,
Thanks @Kevsy for the feedback. It is a reasonable topic and makes sense to comment about that.
Given the fact this is a feature to expose APIs catalogue for a Telco Operator, my main doubt is whether we can define a solution in our own or check this feature with GSMA.
In today's meeting it has been talked to make a check with TSC for guidance about this


Error: onDrag called before onDragStart

Sometimes Error: onDrag called before onDragStart is fired if you drop an item on top of another.

me too

Sorry, can't do much with this without a reproduction.

Having same issue, any updates?

Same issue.
I will try to reproduce it and drop the steps here once I find it

In my case, I wanted to have a feature where user can maximize the div full screen, so I was applying a css fullscreen class. I was using position: fixed !important property and getting above error.
I removed that property and now I don't see that error. Now I need to find a way to use position fixed and not let it throw error.

I'm also having this issue. Same as above, I'm applying a fullscreen class with position: fixed !important on the div and then I see the error. Has anyone had any success fixing this? Or a workaround?

Thanks so much for the reply! This worked perfectly; you probably saved me at least a few hours of trying to figure it out.

Yeh I know, Because I have spent few days to figure out the way...Its almost year now, But when I saw you are in trouble, I remembered the hassle I faced and though to help you by sparing some time.

Thanks so much, I had low expectations of getting any reply, never mind an actual solution!


Literate mode bug?

```aya-hidden
open data ℕ : Type
  | zero : ℕ
  | suc  : ℕ → ℕ
```

```aya
open data U
| Nat
| Π (dom : U) (El dom → U)

def El U : Type
| Nat => ℕ
| Π dom cod => ∀ (d : El dom) -> El (cod d)
```

```aya
def demo : El (Π Nat (fn n => Nat))
  => fn x => 42
```

I think this also happened to me once.
Maybe there are some line separators for us to insert


Wrong avg price on trading pg realized and unrealized Pnl when multiple trades are done

Traded in Binary Market.  First I sell 1 shares @0.42.  Next I have 2 bids on the order book (1 share to buy at .395 and 1 share to buy at .375).  Another user sells me those 2 shares (in one trade).  My Fills show bought 1 share at each price (have same etherscan tx).  My positions calculates the avg price as 0.395 (instead of the avg of both shares which traded at the same time)....Timesstamps on the trade history and etherscan confirm both buys were done in one trade.  I would expect My Realized Pnl (which currently shows .025) to be 0.035, which is (.395+.375)/2=.385.....(0.42-0.385)=0.035 and my unrealized s/b (.385-.375)= -0.01 b/c my avg price is .385 and the last trade price is .375

One of those trades is for closing your short position and so wont be included in the calculation of your average share acquisition price for your new long position.
Consider the case of if you had put in a buy at .1 and a buy at .9.
The .1 order will be taken first obviously and this will close out your short position at a loss. At this point in time you have no position.
The .9 order is then taken (even if it happens to be the same transaction, this doesn't actually matter) and you now have 1 share in a long position you acquired for .9.

Seeing that you actually have a position of 2 shares and there were 3 buy orders I understand better where the confusion is coming from.
It appears the transaction order is wrong in the history since the .395 price trade occurred before the .375 trade(s). You can confirm this looking at the etherscan events as well.

So you are saying initially the order looked correct and this was the breakdown.
realized is:
open: 1 @ 0.42 (cost is (1 - 0.42) * 1)  0.58 ETH
closed: 1 @ 0.3950 (result is (1 - 0.3950) * 1) 0.605 ETH
realized: 0.605 - 0.58 = 0.025 ETH
Now if the two trades were reversed in trade order,
realized is:
open: 1 @ 0.42 (cost is (1 - 0.42) * 1)  0.58 ETH
closed: 1 @ 0.3750 (result is (1 - 0.3750) * 1) 0.625
realized: 0.625 - 0.58 = 0.045 ETH
unrealized:
open 1 @ 0.395 (cost is (0.395 * 1) 0.395 ETH
open 1 @ 0.375 (cost is (0.375 * 1) 0.375 ETH
unrealized 0.375 - 0.395 = -0.02 ETH  (simplified the calculation since there is just 1 share)

Market trading history needs to take logIndex into account when sorting trades.

fixed, pushing to sneakpeak, @Chwy5 give it a look.
The market trading history should be in correct order and filled orders.
This fix also addressed https://github.com/AugurProject/augur/issues/1256

The market Trade History is in the correct order, but the Fills still shows up in the wrong order along with the last print (dot) on the price history chart

Fills, Market trading history and chart last price are all in the correct order - closing this ticket


Added atmospheric science minor

Summary
Added the Atmospheric Science minor with full requirements.
https://www.eas.cornell.edu/eas/programs/undergraduate-programs/undergraduate-minors/atmospheric-science-minor
Remaining TODOs:

[ ] Add Minor Advisors

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.


Feature/reset password screen

Fixes https://github.com/mammalai/mvp/issues/23

https://github.com/mammalai/mvp/issues/23

@ssattids if you are OK, then, I can merge this PR


2014-2016 Missing Data for CANAB Region is available

2014, 2015 and 2016 results for CANAB Region are available on official FTC Alberta website
https://www.ftcalberta.ca/images/championship/2014/Match_Results_Canadian_Championship.html
https://www.ftcalberta.ca/images/championship/2015/Match_Results_Canadian_Championship.html
https://www.ftcalberta.ca/images/championship/2016/Match_Results_Championship_Canada.html

Hi unfortunately at this time we are not able to link to webpages, however if you want to send those sites to<EMAIL_ADDRESS>we'll see what we can do.


Missing queryString

$('#qrCode').qrcode({ width: 80, height: 80, text: "http://xxx.xx.com?t=12312312" });
In some browser the t=12312312 will be gone.
Anyone can help?

Hello, I created variables for each of my parameters and then concatenated them together.  It works for me.  Here is an example.
var customer = $('#customer').val();
var location = $('#location').val();
var site = $('#site').val();
var menuID= $("#menuID").val();
var emails = $('#emails').val();
$('#qrcode').qrcode({width: 256,height: 256,text: 'https://xxx.xxx.xxx/?customer='+customer+'&location='+location+'&menuID='+menuID+'&site='+site+'&emails='+emails});

Fortunately, the QR code needs to be cut off.


refactor(fcntl): use syscall instead of x/sys/unix

syscall and x/sys/unix are the same thing but one is inside Go and the other inside `x/sys/ :shrug:

The syscall docs say

most new code should prefer that package where possible. See https://golang.org/s/go1.4-syscall for more information.

It's a soft deprecation statement of sorts


Intent: Error during creation without a Intent Responses will fail but still create the intent

Fill the form except the Intent Response
Click on create
An error will show up saying that you should add a Intent Response

The intent will still be created at this point and even if you add the Intent Response it won't let you save it.

Closed by https://github.com/samtecspg/articulate/commit/653037747ca59843ff5b81939dc6c1ccff1dd286


bug: Changing a Google User's primary email leads to uncaught exception

Describe the bug
A Google Workspace can have multiple Gmail domains, e.g. @foo.com and @bar.com. If a user's email domain is changed after previously synced to AWS SSO via SCIM, then a subsequent SSO sync attempts to create a new user  leads to an error.
WARN[0012] creating users                                quantity=3
WARN[0012] aws checkHTTPResponse: body: {"schema":["urn:ietf:params:scim:api:messages:2.0:Error"],"schemas":["urn:ietf:params:scim:api:messages:2.0:Error"],"detail":"Refused to create a new, duplicate resource.","status":"409","exceptionRequestId":"1f0de3fa-8bce-49ed-ae22-8604172fcb80","timeStamp":"2022-03-22 01:39:54.152"}  method=POST status="409 Conflict"
Error: cannot sync groups and their members: error syncing state: error reconciling users: error creating users in SCIM Provider: scim: error creating user: aws CreateUser: error decoding response body: EOF

Error: cannot sync groups and their members: error syncing state: error reconciling users: error creating users in SCIM Provider: scim: error creating user: aws CreateUser: error decoding response body: EOF

Afterward, if I re-run the SSO sync script, a new error appears. This time, the program attempts to duplicate the group (not the user):
INFO[0011] provider groups and state groups are different
INFO[0011] reconciling groups                            idp=4 state=3
WARN[0011] creating groups                               quantity=1
WARN[0011] creating group                                group="AWS SSO - Shared Sandbox - Full Admin"
WARN[0011] aws checkHTTPResponse: body: {"schema":["urn:ietf:params:scim:api:messages:2.0:Error"],"schemas":["urn:ietf:params:scim:api:messages:2.0:Error"],"detail":"Refused to create a new, duplicate resource.","status":"409","exceptionRequestId":"80922f78-7149-4cf6-bf7c-4748047072dd","timeStamp":"2022-03-22 01:40:31.832"}  method=POST status="409 Conflict"
Error: cannot sync groups and their members: error syncing state: error reconciling groups: error creating groups in SCIM Provider: scim: error creating group: aws CreateGroup: error decoding response body: %!w(<nil>), body:

This is actually strange, as nothing about the group has changed other than the email of a member. Maybe that's all that's needed?
To Reproduce
Steps to reproduce the behavior:

[Set up Google Workspace with two Gmail domains]
Create user for Mat, e.g<EMAIL_ADDRESS>Create any group, e.g. aws-sso-test and add Mat to the group
Sync group to AWS SSO
Change Mat's gmail / primary email domain from<EMAIL_ADDRESS>to<EMAIL_ADDRESS>Attempt to sync again
Error
Delete group and user from AWS SSO
Run sync again, this time everything worked!

Hi, @mat-release thank you for reporting that.  Which version of the software are you using? the latest one?

@mat-release this was fixed in #45, release v0.0.10 .  Could you confirm that?


Import performance, aka import projects in reverse dep order

As a BEF user importing a large Bazel workspace
I would like the BEF to use perf optimizations such as caching to speed up the import as much as possible
Such that the workspace is correct with no build errors at the end of the import
REVISED: we have already done some work on this ticket, specifically enabling some caching as much as possible. The remaining work is believed to be ordering the Bazel packages in reverse dep order on import. This will allow each classpath to be computed just once.
Example:
Given a workspace with 4 targets A, B, C, D. The notation -> means 'depends on' and can be a compile or runtime dep.
A -> B
B -> C
B -> D
The import order would be either:
D, C, B, A
C, D, B, A

bazel-eclipse-ls has implemented an ordering algorithm here:
https://github.com/salesforce/bazel-eclipse-ls/blob/master/com.salesforce.b2eclipse.jdt.ls/src/main/java/com/salesforce/b2eclipse/config/ImportOrderResolver.java#L49

Across a few PRs #127 #128 #129 this has been implemented. The order of the projects during import is reverse dep. If A depends on B which depends on C, and you import A,C, BEF will import C then A.