Not Being Able To impersonate for Domain-Wide Delegation.

TL;DR

Generating OAuth2.0 Access Token for Impersonating Domain-Wide Delegation fails
Since  authenticating Service Account by feeding the credentials_json runs successfully, I believe this issue is specific to Domain-Wide Delegation.
The Service account is granted roles/iam.serviceAccountTokenCreator and roles/iam.workloadIdentityUser

Expected behavior
GitHub Action is able to retrieve an access tokens created for Domain-Wide Delegation.
Observed behavior
An access token subject was specified, triggering Domain-Wide Delegation flow. This flow does not support specifying an access token lifetime of greater than 1 hour.
Error: google-github-actions/auth failed with: failed to sign JWT using<EMAIL_ADDRESS>{
"error": {
"code": 403,
"message": "The caller does not have permission",
"status": "PERMISSION_DENIED"
}
}
Action YAML
---
name: "[dev] fetch audit logs"

env:
  MIN_LOG_SEVERITY: DEBUG
  TZ: 'Asia/Tokyo'
  ENV: dev
  GITHUB_BRANCH: develop

on:
  # pull_request: # for debug
  workflow_dispatch:
  schedule:
    - cron: '0 10 * * *' # 1 AM JST

permissions:
  id-token: write
  contents: read

jobs:
  fetch-audit-log:
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: 'google-workspace'
    steps:
      - name: Checkout
        uses: actions/checkout@v2
        with:
          ref: ${{ env.GITHUB_BRANCH }}
      - id: google-auth
        # This one successfully runs
        name: 'Authenticate to Google Cloud'
        uses: google-github-actions/auth@v0
        with:
          credentials_json: '${{ secrets.GOOGLE_CREDENTIALS_TMP }}'
      - id: google-auth-2
        # This one successfully runs
        name: 'Authenticate to Google Cloud'
        uses: google-github-actions/auth@v0
        with:
          workload_identity_provider: 'projects/{{PROJECT_ID}}/locations/global/workloadIdentityPools/${{POOL_NAME}}/providers/${{PROVIDER_NAME}}'
          service_account<EMAIL_ADDRESS>      - id: google-auth-3
        # This one fails
        name: 'Authenticate to Google Cloud'
        uses: google-github-actions/auth@v0
        with:
          token_format: 'access_token'
          workload_identity_provider: 'projects/{{PROJECT_ID}}/locations/global/workloadIdentityPools/${{POOL_NAME}}/providers/${{PROVIDER_NAME}}'
          service_account<EMAIL_ADDRESS>#           access_token_scopes: 'https://www.googleapis.com/auth/admin.reports.audit.readonly'
          access_token_subject<EMAIL_ADDRESS># email address in GWS

Log output
2022-05-13T12:29:40.1623907Z Requested labels: ubuntu-latest
2022-05-13T12:29:40.1623966Z Job defined at: ${{ORG}}/${{REPO}}/.github/workflows/fetch-audit-log_dev.yml@refs/heads/github-action-google-auth
2022-05-13T12:29:40.1623990Z Waiting for a runner to pick up this job...
2022-05-13T12:29:40.4800233Z Job is waiting for a hosted runner to come online.
2022-05-13T12:29:45.2868962Z Job is about to start running on the hosted runner: Hosted Agent (hosted)
2022-05-13T12:29:50.0707577Z Current runner version: '2.291.1'
2022-05-13T12:29:50.0739564Z ##[group]Operating System
2022-05-13T12:29:50.0740593Z Ubuntu
2022-05-13T12:29:50.0740952Z 20.04.4
2022-05-13T12:29:50.0741264Z LTS
2022-05-13T12:29:50.0741638Z ##[endgroup]
2022-05-13T12:29:50.0742052Z ##[group]Virtual Environment
2022-05-13T12:29:50.0742555Z Environment: ubuntu-20.04
2022-05-13T12:29:50.0742991Z Version: 20220508.1
2022-05-13T12:29:50.0743697Z Included Software: https://github.com/actions/virtual-environments/blob/ubuntu20/20220508.1/images/linux/Ubuntu2004-Readme.md
2022-05-13T12:29:50.0744460Z Image Release: https://github.com/actions/virtual-environments/releases/tag/ubuntu20%2F20220508.1
2022-05-13T12:29:50.0745062Z ##[endgroup]
2022-05-13T12:29:50.0745511Z ##[group]Virtual Environment Provisioner
2022-05-13T12:29:50.0745952Z <IP_ADDRESS>-main-20220421-1
2022-05-13T12:29:50.0746330Z ##[endgroup]
2022-05-13T12:29:50.0747074Z ##[group]GITHUB_TOKEN Permissions
2022-05-13T12:29:50.0747728Z Contents: read
2022-05-13T12:29:50.0748302Z Metadata: read
2022-05-13T12:29:50.0748747Z ##[endgroup]
2022-05-13T12:29:50.0753317Z Secret source: Actions
2022-05-13T12:29:50.0753867Z Prepare workflow directory
2022-05-13T12:29:50.1960620Z Prepare all required actions
2022-05-13T12:29:50.2180645Z Getting action download info
2022-05-13T12:29:50.4584091Z Download action repository 'actions/checkout@v2' (SHA:7884fcad6b5d53d10323aee724dc68d8b9096a2e)
2022-05-13T12:29:50.7876931Z Download action repository 'google-github-actions/auth@v0' (SHA:b258a9f230b36c9fa86dfaa43d1906bd76399edb)
2022-05-13T12:29:50.9419977Z Download action repository 'actions/setup-go@v3' (SHA:fcdc43634adb5f7ae75a9d7a9b9361790f7293e2)
2022-05-13T12:29:51.1323807Z Download action repository<EMAIL_ADDRESS>(SHA:136d96b4aee02b1f0de3ba493b1d47135042d9c0)
2022-05-13T12:29:51.3668058Z Download action repository<EMAIL_ADDRESS>(SHA:ea7b857d8a33dc2fb4ef5a724500044281b49a5e)
2022-05-13T12:29:51.8839272Z ##[group]Run actions/checkout@v2
2022-05-13T12:29:51.8839712Z with:
2022-05-13T12:29:51.8839993Z   ref: develop
2022-05-13T12:29:51.8840310Z   repository: ${{ORG}}/${{REPO}}
2022-05-13T12:29:51.8840946Z   token: ***
2022-05-13T12:29:51.8841226Z   ssh-strict: true
2022-05-13T12:29:51.8841561Z   persist-credentials: true
2022-05-13T12:29:51.8841887Z   clean: true
2022-05-13T12:29:51.8842167Z   fetch-depth: 1
2022-05-13T12:29:51.8842464Z   lfs: false
2022-05-13T12:29:51.8842734Z   submodules: false
2022-05-13T12:29:51.8843060Z   set-safe-directory: true
2022-05-13T12:29:51.8843368Z env:
2022-05-13T12:29:51.8843655Z   MIN_LOG_SEVERITY: DEBUG
2022-05-13T12:29:51.8843958Z   TZ: Asia/Tokyo
2022-05-13T12:29:51.8844211Z   ENV: dev
2022-05-13T12:29:51.8844495Z   GITHUB_BRANCH: develop
2022-05-13T12:29:51.8844815Z   AWS_ACCOUNT_ID: xxxxxxx
2022-05-13T12:29:51.8845390Z   AWS_ASSUME_ROLE: xxxxxxx
2022-05-13T12:29:51.8845989Z   GO_VERSION: 1.17.2
2022-05-13T12:29:51.8846272Z ##[endgroup]
2022-05-13T12:29:52.1749516Z Syncing repository: ${{ORG}}/${{REPO}}
2022-05-13T12:29:52.1752466Z ##[group]Getting Git version info
2022-05-13T12:29:52.1753626Z Working directory is '/home/runner/work/${{REPOP}}/$${{REPO}}'
2022-05-13T12:29:52.1755038Z [command]/usr/bin/git version
2022-05-13T12:29:52.1861256Z git version 2.36.1
2022-05-13T12:29:52.1878853Z ##[endgroup]
2022-05-13T12:29:52.1903146Z Temporarily overriding HOME='/home/runner/work/_temp/e7d67131-5032-4b90-9d43-1be92d0da22f' before making global git config changes
2022-05-13T12:29:52.1904212Z Adding repository directory to the temporary git global config as a safe directory
2022-05-13T12:29:52.1905168Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/clos/clos
2022-05-13T12:29:52.2025214Z Deleting the contents of '/home/runner/work/clos/clos'
2022-05-13T12:29:52.2032389Z ##[group]Initializing the repository
2022-05-13T12:29:52.2034327Z [command]/usr/bin/git init /home/runner/work/clos/clos
2022-05-13T12:29:52.2068945Z hint: Using 'master' as the name for the initial branch. This default branch name
2022-05-13T12:29:52.2069948Z hint: is subject to change. To configure the initial branch name to use in all
2022-05-13T12:29:52.2070858Z hint: of your new repositories, which will suppress this warning, call:
2022-05-13T12:29:52.2071244Z hint:
2022-05-13T12:29:52.2071768Z hint: 	git config --global init.defaultBranch <name>
2022-05-13T12:29:52.2072139Z hint:
2022-05-13T12:29:52.2072641Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
2022-05-13T12:29:52.2073296Z hint: 'development'.  This flow does not support specifying an access token lifetime of greater than 1 hour.
2022-05-13T12:29:53.3970417Z ##[error]google-github-actions/auth failed with: failed to sign JWT using<EMAIL_ADDRESS>{
  "error": {
    "code": 403,
    "message": "The caller does not have permission",
    "status": "PERMISSION_DENIED"
  }
}
2022-05-13T12:29:53.4096962Z Post job cleanup.
2022-05-13T12:29:53.4859073Z Removed exported credentials at "/home/runner/work/clos/clos/gha-creds-029129737f17a4ef.json".
2022-05-13T12:29:53.4984195Z Post job cleanup.
2022-05-13T12:29:53.6485352Z [command]/usr/bin/git version
2022-05-13T12:29:53.6547661Z git version 2.36.1
2022-05-13T12:29:53.6592145Z Temporarily overriding HOME='/home/runner/work/_temp/5d04b7b9-fb2d-44d3-ac27-e7e565b9c97f' before making global git config changes
2022-05-13T12:29:53.6593221Z Adding repository directory to the temporary git global config as a safe directory
2022-05-13T12:29:53.6598970Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/${{REPO}}/${{REPO}}
2022-05-13T12:29:53.6646503Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
2022-05-13T12:29:53.6687097Z [command]/usr/bin/git submodule foreach --recursive git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :
2022-05-13T12:29:53.7008066Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
2022-05-13T12:29:53.7038551Z http.https://github.com/.extraheader
2022-05-13T12:29:53.7050943Z [command]/usr/bin/git config --local --unset-all http.https://github.com/.extraheader
2022-05-13T12:29:53.7092029Z [command]/usr/bin/git submodule foreach --recursive git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :
2022-05-13T12:29:53.7609907Z Cleaning up orphan processes

Additional information
No response

Hi @ken5scal
Can you try setting access_token_lifetime to 1800s? I'm wondering if there's some clock skew...

I had the same problem and tried setting access_token_lifetime to 1800s but it didn't solve.

@sethvargo @fujikky
Actually, it worked!
Just to note, I was required to set one or more Google Workspace related API scopes to access_token_scopes .
- id: google-auth-3
        name: 'Authenticate to Google Cloud'
        uses: google-github-actions/auth@v0
        with:
          token_format: 'access_token'
          workload_identity_provider: 'projects/{PROJECT_ID}/locations/global/workloadIdentityPools/${ID_POOL}/providers/${PROVIDER}'
          service_account<EMAIL_ADDRESS>          access_token_scopes: 'https://www.googleapis.com/auth/admin.reports.audit.readonly'
          access_token_subject<EMAIL_ADDRESS>          access_token_lifetime: '1800s'

I have retrieved following credential as output. How do we use this in our code because this seems taking idtoken ?
{"type":"external_account","audience":"//iam.googleapis.com/projects/${PROJECT_ID}/locations/global/workloadIdentityPools/${IDENTITY_POOL_ID}/providers/${PROVIDER_ID}","subject_token_type":"urn:ietf:params:oauth:token type:jwt","token_url":"https://sts.googleapis.com/v1/token","service_account_impersonation_url":"https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/sa@${PROJECT_ID}.iam.gserviceaccount.com:generateAccessToken","credential_source":{"url":"https://pipelines.actions.githubusercontent.com/SOME_RANDOM_STRING/00000000-0000-0000-0000-000000000000/_apis/distributedtask/hubs/Actions/plans/SOME_RANDOM_STRING/idtoken?api-version=2.0&audience=https%3A%2F%2Fiam.googleapis.com%2Fprojects%${PROJECT_ID}%2Flocations%2Fglobal%2FworkloadIdentityPools%2F${IDENTITY_POOL_ID}%2Fproviders%2F${PROVIDER_ID}","headers":{"Authorization":"***"},"format":{"type":"json","subject_token_field_name":"value"}}}

If we use this value just like the way we do in service account key, it fails with following error:
googleapi: Error 401: Access denied. You are not authorized to read activity records., authError

@ken5scal
Thanks for the info!
However, adding access_token_scopes did not solve the problem.
Here is the YAML of the Actions I tried.
- id: auth
  uses: google-github-actions/auth@v0
  with:
    workload_identity_provider: projects/00000000000/locations/global/workloadIdentityPools/github-actions/providers/foo-provider
    service_account<EMAIL_ADDRESS>    token_format: access_token
    access_token_scopes: https://www.googleapis.com/auth/spreadsheets
    access_token_subject<EMAIL_ADDRESS>    access_token_lifetime: 1800s

I got the same error message.
An access token subject was specified, triggering Domain-Wide Delegation flow. This flow does not support specifying an access token lifetime of greater than 1 hour.
Error: google-github-actions/auth failed with: failed to sign JWT using<EMAIL_ADDRESS>{
  "error": {
    "code": 403,
    "message": "The caller does not have permission",
    "status": "PERMISSION_DENIED"
  }
}

@ken5scal what API(s) are you trying to call after authenticating? The action.yml in the original issue stops at the auth step. Note all technologies support WIF (for example, bq and gsutil do not support WIF).
@fujikky make sure you've granted roles/iam.serviceAccountTokenCreator and roles/iam.workloadIdentityUser to the external identity ("principalSet").

@sethvargo
Thanks. I'm trying to retrieve a list of activities for Google Workspace applications such as the Admin console application or the Google Drive application.
More specifically I am using Admin Go Package.
https://pkg.go.dev/google.golang.org/api/admin/reports/v1#ActivitiesService.List
I believe the value in scope (
https://www.googleapis.com/auth/admin.reports.audit.readonly ) is correct since non-keyless domain-wide delegation is working.

@sethvargo
Thanks for the reply!
As you said, my identity's principalSet was missing a policy.
So I attached the policy with the following command.
But I'm still getting a PERMISSION_DENIED error.
gcloud iam service-accounts add-iam-policy-binding "${SA_EMAIL}" \
  --project="${PROJECT_ID}" \
  --role="roles/iam.serviceAccountTokenCreator" \
  --member="principalSet://iam.googleapis.com/${WORKLOAD_IDENTITY_POOL_ID}/attribute.repository/${REPO}"

gcloud iam service-accounts add-iam-policy-binding "${SA_EMAIL}" \
  --project="${PROJECT_ID}" \
  --role="roles/iam.workloadIdentityUser" \
  --member="principalSet://iam.googleapis.com/${WORKLOAD_IDENTITY_POOL_ID}/attribute.repository/${REPO}"

I have confirmed that the policy is attached in the Cloud Console.
Are there any other possible factors?

And the error message is still "failed to sign JWT using ..."? Do you have debug logs you could share?

failed to sign JWT using ...

That's right. Let me share the debug log later

@sethvargo
Thanks for the help! My current error message is not about JWT.
Here is the debug log.

2022-05-18T02:48:54.1079318Z ##[debug]Evaluating condition for step: 'Run google-github-actions/auth@v0'
2022-05-18T02:48:54.1081779Z ##[debug]Evaluating: success()
2022-05-18T02:48:54.1082119Z ##[debug]Evaluating success:
2022-05-18T02:48:54.1082637Z ##[debug]=> true
2022-05-18T02:48:54.1083009Z ##[debug]Result: true
2022-05-18T02:48:54.1083741Z ##[debug]Starting: Run google-github-actions/auth@v0
2022-05-18T02:48:54.1107122Z ##[debug]Register post job cleanup for action: google-github-actions/auth@v0
2022-05-18T02:48:54.1116376Z ##[debug]Loading inputs
2022-05-18T02:48:54.1156861Z ##[debug]Loading env
2022-05-18T02:48:54.1161340Z ##[group]Run google-github-actions/auth@v0
2022-05-18T02:48:54.1161582Z with:
2022-05-18T02:48:54.1161931Z   workload_identity_provider: projects/42297918024/locations/global/workloadIdentityPools/github-actions/providers/gha-provider
2022-05-18T02:48:54.1162401Z   service_account<EMAIL_ADDRESS>2022-05-18T02:48:54.1162711Z   token_format: access_token
2022-05-18T02:48:54.1163062Z   access_token_scopes: https://www.googleapis.com/auth/spreadsheets
2022-05-18T02:48:54.1163384Z   access_token_subject<EMAIL_ADDRESS>2022-05-18T02:48:54.1163637Z   access_token_lifetime: 1800s
2022-05-18T02:48:54.1163869Z   create_credentials_file: true
2022-05-18T02:48:54.1164104Z   export_environment_variables: true
2022-05-18T02:48:54.1164434Z   cleanup_credentials: true
2022-05-18T02:48:54.1164655Z   id_token_include_email: false
2022-05-18T02:48:54.1164857Z ##[endgroup]
2022-05-18T02:48:54.1812723Z ##[debug]Using workload identity provider "projects/42297918024/locations/global/workloadIdentityPools/github-actions/providers/gha-provider"
2022-05-18T02:48:54.1817176Z ##[debug]ID token url is https://pipelines.actions.githubusercontent.com/ThSaUVFeAIsX9U3ghIS2qvmytZ8tsU4CoRIlqN5OLLcIXO5qGG/00000000-0000-0000-0000-000000000000/_apis/distributedtask/hubs/Actions/plans/ec8a42c1-46ad-472d-9ad2-c6be602fc6f9/jobs/4a0cec82-aaa7-5c07-9c1e-30cc88945a51/idtoken?api-version=2.0&audience=https%3A%2F%2Fiam.googleapis.com%2Fprojects%2F42297918024%2Flocations%2Fglobal%2FworkloadIdentityPools%2Fgithub-actions%2Fproviders%2Fgha-provider
2022-05-18T02:48:54.3937599Z ::add-mask::***
2022-05-18T02:48:54.3944876Z ##[debug]Creating credentials file
2022-05-18T02:48:54.3984836Z Created credentials file at "/home/runner/work/{REPO}/{REPO}/gha-creds-70989b20f5b188ff.json"
2022-05-18T02:48:54.3988901Z
2022-05-18T02:48:54.3993326Z ::set-output name=credentials_file_path::/home/runner/work/{REPO}/{REPO}/gha-creds-70989b20f5b188ff.json
2022-05-18T02:48:54.4013089Z ##[debug]steps.auth.outputs.credentials_file_path='/home/runner/work/{REPO}/{REPO}/gha-creds-70989b20f5b188ff.json'
2022-05-18T02:48:54.4016898Z
2022-05-18T02:48:54.4017544Z ::set-output name=project_id::{PROJECT_ID}
2022-05-18T02:48:54.4018029Z ##[debug]steps.auth.outputs.project_id='{PROJECT_ID}'
2022-05-18T02:48:54.4018509Z ##[debug]Creating access token
2022-05-18T02:48:54.7174350Z ##[error]google-github-actions/auth failed with: failed to generate Google Cloud access token for<EMAIL_ADDRESS>{
  "error": {
    "code": 403,
    "message": "The caller does not have permission",
    "status": "PERMISSION_DENIED"
  }
}
2022-05-18T02:48:54.7211084Z ##[debug]Node Action run completed with exit code 1
2022-05-18T02:48:54.7222553Z ##[debug]CLOUDSDK_AUTH_CREDENTIAL_FILE_OVERRIDE='/home/runner/work/{REPO}/{REPO}/gha-creds-70989b20f5b188ff.json'
2022-05-18T02:48:54.7223354Z ##[debug]GOOGLE_APPLICATION_CREDENTIALS='/home/runner/work/{REPO}/{REPO}/gha-creds-70989b20f5b188ff.json'
2022-05-18T02:48:54.7223960Z ##[debug]GOOGLE_GHA_CREDS_PATH='/home/runner/work/{REPO}/{REPO}/gha-creds-70989b20f5b188ff.json'
2022-05-18T02:48:54.7224415Z ##[debug]CLOUDSDK_CORE_PROJECT='{PROJECT_ID}'
2022-05-18T02:48:54.7224994Z ##[debug]CLOUDSDK_PROJECT='{PROJECT_ID}'
2022-05-18T02:48:54.7225295Z ##[debug]GCLOUD_PROJECT='{PROJECT_ID}'
2022-05-18T02:48:54.7225590Z ##[debug]GCP_PROJECT='{PROJECT_ID}'
2022-05-18T02:48:54.7225896Z ##[debug]GOOGLE_CLOUD_PROJECT='{PROJECT_ID}'
2022-05-18T02:48:54.7231175Z ##[debug]Finishing: Run google-github-actions/auth@v0

@sethvargo
It finally worked! 🎉
First, I founded that the attribute.repository was missing in the provider's attributes! I redid the README steps and set the correct attributes. Sorry for my mistake.
Next, I found a bug in the action.
The code to suppress the warning, fixed 2 days ago, does not seem to pass through the buildDomainWideDelegationJWT if the access_token_lifetime exceeds 3600 seconds.
https://github.com/google-github-actions/auth/blob/714f1fe243ca012171c3f4b3ec7d205bcb3589c9/src/main.ts#L213
I changed to the previous version uses<EMAIL_ADDRESS>in my actions yaml, and the impersonated access token was worked successfully.

@sethvargo
I think we misunderstood each other.
What I was saying is that google-github-actions/auth@v0  does return a credential file Created credentials file at "/home/runner/work/xxx/xxx/gha-creds-e3360af22c9dc486.json" and store it under GOOGLE_APPLICATION_CREDENTIALS .
Now, I use a Golang App to fetch the audit log...and get an error.

Go Code
```
	hoge, err := ioutil.ReadFile(os.Getenv("GOOGLE_APPLICATION_CREDENTIALS"))
	if err != nil {
		panic(fmt.Sprintf("CredentialsFromJSONWithParams: %v", err))
	}
	cred, err := google.CredentialsFromJSONWithParams(ctx, hoge, google.CredentialsParams{
		Scopes: getScopes(),
	})
	client := oauth2.NewClient(ctx, cred.TokenSource)
        reportsSrv, err := reports.NewService(ctx, option.WithHTTPClient(client))
   activities, err := srv.Activities.List("all", applicationName).StartTime(startTime.Format(time.RFC3339)).EndTime(endTime.Format(time.RFC3339)).Do()

</details>

panic: failed to listing activities: googleapi: Error 401: Access denied. You are not authorized to read activity records., authError

@fujikky fixed in https://github.com/google-github-actions/auth/pull/178 and will be released as 0.7.3. Thanks for catching that, and I'm glad to see this is working for you now.
@ken5scal which client library is that, and which version are you using? In general, you should never need to parse GOOGLE_APPLICATION_CREDENTIALS, since all the official google SDKs automatically look for that environment variable and use it for authentication. reports.NewService(ctx) should "just work"

@sethvargo  Thanks, I'm using<EMAIL_ADDRESS>which is the lates one.
I actually changed my code not to parse GOOGLE_APPLICATION_CREDENTIALS, but still giving me googleapi: Error 401: Access denied. You are not authorized to read activity records., authError

That library doesn't support WIF yet: https://github.com/googleapis/google-api-go-client/issues/750

Ohhh.... Thanks, I would watch the issue in there @sethvargo


'Maximum update depth exceeded' when passing 'validate' param of Field as a function that not stored in a variable

Subject of the issue
When passing 'validate' param of Field as a function that not stored in a variable we get infinite loop of updates.
Your environment

Software
Version(s)

redux-form
8.3.7

redux
4.0.5

react-redux
7.2.2

react
17.0.1

react-dom
17.0.1

node
12.18.2

yarn if using
1.22.10

Browser
Chrome

Operating System
Windows 7

Steps to reproduce
You can reproduce this bug by visiting my sandbox.

Well, I think it is a little annoying, but you can use useCallback to avoid this.

Solved this problem through validating the whole form:
reduxForm({
    form: 'from-name',
    validate,
  }),

Solved this problem through validating the whole form:
reduxForm({
    form: 'from-name',
    validate,
  }),

"Maximum update depth exceeded" occurs likely because the functions being passed as validate props change reference, which causes Redux-Form Field to un-register and re-register the Field. A re-render occurs, the functions change reference and the cycle repeats infinitely until the crash occurs.
To keep the function reference constant, you would need to define the functions globally, or memoize them with useCallback()/Lodash's memoize().
Relevant lines of code:
https://github.com/redux-form/redux-form/blob/807415081330dfa6b4953398dbc74e7d54ad4679/src/createField.js#L45-L65


Discussion: Get latest software version automatically

I made a PHP script that fetches the latest version from the unify download site.
(Related to #151 )
<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://www.ui.com/download/?group=unifi-ap');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');

curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');

$headers = array();
$headers[] = 'Authority: www.ui.com';
$headers[] = 'Pragma: no-cache';
$headers[] = 'Cache-Control: no-cache';
$headers[] = 'Accept: application/json, text/javascript, */*; q=0.01';
$headers[] = 'X-Requested-With: XMLHttpRequest';
$headers[] = 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36';
$headers[] = 'Sec-Fetch-Site: same-origin';
$headers[] = 'Sec-Fetch-Mode: cors';
$headers[] = 'Referer: https://www.ui.com/download/unifi/unifi-ap';
$headers[] = 'Accept-Encoding: gzip, deflate, br';
$headers[] = 'Accept-Language: en-US,en;q=0.9,sv-SE;q=0.8,sv;q=0.7,en-SE;q=0.6,en-GB;q=0.5';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}

$workingvar = json_decode($result, true)["downloads"];
$workingvar = array_filter($workingvar, function ($node){
	return $node["category__slug"] == "software";
});
$workingvar = array_filter($workingvar, function ($node){
	return strpos($node["description"],"inux") !== false;
});
usort($workingvar, function ($item1, $item2) {
    return str_replace(".", "", $item2['version']) <=> str_replace(".", "", $item1['version']);
});
$latest = $workingvar[0];

$latest = $latest["version"];
curl_close($ch);
var_dump($latest);
?>

it currently outputs the versionnumber, but the object has multiple properties you could output.

not needed if #141 is completed

Made an extremely minor improvement to #141, opened a PR for it - #294

@the-wondersmith Note that if the controller is already installed and the admin account is registered for EA releases, you can pull their API bearer token from the Mongo DB and use that to download EA releases.
I have all but abandoned this project, but here is a link showing you how I'm using it:
https://github.com/sprockteam/ubi-tools/blob/3cdeb5197f543532f0e8df472f967a5f90b1aaf0/easy-ubnt.sh#L1381


[google_maps][web] Add support for Polyline patterns

I use the following keywork on the GoogleMap widget:
polylines: Set.of(polylines.values)
Where polylines is set as follows:
polylineCoordinates = decodeEncodedPolyline(r"_lgiJ_hkmBs@eEiB_@NsF`CR? ...
    PolylineId id = PolylineId("poly");
    Polyline polyline = Polyline(
        polylineId: id,
        color: Colors.red,
        width: 3,
        patterns: [PatternItem.dash(15), PatternItem.gap(5)],
        points: polylineCoordinates);
    polylines[id] = polyline;

This results in a dashed line on Android, as it should. But the same code gives a solid line on web.

Hi @BoHellgren
Can you please provide your flutter doctor -v, your flutter run --verbose and a minimal complete reproducible code sample?
Thank you

Hi @BoHellgren
Can you please provide your flutter doctor -v, your flutter run --verbose and a minimal complete reproducible code sample?
Thank you

flutter doctor -v
D:\AndroidStudioProjects\nds_konst>flutter doctor -v
[√] Flutter (Channel beta, 1.25.0-8.2.pre, on Microsoft Windows [Version
    10.0.18363.1316], locale sv-SE)
    • Flutter version 1.25.0-8.2.pre at D:\flutter_windows\flutter
    • Framework revision b0a2299859 (9 days ago), 2021-01-05 12:34:13 -0800
    • Engine revision 92ae191c17
    • Dart version 2.12.0 (build 2.12.0-133.2.beta)

[√] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
    • Android SDK at D:\Android\Sdk
    • Platform android-30, build-tools 29.0.3
    • ANDROID_HOME = D:\Android\Sdk
    • Java binary at: D:\AndroidStudio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build
      1.8.0_212-release-1586-b04)
    • All Android licenses accepted.

[√] Chrome - develop for the web
    • Chrome at C:\Program Files (x86)\Google\Chrome\Application\chrome.exe

[√] Android Studio (version 3.6)
    • Android Studio at D:\AndroidStudio
    • Flutter plugin version 45.1.1
    • Dart plugin version 192.8052
    • Java version OpenJDK Runtime Environment (build
      1.8.0_212-release-1586-b04)

[√] VS Code, 64-bit edition (version 1.42.1)
    • VS Code at C:\Program Files\Microsoft VS Code
    • Flutter extension version 3.8.1

[√] Connected device (3 available)
    • SM G970F (mobile) • RF8M3164L6B • android-arm64  • Android 10 (API 29)
    • Chrome (web)      • chrome      • web-javascript • Google Chrome
      87.0.4280.141
    • Edge (web)        • edge        • web-javascript • Microsoft Edge
      87.0.664.66

• No issues found!

D:\AndroidStudioProjects\nds_konst>

pubspec.yaml
name: ndskonst
description: Hitta konsten i NDS

# The following line prevents the package from being accidentally published to
# pub.dev using `pub publish`. This is preferred for private packages.
publish_to: 'none' # Remove this line if you wish to publish to pub.dev

# The following defines the version and build number for your application.
# A version number is three numbers separated by dots, like 1.2.43
# followed by an optional build number separated by a +.
# Both the version and the builder number may be overridden in flutter
# build by specifying --build-name and --build-number, respectively.
# In Android, build-name is used as versionName while build-number used as versionCode.
# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
# Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
version: 1.0.8+8

environment:
  sdk: ">=2.10.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter

  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^0.1.3
  google_maps_flutter: ^1.0.10
  google_maps_flutter_web: ^0.1.0+8
  geolocator: ^6.1.13
  js: ^0.6.2
  firebase_admob: ^0.9.3+2
  photo_view: ^0.10.2

dev_dependencies:
  flutter_test:
    sdk: flutter
  flutter_launcher_icons: "^0.7.3"

flutter_icons:
    android: "launcher_icon"
    ios: true
    image_path: "assets/images/icon.png"

# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec

# The following section is specific to Flutter.
flutter:

  # The following line ensures that the Material Icons font is
  # included with your application, so that you can use the icons in
  # the material Icons class.
  uses-material-design: true

  # To add assets to your application, add an assets section, like this:
  # assets:
  #   - images/a_dot_burr.jpeg
  #   - images/a_dot_ham.jpeg

  # An image asset can refer to one or more resolution-specific "variants", see
  # https://flutter.dev/assets-and-images/#resolution-aware.

  # For details regarding adding assets from package dependencies, see
  # https://flutter.dev/assets-and-images/#from-packages

  # To add custom fonts to your application, add a fonts section here,
  # in this "flutter" section. Each entry in this list should have a
  # "family" key with the font family name, and a "fonts" key with a
  # list giving the asset and other descriptors for the font. For
  # example:
  # fonts:
  #   - family: Schyler
  #     fonts:
  #       - asset: fonts/Schyler-Regular.ttf
  #       - asset: fonts/Schyler-Italic.ttf
  #         style: italic
  #   - family: Trajan Pro
  #     fonts:
  #       - asset: fonts/TrajanPro.ttf
  #       - asset: fonts/TrajanPro_Bold.ttf
  #         weight: 700
  #
  # For details regarding fonts from package dependencies,
  # see https://flutter.dev/custom-fonts/#from-packages
  assets:
    - assets/images/
    - assets/markers/
    - assets/descriptions/

Code (also for illustrating Flutter issue 73789):
import 'dart:typed_data';
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';

void main() {
  runApp(
    MapsPage(),
  );
}

class MapsPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MapsHome(),
    );
  }
}

class MapsHome extends StatefulWidget {
  @override
  _MapsHomeState createState() {
    return _MapsHomeState();
  }
}

class _MapsHomeState extends State<MapsHome> {
  LatLng _kMapCenter = LatLng(52.4478, -3.5402);
  Map<PolylineId, Polyline> polylines = {};
  List<LatLng> polylineCoordinates = [LatLng(52.447858013765305, -3.541443205678288), LatLng(52.44821765976425, -3.5392277011756144)];

  Future<Set<Marker>> initMap() async {
    PolylineId id = PolylineId("poly");
    Polyline polyline = Polyline(
        polylineId: id,
        color: Colors.red,
        width: 3,
        patterns: [PatternItem.dash(15), PatternItem.gap(5)],
        points: polylineCoordinates);
    polylines[id] = polyline;

    BitmapDescriptor destIcon = await createCustomMarkerBitmap(1, 'assets/markers/artmarker.png');
    print('********************* $destIcon');
    Set<Marker> _markers = Set<Marker>();
    _markers.add(Marker(
        markerId: MarkerId("marker_1"),
        position: _kMapCenter,
        icon: destIcon,
        infoWindow: InfoWindow(title: 'test')));
    print(_markers);
    return _markers;
  }

  @override
  Widget build(BuildContext context) {
    print('***************************************build');
    return FutureBuilder(
      future: initMap(),
      builder: (BuildContext context, AsyncSnapshot snapshot) {
        if (snapshot.hasData) {
          return GoogleMap(
            initialCameraPosition: CameraPosition(
              target: _kMapCenter,
              zoom: 18.0,
            ),
            markers: snapshot.data,
            polylines: Set<Polyline>.of(polylines.values),
            //   onMapCreated: _onMapCreated,
          );
        } else {
          return Center(
            child: CircularProgressIndicator(),
          );
        }
      },
    );
  }

  Future<BitmapDescriptor> createCustomMarkerBitmap(int markerNumber, String imageURL) async {
    int markerWidth = 100;
    // if (kIsWeb) markerWidth= 30; else markerWidth = 100;
    PictureRecorder recorder = new PictureRecorder();
    Canvas c = Canvas(recorder);

    final data1 = await rootBundle.load(imageURL);
    var markerImage = await decodeImageFromList(data1.buffer.asUint8List());
    c.drawImageRect(
        markerImage,
        Rect.fromLTRB(0.0, 0.0, markerImage.width.toDouble(), markerImage.height.toDouble()),
        Rect.fromLTRB(0.0, 0.0, markerWidth.toDouble(), markerWidth.toDouble()),
        Paint());

    TextSpan span = TextSpan(
      style: TextStyle(color: Colors.black, fontSize: markerWidth / 3, fontWeight: FontWeight.bold),
      text: markerNumber.toString(),
    );
    TextPainter tp = TextPainter(text: span, textAlign: TextAlign.left, textDirection: TextDirection.ltr);
    tp.layout();
    tp.paint(c, Offset(markerNumber > 9 ? markerWidth / 3.5 : markerWidth / 2.5, markerWidth / 5.5));

    var p = recorder.endRecording();
    ByteData pngBytes =
        await (await p.toImage(markerWidth, markerWidth)).toByteData(format: ImageByteFormat.png);
    Uint8List data = Uint8List.view(pngBytes.buffer);
    return BitmapDescriptor.fromBytes(data);
  }
}

Result of flutter run, on Android phone:

Result of flutter run d:chrome --web-renderer canvaskit:

flutter doctor -v
D:\AndroidStudioProjects\nds_konst>flutter doctor -v
[√] Flutter (Channel beta, 1.25.0-8.2.pre, on Microsoft Windows [Version
    10.0.18363.1316], locale sv-SE)
    • Flutter version 1.25.0-8.2.pre at D:\flutter_windows\flutter
    • Framework revision b0a2299859 (9 days ago), 2021-01-05 12:34:13 -0800
    • Engine revision 92ae191c17
    • Dart version 2.12.0 (build 2.12.0-133.2.beta)

[√] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
    • Android SDK at D:\Android\Sdk
    • Platform android-30, build-tools 29.0.3
    • ANDROID_HOME = D:\Android\Sdk
    • Java binary at: D:\AndroidStudio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build
      1.8.0_212-release-1586-b04)
    • All Android licenses accepted.

[√] Chrome - develop for the web
    • Chrome at C:\Program Files (x86)\Google\Chrome\Application\chrome.exe

[√] Android Studio (version 3.6)
    • Android Studio at D:\AndroidStudio
    • Flutter plugin version 45.1.1
    • Dart plugin version 192.8052
    • Java version OpenJDK Runtime Environment (build
      1.8.0_212-release-1586-b04)

[√] VS Code, 64-bit edition (version 1.42.1)
    • VS Code at C:\Program Files\Microsoft VS Code
    • Flutter extension version 3.8.1

[√] Connected device (3 available)
    • SM G970F (mobile) • RF8M3164L6B • android-arm64  • Android 10 (API 29)
    • Chrome (web)      • chrome      • web-javascript • Google Chrome
      87.0.4280.141
    • Edge (web)        • edge        • web-javascript • Microsoft Edge
      87.0.664.66

• No issues found!

D:\AndroidStudioProjects\nds_konst>

pubspec.yaml
name: ndskonst
description: Hitta konsten i NDS

# The following line prevents the package from being accidentally published to
# pub.dev using `pub publish`. This is preferred for private packages.
publish_to: 'none' # Remove this line if you wish to publish to pub.dev

# The following defines the version and build number for your application.
# A version number is three numbers separated by dots, like 1.2.43
# followed by an optional build number separated by a +.
# Both the version and the builder number may be overridden in flutter
# build by specifying --build-name and --build-number, respectively.
# In Android, build-name is used as versionName while build-number used as versionCode.
# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
# Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
version: 1.0.8+8

environment:
  sdk: ">=2.10.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter

  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^0.1.3
  google_maps_flutter: ^1.0.10
  google_maps_flutter_web: ^0.1.0+8
  geolocator: ^6.1.13
  js: ^0.6.2
  firebase_admob: ^0.9.3+2
  photo_view: ^0.10.2

dev_dependencies:
  flutter_test:
    sdk: flutter
  flutter_launcher_icons: "^0.7.3"

flutter_icons:
    android: "launcher_icon"
    ios: true
    image_path: "assets/images/icon.png"

# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec

# The following section is specific to Flutter.
flutter:

  # The following line ensures that the Material Icons font is
  # included with your application, so that you can use the icons in
  # the material Icons class.
  uses-material-design: true

  # To add assets to your application, add an assets section, like this:
  # assets:
  #   - images/a_dot_burr.jpeg
  #   - images/a_dot_ham.jpeg

  # An image asset can refer to one or more resolution-specific "variants", see
  # https://flutter.dev/assets-and-images/#resolution-aware.

  # For details regarding adding assets from package dependencies, see
  # https://flutter.dev/assets-and-images/#from-packages

  # To add custom fonts to your application, add a fonts section here,
  # in this "flutter" section. Each entry in this list should have a
  # "family" key with the font family name, and a "fonts" key with a
  # list giving the asset and other descriptors for the font. For
  # example:
  # fonts:
  #   - family: Schyler
  #     fonts:
  #       - asset: fonts/Schyler-Regular.ttf
  #       - asset: fonts/Schyler-Italic.ttf
  #         style: italic
  #   - family: Trajan Pro
  #     fonts:
  #       - asset: fonts/TrajanPro.ttf
  #       - asset: fonts/TrajanPro_Bold.ttf
  #         weight: 700
  #
  # For details regarding fonts from package dependencies,
  # see https://flutter.dev/custom-fonts/#from-packages
  assets:
    - assets/images/
    - assets/markers/
    - assets/descriptions/

Code (also for illustrating Flutter issue 73789):
import 'dart:typed_data';
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';

void main() {
  runApp(
    MapsPage(),
  );
}

class MapsPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MapsHome(),
    );
  }
}

class MapsHome extends StatefulWidget {
  @override
  _MapsHomeState createState() {
    return _MapsHomeState();
  }
}

class _MapsHomeState extends State<MapsHome> {
  LatLng _kMapCenter = LatLng(52.4478, -3.5402);
  Map<PolylineId, Polyline> polylines = {};
  List<LatLng> polylineCoordinates = [LatLng(52.447858013765305, -3.541443205678288), LatLng(52.44821765976425, -3.5392277011756144)];

  Future<Set<Marker>> initMap() async {
    PolylineId id = PolylineId("poly");
    Polyline polyline = Polyline(
        polylineId: id,
        color: Colors.red,
        width: 3,
        patterns: [PatternItem.dash(15), PatternItem.gap(5)],
        points: polylineCoordinates);
    polylines[id] = polyline;

    BitmapDescriptor destIcon = await createCustomMarkerBitmap(1, 'assets/markers/artmarker.png');
    print('********************* $destIcon');
    Set<Marker> _markers = Set<Marker>();
    _markers.add(Marker(
        markerId: MarkerId("marker_1"),
        position: _kMapCenter,
        icon: destIcon,
        infoWindow: InfoWindow(title: 'test')));
    print(_markers);
    return _markers;
  }

  @override
  Widget build(BuildContext context) {
    print('***************************************build');
    return FutureBuilder(
      future: initMap(),
      builder: (BuildContext context, AsyncSnapshot snapshot) {
        if (snapshot.hasData) {
          return GoogleMap(
            initialCameraPosition: CameraPosition(
              target: _kMapCenter,
              zoom: 18.0,
            ),
            markers: snapshot.data,
            polylines: Set<Polyline>.of(polylines.values),
            //   onMapCreated: _onMapCreated,
          );
        } else {
          return Center(
            child: CircularProgressIndicator(),
          );
        }
      },
    );
  }

  Future<BitmapDescriptor> createCustomMarkerBitmap(int markerNumber, String imageURL) async {
    int markerWidth = 100;
    // if (kIsWeb) markerWidth= 30; else markerWidth = 100;
    PictureRecorder recorder = new PictureRecorder();
    Canvas c = Canvas(recorder);

    final data1 = await rootBundle.load(imageURL);
    var markerImage = await decodeImageFromList(data1.buffer.asUint8List());
    c.drawImageRect(
        markerImage,
        Rect.fromLTRB(0.0, 0.0, markerImage.width.toDouble(), markerImage.height.toDouble()),
        Rect.fromLTRB(0.0, 0.0, markerWidth.toDouble(), markerWidth.toDouble()),
        Paint());

    TextSpan span = TextSpan(
      style: TextStyle(color: Colors.black, fontSize: markerWidth / 3, fontWeight: FontWeight.bold),
      text: markerNumber.toString(),
    );
    TextPainter tp = TextPainter(text: span, textAlign: TextAlign.left, textDirection: TextDirection.ltr);
    tp.layout();
    tp.paint(c, Offset(markerNumber > 9 ? markerWidth / 3.5 : markerWidth / 2.5, markerWidth / 5.5));

    var p = recorder.endRecording();
    ByteData pngBytes =
        await (await p.toImage(markerWidth, markerWidth)).toByteData(format: ImageByteFormat.png);
    Uint8List data = Uint8List.view(pngBytes.buffer);
    return BitmapDescriptor.fromBytes(data);
  }
}

Result of flutter run, on Android phone:

Result of flutter run d:chrome --web-renderer canvaskit:

I was able to reproduce the issue on web with or without canvaskit.

flutter doctor -v
[✓] Flutter (Channel beta, 1.25.0-8.2.pre, on Mac OS X 10.15.7 19H2 darwin-x64, locale en)
    • Flutter version 1.25.0-8.2.pre at /Users/pedromassango/Code/flutter_beta
    • Framework revision b0a2299859 (10 days ago), 2021-01-05 12:34:13 -0800
    • Engine revision 92ae191c17
    • Dart version 2.12.0 (build 2.12.0-133.2.beta)

[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
    • Android SDK at /Users/pedromassango/Library/Android/sdk
    • Platform android-30, build-tools 30.0.2
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 12.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.1, Build version 12A7403
    • CocoaPods version 1.9.3

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 4.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)

[✓] IntelliJ IDEA Community Edition (version 2020.3.1)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 52.2.5
    • Dart plugin version 203.6912

[✓] VS Code (version 1.52.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.18.1

[✓] Connected device (2 available)
    • sdk gphone x86 64 (mobile) • emulator-5554 • android-x64    • Android 11 (API 30) (emulator)
    • Chrome (web)               • chrome        • web-javascript • Google Chrome 87.0.4280.141

• No issues found!

[✓] Flutter (Channel dev, 1.26.0-8.0.pre, on Mac OS X 10.15.7 19H2 darwin-x64, locale en)
    • Flutter version 1.26.0-8.0.pre at /Users/pedromassango/Code/flutter_dev
    • Framework revision b9d06fffb2 (7 days ago), 2021-01-07 18:36:48 -0800
    • Engine revision 42a8d4c681
    • Dart version 2.12.0 (build 2.12.0-179.0.dev)

[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
    • Android SDK at /Users/pedromassango/Library/Android/sdk
    • Platform android-30, build-tools 30.0.2
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)
    • All Android licenses accepted.

[!] Xcode - develop for iOS and macOS (Xcode 12.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.1, Build version 12A7403
    ! CocoaPods 1.9.3 out of date (1.10.0 is recommended).
        CocoaPods is used to retrieve the iOS and macOS platform side's plugin code that responds to your plugin usage on the Dart side.
        Without CocoaPods, plugins will not work on iOS or macOS.
        For more info, see https://flutter.dev/platform-plugins
      To upgrade see https://guides.cocoapods.org/using/getting-started.html#installation for instructions.

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 4.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)

[✓] IntelliJ IDEA Community Edition (version 2020.3.1)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 52.2.5
    • Dart plugin version 203.6912

[✓] VS Code (version 1.52.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.18.1

[✓] Connected device (3 available)
    • sdk gphone x86 64 (mobile) • emulator-5554 • android-x64    • Android 11 (API 30) (emulator)
    • macOS (desktop)            • macos         • darwin-x64     • Mac OS X 10.15.7 19H2 darwin-x64
    • Chrome (web)               • chrome        • web-javascript • Google Chrome 87.0.4280.141

! Doctor found issues in 1 category.

[✓] Flutter (Channel master, 1.26.0-2.0.pre.364, on Mac OS X 10.15.7 19H2 darwin-x64, locale en)
    • Flutter version 1.26.0-2.0.pre.364 at /Users/pedromassango/Code/flutter_master
    • Framework revision fb9e485dd8 (2 hours ago), 2021-01-15 01:39:02 -0500
    • Engine revision efa768683e
    • Dart version 2.12.0 (build 2.12.0-225.0.dev)

[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
    • Android SDK at /Users/pedromassango/Library/Android/sdk
    • Platform android-30, build-tools 30.0.2
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)
    • All Android licenses accepted.

[!] Xcode - develop for iOS and macOS
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.1, Build version 12A7403
    ! CocoaPods 1.9.3 out of date (1.10.0 is recommended).
        CocoaPods is used to retrieve the iOS and macOS platform side's plugin code that responds to your plugin usage on the Dart side.
        Without CocoaPods, plugins will not work on iOS or macOS.
        For more info, see https://flutter.dev/platform-plugins
      To upgrade see https://guides.cocoapods.org/using/getting-started.html#installation for instructions.

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 4.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)

[✓] IntelliJ IDEA Community Edition (version 2020.3.1)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 52.2.5
    • Dart plugin version 203.6912

[✓] VS Code (version 1.52.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.18.1

[✓] Connected device (3 available)
    • sdk gphone x86 64 (mobile) • emulator-5554 • android-x64    • Android 11 (API 30) (emulator)
    • macOS (desktop)            • macos         • darwin-x64     • Mac OS X 10.15.7 19H2 darwin-x64
    • Chrome (web)               • chrome        • web-javascript • Google Chrome 87.0.4280.141

! Doctor found issues in 1 category.

I was able to reproduce the issue on web with or without canvaskit.

flutter doctor -v
[✓] Flutter (Channel beta, 1.25.0-8.2.pre, on Mac OS X 10.15.7 19H2 darwin-x64, locale en)
    • Flutter version 1.25.0-8.2.pre at /Users/pedromassango/Code/flutter_beta
    • Framework revision b0a2299859 (10 days ago), 2021-01-05 12:34:13 -0800
    • Engine revision 92ae191c17
    • Dart version 2.12.0 (build 2.12.0-133.2.beta)

[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
    • Android SDK at /Users/pedromassango/Library/Android/sdk
    • Platform android-30, build-tools 30.0.2
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 12.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.1, Build version 12A7403
    • CocoaPods version 1.9.3

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 4.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)

[✓] IntelliJ IDEA Community Edition (version 2020.3.1)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 52.2.5
    • Dart plugin version 203.6912

[✓] VS Code (version 1.52.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.18.1

[✓] Connected device (2 available)
    • sdk gphone x86 64 (mobile) • emulator-5554 • android-x64    • Android 11 (API 30) (emulator)
    • Chrome (web)               • chrome        • web-javascript • Google Chrome 87.0.4280.141

• No issues found!

[✓] Flutter (Channel dev, 1.26.0-8.0.pre, on Mac OS X 10.15.7 19H2 darwin-x64, locale en)
    • Flutter version 1.26.0-8.0.pre at /Users/pedromassango/Code/flutter_dev
    • Framework revision b9d06fffb2 (7 days ago), 2021-01-07 18:36:48 -0800
    • Engine revision 42a8d4c681
    • Dart version 2.12.0 (build 2.12.0-179.0.dev)

[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
    • Android SDK at /Users/pedromassango/Library/Android/sdk
    • Platform android-30, build-tools 30.0.2
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)
    • All Android licenses accepted.

[!] Xcode - develop for iOS and macOS (Xcode 12.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.1, Build version 12A7403
    ! CocoaPods 1.9.3 out of date (1.10.0 is recommended).
        CocoaPods is used to retrieve the iOS and macOS platform side's plugin code that responds to your plugin usage on the Dart side.
        Without CocoaPods, plugins will not work on iOS or macOS.
        For more info, see https://flutter.dev/platform-plugins
      To upgrade see https://guides.cocoapods.org/using/getting-started.html#installation for instructions.

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 4.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)

[✓] IntelliJ IDEA Community Edition (version 2020.3.1)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 52.2.5
    • Dart plugin version 203.6912

[✓] VS Code (version 1.52.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.18.1

[✓] Connected device (3 available)
    • sdk gphone x86 64 (mobile) • emulator-5554 • android-x64    • Android 11 (API 30) (emulator)
    • macOS (desktop)            • macos         • darwin-x64     • Mac OS X 10.15.7 19H2 darwin-x64
    • Chrome (web)               • chrome        • web-javascript • Google Chrome 87.0.4280.141

! Doctor found issues in 1 category.

[✓] Flutter (Channel master, 1.26.0-2.0.pre.364, on Mac OS X 10.15.7 19H2 darwin-x64, locale en)
    • Flutter version 1.26.0-2.0.pre.364 at /Users/pedromassango/Code/flutter_master
    • Framework revision fb9e485dd8 (2 hours ago), 2021-01-15 01:39:02 -0500
    • Engine revision efa768683e
    • Dart version 2.12.0 (build 2.12.0-225.0.dev)

[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
    • Android SDK at /Users/pedromassango/Library/Android/sdk
    • Platform android-30, build-tools 30.0.2
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)
    • All Android licenses accepted.

[!] Xcode - develop for iOS and macOS
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.1, Build version 12A7403
    ! CocoaPods 1.9.3 out of date (1.10.0 is recommended).
        CocoaPods is used to retrieve the iOS and macOS platform side's plugin code that responds to your plugin usage on the Dart side.
        Without CocoaPods, plugins will not work on iOS or macOS.
        For more info, see https://flutter.dev/platform-plugins
      To upgrade see https://guides.cocoapods.org/using/getting-started.html#installation for instructions.

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 4.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)

[✓] IntelliJ IDEA Community Edition (version 2020.3.1)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 52.2.5
    • Dart plugin version 203.6912

[✓] VS Code (version 1.52.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.18.1

[✓] Connected device (3 available)
    • sdk gphone x86 64 (mobile) • emulator-5554 • android-x64    • Android 11 (API 30) (emulator)
    • macOS (desktop)            • macos         • darwin-x64     • Mac OS X 10.15.7 19H2 darwin-x64
    • Chrome (web)               • chrome        • web-javascript • Google Chrome 87.0.4280.141

! Doctor found issues in 1 category.

/cc @ditman

/cc @ditman

Related: https://github.com/flutter/flutter/issues/57523

Related: https://github.com/flutter/flutter/issues/57523

The default Google Maps SDK for web does not seem to support "patterns", as in Android. See the polyline documentation here:
https://developers.google.com/maps/documentation/javascript/shapes#polylines
It seems that this can be emulated, depending on the complexity of the pattern, with "Symbols". See the dashed example:
https://developers.google.com/maps/documentation/javascript/symbols#dashed_lines
I'm going to mark this as a new feature request, and prioritize accordingly.

The default Google Maps SDK for web does not seem to support "patterns", as in Android. See the polyline documentation here:
https://developers.google.com/maps/documentation/javascript/shapes#polylines
It seems that this can be emulated, depending on the complexity of the pattern, with "Symbols". See the dashed example:
https://developers.google.com/maps/documentation/javascript/symbols#dashed_lines
I'm going to mark this as a new feature request, and prioritize accordingly.

Thanks, I can live with this incompatibility. Looking forward to a new version of the Google Maps for Flutter plugin with integrated support of web, including patterns!

Thanks, I can live with this incompatibility. Looking forward to a new version of the Google Maps for Flutter plugin with integrated support of web, including patterns!

(I closed this but maybe you want it to remain open until fixed?)

(I closed this but maybe you want it to remain open until fixed?)

Yes this can remain opened so we can track this proposal and close duplicate.
Since this is a new feature, I'm going t o update the labels!

Yes this can remain opened so we can track this proposal and close duplicate.
Since this is a new feature, I'm going t o update the labels!

I've had a crack at a first go implementation that tries to pull this together. It's my first contribution so apologies if I've missed something.

Hello
+1 with the need for this feature. Any ETA ?

@ditman am I correct in saying this is part of the whole migration pipeline starting with https://github.com/flutter/packages/pull/7077?

@raphael-bmec-co the priority is to migrate all flutter/packages to the latest package:web, so we don't block wasm compilation of apps, before adding any new features.

New feature as in the way Apple uses that term😜 Hopefully you guys get to this map implementation soon 🙏


Fatal error: Call to undefined method Controller\User::login()

I've got this error when upgrading to the latest version available (1.0.19)
Fatal error: Call to undefined method Controller\User::login() in kb/app/Core/Router.php on line 225

When you login, be sure that you don't use an old url..

Yes, you're right.
Sorry :(


Changed Language option button to responsive

Pull Request
Title

Changed Language option button to responsive
Description

Changed Language option button to responsive
Related Issues

Fixes: #208
Changes Made

changed in navbar.tsx
app.tsx
languagedropdown.tsx

Checklist

[x] I have tested the changes locally
[x] Documentation has been updated (if necessary)
[x] Changes are backward-compatible

Screenshots (if applicable)

Additional Notes

nothing

hey @VaibhavArora314 check it once , and let me know any changes required.
Thank you!!

Sure @VaibhavArora314

hey @VaibhavArora314 check it once , and let me know any changes required.
Thank you!!

also if possible please restore the purple-blue variant of navbar, it looked better

Sure @VaibhavArora314

hey @VaibhavArora314 check it once , and let me know any changes required.
Thank you!!

Hey @VaibhavArora314  ..are seeing it in which I have deployed or any other..
My deployment is coming well

hey @VaibhavArora314 check it once , and let me know any changes required.
Thank you!!


How do I render without premultiplied alpha?

I have a screenshot function in my application where I use glReadPixels to copy the data from the framebuffer and write it to a PNG file. The problem is that the edges of the shapes where color means transparency doesn't look right. After inspecting the color values of the pixels I am pretty sure this is due to premultiplied alpha. Is there something I can call before nvgEndFrame to render without premultiplied alpha?
Thanks

Nope, but you can unpremultiply the pixels, see:
https://github.com/memononen/nanovg/blob/master/example/demo.c#L1128

Ok thanks memonomen


Fixes broken E2 function createWire

This function was broken when materials being used because of a two year old typo.

wow


Poor UITableView performance with fast scrolling

This is less noticeable on a Surface tablet which luckily we'll be using for an initial rollout. The video below was taken on the following system:
OS Name	Microsoft Windows 10 Pro
Version	10.0.14393 Build 14393
Other OS Description 	Not Available
OS Manufacturer	Microsoft Corporation
System Manufacturer	LENOVO
System Model	4270CTO
System Type	x64-based PC
System SKU
Processor	Intel(R) Core(TM) i7-2820QM CPU @ 2.30GHz, 2301 Mhz, 4 Core(s), 8 Logical Processor(s)
BIOS Version/Date	LENOVO 8BET60WW (1.40 ), 12/6/2012
SMBIOS Version	2.6
Embedded Controller Version	1.36
BIOS Mode	Legacy
BaseBoard Manufacturer	LENOVO
BaseBoard Model	Not Available
BaseBoard Name	Base Board
Platform Role	Mobile
Secure Boot State	Unsupported
PCR7 Configuration	Binding Not Possible
Windows Directory	C:\Windows
System Directory	C:\Windows\system32
Boot Device	\Device\HarddiskVolume1
Locale	United States
Hardware Abstraction Layer	Version = "10.0.14393.206"
User Name	Not Available
Time Zone	Eastern Standard Time
Installed Physical Memory (RAM)	16.0 GB
Total Physical Memory	15.9 GB
Available Physical Memory	7.80 GB
Total Virtual Memory	20.7 GB
Available Virtual Memory	6.72 GB
Page File Space	4.84 GB
Page File	C:\pagefile.sys
A hypervisor has been detected. Features required for Hyper-V will not be displayed.

Steps to reprodude:

Create a UITableView with many cells (and employ cell reuse mechanism)

Try quickly scrolling

Alternative to step 1:
Apply this patch to WOCCatalog:
diff --git a/samples/WOCCatalog/WOCCatalog/MenuTableViewController.m b/samples/WOCCatalog/WOCCatalog/MenuTableViewController.m
index 988c857..95657a6 100644
--- a/samples/WOCCatalog/WOCCatalog/MenuTableViewController.m
+++ b/samples/WOCCatalog/WOCCatalog/MenuTableViewController.m
@@ -47,7 +47,7 @@ static NSString* viewTitleKeyName = @"ViewName";
 }

 - (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section {
-    return [self.menuItems count];
+    return [self.menuItems count] * 20;
 }

 - (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {
@@ -56,7 +56,7 @@ static NSString* viewTitleKeyName = @"ViewName";
         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MenuCell"];
     }

-    cell.textLabel.text = [[self.menuItems objectAtIndex:indexPath.row] objectForKey:viewTitleKeyName];
+    cell.textLabel.text = [[self.menuItems objectAtIndex:indexPath.row % [self.menuItems count]] objectForKey:viewTitleKeyName];
     cell.accessibilityIdentifier = cell.textLabel.text;

     return cell;

Note: toggling isScrollInertiaEnabled or isDeferredScrollingEnabled on the underlying ScrollViewer doesn't improve things

Thanks Ehren for reporting this and sharing the patch. Does the patch work for your app as well? We have work planned to address this in the coming months but let us know if this is blocking you.

@ArnOmsft not a prob. This isn't an immediate blocker since the behaviour is much better on a Surface tablet. The patch just adds more rows to WOCCatalog to highlight the issue. I wasn't able to find any fixes though.

Understood, thanks for the quick feedback.


Add support for attachments

Direct-to-S3 Uploads
So client in the browser requests S3 Permission, gets it, direct uploads to a temporary bucket that cleans itself out regularly, then sends that URL to the controller, which then fetches it and uses arc to store.

Use Arc to store files on an S3 bucket


Yandex.Disk: implement full support for Yandex REST API

Current rclone 1.43 version doesn't support  all available Yandex.Disk features.
Original code for rclone Yandex disk backend was written by @dibu28 in late 2015 and is a bit outdated.
I'd suggest implementing support for at least moving/copying files and directories using Yandex REST API (link to rclone forum thread)

copy a file or folder
move a file or folder

Thank you for making this issue :-)
@dibu28 wrote the original code - would you like to add these?
It should be reasonably straight forward to add Move, MoveDir and Copy...
Though looking at the Yandex code it is one of the early remotes so I think it would benefit from being re-written to use the rest library which would be a bit more work.

@buengese - fantastic :-)

@buengese @ncw
Breathless and ready to test


Update Messages.java

I think <username> is actually clearer than <player>.
accept_none should be "%sThere are no Pending invitations for you."
idreset should be "%sYour island has been deleted.  Create a new one using /ob join"

no needed
use Messages.yml


Support for tags for ansible based operators

Feature Request
Is your feature request related to a problem? Please describe.
I have an existing playbook which requires tags when invoked and would like to invoke the playbook with an 'install' tag when a CR is created and with 'uninstall' tag when CR is removed.
Describe the solution you'd like
Perhaps watches file can be extended to provide support for tags, e.g.
- version: v1alpha1
  group: app.example.com
  kind: Database
  playbook: /opt/ansible/playbook.yml
  args:
    tags:
    - install
  finalizer:
    name: finalizer.app.example.com
    args:
      tags:
      - uninstall

This would involve passing the tags through to the runner. It would probably be a good idea to implement a generic way of passing through arguments, as there a a lot of potential features that require that.

/remove-lifecycle stale
Also wondering about this..   if this is not supported, Is there a workaround/recommended way to invoke roles with tags?

I think there should be a way to pass the tags from custom resource as well

We are writing operator using ansible operator-sdk.
tags are needed to exclude/include certain task if operator is being run in development or production. We understand at the moment, operator-sdk does not support defining run-time tags.
Is there any plan or timeframe to develop this capability?

Hi @prashant20verma,
It is not prioritized and is flagged as help wanted. Would you like to help and contribute with that? See that to add this RFE we need to pass the info tags through to the [runner|https://github.com/operator-framework/operator-sdk/tree/master/internal/ansible/runner]. And then, if you decide to contribute with the project to add this RFE please feel free to ping us in the slack operator-sdk-dev if you need some help.
Also, please feel free to attend our meetings triage on Monday and raise its topic if you think that it should be prioritized.
c/c @asmacdo @fabianvf

We have support for passing arbitrary arguments via as a CLI argument, perhaps it would make sense to extend that to the watches.yaml and potentially a CR annotation (though that seems a little scary to me)
https://sdk.operatorframework.io/docs/building-operators/ansible/reference/advanced_options/#passing-arbitrary-arguments-to-ansible


BUG - As developers we need to stop the constant warning messages for crons

Describe the bug
(WARN) /psg/webapp/crons/stop/production_monitoring_five_min.stop has remained untouched for 326.7 hours (stale lock file?)
RT Ticket Number
If applicable
To Reproduce
Steps to reproduce the behaviour:

Go to page '...'
Click on button '...'
See error

Expected behaviour
What was expected to happen.
Screenshots
If applicable, add screenshots to help explain your problem.
Desktop (please complete the following information):

Windows or Mac?
Browser Chrome, Firefox, Safari or other?
Browser version (use 'About' to look up)?

Additional context
Add any other context about the problem here.

Removing the stop file did not resolve issue
Cron involved was to send monitoring data to the old ganglia server

I've removed the cron that was generating the warning spam, but it will re-appear if we redeploy anything via the old deployment project.


Fix typo in faq.md

The opening backtick for the code snippet was in the wrong place, causing the URL to not render correctly.

Thanks!
@bors r+

:pushpin: Commit 8c3595058698fd6815b88d542fe5b67cce1b46c8 has been approved by epage
It is now in the queue for this repository.

:hourglass: Testing commit 8c3595058698fd6815b88d542fe5b67cce1b46c8 with merge 6fb5d53be735e60cd231618970a8135ca8717ee3...

:sunny: Test successful - checks-actions
Approved by: epage
Pushing 6fb5d53be735e60cd231618970a8135ca8717ee3 to master...


ILogicRule GetView Missing

After upgrading to 19.2.301 to fix another issue, when I login to the client I get the following error. The web is fine.
Method not found: 'DevExpress.ExpressApp.Model.IModelView Xpand.Persistent.Base.Logic.ILogicRule.get_View()'.
Stack Trace:
at DevExpress.ExpressApp.XafApplication.CheckCompatibilityCore()
at DevExpress.ExpressApp.Win.WinApplication.CheckCompatibilityCore()
at DevExpress.ExpressApp.XafApplication.CheckCompatibility()
at DevExpress.ExpressApp.XafApplication.Logon(PopupWindowShowActionExecuteEventArgs logonWindowArgs)
at DevExpress.ExpressApp.Win.WinApplication.Logon(PopupWindowShowActionExecuteEventArgs logonWindowArgs)

ru on the latest lab? Can you run an empty XAF solution where you installed the ModelArtifactState module?

ModelArtifactState module was missing from my module. I really only want ViewVariants and ModelDifference, but those seems seem to need a ton of other dlls. ;(


Use merge_environment_settings method in sessions.send method

I work on a python project that uses requests. And as a developer, I have set that enviroment variables: HTTP_PROXY, HTTPS_PROXY and REQUESTS_CA_BUNDLE so I can see all of my requests with mitmproxy. Today, I have decided to use session.send() method with a prepared request instead of using .get(), .post() or .request(). But then, I realize that .send() doesn't respect my environment variables.
So, I think that merge_environment_settings method should be used in .send() method, instead of .request(). What do you think about that? Should I open a pull request for that?

@yozel Thanks for this issue!
Per #2807, this is intentional behaviour. merge_environment_settings is a public, documented method on the Session: if you're planning to move away from using Session.request to the prepared request flow, this is one of the things that needs to become part of your workflow if you want its behaviour.


Instructors should be able to view past sessions

Now that my session for Introduction to Matlab is complete, I can no longer see the list of people who attended or the emails that I sent them.  I noticed that it stuck around for a few hours after the completion of the session.
It should keep the past session history viewable by the instructor including persons who registered/attended, emails sent, and the ability to email for a limited time (a few days after the conclusion).

Cory, I've pushed up a chance that will allow instructors to see all the past sessions for any workshops they instruct.  I hope this update is timely enough that you can get whatever you wanted out to your students.


Zxing-cpp Code Fails to Decode Images

Hi,
Despite my attempts with the latest version, ZBar-CPP fails to work on any images. Below are the detailed steps and code snippets demonstrating the issue.
These are my images for testing :

Steps to Reproduce
1. Working ZBar Code (from learnopencv.com):
◦ This code works correctly on images :
#include <iostream>
#include <algorithm>
#include <vector>
#include <zbar.h>

#include <opencv2/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

using namespace std;
using namespace cv;
using namespace zbar;

typedef struct {
  string type;
  string data;
  vector<Point> location;
} decodedObject;

// Find and decode barcodes and QR codes
void decode(Mat &im, vector<decodedObject> &decodedObjects) {
  // Create zbar scanner
  ImageScanner scanner;

  // Configure scanner
  scanner.set_config(ZBAR_QRCODE, ZBAR_CFG_ENABLE, 1);

  // Convert image to grayscale
  Mat imGray;
  cvtColor(im, imGray, CV_BGR2GRAY);

  // Wrap image data in a zbar image
  Image image(im.cols, im.rows, "Y800", (uchar *)imGray.data, im.cols * im.rows);

  // Scan the image for barcodes and QRCodes
  int n = scanner.scan(image);

  // Print results
  for (Image::SymbolIterator symbol = image.symbol_begin(); symbol != image.symbol_end(); ++symbol) {
    decodedObject obj;
    obj.type = symbol->get_type_name();
    obj.data = symbol->get_data();

    // Print type and data
    cout << "Type : " << obj.type << endl;
    cout << "Data : " << obj.data << endl << endl;
    decodedObjects.push_back(obj);
  }
}

int main(int argc, char *argv[]) {
  // Read image
  string imagepath = argv[1];
  Mat im = imread(imagepath);

  // Variable for decoded objects
  vector<decodedObject> decodedObjects;

  // Find and decode barcodes and QR codes
  decode(im, decodedObjects);

  return 0;
}

Non-Working Zxing-CPP Code:
◦The code used is ZXingQtReader.cpp with the main replaced by this :

int main(int argc, char *argv[]) {
  if (argc != 2) {
    qDebug() << "Please supply exactly one image filename";
    return 1;
  }
  QString filePath = argv[1];
  QImage image = Qimage(filePath);

  if (image.isNull()) {
    qDebug() << "Could not load the filename as an image:" << filePath;
    return 1;
  }

  auto options = ReaderOptions()
                      .setFormats(BarcodeFormat::QRCode)
                      .setTryRotate(true);
                      // .setTryHarder(true)
                      // .setTextMode(TextMode::HRI)
                      // .setMaxNumberOfSymbols(10);

  auto barcodes = ReadBarcodes(image, options);

  for (auto &barcode : barcodes) {
    qDebug() << "Text:   " << barcode.text();
    qDebug() << "Format: " << barcode.format();
    qDebug() << "Content:" << barcode.contentType();
    qDebug() << "";
  }

  return barcodes.isEmpty() ? 1 : 0;
}

Regards

The problem here is that zxing-cpp fails to detect this particular QRCode symbol. And the reason is that the lower left finder pattern is corrupted by the blue pencil line. ZBar seems to not have an issue with that.
You wrote zxing-cpp fails to decode any images. That is surprising. Your code looks ok. Please try with e.g. this image.

It works with your image. Thank you !

Hi,
I am curious about the underlying reasons why Zxing-CPP fails with my images while ZBar handles them without issues, even with the corrupted finder pattern caused by the blue pencil line.
Could you help me understand:
Robustness : What are the differences in how Zxing-CPP and ZBar handle noisy or corrupted QR codes? Is there a way to adjust the robustness settings in Zxing-CPP to make it more tolerant to such issues?
Detection Algorithms: Are there specific algorithmic differences between Zxing-CPP and ZBar that could explain why one library succeeds where the other fails?
Regards

I have not studied the implementation of the ZBar source code, so I can't tell what they are making different but obviously there are algorithmic differences. But this goes both ways: e.g. ZBar detects only 3 of the 13 jpg samples from this sample folder, while zxing-cpp detects all of them.
You can't adjust the robustness of zxing-cpp in this particular case other than by improving the algorithm.


new: Added CI and coverage status badges

Welcome to Codecov :tada:
Once you merge this PR into your default branch, you're all set! Codecov will compare coverage reports and display results in all future pull requests.
Thanks for integrating Codecov - We've got you covered :open_umbrella:


Cleanup old branches

This repo has currently 37 branches, many of them created by the pyup-bot, having its respective issue closed, but the branch remained. Some user created branches also, having up to two years with no new commits or rebase, being most likely forgotten or abandoned.
Some effort in checking whether the branch should be just deleted or some contributor could be pinged for either finishing its issue or documenting for another one pick it up.

@jtemporal

Unfortunately it looks like @pyup-bot is not prepared to delete branches from closed non-merged PRs, thus a palliative thing to do would be to change the schedule to once a month in out .pyup.yml. This could be done in a PR.
In spite of that we could manually clean-up stale branches, or add a script to be run by maintainers that would automatically clean-up stale branches. Personally I think that manually doing that is safer : ) What do you think about it? What else we might be missing?

I already deleted the pyup stale branches that I found. Other than that I would

change the schedule to once a month in our .pyup.yml.

as you suggested @cuducos
Other than that... there are a lot of branches of unfinished hypothesis study or things that we didn't want to be merged into master for any kind of reasons... @willianpaixao could you specify what other branches you think should be removed?

@jtemporal there's no official procedure for that, but we need to chase the developers who push those branches and kindly ask the status of their contributions, what's left to implement and if they can either finish or write a small guide to someone else that can pick up the left work.
Some branches are so old that they might implement something that is no longer desired or even compatible with the current state of the project. In this case, just make a comment on the issue and remove the branch (which will automatically close the PR related).
Which leads me to kindly suggest that the project could/should have a workflow issue -> branch -> PR. Where you can trace every branch/merge to an issue that was previously discussed and approved. This way you improve traceability and avoid devs work on issues that are not desired and would later be denied to merge (which happened quite recent). This could be simply added to the CONTRIBUTING.md and reinforced in the issue and PR templates.


Custom Strategy Backtest: non-error thrown

I'm submitting a ...
[X] bug report
[ ] question about the decisions made in the repository
Action taken (what you did)
checked over my code
reinstalled npm koa
Expected result (what you hoped would happen)
Backtest my custom strategy
Actual result (unexpected outcome)
xxx POST /api/backtest 500 479ms -
Error: non-error thrown:
This Gekko instance encountered an error and can't continue
at Object.onerror (/root/gekko/node_modules/koa/lib/context.js:105:40)
at
at process._tickCallback (internal/process/next_tick.js:189:7)
Other information (e.g. detailed explanation, stacktraces, related issues, suggestions how to fix, links for us to have context, eg. stackoverflow, etc)
Running on CentOS
Here is a link to my strategy: https://pastebin.com/2AVYaKJs

This was a combination of some strategy code errors and not installing tulip properly.

:+1:


MAINT: stats: refactor moment function for array input

You don't necessarily need to merge this. I was just exploring what it would look like to avoid all unnecessary operations by further separating your goodargs into the part where loc == 0 and the rest. What do you think?

Thank you very much for doing this! I really appreciate your help!! I tested this locally and it works perfectly. So, merging.


How get embed code of a story?

Hi, i am using WordPress as CMS and Elementor as a page builder, Is there any way I can embed web story through my elemente page builder.

@uditrathod09 thanks for your request!
We have a few open issues to explore Elementor support as well as shortcode support which may address your use case at a future point.
With that said, we have seen an example of Web Stories being embedded via  Elementor Pro's post widget (video) which may be an option in the meantime.
Please feel free to follow the issues linked for updates!

Thank you for your help.
On Thu, Sep 10, 2020 at 10:18 PM Renee Johnson<EMAIL_ADDRESS>wrote:

@uditrathod09 https://github.com/uditrathod09 thanks for your request!
We have a few open issues to explore Elementor support
https://github.com/google/web-stories-wp/issues/3688 as well as shortcode
support https://github.com/google/web-stories-wp/issues/3135 which may
address your use case at a future point.
With that said, we have seen an example of Web Stories being embedded via
Elementor Pro's post widget (video https://youtu.be/Sn0OAnLiIGI?t=886)
which may be an option in the meantime.
Please feel free to follow the issues linked for updates!
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/google/web-stories-wp/issues/4436#issuecomment-690488210,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AQ6EMNPFR52QTZ6OJ526HHLSFD7JHANCNFSM4REIV2GA
.


render AuxiliaryPreview only

Hi, for some messages that can not took any actions(only accept reactions), but i still want to show the AuxiliaryPreview for this message.
But when the actionList is empty, the context menu not show, can u help?

hi @dominicstop , can u help me to give some advices?
Like this message

It's contain delete options, so it can show AuxiliaryPreview
When message does not contain any actions, the context menu does not trigger, but I still want to show AuxiliaryPreview

In my case, menuItems isEmpty, but I want to render menuTitle and *** AuxiliaryPreview***

hi unfortunately you need to have at least 1 menu item for aux. preview to work (this is a limitation w/ iOS's API)
however, there is a workaround ✨
take a look at: context menu preview example 08, aux. preview example 08, and aux. preview example 09
what they all have in common is that they don't have any menu items + they're using a custom preview.
(i'm sorry, I don't have access to my computer atm, so i apologize for the crude code example)
<ContextMenuView
  previewConfig={{
    previewType: hasNoMenuItems
      ? 'CUSTOM'
      : 'DEFAULT'
  }}
  renderPreview={() => (
    <CompToShowInContextMenu/>
  )}
/>
  <CompToShowInContextMenu/>
<ContextMenuView>

basically, if you know your context menu view comp. does not have any menu items, then just use a custom preview that just renders the same thing you put inside ContextMenuPreview
hope this helps you, xx

Thanks, i got it

Hello! using this workaround, is there a way for preview to stay in place instead of moving to the center of the screen?


Add logout endpoint

[ ] Add logout endpoint
[ ] Update OpenAPI specification to include the logout endpoint in onboard.

Note: Reference implementation is available in iGrant.io API.

[ ] Support logout for organisation admin

Query organisation admin by sub (iamId`
If found then logout organisation admin using clientId specified in configuration file. This is a public client.

[ ] Support logout for individual

Query individuals by sub (iamId)
If found then logout individual using clientId specified in configuration file. This is a public client.

[ ] Support logout for external individual

Query individuals by sub (externalId)
If found then logout individual using clientId and clientSecret specified in the IDP if available. This is confidential client.

Known issue: At present service doesn't contain an endpoint for logout.


percentage completed on tft

Hi there on the tft it is saying that there is a percentage completed before the print has even started using cura 4.8 and tft35_E3_E3.0.26.x feb 26 2021 firmware on tft35 e3
https://imgur.com/gallery/L5i0hc1

My tft 35 prints fine from day 1. I've even updated the firmware to the tft with no issues. Now the tft on the bx is a different story. The sample files that came with the printer printed just fine from the USB thumb drive. I printer all 3 sample files this way after I transferred the sample files from the SD card that came with printer, over to my thumbdrive. Then I inserted the thumb drive into the USB port on the tft. The files printed fine from start to finish. Then I sliced my own files using Cura 4.8 and the Biqu B1 printer profile found in Cura. When I inserted the thumb drive and select my file to print it would give a g code error and then go to print. The print would start as normal, then after some time the printer would just turn off, then back on (reset) leaving the print head in last position. I was able to then.press print, then select the USB source, then select the file that I was printing, at this point the printer will ask if I want to continue printing. I selected print, print head moves to home, printer heat cycles, then goes back to last position and starts printing. This process will rinse and repeat numerous times during the print. So I decided to try upgrading the firmware. Then I calibrated the ends tops, leveled the printer, ran a abl. Then I formatted the thumb drive, re-sliced the file, and same thing happened. I even tried using a SD card from the tft with the same results.  Then while in contact with fellow backer who analyzes Luke's firmware, had me try printing using the same SD card from the SD card slot in the front of the printer. The SD slot that goes directly to the mainboard. The printer ran the file from start to finish. I've now printed 3 items flawlessly. Another backer contacted me and said it looked like Luke's FW only supported the mainboard SD slot. Who am I to argued as it's working, however I'd prefer to use the tft input slots. Sorry for the long reply. I just just thought the more detailed explanation would be helpful.
Sent from Samsung Galaxy smartphone.
Get Outlook for Androidhttps://aka.ms/ghei36

From: chick911t<EMAIL_ADDRESS>Sent: Sunday, March 7, 2021 3:56:51 PM
To: bigtreetech/Bigtree3DPluginSuit<EMAIL_ADDRESS>Cc: Subscribed<EMAIL_ADDRESS>Subject: [bigtreetech/Bigtree3DPluginSuit] percentage completed on tft (#9)
Hi there on the tft it is saying that there is a percentage completed before the print has even started using cura 4.8 and tft35_E3_E3.0.26.x feb 26 2021 firmware on tft35 e3
https://imgur.com/gallery/L5i0hc1https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fimgur.com%2Fgallery%2FL5i0hc1&data=04|01||99391d54d16948c9f56608d8e1c4ae4d|84df9e7fe9f640afb435aaaaaaaaaaaa|1|0|637507582136541843|Unknown|TWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D|1000&sdata=fjt7HBDJ4qfE5z0KKrm0764fPhYdq%2BqOkCAYFjapfLs%3D&reserved=0
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHubhttps://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fbigtreetech%2FBigtree3DPluginSuit%2Fissues%2F9&data=04|01||99391d54d16948c9f56608d8e1c4ae4d|84df9e7fe9f640afb435aaaaaaaaaaaa|1|0|637507582136551836|Unknown|TWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D|1000&sdata=%2FicZQTZPqRghTfUUzqgeUDOnlpnxBYhAq7qS8b%2FnEvQ%3D&reserved=0, or unsubscribehttps://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fnotifications%2Funsubscribe-auth%2FAP6GGX3YFG4NAUC35OCFSBDTCQHEHANCNFSM4YYMYJMA&data=04|01||99391d54d16948c9f56608d8e1c4ae4d|84df9e7fe9f640afb435aaaaaaaaaaaa|1|0|637507582136551836|Unknown|TWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D|1000&sdata=POoNi5OOg6%2Bvejp80OQfLvu38fmG5%2BE5HcAd5oWXlLI%3D&reserved=0.

In the changes to Gcode made by this tool, I have added some additional parsing functions to ensure that these unexpected codes will not be added in some files that do not need additional Gcode. You can update the tool and use it again. If there are still problems, you can show me specific error information by uploading pictures and videos, etc. That way I can locate the problem more quickly.

In the changes to Gcode made by this tool, I have added some additional parsing functions to ensure that these unexpected codes will not be added in some files that do not need additional Gcode. You can update the tool and use it again. If there are still problems, you can show me specific error information by uploading pictures and videos, etc. That way I can locate the problem more quickly.

Hi there the problem wasn't rectified percentage say e.i. 70% ic completed before the print has even started

Hello,
I think I have found the problem, but I do not know how to fix this. The problem is that the gcode is expanded by 337930 chars. The software than thinks that already a certain amount of characters/lines in the gcode has past, so it does not start at 0%.
I tried to subtract this number of chars from a certain parameters like "infoPrinting.cur = cur;" and "infoPrinting.size = size;" in "Printing.c", but this did not influenced it.
Another suggestion to fix this is in "Printing.c" the for-loop "for (; infoPrinting.cur < infoPrinting.size;)". In this the first gcode can be ignored, but I did not know how (I updated "comment_count" and added a "\n" in the gcode, but without results).
I also checked with the "cmd_index" in "interfaceCmd.c", but also without results.
The last thing I think can be changed is the "ack_value()" in "parseACK.c". I do not understand this value, but I think a compensation for these extra chars can be included here.
There can also be written some function which checks after reading all the gcode (or partly) whether it can find "bigtree thumbnail end" as this is added from the plugin. If so, it can ignore all the gcode prior to this.
@bigtreetech, do you think you can do something with this information? If not, please let me know.
Oh and if you could share the updated code and in which file on this comment, that would be great! If the changes are bigger than only a few lines in one file, please let us know if you have included this fix in the normal software.
Thanks in advance!!!


why is there no create group icon in PATHS section ?

it's a joke ??
you didn't include how to create layer groups in PATHS tab?
It is something that should not be overlooked, especially for those of us who work with paths to create automated strokes. and since the information on its page is not very clear and does not say exactly how and where to leave a suggestion, it is only necessary to consider this a bug of its programmers.

Please run and copy the output into a reply the following command in a terminal:
snap list gimp

Can you test whether the same problem exists in the edge release by running:
snap refresh --edge gimp

If it is fixed in the edge release then I will promote that and you may then switch back to stable with
snap switch --stable gimp

Also, is this problem still visible if you use GIMP from the GIMP project rather than via this Snap package? If it is present in GIMP as shipped from the GIMP project then you should file it as a bug at https://www.gimp.org/bugs/report.html

ok i will try, and send the feedback info

This issue is being tracked at https://gitlab.gnome.org/GNOME/gimp/-/issues/4980. Not a snap specific bug. @lucyllewy This can be closed.


why theres no application designer in my settings of vb

[Enter feedback here]

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

ID: f36735fb-5d5f-72c0-e71d-cff66dd1e909
Version Independent ID: 8f3d80cc-7f07-1f8e-130a-cc28051418db
Content: Application Page, Project Designer (Visual Basic) - Visual Studio
Content Source: docs/ide/reference/application-page-project-designer-visual-basic.md
Product: visual-studio-dev15
GitHub Login: @gewarren
Microsoft Alias: gewarren

why that i cant see the application designer in the settings project

@beberly11 Can you provide a little more information, like what kind of Visual Basic project did you create? Is it a .NET Framework or a .NET Core project?


Checkout output weights in metab multi-task

In our meeting today, Bob suggested looking at the output weights of (metab multitask,  #92) for the GPP and DO-max to see if they were similar.

@jsadler2 tried this. Jeff, feel free to add more comments or results snippets here, but I'm going to go ahead and close this issue.


TableRead supports reading multiple splits parallely

Purpose

TableRead#create_reader read splits parallely by default. If user hasn't set thread number, then it fallback to sequentially read.

Tests

API and Format

Documentation

+1


Setting to hide paths for open editors in explorer

I would like an option to hide those file paths of open editors in explorer to keep the list cleaner and more focused on the names of the files.

This is a fair feature request, however it is not currently on our plan, thus assigning to the backlog.

@Wolfenberg Just found a work around! Couple of extensions to be installed. These extensions inject the custom css to the editor. Also even changed the font too! To customize anything related, just Inspect the VS Code by Help > Toggle Developer Tools and update the settings.json accordingly.
Hope this helps!
FYI.. @Tyriar @isidorn
https://marketplace.visualstudio.com/items?itemName=iocave.customize-ui
https://marketplace.visualstudio.com/items?itemName=iocave.monkey-patch

At this folder yourPath\VSCode\resources\app\out\vs\workbench\,
Open this file workbench.desktop.main.css，add this css code :
.vs .monaco-icon-label>.monaco-icon-label-container>
.monaco-icon-description-container>.label-description{opacity:0;}
.vs .monaco-icon-label>.monaco-icon-label-container:hover >
.monaco-icon-description-container>.label-description{opacity:0.75;}

Restart VSCode, Then the path will hidden，but hover still show out,
VSCode will tell you something is wrong, but who care,
click the gear icon set don't alert out again !

Note: more settings to customize the look of "Open Editors" would allow for true Vertical Tabs
@xjArea Thanks it works like charm
I had a bit of struggle finding the folder so here it is:
C:\Users\%username%\AppData\Local\Programs\Microsoft VS Code\resources\app\out\vs\workbench

@TimCTP Agree, it's just a clutter, besides you can just see the file path if you hover directly over the file. This should definitely be remove.


Spike: Celery monitoring

We'd like to know:

How large the task backlog is at any given point in time,
What the time-to-response is for a given task (task lifespan, including queue time),
What the time-to-execute is for a given task (from start to end of actual execution),
How much memory a worker is using,
... etc.

Most commonly, this is done by having Prometheus monitor a /metrics endpoint associated with the Celery workflow, and having Grafana visualize the data that Prometheus makes available. A custom dashboard can then be built, or one can be reused from the Grafana dashboard registry.
In this spike, we should try to put all of the pieces together to get monitoring working for a simple example queue and discuss how much effort it'll take to replicate the toy example for 8Knot.

This was our initial diagram of how we'd implement monitoring.

However, flower doesn't expose very interesting /metrics so we considered other options.
This exporter works with both the Redis and the RabbitMQ Celery broker flavors. It's something to consider in the future, but it's a relatively small project and it requires yet another thing to be added to our stack beyond just Prometheus and Grafana,
By replacing Redis with RabbitMQ as our broker, and using the rabbitmq-plugins enable rabbitmq_prometheus plugin, we get a /metrics endpoint for free at http://{rabbitmq_host}:15692. Prometheus can scrape that endpoint and collect good stats about the queue, generic to being used for Celery.
I wrote this small toy to populate the RabbitMQ queue for inspection:
# tasks.py

import celery
import time

app = celery.Celery(
    __name__,
    broker="amqp://localhost",
)

@app.task
def wait(wtime: int) -> int:
    print(f"Waiting: {wtime} seconds")
    time.sleep(wtime)

---
# app.py

import time
from tasks import wait

def main():

    # create 100 tasks to fill queue
    for i in range(100):
        print(f"creating task: {i}")
        wait.delay(i)

    # keep adding tasks to queue
    inc = 1
    while True:
        print(f"polling task {inc}")
        wait.delay(inc)
        inc = inc + 1
        if inc > 100:
            inc = 1
        time.sleep(inc)

if __name__ == "__main__":
    main()

With this application running, $ rabbitmq server online, prometheus scraping the rabbitmq /metrics endpoint, and grafana analysing the prometheus data source with the custom monitoring dashboard here we get a fairly good metrics dashboard.
Unfortunately, it's only answers our question about backlog-length because it isn't custom to Celery. Therefore, we should using a more Celery-specific exporter in the future, or building a more Celery-specific monitoring dashboard based on the RabbitMQ info made available.

Link to well-known Celery exporters that we could use in the future.


Feature request: Allow passing a third-party dataclass

Example:
from some_library import SomeDataclass
import dataclass_click

@dataclass_click(SomeDataclass)
def cmd(...):
    ...

Can still be customizable with:
@dataclass
class SomeDataclassExtended(SomeDataclass):
    some_field = Annotated[...]

Are you able to give a concrete example of a third party class that you’d like to work, that doesn’t. At first glance, this should already be possible.

After playing a little more with it, it really appears to be possible. I was able to do it by inheriting the dataclass and re-declaring the fields with option/Annotated - is that correct? If so, is there a way to not need to inherit/redeclare fields?

@caioariede As it stands, that's the "right" approach since that's the only way to attach more information with Annotated.
I guess it may be possible to add a feature allowing the annotations to be passed in via dict also. It may take some work to ensure the strictness is well aligned with current Annotated mechanism.

@couling feel free to close this then. I think if there's a right approach, that's fine.