diff --git a/docs/changelog.rst b/docs/changelog.rst
index e7045161..75917494 100644
--- a/docs/changelog.rst
+++ b/docs/changelog.rst
@@ -17,8 +17,13 @@ Release Notes
To avail of fixes in an unreleased version, please download a ZIP file
`directly from GitHub `_.
-v0.3.0 (unreleased)
---------------------
+
+v0.3.1.dev0 (unreleased)
+------------------------
+
+
+v0.3.0 (2021-11-24)
+-------------------
This release separates itself from the v0.2.X releases. Ansible's API changed too much to support backwards compatibility so from now on, v0.2.X releases will be for Ansible < 2.10 and v0.3.X will be for Ansible 2.10+.
`See here for details `_.
@@ -30,7 +35,7 @@ This release separates itself from the v0.2.X releases. Ansible's API changed to
* :gh:issue:`847` Removed historic Continuous Integration reverse shell
-v0.2.10 (unreleased)
+v0.2.10 (2021-11-24)
--------------------
* :gh:issue:`597` mitogen does not support Ansible 2.8 Python interpreter detection
diff --git a/mitogen/__init__.py b/mitogen/__init__.py
index 9e709d7d..8df8bfe2 100644
--- a/mitogen/__init__.py
+++ b/mitogen/__init__.py
@@ -35,7 +35,7 @@ be expected. On the slave, it is built dynamically during startup.
#: Library version as a tuple.
-__version__ = (0, 3, 0, 'rc', 1)
+__version__ = (0, 3, 1, 'dev0')
#: This is :data:`False` in slave contexts. Previously it was used to prevent
diff --git a/setup.py b/setup.py
index bd105147..8d3c75df 100644
--- a/setup.py
+++ b/setup.py
@@ -26,6 +26,7 @@
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+import ast
import os
from setuptools import find_packages, setup
@@ -37,7 +38,8 @@ def grep_version():
for line in fp:
if line.startswith('__version__'):
_, _, s = line.partition('=')
- return '%i.%i.%i%s%i' % eval(s)
+ parts = ast.literal_eval(s.strip())
+ return '.'.join(str(part) for part in parts)
def long_description():