benchcab user feedback :)

Hi Claire and Sean,
I used benchcab for CABLE-GW and CABLE trunk versions a few months ago and found two things were a bit annoying. CABLE-GW and the trunk version are expected different namelist files. I am wondering whether you could let benchcab read different namelist files for different CABLE versions, which will give more freedom to the model tests. Additionally, when I submitted the benchcab outputs and ran an analysis on modelevaluation.org, I could not figure out which simulation was which version of CABLE since there wasn't a specific version name given to modelevaluation.org. It might be good if we could let the user name their versions and show these names in modelevaluation.org. Many thanks!

Regarding the issue around specifying the namelist file for each branch, I guess the question is do we want to run namelist configurations that have a lot of differences compared to the base namelist file? If yes, then using the patch and patch_remove to specify the namelist will be pain to configure and we are probably better off specifying the path to a namelist file. I guess this could come up if we want to test against a namelist configuration that was tuned for a specific model version?
For the modelevaluation.org issue, I guess we will have to bring that up with Gab? It would be great if we can dump issues relating to modelevaluation.org on somewhere like GitHub. @ccarouge @bschroeter can we put the analysis scripts we use inside a GitHub repo?

@SeanBryan51 For modelevaluation.org, there is already a forum topic we can use to collect the issues. Otherwise, we aren't working on the analysis scripts, this is done by Gab, John and Isaac, so it would be for them to decide where they want the issues.

@bibivking I am reticent to allow users to give their own namelist files. This is because the core focus for benchcab is to provide standard scientific evaluation for CABLE. By saying "standard", we want to ensure the namelist options used for one evaluation are the same as for another. This is to ensure the evaluations are comparable.
Obviously, benchcab is more flexible than that. We had to take into account various use cases (test with a new feature in one branch only, test with one branch based on an older version). This means branches can be run with different namelist options. But I think it is important to make it obvious what is different between the namelists used in the 2 branches. And I feel we would lose that by allowing to give the namelists directly.
We discussed this a bit with @SeanBryan51 and @bschroeter and here are our ideas:

use a simpler syntax for patch. Remove the { and simply use - in front of options.
or give the patch via a namelist "subset" file. Instead of giving a full namelist file, we could have a subset namelist file that only contains the options that are different for that branch. This might be the easiest for users as it's the same format as the CABLE namelist file.

For the plots, I totally agree. Especially, the legend talks about "integration branch" which is not used anymore (it was in the original design by Martin). We will pass on to Gab and co.
But would that help if the filenames included the branch name as well instead of only _R#?

It could be possible to enforce standardisation in the work directory used to run benchcab, i.e. a bench_example specifically for running the standard set of tests. The appropriate namelist configurations to use in the standard tests could be committed to Git. Could this get the best of both worlds if users want to use their own configurations by creating a modified bench_example?

@SeanBryan51 this does not work for a new feature. Contributions to CABLE for a new feature need to run benchcab with a patch on one of the branch. But that patch must be restricted to the new feature options only.

I agree it would take some reworking of how we configure the ensemble of tasks in bench_example/config.yaml.
I think if I had to start over, I would like to do something like this in config.yaml:
realisations:
  - name: trunk
    path: trunk
  - name: bar
    path: branches/Users/foo/bar

fluxsite:
  tasks:
    matrix:
      namelists: [S0.nml, S1.nml, ...]
      forcings: [AU-Tum, AU-How, ...]
      realisations:
        - trunk
        - bar:
            patch:
              cable:
                my_feature: True
    # Or if we just want to force each realisation to use a specific namelist file
    matrix:
      forcings: [AU-Tum, AU-How, ...]
      realisations:
        - trunk:
          namelist: S0.nml
        - bar:
          namelist: my_bespoke_namelist.nml
  # Or if we do not want to specify a matrix:
  tasks:
    - task_name: task_a
      namelist: S0.nml
      forcing: AU-Tum
      realisation: trunk
    - task_name: task_b
      namelist: my_bespoke_namelist.nml
      forcing: AU-Tum
      realisation: bar

I think this ties to our current reflection on format for supported configurations so I'm putting it as a medium priority. I'm not sure we'll implement a change soon but we may decide on an exact change we'll want to make.


Use pip --user and ANSI color codes instead of termcolor

The title pretty much sums up everything. But to elaborate, using sudo pip package breaks the distro's package manager by conflicting with the files the package manager manages. I've done this before and it lead to broken updates.
Usage of ANSI color codes is better because:

It doesn't depend on any external package
It is more portable and the code is more self-contained
As a bonus, it follows the terminal's colorscheme which might be a plus for someone who loves eye candies

@iiPlasma I haven't read PEP8 before. I will read it and help with your PEP8 branch.

Should I change termcolor to ANSI color codes in pep8 branch? I'm currently changing the code to pep8 as possible

@Th3-Hum4n Nah, keep it as is. I like to keep the features isolated, makes for cleaner commits and better releases. Ye but sounds good C:

@Th3-Hum4n If you do start work on Pep8, make a Pr into that branch instead of master, in fact this should be a PR to feature/colors instead of master as well

@iiPlasma I did some work on PEP8 yesterday. I will create a new PR.
And using the compare feature seemed kind of nice to me because you "can" see what changes I made.

@Th3-Hum4n i recommend you pull and just re implement colors, pep8 is fully implemented now so we're all good for new features C:


Add netcoreapp2.1

The issue was specifically running tests on Linux if I remember correctly. dotnet test was failing I believe, but maybe its not an issue anymore.

Ran the tests locally on Linux, seems to be working fine without the PlatformTarget.


this.projectFlat([-38, 145]) returns NaN

Hi,
I'm using this as part of Apache Superset and the coordinates in my dataset ([-38, 145]) seem to be returning [201.95555555555555, NaN] which is causing an error in Superset. The culprit seems to be Math.tan returning a negative value and that then being passed to Math.long.
Are you able to confirm my data is correct, i.e. [-38, 145] are valid lat/long coordinates, or whether this is a bug?
Cheers,
Matt

@lyonzy Coordinates are specified as [lng, lat] (think of [x, y] to remember the order)

lng goes from -180 to 180.
lat goes from -85.051129 to 85.051129.

For details see e.g. https://en.wikipedia.org/wiki/Web_Mercator.
I updated the docs on master accordingly: https://github.com/uber-common/viewport-mercator-project/blob/master/docs/get-started/coordinates.md.

Ahh, I just realised I had Latitude/Longitude swapped in the Superset dashboard... facepalm
Thanks for your help though :)


Support .NET 6, update OTel

Update projects and pipeline to build or test .NET 6 as necessary
Include .NET 6 fixes already in main
Upgrade OTel to 1.2 beta to get around restriction of < 6.0.0 for Microsoft.Extensions.Logging

/azp run Steeltoe.All

This PR (and a 3.1.2 release) are going to hold for a bit longer in hopes that the Open Telemetry metrics spec can be finalized in short order and a GA of OTel 1.2.0 can be released


Map randomly resetting position on render / onRegionChange triggered multiple times on loading

As per title, the map is randomly resetting the position to your current country zoomed out during initial (or next) render.
During rendering onRegionChange is always called 4 times and then onRegionChangeComplete.
It's funny that both cases, when it works and when it doesn't work, the console log is the same and onRegionChange is always passing the same region.
Check the first screenshot is correct, the second is wrong.

In my situation I'm living in London, but I set my simulator to have a location in Zurich.
We tested this and it happens the same with someone in Zurich, when it doesn't work it will change the region to the entire Switzerland zoomed out.
<MapView
  region={this.props.region}
  onRegionChangeComplete={region => this.props.changeRegion(region)}

I've tried also with initialRegion and a mix of followUserLocation and showsUserLocation but doesn't make any difference.
How can I workaround this?

Any other advice?
Thank you 😄

I couldn't find a workaround for this issue as well, I had to change the functionality instead :(

I have the same issue - can anyone suggest how to work around this issue?

@orliesaurus for now I'm setting a boolean state value of regionSet , and not allowing on onRegionChange to be called until regionSet has been called. This is working for me but is quite ugly.

@dabit3 do you mind sharing your code to achieve that?

Thank you

@mtt87  sure. It looks something like this:
state = {
  regionSet: false,
}

componentDidMount() {
  navigator.geolocation.
    getCurrentPosition(position => {
      const { latitude, longitude } = position.coords
      const region = {
        ...this.state.region,
        latitude,
        longitude
      }
      this.setState({ region, regionSet: true })
    })
}

onRegionChange = (region) => {
  if (!this.state.regionSet) return;
  this.setState({
    region
  });
}

This doesn't work anymore since last version (which is still bugged!)
I'll check if it's something related to onMapReady callback

Confirmed, it works with onMapReady and remove it from componentDidMount()
          onMapReady={() => {
            this.setState({ regionSet: true });
          }}

+1

Changing my region with both animateToCoordinate() and by manual dragging. Region changes are quite choppy with iOS11. I have tried many variations, best seems to update a local variable using onRegionChangeComplete() and then dispatch it with redux on onMapReady(). But to be honest... still choppy and unusable for production. Anyone knows what is the best practice for this? -- also opened this ticket on stackoverflow https://stackoverflow.com/questions/46371596/react-native-maps-with-redux-choppy-region-changes

I've had a similar problem and I think @mtt87's real issue here is writing region={this.props.region}.  You may want to bind props.region to initialRegion instead.

How will I be able to move the map then?

animateToRegion() and animateToCoordinate() worked well for me. I also think they provide a better UX since the navigation doesn't happen instantly. In your case, I think it may be better to use componentWillReceiveProps() to animate to coordinates on region change.

We might have different use cases, my map allows users to pan and move around, and I never move the map automatically.
Afaik that property is set into region, if you don’t set it, the map won’t move

experiencing same issue here...it wasnt happening while I was using initialRegion prop only but I need to change location using state.

dabit3's solutions with a tweak from mtt87 seems to have fixed the zoomout issues but now I am gonna have to look for a way to get current coordinates in code to use somewhere else...anyways thanks

To me best practice is: https://github.com/react-community/react-native-maps/issues/209#issuecomment-350907665


Open_Source_LLM Tool - Restore Dynamic List + Fixes

Description
Changes:

Restore Open_Source_LLM Tool Dynamic list functionality
Fixes: WS: 2806189, 2806307

All Promptflow Contribution checklist:

[x] The pull request does not introduce [breaking changes].
[x] CHANGELOG is updated for new features, bug fixes or other significant changes.
[x] I have read the contribution guidelines.
[x] Create an issue and link to the pull request to get dedicated review from promptflow team. Learn more: suggested workflow.

General Guidelines and Best Practices

[x] Title of the pull request is clear and informative.
[x] There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, see this page.

Testing Guidelines

[x] Pull request includes test coverage for the included changes.

Please kindly revert your changes based on the latest main and try to avoid unnecessary changes to common code. The purpose is to try not to affect other tools.

Please kindly revert your changes based on the latest main and try to avoid unnecessary changes to common code. The purpose is to try not to affect other tools.

Please kindly revert your changes based on the latest main and try to avoid unnecessary changes to common code. The purpose is to try not to affect other tools.

Can you share more clarity on what you mean by this @chenslucky?
I've removed the changes from the common.py file.
For the revert of my changes - I don't follow? Are you asking me to rebase on the current main, or something else?

Can you share more clarity on what you mean by this @chenslucky? I've removed the changes from the common.py file. For the revert of my changes - I don't follow? Are you asking me to rebase on the current main, or something else?

I just saw that some codes looked like they were not changed on the latest code. Some codes seem to have been reverted back to their previous modifications. But after your confirmation, now I have no doubts and the current code seems to have no problems. Thanks.


custom navBar being rendered twice and to the bottom of the scene

Version
Tell us which versions you are using (react native 0.26 is required for v3):

react-native-router-flux v3.26.?
react-native v0.26.2

Expected behaviour
<Scene key="drawer" component={SideDrawer} tabs={true}>
     <Scene component={Home} key='home' title='Home' navBar={CommonHeader} hideNavBar={false}/>
     ...
</Scene>

I expected this to be placed first in the scene above the content. However it is being rendered twice
where one has the drawer context and the other doesnt
Actual behaviour
Once styled absolutely, when the drawer is open it is displayed under the navbar also it is not pushing it
to the side as expected
Note:

the header without the drawer context is displayed above when positioned absolutely, so i cant use my drawer button

Steps to reproduce

create a drawer with type="static"
add a custom navBar without adding position styling

i got  the same  problem  when i  want  to  renderTitle  and  renderLeftButton with  two different  components  which render twice
navBar={ ()=>{ return this.renderNavBar(); } }
...

<NavTitle title={'title'} style={style} />
...

I solve this problem by add some code at render() function in NavBar.js, see below:

thanks for the update.
but does it solve the header being displayed at the bottom?
seems like it would only solve it being displayed twice; a step forward nonetheless 👍

If you want to use both drawer and tabbar, maybe you should do this:
<Scene key="drawer" component={SideDrawer} > 							 	<Scene key="tabbar" component={TabBar} tabs={true}> 								      <Scene component={Home} key='home' title='Home' navBar={CommonHeader} hideNavBar={false}/> 								      ... 							    </Scene> 							</Scene>

i chose to turn off tabbar actually so maybe should edit post.. but when i do, it still displays to the bottom

if you want to use the component in navBar, you should let the component in position absolute like this:

please read the issue again. that is the problem

well, but i think if you want to use the component in navBar, it means you should recover the style by your self

the default style of the navbar is what you just showed me, that adds the weird behaviour of not being fluid when the drawer is open. as i said before, thats not what i want

Is there any update on this beside having it absolute?
@lwhiteley Have an example of what you did?

was this fixed or a solution provided?

@Rollan its as i said before,
in order to get away from the absolute style and had to put the header component at the top of the components I use for the Scenes. which is not preferable i guess

and when the drawer is open, how do i get it to move to the side with the rest of the scene?
that is my intended use case

This is mildly off topic, but since the people in this issue seem to have it squared away, I thought I'd ask:
I have a custom navBar component that loads correctly when I comment out my drawer and the drawer works fine, but the navBar does not load at all when the drawer is in the app (open or closed). I've tried rearranging hideNavBar and navBar onto different scenes, but no combination thereof seems to allow the drawer to appear and still have the navBar behind it.
<Router navBar={AppBar}>
...
    <Scene key="drawer" component={MaterialDrawer} initial={true} tabs={false}>
    <Scene key="loggedIn" component={LoggedIn} title="FitMango" hideNavBar={false} initial={true} type="replace"/>

The drawer and navbar all load correctly, so I have a feeling it's something to do with this chunk in my index file.


Support CDH 5.14.0

Success!

Success!

Success!

Success!

Success!

Success!

Success!

Success!

Success!

Success!

Success!


Navbar functionality implemetation

Current Behaviour :
Currently the navbar is static and doesn't have any selecting functionality.
Desired Behaviour :
Implementation of  a select-bar as in the original Amazon site.

Hey @Adithya-Sr  Thanks for opening the issue, do you want to work on this issue?

Sure @Kanika637 !

Go ahead @Adithya-Sr 🚀

Any updates @Adithya-Sr?

Really sorry for the late response @Kanika637 , I started working on the issue about 2 days ago but couldn't make much progress on it . If I don't make a pull request by today , You can assign it to someone else . I get it that I took a lot of time for this  ,sorry for that .I was stuck in a busy schedule, Hope you understand.

I completed upto this :
https://user-images.githubusercontent.com/97578285/194028564-bda16520-bff3-4ec0-933f-8e84919901ee.mp4
couldn't get that dynamic space allocation between the select component and the input component.

Really sorry for the late response @Kanika637 , I started working on the issue about 2 days ago but couldn't make much progress on it . If I don't make a pull request by today , You can assign it to someone else . I get it that I took a lot of time for this ,sorry for that .I was stuck in a busy schedule, Hope you understand.

Okay, @Adithya-Sr, We understand your concern, so what we can do is, just respond by today if you can complete the issue else we can assign it to somebody else.

I'd like to work on this issue. Assign it to me.

Great @ozair-dev , Go ahead🚀


Zuora review

BatchSource implementation:

[x] Implement core
[x] Implement Object parsing
[x] Implement Transformers
[x] Implement Splits
[x] Add objects
[x] Validators
[ ] Design doc update
[ ] Testing & Fixing small bugs
[ ] Integration tests

Also we should merge changes into develop. From feature/... branch.

moved everything to feature/zuora


[Fallback TextServer] Fix char to glyph conversion.

Fixes regressing from the MSDF fonts implementation.
Before:

After:

That could have been a good April Fools ;)

Thanks!


Locale data is mostly duplicates.

The localeData definition seems to have 11 arrays in it, and each array contains identical values.  If you open the locale-data.ts file and ctrl+f for AcornItem, you'll see what I'm talking about.
This file is 8.2MB, so if we can remove the duplicates the file should be reduced to about 0.75MB.

Not sure how this happened, just fixed. I am about to go through the new items from 9.5 and add translations.
See commit 3db03d9


replace default value for title by i18n version

suggestion for better internationlization

It appears that you prefer not to create the _index.md files for the node index pages. I have reverted the relevant i18n change (in update dccca17), so now the default i18n node titles will be used in cases where the title was not set in the node _index.md files.

Thank you!


Multiple driven errors and spi_tx_byte width mismatch truncation and ...

Hey,
First, complements... Very useful module :)!
I've been looking at integrating the SystemVerilog module in a project and came across a couple of problems (didn't simulate the design with this module in particular, so these are elaboration errors of my simulation tool (Cadence Xcelium) and linting tool.

Multiple driven errors: There are lots of multiple driven errors in the design. I can see that all signals have "initial values", for example: all the internal AXI signals, the states, synchronizers, ... Why do they have these initial values? Signals should be driven from reset or from an external module/testbench I would assume?
Width mismatch truncation: the spi_tx_byte signal is declared as 3 bits, considering the name I would assume that it should be 8-bits? The axi_rdata is assigned per 8-bits to the spi_tx_byte, but since this signal is only 3-bits, data gets lost (see code below)

end else begin // CMD_READ
    if (spi_tx_byte_idx <= 5) begin
        // null;
    end else if (spi_tx_byte_idx == 6) begin
        spi_tx_byte = axi_rdata[31:24];
    end else if (spi_tx_byte_idx == 7) begin
        spi_tx_byte = axi_rdata[23:16];
    end else if (spi_tx_byte_idx == 8) begin
        spi_tx_byte = axi_rdata[15:8];
    end else if (spi_tx_byte_idx == 9) begin
        spi_tx_byte = axi_rdata[7:0];
    end else begin

Blocking versus non-blocking statements: I can also see in the code that there is a lot of non-blocking and blocking assignments intermixed within the processes, just to confirm, this was done deliberately?

Looking forward to the answers, I have already made some modifications, have to test them with your test environment, but if all seems well I can provide a pull request.
Thanks.
ps. noticed that some of the things where already mentioned by #1.

that is correct, spi_tx_byte is 8b.  We did make this correction.I suspect that blocking vs non-blocking was not done deliberately, but the result of a VHDL-to-Verilog conversion. I did not make any changes to these and we have been using this code successfully for some time.Andy NortonComm Logic Design, IncOn Jul 21, 2024, at 2:11 AM, lmarien94 @.***> wrote:
Hey,
First, complements... Very useful module :)!
I've been looking at integrating the SystemVerilog module in a project and came across a couple of problems (didn't simulate the design with this module in particular, so these are elaboration errors of my simulation tool (Cadence Xcelium) and linting tool.
Multiple driven errors: There are lots of multiple driven errors in the design. I can see that all signals have "initial values", for example: all the internal AXI signals, the states, synchronizers, ... Why do they have these initial values? Signals should be driven from reset or from an external module/testbench I would assume?
Width mismatch truncation: the spi_tx_byte signal is declared as 3 bits, considering the name I would assume that it should be 8-bits? The axi_rdata is assigned per 8-bits to the spi_tx_byte, but since this signal is only 3-bits, data gets lost (see code below)
end else begin // CMD_READ
if (spi_tx_byte_idx <= 5) begin
// null;
end else if (spi_tx_byte_idx == 6) begin
spi_tx_byte = axi_rdata[31:24];
end else if (spi_tx_byte_idx == 7) begin
spi_tx_byte = axi_rdata[23:16];
end else if (spi_tx_byte_idx == 8) begin
spi_tx_byte = axi_rdata[15:8];
end else if (spi_tx_byte_idx == 9) begin
spi_tx_byte = axi_rdata[7:0];
end else begin
Blocking versus non-blocking statements: I can also see in the code that there is a lot of non-blocking and blocking assignments intermixed within the processes, just to be clear... Just to confirm, this was done deliberately?
Looking forward to the answers, I have already made some modifications, have to test them with your test environment, but if all seems well I can provide a pull request.
Thanks.
—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you are subscribed to this thread.Message ID: @.***>


feat: change authflow from token to code.

Implicit token flow does not support refresh tokens meaning the users were forced tologin every 5 minutes. Changing to use auth code flow enables refresh tokens.
TIS21-4297: Update Reval to use authorization code flow with Cognito to support refresh tokens

Should alpha be updated too? otherwise LGT-A-TSS-DEV

I think plan is to bin the alpha environment at some point so didn't see the need.


fix: node allocator

Pull Request

What? (description)
If a node has a large subnet, such as a /56 or larger, we need to allocate a /64 subnet for each individual node.
Why? (reasoning)
Acceptance
Please use the following checklist:

[ ] you linked an issue (if applicable)
[ ] you included tests (if applicable)
[ ] you ran conformance (make conformance)
[ ] you linted your code (make lint)
[ ] you linted your code (make unit)

See make help for a description of the available targets.

/m


Minor: Camera is still on after the provider ended the stream (on cashout)

The peerjs channel is up too

AFAIK this is a duplicate of https://github.com/streamium/paystream/issues/56 -- but I'll leave this open in case when I solve that this is still an issue

Solved in 57415d1


Add alternative labels to common report format #1535

Summary of the discussion
Since NIR uses same sector divisions as CRF add alternative labels to common report format: national inventory report sector division and
NIR sector division
Type of change (CHANGELOG.md)
Added

Added new alternative labels #1535

Workflow checklist
Automation
Closes #1535
PR-Assignee

[ ] 🐙 Follow the Pull Request Workflow
[ ] 📝 Update the CHANGELOG.md
[ ] 📙 Add #'s to term tracker item

Reviewer

[ ] 🐙 Follow the Reviewer Guide
[ ] 🐙 Provided feedback and show sufficient appreciation for the work done

Thanks for reviewing, I implemented the requested changes.

A minor remark on the branch naming convention: we usually leave out the # so that the feature branches are sorted by the issue number and findable, in case one needs to restore a branch.

Thanks, @stap-m, I've already noted it and will remember it for the next time, if that's ok.


URLs without trailing slash are not detected as unsafe

This was detected as we were testing a Java implementation of the Update API (v4). The Go client has the same issue
~$ echo "http://malware.testing.google.test/testing/malware" | sblookup -apikey=$GOOGLEAPIKEY
safebrowsing: 2016/09/29 23:32:01 database.go:100: no database file specified
safebrowsing: 2016/09/29 23:32:06 database.go:291: database is now healthy
Safe URL: http://malware.testing.google.test/testing/malware
~$ echo "http://malware.testing.google.test/testing/malware/" | sblookup -apikey=$GOOGLEAPIKEY
safebrowsing: 2016/09/29 23:32:15 database.go:100: no database file specified
safebrowsing: 2016/09/29 23:32:20 database.go:291: database is now healthy
Unsafe URL: [{malware.testing.google.test/testing/malware/ {MALWARE ANY_PLATFORM URL}}]

Yet "Safe Browsing Site Status" status page shows both https://www.google.com/transparencyreport/safebrowsing/diagnostic/#url=http://malware.testing.google.test/testing/malware
as Dangerous.

Thanks for reporting. Turns out the API is WAI. The diagnostic page shouldn't flag this pattern as dangerous. I reported this bug to the relevant colleague.
Details: the API considers a.com/foo and a.com/foo/ as two different (non-covering) patterns. I.e., if one gets listed the other one is still considered safe. If both are unsafe then we would either flag a.com/ as unsafe or flag both patterns as unsafe.

Further details that may help: if we flag a.com/foo/ then any resource under that directory is considered unsafe. E.g., a.com/foo/bar would be considered unsafe. However, if we flag a.com/foo only that path is unsafe (including any URL parameters, e.g., a.com/foo?a=b would be unsafe).


Fee slider font color is wrong in Dark Theme

Still dark, should be light.
Screenshot:

Fixed color scheme. Screenshot:

Awaiting review and closing

Sure you don't want to make the button yellow? ;-)
(That would involve Nimbus painters and other horribleness so don't even go there)
Closing.


So... are holds now in place automatically or do I still need to hold mailboxes?

This part:
Note
In Feb 2020, we turned on legal hold or case hold on private channels (private channel chats are stored in user mailboxes, normal channel chats are stored in that Teams’ group mailboxes). If there is already a legal hold in place for a user mailbox, the hold policy will now automatically apply to private channel messages stored in that mailbox. There is no further action needed for an admin to turn this on. Legal hold of files shared in private channels is also supported.
Makes me think that holds are already in place... and it says "There is no further action needed for an admin to turn this on."
So what is the deal here, can someone confirm please?
Thanks, ii

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

ID: a0c70e2a-c370-01ae-c46a-3a1d0b95fd61
Version Independent ID: a3d2b15f-8900-491a-c71a-ab16db108376
Content: Place a Microsoft Teams user or team on legal hold - Microsoft Teams
Content Source: Teams/legal-hold.md
Service: msteams
GitHub Login: @MicrosoftHeidi
Microsoft Alias: heidip

@ii-batman Thank you for submitting feedback and contributing to the docs. We are currently investigating this.

@scanum
Hi - Do you have an update on this one? :)
Thanks, II

@ii-batman thank you for reaching out and helping improve MS Docs. From what I've investigated it seems like no further action is needed. I see the article was also just updated this week, but will ask @MicrosoftHeidi to confirm as well that no further action is needed for putting mailboxes on hold.

How's it @lindspea ?
Thanks for looking into this, I am eager to enable my users to be able to edit/delete posts but I need to be sure that all posting is hold for compliance. Looking forward to your confirmation.

@MicrosoftHeidi

@ii-batman The note you cite in the article states that content in private channels will be preserved if the corresponding mailbox is placed on eDiscovery hold. So, if a mailbox/site was on legal hold prior to Feb 2020, the private channel content will be preserved after this new capability was deployed. But if you have mailboxes/sites that are not currently on eDiscovery hold, you would have to place them on hold to preserve content in private channels. In other words the "no further action" bit applies to mailboxes/sites currently on eDiscovery hold. Does that help to answer your question?

@ii-batman We appreciate any feedback that improves the content in the Microsoft docs but we haven't had any response from you so we are going to close this issue.
Please feel free to re-open this issue if there is a specific area of the docs that we can improve or make better. Thank you.

@scanum Hi Manuella, does not make sense to close the call if I dont reply within 3 days if you guys don't reply within the same time.
I hope you address the text on the document and its proper confusing!
Stay safe
Regards


cftime default's datetime breaks CFTimeIndex

What happened:
With cftime 1.2.0, one can create datetime object with cftime.datetime(*args, calendar='calendar'), instead of using one of the subclasses (ex cftime.DatetimeNoLeap(*args)). In the latest release (1.4.0, yesterday), the subclasses have been deprecated, but kept as legacy. While all xr code still works (it is using the legacy subclasses), the CFTimeIndex object relies on the type of the datetime object in order to infer the calendar. If the datetime was created outside xarray, using the now default constructor, the returned type is not understood and CFTimeIndexbreaks.
What you expected to happen:
I expected CFTimeIndex to be independent of the way the datetime object is created.
Minimal Complete Verifiable Example:
import cftime
import numpy as np
import xarray as xr

# A datetime array, not created in xarray
time = cftime.num2date(np.arange(365), "days since 2000-01-01", calendar="noleap")
a = xr.DataArray(np.zeros(365), dims=('time',), coords={'time': time})

a.indexes['time']

Fails with :
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/phobos/Python/xclim/.tox/py38/lib/python3.8/site-packages/xarray/coding/cftimeindex.py", line 342, in __repr__
    attrs_str = format_attrs(self)
  File "/home/phobos/Python/xclim/.tox/py38/lib/python3.8/site-packages/xarray/coding/cftimeindex.py", line 264, in format_attrs
    attrs["freq"] = f"'{index.freq}'" if len(index) >= 3 else None
  File "/home/phobos/Python/xclim/.tox/py38/lib/python3.8/site-packages/xarray/coding/cftimeindex.py", line 692, in freq
    return infer_freq(self)
  File "/home/phobos/Python/xclim/.tox/py38/lib/python3.8/site-packages/xarray/coding/frequencies.py", line 96, in infer_freq
    inferer = _CFTimeFrequencyInferer(index)
  File "/home/phobos/Python/xclim/.tox/py38/lib/python3.8/site-packages/xarray/coding/frequencies.py", line 105, in __init__
    self.values = index.asi8
  File "/home/phobos/Python/xclim/.tox/py38/lib/python3.8/site-packages/xarray/coding/cftimeindex.py", line 673, in asi8
    [
  File "/home/phobos/Python/xclim/.tox/py38/lib/python3.8/site-packages/xarray/coding/cftimeindex.py", line 674, in <listcomp>
    _total_microseconds(exact_cftime_datetime_difference(epoch, date))
  File "/home/phobos/Python/xclim/.tox/py38/lib/python3.8/site-packages/xarray/core/resample_cftime.py", line 370, in exact_cftime_datetime_difference
    seconds = b.replace(microsecond=0) - a.replace(microsecond=0)
  File "src/cftime/_cftime.pyx", line 1153, in cftime._cftime.datetime.__sub__
ValueError: cannot compute the time difference between dates with different calendars

Anything else we need to know?:
 It happens when reading files:
MWE:
import xarray as xr

da = xr.DataArray(
    [0, 1, 2],
    dims=('time',),
    coords={'time': xr.cftime_range('2000-01-01', freq='D', periods=3, calendar='noleap')},
    name='test'
)
da.to_netcdf('test.nc')

da2 = xr.open_dataset('test.nc')
da2.indexes['time']

Fails with an error similar to the example above. Also failing on :
da2.sel(time='2000')

Yikes, indeed I was concerned about that when you first posted the issue.  In hindsight it's pretty clear why this causes problems within CFTimeIndex; we rely on passing the date_type around in a variety of places, and with the new change this means the calendar type is lost.  I carelessly took the xarray test suite passing as reason to believe everything would be OK.

This behavior will be rolled back in the next release of cftime, which @jswhit said he would issue soon.

Actually @jswhit already made the release (sorry I missed this!), so this is fixed upstream.  I'll leave this issue open, however, since I think it would be good to make CFTimeIndex compatible with cftime's new universal datetime object.


Replace bzero/bcopy by memset/memcpy

Consistently use only one form. Go for memset/memcpy since they seem to have less problems...

Fixed in https://github.com/sctplab/usrsctp/commit/d08533004fba9220bb8d7a7d2401408be1f81f75.


john's changes w/ cleaned up bindata

(testing whether Jenkins still has issues with that one)

I've force pushed the branch to trigger a new Jenkins run


'Error: Failed adding attribute _FEATURE_ID_0'

With dacro (-d) compression, why is 1.glb reporting "'Error: Failed adding attribute _FEATURE_ID_0'" while 7.glb is correct? 1. What's the difference between 1.glb and 7.glb?
t13.zip

With dacro (-d) compression, why is 1.glb reporting "'Error: Failed adding attribute _FEATURE_ID_0'", but 7.glb is correct?
What's the difference between 1.glb and 7.glb?

t13.zip

@sui0312feng what version of gltf-pipeline are you using and what command are you running?
I don't see any errors on main when running:
node bin/gltf-pipeline.js -i ~/Downloads/t13/7.glb -o ~/Desktop/7.glb -d

1.glb has problems

@sui0312feng what version of gltf-pipeline are you using and what command are you running?
I don't see any errors on main when running:
node bin/gltf-pipeline.js -i ~/Downloads/t13/7.glb -o ~/Desktop/7.glb -d

1.glb has problems

Ah sorry, I mixed them up. I see the same error for 1.glb.
The model has a lot of validation errors reported by glTF Validator. You may need to fix those issues first. You can ignore the unsupported extension warnings.

Ah sorry, I mixed them up. I see the same error for 1.glb.
The model has a lot of validation errors reported by glTF Validator. You may need to fix those issues first. You can ignore the unsupported extension warnings.

Take a look at this new file, it still reports an error
No_0.zip

That model also have validation errors (ignore the first two errors)
{
    "uri": "No_0.glb",
    "mimeType": "model/gltf-binary",
    "validatorVersion": "2.0.0-dev.3.8",
    "validatedAt": "2023-11-08T14:32:24.503Z",
    "issues": {
        "numErrors": 23,
        "numWarnings": 0,
        "numInfos": 3,
        "numHints": 0,
        "messages": [
            {
                "code": "UNSUPPORTED_EXTENSION",
                "message": "Cannot validate an extension as it is not supported by the validator: 'EXT_mesh_features'.",
                "severity": 2,
                "pointer": "/extensionsUsed/0"
            },
            {
                "code": "UNSUPPORTED_EXTENSION",
                "message": "Cannot validate an extension as it is not supported by the validator: 'EXT_structural_metadata'.",
                "severity": 2,
                "pointer": "/extensionsUsed/1"
            },
            {
                "code": "MESH_PRIMITIVE_ATTRIBUTES_ACCESSOR_UNSIGNED_INT",
                "message": "Mesh attributes cannot use UNSIGNED_INT component type.",
                "severity": 0,
                "pointer": "/meshes/0/primitives/0/attributes/_FEATURE_ID_0"
            },
            {
                "code": "MESH_PRIMITIVE_UNEQUAL_ACCESSOR_COUNT",
                "message": "All accessors of the same primitive must have the same count.",
                "severity": 0,
                "pointer": "/meshes/0/primitives/0/attributes/_FEATURE_ID_0"
            },
            {
                "code": "MESH_PRIMITIVE_ATTRIBUTES_ACCESSOR_UNSIGNED_INT",
                "message": "Mesh attributes cannot use UNSIGNED_INT component type.",
                "severity": 0,
                "pointer": "/meshes/0/primitives/1/attributes/_FEATURE_ID_0"
            },
            {
                "code": "MESH_PRIMITIVE_UNEQUAL_ACCESSOR_COUNT",
                "message": "All accessors of the same primitive must have the same count.",
                "severity": 0,
                "pointer": "/meshes/0/primitives/1/attributes/_FEATURE_ID_0"
            },
            {
                "code": "ACCESSOR_MIN_MISMATCH",
                "message": "Declared minimum value for this component<PHONE_NUMBER>5390625) does not match actual minimum<PHONE_NUMBER>1933594).",
                "severity": 0,
                "pointer": "/accessors/0/min/0"
            },
            {
                "code": "ACCESSOR_ELEMENT_OUT_OF_MIN_BOUND",
                "message": "Accessor contains 7 element(s) less than declared minimum value<PHONE_NUMBER>5390625.",
                "severity": 0,
                "pointer": "/accessors/0/min/0"
            },
            {
                "code": "ACCESSOR_MIN_MISMATCH",
                "message": "Declared minimum value for this component (92.51856231689453) does not match actual minimum (92.51899719238281).",
                "severity": 0,
                "pointer": "/accessors/0/min/1"
            },
            {
                "code": "ACCESSOR_MIN_MISMATCH",
                "message": "Declared minimum value for this component (2.477004051208496) does not match actual minimum (2.4769999980926514).",
                "severity": 0,
                "pointer": "/accessors/0/min/2"
            },
            {
                "code": "ACCESSOR_ELEMENT_OUT_OF_MIN_BOUND",
                "message": "Accessor contains 3 element(s) less than declared minimum value 2.477004051208496.",
                "severity": 0,
                "pointer": "/accessors/0/min/2"
            },
            {
                "code": "ACCESSOR_MAX_MISMATCH",
                "message": "Declared maximum value for this component<PHONE_NUMBER>4296875) does not match actual maximum<PHONE_NUMBER>1933594).",
                "severity": 0,
                "pointer": "/accessors/0/max/0"
            },
            {
                "code": "ACCESSOR_ELEMENT_OUT_OF_MAX_BOUND",
                "message": "Accessor contains 7 element(s) greater than declared maximum value<PHONE_NUMBER>4296875.",
                "severity": 0,
                "pointer": "/accessors/0/max/0"
            },
            {
                "code": "ACCESSOR_MAX_MISMATCH",
                "message": "Declared maximum value for this component<PHONE_NUMBER>6679688) does not match actual maximum<PHONE_NUMBER>3105469).",
                "severity": 0,
                "pointer": "/accessors/0/max/1"
            },
            {
                "code": "ACCESSOR_ELEMENT_OUT_OF_MAX_BOUND",
                "message": "Accessor contains 1 element(s) greater than declared maximum value<PHONE_NUMBER>6679688.",
                "severity": 0,
                "pointer": "/accessors/0/max/1"
            },
            {
                "code": "ACCESSOR_MAX_MISMATCH",
                "message": "Declared maximum value for this component (7.69347620010376) does not match actual maximum (7.692999839782715).",
                "severity": 0,
                "pointer": "/accessors/0/max/2"
            },
            {
                "code": "ACCESSOR_INDEX_TRIANGLE_DEGENERATE",
                "message": "Indices accessor contains 120 degenerate triangles (out of 4080).",
                "severity": 2,
                "pointer": "/meshes/0/primitives/0/indices"
            },
            {
                "code": "ACCESSOR_MIN_MISMATCH",
                "message": "Declared minimum value for this component<PHONE_NUMBER>0839844) does not match actual minimum<PHONE_NUMBER>8476562).",
                "severity": 0,
                "pointer": "/accessors/3/min/0"
            },
            {
                "code": "ACCESSOR_MIN_MISMATCH",
                "message": "Declared minimum value for this component (25.072669982910156) does not match actual minimum (25.072999954223633).",
                "severity": 0,
                "pointer": "/accessors/3/min/1"
            },
            {
                "code": "ACCESSOR_MIN_MISMATCH",
                "message": "Declared minimum value for this component (34.28436279296875) does not match actual minimum (34.284000396728516).",
                "severity": 0,
                "pointer": "/accessors/3/min/2"
            },
            {
                "code": "ACCESSOR_ELEMENT_OUT_OF_MIN_BOUND",
                "message": "Accessor contains 102 element(s) less than declared minimum value 34.28436279296875.",
                "severity": 0,
                "pointer": "/accessors/3/min/2"
            },
            {
                "code": "ACCESSOR_MAX_MISMATCH",
                "message": "Declared maximum value for this component<PHONE_NUMBER>628906) does not match actual maximum<PHONE_NUMBER>683594).",
                "severity": 0,
                "pointer": "/accessors/3/max/0"
            },
            {
                "code": "ACCESSOR_ELEMENT_OUT_OF_MAX_BOUND",
                "message": "Accessor contains 2 element(s) greater than declared maximum value<PHONE_NUMBER>628906.",
                "severity": 0,
                "pointer": "/accessors/3/max/0"
            },
            {
                "code": "ACCESSOR_MAX_MISMATCH",
                "message": "Declared maximum value for this component (43.82413101196289) does not match actual maximum (43.82400131225586).",
                "severity": 0,
                "pointer": "/accessors/3/max/1"
            },
            {
                "code": "ACCESSOR_MAX_MISMATCH",
                "message": "Declared maximum value for this component (44.782920837402344) does not match actual maximum (44.78300094604492).",
                "severity": 0,
                "pointer": "/accessors/3/max/2"
            },
            {
                "code": "ACCESSOR_ELEMENT_OUT_OF_MAX_BOUND",
                "message": "Accessor contains 102 element(s) greater than declared maximum value 44.782920837402344.",
                "severity": 0,
                "pointer": "/accessors/3/max/2"
            }
        ],
        "truncated": false
    },
    "info": {
        "version": "2.0",
        "minVersion": "2.0",
        "generator": "zsq",
        "extensionsUsed": [
            "EXT_mesh_features",
            "EXT_structural_metadata"
        ],
        "extensionsRequired": [
            "EXT_mesh_features",
            "EXT_structural_metadata"
        ],
        "resources": [
            {
                "pointer": "/buffers/0",
                "mimeType": "application/gltf-buffer",
                "storage": "glb",
                "byteLength": 182824
            }
        ],
        "animationCount": 0,
        "materialCount": 2,
        "hasMorphTargets": false,
        "hasSkins": false,
        "hasTextures": false,
        "hasDefaultScene": true,
        "drawCallCount": 2,
        "totalVertexCount": 1699,
        "totalTriangleCount": 6768,
        "maxUVs": 0,
        "maxInfluences": 0,
        "maxAttributes": 2
    }
}

A bit more specifically: The given glTF defines the POSITIONS and _FEATURE_ID_0 for the first mesh primitive as
    {
      "bufferView": 0,
      "byteOffset": 0,
      "componentType": 5126,
      "count": 1027,
      "type": "VEC3",
      "max": [
<PHONE_NUMBER>4296875,
<PHONE_NUMBER>6679688,
        7.69347620010376
      ],
      "min": [
<PHONE_NUMBER>5390625,
        92.51856231689453,
        2.477004051208496
      ]
    },
    {
      "bufferView": 1,
      "byteOffset": 0,
      "componentType": 5125,
      "count": 12240,
      "type": "SCALAR",
      "max": [
        4
      ],
      "min": [
        0
      ]
    },

The count for the positions is 1027 (so there basically are 1027 vertices).
The count for the feature ID is 12240, but this should also be 1027 then: Each vertex should receive one feature ID.

A bit more specifically: The given glTF defines the POSITIONS and _FEATURE_ID_0 for the first mesh primitive as
    {
      "bufferView": 0,
      "byteOffset": 0,
      "componentType": 5126,
      "count": 1027,
      "type": "VEC3",
      "max": [
<PHONE_NUMBER>4296875,
<PHONE_NUMBER>6679688,
        7.69347620010376
      ],
      "min": [
<PHONE_NUMBER>5390625,
        92.51856231689453,
        2.477004051208496
      ]
    },
    {
      "bufferView": 1,
      "byteOffset": 0,
      "componentType": 5125,
      "count": 12240,
      "type": "SCALAR",
      "max": [
        4
      ],
      "min": [
        0
      ]
    },

The count for the positions is 1027 (so there basically are 1027 vertices). The count for the feature ID is 12240, but this should also be 1027 then: Each vertex should receive one feature ID.

you are right .thanks!

That model also has validation errors (ignore the first two errors)
{
    "uri": "No_0.glb",
    "mimeType": "model/gltf-binary",
    "validatorVersion": "2.0.0-dev.3.8",
    "validatedAt": "2023-11-08T14:32:24.503Z",
    "issues": {
        "numErrors": 23,
        "numWarnings": 0,
        "numInfos": 3,
        "numHints": 0,
        "messages": [
            {
                "code": "UNSUPPORTED_EXTENSION",
                "message": "Cannot validate an extension as it is not supported by the validator: 'EXT_mesh_features'.",
                "severity": 2,
                "pointer": "/extensionsUsed/0"
            },
            {
                "code": "UNSUPPORTED_EXTENSION",
                "message": "Cannot validate an extension as it is not supported by the validator: 'EXT_structural_metadata'.",
                "severity": 2,
                "pointer": "/extensionsUsed/1"
            },
            {
                "code": "MESH_PRIMITIVE_ATTRIBUTES_ACCESSOR_UNSIGNED_INT",
                "message": "Mesh attributes cannot use UNSIGNED_INT component type.",
                "severity": 0,
                "pointer": "/meshes/0/primitives/0/attributes/_FEATURE_ID_0"
            },
            {
                "code": "MESH_PRIMITIVE_UNEQUAL_ACCESSOR_COUNT",
                "message": "All accessors of the same primitive must have the same count.",
                "severity": 0,
                "pointer": "/meshes/0/primitives/0/attributes/_FEATURE_ID_0"
            },
            {
                "code": "MESH_PRIMITIVE_ATTRIBUTES_ACCESSOR_UNSIGNED_INT",
                "message": "Mesh attributes cannot use UNSIGNED_INT component type.",
                "severity": 0,
                "pointer": "/meshes/0/primitives/1/attributes/_FEATURE_ID_0"
            },
            {
                "code": "MESH_PRIMITIVE_UNEQUAL_ACCESSOR_COUNT",
                "message": "All accessors of the same primitive must have the same count.",
                "severity": 0,
                "pointer": "/meshes/0/primitives/1/attributes/_FEATURE_ID_0"
            },
            {
                "code": "ACCESSOR_MIN_MISMATCH",
                "message": "Declared minimum value for this component<PHONE_NUMBER>5390625) does not match actual minimum<PHONE_NUMBER>1933594).",
                "severity": 0,
                "pointer": "/accessors/0/min/0"
            },
            {
                "code": "ACCESSOR_ELEMENT_OUT_OF_MIN_BOUND",
                "message": "Accessor contains 7 element(s) less than declared minimum value<PHONE_NUMBER>5390625.",
                "severity": 0,
                "pointer": "/accessors/0/min/0"
            },
            {
                "code": "ACCESSOR_MIN_MISMATCH",
                "message": "Declared minimum value for this component (92.51856231689453) does not match actual minimum (92.51899719238281).",
                "severity": 0,
                "pointer": "/accessors/0/min/1"
            },
            {
                "code": "ACCESSOR_MIN_MISMATCH",
                "message": "Declared minimum value for this component (2.477004051208496) does not match actual minimum (2.4769999980926514).",
                "severity": 0,
                "pointer": "/accessors/0/min/2"
            },
            {
                "code": "ACCESSOR_ELEMENT_OUT_OF_MIN_BOUND",
                "message": "Accessor contains 3 element(s) less than declared minimum value 2.477004051208496.",
                "severity": 0,
                "pointer": "/accessors/0/min/2"
            },
            {
                "code": "ACCESSOR_MAX_MISMATCH",
                "message": "Declared maximum value for this component<PHONE_NUMBER>4296875) does not match actual maximum<PHONE_NUMBER>1933594).",
                "severity": 0,
                "pointer": "/accessors/0/max/0"
            },
            {
                "code": "ACCESSOR_ELEMENT_OUT_OF_MAX_BOUND",
                "message": "Accessor contains 7 element(s) greater than declared maximum value<PHONE_NUMBER>4296875.",
                "severity": 0,
                "pointer": "/accessors/0/max/0"
            },
            {
                "code": "ACCESSOR_MAX_MISMATCH",
                "message": "Declared maximum value for this component<PHONE_NUMBER>6679688) does not match actual maximum<PHONE_NUMBER>3105469).",
                "severity": 0,
                "pointer": "/accessors/0/max/1"
            },
            {
                "code": "ACCESSOR_ELEMENT_OUT_OF_MAX_BOUND",
                "message": "Accessor contains 1 element(s) greater than declared maximum value<PHONE_NUMBER>6679688.",
                "severity": 0,
                "pointer": "/accessors/0/max/1"
            },
            {
                "code": "ACCESSOR_MAX_MISMATCH",
                "message": "Declared maximum value for this component (7.69347620010376) does not match actual maximum (7.692999839782715).",
                "severity": 0,
                "pointer": "/accessors/0/max/2"
            },
            {
                "code": "ACCESSOR_INDEX_TRIANGLE_DEGENERATE",
                "message": "Indices accessor contains 120 degenerate triangles (out of 4080).",
                "severity": 2,
                "pointer": "/meshes/0/primitives/0/indices"
            },
            {
                "code": "ACCESSOR_MIN_MISMATCH",
                "message": "Declared minimum value for this component<PHONE_NUMBER>0839844) does not match actual minimum<PHONE_NUMBER>8476562).",
                "severity": 0,
                "pointer": "/accessors/3/min/0"
            },
            {
                "code": "ACCESSOR_MIN_MISMATCH",
                "message": "Declared minimum value for this component (25.072669982910156) does not match actual minimum (25.072999954223633).",
                "severity": 0,
                "pointer": "/accessors/3/min/1"
            },
            {
                "code": "ACCESSOR_MIN_MISMATCH",
                "message": "Declared minimum value for this component (34.28436279296875) does not match actual minimum (34.284000396728516).",
                "severity": 0,
                "pointer": "/accessors/3/min/2"
            },
            {
                "code": "ACCESSOR_ELEMENT_OUT_OF_MIN_BOUND",
                "message": "Accessor contains 102 element(s) less than declared minimum value 34.28436279296875.",
                "severity": 0,
                "pointer": "/accessors/3/min/2"
            },
            {
                "code": "ACCESSOR_MAX_MISMATCH",
                "message": "Declared maximum value for this component<PHONE_NUMBER>628906) does not match actual maximum<PHONE_NUMBER>683594).",
                "severity": 0,
                "pointer": "/accessors/3/max/0"
            },
            {
                "code": "ACCESSOR_ELEMENT_OUT_OF_MAX_BOUND",
                "message": "Accessor contains 2 element(s) greater than declared maximum value<PHONE_NUMBER>628906.",
                "severity": 0,
                "pointer": "/accessors/3/max/0"
            },
            {
                "code": "ACCESSOR_MAX_MISMATCH",
                "message": "Declared maximum value for this component (43.82413101196289) does not match actual maximum (43.82400131225586).",
                "severity": 0,
                "pointer": "/accessors/3/max/1"
            },
            {
                "code": "ACCESSOR_MAX_MISMATCH",
                "message": "Declared maximum value for this component (44.782920837402344) does not match actual maximum (44.78300094604492).",
                "severity": 0,
                "pointer": "/accessors/3/max/2"
            },
            {
                "code": "ACCESSOR_ELEMENT_OUT_OF_MAX_BOUND",
                "message": "Accessor contains 102 element(s) greater than declared maximum value 44.782920837402344.",
                "severity": 0,
                "pointer": "/accessors/3/max/2"
            }
        ],
        "truncated": false
    },
    "info": {
        "version": "2.0",
        "minVersion": "2.0",
        "generator": "zsq",
        "extensionsUsed": [
            "EXT_mesh_features",
            "EXT_structural_metadata"
        ],
        "extensionsRequired": [
            "EXT_mesh_features",
            "EXT_structural_metadata"
        ],
        "resources": [
            {
                "pointer": "/buffers/0",
                "mimeType": "application/gltf-buffer",
                "storage": "glb",
                "byteLength": 182824
            }
        ],
        "animationCount": 0,
        "materialCount": 2,
        "hasMorphTargets": false,
        "hasSkins": false,
        "hasTextures": false,
        "hasDefaultScene": true,
        "drawCallCount": 2,
        "totalVertexCount": 1699,
        "totalTriangleCount": 6768,
        "maxUVs": 0,
        "maxInfluences": 0,
        "maxAttributes": 2
    }
}

OK


A tutorial ipynb demonstrating how to run application with existing Giraph jars

as titled.

included in docs.


Add a SQL index to speed up data size checks

In a local test with 2M rows, adding this index sped up a SELECT TOTAL(content_size) query time from 125ms to 75ms.
What was wrong?
Fix #649
How was it fixed?
Add an index and shelve the issue, for now.

I added some more indices. This is a small, low-risk, change, so I'll rage-merge after the tests pass. I'll quickly follow up if anyone notices something off.


Quotes module

Use yfinance for downloading quotes.
Save and load quotes as a dataframe in PERSIST directory.
Refactor model: move Transaction class to its own module, other models to a common module.

@mkopec87 Would you mind giving it a review? Sorry about the massive PR :disappointed:

@adri0 , shall I re-review? I'd expect for you to click the "re-request review" button next to my name in case the changes are ready :)

@adri0 , shall I re-review? I'd expect for you to click the "re-request review" button next to my name in case the changes are ready :)

Yes, would you mind? :) I'm just getting familiar with Github's code review now.

LGTM!

LGTM?
Thanks for approving!

Oh, I found a better page: https://www.urbandictionary.com/define.php?term=LGTM
So it's either:

Looks Good To Me
Let's Get This Merged
Literally Garbage To Me
Lesbian Gay Transagender Martian :D


Update README with Pull Request Guidelines and Information

Description:
The current README file does not include comprehensive guidelines and information about the pull request (PR) process. To improve clarity and help users understand how to contribute effectively, we need to update the README with detailed instructions on creating and managing pull requests.
Tasks:

Draft PR Guidelines:

Include a section on the purpose of pull requests.
Explain the workflow for creating a pull request, including branch naming conventions and commit message guidelines.
Provide steps for submitting a pull request (e.g., pushing changes to a feature branch, opening a PR, adding reviewers).

Describe Review Process:

Outline how the review process works, including:

How to assign reviewers.
What to expect during the review (e.g., feedback, required changes).
How to address review comments and make revisions.

Add Example Workflow:

Provide a simple example of a typical pull request workflow for new contributors.
Include visual aids or screenshots if helpful.

Update README File:

Edit the README.md file to add the new section.
Ensure the language is clear and accessible to both new and experienced contributors.

Review and Proofread:

Review the updated README for accuracy and clarity.
Proofread the new content to ensure it is free of typos and errors.

Acceptance Criteria:

The README file includes a detailed section on pull requests that covers:

Purpose and benefits of PRs.
Steps for creating and submitting a PR.
Review process and expectations.
Example workflow and visual aids if applicable.

The information is clear, accurate, and easy to understand.
The updated README is reviewed and approved by at least one team member.

Additional Notes:

Consider linking to additional resources or documentation if available.
Ensure the new section aligns with existing documentation and project practices.

It's done!


How do I build from the command line without ever loading the Visual Studio GUI?

Discussed in https://github.com/microsoft/vcpkg/discussions/20235

The original problem is annoying but we figured we could get around it by building once in Visual Studio on each Jenkins build machine. However we are finding that is not working. We can remote desktop as the same user Jenkins is using. We can build from Visual Studio and the command line. But when Jenkins builds it fails to find any of the vcpkg installed libraries.
Originally posted by dulsi September 17, 2021
If I grab our source tree and try to build from the command line, it fails saying it can't find some cppunit header files. If I load the solution in Visual Studio, I can build from there. After doing that I can build from the command line without a problem. What is the GUI doing to enable this?

Hi @dulsi
Thanks for posting this issue.
msbuild.exe will through the following content
<PropertyGroup >
    <VCLibPackagePath Condition="'$(VCLibPackagePath)' == ''">$(LOCALAPPDATA)\vcpkg\vcpkg.user</VCLibPackagePath>
  </PropertyGroup>

in C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\VCTargets\Microsoft.Cpp.Common.props file to find vcpkg related settings, such as the path for headers, lib and dll.
By default,  the value of $(LOCALAPPDATA)\vcpkg\vcpkg.user is null. So msbuild.exe will not find vcpkg.
After running vcpkg integrate install, vcpkg.user.targets file will be generated into C:\Users\xxx\AppData\Local\vcpkg, the content of this file as below:
     <Import Condition="Exists('F:\vcpkg\src\scripts\buildsystems\msbuild\vcpkg.targets') and '$(VCPkgLocalAppDataDisabled)' == ''" Project="F:\vcpkg\src\scripts\buildsystems\msbuild\vcpkg.targets" />

Then, msbuild.exe will find the settings of vcpkg when it is running. This settings will only exist in msbuild.exe itself instead of the project file or the running environment.

What is the GUI doing to enable this?

In your cases, reloading the project didn't change anything, it is just as msbuild.exe is changing. So you can build successfully.

How do I build from the command line without ever loading the Visual Studio GUI?

1.  .\vcpkg install cppunit
2.  .\vcpkg integrate install
3.  Open VS cmd and run the following command:
 msbuild.exe /m /t:rebuild /p:Platform=x86 /p:Configuration=Debug xxx.sln

I think we found our issue. I had thought that you needed to run Visual Studio GUI to get it to recognize vcpkg. It appears I must have tried to build the 32 bit version of the solution and since the 32 bit version of the library wasn't installed it didn't work.
The problem with Jenkins seems to be that it alters the LocalAppData setting. By running vcpkg integrate install before building in Jenkins it setups the %LocalAppData%\vcpkg directory and everything runs.


Fix bootstrapping of fresh hosts

These are fixes which were neccessary for rebuilding Pluto (others will follow). Most notably:

install docker using vendored get.docker.ui script
run the nginx image instead of the dead dockerfile/nginx image.
set hostname from inventory file

LGTM


Wrong type in Field TargetKBNumber at wufb-reports-schema-ucclientupdatestatus.md

https://github.com/MicrosoftDocs/windows-itpro-docs/blob/public/windows/deployment/update/wufb-reports-schema-ucclientupdatestatus.md
UCClientUpdateStatus field TargetKBNumber says type int. But should be string after 2023-04-11 Security Update.

Hi, this is less about int vs string in my opinion, it is more the fact that TargetKBNumber has changed from simple "KBxxxx (version)" to a full descriptive text of the update.
Additionally, it looks like it's appending the value of TargetKBNumber to the Update DisplayName, effectively repeating the information.

@dacool thanks. I'll get the type updated shortly.
@StevybSC I've reported the issue to the product team so they can take a peek to see what's up. Thanks.


missing  pagination in workflows list

Workflow Lists are not currently paginated.

We already have some pagination in place in workflowRuns, it's a cursor based pagination, but I am not sure that's a good fit, and worth the engineering work in contrast to offset pagination in this case.
I think offset pagination could work better in this case since the number of workflows is far smaller than runs and they won't be added/deleted often either.


Print the directory where multiple maven-metadata files occur

🚀 Description
Print the directory where multiple maven-metadata files occur
📄 Motivation and Context
Once I ran gradle refreshVersions and received following error: Expected only one maven-metadata xml file but got 2 matching files!. I had to put the breakpoint to get the root cause of the issue and found out that I have 2 maven maven-metadata files for guava artifact. I think it would be really beneficial to include the directory that caused an issue.
🧪 How Has This Been Tested?
Manual run :)
📦 Types of changes

[ ] Bug fix (non-breaking change which fixes an issue)
[x] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)

✅ Checklist

[x] I have read the guidelines for the development process
[ ] My change requires a change to the documentation.
[ ] I have updated the documentation accordingly.

Compilation error:
e: /home/runner/work/refreshVersions/refreshVersions/plugins/core/src/main/kotlin/de/fayard/refreshVersions/core/internal/MavenDependencyVersionsFetcherFile.kt: (28, 102): Unresolved reference: targerDir

Sorry, didn't push the updated version

Merged, thanks @kaliy !

Should we release a 0.20.1 version with that fix today, or should we wait 1-2 days to also include other dependency notations in the way?

We wait for dependency notations in the way


Works well, minor upgrades would be useful

Thank you for this!
Is it possible to also add .SetCfgScale (Dictates how closely to match prompt).
It would also be handy to specify a custom filename (on SaveImagesToAsync), rather than just the directory.

Both of these functionalities will be in the new version that I will be releasing soon :)
I've added a SaveSingleImageToAsync method where you can specify a file name. If a file with that name already exists in the specified folder, a Guid will be appended to the specified name.

New version (1.3.0) with SaveSingleImageToAsync and .SetCfgScale  is available now :)


Monkeypatch urllib import for python2 compat

urllib.parse is not available in python2; this patch allows using the sdk from python2 as-is

good stuff


Error with Angular 17.3.2 and Node.js 20.10.0 - Schema validation failed with the following

I'm currently working on a project using Angular 17.3.2 and Node.js 20.10.0, but I've encountered an error.
Despite thorough research and verifying that angular.json includes @angular-builders/custom-webpack:browser as specified, the issue persists.
This setup was configured using ng add, following the official documentation guidelines.
Could anyone help me with this problem?
You can review my code at https://github.com/leogouveia/sspa2-navbar. This error occurs both on my local machine and in GitHub Codespaces.
Any assistance would be greatly appreciated.
Demonstration
ng new sspa2-navbar
ng add single-spa-angular --project sspa2-navbar
npm run serve:single-spa:sspa2-navbar
Warning: Running a server with --disable-host-check is a security risk. See https://medium.com/webpack/webpack-dev-server-middleware-security-issues-1489d950874a for more information.
Error: Schema validation failed with the following errors:
  Data path "" must NOT have additional properties(browser).

Expected Behavior
Application should start in development
Actual Behavior
Application crashes with message:
Warning: Running a server with --disable-host-check is a security risk. See https://medium.com/webpack/webpack-dev-server-middleware-security-issues-1489d950874a for more information.
Error: Schema validation failed with the following errors:
  Data path "" must NOT have additional properties(browser).

@leogouveia
I encountered a similar issue and discovered that in the angular.json file,
"browser": "src/main.ts"
was added in Angular 17 version, which seemed to be the root cause of the problem. Upon removing this line, everything functioned as anticipated

@utsav-mehta-ext-volansys Yesterday I did some tests by fiddling with the properties of the angular.json file and ended up discovering this too.
Another thing I realised is that today, we're stuck with webpack. Will they update it to use vite and esbuild as well? Vite's speed is much greater in the development environment.

I too had encountered the same issue a week back and had to remove the "browser": "src/main.ts" to fix the error. I'm surprised this issue did not get raised sooner, considering it appears to be present since Angular v17.0.0.
Am I missing something here as the issue seems to occur with the recommended setup. If not I'd be happy to contribute a PR with the fix if that would be helpful :)

https://github.com/just-jeb/angular-builders/issues/1595
Saw the above issue and I'm not sure what needs to be done here. Can you suggest a proper solution for this issue @arturovt?

The architect[build].browser wasn't introduced in Angular v17. It's a distinct property within a separate builder called :application. The purpose of custom-webpack is to substitute the Webpack builder, while the ESBuild :application builder necessitates the custom-esbuild builder. This constitutes a fundamentally different setup. I'm uncertain how delete options.browser would address the problem.
This requires a full rewrite of the Webpack configuration to align with the ESBuild setup. However, the issue lies in the fact that ESbuild doesn't encompass all the features outlined in the single-spa-angular Webpack configuration transformer.

@arturovt  Sorry if I am entirely wrong. But it seems that normal setup with custom-webpack "disables" esbuild completely. So if you add single-spa-angular and remove "browser": "src/main.ts" it will use webpack instead. This seems to be a temporary solution until something else comes along with esbuild.

You will not be able to use ESBuild because they don't support all of the required single-spa features (like SystemJS output https://github.com/evanw/esbuild/issues/192).

I'm uncertain how delete options.browser would address the problem.

This is my understanding. When creating a new Angular v17 app, :architect is the default builder which uses architect.build.options.browser and so it gets added to the build options. But since we're stuck with custom-webpack:browser which uses the options.main, we need to remove the options.browser property which was added for the default :architect builder.
Currently custom-webpack is throwing a schema validation error that browser property should not be present in build options.

@iamajmalhassan  I agree, or at least update the docs explaining about the "bug" and how to work around it. I racked my brains for hours until I understood what was happening and found a solution.

I made a PR to the docs stating that builder should be set to :browser before running schematics (https://github.com/single-spa/single-spa.js.org/pull/634/files#diff-ee724f6994bbcbf26bf9b8dfa7777b04cfca5c34afb283a92a39d67acbdc2538R77-R80)

Someone g0t single-spa working with angular and ESBuild here: https://github.com/kfrederix/single-spa-angular-esm
Also, docs should be updated to say to simply remove the "browser" line to pass schema validation


Add back pthread_attr_setstacksize update

Add back pthread_attr_setstacksize update
Description
In this PR

Add back pthread_attr_setstacksize change
Stop the timer in vPortEndScheduler
Move list insert and remove function call to a critical section
Create cancellation point in prvSuspendSelf function

Test Steps

Checklist:

[ ] I have tested my changes. No regression in existing tests.
[ ] I have modified and/or added unit-tests to cover the code changes in this Pull Request.

Related Issue

By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

Let me update the PR again to revert pthread_attr_setstacksize.
You can take a look at this PR. If it is good enough to you, you can merge this PR in your branch.

@chinglee-iot alright, so I removed the stack size commit from cmm_posix during the rebase (I think by accident but unless you see it there I don't see it here). So it probably makes sense for you to confirm you need your commit to revert it and I can open up a separate PR to address the stack size changes once this is merged, if that works.

and by that last comment, these changes look good, I can merge/rebase your changes into the cmm_posix changes to update those two commits and keep the history cleaner on the merge side of the main repo

Usually we will do squash and merge. It is not necessary to rebase.
It looks like you have concern about using 'pthread_attr_setstacksize` with valgrind.
If you want to add it back, you can add it in this one.

@chinglee-iot k, let me do a final review, add that commit in and merge this back in. Thank you for keeping at this one, its probably only important to those of us using the posix port so I appreciate it.


Add Russian translation file

Greetings!
Created a Russian translation file.
@MarbleGateKeeper @LimonBlaze Requesting to include it into the project.

Really appreciate your work!


Support detecting node --test-reporter=@voxpelli/node-test-pretty-reporter

When using a module as a custom reporter for node --test its currently not detected.
The full npm script definition that I'm using:
"test:node": "c8 --reporter=lcov --reporter text node --test --test-reporter=@voxpelli/node-test-pretty-reporter",

Currently goes undetected:
Unused devDependencies (1)
@voxpelli/node-test-pretty-reporter  package.json

Not a biggie, but thought I would mention it anyhow. Thanks for the continued awesome work on knip!

:rocket: This issue has been resolved in v2.17.1. See Release 2.17.1 for release notes.

Thanks, Pelle!


W3t close channel

This PR:

Prevents the web3torrentClient to trigger payments while a torrent is being cancelled (by pausing the torrent):
https://github.com/statechannels/monorepo/compare/w3t-close-channel?expand=1#diff-a84153ed9f3ab2bd13c41bca43b584c7R134
https://github.com/statechannels/monorepo/compare/w3t-close-channel?expand=1#diff-a84153ed9f3ab2bd13c41bca43b584c7L401
moves the logic of waiting for the user's turn before closing to the PaymentChannelClient:
https://github.com/statechannels/monorepo/compare/w3t-close-channel?expand=1#diff-9b0f77e1a02c15a73ad86b3e5d0b6620R212
Makes channelClose calls independent of each other:
https://github.com/statechannels/monorepo/compare/w3t-close-channel?expand=1#diff-a84153ed9f3ab2bd13c41bca43b584c7R522-R525

related to #1961 and #1918 and #1811

I found this: https://30317-209829093-gh.circle-artifacts.com/0/tmp/seed-download-cancel.pino.log
{
   "time":1590450980252,
   "level":30,
   "jsonRpcResponse":{
      "id":12,
      "jsonrpc":"2.0",
      "error":{
         "code":300,
         "message":"Not your turn"
      }
   },
   "msg":"OUTGOING JSONRPC REQUEST:",
   "name":"xstate-wallet",
   "browserId":1
}

I found this log from the failed integration-test-web3torrent-optional job
{
   "time":1590450980252,
   "level":30,
   "jsonRpcResponse":{
      "id":12,
      "jsonrpc":"2.0",
      "error":{
         "code":300,
         "message":"Not your turn"
      }
   },
   "msg":"OUTGOING JSONRPC REQUEST:",
   "name":"xstate-wallet",
   "browserId":1
}

yeah, I paired with @andrewgordstewart last night and made with him this PR, that puts the ball in xstate-wallet in regards with this error, so that he can start hacking into it on that side.
What I mean with this is: this PR is not supposed to fix the error, but it solves the issues related to it in web3torrent's side

@spersico Does this PR fix #1961?


Failed to load the ESLint library

I suddenly got the message "Failed to load the ESLint library" when starting VSCode. ESLint in VSCode was running without problems since I created .eslintrc.json file in my profile folder.
I see that this has been a problem before, but I believe that my problem has to do with a problem with latest Windows 10 update, where I get a message "[....] ANOMALY: use of REX.w is meaningless ..." when I type commands in command line (see attached screen dump).

Windows 10, 1607, build 14393.82
VSCode 1.5.3
Node 4.5.0
npm 2.15.9
ESLint 3.7.0
I have no configuration files, i.e. project.json etc., other than my personal .eslintrc.json file in my profile folder.

I'm using ESLint fine in other editors, like Atom, and in command line.
And a great thanks to you for an excellent tool! ;-) (... not including this problem in my thanks. ;-))

As I inititially wrote, I think the "ANOMALY message" is the reason for my problem. ;-(
This is what I get in output pane:
[Trace - 15:43:48] Sending request 'initialize - (0)'.
Params: {
    "processId": 6512,
    "rootPath": "c:\\Users\\BjornPe.ECOLABEL\\Documents\\Tests",
    "capabilities": {},
    "initializationOptions": {
        "legacyModuleResolve": false,
        "nodePath": null
    },
    "trace": "verbose"
}

[Trace - 15:43:52] 'npm config get prefix' value is: C:\Users\BjornPe.ECOLABEL\AppData\Roaming\npm
[0x7FFF209A70E3] ANOMALY: use of REX.w is meaningless (default operand size is 64)
[Trace - 15:43:52] NODE_PATH value is: C:\Users\BjornPe.ECOLABEL\AppData\Roaming\npm
[0x7FFF209A70E3] ANOMALY: use of REX.w is meaningless (default operand size is 64)\node_modules
[Trace - 15:43:52] Received response 'initialize - (0)' in 4452ms. Request failed: Failed to load eslint library. (100).
Error data: {
    "retry": false
}

[Info  - 15:43:52] Failed to load the ESLint library.
To use ESLint in this workspace please install eslint using 'npm install eslint' or globally using 'npm install -g eslint'.
You need to reopen the workspace after installing eslint.
[Trace - 15:43:52] Sending request 'shutdown - (1)'.
[Trace - 15:43:52] Received response 'shutdown - (1)' in 1ms.
No result returned.

[Trace - 15:43:52] Sending notification 'exit'.
No parameters provided.

It turns out to be Trend Micro OfficeScan that inserts the message... Disabling the program (anti-virus real-time scan) stops the message from appearing and ESLint works in VSCode. (I tried updating program, but latest version - or same [?] - didn't remove message.)
So issue (extra output before commands output) is not solved - only reason for me having the issue has been found. ;-(
FYI: I get the following in output pane while program disabled:
[Trace - 17:03:34] Sending request 'initialize - (0)'.
Params: {
    "processId": 6268,
    "rootPath": "c:\\Users\\BjornPe.XXX\\Documents\\Tests",
    "capabilities": {},
    "initializationOptions": {
        "legacyModuleResolve": false,
        "nodePath": null
    },
    "trace": "verbose"
}

[Trace - 17:03:37] 'npm config get prefix' value is: C:\Users\BjornPe.XXX\AppData\Roaming\npm
[Trace - 17:03:37] NODE_PATH value is: C:\Users\BjornPe.XXX\AppData\Roaming\npm\node_modules
[Trace - 17:03:39] Received response 'initialize - (0)' in 5153ms.
Result: {
    "capabilities": {
        "textDocumentSync": 1,
        "codeActionProvider": true
    }
}

[Info  - 17:03:39] ESLint server is running.
[Trace - 17:03:39] Sending notification '$/setTraceNotification'.
Params: {
    "value": "verbose"
}

[Trace - 17:03:39] Sending notification 'workspace/didChangeConfiguration'.
Params: {
    "settings": {
        "eslint": {
            "enable": true,
            "nodePath": null,
            "_legacyModuleResolve": false,
            "options": {},
            "trace": {
                "server": "verbose"
            },
            "run": "onType"
        }
    }
}

[Trace - 17:03:39] Sending notification 'textDocument/didOpen'.
Params: {
    "textDocument": {
        "uri": "file:///c%3A/Users/BjornPe.XXX/Documents/Tests/AngularJS/default-button.js",
        "languageId": "javascript",
        "version": 1,
        "text": "(function() {\r\n  \"use strict\";\r\n\r\n  angular.module(\"DefaultButtonApp\", [])\r\n    .controller(\"DefaultButtonController\", DefaultButtonController);\r\n\r\n  DefaultButtonController.$inject = [];\r\n  function DefaultButtonController() {\r\n    var ctrl = this;\r\n    ctrl.name = \"\";\r\n    ctrl.output = \"\";\r\n\r\n    ctrl.sendForm = function($event) {\r\n      ctrl.output = \"You entered \" + ctrl.name;\r\n      ctrl.name = \"\";\r\n      $event.preventDefault();\r\n    };\r\n  }\r\n})();"
    }
}

[Trace - 17:03:39] Received notification 'eslint/noConfig'.
Params: {
    "state": 1
}

[Trace - 17:03:42] Received notification 'textDocument/publishDiagnostics'.
Params: {
    "uri": "file:///c%3A/Users/BjornPe.XXX/Documents/Tests/AngularJS/default-button.js",
    "diagnostics": []
}

[Trace - 17:03:42] Received notification 'eslint/noConfig'.
Params: {
    "state": 1
}

@KiltedViking
What exactly do you mean by this

So issue (extra output before commands output) is not solved - only reason for me having the issue has been found. ;-(

What extra output are you seeing. You can disable the trace by setting "eslint.trace.server": "off"

@KiltedViking any new insides. I will release 1.1.0 soon which has more tracing to better track this down.

This issue has been closed because it needs more information and has not had recent activity. Thank you for your contributions.


Add actions for GitHub releases, pushing to pypi, and pypi_test tags

Resolves #353
I've created GitHub actions and added relevant tokens for the repository. As I understand it,

release.yaml will create GitHub release for pushes/prs matching the patter "v*" (e.g. v3.2.0. This means that #352 would need to be renamed to v3.2.0)
pypi_release.yaml will package and push to PyPi whenever a GitHub release is created (should be initiated after the release.yaml is completed).
test_pypi_release.yaml was an optional one that I included/created, and allows you to test upload a package on test_pypi
by created a push even matching the pattern "vt*".

This is my first time creating GitHub actions, and in particular this workflow, so @jcohenadad maybe it would be a good idea if someone with experience in this matter could also review this PR, maybe someone working on another of your projects like SCT or IVADOMed.

Testing the release.yaml in a fork, it seems that it doesn't create a release the way I thought it should. Neither pushing a PR with v.3.1.9 or pushing a tag with that same name results in a GitHub action being initiated. Looking into it, but might need some clarification on how this works; the documentation was lacking for that github action page: https://github.com/marketplace/actions/create-a-release

Testing the release.yaml in a fork, it seems that it doesn't create a release the way I thought it should. Neither pushing a PR with v.3.1.9 or pushing a tag with that same name results in a GitHub action being initiated. Looking into it, but might need some clarification on how this works; the documentation was lacking for that github action page: https://github.com/marketplace/actions/create-a-release

given that the GITHUB_TOKEN is specific to the repos (not the fork), maybe that's why it didn't create it? Or maybe was it caused by the "vt*" tag?

p.s.: we need to make sure we don't hire someone with first name starting with a "v", otherwise we will end up with a lot of releases 🤣

Testing the release.yaml in a fork, it seems that it doesn't create a release the way I thought it should. Neither pushing a PR with v.3.1.9 or pushing a tag with that same name results in a GitHub action being initiated. Looking into it, but might need some clarification on how this works; the documentation was lacking for that github action page: https://github.com/marketplace/actions/create-a-release

given that the GITHUB_TOKEN is specific to the repos (not the fork), maybe that's why it didn't create it? Or maybe was it caused by the "vt*" tag?

Hmm good point. I'll create a new repo from scratch to test this action out on.

p.s.: we need to make sure we don't hire someone with first name starting with a "v", otherwise we will end up with a lot of releases 🤣

I would hope it doesn't try to match authors names haha. Likely just the commit/pr? But yeah, full functionality is still not clear to me; GitHub action documentations are definitely lacking from my experience in exploring them...

Ok so I changed strategy and now am using a different package to do both the semantic versioning and pushing to pypi.
These actions are triggered as followed:

Bug version number bump: Commit message starting with fix:
Minor version number bump: Commit message starting with feat:
Major version number bump: Commit message starting with feat: and then in the description paragraph, BREAKING CHANGE:.

All of these trigger builds and pushes to pypi.
Tested on this test repo: https://github.com/mathieuboudreau/semantic_test & https://pypi.org/project/semantic-test/#history

what's cool is that it automatically generates the assets (zip + whl).
how come v1.0.0 comes before v2.0.0? https://github.com/mathieuboudreau/semantic_test/releases

IIUC, this proposed workflow is not compatible with the workflow used in the lab to list changes pertaining to specific versions, which uses label categories. So, let's say, if we want to list several bug fixes for one release, this will not be possible with the proposed workflow (or we would need to fix the release body manually afterwards--), right?

what's cool is that it automatically generates the assets (zip + whl).
how come v1.0.0 comes before v2.0.0? https://github.com/mathieuboudreau/semantic_test/releases

I was wondering that too. I created v.1.0.0 manually on the GitHub website, whereas all the other ones were automatically generated. The other difference I see is that the tag is 1.0.0 and not v1.0.0, whereas the automatically generated ones are tagged v2.0.0.

IIUC, this proposed workflow is not compatible with the workflow used in the lab to list changes pertaining to specific versions, which uses label categories. So, let's say, if we want to list several bug fixes for one release, this will not be possible with the proposed workflow (or we would need to fix the release body manually afterwards--), right?

If I understand correctly, yes. I'm not aware of a tool that would allow that with labels - if you know one we could look into it.

What could be done is continue to use label categories, but when you want to make a release, then use the feat: syntax in a PR. All of the commits between that release and the most recent one would be then included in that release, regardless of tags. But the version would only be incremented once per feat: occurence, not for each LABEL:.

The other option I think is that you can do feat(LABEL): for syntax.

why don't we simply create releases (and the tag) manually on the GH interface (under create release), and the release creation would push on PyPI via a GH actions. So we wouldn't need a "GH release" action. We use that scheme for ivadomed. It is fully compatible with category labels, and offers more flexibility.
also, i anticipate we will screw up commit messages at some point (l'erreur est humaine), which will require some annoying manual git rebase procedures.

We can totally do that, but the more manual we need to do these steps, the more discipline we have to have (something we've had a challenge in this project to keep up long term, i.e. across different generations of students coming in and out of the project). Automated versioning also removes the chance to manually type a something like 33.2.0 instead of 3.2.0, which is an easier typo than accidentally writing feat: =)

Forgetting to type feat: is easily fixable by simply writing a new commit to do so.

Just give me the green light and I'll make the change similar to IVADOMED, we'll just have to be super strict in PRs about remembering to always remind folks to 1- manually change init.py, 2- update the CHANGELOG.md, and 3- create a new release manually on the GitHub interface after it's merged.

you made valid points (wrt. manual tasks), and we haven't explored that avenue yet, so why don't we try your suggestion, and see how it goes. If we are not happy about it we can also go back to plan B (ivadomed approach).

Sounds like a good plan to me! @mariehbourget ready for a review and/or test with version 3.2.0 when you are available.

Thanks @mathieuboudreau, I will be available to review it tomorrow.

I have a few questions to make sure that I understand correctly:

A new release would be trigger by the fix(LABEL): or feat(LABEL): string at the beginning of the commit message?
This new release would include all the previous commit between that release and the most recent one?
Does it mean that the changelog will include a line for each commit or for each PR?
Will the lines of the changelog be sorted in categories corresponding to LABEL?

I have a few questions to make sure that I understand correctly:

A new release would be trigger by the fix(LABEL): or feat(LABEL): string at the beginning of the commit message?
This new release would include all the previous commit between that release and the most recent one?
Does it mean that the changelog will include a line for each commit or for each PR?
Will the lines of the changelog be sorted in categories corresponding to LABEL?

I think yes for the first two, and I'm not sure for the last two (they might be possible). I suggest you play around with some of these options in my playground repository that's already set up for it (https://github.com/mathieuboudreau/semantic_test), I'll give you admin access now.

I tested it with our ADS workflow (branch --> PR --> squash and merge) with the feat: trigger in the commit message or the merge. It works well for the release on ADS and PyPI but the changelog only contains 1 line referring to the merge commit.

Hello @jcohenadad mentioned this PR during a meeting on another project (sct). I found it interesting and wanted to share a few thoughts:

Depending on your workflow and how often you commit to master you may not want to publish to pypi on every push to master (this could be very frequent).

This is appropriate if you have a release branch, merge your features in release and then merge release to master when you want to release.
An alternative is to run the action on a push to release branch. In that case you would simply merge master into release any time you would want to release.

Maybe it would be useful to use the "neuropoly" changelog generator (https://github.com/neuropoly/changelog). In that case we could fork this action and tweak it to our needs (and then re-use it across other python projects inside neuropoly). The alternative is to write the action step-by-step. I am guessing that the complicated part would be to compute the correct version based on the history, but if we want to control the version manually this becomes pretty simple.

Good initiative!

Thank you for your thoughts @Drulex. The use of a "buffer" release branch sounds like a good idea, but we would need to figure out how to plug our changelog script. A few thoughts:

Currently, changelog works by looking at the GH milestone, which is assigned manually, so it would be great to get rid of that manual step. Ideally, if the PR commit message includes the magic word (ie: presence of "feat"/"fix" as trigger), the changelog script would look at the latest tag, and include all PRs after that tag.
If we go with a release branch, after triggering the GH action, my understanding is that the __init__ and CHANGELOG will be update automatically, so we need to make sure to merge back those updated files to master afterwards (which is not a big deal, but just so we are aware of all the manual interventions to do during the release workflow).

Closed for being stale, decided on suspending this idea for the moment.

A suggestion would be to use the same procedure as in https://ivadomed.org