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
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
================
__version__ = None
+__full_version_str__ = None
+__major_minor_version_str__ = None
exec(open("../src/paperless/version.py").read())
#
# 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.
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(
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
-__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]))