Permission denied when trying to create folder /__t on child container

When running something that relies on hostedtoolcache as a non-root user, like setup-python, I run into the following issue:
Run actions/setup-python@v4
Run '/runner/k[8](...)s/index.js'
Version 3.[10](...) was not found in the local cache
Version 3.10 is available for downloading
Download from "https://github.com/actions/python-versions/releases/download/3.10.10-4[12](...)6486420/python-3.10.10-linux-22.04-x64.tar.gz"
Extract downloaded archive
/usr/bin/tar xz --warning=no-unknown-keyword -C /__w/_temp/aabf1bba-fd5b-4bed-91fe-d0b[14](...)8666e00 -f /__w/_temp/28d56371-4e7d-4f0e-8259-7cf690c0932b
Execute installation script
Check if Python hostedtoolcache folder exist...
Creating Python hostedtoolcache folder...
Error: mkdir: cannot create directory '/__t': Permission denied
Error: The process '/usr/bin/bash' failed with exit code 1
Error: Error: failed to run script step: command terminated with non-zero exit code: Error executing in Docker Container: 1
Error: Process completed with exit code 1.
Error: Executing the custom container implementation failed. Please contact your self hosted runner administrator.

The work directory is there and looks alright at __w, there is also a __e directory present that seems pertinent.

Hey @SirensOfTitan,
Can you please describe your setup? Based on the log, I assume you are running runner in k8s cluster inside the docker image and using docker hook. If that is the case, can you check if the user inside the job container has the same UID as the runner user?
This permission denied can happen in case your runner user is running as UID 1001, and you have a user inside the job container having UID different from 1001. Then, since /__t is mounted from the runner, it inherits the permission on the host. So either your job container user needs to be root, or it needs to match the UID of the runner user.

Hi @nikola-jokic : Thank you for the speedy response!

Can you please describe your setup? Based on the log, I assume you are running runner in k8s cluster inside the docker image and using docker hook. If that is the case, can you check if the user inside the job container has the same UID as the runner user?

Yes, that's correct.    I'm using an image based on ghcr.io/actions/actions-runner-controller/actions-runner:ubuntu-22.04 (source: https://github.com/actions/actions-runner-controller/blob/master/runner/actions-runner.ubuntu-22.04.dockerfile) with runner container hooks updated to 0.3.1 (that original one is set to 0.2.0 by default) as the container for the child pod in question and the default runner container image.
... as such, the runner has UID 1001 in both cases.  In my case, the __t directory doesn't seem to exist at all in the child pod:

cd /__t
bash: cd: /__t: No such file or directory

Hey @SirensOfTitan,
Quick update: I think this might be a runner issue. Container hook uses mounts sent from the runner, so it seems to me like the runner is not sending toolscache mount to __t. I'm not 100% sure, but I'll keep investigating it. I'm also on the runner team, so don't worry about creating an issue there for now :smile:

Hey @SirensOfTitan,
I think I found the issue. Can you please share how are you using setup-python (the step and with parameters)? I investigated differences between hook and the runner suspecting there is a mount that the runner did not send. Since the container hook respects mounts sent from the runner, this can't be an issue related to the container hook.
Anyway, the check if the hostedtoolcache exists tells me that you are probably using caching. This mount is added by default on hosted runners (see setup-python docs), but the __t mount does not exist on the self-hosted runner. Then, the execution probably tries to create /__t but since it is not a root, it does not have permissions to create directories in the / path causing permission issue. :smile: Let me know if that is actually the issue. I tried comparing docker execution on self-hosted runner without the hook, and it does not come with the /__t mount as well

Here is the similar issue in the runner: https://github.com/actions/runner/issues/2522
Same problem with /opt/hostedtoolcache regardless of if the hook is being used :relaxed:

@nikola-jokic:  Thank you!
Here's the setup-python step:
      - uses: actions/setup-python@v4
        with:
          cache: "poetry"
          cache-dependency-path: "./poetry.lock"

We are indeed using caching!  If it helps: we're on Enterprise Server 3.8 as well.

This mount is added by default on hosted runners (see setup-python docs), but the __t mount does not exist on the self-hosted runner. Then, the execution probably tries to create /__t but since it is not a root, it does not have permissions to create directories in the / path causing permission issue.

This is correct!  The /__t mount doesn't exist like e.g. the work folder at /__w, so the execution tries to create and fails since it isn't root.

I'll leave this issue open here, but until the fix is ready in the runner. :relaxed:
Thank you for submitting it!

Let's close this issue here since it should be fixed on the runner. Thank you again for reporting it!


bypass getItem on keys-only db streams (re-rebased)

Should pass, now that localstorage-memory is updated. I also fixed the test to ensure the database is closed.

lol, zuul broke too, but now after that update, we should be good...

Changes Unknown when pulling 699e5ba36faf1f356a710a5b94c555c2f7bcd27f on fastkeys-nolan into ** on master**.

Tested manually, it's fine. Ngrok is just giving me headaches.


Add info field to dataset

To help ameliorate #626 this PR extends the dataset message by adding an info field in a spirit similar to the rest of the API. This allows other information about a dataset not currently represented as a named field to be exchanged.

+1. This is surely uncontroversial.

+1

+1


JSON type is handled incorrectly for H2 database

MyBatis version
3.5.10
Database vendor and version
h2, version: 1.4.200
Description
MyBatis maps JSON type to Java String, but for h2, FORMAT JSON is required when inserting a JSON column as mentioned in its doc.

To set a JSON value with java.lang.String in a PreparedStatement use a FORMAT JSON data format (INSERT INTO TEST(ID, DATA) VALUES (?, ? FORMAT JSON)). Without the data format VARCHAR values are converted to a JSON string values.
link: https://h2database.com/html/datatypes.html#json_type

Also see issue in: https://github.com/h2database/h2database/issues/3088
Is this a known issue?

Hello @justinplus ,
MyBatis does not add FORMAT JSON clause automatically.
You have to write it in your SQL.

Hi @harawata,
Is that possible to do this when using dynamic sql?
Would MyBatis consider to support this case?

If you are referring to MyBatis Dynamic SQL, then we support this use case by using a custom rendering strategy. There's an example of doing something similar for PostgreSQL here: https://github.com/mybatis/mybatis-dynamic-sql/tree/master/src/test/java/examples/custom_render

I can solve it by using customized rendering strategy, but it's still not smart enough, since MyBatis cannot detect JSON column of H2 SQL provider and apply this strategy automatically.
public class H2JsonColumnRenderingStrategy extends MyBatis3RenderingStrategy {
    public static final RenderingStrategy INSTANCE = new H2JsonColumnRenderingStrategy();

    private H2JsonColumnRenderingStrategy() {};

    @Override
    public String getFormattedJdbcPlaceholder(BindableColumn<?> column, String prefix, String parameterName) {
        return super.getFormattedJdbcPlaceholder(column, prefix, parameterName) + " FORMAT JSON";
    }
}

Please give a complete demo to describe what you want :)


Fix STRtree insert/query to avoid void nullptr

xref https://github.com/pygeos/pygeos/issues/233#issuecomment-735285534 and the discussion the geos-devel mailing list (https://lists.osgeo.org/pipermail/geos-devel/2020-November/009870.html).
This change is what I understand from that discussion should be the solution, but this is not actually working (it's giving garbage / crashing).
One thing I am wondering: I am now passing the address of an integer, but this int is a loop variable, so that is only a local variable that I suppose is cleaned up at the end of STRtree_new.
So if we want to be able to access those integers in STRtree_query we might need to store them on the STRtree object? (the python wrapper object, not the GEOS STRtree).

Right, you don't want to keep a pointer to a local variable that has gone out-of-scope. You can see how it's handled in sf here: https://github.com/r-spatial/sf/blob/master/src/geos.cpp#L398

If the geometries you're putting in the tree are stored in fixed-size array, and you need to get the index when you query the tree (instead of getting the geometry directly), you can still store the geometry pointer in the tree and recover the index via pointer arithmetic from the head of the geometry array.

store the geometry pointer in the tree and recover the index via pointer arithmetic

I think this might not work, since the incoming array we need to use for indexing may have geometries that we do not add to the tree (they may include Python None values for non-geometries, which we treat as NULL here and don't add to tree); thus the pointer offsets in the tree would be for only those geometries added to the tree.
But, if there is something I'm missing, this would be a clever way of avoiding a redundant array of indexes.

Not missing anything. This would only work if all the geometries in the contiguous array are added to the tree.

What is the advantage to using resizable vectors here?

Yeah, I did it mostly out of consistency (to not use a mixture of kvec and plain arrays). And, not having to store the size separately is nice (in general, for the tree_indexes we don't actually need it, that's true). But I know here it has a fixed size, that's also the reason I resized it up front.
But I agree that using a plain array here would be nice (now, using C++ instead of C would probably even be nicer for such things .. ;)).

I think this might not work, since the incoming array we need to use for indexing may have geometries that we do not add to the tree

We indeed don't add each geometry to the tree, but looking more closely, we are actually adding something to _geoms for each element (just a NULL in case of emtpy/missing geometries). So pointer arithmetic with _geoms could actually work I think.
I am only not sure how to do this in the query_callback function, as this does not have access to the full array. It receives the address of the item to be inserted, but to calculate its "index", I also need the address of the first element of the _geom array, which the query_callback function doesn't know?

I also need the address of the first element of the _geom array, which the query_callback function doesn't know?

You'd have to pass both the start of the geom array and the result vector to the callback by wrapping them in a struct. Something like this:
struct callback_userdata {
  GEOSGeometry* geom_array;
  npy_intp_vec* query_indexes;
};

void query_callback(void* item, void* user_data) {
  struct callback_userdata* ud = (struct callback_userdata*) user_data;
  size_t item_index = ((GEOSGeometry*) item) - ud->geom_array;

  kv_push(npy_intp, ud->query_indexes, item_index);
}

Not sure if it's worth the complexity.

New idea (testing now):

store _geoms as an array of GeometryObjects that we malloc / free instead of resizable vector
store _size on the STRtreeObject struct so that we know the size of that array at various places (some potential confusion vs count that is already there, which is the count of geometries added to the tree, whereas _size is the size of _geoms, which is the size of the input array )
on insert to the tree, pass the address of the GeometryObject
in query_callback, push the address of a GeometryObject onto a resizeable vector of GeometryObject*s
use pointer offsets from the head of _geoms to calculate an index when we need it (either to return indexes or to get underlying GEOS geometry for predicate tests)

I'm getting some results from the pointer math that I don't completely understand (never used pointer math directly before).
Given _geoms is an array of GeometryObject* and that GeometryObject* has a size of 8 (on my machine), and given these addresses:

head of _geoms: 0x7f8f52c3fb00
first geometry: 0x7f8f52c3fb00
second geometry: 0x7f8f52c3fb08 (offset by 8 from head of _geoms)

When I calculate the offset of the second geometry like geom - (GeometryObject*)_geoms (otherwise compiler error comparing GeometryObject* to GeometryObject**), I get back 0 instead of 1.
When I calculate what the address would be by incrementing the pointer (GeometryObject*)_geoms + 1 => 0x7f8f52c3fb20 (offset by 32 from head of _geoms).
Perhaps I'm missing a type cast somewhere?

I think int index = geom - _geoms[0] would work.

I think I figured it out, just needed to be more explicit about calculating the offsets ourselves and not relying on the compiler to infer the correct item size when using subtraction in this case:
char* head_ptr = (char*)_geoms;
char* geom_ptr = (char*)geom;  // e.g., 2nd geom in array
npy_intp geom_index = (npy_intp)((geom_ptr - head_ptr) / sizeof(GeometryObject*));

This now gives me the correct indices back out.
I think I might have fallen afoul of the C standard behavior around subtraction only being well defined when the elements are of the same array, and by the time I was running the subtraction (after first adding a geometry to a resizeable vector in query_callback) these were likely no longer considered part of the same array.

Sorry for the slow follow up here, and thaks @brendan-ward for picking it up! I actually had a version locally with the suggestion of @dbaston, but only the minimal change, your PR is much more comprehensive change, so closing this PR as superseded by #265


Use initializer callbacks for useState

Explanation of Change

This PR improves the app to use initializer callbacks for useState in E/App. Also, there is a new eslint rule PR - https://github.com/Expensify/eslint-config-expensify/pull/138.
Fixed Issues

$ https://github.com/Expensify/App/issues/53322
PROPOSAL: N/A
Tests

src/components/DatePicker/CalendarPicker/index.tsx

Submit an expense and click on the date field.
Verify the date is set for today.

src/components/VideoPlayer/BaseVideoPlayer.tsx

Upload a video and click on a newly posted message.
Verify the video is playing.

src/pages/Debug/DebugDetailsDateTimePickerPage.tsx

Open the report debug page.
Click on the lastVisibleActionCreated row.
Verify the date and time is set properly.

src/pages/Debug/ReportAction/DebugReportActionCreatePage.tsx

Open the debug report action creating page.
Verify the initial report is previewed properly.

src/pages/Debug/TransactionViolation/DebugTransactionViolationCreatePage.tsx

Open the debug transaction violation creating page.
Verify the initial form is set properly.

src/pages/ReimbursementAccount/ReimbursementAccountPage.tsx

Open the reimbursement account page.
Verify the continue button works properly.

src/pages/home/report/ReportActionsList.tsx

Open a report page.
Verify report actions are displayed correctly.

src/pages/iou/request/step/IOURequestStepAttendees.tsx

Create any expense.
Verify it works properly.

src/pages/settings/Profile/CustomStatus/StatusClearAfterPage.tsx

Open the "Clear after" status page.
Change the value.
Verify it works properly.

src/pages/settings/Subscription/CardSection/CardSection.tsx

Open the subscription page.
Verify it works properly.

src/pages/workspace/companyCards/assignCard/TransactionStartDateStep.tsx

Open the transaction state date page.
Verify it works properly.

[x] Verify that no errors appear in the JS console

Offline tests

Same as tests.
QA Steps

// TODO: These must be filled out, or the issue title must include "[No QA]."
Same as tests.

[x] Verify that no errors appear in the JS console

PR Author Checklist

[x] I linked the correct issue in the ### Fixed Issues section above
[x] I wrote clear testing steps that cover the changes made in this PR

[x] I added steps for local testing in the Tests section
[x] I added steps for the expected offline behavior in the Offline steps section
[x] I added steps for Staging and/or Production testing in the QA steps section
[x] I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[x] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
[x] I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).

[x] I included screenshots or videos for tests on all platforms
[x] I ran the tests on all platforms & verified they passed on:

[x] Android: Native
[x] Android: mWeb Chrome
[x] iOS: Native
[x] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[x] MacOS: Desktop

[x] I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
[x] I followed proper code patterns (see Reviewing the code)

[x] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
[x] I verified that comments were added to code that is not self explanatory
[x] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[x] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method

[x] If any non-english text was added/modified, I used JaimeGPT to get English > Spanish translation. I then posted it in #expensify-open-source and it was approved by an internal Expensify engineer. Link to Slack message:

[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is either coming verbatim from figma or has been approved by marketing (in order to get marketing approval, ask the Bug Zero team member to add the Waiting for copy label to the issue)
[x] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[x] I verified the JSDocs style guidelines (in STYLE.md) were followed

[x] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[x] I followed the guidelines as stated in the Review Guidelines
[x] I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
[x] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[x] I verified any variables that can be defined as constants (ie. in CONST.ts or at the top of the file that uses the constant) are defined as such
[x] I verified that if a function's arguments changed that all usages have also been updated correctly
[x] If any new file was added I verified that:

[x] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[x] If a new CSS style is added I verified that:

[x] A similar style doesn't already exist
[x] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))

[x] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[x] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[x] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[x] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[x] If the PR modifies the UI (e.g. new buttons, new UI components, changing the padding/spacing/sizing, moving components, etc) or modifies the form input styles:

[x] I verified that all the inputs inside a form are aligned with each other.
[x] I added Design label and/or tagged @Expensify/design so the design team can review the changes.

[x] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[x] I added unit tests for any new feature or bug fix in this PR to help automatically prevent regressions in this user flow.
[x] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.

Screenshots/Videos

Android: Native

Android: mWeb Chrome

iOS: Native

iOS: mWeb Safari

MacOS: Chrome / Safari

MacOS: Desktop

Does this cover all the changes where we use this incorrectly?

Reviewer Checklist

[ ] I have verified the author checklist is complete (all boxes are checked off).
[ ] I verified the correct issue is linked in the ### Fixed Issues section above
[ ] I verified testing steps are clear and they cover the changes made in this PR

[ ] I verified the steps for local testing are in the Tests section
[ ] I verified the steps for Staging and/or Production testing are in the QA steps section
[ ] I verified the steps cover any possible failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[ ] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)

[ ] I checked that screenshots or videos are included for tests on all platforms
[ ] I included screenshots or videos for tests on all platforms
[ ] I verified tests pass on all platforms & I tested again on:

[ ] Android: Native
[ ] Android: mWeb Chrome
[ ] iOS: Native
[ ] iOS: mWeb Safari
[ ] MacOS: Chrome / Safari
[ ] MacOS: Desktop

[ ] If there are any errors in the console that are unrelated to this PR, I either fixed them (preferred) or linked to where I reported them in Slack
[ ] I verified proper code patterns were followed (see Reviewing the code)

[ ] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick).
[ ] I verified that comments were added to code that is not self explanatory
[ ] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[ ] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method
[ ] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[ ] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is either coming verbatim from figma or has been approved by marketing (in order to get marketing approval, ask the Bug Zero team member to add the Waiting for copy label to the issue)
[ ] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[ ] I verified the JSDocs style guidelines (in STYLE.md) were followed

[ ] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[ ] I verified that this PR follows the guidelines as stated in the Review Guidelines
[ ] I verified other components that can be impacted by these changes have been tested, and I retested again (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar have been tested & I retested again)
[ ] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[ ] I verified any variables that can be defined as constants (ie. in CONST.ts or at the top of the file that uses the constant) are defined as such
[ ] If a new component is created I verified that:

[ ] A similar component doesn't exist in the codebase
[ ] All props are defined accurately and each prop has a /** comment above it */
[ ] The file is named correctly
[ ] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[ ] The only data being stored in the state is data necessary for rendering and nothing else
[ ] For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
[ ] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
[ ] All JSX used for rendering exists in the render method
[ ] The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

[ ] If any new file was added I verified that:

[ ] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[ ] If a new CSS style is added I verified that:

[ ] A similar style doesn't already exist
[ ] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG)

[ ] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[ ] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[ ] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[ ] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[ ] If the PR modifies the UI (e.g. new buttons, new UI components, changing the padding/spacing/sizing, moving components, etc) or modifies the form input styles:

[ ] I verified that all the inputs inside a form are aligned with each other.
[ ] I added Design label and/or tagged @Expensify/design so the design team can review the changes.

[ ] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[ ] For any bug fix or new feature in this PR, I verified that sufficient unit tests are included to prevent regressions in this flow.
[ ] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.
[ ] I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots/Videos

Android: Native

Android: mWeb Chrome

iOS: Native

iOS: mWeb Safari

MacOS: Chrome / Safari

MacOS: Desktop

:hand: This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release.

@rezkiy37 Changes look good to me but can you please add more thorough test for the status clear page as it was migrated to the useOnyx?

@mountiny, done 🙂 Does it look good now?

This PR is failing because of issue #53662

This PR is failing because of issue #53662

The PR is not failing. https://github.com/Expensify/App/issues/53662 is expected.


Enable flattened arrays

Binary saves up to 80% size-wise comparing to JSON. Plus additional deserialization time.
In the KITTI dataset the difference is not visible since it only has ~2KB polygon/polyline data.

There is on place where we are unnesting from before, https://github.com/uber/xviz/commit/ba1442a71f5262107ccc4c95bb32d5e84fbaf9a7
which we should remove.
The rest looks good.


Can i use my own game environnement ?

Hi,
I want to use Dopamine with my own game environnement.
I don't use asterix, pong ou atari environnement.
Dopamine allows to do stuff like that ?
Thanks

Yes, although at the moment you will need to modify some Atari-specific parameters (convolutional network, observation shape, etc.) I believe most of that code is in place – but stay tuned for an update that will make all of this easier.

Hi Marc,
Thank you for the answer!
So I think that I need to clone atari folder (https://github.com/google/dopamine/tree/master/dopamine/atari) and I change Atari-specific parameters in preprocessing, run_experiment.py and in train.py , it's correct?
Merry Christmas !

Yes, that's right. Look around the open/closed issues here, I believe other people have generate similar code. Good luck!


Comment with a random emoji 🚀

unstale


Automatically submit form when you click "select all"

I often click select all and then have to scroll down and press "query (GET)". to reduce button clicks for this common workflow, i'd prefer either of the follwowing:

Have the chrome plugin auto-fill where:1=1 and outFields:* when you get to the page by default (if there are not any pre-filled values from a previous search). Then i only have to click one button on the page ("Query GET")
When I click Select All button, fill the form and automatically submit the form for me.

Just published a new version to the Chrome store with this option. The buttons Select All, Select all but Geometry, and Get Count Only will trigger this selection.
You can set whether these buttons trigger a Get request, post request, or nothing in the options page for the tool.

nice! Thanks @raykendo! looking forward to checking it out.


Set up src_kt directory, get the ball rolling with Crdts in Kotlin.

This includes the creation of a new source root for kotlin-based implementation of storage/crdt/etc. arcs components.
It also includes the beginnings of the port of CRDTs to kotlin, with the base classes/interfaces as well as CrdtCount (because it was easy and that made it a good candidate for a first go, not because it was particularly useful)
Questions for reviewers:

Do I need to add copyright comments to the files yet? If so - do you know if there a better tool to do this than editing my AS new-file template settings? (I notice in typescript files there seems to be a @license thing..)
🤞 that the travis modifications work - if not: since the src_kt is its own workspace, I think I need to cd to src_kt before running bazel test, will investigate ways to do that if travis breaks.

Do I need to add copyright comments to the files yet? If so - do you know if there a better tool to do this than editing my AS new-file template settings? (I notice in typescript files there seems to be a @license thing..)

http://go/releasing/preparing#license-headers -- something there might help.

crossed_fingers that the travis modifications work - if not: since the src_kt is its own workspace, I think I need to cd to src_kt before running bazel test, will investigate ways to do that if travis breaks.

It'd be much better if you could keep the same root WORKSPACE. There's a few reasons for this:

bazel build ... from the root directory will still pick up BUILD files in the src_kt subdirectory, and those will fail to resolve.
It should make builds/tests a bit a little faster (especially on travis), since bazel can do its whole parallelism thing while it's building the whole repo, rather than forcing it to do it in series for each workspace.
We'll probably eventually want to depend on this code from elsewhere in the repo.


docu for users and devs extended

Closes #106

@schote I know this is very basic but can you think of anything which is missing but absolutely necessary (or easy to add)? If you have an example of a good documentation of another repo, this would also be very helpful.

I think scikit-learn has a good documentation. I think as soon as we have our first release and a release strategy (in case this is planned at some point) we should add:

versioning to indicate the version the documentation refers to
changelog
timeline to indicate what future implementations are planned (could be helpful if one needs to make a decision whether or not the package is suitable or will be suitable)

Besides that I would add some minimal examples. I think you also already have that in mind with the notebooks, right @ckolbPTB ?

scikit-learn has a very nice documentation - might be a bit too ambitious for us but let's see.
Yes, the examples will be done via automatically creating jupyter notebooks PR #118
I added an issue regarding the versionen and release strategy #125
@schote Could you do a quick review of these changes such that I can merge them before the hackathon next week? thanks!


[Crash] DateTime dialog adds an extra month and day to the initial value

A datetime dialog defined as following
@Composable
fun datetimeDialog(
    title: String?,
    onSelectDate: (LocalDateTime) -> Unit,
    initial: LocalDateTime? = null, // kotlin datetime
    startWithTime: Boolean = false,
    maxYear: Int = MaxYear,
    minYear: Int = MinYear,
): UseCaseState {
    val state = rememberUseCaseState()
    DateTimeDialog(
        header = remember(title) { title?.let { Header.Default(it) } },
        state = state,
        config = DateTimeConfig(icons = LibIcons.Rounded, maxYear = maxYear, minYear = minYear),
        selection = remember(initial, startWithTime, onSelectDate) {
            DateTimeSelection.DateTime(
                selectedTime = initial?.time?.toJavaLocalTime(),
                selectedDate = initial?.date?.toJavaLocalDate(),
                startWithTime = startWithTime,
                onPositiveClick = { onSelectDate(it.toKotlinLocalDateTime()) }
            )
        }
    )

    return state
}

When shown, starts with month and day values incremented by one.
For example, a value of 5/9/23 (verified as being correct) when passed to the dialog, upon opening, shows that the selected date is "Jun 10 2023" which means that the day and month values are bigger than the actual ones by one. Clicking "OK" without changing anything updates values to correct ones, but reopening the dialog results in another increment, and this can be repeated indefinitely. After reaching month 12, the dialog displays the month value as unset. Clicking "OK" will crash the app.
Stacktrace
java.lang.NullPointerException
   at com.maxkeppeler.sheets.date_time.DateTimeState.onFinish(DateTimeState.kt:160)
   at com.maxkeppeler.sheets.date_time.DateTimeViewKt$DateTimeView$4$1.invoke(DateTimeView.kt:140)
   at com.maxkeppeler.sheets.date_time.DateTimeViewKt$DateTimeView$4$1.invoke(DateTimeView.kt:140)
   at com.maxkeppeker.sheets.core.views.ButtonsComponentKt$ButtonsComponent$1$3$1.invoke(ButtonsComponent.kt:97)
   at com.maxkeppeker.sheets.core.views.ButtonsComponentKt$ButtonsComponent$1$3$1.invoke(ButtonsComponent.kt:97)
   at androidx.compose.foundation.ClickablePointerInputNode$pointerInput$3.invoke-k-4lQ0M(Clickable.kt:781)
   at androidx.compose.foundation.ClickablePointerInputNode$pointerInput$3.invoke(Clickable.kt:775)
   at androidx.compose.foundation.gestures.TapGestureDetectorKt$detectTapAndPress$2$1.invokeSuspend(TapGestureDetector.kt:255)
   at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
   at kotlinx.coroutines.DispatchedTaskKt.resume(DispatchedTask.kt:177)
   at kotlinx.coroutines.DispatchedTaskKt.dispatch(DispatchedTask.kt:166)
   at kotlinx.coroutines.CancellableContinuationImpl.dispatchResume(CancellableContinuationImpl.kt:476)
   at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl(CancellableContinuationImpl.kt:510)
   at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl$default(CancellableContinuationImpl.kt:499)
   at kotlinx.coroutines.CancellableContinuationImpl.resumeWith(CancellableContinuationImpl.kt:368)
   at androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine.offerPointerEvent(SuspendingPointerInputFilter.kt:672)
   at androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNodeImpl.dispatchPointerEvent(SuspendingPointerInputFilter.kt:548)
   at androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNodeImpl.onPointerEvent-H0pRuoY(SuspendingPointerInputFilter.kt:570)
   at androidx.compose.foundation.AbstractClickablePointerInputNode.onPointerEvent-H0pRuoY(Clickable.kt:739)

I suppose the error is that the month and day selection starts from 1, not zero :D

You may want to start writing tests since the library has 380 stars now.

To be honest, I wanted to open a pr, but struggled to understand the codebase. It's quick for you, but I've spent about an hour trying to figure the source of an issue. But if I find a possible improvement, for example, regarding my other issue, I'll open a pr. Please don't take this as an accusation

There is only one location where the initial date and time is being used to calculate something. Your guess was correct, as the offset was wrong for selecting the corresponding value option by index, due to the day and month starting from 0.

Can you please publish a version with this change included when you have free time?

@maxkeppeler Friendly bump. No one can publish a version except you


Q: Function download from external artifact repository after v0.5

Due to regulatory requirements we store all artefacts in a central registry. Therefore we configured the Function CR to download from the external URL:
apiVersion: compute.functionmesh.io/v1alpha1
kind: Function
metadata:
  name: exclamation-mark
spec:
  python:
    pyLocation: https://our-artefact-registry.corp/repository/1st-app-rel/neuron/application-neuron-playground/function/exclamationMark/67a3a0518462ac397ab33c1d68d9daf3c08448e3/exclamationMark-67a3a0518462ac397ab33c1d68d9daf3c08448e3.zip
    py: exclamationMark.zip
  ...

This mechanism stopped working after 0.5 by introducing the init-container and pulsarctl for download. Is there a way to still use the framework or do we need to introduce a custom init-container for external function download?

This issue has been fixed in PR #515 and is included in the v0.8.0 release, you can try Function Mesh v0.8.0.

init container is introduced in v0.7.0, so I think they are not related
could you show the result of the describe pod command of your working functions?

pod created on v0.5 => working:
[root@ip-10-223-213-160 /]# oc describe pod exclamation-mark-function-0
Name:         exclamation-mark-function-0
Namespace:    prod01-neuron-playground
Priority:     0
Node:         ip-10-223-213-77.eu-central-1.compute.internal/<IP_ADDRESS>
Start Time:   Mon, 21 Nov 2022 15:22:24 +0000
Labels:       app=function-mesh
              component=function
              controller-revision-hash=exclamation-mark-function-7c849c58fd
              name=exclamation-mark
              namespace=prod01-neuron-playground
              statefulset.kubernetes.io/pod-name=exclamation-mark-function-0
Annotations:  k8s.ovn.org/pod-networks:
                {"default":{"ip_addresses":["<IP_ADDRESS>/23"],"mac_address":"0a:58:0a:82:14:1d","gateway_ips":["<IP_ADDRESS>"],"ip_address":"<IP_ADDRESS>/...
              k8s.v1.cni.cncf.io/network-status:
                [{
                    "name": "ovn-kubernetes",
                    "interface": "eth0",
                    "ips": [
                        "<IP_ADDRESS>"
                    ],
                    "mac": "0a:58:0a:82:14:1d",
                    "default": true,
                    "dns": {}
                }]
              k8s.v1.cni.cncf.io/networks-status:
                [{
                    "name": "ovn-kubernetes",
                    "interface": "eth0",
                    "ips": [
                        "<IP_ADDRESS>"
                    ],
                    "mac": "0a:58:0a:82:14:1d",
                    "default": true,
                    "dns": {}
                }]
              openshift.io/scc: anyuid
              prometheus.io/port: 9094
              prometheus.io/scrape: true
Status:       Running
IP:           <IP_ADDRESS>
IPs:
  IP:           <IP_ADDRESS>
Controlled By:  StatefulSet/exclamation-mark-function
Containers:
  pulsar-function:
    Container ID:  cri-o://b1103ad0cf4f04b477945017261dedfe364ff319579bd577a0c544686cb492ca
    Image:         streamnative/pulsar-functions-python-runner:<IP_ADDRESS>-rc10
    Image ID:      cortex-docker-group.artifacts.rbi.tech/streamnative/pulsar-functions-python-runner@sha256:77d9a446681b02bdb7cecbfaf70e8256acc633c1d34ae1807989411f718520d9
    Ports:         9093/TCP, 9094/TCP
    Host Ports:    0/TCP, 0/TCP
    Command:
      sh
      -c
      /pulsar/bin/pulsar-admin --admin-url $webServiceURL --auth-plugin $clientAuthenticationPlugin --auth-params $clientAuthenticationParameters functions download --path https://myartefactrepo.com560 ß iuz/nexus/repository/1st-app-rel/neuron/application-neuron-playground/function/exclamationMark/67a3a0518462ac397ab33c1d68d9daf3c08448e3/exclamationMark-67a3a0518462ac397ab33c1d68d9daf3c08448e3.zip --destination-file exclamationMark.zip && SHARD_ID=${POD_NAME##*-} && echo shardId=${SHARD_ID} && sed -i.bak 's/^  Log.setLevel/#&/' /pulsar/instances/python-instance/log.py && mkdir -p /pulsar/conf/python-log/ && echo "[loggers]
      keys=root

      [handlers]
      keys=stream_handler

      [formatters]
      keys=formatter

      [logger_root]
      level=INFO
      handlers=stream_handler

      [handler_stream_handler]
      class=StreamHandler
      level=INFO
      formatter=formatter
      args=(sys.stdout,)

      [formatter_formatter]
      format=[%(asctime)s] [%(levelname)s] %(filename)s: %(message)s
      datefmt=%Y-%m-%d %H:%M:%S %z" > /pulsar/conf/python-log/python_instance_logging.ini && exec python /pulsar/instances/python-instance/python_instance_main.py --py exclamationMark.zip --logging_directory logs/functions --logging_file exclamation-mark-${SHARD_ID} --logging_config_file /pulsar/conf/python-log/python_instance_logging.ini --install_usercode_dependencies true --instance_id ${SHARD_ID} --function_id ${SHARD_ID}-d7507621-4072-482c-9732-48d884dd58c6 --function_version 0 --function_details '{"tenant":"public","namespace":"default","name":"exclamation-mark","className":"exclamationMark.ExclamationFunction","autoAck":true,"parallelism":1,"source":{"typeClassName":"[B","inputSpecs":{"persistent://public/default/py-function-input-topic":{}},"subscriptionPosition":"EARLIEST"},"sink":{"typeClassName":"[B","topic":"persistent://public/default/py-function-output-topic","forwardSourceMessageProperty":true},"resources":{"cpu":1,"ram":"1100000000"},"componentType":"FUNCTION"}' --pulsar_serviceurl $brokerServiceURL --max_buffered_tuples 100 --port 9093 --metrics_port 9094 --expected_healthcheck_interval -1 --cluster_name kubernetes --client_auth_plugin $clientAuthenticationPlugin --client_auth_params $clientAuthenticationParameters --use_tls false
    State:          Running
      Started:      Mon, 21 Nov 2022 15:22:27 +0000
    Ready:          True
    Restart Count:  0
    Limits:
      cpu:     200m
      memory:  1100M
    Requests:
      cpu:     100m
      memory:  1100M
    Environment Variables from:
      functionmesh-pulsar-config          ConfigMap  Optional: false
      functionmesh-authentication-config  Secret     Optional: false
    Environment:
      POD_NAME:  exclamation-mark-function-0 (v1:metadata.name)
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-qchgp (ro)
      /var/run/secrets/pulsar/auth-token from token-volume (rw)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  token-volume:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  functionmesh-authentication-secret
    Optional:    false
  kube-api-access-qchgp:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
    ConfigMapName:           openshift-service-ca.crt
    ConfigMapOptional:       <nil>
QoS Class:                   Burstable
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/memory-pressure:NoSchedule op=Exists
                             node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason                  Age    From               Message
  ----     ------                  ----   ----               -------
  Normal   Scheduled               3m20s  default-scheduler  Successfully assigned prod01-neuron-playground/exclamation-mark-function-0 to ip-10-223-213-77.eu-central-1.compute.internal
  Warning  ErrorAddingLogicalPort  3m21s  controlplane       failed to ensurePod prod01-neuron-playground/exclamation-mark-function-0 since it is not yet scheduled
  Normal   AddedInterface          3m18s  multus             Add eth0 [<IP_ADDRESS>/23] from ovn-kubernetes
  Normal   Pulled                  3m18s  kubelet            Container image "streamnative/pulsar-functions-python-runner:<IP_ADDRESS>-rc10" already present on machine
  Normal   Created                 3m18s  kubelet            Created container pulsar-function
  Normal   Started                 3m18s  kubelet            Started container pulsar-function

pod with the same Function resource on v0.7 => failing:
[root@ip-10-223-213-165 /]# oc describe pod exclamation-mark-function-0
Name:         exclamation-mark-function-0
Namespace:    prod01-neuron-playground
Priority:     0
Node:         ip-10-223-213-164.eu-central-1.compute.internal/<IP_ADDRESS>
Start Time:   Mon, 21 Nov 2022 11:43:15 +0000
Labels:       app=function-mesh
              app.kubernetes.io/instance=exclamation-mark-function
              app.kubernetes.io/name=exclamation-mark-function
              component=function
              compute.functionmesh.io/app=function-mesh
              compute.functionmesh.io/component=function
              compute.functionmesh.io/name=exclamation-mark
              compute.functionmesh.io/namespace=prod01-neuron-playground
              controller-revision-hash=exclamation-mark-function-5c4984c4d
              name=exclamation-mark
              namespace=prod01-neuron-playground
              statefulset.kubernetes.io/pod-name=exclamation-mark-function-0
Annotations:  k8s.ovn.org/pod-networks:
                {"default":{"ip_addresses":["<IP_ADDRESS>/23"],"mac_address":"0a:58:0a:80:0c:0e","gateway_ips":["<IP_ADDRESS>"],"ip_address":"<IP_ADDRESS>/...
              k8s.v1.cni.cncf.io/network-status:
                [{
                    "name": "ovn-kubernetes",
                    "interface": "eth0",
                    "ips": [
                        "<IP_ADDRESS>"
                    ],
                    "mac": "0a:58:0a:80:0c:0e",
                    "default": true,
                    "dns": {}
                }]
              k8s.v1.cni.cncf.io/networks-status:
                [{
                    "name": "ovn-kubernetes",
                    "interface": "eth0",
                    "ips": [
                        "<IP_ADDRESS>"
                    ],
                    "mac": "0a:58:0a:80:0c:0e",
                    "default": true,
                    "dns": {}
                }]
              openshift.io/scc: anyuid
              prometheus.io/port: 9094
              prometheus.io/scrape: true
Status:       Pending
IP:           <IP_ADDRESS>
IPs:
  IP:           <IP_ADDRESS>
Controlled By:  StatefulSet/exclamation-mark-function
Init Containers:
  downloader:
    Container ID:  cri-o://ae550c2d4594d709729ecf63b278e06bbe0bc2a58621bcf01e9b9fc8c4f0ca1b
    Image:         streamnative/pulsarctl:<IP_ADDRESS>
    Image ID:      cortex-docker-group.artifacts.rbi.tech/streamnative/pulsarctl@sha256:314add6a76c06571a3db99655c31672710260ebbcbb13a8b07ae60adfadf89c3
    Port:          <none>
    Host Port:     <none>
    Command:
      sh
      -c
      /usr/local/bin/pulsarctl --auth-plugin $clientAuthenticationPlugin --auth-params $clientAuthenticationParameters --admin-service-url $webServiceURL functions download --path https://myartefactrepo.com/nexus/repository/1st-app-rel/neuron/application-neuron-playground/function/exclamationMark/67a3a0518462ac397ab33c1d68d9daf3c08448e3/exclamationMark-67a3a0518462ac397ab33c1d68d9daf3c08448e3.zip --destination-file /pulsar/download/exclamationMark.zip
    State:          Waiting
      Reason:       CrashLoopBackOff
    Last State:     Terminated
      Reason:       Error
      Exit Code:    1
      Started:      Mon, 21 Nov 2022 12:22:58 +0000
      Finished:     Mon, 21 Nov 2022 12:22:58 +0000
    Ready:          False
    Restart Count:  12
    Environment Variables from:
      functionmesh-pulsar-config          ConfigMap  Optional: false
      functionmesh-authentication-config  Secret     Optional: false
    Environment:
      HOME:  /tmp
    Mounts:
      /pulsar/download from downloader-volume (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-5bz5x (ro)
Containers:
  pulsar-function:
    Container ID:
    Image:         streamnative/pulsar-functions-python-runner:<IP_ADDRESS>-rc10
    Image ID:
    Ports:         9093/TCP, 9094/TCP
    Host Ports:    0/TCP, 0/TCP
    Command:
      sh
      -c
      SHARD_ID=${POD_NAME##*-} && echo shardId=${SHARD_ID} && sed -i.bak 's/^  Log.setLevel/#&/' /pulsar/instances/python-instance/log.py && mkdir -p /pulsar/conf/python-log/ logs/functions && echo "[loggers]
      keys=root

      [handlers]
      keys=stream_handler

      [formatters]
      keys=formatter

      [logger_root]
      level=INFO
      handlers=stream_handler

      [handler_stream_handler]
      class=StreamHandler
      level=INFO
      formatter=formatter
      args=(sys.stdout,)

      [formatter_formatter]
      format=[%(asctime)s] [%(levelname)s] aa %(filename)s: %(message)s
      datefmt=%Y-%m-%d %H:%M:%S %z" > /pulsar/conf/python-log/python_instance_logging.ini && exec python /pulsar/instances/python-instance/python_instance_main.py --py exclamationMark.zip --logging_directory logs/functions --logging_file exclamation-mark-${SHARD_ID} --logging_config_file /pulsar/conf/python-log/python_instance_logging.ini --install_usercode_dependencies true --instance_id ${SHARD_ID} --function_id ${SHARD_ID}-b3ecc924-381e-480c-8cb5-fdcccee79fb7 --function_version 0 --function_details '{"tenant":"public","namespace":"default","name":"exclamation-mark","className":"exclamationMark.ExclamationFunction","autoAck":true,"parallelism":1,"source":{"typeClassName":"[B","inputSpecs":{"persistent://public/default/py-function-input-topic":{}},"subscriptionPosition":"EARLIEST"},"sink":{"typeClassName":"[B","topic":"persistent://public/default/py-function-output-topic","forwardSourceMessageProperty":true},"resources":{"cpu":1,"ram":"1100000000"},"componentType":"FUNCTION"}' --pulsar_serviceurl $brokerServiceURL --max_buffered_tuples 100 --port 9093 --metrics_port 9094 --expected_healthcheck_interval -1 --cluster_name kubernetes --client_auth_plugin $clientAuthenticationPlugin --client_auth_params $clientAuthenticationParameters --use_tls false
    State:          Waiting
      Reason:       PodInitializing
    Ready:          False
    Restart Count:  0
    Limits:
      cpu:     200m
      memory:  1100M
    Requests:
      cpu:     100m
      memory:  1100M
    Environment Variables from:
      functionmesh-pulsar-config          ConfigMap  Optional: false
      functionmesh-authentication-config  Secret     Optional: false
    Environment:
      POD_NAME:  exclamation-mark-function-0 (v1:metadata.name)
    Mounts:
      /pulsar/exclamationMark.zip from downloader-volume (rw,path="exclamationMark.zip")
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-5bz5x (ro)
      /var/run/secrets/pulsar/auth-token from token-volume (rw)
Conditions:
  Type              Status
  Initialized       False
  Ready             False
  ContainersReady   False
  PodScheduled      True
Volumes:
  token-volume:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  functionmesh-authentication-secret
    Optional:    false
  downloader-volume:
    Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:
    SizeLimit:  <unset>
  kube-api-access-5bz5x:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
    ConfigMapName:           openshift-service-ca.crt
    ConfigMapOptional:       <nil>
QoS Class:                   Burstable
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/memory-pressure:NoSchedule op=Exists
                             node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason                  Age                    From               Message
  ----     ------                  ----                   ----               -------
  Normal   Scheduled               42m                    default-scheduler  Successfully assigned prod01-neuron-playground/exclamation-mark-function-0 to ip-10-223-213-164.eu-central-1.compute.internal
  Warning  ErrorAddingLogicalPort  43m (x6 over 52m)      controlplane       failed to ensurePod prod01-neuron-playground/exclamation-mark-function-0 since it is not yet scheduled
  Normal   AddedInterface          42m                    multus             Add eth0 [<IP_ADDRESS>/23] from ovn-kubernetes
  Normal   Pulling                 42m                    kubelet            Pulling image "streamnative/pulsarctl:<IP_ADDRESS>"
  Normal   Pulled                  40m                    kubelet            Successfully pulled image "streamnative/pulsarctl:<IP_ADDRESS>" in 1m38.750798097s
  Normal   Created                 37m (x5 over 39m)      kubelet            Created container downloader
  Normal   Started                 37m (x5 over 39m)      kubelet            Started container downloader
  Normal   Pulled                  37m (x4 over 39m)      kubelet            Container image "streamnative/pulsarctl:<IP_ADDRESS>" already present on machine
  Warning  BackOff                 2m23s (x172 over 39m)  kubelet            Back-off restarting failed container

I will test the change in the next days. Because we are deploying via OLM going back to the chats require some efforts. Big thx a lot @jiangpengcheng for for having a look and the quick fix!

@MarkusNeuron
although pr is merged, it still needs to be released and publish new pulsarctl images, and then the default downloader image tag should be updated or users must specify the new downloader image tag to resolve the issue
I will reopen this for tracking

Thanks for clarifing @jiangpengcheng . Switched on Friday to the Helm based installation and have 0.8 now running. Are the fixed images are already pushed? Just found the 0.8 tag. If available I can start testing and giving feedback.

After upgrading to 0.8 via OLM I can confirm that the download works without the init container.


Update kodi for async and local push via websocket

Description:
This PR converts Kodi to async. Included is an async interface to the Kodi websockets API, which allows push notifications of state changes from Kodi to Home Assistant.
I wasn't able to find a Python asyncio JSON-RPC library that also supports Python 3.4, so JSON-RPC methods are included here. If there is a library I can switch to it, or this functionality can be moved to a helper object if we expect to reuse it.
This change requires that 'http://' be removed from user configurations. This brings Kodi in line with other platform configurations. Code is included to strip it where found and issue a log warning.
Pull request in home-assistant.github.io with documentation (if applicable): home-assistant/home-assistant.github.io#<home-assistant.github.io PR number goes here>
Example entry for configuration.yaml (if applicable):
media_player:
  - platform: kodi
    host: <IP_ADDRESS>
    websocket_port: 9090

Checklist:
If user exposed functionality or configuration variables are added/changed:

[ ] Documentation added/updated in home-assistant.github.io

If the code communicates with devices, web services, or third-party tools:

[x] Local tests with tox run successfully. Your PR cannot be merged unless tests pass
[x] New dependencies have been added to the REQUIREMENTS variable (example).
[x] New dependencies are only imported inside functions that use them (example).
[x] New dependencies have been added to requirements_all.txt by running script/gen_requirements_all.py.

So, I addressed the config name, and changed the timeouts.
I'm having some issues getting the aiohttp websockets working though, which is why I originally went with the other library. Right now, when I try to open a websocket connection, it's just timing out. It's pretty much identical to the other implementation, so I'm not sure where it's going wrong. My guess is that aiohttp's websockt support is broken on python 3.4, but I'm not sure. All of the examples shown use the asyncio context manager.

why can't you use jsonrpcclient?

@Hellowlol I don't believe it supports asyncio?

It does, but it uses async await. My bad thought I should mention it, I was fooled by the support tags :)

@Hellowlol so it does, 3.5 only I'm afraid!

Yeah, it's been tough finding async libs that are still compatible with 3.4. The extra json-rpc code here would definitely be on the chopping block if 3.4 support is ever dropped.
As far as the websockets goes, is anyone able to get it working with aiohttp? Otherwise I'm going to switch it back to the other websockets library.

I switched this PR back to the websockets library for now, since that's the actual working implementation. If someone wants to try and work with aiohttp, they can start from the commit above it.

@armills just tried it with Python 3.5 and I'm seeing a timeout also;
import aiohttp
import asyncio

async def main(loop):
    async with aiohttp.ClientSession(loop=loop) as client:
        async with client.ws_connect('ws://<IP_ADDRESS>:9090/jsonrpc') as ws:
            async for msg in ws:
                print(msg)
                if msg.type == aiohttp.WSMsgType.TEXT:
                    print(msg)
                elif msg.type == aiohttp.WSMsgType.CLOSED:
                    break
                elif msg.type == aiohttp.WSMsgType.ERROR:
                    break

loop = asyncio.get_event_loop()
loop.run_until_complete(main(loop))

Have you tested you current impl?

OK. Yes, the current implementation with the websockets library works on my system. It sounds like there might be a bug in the aiohttp websockets logic unrelated to the python version.

Yeah, async context manager will not work on 3.4 but it work with try, finally like we does on some points.

Would you be able to split this PR into two PRs? One to make media player async and one to make Kodi async?

Yeah, that's no problem.

The async media player portion has been moved to #4995.

Closing the PR in this form. See this comment for the roadmap to reintroduce this functionality.


IPv6 support for ipam default ip provider

Description:  IPv6 support for ipam default ip provider
Changes Proposed in PR:

updated ipam CRD schema to support ipv6 addresses
Enhanced error logging

Fixes: Internal CONTCNTR-2994, #31
General Checklist

[x] Updated Added functionality/ bug fix in release notes
[x] Added examples for new feature

CRD Checklist

[x] Updated required CR schema

/azp run


Need to test loading from different spots in the tree

I think my workaround for cwd might only work for the first level this module is pulled into, but that won't work for gulp which will bring it in at the vinyl-fs tier.

Maybe use https://github.com/andreypopp/get-callsite-dirname


Merge pull request #1 from parrt/master

update fork

@go-bears is there a change you're suggesting?


UX Assurance: Left nav bar wrong colour during ministry CFR

Describe the bug in current situation
When I logon as a ministry user (specifically LBR in this case) and open a request that is in the CFR stage, the left nav bar displays as a red-orange. It should be displaying as pink

Impact of this bug
I have seen this multiple times but have not tested extensively enough to know if it's just some ministry users, all ministry users, or all users (including IAO). Also haven't tested whether the colour is dependent on the timeliness/overdue status of records.
It doesn't appear to impact functionality from what I can see, but will be confusing for users who are used to the colour coding of states
Chance of Occurring (high/medium/low/very low)
High
Pre Conditions: which Env, any pre-requesites or assumptions to execute steps?
Request must have CFR in the overdue state
Steps to Reproduce
Steps to reproduce the behavior:

Go to any request in Call for Records, when the call for records is overdue
See Banner colour Change
See format change of overdue notification

Expected Behaviour:

No colour change to left hand nav bar when CFR or LDD is overdue
When overdue - the number should just turn into a negative value, instead of saying "Records late by" (see Jackie's image below) eg: if CFR is 2 days late, it would show "CFR Due in  -2 days"

cc: @JHarrietha-AOT

@mpilchar I can see that the Record is late by 13 days and that is the reason for the red color of the left nav bar and is potentially not a bug. @JHarrietha-AOT can confirm. Thanks!

@aparna-aot I should have mentioned that I ran this by @JHarrietha-AOT before drafting the bug ticket. She confirmed there shouldn't be colour coding in the bar for the overdue status of the selected state. If the call for records were late then it would show in the negative in the text at the bottom

@mpilchar @JHarrietha-AOT the red color shows based on #452 user story.

@divyav-aot Thanks for flagging this. Maybe we discuss it at stand-up today. Personally I am not a fan of it and did not include this in any designs.

@m-prodan This is how it is in the design, what do you think of following this with the idea that numbers go into the negative

Yes - that would be consistent with how remaining days is shown. I will update the expected behaviour for the bug ticket now

Actually @JHarrietha-AOT - have a look at how it looks in the app right now when a request is overdue:

It looks like we don't use a negative value for an overdue LDD anyways

I think we have a ticket in our backlog addressing that format already - see #945 - should we just limit this to the colour change?

@m-prodan Sounds good, lets just limit this ticket to the colour change

@divyav-aot  @nkan-aot @aparna-aot - from refinement this morning, we are scoping this ticket to just the colour change. The wording/UI of the banner and counters are already addressed in another bug/enhancement ticket

Thanks for tackling this one, Nick.


The required attribute 'FormType' is missing

When I replace the part shown here for the XML manifest, I got this error: "The required attribute 'FormType' is missing" when adding the manifest.
And if I copy the whole manifest from here, I got an other error related to the schema.

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

ID: 1d5b713c-9caa-31d3-45fa-5f8b13771e59
Version Independent ID: c0b8e4c0-1523-25e5-e357-086a905d10f5
Content: Extract entity strings from an Outlook item
Content Source: docs/add-ins/extract-entity-strings-from-an-item.md
Product: outlook
GitHub Login: @jasonjoh
Microsoft Alias: jasonjoh

@mrik23: Sorry that you're hitting these issues. However, can you provide more detailed repro steps (including the content of your manifest after you replaced the rules part) for the first issue and what the schema error was for the second issue?
For example, with your first issue, did your manifest include  under FormSettings (with this or other valid form type value)? Thanks.

Closing as there has been no response.


Short solution needed: "Redis exists usage" (lua-redis)

Please help us write most modern and shortest code solution for this issue:
Redis exists usage (technology: lua-redis)
Fast way
Just write the code solution in the comments.
Prefered way

Create pull request with a new code file inside inbox folder.
Don't forget to use comments to make solution explained.
Link to this issue in comments of pull request.

How to check if key exists


Feat: add d3 dashboard project to next curriculum

[x] I have read freeCodeCamp's contribution guidelines.
[x] My pull request has a descriptive title (not a vague title like Update index.md)
[ ] My pull request targets the master branch of freeCodeCamp.
[x] None of my changes are plagiarized from another source without proper attribution.
[x] All the files I changed are in the same world language (for example: only English changes, or only Chinese changes, etc.)
[x] My changes do not use shortened URLs or affiliate links.

Well, I think this is ready to go @scissorsneedfoodtoo. I'm convinced the tests are failing from the challenges in one of the other projects. Likely, the calorie counter.

Can we push a fix to the failing challenge on the next-curriculum branch, and then get this rebased

We essentially want each commit on the next-curriculum to be pristine.

Awesome, thank you for all of your hard work on this @moT01. Yes, some of the RPG game tests broke with the new loop protection. They were fixed in https://github.com/freeCodeCamp/freeCodeCamp/pull/38128/files.
Seems like everything is passing now that you rebased. I'll pull this down and do a quick check locally before merging.

Thanks for your patience and again for all of your hard work @moT01. Tested this locally and ran through about 1/3 of the challenges. Everything LGTM :+1: :+1:


Improved Selectable Properties

Changes:

Revised SelectableProperty mixin:

Added addChoices(), hasChoices(), choiceLabel()
Added parseChoices() and parseChoice() for use in subclasses
Cleaned up method documentation;

LangProperty: Revised use of available locales, added support for customizing choices
ObjectProperty:

Added pagination to further limit the number of selectable choices
Added choiceLabel(), hasChoices(), parseChoices(), parseChoice(), and exception for addChoices()
Moved preparation of collection loader (filters and orders) from choices() and hasChoices() to new collectionModelLoader()
Changed modelLoader() visibility from private to protected
Modified modelLoader() to accept an optional object type
(e.g., useful for extended classes that might provide <optgroup> support)

Updated unit tests

Highlights / (Possibly) Breaking Changes:

Formatting of choice structure moved from choice() to parseChoice().
Update any custom selectable properties, accordingly.

Coverage decreased (-0.5%) to 27.714% when pulling 82a09f1b2eb8786c139aa559b0e856fe4b66a769 on mcaskill-patch-4 into c02af32190c1651458ae47be8cf78365fdf8ba52 on master.

Coverage decreased (-1.0%) to 27.286% when pulling c3463bcd84283e70d0ecab405933de76cb7cb831 on mcaskill-patch-4 into c02af32190c1651458ae47be8cf78365fdf8ba52 on master.

Coverage decreased (-1.0%) to 27.286% when pulling 1af10ad5d97ce6254dc1e2af85c9f58c99b6efeb on mcaskill-patch-4 into 457038bca9da70d40a5305e6c784458f808d462c on master.

Coverage decreased (-1.0%) to 27.286% when pulling 1af10ad5d97ce6254dc1e2af85c9f58c99b6efeb on mcaskill-patch-4 into 457038bca9da70d40a5305e6c784458f808d462c on master.

Coverage decreased (-0.9%) to 27.314% when pulling 5dec2736b89ca87bec2e363648888e5ab32ccd40 on mcaskill-patch-4 into 457038bca9da70d40a5305e6c784458f808d462c on master.

Coverage decreased (-0.9%) to 27.314% when pulling 5dec2736b89ca87bec2e363648888e5ab32ccd40 on mcaskill-patch-4 into 457038bca9da70d40a5305e6c784458f808d462c on master.

Coverage increased (+2.3%) to 30.273% when pulling 6fea335a90dd2ad762ae838aaa62b42d775254b9 on mcaskill-patch-4 into 3700dcf9ad6f3b2fcefda5fc7d57156c0213e2cf on master.

Coverage increased (+2.3%) to 30.273% when pulling 92ed38ba0b12094abf56d0e7121bf7fd2f83fb40 on mcaskill-patch-4 into 3700dcf9ad6f3b2fcefda5fc7d57156c0213e2cf on master.

Coverage increased (+9.0%) to 36.914% when pulling bca9659e175e7fc48f2300d7fdfcf61d16ee6014 on mcaskill-patch-4 into 3700dcf9ad6f3b2fcefda5fc7d57156c0213e2cf on master.

Coverage increased (+12.6%) to 40.49% when pulling c2cbe81cebb63386ccce85693410054e478f929f on mcaskill-patch-4 into 3700dcf9ad6f3b2fcefda5fc7d57156c0213e2cf on master.

Coverage increased (+12.6%) to 40.49% when pulling ede8d0091e4a37978abccfd0c2e411c725287486 on mcaskill-patch-4 into 3700dcf9ad6f3b2fcefda5fc7d57156c0213e2cf on master.

@mducharme Ready for review


Endpoint /api/application [POST] [Required for UI screen Publish Service]

Description
Values

Description:
Endpoint to create a new application.

Screen that needs the endpoint:
Publish Service

Endpoint required:
/api/application

Call Type:
POST

Request Data Type:
application/json

Request Parameters:
Check schema

Shema:
{
  "name" : "String",
  "description" : "String"
}

Done, need testing

The Endpoint will return an JSON object:
{
  "applicationId" : "1594",
  "processInstanceId" : "372547"
}

Is this still open?

Closing.


Hi team

Can you anyone share how to make shop online concept (shipping integration )using amazon Api
Please share any one...
Regards
Anandharaj.R
Android Developer
SQindia pvt Ltd

Hi, This is the AWS Android SDK Samples repo, specifically containing samples for accessing AWS services from Android platform and not related to shipping integration. Please post your question on Amazon forums where this can be better answered. Thanks.

Thanks rohandubal


PF4 Toolbar layout

Describe the bug
Add the PF4 Toolbar layout to the OCP/AWS tables. The only visual piece to this is the margins and location of actions.
Note that the use of the PF4 Toolbar layout may not work with the PF3 filter results row? If this is not possible, we may need to wait until the PF4 filter is available, end of February.
To Reproduce
Steps to reproduce the behavior:

Go to 'AWS/OCP Details'
See error

Expected behavior
Still need to use the PF3 filter for now. This provides functionality to show applied filter 'chips', in the filter results row, just below the filter input box.

FYI @nlcwong
I attempted to use the PF4 toolbar layout with the old, PF3 results and filter components. It's too much work styling the PF3 components and have it look decent. It doesn't help us with the margins needed for the PF3 results row component.
IMO, we're better waiting for the PF4 filter to be delivered in late February. Adding a layout really doesn't help us here. We really need the PF4 filter component.

Closing in favor of https://github.com/project-koku/koku-ui/issues/208


Error: internal error in Neon module: called Option::unwrap() on a None value

I have a project with just:
yarn add express

But then this example.ts does not work, I narrowed this down from a larger working codebase:
import { NextFunction, Request, Response } from "express";
import express from "express";

app.use((err: Error, req: Request, res: Response, next: NextFunction) => {
});
app.use(
  express.static()
);

The error I get is:
Error: internal error in Neon module: called `Option::unwrap()` on a `None` value

@zxti Did you confitured swc to parse typescript?
I've written an integration test for this, but it worked.
https://github.com/kdy1/swc/blob/3e6bb4603d10a61a533717e0ce9f8e8ca0ebdac9/tests/projects.rs#L5-L27
You need .swcrc like
{
  "jsc": {
    "parser": {
      "syntax": "typescript",
      "tsx": false,
      "decorators": false
    }
  }
}

Btw, I need to improve error message.

Yes I did, I also now see the main difference is that my .swcrc specifies this (since I have to run in node using @swc/register):
  "module": {
    "type": "commonjs"
  }


fix(pnpm): disable frozen lockfile

Hey! I hit a bug in the GitHub Action when using pnpm:
 ERR_PNPM_OUTDATED_LOCKFILE  Cannot install with "frozen-lockfile" because pnpm-lock.yaml is not up-to-date with packages/config/package.json
Note that in CI environments this setting is true by default. If you still need to run install in such cases, use "pnpm install --no-frozen-lockfile"
Error: Process completed with exit code 1.

How to fix it:
In CI environments, pnpm always runs with the --frozen-lockfile option. In this case, we attempt to run pnpm install to update the lockfile, so we need to be explicit about it, and as the error tells us, we need to use the --no-frozen-lockfile option.

Thanks a lot @HorusGoul 🙌🏻

My first attempt creating a tag and release using only the github.com UI but it should be available as 0.2.1 if all went well.


[static] no such file or directory

Hi,
I am using the cgr.dev/chainguard/static:latest in my multi-stage Dockerfile after I build a golang application.
When I try to run the finished image (the docker build runs without an error), I get following error message:
exec /golang-server: no such file or directory
If I change the FROM to alpine:latest, everything works as expected. No other changes in the code or Dockerfile.
Here is the content of my Dockefile.
# syntax=docker/dockerfile:1
FROM cgr.dev/chainguard/go:1.19.3 AS build

WORKDIR /app

COPY go.mod ./
COPY go.sum ./
RUN go mod download
COPY *.go ./
RUN go build -o /golang-server

#FROM alpine:latest
#COPY --from=build /golang-server /golang-server
#EXPOSE 8080
#CMD ["/golang-server"]

FROM cgr.dev/chainguard/static:latest
COPY --from=build /golang-server /golang-server
EXPOSE 8080
CMD ["/golang-server"]

The "server" logic is in this repository: https://github.com/dirien/hello-server.git

There's a few things going on here.
The error isn't saying your binary isn't there, but that the underlying C library isn't there. We intentionally don't ship this library in the static image and instead expect it to be compiled into the binary. You can do this by passing some more arguments to go, but an even easier option is to try out the ko project: https://github.com/ko-build/ko. ko will take care of compiling your program and copying it into the static image.
Alternatively, you can use an image that already has the C library. You've compiled against musl (use the go:1.19.3-glibc image if you'd rather use glibc) so the musl-dynamic image will work i.e:
FROM cgr.dev/chainguard/musl-dynamic:latest

@dirien since you dont use C so you can compile with CGO_ENABLED=0, then it will work.
RUN CGO_ENABLED=0 go build -o /golang-server

Hi @amouat and @tuananh,
thanks to both of you for the great feedback! I went with the CGO_ENABLED=0 way as the Dockerfile way is only for the Azure Container Registry task, which only supports Dockerfile.
@amouat, I already have ko in place in this repo, huge fan of this!


Redesign: Indicator Overview Page

As per the redesign, at the national level and for each geographical region, we should have an overview page which contains an overview section and the indicators table.
The header of this page should contain the geo and date selector widgets.
Overview
[TODO design screenshot]

We should display cases and deaths per capita rates, and their change in the past 7 days
A small map showing cases rates
An indicator summary paragraph, "Across all top-level indicators, X are trending worse (-Z% in the past 7 days) and Y are trending better (+W% in the past 7 days)

Indicators Section
[TODO design screenshot]

At the top of the indicators section, there should be a indicator filter, which will filter indicators by type (Behavior, Early, Late, National COVID Survey)
Next is the indicator table, containing columns:

Indicator name: Name and an arrow which affords to the user that more details can be shown
Change last 7 days
Per 100K
Trend: a sparkline with a red line indicating the selected data

Indicator summary
This will be broken out into a separate issue.

@Letsgohyde additional design assets should be attached to this issue.

* Per 100K

for most indicators we have percentages not per 100k values

see also https://deploy-preview-731--cmu-delphi-covidcast.netlify.app/mobile/?date=20210213

Hey @sgratzl here's the updated indicators table with the right arrow added to the row.
https://www.figma.com/file/IiYu74VmEi4GVS4bnYaTd6/Delphi-Site-Redesign?node-id=2158%3A52915

and when the dropdown filter is selected display the different sources.

Hey @sgratzl - I'm going to screenshot the current implementation and leave feedback in Figma so we can keep a dialog going. I've copied the current design next to the current implementation so we can see them side by side.
Follow this link and turn on comments : https://www.figma.com/file/IiYu74VmEi4GVS4bnYaTd6/Delphi-Site-Redesign?node-id=2280%3A59198
great work so far, hope this feedback helps.

Screenshot of the side by side :)


ci: Update release-dagger-cue GHA workflow from the main branch

This adds a few workflow improvements and makes them both the same.
Only the workflow from the cue-sdk branch is supposed to be run, as per the check.
This is a follow-up to:

https://github.com/dagger/dagger/pull/3533

Same review as https://github.com/dagger/dagger/pull/3533#pullrequestreview-1154716794, pushing it through.


WIP: Change file structure, add a cli.py file, update pre-commit, cleanup poetry config  - 156

[Auto generated]
Number: [#156]

firewatch(Sr4yZ)[PR 156]: Closing issue for PR: WIP: Change file structure, add a cli.py file, update pre-commit, cleanup poetry config .
PR was closed.


convert to python simpleclass

[ ] Constructor
[ ] Attribute getters aka property
[ ] Pushed events -> destroy
[ ] Pushed events -> update
[ ] private transition actions -> initializer
[ ] private transition actions -> updateX

This is solved for SImpleClass


General CI conventions for travis/bitrise/circleci

Per @mikemorris's comment:

I rigged up a script to only publish on git tags for mapbox-gl-native, but unfortunately it doesn't support Bitrise, as it relies on the TRAVIS_TAG environment variable. Figuring out some convention that works across Travis CI, Bitrise and Circle CI here would be great.

This would be rad.

First let's get other ci working. So first actions are #23 and #24

I'm comfortable sticking with the 'commit message to publish' since, as mentioned, hooking into tags is ci platform specific. Mapbox GL Native does auto-publishing on tags and this recently broke and was tricky to fix when moving from travisci to circle. So, I'm going to close this as non-actionable with the additional thought that downstream developers could implement this but it currently feels out of scope for node-cpp-skel.


FEAT: PUSHY Notifier

adds support for PUSHY Notifier

Thanks, I know there are only two file changes at the end, but I think there are too many commits which will mess up my git log. I don't know to merge. 🙉

yeah 😄 I'm not sure either
I'll have a look later and will mark this PR as "ready for review" when the commits are cleaned up 😉

@louislam: Just click Squash and merge
https://docs.github.com/en/github/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/merging-a-pull-request#merging-a-pull-request-on-github

cool, thanks @Saibamen 👍

@louislam: Just click Squash and merge
https://docs.github.com/en/github/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/merging-a-pull-request#merging-a-pull-request-on-github

Nice! @philippdormann It's OK. @Saibamen provided a solution for that.

Ar... Wait, still 74 commits, lol

yeah, that's fine. "Squash and merge" will combine them into 1

Just click on it :D

It worked! Thanks.


Confusing probe_type on ProbeFactory

I find this field on the DebugProbeInfo very confusing now:
https://github.com/probe-rs/probe-rs/blob/6b60cdbb5d614b995cc554a2622147ee5990f2d0/probe-rs/src/probe.rs#L678
I've used this to filter on the ProbeType, but after #2027 this now is a reference to a ProbeFactory, and it's not obvious at all anymore how it should be used.
It's still possible to filter probes now with something like this:
    probe_info.probe_type
                    == (&probe_rs::probe::cmsisdap::CmsisDapFactory
                        as &dyn probe_rs::probe::ProbeFactory)

but this feels very unergonomic.

If trait_upcasting ever gets stabilized, we'll be able to do probe_info.probe_type.is::<CmsisDapFactory>(). There was no indication at all what this was used for except to print the probe family in probe-rs list 🤷♂

The sample code I posted was actually wrong, it needs to be something like this:
       (&*probe_info.probe_type).type_id()
                    == TypeId::of::<probe_rs::probe::cmsisdap::CmsisDapFactory>()


🚚 Move tokens to this repository

It's time to moove !
State of art 🎨
We are actually using 3 differents repos :

popoyoko-ui => The main repository
tokenscript => A proof of concept on how we can manage tokens
popoyoko-branding => Was initialy a place to manage assets but this is actually where @ballaoui push tokens

The need ✨
We should only use one repo for storing the tokens in the default config => popoyoko-ui
The process 🚚
Since the main branch is locked we have the perfect setup to not break everything. But let's get further!
We should setup branches especially for designer ✋@ballaoui.
tokens branch
A branch where @ballaoui will be able to test through a workflow if his tokens are correct (it means that style-dictionary is able to build everything), and the UI as well!
Once this branch is able to merge, @Emerson452 can merge it on develop.
@Emerson452 you will need to teach @ballaoui how to make a pull request 😉
Final check before consuming tokens builds aka variables
A last workflow will try to build variables from tokens. Then the UI will try to build consuming theses variables.
The result 🎉
Effortless checkup workflow where nobody loose work

@ballaoui will be able to push frequently with no needs to check branch before pushing
@Emerson452 will be able to use tokens provided by the CI with no regression risk => eg. If @ballaoui remove a token used by the UI, the workflow will not able to merge.

Work better, work together 🤜💥🤛

@ Emerson to be continued !

Architecture change
The Popoyoko-UI-token-generator is the repository containing the style dictionary configuration.

Is this right ? May I close this one ? @LouiFi


Implement double jumping

Blocked by #1
Acceptance Criteria

the player should be able to double jump to reach taller parts of the level

Closing this issue. I think we should scope this out and focus on completing power ups


Bug in Firebase/php-jwt

Our implementation base on the current versions (using Firebase/php-jwt 5.x) works fine. Composer does not update to the latest 6.x as the latest change (added supporting version 6.x) does not have a version tag.
When we manually update to Firebase/php-jwt 6.x we get this error:

Unfortunately Firebase/php-jwt 5.x has a major security issue so updating is very much recommended. Although called by oauth-azure the problem might be in the firebase lib. Thus, I will post this issue there as well.
Including the support of the latest firebase lib version should maybe delayed until this issue is fixed.

Could you please test with the current version in master? I have merged a bunch of hanging PRs, primarily https://github.com/TheNetworg/oauth2-azure/pull/159 should fix it. I aim to release a new version of the library on Friday.

The change will be deployed on a test env in the next hours. Then I can give feedback.

When switching to 2.0 some weeks ago we found a scope definition is mandatory and specified 'scope' => 'openid profile email' which worked then. Now we are deploying the latest version with 'scopes' => ['openid','profile','email'] and will come back with the result soon.

I took a look into the code. The culprit seems to be the method getJwtVerificationKeys (line 336) in https://github.com/TheNetworg/oauth2-azure/blob/master/src/Provider/Azure.php that returns an array of string public keys instead of instances of Firebase\JWT\Key. When I change the two lines with $keys[$keyinfo['kid']] = $publicKey; to $keys[$keyinfo['kid']] = new Key($publicKey, 'RS256'); (and import the Firebase\JWT\Key class), the error vanishes. I don't know if this is the best solution, but at least it works for me.

The provider keys could also converted to a Firebase\JWT\Key before this call: https://github.com/TheNetworg/oauth2-azure/blob/56e0776776476da0b2de8cb7c201bfe7dec7aee1/src/Token/AccessToken.php#L28
not sure where is best to do it though

The error remains with the latest versions:

Do you think you could submit a PR for this? I am leaving for the next 4 days and will be on a very limited connection. Thanks!

@hajekj sure: #163

I have merged this, can you please test against dev-master branch, once you confirm, I will release as 2.1.1. Thanks!

Thanks for confirming! I have released v2.1.1 - https://github.com/TheNetworg/oauth2-azure/releases/tag/v2.1.1 with the fix. Thanks for the PR @spackmat!


make lint fails on main

$ make lint
--> Running golangci-lint
--> Running markdownlint
x/qgb/README.md:223:205 MD034/no-bare-urls Bare URL used [Context: "https://github.com/celestiaorg..."]
make: *** [lint] Error 1

Optional we may consider making markdown-lint a required check. I'm hesitant b/c sometimes we have markdown link check flakes