]> git.ipfire.org Git - thirdparty/paperless-ngx.git/commitdiff
First changes for using semver everywhere
authorTrenton Holmes <trenton.holmes@psware.com>
Thu, 28 Apr 2022 18:20:40 +0000 (11:20 -0700)
committerTrenton Holmes <holmes.trenton@gmail.com>
Sun, 1 May 2022 20:21:10 +0000 (13:21 -0700)
.github/workflows/ci.yml
docs/administration.rst
docs/conf.py
src/documents/views.py
src/paperless/middleware.py
src/paperless/version.py

index fe52da55daa51d9238c973119d3ace610566c7f1..8fe71ac9a5056efd6295130e823cf5d9b33e202c 100644 (file)
@@ -260,8 +260,14 @@ jobs:
             ghcr.io/${{ github.repository }}
             name=paperlessngx/paperless-ngx,enable=${{ steps.docker-hub.outputs.enable }}
           tags: |
+            # Tag branches with branch name
             type=ref,event=branch
+            # Tag tags with tag name
             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
         uses: actions/checkout@v3
index 85f5734606de43ad0973ecdd2b4162d99960531f..1139c3a69c7a411f33b3927cc641ecf0102ffc4e 100644 (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
 
+    .. 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
 ================
 
index 19efbbdf8031f1f5311277790bdc216683af9f6a..0f30772ea4db3a196ccc668e0eb464c34da484ca 100644 (file)
@@ -2,6 +2,8 @@ import sphinx_rtd_theme
 
 
 __version__ = None
+__full_version_str__ = None
+__major_minor_version_str__ = None
 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.
-version = ".".join([str(_) for _ in __version__[:2]])
+version = __major_minor_version_str__
 # 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
 # for a list of supported languages.
index 831e68b688b9fffb6159f9ad9650a7639921dba0..d298023941235bb3ffc1d48e1c82175a9e19213b 100644 (file)
@@ -676,28 +676,33 @@ class RemoteVersionView(GenericAPIView):
     def get(self, request, format=None):
         remote_version = "0.0.0"
         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
         feature_is_set = settings.ENABLE_UPDATE_CHECK != "default"
         if feature_is_set and settings.ENABLE_UPDATE_CHECK:
             try:
-                with urllib.request.urlopen(
-                    "https://api.github.com/repos/"
-                    + "paperless-ngx/paperless-ngx/releases/latest",
-                ) as response:
+                req = urllib.request.Request(
+                    "https://api.github.com/repos/paperless-ngx/"
+                    "paperless-ngx/releases/latest",
+                )
+                # Ensure a JSON response
+                req.add_header("Accept", "application/json")
+
+                with urllib.request.urlopen(req) as response:
                     remote = response.read().decode("utf-8")
                 try:
                     remote_json = json.loads(remote)
-                    remote_version = remote_json["tag_name"].replace("ngx-", "")
+                    remote_version = remote_json["tag_name"].removeprefix("ngx-")
                 except ValueError:
-                    logger.debug("An error occured parsing remote version json")
+                    logger.debug("An error occurred parsing remote version json")
             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 = packaging_version.parse(
-                remote_version,
-            ) > packaging_version.parse(
-                current_version,
+            is_greater_than_current = (
+                packaging_version.parse(
+                    remote_version,
+                )
+                > current_version
             )
 
         return Response(
index f82ba243550d8eb4676ed4aa63dfdf4ff96af9ac..ddf12812bb980ebc2a90241c0999b2c62e0f74b1 100644 (file)
@@ -11,6 +11,6 @@ class ApiVersionMiddleware:
         if request.user.is_authenticated:
             versions = settings.REST_FRAMEWORK["ALLOWED_VERSIONS"]
             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
index 8c908319fd1f143a5e8c3076ef14c953fa2d103b..44d20435ae8b646edf80be8e14e88dc1534b0212 100644 (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]))