-
Notifications
You must be signed in to change notification settings - Fork 525
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add Versioning Support from version.txt
#3140
base: develop
Are you sure you want to change the base?
Add Versioning Support from version.txt
#3140
Conversation
Not sure how to resolve this ERROR: THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE.
If you have updated the package versions, please update the hashes. Otherwise,
examine the package contents carefully; someone may have tampered with them.
unknown package:
Expected sha256 f728bb61f43fce850d622ced3b3d51b3116f767685ca4e4e0076f624e2d2307d
Got afe0e1873a0a0858a245ccd771066eddc07d20068859f1dd669a002e5dc68a65 |
pyproject.toml
Outdated
@@ -58,6 +58,9 @@ Documentation = "https://docs.openmc.org" | |||
Repository = "https://github.com/openmc-dev/openmc" | |||
Issues = "https://github.com/openmc-dev/openmc/issues" | |||
|
|||
[tool.setuptools.dynamic] | |||
version = {file = "tools/version.txt"} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Does this file need locating elsewhere, perhaps in the source code. I'm not sure but perhaps that helps when packaging as I don't think the tools folder is included in the packaging (e.g. conda)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This file is only required at build time. If it is necessary at runtime, we can put it in the root dir.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It appears that openmc-feedstock uses a specific release tar file, which includes all the folders, including the tools folder.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for answering this
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not an expert, but this doesn't feel like a tools
sort of thing. To me it feels like a top level file.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Doing it this way means openmc.__version__
still works due to how __version__
is populated.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have stored this file in the tools directory because it is only required during build time. Python's wheel uses it to create the wheel, and CMake uses it to generate the version.h
file. Additionally, we can use this file for other purposes. I placed it in that folder to keep the root directory clean. However, if necessary, we can move it to the root directory.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I tend to agree that this is more of a root-level file.
The CI passed when I rerun a single job just now. So I have re triggered the others and I guess it will pass now. I think the previous failure was unrelated to this CI |
CI is all green 🎉 Do you think it is worth adding a version test to the pytests, perhaps something like this |
I have already added something similar to this in the CMakeLists.txt, which will perform a similar task during configuration. I am also using setuptools to get the version number on the Python side, which will cause an error if an improper format is set. |
This looks good to me, does anyone else want to take a peak. Perhaps @MicahGale |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Design looks good. However this doesn't seem to be propagating to the C++ side properly in my testing.
I followed the build from source method cmake .. && make
. However build/bin/openmc -v
was still showing openmc version 0.15.0
.
pyproject.toml
Outdated
@@ -58,6 +58,9 @@ Documentation = "https://docs.openmc.org" | |||
Repository = "https://github.com/openmc-dev/openmc" | |||
Issues = "https://github.com/openmc-dev/openmc/issues" | |||
|
|||
[tool.setuptools.dynamic] | |||
version = {file = "tools/version.txt"} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not an expert, but this doesn't feel like a tools
sort of thing. To me it feels like a top level file.
tools/version.txt
Outdated
@@ -0,0 +1 @@ | |||
1.15.1-dev |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is probably beyond the scope of this PR alone, but this isn't PyPA compliant. It should be: 0.15.1.devN
(Probably dev1
?). Also you accidentally incremented a major release.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Setuptools will handle the task for us, so we can continue using the legacy format.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is something setuptools does because it's nice to do; not because it has to. I think changing to PyPA compliant is a small change that would reduce the risk of something breaking in the future. (Honestly I don't think many people would even notice beyond some of the core devs.)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
PyPA does allow -dev
but probably better to use a dot since it's perferred
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks. TIL.
pyproject.toml
Outdated
@@ -58,6 +58,9 @@ Documentation = "https://docs.openmc.org" | |||
Repository = "https://github.com/openmc-dev/openmc" | |||
Issues = "https://github.com/openmc-dev/openmc/issues" | |||
|
|||
[tool.setuptools.dynamic] | |||
version = {file = "tools/version.txt"} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Doing it this way means openmc.__version__
still works due to how __version__
is populated.
It seems you have an old version of openmc installed. And you have exported that on your PATH. You can easily review it by calling
|
Oh yep that was my issue. I'm used to python where |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Adding a suggestion for convenience.
pyproject.toml
Outdated
@@ -58,6 +58,9 @@ Documentation = "https://docs.openmc.org" | |||
Repository = "https://github.com/openmc-dev/openmc" | |||
Issues = "https://github.com/openmc-dev/openmc/issues" | |||
|
|||
[tool.setuptools.dynamic] | |||
version = {file = "tools/version.txt"} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I tend to agree that this is more of a root-level file.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A few immediate thoughts:
- Some people argue that you shouldn't store version information in files in the first place. If there's a way we can do this that automatically pulls information from git, that would probably be better.
- If we do go with what you have here, there's one more instance of hardcoding of the version in
docs/source/conf.py
.
@paulromano: @gonuke brought up some good points, that there are use cases for when the source code may be used while detached from git. I'm not sure right now of a work-around for that case using
I'd recommend that @ahnaf-tahmid-chowdhury go with using a |
I have added the Recently, I noticed @MicahGale's comment on this. We can use |
It seems docs buils are passing https://readthedocs.org/projects/openmc/builds/25766475/ We can use |
We definitely came here, @paulromano , to get broader perspective on this issue. I definitely like the elegance of git being a single source of truth, but worry about folks who build from tarballs (e.g. those generated automatically by GitHub upon release) rather than clones. Do we ignore them? Or do we find a way to make that work, too? |
@gonuke one thing I thought about is that |
An additional note: If we use |
@ahnaf-tahmid-chowdhury Good point. Do you want to try and see if we could make a CI release that would embed a version file in a release tar ball from |
For this, we may need to use a workflow to build OpenMC that will create the version file. Once done, it will push the updated commit to the develop branch. We can use any existing workflow, like this one, and it will only run if the PR gets merged. Let me know if I should proceed with that approach. |
No this is a bad idea. |
We are currently working on PR #3087, which will create wheel (.whl) artifacts after a release. Your approach is good, but GitHub automatically creates its own tarball with each release. So, in the end, we will be releasing multiple tarballs. And, I am unfamiliar with resolving that. |
This is the current configuration:
You will also get commit hash information even if you haven’t used the git repository or don’t have git installed. |
@ahnaf-tahmid-chowdhury Thanks for the updates. There is still one outstanding request from above:
|
I think you're suggesting adding the number of commits above the stable release, like Currently, the version appears like this:
I believe you're proposing something like this:
For reference, Could you please confirm if this is what you have in mind, or clarify further? |
Sorry, to clarify further, what I mean is that if the last tagged release is 0.15.0 and there are commits past that, it should increment the release number so that it shows the 0.15.1-dev. This is what we currently do manually, and it also matches the behavior of setuptools_scm. If you run $ python -m setuptools_scm
0.15.2.dev42+g2b47355f2 This means that CMakeLists.txt would be responsible for incrementing the release number if there are changes past the last tag. |
I would like to bring up this discussion: #3140 (comment). I still think it would be easiest to just call |
Update
We can shift to |
@ahnaf-tahmid-chowdhury It still doesn't look like there is logic to bump the release number (the second "0" in "0.15.0"). It should show |
Thanks for the explanation. I apologize for the misunderstanding. The release number increment for dev versions is important and makes sense. I have added a logic where in dev mode cmake will increment the release number by 1. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A little typo....?
Co-authored-by: Paul Wilson <[email protected]>
Co-authored-by: Paul Wilson <[email protected]>
98584de
to
1603dc5
Compare
Co-authored-by: Paul Wilson <[email protected]>
Co-authored-by: Olek <[email protected]> Co-authored-by: Paul Romano <[email protected]>
Co-authored-by: Andrew Johnson <[email protected]> Co-authored-by: Paul Romano <[email protected]>
Co-authored-by: Paul Romano <[email protected]>
Co-authored-by: Jon Shimwell <[email protected]>
Co-authored-by: Paul Romano <[email protected]>
Co-authored-by: Jonathan Shimwell <[email protected]>
Overview
This pull request introduces a versioning mechanism that utilizes a
version.txt
file located in thetools
folder. Bothpyproject.toml
andCMakeLists.txt
have been updated to read version information from this file, ensuring consistency across the project.Changes
Added
version.txt
: A new file in thetools
directory containing the version string in the formatX.X.X
orX.X.X-any
.Updated
pyproject.toml
:pyproject.toml
is now set to read the version fromversion.txt
. This enables automatic versioning based on the contents ofversion.txt
.Updated
CMakeLists.txt
:version.txt
and set theOPENMC_VERSION
accordingly.-dev
,-any
), ensuring that the header files use only the main version number without the suffix.Benefits
version.txt
) ensures that both Python and CMake projects remain in sync.Fixs