From b84b56185c31e489bee4ef0b40ee8a889964b009 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrico=20Tr=C3=B6ger?= Date: Sun, 27 Sep 2020 23:01:37 +0200 Subject: [PATCH] Show Geany-Plugins releases also on the download page The available release files are read from the filesystem and so don't need to be updated manually. --- README.dev.md | 1 + docker/local_settings.docker.py | 3 +- geany/settings.py | 1 + latest_version/context_processors.py | 9 +++- latest_version/releases.py | 72 ++++++++++++++++++---------- page_content/download/releases.md | 16 +++++-- 6 files changed, 70 insertions(+), 32 deletions(-) diff --git a/README.dev.md b/README.dev.md index 78b8ba2..98f8bdd 100644 --- a/README.dev.md +++ b/README.dev.md @@ -112,6 +112,7 @@ the settings to your needs: LOGGING['handlers']['file']['filename'] = '/tmp/geany_django.log' LATEST_VERSION_RELEASES_DIRECTORY = '/path/to/geany/releases/directory/or/just/empty' + LATEST_VERSION_PLUGINS_RELEASES_DIRECTORY = '/path/to/plugins/releases/directory/or/just/empty' STATIC_DOCS_GEANY_SOURCE_TARBALL = '/path/to/geany/source/tarball/or/just/empty' IRC_USER_LIST_FILE = '/path/to/irc/data/or/just/empty' diff --git a/docker/local_settings.docker.py b/docker/local_settings.docker.py index cfa6cd9..f5c5021 100644 --- a/docker/local_settings.docker.py +++ b/docker/local_settings.docker.py @@ -55,7 +55,8 @@ STATIC_DOCS_GEANY_DESTINATION_URL = os.path.join(MEDIA_URL, 'i18n') STATIC_DOCS_GEANY_I18N_STATISTICS_FILENAME = 'i18n_statistics.json' -LATEST_VERSION_RELEASES_DIRECTORY = '' +LATEST_VERSION_RELEASES_DIRECTORY = '/nonexistant/geany' +LATEST_VERSION_PLUGINS_RELEASES_DIRECTORY = '/nonexistant/plugins' LOGGING = { 'version': 1, diff --git a/geany/settings.py b/geany/settings.py index 0251a3f..dfc8a38 100644 --- a/geany/settings.py +++ b/geany/settings.py @@ -458,6 +458,7 @@ IRC_USER_LIST_FILE = '/srv/tmp/irc_userlist' LATEST_VERSION_RELEASES_DIRECTORY = '/srv/www/download.geany.org' +LATEST_VERSION_PLUGINS_RELEASES_DIRECTORY = '/srv/www/plugins.geany.org/geany-plugins/' MEZZANINE_SYNC_PAGES_DESTINATION_PATH = os.path.join(PROJECT_ROOT, 'page_content') diff --git a/latest_version/context_processors.py b/latest_version/context_processors.py index 1f60221..47c27ca 100644 --- a/latest_version/context_processors.py +++ b/latest_version/context_processors.py @@ -24,11 +24,18 @@ def latest_version(request): geany_latest_version = LatestVersion.objects.get(id=1) + # Geany release_versions_provider = ReleaseVersionsProvider( settings.LATEST_VERSION_RELEASES_DIRECTORY, fallback_version=geany_latest_version.version) release_versions = release_versions_provider.provide() + # Geany-Plugins + geany_plugins_release_versions_provider = ReleaseVersionsProvider( + settings.LATEST_VERSION_PLUGINS_RELEASES_DIRECTORY, + fallback_version=geany_latest_version.version) + plugins_release_versions = geany_plugins_release_versions_provider.provide() return dict( geany_latest_version=geany_latest_version, - release_versions=release_versions) + release_versions=release_versions, + plugins_release_versions=plugins_release_versions) diff --git a/latest_version/releases.py b/latest_version/releases.py index bef0012..a4737b9 100644 --- a/latest_version/releases.py +++ b/latest_version/releases.py @@ -16,6 +16,7 @@ import logging import re +from django.conf import settings from packaging.version import parse as parse_version @@ -25,21 +26,38 @@ RELEASE_TYPE_MACOS = 'macos_version' RELEASE_TYPES = { - RELEASE_TYPE_SOURCE_GZIP: { - 'pattern': re.compile(r'^geany-([0-9\.\-]+).tar.gz$'), - 'fallback_filename': 'geany-{version}.tar.gz' + settings.LATEST_VERSION_RELEASES_DIRECTORY: { + RELEASE_TYPE_SOURCE_GZIP: { + 'pattern': re.compile(r'^geany-([0-9\.\-]+).tar.gz$'), + 'fallback_filename': 'geany-{version}.tar.gz' + }, + RELEASE_TYPE_SOURCE_BZIP2: { + 'pattern': re.compile(r'^geany-([0-9\.\-]+).tar.bz2$'), + 'fallback_filename': 'geany-{version}.tar.bz2' + }, + RELEASE_TYPE_WINDOWS: { + 'pattern': re.compile(r'^geany-([0-9\.\-]+)_setup(-[0-9]+)?.exe$'), + 'fallback_filename': 'geany-{version}_setup.exe' + }, + RELEASE_TYPE_MACOS: { + 'pattern': re.compile(r'^geany-([0-9\.\-]+)_osx(-[0-9]+)?.dmg$'), + 'fallback_filename': 'geany-{version}_osx.dmg' + }, }, - RELEASE_TYPE_SOURCE_BZIP2: { - 'pattern': re.compile(r'^geany-([0-9\.\-]+).tar.bz2$'), - 'fallback_filename': 'geany-{version}.tar.bz2' - }, - RELEASE_TYPE_WINDOWS: { - 'pattern': re.compile(r'^geany-([0-9\.\-]+)_setup(-[0-9]+)?.exe$'), - 'fallback_filename': 'geany-{version}_setup.exe' - }, - RELEASE_TYPE_MACOS: { - 'pattern': re.compile(r'^geany-([0-9\.\-]+)_osx(-[0-9]+)?.dmg$'), - 'fallback_filename': 'geany-{version}_osx.dmg' + + settings.LATEST_VERSION_PLUGINS_RELEASES_DIRECTORY: { + RELEASE_TYPE_SOURCE_GZIP: { + 'pattern': re.compile(r'^geany-plugins-([0-9\.\-]+).tar.gz$'), + 'fallback_filename': 'geany-plugins-{version}.tar.gz' + }, + RELEASE_TYPE_SOURCE_BZIP2: { + 'pattern': re.compile(r'^geany-plugins-([0-9\.\-]+).tar.bz2$'), + 'fallback_filename': 'geany-plugins-{version}.tar.bz2' + }, + RELEASE_TYPE_WINDOWS: { + 'pattern': re.compile(r'^geany-plugins-([0-9\.\-]+)_setup(-[0-9]+)?.exe$'), + 'fallback_filename': 'geany-plugins-{version}_setup.exe' + }, }, } @@ -81,6 +99,9 @@ def _fetch_releases_from_filesystem(self): return path = Path(self._releases_directory) + if not path.exists(): + return + for entry in path.iterdir(): relative_entry = entry.relative_to(self._releases_directory) filename = relative_entry.as_posix() @@ -89,21 +110,19 @@ def _fetch_releases_from_filesystem(self): # ---------------------------------------------------------------------- def _group_releases_by_type(self): self._release_files_by_version = dict() - for release_type in RELEASE_TYPES: + release_types = self._get_release_types() + for release_type in release_types: self._release_files_by_version[release_type] = list() for filename in self._release_files: - if RELEASE_TYPES[RELEASE_TYPE_SOURCE_GZIP]['pattern'].match(filename): - self._release_files_by_version[RELEASE_TYPE_SOURCE_GZIP].append(filename) - - elif RELEASE_TYPES[RELEASE_TYPE_SOURCE_BZIP2]['pattern'].match(filename): - self._release_files_by_version[RELEASE_TYPE_SOURCE_BZIP2].append(filename) + for release_type in release_types: + if release_types[release_type]['pattern'].match(filename): + self._release_files_by_version[release_type].append(filename) + break - elif RELEASE_TYPES[RELEASE_TYPE_WINDOWS]['pattern'].match(filename): - self._release_files_by_version[RELEASE_TYPE_WINDOWS].append(filename) - - elif RELEASE_TYPES[RELEASE_TYPE_MACOS]['pattern'].match(filename): - self._release_files_by_version[RELEASE_TYPE_MACOS].append(filename) + # ---------------------------------------------------------------------- + def _get_release_types(self): + return RELEASE_TYPES.get(self._releases_directory, dict()) # ---------------------------------------------------------------------- def _factor_release_versions(self): @@ -117,12 +136,13 @@ def _factor_release_versions(self): def _determine_latest_version(self, release_type): versions = self._release_files_by_version[release_type] sorted_versions = sorted(versions, key=parse_version) + release_types = self._get_release_types() try: latest_version = sorted_versions.pop() logger.debug( 'Latest version found for "{}": {}'.format(release_type, latest_version)) except IndexError: - fallback_filename = RELEASE_TYPES[release_type]['fallback_filename'] + fallback_filename = release_types[release_type]['fallback_filename'] latest_version = fallback_filename.format(version=self._fallback_version) logger.debug( 'Latest version found for "{}": {} (fallback)'.format( diff --git a/page_content/download/releases.md b/page_content/download/releases.md index 54a00ec..354faa5 100644 --- a/page_content/download/releases.md +++ b/page_content/download/releases.md @@ -1,5 +1,4 @@ -Releases -========== +## Geany Releases Distribution | File | GPG Signature | GPG Key ----------------- | ------------- | ------------- | ------------- @@ -11,10 +10,17 @@ Mac OSX | [{{ release_versions.macos_version }}](https://download.gean [Release notes for Geany {{ geany_latest_version.version }}][3] -## Plugins +## Geany-Plugins Releases Geany has a few plugins included (Classbuilder, Export, Filebrowser, HTML Characters, Save Actions and Split Window) -but many more plugins are available in the [Geany-Plugins][5] project. +but many more plugins are available in the [Geany-Plugins][5] project: + +Distribution | File | GPG Signature | GPG Key +----------------- | ------------- | ------------- | ------------- +Source (tar.gz) | [{{ plugins_release_versions.source_gzip_version }}](https://plugins.geany.org/geany-plugins/{{ plugins_release_versions.source_gzip_version }}) | [{{ plugins_release_versions.source_gzip_version }}.sig](https://plugins.geany.org/geany-plugins/{{ plugins_release_versions.source_gzip_version }}.sig) ([Instructions][4]) | [frlan-pubkey.txt][6] +Source (tar.bz2) | [{{ plugins_release_versions.source_bzip2_version }}](https://plugins.geany.org/geany-plugins/{{ plugins_release_versions.source_bzip2_version }}) | [{{ plugins_release_versions.source_bzip2_version }}.sig](https://plugins.geany.org/geany-plugins/{{ plugins_release_versions.source_bzip2_version }}.sig) ([Instructions][4]) | [frlan-pubkey.txt][6] +Windows | [{{ plugins_release_versions.windows_version }}](https://plugins.geany.org/geany-plugins/{{ plugins_release_versions.windows_version }}) | [{{ plugins_release_versions.windows_version }}.sig](https://plugins.geany.org/geany-plugins/{{ plugins_release_versions.windows_version }}.sig) ([Instructions][4]) | [frlan-pubkey.txt][6] +Mac OSX | (included in `{{ release_versions.macos_version }}` above) | - | - For more details, see the [plugin page][5]. @@ -28,9 +34,11 @@ For older versions, please see https://download.geany.org/. - Note: Tarballs before 1.25 used another GPG Key: https://download.geany.org/colombanw-pubkey-pre-1.25.txt - Note: Tarballs before 0.21 used another GPG Key: https://download.geany.org/ntrel-pubkey.txt - Note: Tarballs before 0.20 used another GPG Key: https://download.geany.org/eht16-pubkey_old.txt +- Note: Geany-Plugins downloads use the following GPG Key: https://download.geany.org/frlan-pubkey.txt [1]: https://download.geany.org/colombanw-pubkey.txt [2]: https://download.geany.org/eht16-pubkey.txt [3]: /documentation/releasenotes/ [4]: /support/verify-gpg-signature/ [5]: /support/plugins/ +[6]: https://download.geany.org/frlan-pubkey.txt