msal-react with AAD B2C Guidance

Library

[ ]<EMAIL_ADDRESS>or<EMAIL_ADDRESS>[ ]<EMAIL_ADDRESS>[ ]<EMAIL_ADDRESS>[ x]<EMAIL_ADDRESS>[ ]<EMAIL_ADDRESS>[ ]<EMAIL_ADDRESS>[ ]<EMAIL_ADDRESS>[ ]<EMAIL_ADDRESS>
Description
Please I would like to use msal-react with AAD B2C. Can you provide brief guidance how to achieve that and create proper configuration including setting the scopes. This is my config, but it does not work. I am getting 400 with error message: Clients must send a client_secret when redeeming a confidential grant
const tenant = "mytenant.onmicrosoft.com";

const signInPolicy = "B2C_1_signupsignin1";
const applicationID = "123...";
const reactRedirectUri = "http://localhost:1234";
const tenantSubdomain = tenant.split(".")[0];
const signInAuthority = `${instance}${tenant}/${signInPolicy}`;
const authorityDomain = "mytenant.b2clogin.com"

export const msalConfig = {
  auth: {
      clientId: applicationID,
      authority: signInAuthority,
      knownAuthorities: [
        authorityDomain
      ],
      redirectUri:reactRedirectUri,
      navigateToLoginRequestUrl: true,
      clientCapabilities: [
        "cp1"
      ]
  }
};

@tnorling thanks you for quick reaction and help. Indeed when I created Public Client it worked. It was setup as Web type of app before. Once I have whole authentication piece working including calling API with access token I receive I will create quick sample in my github repo. And will let you know when ready, you can consider then, whether it is something to include in samples or link. Thanks again.

Great thanks for the update!


Force full project reload when TargetFramework or TargetFrameworks pr…

…operty is changed.
Customer scenario
User edits the TargetFramework or TargetFrameworks property in the csproj and gets numerous errors:

Duplicate references for system assemblies from both the prior and new value of the target framework
Design time build failures and MSBuild errors in the error list
Unit test discovery fails due to incorrect output path
Dependencies node doesn't get updated with current framework's references.

Bugs this fixes:
Fixes #1252, #1159 and VSO #375688
Workarounds, if any
User has to close and re-open the solution for everything to start working again.
Risk
This is a tactical low risk for the bunch of issues noted above. Ideally, we would fix each of these issues (and we should in fact fix them post-Dev15), but given that editing the TargetFramework or TargetFrameworks in not that common an operation, forcing a reload seems a reasonable approach.
Performance impact
Low. We are already forcing reload if user adds or remove either of these properties. We are just extending that check so we force reload even when the property is edited.
Is this a regression from a previous update?
One of more of the above issues are likely regressions, and some were probably broken before as well.
Root cause analysis:
We need more testing to catch such issues.
How was the bug found?
Customer reports and dogfooding.

Tagging @dotnet/project-system for review

#No reload prompt if you change via Project Properties

File -> New -> Console App ( NET Core) project
Right-click project, choose Properties
Change .NETCoreApp 1.0 -> 1.1

Expected: Prompt to reload
Actual: No prompt

Clicking "Ignore" doesn't ignore the changes

File -> New -> Console App (.NET Core)
Right-click Edit ConsoleApp1.csproj
Change netcoreapp1.0 -> netstandard1.1
Save
Click Ignore on the prompt

Expected: For the project still to be targeting "netcoreapp1.0"
Actual: Notice that restore has been kicked off, and now the build project is build against netstandard1.1. If I build I build to netstandard1.1 directory. Basically, looks like I'm in the same state as the bugs that are being fixed.

Clicking Reload closes the project editor

File -> New -> Console App (.NET Core)
Right-click Edit ConsoleApp1.csproj
Change netcoreapp1.0 -> netstandard1.1
Save
Click Reload on prompt

Expected: For the project editor I was just using to remain open
Actual: The editor is closed

Get a prompt to "Reload all" or "Ignore all" even though a single project has changed

File -> New -> Console App (.NET Core)
Right-click Edit ConsoleApp1.csproj
Change netcoreapp1.0 -> netstandard1.1
Save

Still get errors in the error list

File -> New -> Console App (.NET Core)
Right-click Edit ConsoleApp1.csproj
Change <TargetFramework>netcoreapp1.0</TargetFramework> -> <TargetFrameworks>netcoreapp1.0</TargetFrameworks>

Notice the following in the Error List:

Severity	Code	Description	Project	File	Line	Suppression State
Error	MSB4057	The target "ResolveComReferencesDesignTime" does not exist in the project.	ConsoleApp124	c:\users\davkean\documents\visual studio 2017\Projects\ConsoleApp124\ConsoleApp124\ConsoleApp124.csproj	1
Clicking Ignore leaves the error there.

No reload prompt if you change via Project Properties

This seems to be a separate issue that changes to project file via property pages isn't causing ReloadableProject.ReloadProjectAsync to be invoked. If we fix this, then we should get a prompt. However, I have noted that we handle version changes across same target framework fine, it is only when we switch across netcoreapp, netstandard and netfx that we get all weird issues - do you have a repro here where anything is busted?

Clicking "Ignore" doesn't ignore the changes

Probably we can consider not giving the Ignore option at all? We can also consider loading back the old project before the edit.

Clicking Reload closes the project editor

This is unrelated to this change - any full reload closes the csproj editor, this isn't doing anything different.

Get a prompt to "Reload all" or "Ignore all" even though a single project has changed

This is also unrelated. We always give "all" options even when there are conflicting changes to single project file outside the environment.
@srivatsn What are your thoughts?

You say these are unrelated changes - but we've made these situations way more likely to occur.

we've made these situations way more likely to occur

IMO it is not common to edit your target framework/target frameworks. Most of the manual edits are for other properties, package references, etc.
We are talking about a safe low risk fix for a scenario where we know lot of things are busted versus trying to fix the multiple (known) underlying issues and likely still leave the project in some busted state. I completely agree with you that we should eventually fix the underlying issues and revert this prompts, but I agree with @srivatsn that for RTM we should make this low risk fix, after cleaning up some of the rough user experiences that you pointed above.

Added another case where we don't get a reload above.
I saying that the changes you've to not avoid the bugs that you are fixing. For example, look at the repro that https://github.com/dotnet/roslyn-project-system/issues/1159 calls out - it's via the project properties.

I saying that the changes you've to not avoid the bugs that you are fixing. For example, look at the repro that #1159 calls out - it's via the project properties.

Yes, I didn't read the repro properly and also assumed changes to properties via properties page causes ReloadableProject.ReloadProjectAsync to be invoked. This should get handled once I fix that in this PR.

We decided to abandon this approach.


azure.storage.Account marked as replace when upgrading from provider v4 to v5

Describe what happened
Customer reports that Pulumi wants to replace their existing azure.storage.Account resource after upgrading the provider from major v4 to major v5.
To reproduce, first run the sample program with v4.42.0 of this provider as defined in the package.json. After succesful creation of the storage account, upgrade to<EMAIL_ADDRESS>or later. I tried both v5.0.0 and the v5.80.0, the latest at the time of writing.
When using v5.0.0, I also tried going back in time with the Pulumi CLI/engine and tested with Pulumi v3.30.0, which is from around the time of v4.42.0 and v5.0.0 of this provider.
https://github.com/pulumi/pulumi-azure/releases/tag/v4.42.0
https://github.com/pulumi/pulumi-azure/releases/tag/v5.0.0
https://github.com/pulumi/pulumi/releases/tag/v3.30.0
Also with Pulumi v3.30.0, I got the replace of the storage account reported.
Sample program
index.ts
import * as pulumi from "@pulumi/pulumi";
import * as azure from "@pulumi/azure";

// Create an Azure Resource Group
const rg = new azure.core.ResourceGroup("resourceGroup");

// Create an Azure resource (Storage Account)
const account = new azure.storage.Account('ducktest', {
    resourceGroupName: rg.name,
    location: 'westeurope',
    accountTier: 'Standard',
    accountKind: 'StorageV2',
    accountReplicationType: 'LRS',
    accessTier: 'Hot',
    enableHttpsTrafficOnly: true,
    networkRules: {
        defaultAction: 'Deny',
        virtualNetworkSubnetIds: [],
        ipRules: [],
    },
    minTlsVersion: 'TLS1_2'
});

// Export the connection string for the storage account
export const connectionString = account.primaryConnectionString;

package.json
{
    "name": "5389",
    "main": "index.ts",
    "devDependencies": {
        "@types/node": "^18",
        "typescript": "^5.0.0"
    },
    "dependencies": {
        "@pulumi/azure": "4.42.0",
        "@pulumi/pulumi": "^3.113.0"
    }
}

Log output
From v4.42.0 to v5.0.0
$ pulumi preview --diff
Previewing update (team-ce/ringo)

View Live: https://app.pulumi.com/team-ce/5389/ringo/previews/abecec67-378c-4569-9585-0700d94ae15c

  pulumi:pulumi:Stack: (same)
    [urn=urn:pulumi:ringo::5389::pulumi:pulumi:Stack::5389-ringo]
    +-azure:storage/account:Account: (replace)
        [id=/subscriptions/<masked>/resourceGroups/resourcegroup2121063c/providers/Microsoft.Storage/storageAccounts/ducktestf132e89]
        [urn=urn:pulumi:ringo::5389::azure:storage/account:Account::ducktest]
        [provider: urn:pulumi:ringo::5389::pulumi:providers:azure::default_4_42_0::2b55b372-a663-47e4-b614-1e71e4bd322d => urn:pulumi:ringo::5389::pulumi:providers:azure::default_5_0_0::output<string>]
      + allowNestedItemsToBePublic     : true
      ~ infrastructureEncryptionEnabled: false => false
      ~ queueEncryptionKeyType         : "Service" => "Service"
      ~ tableEncryptionKeyType         : "Service" => "Service"
Resources:
    +-1 to replace
    2 unchanged

From v4.42.0 to v5.80.0
$ pulumi preview --diff
Previewing update (team-ce/ringo)

View Live: https://app.pulumi.com/team-ce/5389/ringo/previews/38588e94-3c53-4038-bd3e-780ba758b91c

  pulumi:pulumi:Stack: (same)
    [urn=urn:pulumi:ringo::5389::pulumi:pulumi:Stack::5389-ringo]
    +-azure:storage/account:Account: (replace)
        [id=/subscriptions/<masked>/resourceGroups/resourcegroup2121063c/providers/Microsoft.Storage/storageAccounts/ducktestf132e89]
        [urn=urn:pulumi:ringo::5389::azure:storage/account:Account::ducktest]
        [provider: urn:pulumi:ringo::5389::pulumi:providers:azure::default_4_42_0::2b55b372-a663-47e4-b614-1e71e4bd322d => urn:pulumi:ringo::5389::pulumi:providers:azure::default_5_80_0::output<string>]
      + allowNestedItemsToBePublic     : true
      + defaultToOauthAuthentication   : false
      + dnsEndpointType                : "Standard"
      ~ infrastructureEncryptionEnabled: false => false
      + localUserEnabled               : true
      + publicNetworkAccessEnabled     : true
      ~ queueEncryptionKeyType         : "Service" => "Service"
      + sftpEnabled                    : false
      ~ tableEncryptionKeyType         : "Service" => "Service"
Resources:
    +-1 to replace
    2 unchanged

Affected Resource(s)
azure.storage.Account
Output of pulumi about
pulumi about
CLI
Version      3.120.0
Go Version   go1.22.4
Go Compiler  gc

Plugins
KIND      NAME    VERSION
resource  azure   4.42.0
language  nodejs  unknown

Host
OS       darwin
Version  14.5
Arch     arm64

This project is written in nodejs: executable='/Users/ringods/.volta/bin/node' version='v18.15.0'

Current Stack: team-ce/5389/ringo

<removed list of resources>

Found no pending operations associated with team-ce/ringo

Backend
Name           pulumi.com
URL            https://app.pulumi.com/v-ringo-pulumi-corp
User           v-ringo-pulumi-corp
Organizations  v-ringo-pulumi-corp, team-ce, pulumi
Token type     personal

Dependencies:
NAME            VERSION
typescript      5.4.5
@pulumi/azure   4.42.0
@pulumi/pulumi  3.120.0
@types/node     18.19.36

Pulumi locates its logs in /var/folders/yq/10j1hf8s1ks9f23yxrdbbbb40000gn/T/ by default

Additional context
No response
Contributing
Vote on this issue by adding a 👍 reaction.
To contribute a fix for this issue, leave a comment (and link to your pull request, if you've opened one already).

Upstream upgrade notes for azurerm_storage_account

Thanks for the options. I checked my state and it doesn't already contain the 5.x provider, so can you confirm that what I'm doing is appropriate? My plan is:

Export current state
Copy the 4.x provider definition
In the copy, update the version number in the URN and inputs/outputs, generate a new UUID for the id property
Update the storage account's provider property to point to the new 5.x provider instance
Import modified state
Refresh so the new provider will update the resource properties

My thinking here is that it's better for me to only script changing the resource that is having an issue rather than making large changes to the state. I'd like to have something generic I can document for other teams to use so I'm trying to minimize the chances of other side effects.

Hello @gpduck and others bumping into this issue,
We have a shorter and less intrusive way of patching the stack state. Here are the verified steps to upgrade, starting from a stack using a Pulumi Azure v4:

export current state - pulumi stack export > state.json
search for the storage account resource in the state file. In the outputs section, you will notice a __meta property with a value ending with \"schema_version\":\"2\"}
change the version from 2 to 4.
import the state - pulumi stack import --file state.json
upgrade to Pulumi Azure v5 - e.g. for TS npm install<EMAIL_ADDRESS>run pulumi up.

Pulumi should no longer say the storage accounts will be replaced, but up will update the provider version to 5.80.0 in the state.

Had another look here and there's a few issues going on.
Firstly the diff displayed in the original issue is plain wrong. The properties shown to change from the same value are not actually present in the state, so can't have that value.
This bit is fixed by enrolling the resource into a bridge feature called PlanResourceChange: https://github.com/pulumi/pulumi-azure/pull/2150
Unfortunately that does not fix the replace but the diff is actually sensible but still not 100% obvious. The resource is replaced due to dnsEndpointType
    +-azure:storage/account:Account: (replace)
        [id=/subscriptions/0282681f-7a9e-424b-80b2-96babd57a8a1/resourceGroups/resourcegroup80080f67/providers/Microsoft.Storage/storageAccounts/ducktest266df7d]
        [urn=urn:pulumi:dev::azure_2134_repro::azure:storage/account:Account::ducktest]
        [provider: urn:pulumi:dev::azure_2134_repro::pulumi:providers:azure::default_4_42_0::6702e220-3f67-4489-9507-824a449a2227 => urn:pulumi:dev::azure_2134_repro::pulumi:providers:azure::default_5_81_0::output<string>]
      + allowNestedItemsToBePublic   : true
      + crossTenantReplicationEnabled: true
      + defaultToOauthAuthentication : false
      + dnsEndpointType              : "Standard"
      + localUserEnabled             : true
      + publicNetworkAccessEnabled   : true
      + sftpEnabled                  : false

which is visible from the GRPC call:
"detailedDiff": {
            "allowNestedItemsToBePublic": {},
            "crossTenantReplicationEnabled": {},
            "defaultToOauthAuthentication": {},
            "dnsEndpointType": {
                "kind": "ADD_REPLACE"
            },
            "localUserEnabled": {},
            "publicNetworkAccessEnabled": {},
            "sftpEnabled": {}
        },

The CLI output here can be improved but that looks like something on the engine side perhaps?
However this now reproes in Terraform too:
provider "azurerm" {
  features {}
  version = "2.99.0" // change to 3.109.0
}

resource "azurerm_resource_group" "resourceGroup" {
  name     = "resourceGroup"
  location = "westeurope"
}

resource "azurerm_storage_account" "ducktest12" {
  name                     = "ducktest12"
  resource_group_name      = azurerm_resource_group.resourceGroup.name
  location                 = "westeurope"
  account_tier             = "Standard"
  account_kind             = "StorageV2"
  account_replication_type = "LRS"
  access_tier              = "Hot"
  enable_https_traffic_only  = true

  min_tls_version           = "TLS1_2"

  network_rules {
    default_action = "Deny"
    virtual_network_subnet_ids = []
    ip_rules = []
  }
}

yields the same replace after upgrading terraform plan -refresh=false:
  # azurerm_storage_account.ducktest12 must be replaced
-/+ resource "azurerm_storage_account" "ducktest12" {
      ~ allow_nested_items_to_be_public    = false -> true
      + default_to_oauth_authentication    = false
      + dns_endpoint_type                  = "Standard" # forces replacement
      ~ id                                 = "/subscriptions/0282681f-7a9e-424b-80b2-96babd57a8a1/resourceGroups/resourceGroup/providers/Microsoft.Storage/storageAccounts/ducktest12" -> (known after apply)
      + large_file_share_enabled           = (known after apply)
      + local_user_enabled                 = true
        name                               = "ducktest12"
      ~ primary_access_key                 = (sensitive value)
      ~ primary_blob_connection_string     = (sensitive value)
      ~ primary_blob_endpoint              = "https://ducktest12.blob.core.windows.net/" -> (known after apply)
      ~ primary_blob_host                  = "ducktest12.blob.core.windows.net" -> (known after apply)
      + primary_blob_internet_endpoint     = (known after apply)
      + primary_blob_internet_host         = (known after apply)
      + primary_blob_microsoft_endpoint    = (known after apply)
      + primary_blob_microsoft_host        = (known after apply)
      ~ primary_connection_string          = (sensitive value)
      ~ primary_dfs_endpoint               = "https://ducktest12.dfs.core.windows.net/" -> (known after apply)
      ~ primary_dfs_host                   = "ducktest12.dfs.core.windows.net" -> (known after apply)
      + primary_dfs_internet_endpoint      = (known after apply)
      + primary_dfs_internet_host          = (known after apply)
      + primary_dfs_microsoft_endpoint     = (known after apply)
      + primary_dfs_microsoft_host         = (known after apply)
      ~ primary_file_endpoint              = "https://ducktest12.file.core.windows.net/" -> (known after apply)
      ~ primary_file_host                  = "ducktest12.file.core.windows.net" -> (known after apply)
      + primary_file_internet_endpoint     = (known after apply)
      + primary_file_internet_host         = (known after apply)
      + primary_file_microsoft_endpoint    = (known after apply)
      + primary_file_microsoft_host        = (known after apply)
      ~ primary_location                   = "westeurope" -> (known after apply)
      ~ primary_queue_endpoint             = "https://ducktest12.queue.core.windows.net/" -> (known after apply)
      ~ primary_queue_host                 = "ducktest12.queue.core.windows.net" -> (known after apply)
      + primary_queue_microsoft_endpoint   = (known after apply)
      + primary_queue_microsoft_host       = (known after apply)
      ~ primary_table_endpoint             = "https://ducktest12.table.core.windows.net/" -> (known after apply)
      ~ primary_table_host                 = "ducktest12.table.core.windows.net" -> (known after apply)
      + primary_table_microsoft_endpoint   = (known after apply)
      + primary_table_microsoft_host       = (known after apply)
      ~ primary_web_endpoint               = "https://ducktest12.z6.web.core.windows.net/" -> (known after apply)
      ~ primary_web_host                   = "ducktest12.z6.web.core.windows.net" -> (known after apply)
      + primary_web_internet_endpoint      = (known after apply)
      + primary_web_internet_host          = (known after apply)
      + primary_web_microsoft_endpoint     = (known after apply)
      + primary_web_microsoft_host         = (known after apply)
      + public_network_access_enabled      = true
      ~ secondary_access_key               = (sensitive value)
      + secondary_blob_connection_string   = (sensitive value)
      + secondary_blob_endpoint            = (known after apply)
      + secondary_blob_host                = (known after apply)
      + secondary_blob_internet_endpoint   = (known after apply)
      + secondary_blob_internet_host       = (known after apply)
      + secondary_blob_microsoft_endpoint  = (known after apply)
      + secondary_blob_microsoft_host      = (known after apply)
      ~ secondary_connection_string        = (sensitive value)
      + secondary_dfs_endpoint             = (known after apply)
      + secondary_dfs_host                 = (known after apply)
      + secondary_dfs_internet_endpoint    = (known after apply)
      + secondary_dfs_internet_host        = (known after apply)
      + secondary_dfs_microsoft_endpoint   = (known after apply)
      + secondary_dfs_microsoft_host       = (known after apply)
      + secondary_file_endpoint            = (known after apply)
      + secondary_file_host                = (known after apply)
      + secondary_file_internet_endpoint   = (known after apply)
      + secondary_file_internet_host       = (known after apply)
      + secondary_file_microsoft_endpoint  = (known after apply)
      + secondary_file_microsoft_host      = (known after apply)
      + secondary_location                 = (known after apply)
      + secondary_queue_endpoint           = (known after apply)
      + secondary_queue_host               = (known after apply)
      + secondary_queue_microsoft_endpoint = (known after apply)
      + secondary_queue_microsoft_host     = (known after apply)
      + secondary_table_endpoint           = (known after apply)
      + secondary_table_host               = (known after apply)
      + secondary_table_microsoft_endpoint = (known after apply)
      + secondary_table_microsoft_host     = (known after apply)
      + secondary_web_endpoint             = (known after apply)
      + secondary_web_host                 = (known after apply)
      + secondary_web_internet_endpoint    = (known after apply)
      + secondary_web_internet_host        = (known after apply)
      + secondary_web_microsoft_endpoint   = (known after apply)
      + secondary_web_microsoft_host       = (known after apply)
      + sftp_enabled                       = false
        # (15 unchanged attributes hidden)

      - blob_properties {
          - change_feed_enabled      = false -> null
          - last_access_time_enabled = false -> null
          - versioning_enabled       = false -> null
            # (1 unchanged attribute hidden)
        }

      ~ network_rules {
          ~ bypass                     = [
              - "AzureServices",
            ] -> (known after apply)
          ~ ip_rules                   = [] -> (known after apply)
          ~ virtual_network_subnet_ids = [] -> (known after apply)
            # (1 unchanged attribute hidden)
        }

      - queue_properties {
          - hour_metrics {
              - enabled               = true -> null
              - include_apis          = true -> null
              - retention_policy_days = 7 -> null
              - version               = "1.0" -> null
            }
          - logging {
              - delete                = false -> null
              - read                  = false -> null
              - retention_policy_days = 0 -> null
              - version               = "1.0" -> null
              - write                 = false -> null
            }
          - minute_metrics {
              - enabled               = false -> null
              - include_apis          = false -> null
              - retention_policy_days = 0 -> null
              - version               = "1.0" -> null
            }
        }

      - share_properties {
          - retention_policy {
              - days = 7 -> null
            }
        }
    }

However, running with refresh terraform plan does not yield a replace:
  # azurerm_storage_account.ducktest12 will be updated in-place
  ~ resource "azurerm_storage_account" "ducktest12" {
      ~ allow_nested_items_to_be_public   = false -> true
      ~ cross_tenant_replication_enabled  = false -> true
        id                                = "/subscriptions/0282681f-7a9e-424b-80b2-96babd57a8a1/resourceGroups/resourceGroup/providers/Microsoft.Storage/storageAccounts/ducktest12"
        name                              = "ducktest12"
        tags                              = {}
        # (61 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }

Unfortunately the refresh does not fix the issue on the pulumi side.


Add Custom Component and Click Handler

Hi! Just started using this library and needed to modify it in order to pass a custom React component instead of a plain button. I also wanted to hook into the onClick handler to pass the event to Google Analytics.

@wkentdag thanks! will test and hopefully cut a release tomorrow


HTTP/2 benchmarks

Create a suite of benchmarks at https://github.com/aspnet/benchmarks to cover most common user scenarios. Can reuse profiling/investigation samples - https://github.com/aspnet/AspNetCore/issues/13745

[ ] TechEmpower plaintext but over HTTP/2
[ ] Basic POST. Request is text/plain string of name. Reply is text/plain "Hello " + name
[ ] Stream per connection vs multiple streams on one connection
[ ] H2 vs H2C
[x] gRPC benchmarks. Will be created by gRPC team - https://github.com/grpc/grpc-dotnet/issues/6

Unary
Server streaming
Large messages

[ ] Kestrel and IIS HTTP/2 benchmarks

Some of these benchmarks may already exist.

FYI there is a lot of lock contention in HTTP/2 benchmarks.
Scenario: JSON
Yellow: h2
Black: http


Skip default scalars

Currently, default scalars are hardcoded on the generated code -- Int, Float, String, Boolean, and ID. Requesting a feature to skip defining this scalars.
My particular use case is I wish to override ID, since the ID I'm receiving follows a certain format which would be better off represented as a custom struct with its own serde serializer, deserializer.
Perhaps introducing a skip_default_scalars option makes sense.

Any progress on this?


Add category-comparision and marketing-campaigns-stats callout for em…

Description of the change: Add category-comparision and marketing-campaigns-stats callout for email insight
Reason for the change: We need to add this callout to these pages.
Link to original source: https://github.com/sendgrid/docs/tree/develop/content/docs/ui/analytics-and-reporting

Don't close yet, but is for #4577 issue

[x]  Category Comparison Statistics
[x]  Marketing Campaigns Statistics

Signed-off-by: Arthur Novaes<EMAIL_ADDRESS>

Hello @ArthurNovaes,Thanks again for the PR! It's HACKTOBERFEST! We want to show our appreciation by sending                                              you some special Hacktoberfest swag. If you have not already, could you please fill out                                              this form so we can send it to you? Thanks!                                             Team SendGrid DX

Hello @ArthurNovaes,Thanks again for the PR!                                         You have earned 4 out of the 5 points needed to receive glorious SendGrid Hacktoberfest swag.                                         Please take a moment to checkout this link to find more issues to get you past the required threshold or to simply continue the celebration.                                         Also, please be sure you have officially registered with us here by November 1, 2018 to qualify.                                         If you have any questions you can email us at<EMAIL_ADDRESS>                                        Thank you and Happy Hacktobering!                                         Team SendGrid


Occasional build failures during FriBidi build

I never experienced this locally, even when using Docker and the very same Dockerfile, but the GHA-CI jobs keep failing during the FriBidi build from time to time. Rerunning (if needed multiple times) resolves this. See eg this for an example where the build of the very same commit both failed and succeeded.
I'm not sure why that's happening; it shouldn't be due to the exec-order of different Make-jobs, since the Makefile is only invoked in serial mode (because parallel mode is currently completely broken).

I'm getting this on Mac with and without Docker but rerunning it does not fix the problem. Just to confirm, is this the error mentioned in this issue?
make: make distdir
/Applications/Xcode.app/Contents/Developer/usr/bin/make  distdir-am
  GEN      ChangeLog
if test -d "fribidi-1.0.10"; then find "fribidi-1.0.10" -type d ! -perm -200 -exec chmod u+w {} ';' && rm -rf "fribidi-1.0.10" || { sleep 5 && rm -rf "fribidi-1.0.10"; }; else :; fi
test -d "fribidi-1.0.10" || mkdir "fribidi-1.0.10"
 (cd gen.tab && /Applications/Xcode.app/Contents/Developer/usr/bin/make  top_distdir=../fribidi-1.0.10 distdir=../fribidi-1.0.10/gen.tab \
     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)
/Applications/Xcode.app/Contents/Developer/usr/bin/make  distdir-am
 (cd lib && /Applications/Xcode.app/Contents/Developer/usr/bin/make  top_distdir=../fribidi-1.0.10 distdir=../fribidi-1.0.10/lib \
     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)
/Applications/Xcode.app/Contents/Developer/usr/bin/make  distdir-am
 (cd bin && /Applications/Xcode.app/Contents/Developer/usr/bin/make  top_distdir=../fribidi-1.0.10 distdir=../fribidi-1.0.10/bin \
     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)
/Applications/Xcode.app/Contents/Developer/usr/bin/make  distdir-am
 (cd doc && /Applications/Xcode.app/Contents/Developer/usr/bin/make  top_distdir=../fribidi-1.0.10 distdir=../fribidi-1.0.10/doc \
     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)
/Applications/Xcode.app/Contents/Developer/usr/bin/make  distdir-am
 (cd test && /Applications/Xcode.app/Contents/Developer/usr/bin/make  top_distdir=../fribidi-1.0.10 distdir=../fribidi-1.0.10/test \
     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)
/Applications/Xcode.app/Contents/Developer/usr/bin/make  distdir-am
testcase="test_CapRTL_explicit.input" && \
	charset="`echo "test_CapRTL_explicit.input" | sed 's/_[^_]*$//;s/.*_//'`" && \
	../bin/fribidi --test --charset "$charset" "test_CapRTL_explicit.reference" > "test_CapRTL_explicit.input" \
	|| (rm -f "test_CapRTL_explicit.input"; false)
/bin/sh: ../bin/fribidi: No such file or directory
make[4]: *** [test_CapRTL_explicit.input] Error 1
make[3]: *** [distdir] Error 2
make[2]: *** [distdir-am] Error 1
make[1]: *** [distdir] Error 2
emmake: error: 'make distdir' failed (returned 2)
make: *** [/Users/nopol/JavascriptSubtitlesOctopus/dist/libraries/lib/libfribidi.a] Error 1

Oh, the linked logs already expired. Copying the full log of another instance here for future reference:

FriBiDi build failure

  (cd bin && make  top_distdir=../fribidi-1.0.10 distdir=../fribidi-1.0.10/bin \
     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)
make[3]: Entering directory '/code/build/lib/fribidi/bin'
make  distdir-am
make[4]: Entering directory '/code/build/lib/fribidi/bin'
make[4]: Leaving directory '/code/build/lib/fribidi/bin'
make[3]: Leaving directory '/code/build/lib/fribidi/bin'
 (cd doc && make  top_distdir=../fribidi-1.0.10 distdir=../fribidi-1.0.10/doc \
     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)
make[3]: Entering directory '/code/build/lib/fribidi/doc'
make  distdir-am
make[4]: Entering directory '/code/build/lib/fribidi/doc'
Running c2man
../missing: 81: c2man: not found
WARNING: 'c2man' is missing on your system.
         You might have modified some files without having the proper
         tools for further handling them.  Check the 'README' file, it
         often tells you about the needed prerequisites for installing
         this package.  You may also peek at any GNU archive site, in
         case some other package contains this missing 'c2man' program.
make[5]: Entering directory '/code/build/lib/fribidi/doc'
Running c2man
../missing: 81: c2man: not found
WARNING: 'c2man' is missing on your system.
         You might have modified some files without having the proper
         tools for further handling them.  Check the 'README' file, it
         often tells you about the needed prerequisites for installing
         this package.  You may also peek at any GNU archive site, in
         case some other package contains this missing 'c2man' program.
make[5]: Leaving directory '/code/build/lib/fribidi/doc'
make[5]: Entering directory '/code/build/lib/fribidi/doc'
Running c2man
../missing: 81: c2man: not found
WARNING: 'c2man' is missing on your system.
         You might have modified some files without having the proper
         tools for further handling them.  Check the 'README' file, it
         often tells you about the needed prerequisites for installing
         this package.  You may also peek at any GNU archive site, in
         case some other package contains this missing 'c2man' program.
make[5]: Leaving directory '/code/build/lib/fribidi/doc'
make[5]: Entering directory '/code/build/lib/fribidi/doc'
Running c2man
../missing: 81: c2man: not found
WARNING: 'c2man' is missing on your system.
         You might have modified some files without having the proper
         tools for further handling them.  Check the 'README' file, it
         often tells you about the needed prerequisites for installing
         this package.  You may also peek at any GNU archive site, in
         case some other package contains this missing 'c2man' program.
make[5]: Leaving directory '/code/build/lib/fribidi/doc'
make[5]: Entering directory '/code/build/lib/fribidi/doc'
Running c2man
../missing: 81: c2man: not found
WARNING: 'c2man' is missing on your system.
         You might have modified some files without having the proper
         tools for further handling them.  Check the 'README' file, it
         often tells you about the needed prerequisites for installing
         this package.  You may also peek at any GNU archive site, in
         case some other package contains this missing 'c2man' program.
make[5]: Leaving directory '/code/build/lib/fribidi/doc'
make[5]: Entering directory '/code/build/lib/fribidi/doc'
Running c2man
../missing: 81: c2man: not found
WARNING: 'c2man' is missing on your system.
         You might have modified some files without having the proper
         tools for further handling them.  Check the 'README' file, it
         often tells you about the needed prerequisites for installing
         this package.  You may also peek at any GNU archive site, in
         case some other package contains this missing 'c2man' program.
make[5]: Leaving directory '/code/build/lib/fribidi/doc'
make[5]: Entering directory '/code/build/lib/fribidi/doc'
Running c2man
../missing: 81: c2man: not found
WARNING: 'c2man' is missing on your system.
         You might have modified some files without having the proper
         tools for further handling them.  Check the 'README' file, it
         often tells you about the needed prerequisites for installing
         this package.  You may also peek at any GNU archive site, in
         case some other package contains this missing 'c2man' program.
make[5]: Leaving directory '/code/build/lib/fribidi/doc'
make[5]: Entering directory '/code/build/lib/fribidi/doc'
Running c2man
../missing: 81: c2man: not found
WARNING: 'c2man' is missing on your system.
         You might have modified some files without having the proper
         tools for further handling them.  Check the 'README' file, it
         often tells you about the needed prerequisites for installing
         this package.  You may also peek at any GNU archive site, in
         case some other package contains this missing 'c2man' program.
make[5]: Leaving directory '/code/build/lib/fribidi/doc'
make[5]: Entering directory '/code/build/lib/fribidi/doc'
Running c2man
../missing: 81: c2man: not found
WARNING: 'c2man' is missing on your system.
         You might have modified some files without having the proper
         tools for further handling them.  Check the 'README' file, it
         often tells you about the needed prerequisites for installing
         this package.  You may also peek at any GNU archive site, in
         case some other package contains this missing 'c2man' program.
make[5]: Leaving directory '/code/build/lib/fribidi/doc'
make[5]: Entering directory '/code/build/lib/fribidi/doc'
Running c2man
../missing: 81: c2man: not found
WARNING: 'c2man' is missing on your system.
         You might have modified some files without having the proper
         tools for further handling them.  Check the 'README' file, it
         often tells you about the needed prerequisites for installing
         this package.  You may also peek at any GNU archive site, in
         case some other package contains this missing 'c2man' program.
make[5]: Leaving directory '/code/build/lib/fribidi/doc'
make[5]: Entering directory '/code/build/lib/fribidi/doc'
Running c2man
../missing: 81: c2man: not found
WARNING: 'c2man' is missing on your system.
         You might have modified some files without having the proper
         tools for further handling them.  Check the 'README' file, it
         often tells you about the needed prerequisites for installing
         this package.  You may also peek at any GNU archive site, in
         case some other package contains this missing 'c2man' program.
make[5]: Leaving directory '/code/build/lib/fribidi/doc'
make[5]: Entering directory '/code/build/lib/fribidi/doc'
Running c2man
../missing: 81: c2man: not found
WARNING: 'c2man' is missing on your system.
         You might have modified some files without having the proper
         tools for further handling them.  Check the 'README' file, it
         often tells you about the needed prerequisites for installing
         this package.  You may also peek at any GNU archive site, in
         case some other package contains this missing 'c2man' program.
make[5]: Leaving directory '/code/build/lib/fribidi/doc'
make[5]: Entering directory '/code/build/lib/fribidi/doc'
Running c2man
../missing: 81: c2man: not found
WARNING: 'c2man' is missing on your system.
         You might have modified some files without having the proper
         tools for further handling them.  Check the 'README' file, it
         often tells you about the needed prerequisites for installing
         this package.  You may also peek at any GNU archive site, in
         case some other package contains this missing 'c2man' program.
make[5]: Leaving directory '/code/build/lib/fribidi/doc'
make[5]: Entering directory '/code/build/lib/fribidi/doc'
Running c2man
../missing: 81: c2man: not found
WARNING: 'c2man' is missing on your system.
         You might have modified some files without having the proper
         tools for further handling them.  Check the 'README' file, it
         often tells you about the needed prerequisites for installing
         this package.  You may also peek at any GNU archive site, in
         case some other package contains this missing 'c2man' program.
make[5]: Leaving directory '/code/build/lib/fribidi/doc'
make[5]: Entering directory '/code/build/lib/fribidi/doc'
Running c2man
../missing: 81: c2man: not found
WARNING: 'c2man' is missing on your system.
         You might have modified some files without having the proper
         tools for further handling them.  Check the 'README' file, it
         often tells you about the needed prerequisites for installing
         this package.  You may also peek at any GNU archive site, in
         case some other package contains this missing 'c2man' program.
make[5]: Leaving directory '/code/build/lib/fribidi/doc'
make[5]: Entering directory '/code/build/lib/fribidi/doc'
Running c2man
../missing: 81: c2man: not found
WARNING: 'c2man' is missing on your system.
         You might have modified some files without having the proper
         tools for further handling them.  Check the 'README' file, it
         often tells you about the needed prerequisites for installing
         this package.  You may also peek at any GNU archive site, in
         case some other package contains this missing 'c2man' program.
make[5]: Leaving directory '/code/build/lib/fribidi/doc'
make[5]: Entering directory '/code/build/lib/fribidi/doc'
Running c2man
../missing: 81: c2man: not found
WARNING: 'c2man' is missing on your system.
         You might have modified some files without having the proper
         tools for further handling them.  Check the 'README' file, it
         often tells you about the needed prerequisites for installing
         this package.  You may also peek at any GNU archive site, in
         case some other package contains this missing 'c2man' program.
make[5]: Leaving directory '/code/build/lib/fribidi/doc'
make[5]: Entering directory '/code/build/lib/fribidi/doc'
Running c2man
../missing: 81: c2man: not found
WARNING: 'c2man' is missing on your system.
         You might have modified some files without having the proper
         tools for further handling them.  Check the 'README' file, it
         often tells you about the needed prerequisites for installing
         this package.  You may also peek at any GNU archive site, in
         case some other package contains this missing 'c2man' program.
make[5]: Leaving directory '/code/build/lib/fribidi/doc'
make[5]: Entering directory '/code/build/lib/fribidi/doc'
Running c2man
../missing: 81: c2man: not found
WARNING: 'c2man' is missing on your system.
         You might have modified some files without having the proper
         tools for further handling them.  Check the 'README' file, it
         often tells you about the needed prerequisites for installing
         this package.  You may also peek at any GNU archive site, in
         case some other package contains this missing 'c2man' program.
make[5]: Leaving directory '/code/build/lib/fribidi/doc'
make[5]: Entering directory '/code/build/lib/fribidi/doc'
Running c2man
../missing: 81: c2man: not found
WARNING: 'c2man' is missing on your system.
         You might have modified some files without having the proper
         tools for further handling them.  Check the 'README' file, it
         often tells you about the needed prerequisites for installing
         this package.  You may also peek at any GNU archive site, in
         case some other package contains this missing 'c2man' program.
make[5]: Leaving directory '/code/build/lib/fribidi/doc'
make[5]: Entering directory '/code/build/lib/fribidi/doc'
Running c2man
../missing: 81: c2man: not found
WARNING: 'c2man' is missing on your system.
         You might have modified some files without having the proper
         tools for further handling them.  Check the 'README' file, it
         often tells you about the needed prerequisites for installing
         this package.  You may also peek at any GNU archive site, in
         case some other package contains this missing 'c2man' program.
make[5]: Leaving directory '/code/build/lib/fribidi/doc'
make[5]: Entering directory '/code/build/lib/fribidi/doc'
Running c2man
../missing: 81: c2man: not found
WARNING: 'c2man' is missing on your system.
         You might have modified some files without having the proper
         tools for further handling them.  Check the 'README' file, it
         often tells you about the needed prerequisites for installing
         this package.  You may also peek at any GNU archive site, in
         case some other package contains this missing 'c2man' program.
make[5]: Leaving directory '/code/build/lib/fribidi/doc'
make[5]: Entering directory '/code/build/lib/fribidi/doc'
Running c2man
../missing: 81: c2man: not found
WARNING: 'c2man' is missing on your system.
         You might have modified some files without having the proper
         tools for further handling them.  Check the 'README' file, it
         often tells you about the needed prerequisites for installing
         this package.  You may also peek at any GNU archive site, in
         case some other package contains this missing 'c2man' program.
make[5]: Leaving directory '/code/build/lib/fribidi/doc'
make[5]: Entering directory '/code/build/lib/fribidi/doc'
Running c2man
../missing: 81: c2man: not found
WARNING: 'c2man' is missing on your system.
         You might have modified some files without having the proper
         tools for further handling them.  Check the 'README' file, it
         often tells you about the needed prerequisites for installing
         this package.  You may also peek at any GNU archive site, in
         case some other package contains this missing 'c2man' program.
make[5]: Leaving directory '/code/build/lib/fribidi/doc'
make[5]: Entering directory '/code/build/lib/fribidi/doc'
Running c2man
../missing: 81: c2man: not found
WARNING: 'c2man' is missing on your system.
         You might have modified some files without having the proper
         tools for further handling them.  Check the 'README' file, it
         often tells you about the needed prerequisites for installing
         this package.  You may also peek at any GNU archive site, in
         case some other package contains this missing 'c2man' program.
make[5]: Leaving directory '/code/build/lib/fribidi/doc'
make[5]: Entering directory '/code/build/lib/fribidi/doc'
Running c2man
../missing: 81: c2man: not found
WARNING: 'c2man' is missing on your system.
         You might have modified some files without having the proper
         tools for further handling them.  Check the 'README' file, it
         often tells you about the needed prerequisites for installing
         this package.  You may also peek at any GNU archive site, in
         case some other package contains this missing 'c2man' program.
make[5]: Leaving directory '/code/build/lib/fribidi/doc'
make[5]: Entering directory '/code/build/lib/fribidi/doc'
Running c2man
../missing: 81: c2man: not found
WARNING: 'c2man' is missing on your system.
         You might have modified some files without having the proper
         tools for further handling them.  Check the 'README' file, it
         often tells you about the needed prerequisites for installing
         this package.  You may also peek at any GNU archive site, in
         case some other package contains this missing 'c2man' program.
make[5]: Leaving directory '/code/build/lib/fribidi/doc'
make[5]: Entering directory '/code/build/lib/fribidi/doc'
Running c2man
../missing: 81: c2man: not found
WARNING: 'c2man' is missing on your system.
         You might have modified some files without having the proper
         tools for further handling them.  Check the 'README' file, it
         often tells you about the needed prerequisites for installing
         this package.  You may also peek at any GNU archive site, in
         case some other package contains this missing 'c2man' program.
make[5]: Leaving directory '/code/build/lib/fribidi/doc'
make[5]: Entering directory '/code/build/lib/fribidi/doc'
Running c2man
../missing: 81: c2man: not found
WARNING: 'c2man' is missing on your system.
         You might have modified some files without having the proper
         tools for further handling them.  Check the 'README' file, it
         often tells you about the needed prerequisites for installing
         this package.  You may also peek at any GNU archive site, in
         case some other package contains this missing 'c2man' program.
make[5]: Leaving directory '/code/build/lib/fribidi/doc'
make[5]: Entering directory '/code/build/lib/fribidi/doc'
Running c2man
../missing: 81: c2man: not found
WARNING: 'c2man' is missing on your system.
         You might have modified some files without having the proper
         tools for further handling them.  Check the 'README' file, it
         often tells you about the needed prerequisites for installing
         this package.  You may also peek at any GNU archive site, in
         case some other package contains this missing 'c2man' program.
make[5]: Leaving directory '/code/build/lib/fribidi/doc'
make[5]: Entering directory '/code/build/lib/fribidi/doc'
Running c2man
../missing: 81: c2man: not found
WARNING: 'c2man' is missing on your system.
         You might have modified some files without having the proper
         tools for further handling them.  Check the 'README' file, it
         often tells you about the needed prerequisites for installing
         this package.  You may also peek at any GNU archive site, in
         case some other package contains this missing 'c2man' program.
make[5]: Leaving directory '/code/build/lib/fribidi/doc'
make[5]: Entering directory '/code/build/lib/fribidi/doc'
Running c2man
../missing: 81: c2man: not found
WARNING: 'c2man' is missing on your system.
         You might have modified some files without having the proper
         tools for further handling them.  Check the 'README' file, it
         often tells you about the needed prerequisites for installing
         this package.  You may also peek at any GNU archive site, in
         case some other package contains this missing 'c2man' program.
make[5]: Leaving directory '/code/build/lib/fribidi/doc'
make[4]: Leaving directory '/code/build/lib/fribidi/doc'
make[3]: Leaving directory '/code/build/lib/fribidi/doc'
 (cd test && make  top_distdir=../fribidi-1.0.10 distdir=../fribidi-1.0.10/test \
     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)
make[3]: Entering directory '/code/build/lib/fribidi/test'
make  distdir-am
make[4]: Entering directory '/code/build/lib/fribidi/test'
testcase="test_ISO8859-8_hebrew.input" && \
charset="`echo "test_ISO8859-8_hebrew.input" | sed 's/_[^_]*$//;s/.*_//'`" && \
../bin/fribidi --test --charset "$charset" "test_ISO8859-8_hebrew.reference" > "test_ISO8859-8_hebrew.input" \
|| (rm -f "test_ISO8859-8_hebrew.input"; false)
/bin/bash: line 2: ../bin/fribidi: No such file or directory
make[4]: *** [Makefile:1043: test_ISO8859-8_hebrew.input] Error 1
make[4]: Leaving directory '/code/build/lib/fribidi/test'
make[3]: *** [Makefile:858: distdir] Error 2
make[2]: *** [Makefile:608: distdir-am] Error 1
make[1]: *** [Makefile:601: distdir] Error 2
make[3]: Leaving directory '/code/build/lib/fribidi/test'
make[2]: Leaving directory '/code/build/lib/fribidi'
make[1]: Leaving directory '/code/build/lib/fribidi'
emmake: error: 'make distdir' failed (2)

And yes, your failure looks similar to the ones we occasionaly get on GHA.
I'm still not sure why this happens and why only sometimes (eventhough we run everything fully sequentially), but since you can reliably reproduce this we now have a chance to at least test other approaches.
Can you try if it builds for you with the following change? This seems to give me the same result, but is simpler (hopefully making it less fragile):
diff --git a/Makefile b/Makefile
index a7fa0c7..aedbae7 100644
--- a/Makefile
+++ b/Makefile
@@ -37,10 +37,7 @@ $(DIST_DIR)/lib/libfribidi.a: build/lib/fribidi/configure
                --disable-dependency-tracking \
                --disable-debug \
        && \
-       emmake make distdir && \
-       cd lib && \
-       emmake make install-libLTLIBRARIES install-pkgincludeHEADERS install-nodist_pkgincludeHEADERS && \
-       cd .. && \
+       emmake make -C lib/ install && \
        emmake make install-pkgconfigDATA

 build/lib/expat/configured: lib/expat

Docker
After the fix: builds completely fine and generates the outputs. 🎉
After reverting the fix (and make clean): the error reported above happens consistently.
So looks like this works for Docker.
Mac (no Docker)
After the fix: The build progresses much further but I now get this error:
make: make distdir install-libLTLIBRARIES
  GEN      fcalias.h
  GEN      fcftalias.h
cd ../fc-case && /Applications/Xcode.app/Contents/Developer/usr/bin/make  fccase.h
  GEN      fccase.h
cd ../fc-lang && /Applications/Xcode.app/Contents/Developer/usr/bin/make  fclang.h
  GEN      fclang.h
  GEN      stamp-fcstdint
config.status: executing src/fcstdint.h commands
config.status: creating src/fcstdint.h : _FONTCONFIG_SRC_FCSTDINT_H
config.status: src/fcstdint.h is unchanged
  GEN      stamp-fcobjshash.gperf
clang-14: warning: treating 'c-header' input as 'c++-header' when in C++ mode, this behavior is deprecated [-Wdeprecated]
  GEN      stamp-fcobjshash.gperf
clang-14: warning: treating 'c-header' input as 'c++-header' when in C++ mode, this behavior is deprecated [-Wdeprecated]
  GEN      fcobjshash.h
/Applications/Xcode.app/Contents/Developer/usr/bin/make  distdir-am
cp: /Makefile.am: Read-only file system
make[2]: *** [distdir-am] Error 1
make[1]: *** [distdir] Error 2
emmake: error: 'make distdir install-libLTLIBRARIES' failed (returned 2)
make: *** [/Users/nopol/JavascriptSubtitlesOctopus/dist/libraries/lib/libfontconfig.a] Error 1

After reverting the fix (and make clean): The error reported in my previous comment doesn't happen now. Instead, I get the same error that I get if the fix is applied. 🤔

@nopol10, can you try this change?:
diff --git a/Makefile b/Makefile
index a7fa0c7..553633f 100644
--- a/Makefile
+++ b/Makefile
@@ -37,10 +37,7 @@ $(DIST_DIR)/lib/libfribidi.a: build/lib/fribidi/configure
                --disable-dependency-tracking \
                --disable-debug \
        && \
-       emmake make distdir && \
-       cd lib && \
-       emmake make install-libLTLIBRARIES install-pkgincludeHEADERS install-nodist_pkgincludeHEADERS && \
-       cd .. && \
+       emmake make -C lib/ install && \
        emmake make install-pkgconfigDATA

 build/lib/expat/configured: lib/expat
@@ -231,11 +228,8 @@ $(DIST_DIR)/lib/libfontconfig.a: $(DIST_DIR)/lib/libharfbuzz.a $(DIST_DIR)/lib/l
                --disable-docs \
                --with-default-fonts=/fonts \
        && \
-       cd src && \
-       emmake make distdir install-libLTLIBRARIES && \
-       cd ../fontconfig && \
-       emmake make distdir install-fontconfigincludeHEADERS && \
-       cd ../ && \
+       emmake make -C src/ install && \
+       emmake make -C fontconfig/ install && \
        emmake make install-pkgconfigDATA

 # libass --

Also, @cawa-93 does building in MS Windows WSL with DOcker work for you, when you apply the above diff?

On Mac, I get the following error now:
Concatenate extracted license info...
mv dist/license/all dist/license/all.tmp
build/license_lint.awk dist/license/all.tmp build/license_fullnotice
Superfluous full text for 'FTL'!
Superfluous full text for 'MIT~old'!
Superfluous full text for 'NTP'!
Superfluous full text for 'Zlib'!
Superfluous full text for 'BSL-1'!
Superfluous full text for 'LGPL-2.1'!
make: *** [dist/license/all] Error 1

No issues after the change on Docker on Mac

Great, thanks for your help in testing this!
It seems the patch is a clear improvement, so I'll push it to master shortly. I'm not sure though if this completely fixed it, so let's leave this issue open for a while and see if our CI-builds fails again.

On Mac, I get the following error now:

You need to install licensecheck from your regular package manager if available or from CPAN. It wasn't listed in the README yet, will add it there.

The CI builds didn't fail like this anymore, so I'm assuming this was indeed fixed. Thanks for your help debugging this nopol10!


Source code not compilable with Java 9

I gave JD a try on Java 9. In the first place, its source code can't be compiled, due to the compile errors happening because of the changes in the javax.swing.tree API.
Specifically, the methods in the DefaultMutableTreeNode used to return collections with raw types, now they return generic types with the type arguments being TreeNode (e.g., the methods DefaultMutableTreeNode#breadthFirstEnumeration() and DefaultMutableTreeNode#children() now return Enumeration<TreeNode> instead of Enumeration). The current implementation uses unsafe operations (e.g., in gr.uom.java.ast.delegation.DelegationTree)

JDeodorant is built with the Java version required by Eclipse
Eclipse/Installation
Oxygen (4.7) and Neon (4.6) require Java 8.
Mars (4.5) and Luna (4.4) require Java 7.
Kepler (4.3) requires Java 6.


docs(SearchExampleStandard): use React hooks

Converted into Functional functional component

Codecov Report

Merging #3794 into master will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master    #3794   +/-   ##
=======================================
  Coverage   99.84%   99.84%
=======================================
  Files         185      185
  Lines        3251     3251
=======================================
  Hits         3246     3246
  Misses          5        5

Continue to review full report at Codecov.

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


Fix Json Stream Reporter documentation

Update the Json Stream reporter documentation to reflect usage as per Issue #4027

Coverage increased (+0.07%) to 92.803% when pulling ca3e3cff29cc60a74849652e956fbf7026eff2e8 on Lindsay-Needs-Sleep:4027-json-stream into 5f8df0848aa52bb0f7a0844bcd3715012a6ecfd6 on mochajs:master.

fixed by #4127
@Lindsay-Needs-Sleep I'm closing this PR, I'm sorry. Thank you.


Should this be used over stompit (v1)?

As per title.

Yeah I think so. I've been using stompit2 for a while now.


Tabbar stays visible as a white empty bar on iOS even when Shell.TabBarIsVisible is set to false

Looking at the code it seems to be causes by the iOS renderers forcing Translucent to false. If I recompile the package without those lines in CustomShellRenderer then the bar correctly hides away.

ill test it if you make a PR ;)

Hello, @calvinbaart, consider checking the latest nuget package: it has translucency lines removed too!


Documentation

We need a set of docs describing both simple logistical issues as well as some intuition about the models' behavior and implementation.

Currently in progress at fathom.rtfd.io.


Improve helper methods for porter

Default to installing porter v1.0.0-alpha.19 with m1 support. If someone wants a different version they can use porter.EnsurePorterAt and specify the version. You can also change porter.DefaultPorterVersion to change the default version.
Add porter package with methods for installing and working with porter. It now provides UseLocalBinForPorterHome so you can install porter and the mixins into bin and not affect the user's installation.
Add porter.EnsureMixins to help with installing a set of mixins.

Closes #1

LGTM!


use the primitive types in more places

In refactoring the autoscaling code, I noticed that the primitive types that provides consistent data validation for Containers, Pool Names, and Regions were not used everywhere.  This PR corrects that issue.
This more broadly uses at-deserialization-time validation, rather than relying on our ORM's identification that str is an unchecked and therefore only used as a post-query filter.

For review:
Type implementations:
https://github.com/microsoft/onefuzz/blob/e3dfcb8b95d6d0bc8e5f3c8b667f62b7bfd90040/src/pytypes/onefuzztypes/primitives.py#L15-L33
Validator implementations:
https://github.com/microsoft/onefuzz/blob/e3dfcb8b95d6d0bc8e5f3c8b667f62b7bfd90040/src/pytypes/onefuzztypes/validators.py#L6-L25
Checked string types:
https://github.com/microsoft/onefuzz/blob/e3dfcb8b95d6d0bc8e5f3c8b667f62b7bfd90040/src/api-service/__app__/onefuzzlib/orm.py#L67
Filter building code:
https://github.com/microsoft/onefuzz/blob/e3dfcb8b95d6d0bc8e5f3c8b667f62b7bfd90040/src/api-service/__app__/onefuzzlib/orm.py#L146-L167


[PCM-2344] - Added ability to pass in custom headers for telemetry purposes.

I didn't update the documentation with the new customHeaders field because this is really only for internal Genesys apps.


ESPN API Updated Key Names for Team Name

Sport
Football
Summary
The ESPN API has updated to now use the "name" key instead of a combination of "location" plus "nickname".
Line 8 in espn_api/football/team.py needs updated with the new key (tested locally).
Logs/Data
Traceback (most recent call last):
File "/Users/johnny.papercut/PycharmProjects/fantasy/venv/lib/python3.9/site-packages/flask/app.py", line 2190, in wsgi_app
response = self.full_dispatch_request()
File "/Users/johnny.papercut/PycharmProjects/fantasy/venv/lib/python3.9/site-packages/flask/app.py", line 1486, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Users/johnny.papercut/PycharmProjects/fantasy/venv/lib/python3.9/site-packages/flask/app.py", line 1484, in full_dispatch_request
rv = self.dispatch_request()
File "/Users/johnny.papercut/PycharmProjects/fantasy/venv/lib/python3.9/site-packages/flask/app.py", line 1469, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
File "/Users/johnny.papercut/PycharmProjects/fantasy/main.py", line 401, in index_week
'points': get_current_points(data, league.get('platform'), league.get('league_id'), league.get('scoring'), week)
File "/Users/johnny.papercut/PycharmProjects/fantasy/main.py", line 38, in get_current_points
league = helpers.initialize_espn_league(league_id, 2023)
File "/Users/johnny.papercut/PycharmProjects/fantasy/helpers.py", line 68, in initialize_espn_league
return League(league_id=league_id, year=year, espn_s2=s2, swid=swid)
File "/Users/johnny.papercut/PycharmProjects/fantasy/venv/lib/python3.9/site-packages/espn_api/football/league.py", line 24, in init
self.fetch_league()
File "/Users/johnny.papercut/PycharmProjects/fantasy/venv/lib/python3.9/site-packages/espn_api/football/league.py", line 27, in fetch_league
self._fetch_league()
File "/Users/johnny.papercut/PycharmProjects/fantasy/venv/lib/python3.9/site-packages/espn_api/football/league.py", line 34, in _fetch_league
self._fetch_teams(data)
File "/Users/johnny.papercut/PycharmProjects/fantasy/venv/lib/python3.9/site-packages/espn_api/football/league.py", line 39, in _fetch_teams
super()._fetch_teams(data, TeamClass=Team)
File "/Users/johnny.papercut/PycharmProjects/fantasy/venv/lib/python3.9/site-packages/espn_api/base_league.py", line 64, in _fetch_teams
self.teams.append(TeamClass(team, roster=roster, member=member, schedule=schedule, year=seasonId, pro_schedule=pro_schedule))
File "/Users/johnny.papercut/PycharmProjects/fantasy/venv/lib/python3.9/site-packages/espn_api/football/team.py", line 8, in init
self.team_name = "%s %s" % (data['location'], data['nickname'])
KeyError: 'location'

Had outdated version, please ignore.


Running standard set of sensitivity models with mcmc - assignments made!

I think we are ready to run our standard set of sensitivity models with mcmc, and as such let's divide and conquer.  So you should start by downloading the existing bridging models on the google drive (just to have in general) and especially 2021.00.04_base_v1.  This base_v1 model is the one that we will make changes to for each respective one-off sensitivity.
Download bridging models and base_v1 model

[x] - Aaron
[x] - Kelli
[x] - Chris
[x] - Andy

Next, have a look at our model readme file on the google drive and find your assigned sensitivity runs to do by following the adnuts run code.  Let me know if you have any questions on how to run adnuts or how to structure .dat and/or .ctl files for any specific sensitivity.

@andrew-edwards the h sensitivity has always run h=1 with an upper bound of 1.0. I think this leads to poor convergence given the parameter is on the bound even though it is a fixed parameter. I think we should explore using h = 0.97 or something that is a little bit less than h=1 give the upper bound cannot go above one.

@andrew-edwards the h sensitivity has always run h=1 with an upper bound of 1.0. I think this leads to poor convergence given the parameter is on the bound even though it is a fixed parameter. I think we should explore using h = 0.97 or something that is a little bit less than h=1 give the upper bound cannot go above one.

Anyone remember the context behind the sensitivity that removes the survey? The model does not converge if you actually remove everything, only if you turn the likelihood off.

Anyone remember the context behind the sensitivity that removes the survey? The model does not converge if you actually remove everything, only if you turn the likelihood off.

There are a bunch of changes in the control file for this sensitivity when compared to last year's base model (I just did a diff) and it looks like various parameter initial values were modified and a bunch of other things. I have no recollection of these changes so it was probably @aaronmberger-nwfsc that made them.

There are a bunch of changes in the control file for this sensitivity when compared to last year's base model (I just did a diff) and it looks like various parameter initial values were modified and a bunch of other things. I have no recollection of these changes so it was probably @aaronmberger-nwfsc that made them.

Note that the README_2019 file has details of exactly what needs to be changed for each sensitivity run (since during shutdown Chris and I had to figure it out by diff-ing the 2018 runs to the 2018 base model). I used the README to check what to change this time (since only use SS for hake so have to remind myself!).

Note that the README_2019 file has details of exactly what needs to be changed for each sensitivity run (since during shutdown Chris and I had to figure it out by diff-ing the 2018 runs to the 2018 base model). I used the README to check what to change this time (since only use SS for hake so have to remind myself!).

@andrew-edwards can you point me to a commit or link to line number, I don't see what you are talking about. Also, the removing the survey sensitivity run hasn't been around for forever. I am trying to remind myself why we are doing it and who asked, not necessarily how.

@andrew-edwards can you point me to a commit or link to line number, I don't see what you are talking about. Also, the removing the survey sensitivity run hasn't been around for forever. I am trying to remind myself why we are doing it and who asked, not necessarily how.

The no survey run was a side run last year by Kelli and myself after discussions with the joint survey team about the importance/effect of the survey.  We do not need to do this one again, unless someone is simply curious.

On Jan 18, 2021, at 10:09 AM, Kelli Johnson<EMAIL_ADDRESS>wrote:

@andrew-edwards can you point me to a commit or link to line number, I don't see what you are talking about. Also, the removing the survey sensitivity run hasn't been around for forever. I am trying to remind myself why we are doing it and who asked, not necessarily how.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or unsubscribe.

The no survey run was a side run last year by Kelli and myself after discussions with the joint survey team about the importance/effect of the survey.  We do not need to do this one again, unless someone is simply curious.

On Jan 18, 2021, at 10:09 AM, Kelli Johnson<EMAIL_ADDRESS>wrote:

@andrew-edwards can you point me to a commit or link to line number, I don't see what you are talking about. Also, the removing the survey sensitivity run hasn't been around for forever. I am trying to remind myself why we are doing it and who asked, not necessarily how.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or unsubscribe.

@kellijohnson-NOAA  I was referring to the README_2019 on the Google Drive (the spreadsheet listing all the runs), but didn't post the link here as here is public!
But, you're right - the survey sensititivy hasn't been around forever - wasn't actually in the 2019 sensitivity set (so the README_2019 is no use). Sorry, I hadn't checked, and was just responding to Chris's comment about diff'ing the files (since that's all documented for 2019).
It wasn't actually in last year's document. Oh, think Aaron just said why it's there.

@kellijohnson-NOAA  I was referring to the README_2019 on the Google Drive (the spreadsheet listing all the runs), but didn't post the link here as here is public!
But, you're right - the survey sensititivy hasn't been around forever - wasn't actually in the 2019 sensitivity set (so the README_2019 is no use). Sorry, I hadn't checked, and was just responding to Chris's comment about diff'ing the files (since that's all documented for 2019).
It wasn't actually in last year's document. Oh, think Aaron just said why it's there.

Also the Hamel M prior (run 22) was run last year but not in the document. I ran it anyway (and see Chris added it into the build), but we can probably leave it out again after taking a look.

Also the Hamel M prior (run 22) was run last year but not in the document. I ran it anyway (and see Chris added it into the build), but we can probably leave it out again after taking a look.

Let’s discuss tomorrow the inclusion (or not) of the Hamel prior run.

On Jan 18, 2021, at 10:40 AM, Andrew Edwards<EMAIL_ADDRESS>wrote:

Also the Hamel M prior (run 22) was run last year but not in the document. I ran it anyway (and see Chris added it into the build), but we can probably leave it out again after taking a look.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or unsubscribe.

Let’s discuss tomorrow the inclusion (or not) of the Hamel prior run.

On Jan 18, 2021, at 10:40 AM, Andrew Edwards<EMAIL_ADDRESS>wrote:

Also the Hamel M prior (run 22) was run last year but not in the document. I ran it anyway (and see Chris added it into the build), but we can probably leave it out again after taking a look.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or unsubscribe.

Sens models all assigned and run. Hamel prior is in the doc build, so we can take a look at the figures. Closing this.

Sens models all assigned and run. Hamel prior is in the doc build, so we can take a look at the figures. Closing this.


Fix windows builds

This adds the compiler_param_file feature to the cross-compiler which fixes Windows builds using all of the libraries.
Unfortunately I am stuck on this error now.
I will probably also redo the .bazelrc in this PR
Closes #37.
Closes #19.

Aha
The error on my machine was probably due to not setting output_user_root

Assuming the bazelrc update is fine, this is ready for merge


Invalid date when pushed to gitlab container registry

Description of the issue:
Running jib:build pushes an image which appears to be 48 years ago in Gitlab.
Expected behavior:
Date should be date of the build?
Steps to reproduce:
mvn clean jib:build

Environment:
Maven, Kubuntu 17.04
Push to Gitlab version 11.02
jib-maven-plugin Configuration:
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>0.9.4</version>
<configuration>
<to>
<image>gitlab:4567/server/serverapi/too_old</image>
</to>
</configuration>
</plugin>

Can this image be built locally? i.e. without pushing to anywhere. So I can see whether it's a gitlab or a JIB issue..

This is WAI, actually. Jib doesn't set the timestamp to achieve reproducibility.
mvm compile jib:dockerBuild can push the image directly to your local Docker daemon.

@chanseokoh  What is WAI?
It still comes out as 48 years ago.

gitlab:4567/server/serverapi/too_old                            latest                d4bae3ccc8e8        48 years ago        118MB

Sorry, I am saying showing 48 years old is WAI, as Jib does not set the timestamp for the image. We are aware that this can be confusing and discussing ways to address this issue.

@aclowkey Is the date necessary for gitlab to work for your case?

It will work.
On Thu, Jul 12, 2018, 15:57 Q Chen<EMAIL_ADDRESS>wrote:

@aclowkey https://github.com/aclowkey Is the date necessary for gitlab
to work for your case?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/GoogleContainerTools/jib/issues/578#issuecomment-404503173,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AB9y2f8yuueNkJ84VKcym_-l7nDuKk3Uks5uF0fOgaJpZM4VMPGT
.

Okay, great, I will close this as working as intended for now. Feel free to reopen if the 48 years ago ends up being a problem for you.

I mean, it i can use the image but it makes seeing images by their
chronological order very inconvinient..
On Thu, Jul 12, 2018, 16:05 Q Chen<EMAIL_ADDRESS>wrote:

Closed #578 https://github.com/GoogleContainerTools/jib/issues/578.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/GoogleContainerTools/jib/issues/578#event-1730255636,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AB9y2WWQAxI1U9-yW7WneYNlpYbFx6Bzks5uF0mvgaJpZM4VMPGT
.

@coollog is there a FR issue for this?  I remember a conversation happening a while back about strategies around this but I don't quite remember the details.  I remember a suggestion that was something like using the date of the last commit, which seemed interesting.

I believe that was this issue https://github.com/GoogleContainerTools/jib/issues/413

@patflynn there is an istio-dev thread about possible solutions: https://groups.google.com/forum/#!topic/istio-dev/nuv6UaBFGDk


Duplo-18507 hybernation reg

Overview
Fixed diff issue for metadata
Summary of changes
This PR does the following:

Added diffsuppress function diffSuppressWhenExisting to metadata schema attribute, since duplocloud_aws_host does not have update context
...

Testing performed

[ ] Using unit tests
[✓ ] Manually, on my local system
[ ] Manually, on a remote test system

Describe any breaking changes

...

Task linked: DUPLO-18507 TF State File Displays Hibernation Metadata Instead of OSDisk Metadata. Terraform Shows Changes in Metadata


fix(runtime-core): support object syntax for class in templates

Current logic in vnode.ts does not normalize classes for templates, because of PatchFlags.CLASS set on compiled VNode.
Unfortunately, at least for browser build, PatchFlags.CLASS does not mean that any kind of compile-time optimization was applied to class (I'm not 100% sure, but it seems that it is handled by processExpression code path, which is not taken in a browser)
It results in [object Object] being displayed as a class name when :class = { foo: smthng, bar: smthng } syntax is used.
This PR removes that extra check and adds an integration test for this scenario.

Yeah, that's correct. I dropped the class optimization part because it relies on full AST analysis and won't be consistent between browser/non-browser builds.


APL Rotations don't report Time Spent OOM

Describe the bug
With Legacy rotations, the sim always reported Time Spent OOM on the Damage tab, making it easy to know when you needed to make adjustments to your rotation to conserve mana. Using APL rotations, the Time Spent OOM always displays 0.0s spent OOM, which can lead to unexpected and misleading increases/decreases when players make certain gear or rotation changes.
To Reproduce
Steps to reproduce the behavior:

Go to https://wowsims.github.io/wotlk/elemental_shaman/#eJzjkuFgsmD0YJzAyPiA6Q3LCkbGDYxMBxgZLzAyvmBkdBLiYJRgVGAyYLRgdACqCmCMYBRikNrN1sTIFpCTWJlaxMEuwC71kJGLX2DpBGaJN7JKbEcPMW3cycTFKfCom1mJ+TaQyS/Q1cMs8QgoB5QAyfEIHOlmluiShUkvB2r9AZE+BhTgFfgPlJ4jpMQClGYAcpcB5afIKLFsBHH5BbYCDeaEGLURrH8JUL4Toh9iYDfQvk9AgWM7oW651wl1C6fAC5CzQKIsAms6mYHkXiDJI7AOqOWXLESGR2AH0AEvOCBaWARmdTEr8XIwGjAGsESwVjB2MDIuYvrKxHWAiWEwgYjbBwbaCaQCIQNSdVSxcTAKMBUwJplxKUlxAdnMEswKwJjhYPQEyzcEOARCGA4ODoxSAhyMyKoUGLsYg4xNjQ0MDAxNjYyNDI2NTQ2NjYyMDQyBDF0DA1MgNDA2NMACdLEJQsAjRgmOA0eYBC48ZZLYc4RJ4dclJo3f95gM/lxiesHI8oGRexYjwyEmhluMDLOYGJQmMnNC/JLpIAhhqDhIzpoJAiftLSEiF+wV08Dgmr3RQ6YqNvf8otz8bIVgCTYtGqc6jU4HahjTcPIIAXOC8ck77Jid5kgNd2ADkDAOe+wAteGHfRDe3GyREjS3of+eParoB3u379N3vNh72V5k4i+jFb+W289myjpr5PvKvuvtvA9/lr2yx27a8AWk5+YoknUAAPeMtIE
Go to Results -> Damage tab, sim at least 1 iteration
Observe the sim reports 65ish seconds spent OOM
Go to Rotation, choose Default APL
Go to Results -> Damage tab, sim at least 1 iteration
Observe the sim reports 0 seconds spent OOM
Go to Results -> Timeline tab
Scroll through the timeline and observe many missed casts due to being OOM

Expected behavior
APL rotations should report time spent OOM in a similar manner to Legacy rotations.
Desktop (please complete the following information):

OS: Windows 10 22H2
Browser: Firefox
Version: 119

Additional context
This was mentioned in Discord a few times but I wanted to file a formal issue so it doesn't get missed.

Thanks for looking into this, unfortunately the repro steps still result in 0.0 seconds spent OOM with APL


(dyn rhai::any::Any + 'static) cannot be shared between threads safely

run cargo test on the following code will report errors because: (dyn rhai::any::Any + 'static) cannot be shared between threads safely
use rhai::{Engine, EvalAltResult};

fn main() -> Result<(), EvalAltResult> {
    let mut engine = Engine::new();

    let result = engine.eval::<isize>("40 + 2")?;

    println!("Answer: {}", result); // prints 42

    Ok(())
}

#[cfg(test)]
mod tests {
    use super::*;

    fn is_send<T: Send>() -> bool {
        true
    }

    fn is_sync<T: Sync>() -> bool {
        true
    }

    #[test]
    fn test_send_sync() {
        assert!(is_send::<EvalAltResult>());
        assert!(is_sync::<EvalAltResult>());
    }
}

Check out the sync feature.

the package test-rhai depends on rhai, with features: sync but rhai does not have these features.

I'll probably show up as a version 0.12.0 in a bit...
In the meantime, I think you can pull from a specific version or commit so you won't have to worry about newer versions?

Could you publish a new version after making Any::downcast_ref public? So that I can try to update to that version

@schungx  I prefer waiting for the next release because it's not urgent.

Alright you got it.  0.11.1 published to crates.io.

thanks @schungx


Incorrect Getting Started Documentation for Reanimated2

Problem
I have followed your instructions to update to v0.5.4. I could not get my project working with your steps for integrating with a project that uses Reanimated. I use Reanimated2 in my project.
The issues I had are:

ReanimatedJSIModulePackage is not an interface so cannot be implemented.
ReanimatedJSIModulePackage.getJSIModules was not called.

From your documentation (not working)
package com.ammarahmed.mmkv;

import com.facebook.react.bridge.JSIModulePackage;
import com.facebook.react.bridge.JSIModuleSpec;
import com.facebook.react.bridge.JavaScriptContextHolder;
import com.facebook.react.bridge.ReactApplicationContext;
import java.util.Collections;
import java.util.List;

import com.swmansion.reanimated.ReanimatedJSIModulePackage; // <-- ADD THIS
import com.ammarahmed.mmkv.RNMMKVModule; // <-- ADD THIS

public class RNMMKVJSIModulePackage implements ReanimatedJSIModulePackage  { // <--- REPLACE JSIModulePackage with ReanimatedJSIModulePackage
    @Override
    public List<JSIModuleSpec> getJSIModules(ReactApplicationContext reactApplicationContext, JavaScriptContextHolder jsContext) {

        reactApplicationContext.getNativeModule(RNMMKVModule.class).installLib(jsContext, reactApplicationContext.getFilesDir().getAbsolutePath() + "/mmkv");

        return Collections.emptyList();
    }
}

What I had to do (working)

Swap implements for extends.
Call super.getJSIModules.

package com.david.gettins;

import com.facebook.react.bridge.JSIModulePackage;
import com.facebook.react.bridge.JSIModuleSpec;
import com.facebook.react.bridge.JavaScriptContextHolder;
import com.facebook.react.bridge.ReactApplicationContext;
import java.util.Collections;
import java.util.List;

import com.swmansion.reanimated.ReanimatedJSIModulePackage;
import com.ammarahmed.mmkv.RNMMKVModule;

public class DavidGettinsJSIModulePackage extends ReanimatedJSIModulePackage {
  @Override
  public List<JSIModuleSpec> getJSIModules(ReactApplicationContext reactApplicationContext,
      JavaScriptContextHolder jsContext) {

    super.getJSIModules(reactApplicationContext, jsContext);

    reactApplicationContext.getNativeModule(RNMMKVModule.class).installLib(jsContext,
        reactApplicationContext.getFilesDir().getAbsolutePath() + "/mmkv");

    return Collections.emptyList();
  }
}

Is there any way that this can be shipped with the package?

@david-gettins  Interesting. I got same issue and open this PR #89

Brilliant, it's not just me 😄.

@david-gettins ans @r0b0t3d  Yes I know the docs are incorrect. I was about to fix it but thank you for sending in PR @r0b0t3d. I will merge it. The next version is ready to be shipped already so i will publish today.
I think we have to link it manually for now. I will add it to the file as mentioned in the docs and comment it out as everything else is commented out.

closing since this is resolved.


[PLAT-71332] Extract the metric name from any expensive query

How to test
$ go test -run '.*ExtractMetricName.*' github.com/m3db/m3/src/query/api/v1/handler/prom
ok      github.com/m3db/m3/src/query/api/v1/handler/prom        (cached)

Why?
The current query label of the metric for expensive queries are unreadable because M3 sanitize the label strings.
See the picture below.

LGTM since it only affects large queries.
I think the sanitize is done by @davidyuanfs in this method truncateQuery.

LGTM since it only affects large queries.
I think the sanitize is done by @davidyuanfs in this method truncateQuery.

Metric label sanitization is done by uber-go/tally. Otherwise, I could have modified the sanitization function. truncateQuery is a trivial function.
https://src.dev.databricks.com/databricks/m3/-/blob/src/query/api/v1/handler/prom/read.go?L252


[Blogpost] What is ERC6551 - Token Bound Accounts (TBA) ?

Related

#6419

date
18/3/2023
Text
h1
What is ERC6551 - Token Bound Accounts (TBA) ?
subtitle
Understand ERC6551 which redefines how ERC-721 tokens interact with the Ethereum blockchain by giving every non-fungible token its very own smart contract account.
h2
What is ERC6551?
p
EIP6551 is a proposal made to extend the functionality of every ERC-721 token by attaching them to specific smart contract accounts, effectively providing on-chain identity to these tokens. Each non-fungible token gets a unique, global identifier which gives it a distinct identity.
h2
How does ERC6551 operate?
EIP6551 operates by creating uniquely, deterministically addressed smart contract accounts for each ERC-721 token via a permissionless registry. It maintains complete compatibility with existing ERC-721 token contracts, therefore not requiring any changes to previously deployed ERC-721 contracts. Control over each token-bound account is given to the owner of the ERC-721 token, enabling the owner to initiate on-chain actions on behalf of their token.
h2
Unique features of ERC6551
The unique feature of ERC6551 lies in its ability to turn each ERC-721 token into a standalone entity capable of owning assets and interacting with applications on the Ethereum blockchain. This expands the functionality of non-fungible tokens, allowing them to accumulate assets and record transaction history.
h2
Conclusion
ERC6551 is a breakthrough in enhancing the capabilities of non-fungible tokens. Through ERC6551, ERC-721 tokens not only represent a unique digital asset but can also interact independently with the blockchain and other on-chain applications. This opens a plethora of possibilities in the world of non-fungible tokens on the KodaDot platform.

Once done, submit

https://github.com/kodadot/ops-internal/issues/590

✅ - https://beta.kodadot.xyz/blog/what-is-erc6551
X - https://kodadot.xyz/blog/what-is-erc6551

any idea why I'm getting ERR_INVALID_RESPONSE

Ok is unrelated to this

https://github.com/kodadot/nft-gallery/issues/6470

any idea why I'm getting ERR_INVALID_RESPONSE

aw, maybe down on cloudflare pages side?

at least I've submitted beta.kodadot for indexing

in case the indexing not works. we already decided to noindex the canary/beta. ref: https://github.com/kodadot/nft-gallery/pull/6333#issuecomment-1607656048

I see, yeah requesting for
https://kodadot.xyz/blog/what-is-erc6551


[GEARPUMP-354] Fix the tracking url resolution of a proxied Applicati…

…on Master
Be sure to do all of the following to help us incorporate your contribution
quickly and easily:

[ ] Make sure the commit message is formatted like:
[GEARPUMP-<Jira issue #>] Meaningful description of pull request
[ ] Make sure tests pass via sbt clean test.
[ ] Make sure old documentation affected by the pull request has been updated and new documentation added for new functionality.

Codecov Report

Merging #230 into master will increase coverage by 1.17%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master     #230      +/-   ##
==========================================
+ Coverage   69.01%   70.19%   +1.17%
==========================================
  Files         191      191
  Lines        6119     6119
  Branches      358      358
==========================================
+ Hits         4223     4295      +72
+ Misses       1896     1824      -72

R: @karol-brejna-i @huafengw

LGTM +1


LineChart: adjustToWidth not working

The adjustToWidth property doesn't seem to be working.
This code:
const data = [{value: 15}, {value: 30}, {value: 26}, {value: 40}];

  return (
    <View
      style={{
        backgroundColor: 'blue',
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        borderTopWidth: 1,
      }}>
      <LineChart data={data} backgroundColor={'red'} adjustToWidth />
    </View>
  );

results in this:

why is there space on the right side of the chart (inside the red area)
why is the chart not across the whole width of the parent (blue area)

I've seen the same issue. It seems to leave a bit of space on the right and doesn't take up the whole width of the parent

Hi @1mike12 @markkobbert
Thanks for pointing this out.
It has been fixed in version 1.3.7🎉


Include changed items in notifications and logs

Is there an existing issue for this?

[X] I have searched the existing issues

Feature Description
Notification:
### instance `radarr`

Information:

- Custom Formats Synced: 1

Server log:
[INF] Updated 1 Existing Custom Formats
[INF] Skipped 142 Custom Formats that did not change
[INF] Total of 1 custom formats were synced

There's no easy way to tell what actually changed - please log the details (at least name and score) for each changed CF.

Notifications aren't intended to provide that level of detail. Review the log files for more specifics.

Review the log files for more specifics

I included a log snippet above, it doesn't output which CFs changed.

Review the log files for more specifics

I included a log snippet above, it doesn't output which CFs changed.

You are looking at console logs, not file logs. The information you want is logged with debug severity, which is only available in the file logs by default. If you also want them in the console logs, you need to run with the --debug option.


Revert upstream changes triggering LB panic

This reverts the following upstream PRs:
https://github.com/hashicorp/terraform-provider-aws/pull/35671
https://github.com/hashicorp/terraform-provider-aws/pull/35678
as a quick fix to mitigate https://github.com/pulumi/pulumi-aws/issues/3421 until we root-cause it.
Details on my findings so far: https://github.com/pulumi/pulumi-aws/issues/3421#issuecomment-1943569655
It looks to me like the issue originates somewhere in our handling of nulls/empty in the bridge, so seems unlikely to get fixed today.
It also adds a test for LB listeners. I've verified that the test triggers the panic without the patches and that the patches resolve it.

Does it still panic if this resource is opted into PlanResourceChange handling in here:
		shimv2.WithPlanResourceChange(func(s string) bool {
			switch s {
			case "aws_ssm_document", "aws_wafv2_web_acl":
				return true
			default:
				return false
			}
		}))

Does it still panic if this resource is opted into PlanResourceChange handling in here:

Unfortunately that doesn't seem to fix it. I still get the panic with the following change there:
shimv2.WithPlanResourceChange(func(s string) bool {
	switch s {
	case "aws_ssm_document", "aws_wafv2_web_acl", "aws_alb_listener", "aws_lb_listener":
		return true
	default:
		return false
	}
}))

I've opened https://github.com/pulumi/pulumi-aws/issues/3427 to continue the investigation


[3.0] Owned types are null when Select, Skip and Take are used with Sqlite

Hello there, I've found an eerie behavior with EFCore 3.0 and Sqlite. Owned types are null when I use Select, Skip and Take because their fields do not appear in the SQL query. Here's a repro project.
https://github.com/BrightSoul/repro-skip-take-issue
Here's the gist of it: a simple entity having a CurrentPrice property of type Money.
    public class Course
    {
        public int Id { get; private set; }
        public string Title { get; private set; }
        public Money CurrentPrice { get; private set; }
    }

And here's Money, very simple.
    public class Money
    {
        public decimal Amount { get; set; }
        public Currency Currency { get; set; } //Currency is just an enum type

        public override string ToString()
        {
            return $"{Currency} {Amount:#.00}";
        }
    }

Here's the mapping for Course. As you can see, Money is an owned type.
modelBuilder.Entity<Course>(entity =>
            {
                entity.OwnsOne(course => course.CurrentPrice, builder => {
                    builder.Property(money => money.Currency).HasConversion<string>();
                });
            });

Now I run this LINQ query. As you can see there's a Select invoking a static mapping method (because reasons) and Skip and Take are used.
var courseList1 = await dbContext.Courses
                    .Select(course => CourseViewModel.FromEntity(course))
                    .Skip(0).Take(3)
                    .AsNoTracking()
                    .ToListAsync();

Here's the issue: all items in courseList1 have a null CurrentPrice property. I had no problem with ASP.NET Core 2.2.
If, instead, I omit Skip and Take, everything is working fine. All of the items in courseList2 have a proper value for the CurrentPrice property.
var courseList2 = await dbContext.Courses
                    .Select(course => CourseViewModel.FromEntity(course))
                    //.Skip(0).Take(3) //Omit this
                    .AsNoTracking()
                    .ToListAsync();

Again, here's the repro. It's a very simple ASP.NET Core application.
https://github.com/BrightSoul/repro-skip-take-issue
I know I should have made a Unit Test project but it's 1 AM and I'm about to fall asleep on the keyboard after trying to understand this problem for 3 hours. Sorry.
Would you please take a look?
Thanks,
Moreno

@smitpatel Is this a duplicate of #18672 If so, maybe we should prepare a patch.

Both of them happens in same area but this has different root cause. Above case specifically is about doing client projection in non-last operation. Any operation which does pushdown can cause not loading the properties.
#18672, we still have entity references just in a form which we did not recognize. Above case, we don't even have entity left after client projection. Nav expansion moves skip/take before select, and that is where things are going wrong. If we don't move then above query is non-translatable as is.
The fix would be somewhat non-trivial because we are going to change what we have been doing in processing skip/take in nav expansion since we have moved to new pipeline. It can make some queries which are getting translated right now fail.

Note from triage: Putting this in 5.0 for the same reason as #18672


Add GZip Support to JsonSerializer

We have been using the JsonSerializer with Redis Backplate for a little while now.
Json tends to be very verbatim in some situations and we had multiple issues where structures would take as little as 500k in MemoryCache and up to 10m in Redis.
based on this thread: http://stackoverflow.com/questions/6556631/compressing-strings-before-putting-them-in-redis-does-it-make-sense
we ended up forking the JsonSerializer, creating a custom GzJsonSerializer using the System.IO.Compression.GZStream for those specific situations.
The Redis structures are now closer to the expected 500k.
Since we use a distributed redis server. Compression Cost is way less than Bandwidth, speeding up everything at the same time.
--
A GzJsonSerializer overwrite or a configurable compression flag could be a nice improvement.

Sounds interesting
Feel free to submit a PR which adds your implementation to the Json Serializer package.

That's now merged. Thanks again!
Might take me some time to get all the builds running again and get 0.9 released though ;)


Commands that delegate to controllers incorrectly raise NotImplementedError when called

Hey @dblock! Been loving this library for building some internal tooling at my company, but I've encountered an issue recently when trying to use the MVC architecture of SlackRubyBot.
My original use case was to create a controller to do CRUD on a server to facilitate adding and viewing "interestings" that people had learned at work throughout the week.
I structured it similar to a Rails MVC architecture:
interestings add
interestings list
These were defined in a controller called the InterestingsController that implemented the following methods:
def interestings_add
def interestings_list
It was important that it be scoped to interestings as I'm also intending to work on a retro helper allowing users to submit good, bad, and meh items in advance of their team retrospectives. That would likely have a similar retro add, retro list, etc... interface and so I needed to scope add, list commands accordingly.
I started having problems where if a user typed interestings followed by any non command text, the slack bot would crash and not recover. This would also happen if the user happened to just type interestings.
I ended up just defining an interestings method to return help about the controller methods. It will trigger on any message to the bot starting with interestings that is not an existing command (e.g. interestings list).
Another case that I encountered was where the controller was named to encompass its actions (i.e. group all the commands related to viewing information about, announcing deploys, etc.. for our various production applications under an AppsController). In that case, I don't really want to define an apps command as the interface isn't @bot apps do something, I would much rather just have it send back the standard Sorry @user, I don't understand that command!.
Anyway, I wanted to report this to see if I was misunderstanding or setting up my controllers/views/models incorrectly.
I created a sample repo to reproduce this issue here. It implements a greetings controller with the same issue.
References:

Logs

Thanks for looking into it @chuckremes! Been busy but I'll try to make some progress on this issue this weekend.

@jasonwc Sounds fine. Again, if you want to bounce some ideas around or need a hand with figuring out the right approach, ping me here.


Correction for raw affiliation Haihe Laboratory of Sustainable Chemical Transformations, Tianjin 300192, People’s Republic of China

Correction needed for raw affiliation Haihe Laboratory of Sustainable Chemical Transformations, Tianjin 300192, People’s Republic of China
raw_affiliation_name: Haihe Laboratory of Sustainable Chemical Transformations, Tianjin 300192, People’s Republic of China
new_rors:
previous_rors: 03q99v794
works_examples: W4404114358
contact: 3f5c7c3d6f69da578cadb237e777c4fa:76086d8512191eb60befa5b13957 @ univ-lille.fr

This issue was accepted and ingested by the OpenAlex team on 2024-12-19. The new affiliations should be visible within the next 7 days.


chore: upgrade and fix

xcode 11.6
iOS 13.6
gradle 6.1.1
kotlin 1.3.50
various packages

Updates to get the project to run on the latest Flutter, iOS and Android (as of Aug 15 20).

The PR also includes a couple fixes to Provider bugs which revealed themselves after package updates

@cklanac Thank you for contributing.
I just merged #1, which was tracking all package updates as they were being added.
Your PR has merge conflicts as a result. But also I noticed that it disables some of the Facebook sign-in functionality. I'm not sure I want to merge that subset of changes.
Would you be able to simplify this PR and reduce the scope to the Android updates (gradle, kotlin)?
Also FYI, I actively maintain this other project, which is already udpated to all the latest FlutterFire changes:

https://github.com/bizz84/starter_architecture_flutter_firebase