First changes for using semver everywhere

This commit is contained in:
Trenton Holmes 2022-04-28 11:20:40 -07:00 committed by Trenton Holmes
parent 0f1e31643d
commit dce4166bc8
6 changed files with 53 additions and 16 deletions

View File

@ -260,8 +260,14 @@ jobs:
ghcr.io/${{ github.repository }} ghcr.io/${{ github.repository }}
name=paperlessngx/paperless-ngx,enable=${{ steps.docker-hub.outputs.enable }} name=paperlessngx/paperless-ngx,enable=${{ steps.docker-hub.outputs.enable }}
tags: | tags: |
# Tag branches with branch name
type=ref,event=branch type=ref,event=branch
# Tag tags with tag name
type=ref,event=tag type=ref,event=tag
# Process semver tags
# For a tag x.y.z or vX.Y.Z, output an x.y.z and x.y image tag
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
- -
name: Checkout name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v3

View File

@ -117,6 +117,23 @@ Then you can start paperless-ngx with ``-d`` to have it run in the background.
image: ghcr.io/paperless-ngx/paperless-ngx:latest image: ghcr.io/paperless-ngx/paperless-ngx:latest
.. note::
In version 1.7.1 and onwards, the Docker image can now pinned to a release series.
This is often combined with automatic updaters such as Watchtower to allow safer
unattended upgrading to new bugfix releases only. It is still recommended to always
review release notes before upgrading. To ping your install to a release series, edit
the ``docker-compose.yml`` find the line that says
.. code::
image: ghcr.io/paperless-ngx/paperless-ngx:latest
and replace the version with the series you want to track, for example:
.. code::
image: ghcr.io/paperless-ngx/paperless-ngx:1.7
Bare Metal Route Bare Metal Route
================ ================

View File

@ -2,6 +2,8 @@ import sphinx_rtd_theme
__version__ = None __version__ = None
__full_version_str__ = None
__major_minor_version_str__ = None
exec(open("../src/paperless/version.py").read()) exec(open("../src/paperless/version.py").read())
@ -41,9 +43,9 @@ copyright = "2015-2022, Daniel Quinn, Jonas Winkler, and the paperless-ngx team"
# #
# The short X.Y version. # The short X.Y version.
version = ".".join([str(_) for _ in __version__[:2]]) version = __major_minor_version_str__
# The full version, including alpha/beta/rc tags. # The full version, including alpha/beta/rc tags.
release = ".".join([str(_) for _ in __version__[:3]]) release = __full_version_str__
# The language for content autogenerated by Sphinx. Refer to documentation # The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages. # for a list of supported languages.

View File

@ -676,28 +676,33 @@ class RemoteVersionView(GenericAPIView):
def get(self, request, format=None): def get(self, request, format=None):
remote_version = "0.0.0" remote_version = "0.0.0"
is_greater_than_current = False is_greater_than_current = False
current_version = packaging_version.parse(version.__full_version_str__)
# TODO: this can likely be removed when frontend settings are saved to DB # TODO: this can likely be removed when frontend settings are saved to DB
feature_is_set = settings.ENABLE_UPDATE_CHECK != "default" feature_is_set = settings.ENABLE_UPDATE_CHECK != "default"
if feature_is_set and settings.ENABLE_UPDATE_CHECK: if feature_is_set and settings.ENABLE_UPDATE_CHECK:
try: try:
with urllib.request.urlopen( req = urllib.request.Request(
"https://api.github.com/repos/" "https://api.github.com/repos/paperless-ngx/"
+ "paperless-ngx/paperless-ngx/releases/latest", "paperless-ngx/releases/latest",
) as response: )
# Ensure a JSON response
req.add_header("Accept", "application/json")
with urllib.request.urlopen(req) as response:
remote = response.read().decode("utf-8") remote = response.read().decode("utf-8")
try: try:
remote_json = json.loads(remote) remote_json = json.loads(remote)
remote_version = remote_json["tag_name"].replace("ngx-", "") remote_version = remote_json["tag_name"].removeprefix("ngx-")
except ValueError: except ValueError:
logger.debug("An error occured parsing remote version json") logger.debug("An error occurred parsing remote version json")
except urllib.error.URLError: except urllib.error.URLError:
logger.debug("An error occured checking for available updates") logger.debug("An error occurred checking for available updates")
current_version = ".".join([str(_) for _ in version.__version__[:3]]) is_greater_than_current = (
is_greater_than_current = packaging_version.parse( packaging_version.parse(
remote_version, remote_version,
) > packaging_version.parse( )
current_version, > current_version
) )
return Response( return Response(

View File

@ -11,6 +11,6 @@ class ApiVersionMiddleware:
if request.user.is_authenticated: if request.user.is_authenticated:
versions = settings.REST_FRAMEWORK["ALLOWED_VERSIONS"] versions = settings.REST_FRAMEWORK["ALLOWED_VERSIONS"]
response["X-Api-Version"] = versions[len(versions) - 1] response["X-Api-Version"] = versions[len(versions) - 1]
response["X-Version"] = ".".join([str(_) for _ in version.__version__]) response["X-Version"] = version.__full_version_str__
return response return response

View File

@ -1 +1,8 @@
__version__ = (1, 7, 0) from typing import Final
from typing import Tuple
__version__: Final[Tuple[int, int, int]] = (1, 7, 0)
# Version string like X.Y.Z
__full_version_str__: Final[str] = ".".join(map(str, __version__))
# Version string like X.Y
__major_minor_version_str__: Final[str] = ".".join(map(str, __version__[:-1]))