Use semantic versioning.
PiperOrigin-RevId: 869102767 Change-Id: I8b01b9343289d4ad7d15bcc3634a28e661308a90
This commit is contained in:
committed by
Copybara-Service
parent
a8cf4e012d
commit
c54f1fe380
@@ -98,6 +98,12 @@ Note that Pre-built Linux wheels target `manylinux2014`, see
|
|||||||
information such as building the bindings from source, see the [Python bindings]
|
information such as building the bindings from source, see the [Python bindings]
|
||||||
section of the documentation.
|
section of the documentation.
|
||||||
|
|
||||||
|
## Versioning
|
||||||
|
|
||||||
|
We aim to release MuJoCo in the first week of each month. Our versioning
|
||||||
|
standards changed to modified Semantic Versioning in 3.5.0,
|
||||||
|
see [versioning](VERSIONING.md) for details.
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
We welcome community engagement: questions, requests for help, bug reports and
|
We welcome community engagement: questions, requests for help, bug reports and
|
||||||
|
|||||||
@@ -0,0 +1,75 @@
|
|||||||
|
# MuJoCo Versioning
|
||||||
|
|
||||||
|
MuJoCo uses custom semantic versioning from 3.5.0 onwards, see below.
|
||||||
|
|
||||||
|
### The problem with Semantic Versioning
|
||||||
|
|
||||||
|
The common definition of traditional [Semantic Versioning](https://semver.org/)
|
||||||
|
is
|
||||||
|
|
||||||
|
```
|
||||||
|
1. MAJOR: breaking changes
|
||||||
|
2. MINOR: new features
|
||||||
|
3. PATCH: bug fixes
|
||||||
|
```
|
||||||
|
|
||||||
|
With strict adherence to this definition, most MuJoCo releases are `MAJOR`. This
|
||||||
|
is because MuJoCo has a very large API surface, especially when considering
|
||||||
|
[MJCF](https://mujoco.readthedocs.io/en/stable/XMLreference.html) and the
|
||||||
|
related
|
||||||
|
[mjSpec](https://mujoco.readthedocs.io/en/stable/programming/modeledit.html)
|
||||||
|
API. Furthermore, the numerical properties of physics state integration mean
|
||||||
|
that despite being deterministic, numerical reproducibility across versions is
|
||||||
|
almost guaranteed to
|
||||||
|
[not hold](https://mujoco.readthedocs.io/en/stable/computation/index.html#reproducibility).
|
||||||
|
|
||||||
|
## From 3.5.0 – semantic versioning
|
||||||
|
|
||||||
|
From 3.5.0 onwards MuJoCo uses well-defined versioning with the following
|
||||||
|
semantics.
|
||||||
|
|
||||||
|
### MuJoCo versioning semantics
|
||||||
|
|
||||||
|
```
|
||||||
|
1. SUPERMAJOR: breaking changes and/or significant new features
|
||||||
|
2. MAJOR: breaking changes, possibly new features
|
||||||
|
3. MINOR_OR_PATCH: new features or bug fixes
|
||||||
|
```
|
||||||
|
|
||||||
|
`MINOR_OR_PATCH` guarantees API backward compatibility, but may or may not
|
||||||
|
introduce new features; to find out, read the
|
||||||
|
[changelog](https://mujoco.readthedocs.io/en/stable/changelog.html), which will
|
||||||
|
detail the nature of the changes. The changelog will also detail pure
|
||||||
|
ABI-breaking changes, for example removing an unused attribute from a public
|
||||||
|
struct. Such changes are considered MINOR. As explained
|
||||||
|
[here](https://mujoco.readthedocs.io/en/stable/computation/index.html#reproducibility),
|
||||||
|
numerical reproducibility is *never* guaranteed.
|
||||||
|
|
||||||
|
Additionally:
|
||||||
|
|
||||||
|
- `mj_versionString()` works as before, returning e.g. `"4.2.1"`.
|
||||||
|
- `mj_version()` works as before, returning an integer. The corresponding
|
||||||
|
header constant `mjVERSION_HEADER` is calculated from the components as:
|
||||||
|
|
||||||
|
```
|
||||||
|
mjVERSION = (SUPERMAJOR * 1e6) + (MAJOR * 1e3) + MINOR_OR_PATCH
|
||||||
|
```
|
||||||
|
|
||||||
|
For example, 4.2.1 would be `4002001`.
|
||||||
|
|
||||||
|
## Prior to 3.5.0 – no semantics
|
||||||
|
|
||||||
|
Until 3.5.0, versioning was a sequence of increasing numbers with no
|
||||||
|
well-defined semantic, with the exception of major versions introducing
|
||||||
|
significant new features, like
|
||||||
|
[3.0.0](https://mujoco.readthedocs.io/en/stable/changelog.html#version-3-0-0-october-18-2023)'s
|
||||||
|
introduction of the JAX-based
|
||||||
|
[MJX](https://mujoco.readthedocs.io/en/stable/mjx.html) branch. Additionally:
|
||||||
|
|
||||||
|
- The function
|
||||||
|
[`const char* mj_versionString()`](https://mujoco.readthedocs.io/en/stable/APIreference/APIfunctions.html#mj-versionstring)
|
||||||
|
returns the version in the form of a string, for example `"3.2.7"`.
|
||||||
|
- The function
|
||||||
|
[`int mj_version()`](https://mujoco.readthedocs.io/en/stable/APIreference/APIfunctions.html#mj-version)
|
||||||
|
returns an integer equal to the version digits concatenated,
|
||||||
|
for example for "3.2.7" we'd have `mjVERSION = 327`.
|
||||||
@@ -527,11 +527,12 @@ shown in the table below. Their names are in the format ``mjKEY_XXX``. They corr
|
|||||||
- Maximum number of UI rectangles.
|
- Maximum number of UI rectangles.
|
||||||
Defined in `mjui.h <https://github.com/google-deepmind/mujoco/blob/main/include/mujoco/mjui.h>`_.
|
Defined in `mjui.h <https://github.com/google-deepmind/mujoco/blob/main/include/mujoco/mjui.h>`_.
|
||||||
* - ``mjVERSION_HEADER``
|
* - ``mjVERSION_HEADER``
|
||||||
- 350
|
- 3005000
|
||||||
- The version of the MuJoCo headers; changes with every release. This is an integer equal to 100x the software
|
- The version of the MuJoCo headers. This is an integer calculated from the version string "S.M.P"
|
||||||
version, so 210 corresponds to version 2.1. Defined in mujoco.h. The API function :ref:`mj_version` returns a
|
using the formula ``(S * 1e6) + (M * 1e3) + P``. For example, version 4.2.1 is represented as 4002001.
|
||||||
number with the same meaning but for the compiled library.
|
Defined in mujoco.h. The API function :ref:`mj_version` returns a number with the same meaning
|
||||||
|
but for the compiled library. See
|
||||||
|
`VERSIONING.md <https://github.com/google-deepmind/mujoco/blob/main/VERSIONING.md>`__ for details.
|
||||||
|
|
||||||
.. _Macros:
|
.. _Macros:
|
||||||
|
|
||||||
|
|||||||
@@ -191,7 +191,7 @@ Versions and compatibility
|
|||||||
|
|
||||||
MuJoCo has been used extensively since 2010 and is quite mature (even though our version numbering scheme is quite
|
MuJoCo has been used extensively since 2010 and is quite mature (even though our version numbering scheme is quite
|
||||||
conservative). Nevertheless it remains under active development, and we have many exciting ideas for new features and
|
conservative). Nevertheless it remains under active development, and we have many exciting ideas for new features and
|
||||||
are also making changes based on user feedback. This leads to unavoidable changes in both the modeling language in the
|
are also making changes based on user feedback. This leads to unavoidable changes in both the modeling language and the
|
||||||
API. While we encourage users to upgrade to the latest version, we recognize that this is not always feasible,
|
API. While we encourage users to upgrade to the latest version, we recognize that this is not always feasible,
|
||||||
especially when other developers release software that relies on MuJoCo. Therefore we have introduced simple
|
especially when other developers release software that relies on MuJoCo. Therefore we have introduced simple
|
||||||
mechanisms to help avoid version conflicts, as follows.
|
mechanisms to help avoid version conflicts, as follows.
|
||||||
@@ -206,13 +206,14 @@ the symbol :ref:`mjVERSION_HEADER <glNumeric>` and the library provides the func
|
|||||||
.. code-block:: C
|
.. code-block:: C
|
||||||
|
|
||||||
// recommended version check
|
// recommended version check
|
||||||
if (mjVERSION_HEADER!=mj_version())
|
if (mjVERSION_HEADER != mj_version())
|
||||||
complain();
|
complain();
|
||||||
|
|
||||||
Note that only the main header defines this symbol. We assume that the collection of headers released with each software
|
Note that only the main header defines this symbol. We assume that the collection of headers released with each software
|
||||||
version will stay together and will not be mixed between versions. To avoid complications with floating-point
|
version will stay together and will not be mixed between versions. To avoid complications with floating-point
|
||||||
comparisons, the above symbol and function use integers that are 100x the version number, so for example in software
|
comparisons, the above symbol and function use integers rather than floating-point numbers. See
|
||||||
version 2.1 the symbol mjVERSION_HEADER is defined as 210.
|
`VERSIONING.md <https://github.com/google-deepmind/mujoco/blob/main/VERSIONING.md>`__ for the encoding formula and
|
||||||
|
version semantics.
|
||||||
|
|
||||||
.. _inNaming:
|
.. _inNaming:
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
#define MUJOCO_MUJOCO_H_
|
#define MUJOCO_MUJOCO_H_
|
||||||
|
|
||||||
// header version; should match the library version as returned by mj_version()
|
// header version; should match the library version as returned by mj_version()
|
||||||
#define mjVERSION_HEADER 350
|
#define mjVERSION_HEADER 3005000
|
||||||
|
|
||||||
// needed to define size_t, fabs and log10
|
// needed to define size_t, fabs and log10
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|||||||
@@ -43,7 +43,7 @@
|
|||||||
|
|
||||||
//-------------------------- Constants -------------------------------------------------------------
|
//-------------------------- Constants -------------------------------------------------------------
|
||||||
|
|
||||||
#define mjVERSION 350
|
#define mjVERSION 3005000
|
||||||
#define mjVERSIONSTRING "3.5.0"
|
#define mjVERSIONSTRING "3.5.0"
|
||||||
|
|
||||||
// names of disable flags
|
// names of disable flags
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ public const int mjMAXLINEPNT = 1001;
|
|||||||
public const int mjMAXPLANEGRID = 200;
|
public const int mjMAXPLANEGRID = 200;
|
||||||
public const bool THIRD_PARTY_MUJOCO_MJXMACRO_H_ = true;
|
public const bool THIRD_PARTY_MUJOCO_MJXMACRO_H_ = true;
|
||||||
public const bool THIRD_PARTY_MUJOCO_MUJOCO_H_ = true;
|
public const bool THIRD_PARTY_MUJOCO_MUJOCO_H_ = true;
|
||||||
public const int mjVERSION_HEADER = 350;
|
public const int mjVERSION_HEADER = 3005000;
|
||||||
|
|
||||||
|
|
||||||
// ------------------------------------Enums------------------------------------
|
// ------------------------------------Enums------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user