Skip to content

Commit

Permalink
Show Geany-Plugins releases also on the download page
Browse files Browse the repository at this point in the history
The available release files are read from the filesystem and so don't
need to be updated manually.
  • Loading branch information
eht16 committed Sep 27, 2020
1 parent d2728e9 commit b84b561
Show file tree
Hide file tree
Showing 6 changed files with 70 additions and 32 deletions.
1 change: 1 addition & 0 deletions README.dev.md
Expand Up @@ -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'

Expand Down
3 changes: 2 additions & 1 deletion docker/local_settings.docker.py
Expand Up @@ -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,
Expand Down
1 change: 1 addition & 0 deletions geany/settings.py
Expand Up @@ -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')

Expand Down
9 changes: 8 additions & 1 deletion latest_version/context_processors.py
Expand Up @@ -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)
72 changes: 46 additions & 26 deletions latest_version/releases.py
Expand Up @@ -16,6 +16,7 @@
import logging
import re

from django.conf import settings
from packaging.version import parse as parse_version


Expand All @@ -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'
},
},
}

Expand Down Expand Up @@ -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()
Expand All @@ -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):
Expand All @@ -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(
Expand Down
16 changes: 12 additions & 4 deletions page_content/download/releases.md
@@ -1,5 +1,4 @@
Releases
==========
## Geany Releases

Distribution | File | GPG Signature | GPG Key
----------------- | ------------- | ------------- | -------------
Expand All @@ -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].

Expand All @@ -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

0 comments on commit b84b561

Please sign in to comment.