Minifier drops console.log incorrectly in some cases

Describe the bug
I found this while working on https://github.com/swc-project/swc/pull/8172
Input code
const someFn = (xx, x, y) => [x, y];

const getArray = () => [1, 2, 3];

const goodFunction = async () => {
    const rb = await getArray();
    const rc = await getArray();
    console.log(someFn(1, rb, rc));
}

const badFunction = async () => {
    console.log(someFn(1, await getArray(), await getArray()))
}

goodFunction();
badFunction();

Config
{
    "jsc": {
        "parser": {
            "syntax": "typescript",
            "decorators": true,
            "tsx": false
        },
        "transform": {
            "legacyDecorator": true
        },
        "target": "es2016",
        "minify": {
            "compress": true,
            "mangle": true
        },
        "loose": false,
        "externalHelpers": false
    },
    "minify": true,
    "module": {
        "type": "commonjs"
    },
    "isModule": true
}

Playground link (or link to the minimal reproduction)
https://play.swc.rs/?version=1.3.94-nightly-20231016.1&code=H4sIAAAAAAAAA0vOzysuUSjOz011y1OwVdCoqNBRAKJKTQVbO4VoECvWmosrGawqPbXEsagosRKkDiJvqKNgpKNgjKQkPz%2FFrTQvuSQzH2RcYnFlXjJUcTWXAhBAlBUlgSTLEzMRhmpoWiMrSMarID8nVS8nP10D4m4NoDOKkoA4WROophbmlqREwk7BNAjdUkwRTU2QHcg%2BBTkNyTYgFwDKZ1XWVwEAAA%3D%3D&config=H4sIAAAAAAAAA31RvQ6CQAzefQpys4M6ODg7uPgQzVHIkftLWxII4d2FCwiIelu%2Ftt9Prztkw1MVa3XLulQkIAIx0gZLOLdeoBlwJW1E1mSiqON2JkcdCCQQD3NCNX70hUeCAizju9EvM0oIPBeB3F7eYgm6vc8CE%2F93FqASZXSKfDmdryuXyhlvinZPr4OLhPzDtwNfWvynaUNgnLOtcGwEyYN9oI2YzrKkn%2FYXT4uyciGvk%2BLqZ8a7j6kGry74itWGxfBz3kku%2BxdGw%2FMD4QEAAA%3D%3D
SWC Info output
No response
Expected behavior
It should not remove calls with side effect
Actual behavior
No response
Version
1.3.94-nightly-20231016.1
Additional context
No response

Investigation

   INFO  compress: Running expression simplifier (pass = 1)
    at crates/swc_ecma_minifier/src/compress/mod.rs:187
    in optimize with pass: 1
    in compress ast
    in minify
    in swc::Compiler::apply_transforms
    in process_js_with_custom_pass
    in process_js_file with fm: SourceFile(/Users/kdy1/projects/s/issues/crates/swc/tests/fixture/issues-8xxx/8155/input/1.js)

   INFO  compress: expr_simplifier took 127.209µs (pass = 1)
    at crates/swc_ecma_minifier/src/compress/mod.rs:209
    in optimize with pass: 1
    in compress ast
    in minify
    in swc::Compiler::apply_transforms
    in process_js_with_custom_pass
    in process_js_file with fm: SourceFile(/Users/kdy1/projects/s/issues/crates/swc/tests/fixture/issues-8xxx/8155/input/1.js)

  DEBUG  ignore_return_value: Dropping a pure call, kind: "change"
    at crates/swc_ecma_minifier/src/compress/pure/misc.rs:884
    in visit_mut_fn_decl with id: asyncGeneratorStep#20
    in apply pure optimizer
    in optimize with pass: 1
    in compress ast
    in minify
    in swc::Compiler::apply_transforms
    in process_js_with_custom_pass
    in process_js_file with fm: SourceFile(/Users/kdy1/projects/s/issues/crates/swc/tests/fixture/issues-8xxx/8155/input/1.js)

  DEBUG  Dropping an identifier as it's declared, kind: "change"
    at crates/swc_ecma_minifier/src/compress/pure/misc.rs:971
    in visit_mut_fn_decl with id: asyncGeneratorStep#20
    in apply pure optimizer
    in optimize with pass: 1
    in compress ast
    in minify
    in swc::Compiler::apply_transforms
    in process_js_with_custom_pass
    in process_js_file with fm: SourceFile(/Users/kdy1/projects/s/issues/crates/swc/tests/fixture/issues-8xxx/8155/input/1.js)

  DEBUG  ignore_return_value: Dropping a pure call, kind: "change"
    at crates/swc_ecma_minifier/src/compress/pure/misc.rs:884
    in visit_mut_fn_decl with id: asyncGeneratorStep#20
    in apply pure optimizer
    in optimize with pass: 1
    in compress ast
    in minify
    in swc::Compiler::apply_transforms
    in process_js_with_custom_pass
    in process_js_file with fm: SourceFile(/Users/kdy1/projects/s/issues/crates/swc/tests/fixture/issues-8xxx/8155/input/1.js)

  DEBUG  Dropping an identifier as it's declared, kind: "change"
    at crates/swc_ecma_minifier/src/compress/pure/misc.rs:971
    in visit_mut_fn_decl with id: asyncGeneratorStep#20
    in apply pure optimizer
    in optimize with pass: 1
    in compress ast
    in minify
    in swc::Compiler::apply_transforms
    in process_js_with_custom_pass
    in process_js_file with fm: SourceFile(/Users/kdy1/projects/s/issues/crates/swc/tests/fixture/issues-8xxx/8155/input/1.js)

  DEBUG  ignore_return_value: Dropping a pure call, kind: "change"
    at crates/swc_ecma_minifier/src/compress/pure/misc.rs:884
    in visit_mut_fn_decl with id: asyncGeneratorStep#20
    in apply pure optimizer
    in optimize with pass: 1
    in compress ast
    in minify
    in swc::Compiler::apply_transforms
    in process_js_with_custom_pass
    in process_js_file with fm: SourceFile(/Users/kdy1/projects/s/issues/crates/swc/tests/fixture/issues-8xxx/8155/input/1.js)

  DEBUG  Dropping an identifier as it's declared, kind: "change"
    at crates/swc_ecma_minifier/src/compress/pure/misc.rs:971
    in visit_mut_fn_decl with id: asyncGeneratorStep#20
    in apply pure optimizer
    in optimize with pass: 1
    in compress ast
    in minify
    in swc::Compiler::apply_transforms
    in process_js_with_custom_pass
    in process_js_file with fm: SourceFile(/Users/kdy1/projects/s/issues/crates/swc/tests/fixture/issues-8xxx/8155/input/1.js)

  DEBUG  Dropping an identifier as it's declared, kind: "change"
    at crates/swc_ecma_minifier/src/compress/pure/misc.rs:971
    in visit_mut_fn_decl with id: asyncGeneratorStep#20
    in apply pure optimizer
    in optimize with pass: 1
    in compress ast
    in minify
    in swc::Compiler::apply_transforms
    in process_js_with_custom_pass
    in process_js_file with fm: SourceFile(/Users/kdy1/projects/s/issues/crates/swc/tests/fixture/issues-8xxx/8155/input/1.js)

  DEBUG  ignore_return_value: Dropping a pure call, kind: "change"
    at crates/swc_ecma_minifier/src/compress/pure/misc.rs:884
    in visit_mut_fn_decl with id: _next#28
    in visit_mut_fn_decl with id: _async_to_generator#20
    in apply pure optimizer
    in optimize with pass: 1
    in compress ast
    in minify
    in swc::Compiler::apply_transforms
    in process_js_with_custom_pass
    in process_js_file with fm: SourceFile(/Users/kdy1/projects/s/issues/crates/swc/tests/fixture/issues-8xxx/8155/input/1.js)

  DEBUG  Dropping an identifier as it's declared, kind: "change"
    at crates/swc_ecma_minifier/src/compress/pure/misc.rs:971
    in visit_mut_fn_decl with id: _next#28
    in visit_mut_fn_decl with id: _async_to_generator#20
    in apply pure optimizer
    in optimize with pass: 1
    in compress ast
    in minify
    in swc::Compiler::apply_transforms
    in process_js_with_custom_pass
    in process_js_file with fm: SourceFile(/Users/kdy1/projects/s/issues/crates/swc/tests/fixture/issues-8xxx/8155/input/1.js)

  DEBUG  Dropping an identifier as it's declared, kind: "change"
    at crates/swc_ecma_minifier/src/compress/pure/misc.rs:971
    in visit_mut_fn_decl with id: _next#28
    in visit_mut_fn_decl with id: _async_to_generator#20
    in apply pure optimizer
    in optimize with pass: 1
    in compress ast
    in minify
    in swc::Compiler::apply_transforms
    in process_js_with_custom_pass
    in process_js_file with fm: SourceFile(/Users/kdy1/projects/s/issues/crates/swc/tests/fixture/issues-8xxx/8155/input/1.js)

  DEBUG  Dropping an identifier as it's declared, kind: "change"
    at crates/swc_ecma_minifier/src/compress/pure/misc.rs:971
    in visit_mut_fn_decl with id: _next#28
    in visit_mut_fn_decl with id: _async_to_generator#20
    in apply pure optimizer
    in optimize with pass: 1
    in compress ast
    in minify
    in swc::Compiler::apply_transforms
    in process_js_with_custom_pass
    in process_js_file with fm: SourceFile(/Users/kdy1/projects/s/issues/crates/swc/tests/fixture/issues-8xxx/8155/input/1.js)

  DEBUG  Dropping an identifier as it's declared, kind: "change"
    at crates/swc_ecma_minifier/src/compress/pure/misc.rs:971
    in visit_mut_fn_decl with id: _next#28
    in visit_mut_fn_decl with id: _async_to_generator#20
    in apply pure optimizer
    in optimize with pass: 1
    in compress ast
    in minify
    in swc::Compiler::apply_transforms
    in process_js_with_custom_pass
    in process_js_file with fm: SourceFile(/Users/kdy1/projects/s/issues/crates/swc/tests/fixture/issues-8xxx/8155/input/1.js)

  DEBUG  Dropping an identifier as it's declared, kind: "change"
    at crates/swc_ecma_minifier/src/compress/pure/misc.rs:971
    in visit_mut_fn_decl with id: _next#28
    in visit_mut_fn_decl with id: _async_to_generator#20
    in apply pure optimizer
    in optimize with pass: 1
    in compress ast
    in minify
    in swc::Compiler::apply_transforms
    in process_js_with_custom_pass
    in process_js_file with fm: SourceFile(/Users/kdy1/projects/s/issues/crates/swc/tests/fixture/issues-8xxx/8155/input/1.js)

  DEBUG  Dropping an identifier as it's declared, kind: "change"
    at crates/swc_ecma_minifier/src/compress/pure/misc.rs:971
    in visit_mut_fn_decl with id: _next#28
    in visit_mut_fn_decl with id: _async_to_generator#20
    in apply pure optimizer
    in optimize with pass: 1
    in compress ast
    in minify
    in swc::Compiler::apply_transforms
    in process_js_with_custom_pass
    in process_js_file with fm: SourceFile(/Users/kdy1/projects/s/issues/crates/swc/tests/fixture/issues-8xxx/8155/input/1.js)

  DEBUG  ignore_return_value: Dropping a pure call, kind: "change"
    at crates/swc_ecma_minifier/src/compress/pure/misc.rs:884
    in visit_mut_fn_decl with id: _throw#28
    in visit_mut_fn_decl with id: _async_to_generator#20
    in apply pure optimizer
    in optimize with pass: 1
    in compress ast
    in minify
    in swc::Compiler::apply_transforms
    in process_js_with_custom_pass
    in process_js_file with fm: SourceFile(/Users/kdy1/projects/s/issues/crates/swc/tests/fixture/issues-8xxx/8155/input/1.js)

  DEBUG  Dropping an identifier as it's declared, kind: "change"
    at crates/swc_ecma_minifier/src/compress/pure/misc.rs:971
    in visit_mut_fn_decl with id: _throw#28
    in visit_mut_fn_decl with id: _async_to_generator#20
    in apply pure optimizer
    in optimize with pass: 1
    in compress ast
    in minify
    in swc::Compiler::apply_transforms
    in process_js_with_custom_pass
    in process_js_file with fm: SourceFile(/Users/kdy1/projects/s/issues/crates/swc/tests/fixture/issues-8xxx/8155/input/1.js)

  DEBUG  Dropping an identifier as it's declared, kind: "change"
    at crates/swc_ecma_minifier/src/compress/pure/misc.rs:971
    in visit_mut_fn_decl with id: _throw#28
    in visit_mut_fn_decl with id: _async_to_generator#20
    in apply pure optimizer
    in optimize with pass: 1
    in compress ast
    in minify
    in swc::Compiler::apply_transforms
    in process_js_with_custom_pass
    in process_js_file with fm: SourceFile(/Users/kdy1/projects/s/issues/crates/swc/tests/fixture/issues-8xxx/8155/input/1.js)

  DEBUG  Dropping an identifier as it's declared, kind: "change"
    at crates/swc_ecma_minifier/src/compress/pure/misc.rs:971
    in visit_mut_fn_decl with id: _throw#28
    in visit_mut_fn_decl with id: _async_to_generator#20
    in apply pure optimizer
    in optimize with pass: 1
    in compress ast
    in minify
    in swc::Compiler::apply_transforms
    in process_js_with_custom_pass
    in process_js_file with fm: SourceFile(/Users/kdy1/projects/s/issues/crates/swc/tests/fixture/issues-8xxx/8155/input/1.js)

  DEBUG  Dropping an identifier as it's declared, kind: "change"
    at crates/swc_ecma_minifier/src/compress/pure/misc.rs:971
    in visit_mut_fn_decl with id: _throw#28
    in visit_mut_fn_decl with id: _async_to_generator#20
    in apply pure optimizer
    in optimize with pass: 1
    in compress ast
    in minify
    in swc::Compiler::apply_transforms
    in process_js_with_custom_pass
    in process_js_file with fm: SourceFile(/Users/kdy1/projects/s/issues/crates/swc/tests/fixture/issues-8xxx/8155/input/1.js)

  DEBUG  Dropping an identifier as it's declared, kind: "change"
    at crates/swc_ecma_minifier/src/compress/pure/misc.rs:971
    in visit_mut_fn_decl with id: _throw#28
    in visit_mut_fn_decl with id: _async_to_generator#20
    in apply pure optimizer
    in optimize with pass: 1
    in compress ast
    in minify
    in swc::Compiler::apply_transforms
    in process_js_with_custom_pass
    in process_js_file with fm: SourceFile(/Users/kdy1/projects/s/issues/crates/swc/tests/fixture/issues-8xxx/8155/input/1.js)

  DEBUG  Dropping an identifier as it's declared, kind: "change"
    at crates/swc_ecma_minifier/src/compress/pure/misc.rs:971
    in visit_mut_fn_decl with id: _throw#28
    in visit_mut_fn_decl with id: _async_to_generator#20
    in apply pure optimizer
    in optimize with pass: 1
    in compress ast
    in minify
    in swc::Compiler::apply_transforms
    in process_js_with_custom_pass
    in process_js_file with fm: SourceFile(/Users/kdy1/projects/s/issues/crates/swc/tests/fixture/issues-8xxx/8155/input/1.js)

  DEBUG  ignore_return_value: Dropping a pure call, kind: "change"
    at crates/swc_ecma_minifier/src/compress/pure/misc.rs:884
    in visit_mut_fn_decl with id: _async_to_generator#20
    in apply pure optimizer
    in optimize with pass: 1
    in compress ast
    in minify
    in swc::Compiler::apply_transforms
    in process_js_with_custom_pass
    in process_js_file with fm: SourceFile(/Users/kdy1/projects/s/issues/crates/swc/tests/fixture/issues-8xxx/8155/input/1.js)

  DEBUG  Optimizing expr as false (in bool context), kind: "change"
    at crates/swc_ecma_minifier/src/compress/pure/bools.rs:434
    in visit_mut_fn_decl with id: _async_to_generator#20
    in apply pure optimizer
    in optimize with pass: 1
    in compress ast
    in minify
    in swc::Compiler::apply_transforms
    in process_js_with_custom_pass
    in process_js_file with fm: SourceFile(/Users/kdy1/projects/s/issues/crates/swc/tests/fixture/issues-8xxx/8155/input/1.js)

  DEBUG  Dropping an unary expression, kind: "change"
    at crates/swc_ecma_minifier/src/compress/pure/misc.rs:995
    in visit_mut_fn_decl with id: _async_to_generator#20
    in apply pure optimizer
    in optimize with pass: 1
    in compress ast
    in minify
    in swc::Compiler::apply_transforms
    in process_js_with_custom_pass
    in process_js_file with fm: SourceFile(/Users/kdy1/projects/s/issues/crates/swc/tests/fixture/issues-8xxx/8155/input/1.js)

  DEBUG  ===== Before pure =====
"use strict";
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
    try {
        var info = gen[key](arg);
        var value = info.value;
    } catch (error) {
        reject(error);
        return;
    }
    if (info.done) {
        resolve(value);
    } else {
        Promise.resolve(value).then(_next, _throw);
    }
}
function _async_to_generator(fn) {
    return function() {
        var self = this, args = arguments;
        return new Promise(function(resolve, reject) {
            var gen = fn.apply(self, args);
            function _next(value) {
                asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
            }
            function _throw(err) {
                asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
            }
            _next(undefined);
        });
    };
}
const someFn = (xx, x, y)=>[
        x,
        y
    ];
const getArray = ()=>[
        1,
        2,
        3
    ];
const goodFunction = function() {
    var _ref = _async_to_generator(function*() {
        const rb = yield getArray();
        const rc = yield getArray();
        console.log(someFn(1, rb, rc));
    });
    return function goodFunction() {
        return _ref.apply(this, arguments);
    };
}();
const badFunction = function() {
    var _ref = _async_to_generator(function*() {
        console.log(someFn(1, (yield getArray()), (yield getArray())));
    });
    return function badFunction() {
        return _ref.apply(this, arguments);
    };
}();
goodFunction();
badFunction();

===== After pure =====
"use strict";
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
    try {
        var info = gen[key](arg);
        var value = info.value;
    } catch (error) {
        return;
    }
    if (info.done) {} else {}
}
function _async_to_generator(fn) {
    return function() {
        var self = this, args = arguments;
        return new Promise(function(resolve, reject) {
            var gen = fn.apply(self, args);
            function _next(value) {}
            function _throw(err) {}
        });
    };
}
const someFn = (xx, x, y)=>[
        x,
        y
    ];
const getArray = ()=>[
        1,
        2,
        3
    ];
const goodFunction = function() {
    var _ref = _async_to_generator(function*() {
        const rb = yield getArray();
        const rc = yield getArray();
        console.log(someFn(1, rb, rc));
    });
    return function goodFunction() {
        return _ref.apply(this, arguments);
    };
}();
const badFunction = function() {
    var _ref = _async_to_generator(function*() {
        console.log(someFn(1, (yield getArray()), (yield getArray())));
    });
    return function badFunction() {
        return _ref.apply(this, arguments);
    };
}();
goodFunction();
badFunction();


New GCP Pricing for External IPs

First off thanks for the amazing guide!
I've been using this for my phone and laptop for the past few months and it has been working flawlessly.
This morning I've received an email from GCP saying that the pricing for External IPs is going to cost going forwards from January 2020 (however people with current External IPs will have a 3-month discounted rate, so really until April 2020):

How will this affect the VM?
With the costs they've mentioned it looks like it will begin to cost about $2.688p/m (not that it is a huge amount, I would happily pay considering the advantages of remote ad blocking!)

https://cloud.google.com/free/docs/gcp-free-tier#always-free-usage-limits

Your Always Free f1-micro instance limit is by time, not by instance. Each month, eligible use of all of your f1-micro instances and associated external IP addresses are free until you have used a number of hours equal to the total hours in the current month. Usage calculations are combined across the supported regions.

According to archive.org, the page was changed on Aug 9 to include the bolded wording. 🤞

Another update on Sept 18:

Note: Starting January 1st, 2020, GCP will charge for VM instance external IP addresses. However, under the Free Tier, in-use external IP addresses will be free until you have used a number of hours equal to the total hours in the current month. Free Tier for in-use external IP addresses apply to all instance types (not just f1.micro instances).

This is great news; it means the public IP will remain free, for free tier usage, going forward.

how much for extra engress every GB?

Egress pricing can be found here: https://cloud.google.com/vpc/network-pricing
IP on F1 Micro instance is still free: https://cloud.google.com/free/docs/gcp-free-tier


JSON string as secret

Hi there, thanks for your awesome project! I'm trying to implement it to store a complicated, "flat" JSON string:
ghs secret-apply -p my_profile -r my_repo -s MY_SECRET_KEY -v {"foo": "bar", ...}

The "flat" JSON string is created like this: jq --compact-output '.' file.json
When pasting my JSON manually in the repo settings, my workflows run without any issues. However, when creating the secret with ghs, the workflow fails due to jq complaining that the JSON is malformed:
parse error: Invalid numeric literal at line 1, column 19

It's hard to know what's happening, since I obviously can't echo the secret and check the logs if the formatting is changed somewhere (maybe the quotes are urlencoded? maybe some weird whitespace issue?)...
Do you have an idea what I can try to find out what's happening? Many thanks!

Thank you for your feedback!
Have you tried surrounding the value with single quotes ? Like this - -v '{ ... }'
I haven't tested it but it might work, and if it doesn't I'll add support for JSON objects

@visini - after doing some tests, it seems like it's related to GitHub Actions and jq.
      - name: JSON secret
        env:
          ENV_TEST_JSON: ${{ secrets['TEST_JSON'] }}
        run: |
           # jq --version # 1.5
           # echo '${{ secrets['TEST_JSON'] }}' | jq
           # echo $ENV_TEST_JSON | jq

           curl -L -o jq https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64
           chmod +x jq
           sudo mv jq /usr/local/bin
           jq --version # 1.6
           # echo '${{ secrets['TEST_JSON'] }}' | jq  # parse error: Invalid literal at line 1, column 6
           echo $ENV_TEST_JSON | jq                       # works
           echo "$ENV_TEST_JSON" | jq                    # works
           echo '$ENV_TEST_JSON' | jq                  # doesn't work

Thank you very much for investigating, that worked perfectly! I've been experimenting with an alternative solution (encrypted json file on S3, and retrieval with aws s3 cp). I will do some more thinking to decide whether ghs or S3 is the best option for my use case. Closing this issue now...

@visini glad to hear that it worked.
It's a bit off-topic, but about ghs and S3 - it really depends on your needs, I don't see any reason to involve S3 in this process, it's not meant to be a secret store, but more of an object store.
I recommend that you try using AWS Systems Manager Parameter Store (not Secrets Manager), since it's a very cheap solution which supports versioning, API calls, etc.
Where do you use the JSON secrets? During build time or in the app itself?

Thanks for your thoughts. I'm currently implementing a CI/CD workflow on GitHub Actions. For configuring terraform, I need *.tfvars.json files for all separate environments. I've used both AWS Systems Manager Parameter Store and Secrets Manager in the past, but since my terraform backend is on S3 too (encrypted), I could store the configuration files in the same (project-specific) S3 bucket - seems like a clean solution. I will reflect some more on this.

@visini well, if you're using terraform with multiple (separate) environment and GitHub Actions ... Then you can see this - https://github.com/unfor19/terraform-multienv , you might find it useful.
I'm not sure if you want to keep going with this discussion, so feel free to just stop replying.
Which type of secrets do you hold in *.tfvars.json ?
P.S- I never use tfvars in CI/CD processes, exactly because of the complication that it brings with it. I use this option for local development though

Very interesting and insightful, thank you! I will look into your project. I have since streamlined provisioning of secrets for the containers using AWS ssm parameter store as you suggested (since I use ECS it seems like a good idea to inject secrets as environment variables using the provided functionality, instead of using tfvars). Cheers!


client.files_upload_v2() doesn't return thread identifier

We are using the client.files_upload() method to upload files to slack. The response of this method call contains the thread identifier of the published file in the th attribute. This allows us to publish more information regarding the published file in a thread under that graph.
Example response for the client.files_upload() method:
{
    "ok": true,
    "file": {
        ...
        "shares": {
            "private": {
                "XXXXXXXXXXX": [
                    {
                        "reply_users": [],
                        "reply_users_count": 0,
                        "reply_count": 0,
                        "ts": "XXXXXXXXXX.XXXXXX",        <--- thread id
                        "share_user_id": "XXXXXXXXXXX"
                    }
                ]
            }
        },
        ...
    }
}

The usage of the client.files_upload() method results in the following UserWarning:
UserWarning: client.files_upload() may cause some issues like timeouts for relatively large files. Our latest recommendation is to use client.files_upload_v2(), which is mostly compatible and much stabler, instead.

As such, we tried to port our application to the new endpoint client.files_upload_v2() method. The problem we face is that this method doesn't return the thread identifier in the response object. It would be nice to make the v1 method consistent with the v2 method by adding the thread identifier to the response object.
Category (place an x in each of the [ ])

[x] slack_sdk.web.WebClient (sync/async) (Web API client)
[ ] slack_sdk.webhook.WebhookClient (sync/async) (Incoming Webhook, response_url sender)
[ ] slack_sdk.models (UI component builders)
[ ] slack_sdk.oauth (OAuth Flow Utilities)
[ ] slack_sdk.socket_mode (Socket Mode client)
[ ] slack_sdk.audit_logs (Audit Logs API client)
[ ] slack_sdk.scim (SCIM API client)
[ ] slack_sdk.rtm (RTM client)
[ ] slack_sdk.signature (Request Signature Verifier)

Requirements
Please read the Contributing guidelines and Code of Conduct before creating this issue or pull request. By submitting, you are agreeing to those rules.

HI @arnaudsjs.
This seems to be a limitation of the asynchronous nature of the new multi-step file upload API endpoints.
See issue #1277 where a similar piece of information isn't immediately available.

@eddyg Thanks for helping this!
@arnaudsjs We've implemented the v2 wrapper method to minimize the gap between v1 and new way, but as Eddy mentioned, the new set of v2 API calls behaves a bit differently to resolve the server-side issues v1 approach has. What's the difference here? I mean that it's not guaranteed to return the complete shares data in it as posting a message to share files can be delayed until security scans on all the uploaded files complete.
Unfortunately, our engineering teams do not have any plans to enhance the APIs, also this SDK project does not plan to add extra code apart from calling the APIs. So, if you need shares data, please consider implementing a workaround like polling files.info with the file IDs until shares property comes up.
I hopes the replies here were helpful. If everything is clear now, would you mind closing this issue?


No Attribute Bank Angle Error

Even after the error bug fix, I still am getting the error! And I have the bank angle at 90 degrees.
The delete button for engines doesn't work,and I have engines i want to delete.

Your firing order must be incorrect. This is the only way I can reproduce this error.
About the delete button, I fixed it now.

Delete button works!
But even checking the firing order, and having bank angles won't fix my error


[JENKINS-60940] Add WorkspaceWithRepoRule and two test classes

JENKINS-60940 - Add  WorkspaceWithRepoRule as a test repository
WorkspaceWithRepoRule

This is not an abstract class, it can create a working test repository using the GitClientSampleRepoRule class.
It covers methods like initializing bare repos, cloning a particular repo, providing a local mirror repository and many more utility functions.

GitClientCloneTest

This is a parameterized test class which uses the WorkspaceWithRepoRule to create test repos and test functions.
It is a logical grouping of tests related to git_clone and timeout tests

GitClientFetchTest

This is also a parameterized test class which contains related to git_fetch

Important Note: GitSampleRepoRule has been ported from git-plugin to git-client-plugin as GitClientSampleRepoRule and a dependency for scm-api has been added in pom.xml
Checklist

[x] I have read the CONTRIBUTING doc
[x] I have referenced the Jira issue related to my changes in one or more commit messages
[x] I have added tests that verify my changes
[x] Unit tests pass locally with my changes
[ ] I have added documentation as necessary
[x] No Javadoc warnings were introduced with my changes
[x] No spotbugs warnings were introduced with my changes
[x] I have interactively tested my changes

@rishabhBudhouliya I was expecting there would be some deletions in the GitAPITestCase as a result of these tests being created.  Would you be willing to remove the tests from GitAPITestCase that are now covered in these tests?

@rishabhBudhouliya I was expecting there would be some deletions in the GitAPITestCase as a result of these tests being created. Would you be willing to remove the tests from GitAPITestCase that are now covered in these tests?

Thanks for this comprehensive review Mark! I didn't delete the test cases from GitAPITestCase because I had my doubts about this implementation being used instead of the old one.
Yes, I am willing to remove those tests from GitAPITestCase that are now covered in these tests and also, learn from your recent commits and try to re-work the exisiting test cases in accordance to JUnit 4 principles.

Thanks so much for your patience in my long delay to review the code.  More review is still needed, but I think that you can apply some of the things from my review of GitClientCloneTest to the other test.

Sure Mark! I will apply suitable changes to the other test. Do you want me follow this pattern and create other test classes as well or would we want to hold that for now?

I would love to have additional tests, though I'm more concerned about getting this pull request complete and merged before additional tests are moved.
You'll also need to balance time on this with time to create one or more project proposals for Google Summer of Code.  Since the Jenkins project has been accepted to GSoC, I believe it is now time that students should be preparing their project proposals.

That's a good point, and I agree on the need of balancing both. I know this not the place to say this, but I am thinking of writing the proposal for both, Git Repo caching on agent and Git plugin performance improvements.
Okay, so I have deleted the already ported test cases and one more thing I can do is to fix GitClientFetchTest as discussed. After these changes and your review we can hopefully merge this PR.

Thanks for the detailed commits on GitClientCloneTest, Mark!

I have used them as a reference to correct some test cases in GitClientFetchTest.
Also deleted the ported tests from GitAPITestCase

I have an observation I'd like to share here:
While creating a test using a git repo created by a "GitSampleRepoRule", does the ".git" persist after the test is over?
If not so, I can see that the local mirror(s) (cloning a remote repo into the test workspace) persist even after the test is over (though they have no git objects).
Is this normal behavior?

The intent with the local archive is that it should be usable in all the tests, while a GitSampleRepoRule is used in a single test.  The local archive is "contaminated" by not containing precisely the same history at every run across all time.  The GitSampleRepoRule starts empty and can be assembled to contain precisely the expected content.

The intent with the local archive is that it should be usable in all the tests, while a GitSampleRepoRule is used in a single test. The local archive is "contaminated" by not containing precisely the same history at every run across all time. The GitSampleRepoRule starts empty and can be assembled to contain precisely the expected content.

Okay, this makes sense. While I'm looking at writing some performance micro-benchmarks for git-clients, I'm thinking of using GitSampleRepoRule as the test repo to conduct those tests. Does that seem like a right approach to you?

Yes, that seems like the right approach to me.

Yes, that seems like the right approach to me.

Okay, great.
Yes, I wouldn't want to test the performance using the network because of the unintended variance induced by external factors.

Ready to merge once CI passes.

That's great, thank you!


Add resolutions option to Raster source

This pull request adds a resolutions option (which also exists on other Image sources) to force rendering to the specified resolutions. This allows for better results when input sources are tile sources, by setting the Raster source resolutions to the input source's tile resolutions.
I updated the shaded-relief example to make use of that. With the view's maxZoom restriction removed, and a sensible maxZoom on the input source, the shaded relief is rendered much more nicely when zoomed in.

The rendering does look way nicer.
Although, it looks like changing the sliders in the example no longer works.

Thanks @tschaub for catching the problem with the sliders. I pushed another commit, which updates the extent comparison to account for the resolution adjustment, and fixes that problem.

@ahocevar - it looks like you might not have pushed the new commit

Indeed! Pushed now.

@tschaub I added another commit, so resolutions are now picked from the first input source that has them configured. I can merge with or without that commit, just let me know.

Looks good, @ahocevar


bug

https://github.com/safudex/neologin/blob/cb71da07f6efa72405bca4f7f0e380b26c3e31d6/widget/src/fiat/index.js#L172

You've already fixed this one, right?


AWS IAM Access Denied

Steps to Reproduce

prowler aws --log-level ERROR
aws
single account

Expected behavior
Execute without access denied messages
Actual Result with Screenshots or Logs
2024-11-28 10:15:19,249 [File: backup_service.py:164] 	[Module: backup_service]	 ERROR: eu-west-2 -- ClientError[155]: An error occurred (AccessDeniedException) when calling the GetBackupSelection operation: User: arn:aws:sts::XXXXXXXXXXXX:assumed-role/ScannerRole/security_scanner is not authorized to perform: backup:GetBackupSelection on resource: arn:aws:backup:eu-west-2:XXXXXXXXXXXX:backup-plan:XXXXXXXX-2434-428d-XXXXXXXX because no identity-based policy allows the backup:GetBackupSelection action
2024-11-28 10:19:20,721 [File: glue_service.py:248] 	[Module: glue_service]	 ERROR: eu-west-1 -- AccessDeniedException[231]: An error occurred (AccessDeniedException) when calling the GetMLTransforms operation: User: arn:aws:sts::XXXXXXXXXXXX:assumed-role/ScannerRole/security_scanner is not authorized to perform: glue:GetMLTransforms because no identity-based policy allows the glue:GetMLTransforms action
https://github.com/prowler-cloud/prowler/blob/master/permissions/prowler-additions-policy.json
Does not contain nor does the ViewOnlyAccess or SecurityAduit either:-
backup:GetBackupSelection
glue:GetMLTransforms
Now I think this error is inaccurate as it doesnt show access denied in cloudtrail and the policy has backup:List
2024-11-28 10:15:19,800 [File: backup_service.py:202] 	[Module: backup_service]	 ERROR: eu-north-1 -- ClientError[190]: An error occurred (AccessDeniedException) when calling the ListRecoveryPointsByBackupVault operation: Insufficient privileges to perform this action.
I'm also seeing in Cloudtrail fms.amazonaws.com ListPolicies Access Denied error messages too but not on prowler output
How did you install Prowler?
From pip package (pip install prowler)
Environment Resource

Fargate Task

OS used

Apline Linux

Prowler version
4.6.0
Pip version
na
Context
No response

Hi @garym-krrv,
After some research, I've confirmed that what you mentioned is correct. The backup:GetBackupSelection and glue:GetMLTransforms permissions were indeed missing. I have opened #5962 to add them.
Regarding the other permissions you mentioned, such as the ListRecoveryPointsByBackupVault action, I wasn't able to replicate the issue. It seems that this is covered by the backup:List* permission in the extra policy, so there shouldn't be any issue there.
As for the FMS permission, the reason you're not seeing anything in the Prowler output is that it's an expected and handled error. You can find more information in the FMS service. It is used for the only FMS check fms_policy_compliant.
Let me know if you need further clarification!


Pre-migration verification time not communicated in document

[Enter feedback here]
G2G requires a week's worth of time for verification purposes before performing the actual move. There have been many requests from support end that have been raised unnecessarily as high severity cases due to customer expecting this to be able to be done within a day or two. This front-facing document does not indicate that and give customers unrealistic expectations. Please consult the support team on expectations on steps prior to migration and write explicitly what customers should expect.

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

ID: 029aa7d3-e3e1-f99a-3f71-e11e998cb543
Version Independent ID: 3d87af00-dcfd-697c-87df-3990a4cc8027
Content: Geo to geo migrations - Power Platform
Content Source: power-platform/admin/geo-to-geo-migrations.md
Service: power-platform
GitHub Login: @jimholtz
Microsoft Alias: jimholtz

@tangkevin88
Taking this to internal thread.


6.0 Feedback:  When a run is in a terminal state, Rerun protocol and Run a protocol should be available

Overview
When a run is in a terminal state (completed, failed or canceled), a user should be able to run a protocol the following ways:

Run a protocol button on Robot detail page
Rerun protocol from ... menu on recent runs page

right now both of those are disabled when a protocol is current and in a terminal state. These two ways should be enabled.

Current Behavior
No response
Expected Behavior
No response
Steps To Reproduce
No response
Operating system
No response
Robot setup or anything else?
No response

I think this is related to #10854 — all these features seem to be blocked by the robot thinking it's busy when it's actually done with a protocol.


cleaner Swedish localization

after review by Johan Sigfrids @johansigfrids and Camilla Sigfrids, two native Swedish-spoken persons

I'm always so excited when a new translation is being offered. Thank you!


Update triggerschedule-method-in-class-sms_client.md

Removed DCM Eval since it's no longer supported.
Summarize the change in the pull request title
Describe your change, specifically why you think it's needed.
Fixes #Issue_Number (if necessary)

@AdamGrossTX : Thanks for your contribution! The author(s) have been notified to review your proposed change.

#sign-off


CRUD Example

Do you have a quick code sample you can show that implements CRUD usage? Or really, any LOAD and UPDATE usage is fine. I'm not sure if the typical redux actions of MODEL_CREATE_REQUEST, MODEL_CREATE_SUCCESS, MODEL_CREATE_ERROR still apply when using redux-act. If so, how, and if not, well...how?

Any CRUD you would have in Redux would apply using redux-act, it's just a different syntax to create reducers and action creators, but after that, it's all the same. If you have an example of Redux CRUD, I'm fine refactoring it using redux-act to show the diff. I would have loved to do it for the official Redux CRUD demo, but so far, there is none.

Closing for now, re-open with a redux CRUD sample if you find one, I will migrate it to redux-act.


Snap (i.e. diversified) addresses

I went thru ZecWallet Lite (no longer maintained), Zingo, Nighthow, but YWallet on PC is the powerhouse, and the documentation is amazing, you are only one to let me understand how addresses are constructed.
I have issue, I wish to understand (please add to documentation for others?) how snap address is created. At first I thought it's just magic name for "give me next address" and that using keytool I could recover it, but I tried and it doesn't seem to work that way, so

How to recover snap address using KeyTool, what's the derivation path?
How YWallet is keeping track of those to let say if I generate snap address, and reset the wallet, send the funds to this address, and then use seed to add the account (fresh start) how does YWallet know tho also include snap addresses in scanning, and how far does it go on it's own? If clicked 20 times on snap address, will how it will know to scan up to 20 snap addresses, it won't! so how to tell it to scan 20th snap address. I won't use the wallet that way, just want to understand what to expect

Thank you, and great job!

Thanks for the kind words.

The derivation path is the same as the main address. All diversified addresses have the same secret key! This is why creating them does not increase synchronization time. You are free to use 1000000 snap addresses and your wallet will remain as fast as before.
YWallet does not keep track of any snap address. The scanning includes every snap address at no cost. There is only one scan done, unlike ZecWallet Lite which would require 20 scans in your example.

Makes sense! Amazing!
but how is it possible then to generate different public key from same secret key? (trying to learn something new)
thanks!

It uses a different generator point which is included in the address. See https://www.youtube.com/watch?v=ygmBUjJgCVs

Awesome work, great video. Thank you


Missing vocabulary on ASC landing pages

On its data landing pages, ASC uses vocabulary which isn't properly defined on the ACTRIS vocabulary server. For example, the landing pages use a field "experiment type", where neither the field name nor the content under are defined in the vocabulary.
The task is to go through the ASC data landing pages, collect all undefined vocabulary, and make a proposal how it could be added to the ACTRIS vocabulary.

After landing pages meeting with ASC, this have been divided into several issues:
#32
#33
#34
Open question:
ASC have three different databases (DASCS, LAR, LADP) with slightly different needs. The landing pages meeting mainly worked with a CESAM experiment landing page. Double check if there are any more vocabulary needs for the other types of data (especially from product information, facility information and experimental information).

From meeting 1. Dec 2023 on ASC vocabulary:
Conclusions on issues #32, #33, #34. Markus/Benedicte will include it in the vocabulary.
New issues #37, #38 , #39 that requires more input from ASC group. (lists of elements in their databases)
All databases (DASC, LAR, LADP) should be covered now.
Furthermore, discussion on if all variables measured in chambers should be included in the vocabulary. This would be a show-stopper at this moment, and thus we will focus only on reactants for now. This issue can be discussed at a later time.


#3766 Updating to allow no limit max

This PR Updates the pagination code to allow setting the WAGTAILAPI_LIMIT_MAX to None. New tests have been added to cover this case and no existing tests were negatively affected.
Code complies with style guide to the best of my knowledge and documentation has been updated to reflect configuration options.

Thanks @jcronyn - looks good to me! Merged in d56f1069efdd444fbef2e9422ebe4e6af33cacc9.

In 2.3 this is still not working WAGTAILAPI_LIMIT_MAX gets always overridden to 20


Dashboard Token Listing: AGOLD

Discord Handle of Submitter: Fran | Superfluid
Token Symbol: AGOLD
Network: Polygon
Token Address: 0xFAc83774854237b6E31c4B051b91015e403956d3
Network Explorer Link: https://polygonscan.com/address/0xfac83774854237b6e31c4b051b91015e403956d3
Is a Super Token? true
Address of Underlying Token:  0xe06bd4f5aac8d0aa337d13ec88db6defc6eaeefe
SVG Logo Link: https://drive.google.com/file/d/1r3Hf8ME3cd3UhL1pXvivK7gFvmf8Gi_P/view?usp=sharing
Coingecko or Hardcoded Price?: Coingecko
Coingecko ID: https://www.coingecko.com/en/coins/ix-token
Harcoded Price (if Coingecko ID is unavailable):
Token HEX Color: #ffb429
Info on Listing: It's not following a naming convention.
The normal token is called $IXT, the Super Token is called $AGOLD
The normal token's logo can be found on the coingecko link above
Please close only after token has been added to resolver!

Listed: https://console.superfluid.finance/matic/supertokens/0xFAc83774854237b6E31c4B051b91015e403956d3?tab=streams
@kobuta23 pls check/approve/merge https://github.com/superfluid-finance/assets/pull/109


build and run instructions missing from README

Should be fixed with: https://github.com/SpectoLabs/hoverfly/pull/335

Nice, thanks @shyal!


Create the Preliminary set of user stories for Nucleus

Closing as wontfix. This will happen naturally as prototypes are developed, technology is decided upon, and implementation needs are determined.


Add missing label and clarity for when plugins aren't installed

This adds the "Perms Not Installed Button Text" label that was previously missing.
Furthermore, I've added separate conditionals (and necessary labels) to differentiate between not having the necessary permissions and not having a plugin isn't installed.

I'm doing some rewoking at the moment, so I'll get back to you about this one. :)

Manually merged due to WIP changes, thanks. :)


renovatebot(deps): update dependency gradle to v3.5.1

This PR contains the following updates:

Package
Type
Update
Change

gradle (source)
gradle-wrapper
minor
3.0.0 -> 3.5.1

Release Notes

gradle/gradle
v3.5.1
Compare Source
This bug-fix release addresses an uncaught regression in v3.5.0. Consider upgrading to v4.0, which also contains the fix.
Fixed issue:

gradle/gradle#1811: mavenLocal broken when \ found in Maven settings.xml

Upgrade Instructions
Switch your build to use Gradle 3.5.1 by updating your wrapper properties:
./gradlew wrapper --gradle-version=3.5.1
Standalone downloads are available at https://gradle.org/install.
Reporting Problems
If you find a problem with Gradle 3.5.1, please file a bug on GitHub Issues adhering to our issue guidelines. If you're not sure you're encountering a bug, please use the forum.
v3.5.0
Compare Source
Gradle 3.5 is now available
The Gradle team is pleased to announce Gradle 3.5.
First and foremost, we're excited to announce the new Build Cache! Beyond incremental builds, Gradle can save time by reusing outputs from previous executions of a task, resolving them locally or remotely. We’ve worked hard to ensure many built-in tasks are cacheable and safe to try; however, this feature should not be used in production without fully understanding its current limitations, so it is not enabled by default.
We have been testing this feature at scale for quite some time on the Gradle build itself and with enterprise partners, and the feedback has been very positive. While this feature is incubating, we are improving the user experience, documentation, and debuggability so that everyone can enable the Build Cache eventually.
We would like your feedback. Please read the Build Cache user manual, try it in non-critical environments, and submit GitHub issues with build scans if you encounter problems.
Next, we lamented that sometimes Gradle console output did not show all work-in-progress during a build (especially with --parallel), so we’ve developed brand new console output!

Gradle Script Kotlin v0.8.0 (included in the distribution) is a major step forward in
usability. It brings a more consistent DSL, convenient and type-safe access to contributed project extensions and conventions, much better error reporting, bug fixes and, of course, the latest and greatest Kotlin release.
Finally, plugin resolution rules give you tighter control over how plugins are resolved through the new pluginManagement {} block.
We hope you will build happiness with Gradle 3.5, and we look forward to your feedback via Twitter or on GitHub.
Check the full 3.5 release notes for more information.
Upgrade Instructions
Switch your build to use Gradle 3.5 quickly by updating your wrapper properties:
./gradlew wrapper --gradle-version=3.5
Standalone downloads are available at https://gradle.org/releases.
Reporting Problems
If you find a problem with Gradle 3.5, please file a bug on GitHub Issues adhering to our issue guidelines. If you're not sure you're encountering a bug, please use the forum.
v3.4.1
Compare Source
Gradle 3.4.1 is now available
This bug-fix release addresses uncaught regressions in v3.4.0 in the Java incremental compilation.
Fixed issues:

gradle/gradle#1474: Incremental compilation with literals in 3.4
gradle/gradle#1476: Compile avoidance should respect public constant changes

Upgrade Instructions
Switch your build to use Gradle 3.4.1 by updating your wrapper properties:
./gradlew wrapper --gradle-version=3.4.1
Standalone downloads are available at https://gradle.org/gradle-download.
Reporting Problems
If you find a problem with Gradle 3.4.1, please file a bug on GitHub Issues adhering to our issue guidelines. If you're not sure you're encountering a bug, please use the forum.
v3.4.0
Compare Source
Gradle 3.4 is now available
We're excited to bring you 3 incredible performance features in this release.
First up: Compile Avoidance. We've introduced a new mechanism for up-to-date checking of Java compilation that is sensitive to public API changes only. This means that if you change a comment or even a private API in a downstream project, Java compilation for upstream projects will be UP-TO-DATE.
Next: A stable incremental Java compiler. We've smartened the handling of constants, backed it with in-memory caches, and fixed many bugs. It is now production-ready for your build and has been promoted out of @Incubating.
Finally: A brand new Java Library Plugin. Use this when building a component intended to be used as a dependency from another project. It provides a strong separation between public (exported) and private code which not only gives great performance benefits (because consumers' compile classpaths are smaller), but also an architectural tool for library authors.
Put these together on our perf-enterprise-large benchmark Java project, and compilation time after a method body change is reduced from 2.5 minutes to 9 seconds! Let's put that in perspective:

It is not just large projects that reap the benefits, for example the same use case for Apache Polygene was reduced from 14 seconds to 7 seconds. Huge kudos to our performance team for delivering such massive performance improvements with this release.
You can learn more in this blog post about incremental compilation, compile avoidance and other performance features of Gradle 3.4.
Now, with your help and guidance we've been able to made a couple of highly-requested code-quality plugins improvements:

The JaCoCo plugin now allows you to enforce code coverage metrics and fail the build if they're not met.
The default version of JaCoCo used by the JaCoCo plugin has been raised and the plugin is now Java 9-ready.
The Checkstyle plugin now allows a maximum number of warnings or errors to be configured.

A special thank you to those who voted and contributed to these issues.
The community's voice clearly indicated the need for verifying JaCoCo code coverage metrics. The JaCoCo plugin in Gradle 3.4 verifies code coverage metrics and will fail the build if code coverage falls below a configurable threshold. The plugin is also fully prepared to run on Java 9.
Last but not least, we've made it more convenient to let Gradle know when you want a build scan — just use --scan (or --no-scan if not). No need for the "magic" system property -Dscan.
We hope you're able to build happiness with Gradle 3.4, and we look forward to your feedback via Twitter or on GitHub and sharing other amazing features in 2017. Happy new year from the Gradle team!
Check the full 3.4 release notes for more information.
Upgrade Instructions
Switch your build to use Gradle 3.4 quickly by updating your wrapper properties:
./gradlew wrapper --gradle-version=3.4
Standalone downloads are available at https://gradle.org/releases.
Reporting Problems
If you find a problem with Gradle 3.4, please file a bug on GitHub Issues adhering to our issue guidelines. If you're not sure you're encountering a bug, please use the forum.
v3.3.0
Compare Source
v3.2.1
Compare Source
v3.2.0
Compare Source
v3.1.0
Compare Source

Renovate configuration
:date: Schedule: At any time (no schedule defined).
:vertical_traffic_light: Automerge: Disabled by config. Please merge this manually once you are satisfied.
:recycle: Rebasing: Whenever PR becomes conflicted, or if you modify the PR title to begin with "rebase!".
:no_bell: Ignore: Close this PR and you won't be reminded about this update again.

[ ] If you want to rebase/retry this PR, check this box

This PR has been generated by Renovate Bot.

Renovate Ignore Notification
As this PR has been closed unmerged, Renovate will now ignore this update (3.5.1). You will still receive a PR once a newer version is released, so if you wish to permanently ignore this dependency, please add it to the ignoreDeps array of your renovate config.
If this PR was closed by mistake or you changed your mind, you can simply rename this PR and you will soon get a fresh replacement PR opened.


GCP: Retire old instances & permissions review

Task Description
We'll need to review the permissions(revoke/add) based on how we would like to qualify access to different backend instances and corresponding services on GCP.

Actions taken: https://github.com/bithyve/internal-docs/blob/master/Backend and Infrastructure/GCP Permissions

Closing @Parsh


context_processors: Cache the realm description in default context.

For issue #11929.

The extraction part of this issue is still remaining, I'll add it as a second commit sometime soon, I didn't want to block on the caching part because of it.

This looks great, merged, thanks @Hypro999!


[Showcase] added Showcase React Most Wanted

Added new showcase React Most Wanted made 100% with Material-UI.

@TarikHuber Thanks


Adds TypeScript definition file and declares definition in package.json

Hey, this'll help TypeScript developers.

Thanks johngrimsey! Do you need an npm release now?

 If you've time that'd be great!
On 16 December 2015 at 00:39, Jack Bowman<EMAIL_ADDRESS>wrote:

Merged #17 https://github.com/jackbowman/email-addresses/pull/17.
—
Reply to this email directly or view it on GitHub
https://github.com/jackbowman/email-addresses/pull/17#event-492925729.

@johngrimsey Just got around to publishing 2.0.2 on npm. Happy Holidays.


main: make error messages more accurate

This PR is related to Issue 655.
When the user is logging into the web interface, an exception is caught if the login fails.
However, the exception message is ignored and the "incorrect password" error message is displayed to the user in all cases.
The result is that, unless the user really did enter the wrong password, the error message will be incorrect.
This error can be caused by attempting to connect to a node that is not running or is in the locked state. Even if the correct password is entered, the error message says it is incorrect. These conditions can be identified more accurately than they currently are and should be reported to the user more accurately as well.
This PR will add a error detail message for both LiT and LND, which can be toggled. So there will now be as many as three error message: a main error message (always displayed) and LiT and LND detail error messages, at least one of which will be displayed.
The login error messages will be determined as follows:

Create a custom error message based on the exception that was originally thrown. This will become the main error message.
Check the subserver statuses for LiT and LND.
If LiT reports an error, it will become the detail error message for LiT. Otherwise the detail error message for LiT will state that LiT is not running and provide further detail if possible.
If LND reports an error, it will become the detail error message for LND. Otherwise the detail error message for LND will state that LND is not running and provide further detail if possible.

If the subserver statuses could not be obtained, it will report a connection failure with detail in the LiT detail message.
If none of the above conditions are met, but the login still failed, it will do the following:
This will result in more accurate error messages being displayed on the web interface, which would make it easier for some users to diagnose login problems on their own. In cases where they still need assistance in diagnosing a problem, the more accurate error message will help to narrow down the cause earlier in the process.

Hi @nonfungible-human, thank you so much for the PR! We'll take a look at it and get back to you early next week with next steps. We're evaluating whether it makes sense to do a broader fix here :) It could make sense for us to loop you in on that if you're interested. We'll have more details to share early next week!

@levmi Okay. Earlier, I changed this PR to a draft because one of the ci tests fails as it is checking for the "incorrect password" message. The test that says it tests for an incorrect password really just returns an error if the node is not available. If the decision is made to move forward with this, that test would need to check for a different message. Also, in integrated mode a different message is returned when the node is locked.

So, we discussed this internally. First off, thank you so much for your desire and ability to contribute! We’re really excited to have an external contributor pushing on some of these things.
Our ideal path forward on this issue would be to include not only the changes that you’ve created here. But also, to take advantage of the new SubServer Status rpc to return even more verbose error messages to help the user and us debug any issues. To do that, you would hit the RPC call used in this function to attain the subserver status (i.e. (this._store.api.lit.listSubServerStatus()), https://github.com/lightninglabs/lightning-terminal/blob/f2cfca981c893152243d22a568689b624d324709/app/src/store/stores/subServerStore.ts#L39
Specifically, here is an example code snippet of what you’ll receive from the RPC call:
    "sub_servers": {
        "accounts": {
            "disabled": false,
            "running": true,
            "error": ""
        },
        "faraday": {
            "disabled": false,
            "running": true,
            "error": ""
        },
        "lit": {
            "disabled": false,
            "running": true,
            "error": ""
        },
        "lnd": {
            "disabled": false,
            "running": true,
            "error": ""
        },
        "loop": {
            "disabled": false,
            "running": true,
            "error": ""
        },
        "pool": {
            "disabled": false,
            "running": true,
            "error": ""
        },
        "taproot-assets": {
            "disabled": false,
            "running": true,
            "error": ""
        }
    }
}

The above snippet can return things that are relevant to the user’s inability to login or other unrelated issues. We believe that the flow we’d want is to return errors from the subserver status function if they are related to either the lnd subserver not starting or the lit service itself not starting. So, specifically, we’d return errors if the output within lit or lnd is either an error message, in which case we would return that error message. Or, if  Running: false, in either of those buckets, then we’d return an error of “LND [lit] is not running.”  If the RPC calls fails entirely, then we should return an error of “Unable to connect to LiT. Please restart litd and try again.”
Other error messages from that function (like poold not starting for instance) would not be relevant to user being unable to log in. So, in the case that there are no errors from lnd or litd, we could return the error messages that you’ve already outlined in this existing PR.
Does that make sense? Do you feel comfortable with implementing that type of flow?

Yes, that seems pretty straight forward, and a good way to proceed. I will change it to use the listSubServerStatus function and then modify this PR, possibly by tomorrow but more likely early next week.

Awesome, thank you so much! Don't hesitate to reach out with any questions!

@levmi I do have a question. I ran some initial tests for this and some of the error messages it returns are pretty long and seem to contain multiple messages. Should the entire message be display on the user interface in all of these cases?
I tested 3 common error conditions (wrong password, node locked, node not running) in both remote and integrated mode. The following results are what I receive for "lit" and "lnd" when calling listSubServerStatus.
remote mode, with lnd node running and unlocked, wrong password entered
The error message for lit could be used here, but it is rather long and somewhat ambiguous. For example, the only part of the message that indicates that the problem is an incorrect password is could not start macaroon service.
"lit"
{
	disabled: false
	error: "could not start Lit: could not start litd sub-servers: could not start macaroon service: unable to derive a shared secret with LND: rpc error: code = Unknown desc = permission denied"
	running: false
}

"lnd"
{
	disabled: false
	error: ""
	running: true
}

remote mode, with lnd node running but locked, correct password entered
Neither one has an error message, but lit.running == false. Therefore, we would use the generic error message LiT is not running.
"lit"
{
	disabled: false
	error: ""
	running: false
}

"lnd"
{
	disabled: false
	error: ""
	running: true
}

remote mode, with lnd node not running, correct password entered
Both lit and lnd have an error message. The message for lnd is pretty long. The message for lit could be used in this case.
"lit"
{
	disabled: false
	error: "could not start Lit: could not start LND"
	running: false
}

"lnd"
{
	disabled: false
	error: "could not set up LND clients: could not create LND Services client: error subscribing to lnd wallet state: lnd version incompatible, need at least v0.13.0-beta, got error on state subscription: rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing: dial tcp <IP_ADDRESS>:10009: connect: connection refused\""
	running: false
}

integrated mode, with lnd node running and unlocked, wrong password entered
In this case, we would use the generic message LiT is not running.
"lit"
{
	disabled: false
	error: ""
	running: false
}

"lnd"
{
	disabled: false
	error: ""
	running: true
}

integrated mode, with lnd node running but locked, correct password entered
In this case, we would use the generic message LiT is not running.
"lit"
{
	disabled: false
	error: ""
	running: false
}

"lnd"
{
	disabled: false
	error: ""
	running: true
}

integrated mode, lnd not running
This case was not tested.

Hiya - doing some testing on our side and then will get back to you with a response on the above questions! I think what we want to make sure of is that if we're going to change the error messages in the UX to be more descriptive of the problem from an end user perspective that they aren't incorrect in certain cases. For instance, in the first case, with returning could not start macaroon service, it would obviously be better to actually return an error of wrong password or something along those lines. But, we wouldn't want to return that in the case where there's a separate error from wrong password that also returns could not start macaroon service. We're doing some tests on our side and then can validate or make recommendations. Sorry for the delay, it's a busy week for us with roundtables where we gather customer feedback. Reverting either tomorrow or Friday :)

@levmi Okay, sounds great. Those were exactly my concerns too, that we always use a reliable message to display something the user can easily understand. I will wait until I hear back from you.

Hi @nonfungible-human! First of all, once again, thanks a lot for taking the time to contributing to this repo, it's really  appreciated :pray::fire:!!!
I'll detail an answer to your questions one by one below.
First of all, I think I need to clarify that we would like to use both the error messages that you've currently added, plus the response from the subserver status rpc response. I think it would make sense create a combination of both showing the error messages that this PR has already added, and then showing the response from the subserver status rpc call separately. The response from the status rpc call should be seen as an "advanced error" message view, and would probably make sense to hide under a "More details" dropdown that can be expanded underneath the error message that's currently shown. For the average user, the expanded set of error messages that this PR has already added, will likely be good enough, but for advanced users the output from the status rpc response will also provide helpful troubleshooting info!
Too see what I mean by a dropdown, look at how extra information is shown when clicking the "Additional Options" dropdown on:
https://terminal.lightning.engineering/connect/pair/
I'm also cc:ing @jamaljames here, as UI:s isn't my specialty :sweat_smile:, so I'd like to get his approval if this sounds like a good idea before you actually implement it.
Either way, I definitely think we should create a combination of both the current error messages and the status rpc response, as neither of them can replace the need for the other.
remote mode, with lnd node running and unlocked, wrong password entered

The error message for lit could be used here, but it is rather long and somewhat ambiguous. For example, the only part of the message that indicates that the problem is an incorrect password is could not start macaroon service.

If we create the "advanced error message view" I think think it's ok that you include the full error message here.
Just to clarify once more though, if we create a combination of both the current error messages and the status rpc response, the user will still get an "Incorrect password" in the main error message view to show the user what's wrong.
Just for future reference, as it might be helpful for you to understand our error messages more easily, when you see long nested error messages like this, it's actually most often the last part of the error message that most accurate. In this case it's permission denied, which correlates well to the password being incorrect.
remote mode, with lnd node running but locked, correct password entered
Yes, in cases like this it'd make sense to show the LiT is not running in the "advanced error message" view. Actually though, just to make the LiT is not running more helpful when we have no message in the error field, let's modify it to:
LiT is not running - Ensure that the wallet is unlocked
Finally, in cases like this, you should also hit the walletLockedErr as the main error message right? That should help the user figure out what's wrong.
remote mode, with lnd node not running, correct password entered
If we add the "advanced error message" view, I actually think it makes sense to show the full error messages for both lit & lnd for this and other cases when there are multiple error messages. Just make sure that it's clear which error comes from which system.
This case actually shows a case where the "advanced error message" view will be very helpful for users, as I believe you'll hit  the "noConnectionErr" for the main error message view, right?
integrated mode, with lnd node running and unlocked, wrong password entered
See the answer for "remote mode, with lnd node running and unlocked, wrong password entered" :).
integrated mode, with lnd node running but locked, correct password entered
See the answer for "remote mode, with lnd node running but locked, correct password entered".
integrated mode, lnd not running
This will lead to the status rpc call response containing "could not start Lit: could not start LND" for the lit error field.

Let me know if something is still unclear!

@ViktorTigerstrom thanks for all of this great feedback. There's really not much to add.
I agree that the status message should be shown alongside the custom RPC error. The status error just provides more context into what may be causing the login to fail.
Another approach for placement of the status message is to use an icon with a tooltip on hover.

@ViktorTigerstrom and @jamaljsr, I have pushed a new commit to this branch and it works for me in all of the above cases. The css styles and error message text can easily be modified if necessary.
I did notice, during my final testing, that I was getting some "unable to fetch subserver status" error messages. I don't know if these messages are specific to my setup, because I am not using any of the other subservers, or if they are caused by something else. One of them said it could not find lit.macaroon, which is an error I thought I had seen in the past. None of the code I changed should affect the way subserver statuses are retrieved, so I am assuming the messages I am seeing are a normal condition. But we should make sure that, in addition to displaying accurate error messages, all functionality still works after a successful login, and that is hard for me to do because I am currently testing this login code on an unfunded node with no channels. Specifically, the messages I am talking about are the red boxes that appear on the right side of the screen immediately after a successful login. I see several of them and most of them say "unable to fetch subserver status" but they disappear faster than I can read all of them.

I made the suggested changes. I wasn't able to reproduce the empty detail message when an incorrect password is entered, but I put a check in place to prevent the button from being displayed if both detail messages are empty. However, at least one of them should contain text if there is an error.
Also, I removed the redundant prefixes Lit: and LND:. @ViktorTigerstrom had said to make sure that it's clear which error comes from which system, which is why I put them in there in the first place. Right now, if there is a message from both LiT and LND, it will display them both and it seems fairly easy to tell them apart. The case I know of where it display a message from both subsystems is when LiT is running in remote mode and LND is not running at all.


improved overall look of readme and remove unused import axios.

WoW

WoW

not a major change lmao

It's still good to be honest. People should take care of cases, even. Just like I do..


KubeobjectExt should keep formatting of lists

Rewrite KubeObjectExt setters to keep formatting of lists, not just structs and maps

Thanks @kispaljr . I see a  few TODOs. Are they for later ?

Thanks @kispaljr . I see a few TODOs. Are they for later ?

Yes, you are right to notice this: I kept working on the PR even after submitting to review, sorry.
By now I've completed all TODOs and refactoring that I planned to do, except for 1 TODO, that we can safely leave for later. (That will most probably fixed only when I submit the whole thing into the underlying SDK).
All-in-all I try not to add any commits from now on, except if a reviewer asks.

/approve

/lgtm


Change SignedInUser to use the models/login.go UserSignIn

This is a patch for #898
I hope this is acceptable and works as expected. It should permit users to pull and push using non-local accounts over HTTP, without having to change the password in the local database.

Thanks your PR!
But please re-PR to dev branch :)


Fix fire animation

Task/Issue URL: https://github.com/duckduckgo/Android/issues/1159
Tech Design URL:
CC:
Description:
When we check that the animation is enabled we can also check that the animator duration scale is set, if it is set to 0 then we skip the animation.
Steps to test this PR:

Set Animator duration scale to Animation off
Select Clear all tabs and data.

Internal references:
Software Engineering Expectations
Technical Design Template

Good job @jamie23 . I left one minor comment to error on the safe side.


margin() should compute delay margin

From @baggepinnen on February 22, 2016 8:46
Currently, only gain and phase margins are computed, delay margin is also of interest
Copied from original issue: mfalt/Control.jl#21

From @baggepinnen on February 22, 2016 9:11
Should be priority since it's needed in handin 2 :D

From @baggepinnen on February 25, 2016 20:46
separate delaymargin function added in branch pid

From @baggepinnen on February 24, 2016 17:14
Margin does not give same answer as matlabs margin, not even close


Handle error on adding product to submitted order from another tab

The fix looks ok to prevent the actual problem.
Ideally, it should be solved somehow on the domain level, but I don't know exactly how.
In the spirit of first focusing on stabilizing the app from bugs (and this fixes it), let's go for this.
However, we need an integration test to show the bug that is fixed (and prevents from regresssions in the future). Once we will be able to find a proper domain solution to this, we will change the test to unit test.


Link to event using NIP-21

I'm browsing https://nostrrr.com/ and I want to interact with some of the events I see there, but I can't find a way to click on them and be redirected to some other client where I can do that. Would be nice to have a nostr:nevent... link somewhere, maybe in the event date?

The event footers have a three dots menu where you can copy the ID but perhaps is not very obvious. I think I should add a "Open" menu on the event header to all events that lets you open it in another app using NIP-89, wdyt?

That would be nice too, but I was asking just for the nostr: link as that would work for me since I have a handler for it already configured and I thought would be simple (well, not so simple as I tried to implement it myself but failed).
I guess that could be the first option in the menu that lists other apps using NIP-89 or something like that.

Added raw nostr link as the first option and included the event menu for notes and long form posts.


Cannot add dependencies via API's createTaskLineModal(): "Blocking and blocked by fields are disabled when vault tasks is empty"

Please check that this issue hasn't been reported before.

[X] I searched previous Bug Reports didn't find any similar reports.

Expected Behavior
I’m using the Tasks Plugin together with the QuickAdd Plugin to create tasks using a shortcut. When I use this shortcut, it should open the task creation interface, allowing me to make changes just like I normally would.
Current behaviour
When I use the shortcut, the fields for "Before This" and "After This" are replaced with the message "Blocking and blocked by fields are disabled when vault tasks is empty," and I can’t modify the dependencies in the creation menu. However, it works fine if I create the task first and then edit it afterward.

Steps to reproduce

Create the QuickAdd Shortcut just like the one in the documentation
Use the QuickAdd Shortcut

Which Operating Systems are you using?

[ ] Android
[ ] iPhone/iPad
[ ] Linux
[ ] macOS
[X] Windows

Obsidian Version
1.6.7
Tasks Plugin Version
7.6.1
Checks

[X] I have tried it with all other plugins disabled and the error still occurs

Possible solution
No response

This should have been stated in the docs, that it is a known issue. Thank you for logging it.
The reason behind the current behaviour is written up in the TODO comment here:
https://github.com/obsidian-tasks-group/obsidian-tasks/blob/3207040f32d558916dffe8f267e789932745b556/src/Api/createTaskLineModalHelper.ts#L17-L30


start down the long road to no_std

todo:

switch thiserror for anyhow
swap imports from standard library to core instead (where possible)
use our own allocator (no_alloc)
dirs needs native impl

nice to have:

consider making a no_std version of libp2p (manual IO)

This is something that may never happen, considering how much we rely on standard rust.


make SR OS to accept startup-config in partial form

SR OS nodes must be able to accept startup config both in full form and in partial, CLI-blob-like format.
The full form is a hardcopy of a config file which is used by the node to boot from. We store this file at tftp location from which SR OS boots.
The partial config is provided in the MD-CLI format and must conform to the following structure:

entering into the configuration mode
commands to execute
commit command

SR OS vrnetlab code needs to be adjusted to make an analysis if the provided file contains the full config blob, or a partial command. The way to do this is under investigation.
If the full config is detected to be provided, the current startup config implementation is enforced.
If the partial config is detected, we should send the commands after the node boots, similar to how startup config is provided for XR, VMX, etc.

Can you provide samples of both formats, such that the format absolutely clear.

@steiler since I believe it is tricky to automatically detect if a config provided for SR OS is a full config or a partial one, I think it is safe to require a user to indicate that in the file itself.
A proposal is to look for the first line of the config file, and if it matches ## CONTAINERLAB PARTIAL CONFIG ## string (case insensitive, trimmed of spaces) then this config is a partial config and is NOT a startup config.
For a partial config I propose that the rest of the file is taken as in input to the scrapli script (in python for vrnetlab-based devices) that will send the commands over to the node.
Vrnetlab code should be common to the vrnetlab (not part of SR OS lib)


CI: add publishing workflow

This PR implements the publish-vscode-extenision github workflow
closes #18
The VS_MARKETPLACE_TOKEN secret must be added to this repository github secrets

Nice. Can you bump the package.json version in this PR?

Yes! I just did it 🚀

looks like the CI failed. I won't be at a computer until tomorrow, but I'm keen to get it figured out. thanks for this

I have not been able to see the logs, dont know what could have happened.
I will try it with some test project to see if the workflow works well

I'm getting a 401 error on the publishing request being made from GitHub to the VSCode marketplace. I added a VS_MARKETPLACE_TOKEN secret for a Personal Access Token on my Microsoft account with 'full access'. I just added you as a collaborator to the repo if you want to take a deeper look.

My first suggestion would be to fork and tweak the GH action for the publishing workflow and see if you can get better visibility into an error message besides just the unauthorized HTTP code. Let me know what you find.

I tried with another action just in case but it must be some authentication problem.
I have published another plugin with one of this actions following this for getting the token and it worked well.
At first there was some problem because I didn't pay attention and put the organization field wrong but as soon as I changed it it worked fine.
Anyway, although I don't have much knowledge about github actions development, I'll see if I can add a console.log somewhere to see whats happening 😎

Sorry for all the notifications that may have reached your email from the github actions :(
I have unmounted the action and finally the vsce package keeps returning a "plain" 401 error.
In the VSC documents for extension developers they link this error response to a bad config in the token
Take a look at that when you can and if it doesn't work I don't know what else could be going on

Not sure what I did differently the first time, but I created a new personal access token following the same instructions, updated the repo secret, and the CI action ran to completion on re-triggering.
The version just turned over on https://marketplace.visualstudio.com/items?itemName=waymondo.todoist as well.


Choose the technologies to be used for the app

Should we use a very simple HTML page or add some JavaScript scripts?

No need to add JS just yet. Let's just stick to HTML5 and some styles.
@ywg181 will lead the development


Crash when loading saved games

I'm noticing a new crash when loading saved games, which appears to be caused by police overlays. This may be due to recent changes from #1023 (for issue #1006).
The crash happens on the mTileMap->maxDepth() call because mTileMap is nullptr:
void MapViewState::resetPoliceOverlays()
{
	mPoliceOverlays.clear();
	for (int i = 0; i <= mTileMap->maxDepth(); ++i)
	{
		mPoliceOverlays.push_back(TileList());
	}
}

Thread 1 "ophd.exe" received signal SIGSEGV, Segmentation fault.
TileMap::maxDepth (this=0x0) at OPHD/Map/TileMap.h:71
71		int maxDepth() const { return mMaxDepth; }
(gdb) bt
#0  TileMap::maxDepth() const (this=0x0) at OPHD/Map/TileMap.h:71
#1  0x00000000006c5d00 in MapViewState::resetPoliceOverlays() (this=0xea7820)
at OPHD/States/MapViewState.cpp:1477
#2  0x00000000006c56bf in MapViewState::MapViewState(MainReportsUiState&, std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&) (this=0xea7820,
mainReportsState=..., savegame="savegames/TestSave.xml")
at OPHD/States/MapViewState.cpp:118
#3  0x00000000006901c8 in MainMenuState::onFileIoAction(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, FileIo::FileOperation) (this=
0xda0c80, filePath="TestSave", fileOp=FileIo::FileOperation::Load)
at OPHD/States/MainMenuState.cpp:147
#4  0x000000000060b50b in NAS2D::DelegateX<void, std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, FileIo::FileOperation>::operator()(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, FileIo::FileOperation) const (this=0xf06660, params="TestSave", params=FileIo::FileOperation::Load)
at nas2d-core/NAS2D/Signal/Delegate.h:429
#5  0x000000000060b39c in NAS2D::Signal<std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, FileIo::FileOperation>::emit(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, FileIo::FileOperation) const
(this=0xda0e18, params="TestSave", params=FileIo::FileOperation::Load)
at nas2d-core/NAS2D/Renderer/../Signal/Signal.h:43
#6  0x00000000005fef63 in NAS2D::Signal<std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, FileIo::FileOperation>::operator()(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, FileIo::FileOperation) const
(this=0xda0e18, params="TestSave", params=FileIo::FileOperation::Load)
at nas2d-core/NAS2D/Renderer/../Signal/Signal.h:44
#7  0x00000000005fd2de in FileIo::onFileIo() (this=0xda0cc0) at OPHD/UI/FileIo.cpp:166
#8  0x00000000005fd838 in FileIo::onDoubleClick(NAS2D::EventHandler::MouseButton, int, int)
(this=0xda0cc0, x=279, y=275) at OPHD/UI/FileIo.cpp:72
#9  0x00000000006f85e1 in NAS2D::DelegateX<void, NAS2D::EventHandler::MouseButton, int, int>::operator()(NAS2D::EventHandler::MouseButton, int, int) const
(this=0xf05fd0, params=params@entry=NAS2D::EventHandler::MouseButton::Left, params=params@entry=279, params=params@entry=275) at NAS2D/Signal/Delegate.h:429
#10 0x00000000006f8548 in NAS2D::Signal<NAS2D::EventHandler::MouseButton, int, int>::emit(NAS2D::EventHandler::MouseButton, int, int) const (this=,
this@entry=0x9bd800, params=NAS2D::EventHandler::MouseButton::Left, params=279, params=275) at NAS2D/Signal/Signal.h:43
#11 0x00000000006f72f6 in NAS2D::Signal<NAS2D::EventHandler::MouseButton, int, int>::operator()(NAS2D::EventHandler::MouseButton, int, int) const (this=0x0,
this@entry=0x9bd800, params=NAS2D::EventHandler::MouseButton::None, params=0, params=15366176) at NAS2D/Signal/Signal.h:44
#12 0x00000000006f6db6 in NAS2D::EventHandler::pump() (this=0x9bd470)
at NAS2D/EventHandler.cpp:680
#13 0x00000000006f46ba in NAS2D::StateManager::update() (this=0x7fffffffd370)
at NAS2D/StateManager.cpp:87
#14 0x0000000000668bdc in main(int, char**) (argc=1, argv=0x7fffffffdcf8)
at OPHD/main.cpp:158

Right, I think it would be better to reset the overlay in the initialization function instead of on MapViewState construction since when loading a game, the depth is not known until after the constructor is called. It is known in construction for starting a new game.

Right, that's probably a sign the MapViewState object needs some refactoring. I've often felt the asymmetry between starting a new game and loading a saved game should be reduced. But that's a different issue.
Anyway, I've confirmed the change fixes the crash bug for me. Thank you for taking care of that.


Tests for amplitude connector

Closes #1945
Code Changes
NEW SaaS Connector Amplitude for access and erasure
Steps to Confirm

[x] Add/configure the Amplitude connector in UI
[ ] Verify Amplitude config and icon UI looks good
[x] Add user data using Amplitude api
[x] Create an Access DSR with the new Amplitude user email
[ ] Verify email sent by fides with user data is correct
[x] Create an Delete DSR with the new Amplitude user email
[ ] Verify the user data is now deleted in Amplitude

Pre-Merge Checklist

[ ] All CI Pipelines Succeeded
[ ] Update CHANGELOG.md

SaaS Connector Checklist

[x] Spec doc link
[ ] Vault Creds
[x] Postman Collection
[x] SaaS Config And Dataset
[x] Access and Erasure Tests Passing
[ ] Icon


CodeReady Containers (CRC) - global/SA pull-secret doesn't work with digest tag and mirroring

General information

OS: Linux - RHEL 7.7 on Bare-Metal
Hypervisor: KVM (CRC)
Did you run crc setup before starting it (Yes/No)? Yes

CRC version
crc version
CodeReady Containers version: 1.14.0+36ad776
OpenShift version: 4.5.4 (embedded in binary)

CRC status
crc status
CRC VM:          Running
OpenShift:       Running (v4.5.4)
Disk Usage:      22.23GB of 193.8GB (Inside the CRC VM)
Cache Usage:     12.93GB
Cache Directory: /home/test/.crc/cache

CRC config
 crc config view
- cpus                                  : 20
- memory                                : 72000
- pull-secret-file                      : /home/test/Downloads/1.5/crc-linux-1.5.0-amd64/pull-secret

Host Operating System
# Put the output of `cat /etc/os-release` in case of Linux
# put the output of `sw_vers` in case of Mac
# Put the output of `systeminfo` in case of Windows

Steps to reproduce

Created a mirror using the instructions at  here.
example from /etc/container/registries.conf:

     [[registry]]
       location = "docker.io/ibmcom"
       insecure = false
       blocked = false
       mirror-by-digest-only = true
       prefix = ""

    [[registry.mirror]]
      location = "abc-docker-local.artifactory.swg-devops.com"
      insecure = false

    [[registry.mirror]]
      location = "jkl-docker-local.artifactory.swg-devops.com/builds"
      insecure = false

   [[registry.mirror]]
     location = "xyz-docker-local.artifactory.swg-devops.com"
     insecure = false

Create secrets to be added to the global pull-secret:

      oc create secret docker-registry xyz-secret-key --docker-server=xyz-docker-local.artifactory.swg-devops.com --docker-username=my-email.com --docker-password=<docker_password> --docker-email=my-email.com --dry-run=true --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode > myregistryconfigjson

      oc get secret pull-secret -n openshift-config --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode > dockerconfigjson

     jq -s '.[0] * .[1]' dockerconfigjsbe on myregistryconfigjson > dockerconfigjson-merged

    oc set data secret/pull-secret -n openshift-config --from-file=.dockerconfigjson=dockerconfigjson-merged

Then oc create -f catalogsource.yaml with the digest tag  - image: docker.io/ibmcom/datapower-operator-catalog@sha256:xxxxxxxxxxxxx

Expected
The catalogsource to be deployed using the registry secret defined in the global pull-secret to authenticate against the remote docker registry mirror.
Actual
Authentication failed:
Events:
  Type     Reason     Age                From                         Message
  ----     ------     ----               ----                         -------
  Normal   Scheduled  101s               default-scheduler            Successfully assigned openshift-marketplace/ibm-datapower-operator-catalog-7d85p to crc-rtgqw-master-0
  Normal   Pulling    49s (x3 over 96s)  kubelet, crc-rtgqw-master-0  Pulling image "docker.io/ibmcom/datapower-operator-catalog@sha256:626ca3f20124ae3b873a09dfcb21a22d8faefd7495952428d096bb7aaf8c1e2d"
  Warning  Failed     45s (x3 over 92s)  kubelet, crc-rtgqw-master-0  Failed to pull image "docker.io/ibmcom/datapower-operator-catalog@sha256:626ca3f20124ae3b873a09dfcb21a22d8faefd7495952428d096bb7aaf8c1e2d": rpc error: code = Unknown desc = (Mirrors also failed: xyz-docker-local.artifactory.swg-devops.com/datapower-operator-catalog@sha256:626ca3f20124ae3b873a09dfcb21a22d8faefd7495952428d096bb7aaf8c1e2d: unable to retrieve auth token: invalid username/password: unknown: Authentication is required]

Also extended the setup to create the registry secret and linked it to the default service account in the openshift-marketplace project, and authentication still failed.
The issue seems to be mirroring with digest only
Logs
You can start crc with crc start --log-level debug to collect logs.
Please consider posting this on http://gist.github.com/ and post the link in the issue.

I observed the same issue. I am using CRC 1.14.0 on Windows (Hyper-V). I SSH-ed to CRC VM, defined registry mirroring from registryX to registryY in /etc/containers/registries.conf. I added auth information for registryY to the global pull-secret in the openshift-config namespace, and also tried adding it to the default pull secret in my project.
When I deploy workload that references image in registryX to my namespace, it fails to pull the image and reports that authentication failed. The mirroring appears to be taking place since the error message lists both registries and says “Mirrors also failed”. But it doesn’t seem to be using the auth info I provided for registryY, no matter how I provide it. I also double checked the auth info to make sure it is correct, and if I deploy the workload and reference the image in registryY directly, then it pulls the image correctly, so that is additional assurance that the auth info is correct.

@rajones27 @predragmaksimovic Any chance have you tried same with real openshift cluster, I am going to have a look into this tomorrow and put the finding issue here.

@praveenkumar Thanks for looking into this. Yes, I was deploying to a RHOCP cluster where mirroring + auth worked, but I wasn’t the one who configured the cluster. Pretty sure though they used ImageContentSourcePolicy object to define the mirroring and had it automatically propagated to the worker nodes, and also pretty sure they used global pull-secret in the openshift-config namespace to provide the auth info for the mirror registry.
**
Please note that I was able to get the following to work, which I hope can help with the troubleshooting:

SSH to CRC VM and edit /etc/containers/registries.conf to define mirroring from locationX to locationY. Note that registries for both locationX and locationY require authentication, but they use different credentials.

Issue  podman pull --creds user:passwd locationX/image@sha256:digest
Where user and passwd are for locationY and image@sha256:digest is the image name and digest of the image. The image physically resides under locationY but the podman command above intentionally refers to it under locationX with the hope of mirroring+auth taking place. This does NOT work, fails just like when I try to apply a deployment manifest with the same image reference via kubectl.

Issue export REGISTRY_AUTH_FILE=/var/home/core/auth.json
Issue podman login --username user --password passwd  registryY
Where user and passwd are for registryY. This works and login succeeds and auth info for registryY is stored in auth.json.
Now issue: podman pull locationX/image@sha256:digest
This works. The image is successfully pulled from locationY where it resides even though the podman pull command refers to it under locationX.

@predragmaksimovic In the section 3

Issue export REGISTRY_AUTH_FILE=/var/home/core/auth.json
Issue podman login --username user --password passwd registryY
Where user and passwd are for registryY. This works and login succeeds and auth info for registryY is stored in auth.json.
Now issue: podman pull locationX/image@sha256:digest
This works. The image is successfully pulled from locationY where it resides even though the podman pull command refers to it under locationX.

Can you try podman pull --authfile /var/home/core/auth.json locationX/image@sha256:digest instead login to the registry with username and password and see if that works also?

@praveenkumar Yes, that appears to be working too.
Before issuing podman pull --authfile /var/home/core/auth.json locationX/image@sha256:digest I closed the SSH session and started a new one, made sure to podman logout from registryY (it said it wasn't logged in), made sure that REGISTRY_AUTH_FILE is not set, and then issued the podman pull command above and it pulled the image. I then also tried the same command but without the --authfile flag and that failed with authentication error, so --authfile indeed seems to be utilized when provided.
And yes, I looked in auth.json and it contains creds for registryY only, no mention of registryX there.

@predragmaksimovic Thank you for validation, I will do more debugging and post it here.

@praveenkumar Any results yet from your testing?

@rajones27 Hi, I was on PTO and just come back, I will try to again start looking into this.

@rajones27 @predragmaksimovic Finally I have something which is working for CRC as part of mirror registry, this need to be part of document since there are some manual steps are required, I will draft the doc tomorrow and share it with you folks to try it out.

@rajones27 I also got the same issue  Warning  Failed     45s (x3 over 92s)  kubelet, crc-rtgqw-master-0  Failed to pull image "docker.io/ibmcom/datapower-operator-catalog@sha256:626ca3f20124ae3b873a09dfcb21a22d8faefd7495952428d096bb7aaf8c1e2d": rpc error: code = Unknown desc = (Mirrors also failed: xyz-docker-local.artifactory.swg-devops.com/datapower-operator-catalog@sha256:626ca3f20124ae3b873a09dfcb21a22d8faefd7495952428d096bb7aaf8c1e2d: unable to retrieve auth token: invalid username/password: unknown: Authentication is required] during the testing so I think what you are missing is adding same pull secret in the VM which is in the /var/lib/kubelet/config.json file which should have pull secret which content should be  dockerconfigjson-merged file. Can you update and then try if that works?

https://github.com/code-ready/crc/wiki/Add-mirror-registry is what I have documented.

@praveenkumar Thanks for the new updated data. Will let you know soon if this works out for us.

@praveenkumar Worked perfectly for me! So turns out the only piece I was missing was that update of /var/lib/kubelet/config.json in the VM. Once I did that, I restarted CRC, and mirroring started working.
This is great, thank you !!!

Great to hear, will wait for @rajones27 test and then close this.

@praveenkumar I've tried the suggestion as stated below, and it did fix the authentication issue, it is working now. I have not tried to use the doc link that you have provided, https://github.com/code-ready/crc/issues/1474#issuecomment-691290462. Not sure if you want us to give any feed back.
Thanks!

@rajones27 I also got the same issue  Warning Failed 45s (x3 over 92s) kubelet, crc-rtgqw-master-0 Failed to pull image "docker.io/ibmcom/datapower-operator-catalog@sha256:626ca3f20124ae3b873a09dfcb21a22d8faefd7495952428d096bb7aaf8c1e2d": rpc error: code = Unknown desc = (Mirrors also failed: xyz-docker-local.artifactory.swg-devops.com/datapower-operator-catalog@sha256:626ca3f20124ae3b873a09dfcb21a22d8faefd7495952428d096bb7aaf8c1e2d: unable to retrieve auth token: invalid username/password: unknown: Authentication is required] during the testing so I think what you are missing is adding same pull secret in the VM which is in the /var/lib/kubelet/config.json file which should have pull secret which content should be dockerconfigjson-merged file. Can you update and then try if that works?

Thanks for testing out, closing this issue.


preferred citation / acknowledge for adapting website?

Hi @amyjko! Your new website is fantastic, and I would love to adapt the infrastructure you've developed for my own lab website. (I'm currently dealing with a hard-to-maintain Frankenstein's monster of Jekyll and bootstrap.)
Before I do so I wanted to ask:

First, are you ok with this? Obviously the content would be different but there would be clear similarities too, in terms of layout.
If you are, do you have a preferred acknowledgment/"citation" to your site? I saw the CC0 license, but I think it would still be appropriate to point to you/here as the original source and inspiration.

Thanks!

Go for it! I really do mean the CC0; consider it public domain. Just mentioning me by name and pointing to amyjko.com or the repo would be great. I can't wait to see what you do with it.
Note: one motivation for the CC0 is sort of an implied lack of support: I'm definitely not writing or maintaining this in a form suitable for reuse, so a fork is probably a smart move :)

Understood, and thanks! I'll definitely share my version when it's ready.
I'm just playing around with it right now, but forking it is a good idea (though might need to delete my current website repo and start anew, since that one is also a fork...)


chore(main): release 0.5.1

:robot: I have created a release beep boop
0.5.1 (2024-08-17)
Bug Fixes

add return type for exception assertions (9fe9fe6)

This PR was generated with Release Please. See documentation.

:robot: Created releases:

v0.5.1
:sunflower: