1. Summary
Pelican Stork search doesnβt work correctly on my Windows if OUTPUT_PATH
setting is custom.
After fixing I can successfully use Pelican Stork search:
2. MCVE files
You can see this MCVE configuration on the KiraPelicanPluginsSitemapStork
branch of my demo repository for testing Pelican.
All files except those listed below are the result of running the command pelican-quickstart
.
-
pelicanconf.py
"""MCVE."""
# [INFO] Default settings
AUTHOR = 'Sasha Chernykh'
SITENAME = 'SashaPelicanDebugging'
SITEURL = 'https://kristinita.netlify.app'
PATH = 'content'
TIMEZONE = 'Europe/Moscow'
DEFAULT_LANG = 'en'
ARTICLE_PATHS = [
'Articles'
]
MARKDOWN = {
'output_format': 'html5',
}
# [INFO] Settings for this issue
PLUGINS = [
'search'
]
SEARCH_HTML_SELECTOR = 'body'
OUTPUT_PATH = 'output/'
-
content/Articles/KiraArticle.md
:
Slug: KiraArticle
Title: KiraArticle
Date: 2020-09-24 18:57:33
Kira Goddess!
-
.circleci/config.yml
:
version: 2.1
jobs:
build:
machine:
image: ubuntu-2204:current
steps:
- checkout
- run: pyenv global 3.10.5
- run: pip install pelican markdown
- run: pip install pelican-search
# [INFO] Non-interactive Rust installation on Ubuntu
# https://stackoverflow.com/a/57251636/5951529
- run: curl https://sh.rustup.rs -sSf | sh -s -- -y
- run: cargo install stork-search --locked
- run: stork --version
- run: pelican content -s pelicanconf.py --fatal warnings --debug
- run: ls output
- run: cat output/search.toml
3. Behavior before change
If custom OUTPUT_PATH
on Windows, Pelican Stork search generate invalid path slashes for the value of base_directory
setting of search.toml
file:
[input]
base_directory = "D:\SashaDemoRepositories\SashaPelicanDebugging\output"
html_selector = "body"
[[input.files]]
path = "KiraArticle.html"
url = "/KiraArticle.html"
title = "KiraArticle"
If I run:
pelican content -s pelicanconf.py --fatal warnings --ignore-cache --debug
I get an error:
Exception: Search plugin reported Error: Couldn't read the configuration file: Cannot parse config as TOML. Stork recieved error: `invalid escape character in string: `S` at line 2 column 22`
Full output:
D:\SashaDemoRepositories\SashaPelicanDebugging>pelican content -s pelicanconf.py --fatal warnings --ignore-cache --debug
[11:23:23] DEBUG Pelican version: 4.8.0 __init__.py:531
DEBUG Python version: 3.10.6 __init__.py:532
DEBUG Adding current directory to system path __init__.py:66
DEBUG Finding namespace plugins _utils.py:81
DEBUG Namespace plugins found: _utils.py:84
pelican.plugins.search
pelican.plugins.sitemap
DEBUG Loading plugin `search` _utils.py:90
DEBUG Registering plugin `pelican.plugins.search` __init__.py:73
DEBUG Found generator: ArticlesGenerator (internal) __init__.py:209
DEBUG Found generator: PagesGenerator (internal) __init__.py:209
DEBUG Found generator: SearchSettingsGenerator (pelican.plugins.search.search) __init__.py:209
DEBUG Found generator: StaticGenerator (internal) __init__.py:209
DEBUG Template list: ['!simple/archives.html', '!simple/article.html', '!simple/author.html', '!simple/authors.html', '!simple/base.html', '!simple/categories.html', '!simple/category.html', '!simple/gosquared.html', '!simple/index.html', generators.py:70
'!simple/page.html', '!simple/pagination.html', '!simple/period_archives.html', '!simple/tag.html', '!simple/tags.html', '!simple/translations.html', '!theme/analytics.html', '!theme/archives.html', '!theme/article.html',
'!theme/article_infos.html', '!theme/author.html', '!theme/authors.html', '!theme/base.html', '!theme/categories.html', '!theme/category.html', '!theme/comments.html', '!theme/disqus_script.html', '!theme/github.html',
'!theme/index.html', '!theme/page.html', '!theme/period_archives.html', '!theme/tag.html', '!theme/taglist.html', '!theme/tags.html', '!theme/translations.html', '!theme/twitter.html', 'analytics.html', 'archives.html', 'article.html',
'article_infos.html', 'author.html', 'authors.html', 'base.html', 'categories.html', 'category.html', 'comments.html', 'disqus_script.html', 'github.html', 'gosquared.html', 'index.html', 'page.html', 'pagination.html',
'period_archives.html', 'tag.html', 'taglist.html', 'tags.html', 'translations.html', 'twitter.html']
DEBUG Read file Articles/KiraArticle.md -> Article readers.py:547
DEBUG Signal article_generator_preread.send(ArticlesGenerator) readers.py:560
DEBUG Successfully imported extension module "markdown.extensions.meta". core.py:163
DEBUG Successfully loaded extension "markdown.extensions.meta.MetaExtension". core.py:126
DEBUG Signal article_generator_context.send(ArticlesGenerator, <metadata>) readers.py:627 [11:23:24] DEBUG Read file images/.keep -> Static readers.py:547
DEBUG Signal static_generator_preread.send(StaticGenerator) readers.py:560
DEBUG Signal static_generator_context.send(StaticGenerator, <metadata>) readers.py:627
INFO Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/feeds/all.atom.xml writers.py:163
INFO Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/feeds/articles.atom.xml writers.py:163
INFO Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/feeds/sasha-chernykh.atom.xml writers.py:163
INFO Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/feeds/sasha-chernykh.rss.xml writers.py:163
INFO Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/feeds/all-en.atom.xml writers.py:163
INFO Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/KiraArticle.html writers.py:212
INFO Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/index.html writers.py:212
INFO Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/tags.html writers.py:212
INFO Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/categories.html writers.py:212
INFO Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/authors.html writers.py:212
INFO Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/archives.html writers.py:212
INFO Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/category/articles.html writers.py:212
INFO Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/author/sasha-chernykh.html writers.py:212
CRITICAL Exception: Search plugin reported Error: Couldn't read the configuration file: Cannot parse config as TOML. Stork recieved error: `invalid escape character in string: `S` at line 2 column 22` __init__.py:566
ββββββββββββββββββββββββββββββββ Traceback (most recent call last) βββββββββββββββββββββββββββββββββ
β C:\Python310\lib\site-packages\pelican\plugins\search\search.py:38 in build_search_index β
β β
β 35 β β if not which("stork"): β
β 36 β β β raise Exception("Stork must be installed and available on $PATH.") β
β 37 β β try: β
β > 38 β β β output = subprocess.run( β
β 39 β β β β [ β
β 40 β β β β β "stork", β
β 41 β β β β β "build", β
β β
β C:\Python310\lib\subprocess.py:524 in run β
β β
β 521 β β β raise β
β 522 β β retcode = process.poll() β
β 523 β β if check and retcode: β
β > 524 β β β raise CalledProcessError(retcode, process.args, β
β 525 β β β β β β β β β output=stdout, stderr=stderr) β
β 526 β return CompletedProcess(process.args, retcode, stdout, stderr) β
β 527 β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
CalledProcessError: Command '['stork', 'build', '--input', 'D:\\SashaDemoRepositories\\SashaPelicanDebugging\\output\\search.toml', '--output', 'D:\\SashaDemoRepositories\\SashaPelicanDebugging\\output/search-index.st']' returned non-zero exit status 1.
During handling of the above exception, another exception occurred:
ββββββββββββββββββββββββββββββββ Traceback (most recent call last) βββββββββββββββββββββββββββββββββ
β C:\Python310\lib\site-packages\pelican\__init__.py:562 in main β
β β
β 559 β β β watcher = FileSystemWatcher(args.settings, Readers, settings) β
β 560 β β β watcher.check() β
β 561 β β β with console.status("Generatingβ¦"): β
β > 562 β β β β pelican.run() β
β 563 β except KeyboardInterrupt: β
β 564 β β logger.warning('Keyboard interrupt received. Exiting.') β
β 565 β except Exception as e: β
β β
β C:\Python310\lib\site-packages\pelican\__init__.py:127 in run β
β β
β 124 β β β
β 125 β β for p in generators: β
β 126 β β β if hasattr(p, 'generate_output'): β
β > 127 β β β β p.generate_output(writer) β
β 128 β β β
β 129 β β signals.finalized.send(self) β
β 130 β
β β
β C:\Python310\lib\site-packages\pelican\plugins\search\search.py:113 in generate_output β
β β
β 110 β β β fd.write(search_settings) β
β 111 β β β
β 112 β β # Build the search index β
β > 113 β β build_log = self.build_search_index(search_settings_path) β
β 114 β β build_log = "".join(["Search plugin reported ", build_log]) β
β 115 β β logger.error(build_log) if "error" in build_log else logger.debug(build_log) β
β 116 β
β β
β C:\Python310\lib\site-packages\pelican\plugins\search\search.py:52 in build_search_index β
β β
β 49 β β β β check=True, β
β 50 β β β ) β
β 51 β β except subprocess.CalledProcessError as e: β
β > 52 β β β raise Exception("".join(["Search plugin reported ", e.stdout, e.stderr])) β
β 53 β β β
β 54 β β return output.stdout β
β 55 β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Exception: Search plugin reported Error: Couldn't read the configuration file: Cannot parse config as TOML. Stork recieved error: `invalid escape character in string: `S` at line 2 column 22`
4. Change
I applied os.sep
to convert back-slashes to forward-slashes. I change the line of search.py
:
- self.output_path = output_path
+ self.output_path = output_path.replace(os.sep, '/')
5. Behavior after change
search.toml
on Windows after my changes:
- base_directory = "D:\SashaDemoRepositories\SashaPelicanDebugging\output"
+ base_directory = "D:/SashaDemoRepositories/SashaPelicanDebugging/output"
This is the correct path for Windows. No errors in output.
D:\SashaDemoRepositories\SashaPelicanDebugging>pelican content -s pelicanconf.py --fatal warnings --ignore-cache --debug
[11:30:32] DEBUG Pelican version: 4.8.0 __init__.py:531
DEBUG Python version: 3.10.6 __init__.py:532
DEBUG Adding current directory to system path __init__.py:66
DEBUG Finding namespace plugins _utils.py:81
DEBUG Namespace plugins found: _utils.py:84
pelican.plugins.search
pelican.plugins.sitemap
DEBUG Loading plugin `search` _utils.py:90
DEBUG Registering plugin `pelican.plugins.search` __init__.py:73
DEBUG Found generator: ArticlesGenerator (internal) __init__.py:209
DEBUG Found generator: PagesGenerator (internal) __init__.py:209
DEBUG Found generator: SearchSettingsGenerator (pelican.plugins.search.search) __init__.py:209
DEBUG Found generator: StaticGenerator (internal) __init__.py:209
DEBUG Template list: ['!simple/archives.html', '!simple/article.html', '!simple/author.html', '!simple/authors.html', '!simple/base.html', '!simple/categories.html', '!simple/category.html', '!simple/gosquared.html', '!simple/index.html', generators.py:70
'!simple/page.html', '!simple/pagination.html', '!simple/period_archives.html', '!simple/tag.html', '!simple/tags.html', '!simple/translations.html', '!theme/analytics.html', '!theme/archives.html', '!theme/article.html',
'!theme/article_infos.html', '!theme/author.html', '!theme/authors.html', '!theme/base.html', '!theme/categories.html', '!theme/category.html', '!theme/comments.html', '!theme/disqus_script.html', '!theme/github.html',
'!theme/index.html', '!theme/page.html', '!theme/period_archives.html', '!theme/tag.html', '!theme/taglist.html', '!theme/tags.html', '!theme/translations.html', '!theme/twitter.html', 'analytics.html', 'archives.html', 'article.html',
'article_infos.html', 'author.html', 'authors.html', 'base.html', 'categories.html', 'category.html', 'comments.html', 'disqus_script.html', 'github.html', 'gosquared.html', 'index.html', 'page.html', 'pagination.html',
'period_archives.html', 'tag.html', 'taglist.html', 'tags.html', 'translations.html', 'twitter.html']
DEBUG Read file Articles/KiraArticle.md -> Article readers.py:547
DEBUG Signal article_generator_preread.send(ArticlesGenerator) readers.py:560
DEBUG Successfully imported extension module "markdown.extensions.meta". core.py:163
DEBUG Successfully loaded extension "markdown.extensions.meta.MetaExtension". core.py:126
DEBUG Signal article_generator_context.send(ArticlesGenerator, <metadata>) readers.py:627
DEBUG Read file images/.keep -> Static readers.py:547
DEBUG Signal static_generator_preread.send(StaticGenerator) readers.py:560
DEBUG Signal static_generator_context.send(StaticGenerator, <metadata>) readers.py:627
INFO Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/feeds/all.atom.xml writers.py:163
INFO Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/feeds/articles.atom.xml writers.py:163
INFO Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/feeds/sasha-chernykh.atom.xml writers.py:163
INFO Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/feeds/sasha-chernykh.rss.xml writers.py:163
INFO Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/feeds/all-en.atom.xml writers.py:163
INFO Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/KiraArticle.html writers.py:212
INFO Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/index.html writers.py:212
INFO Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/tags.html writers.py:212
INFO Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/categories.html writers.py:212
INFO Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/authors.html writers.py:212
INFO Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/archives.html writers.py:212
INFO Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/category/articles.html writers.py:212
INFO Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/author/sasha-chernykh.html writers.py:212
DEBUG Search plugin reported search.py:118
INFO Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\css\fonts.css to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\css\fonts.css utils.py:332
INFO Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\css\main.css to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\css\main.css utils.py:332
INFO Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\css\pygment.css to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\css\pygment.css utils.py:332
INFO Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\css\reset.css to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\css\reset.css utils.py:332
INFO Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\css\typogrify.css to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\css\typogrify.css utils.py:332
INFO Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\css\wide.css to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\css\wide.css utils.py:332
INFO Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\fonts\font.css to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\fonts\font.css utils.py:332
INFO Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\fonts\Yanone_Kaffeesatz_400.eot to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\fonts\Yanone_Kaffeesatz_400.eot utils.py:332
INFO Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\fonts\Yanone_Kaffeesatz_400.svg to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\fonts\Yanone_Kaffeesatz_400.svg utils.py:332
INFO Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\fonts\Yanone_Kaffeesatz_400.ttf to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\fonts\Yanone_Kaffeesatz_400.ttf utils.py:332
INFO Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\fonts\Yanone_Kaffeesatz_400.woff to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\fonts\Yanone_Kaffeesatz_400.woff utils.py:332
INFO Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\fonts\Yanone_Kaffeesatz_400.woff2 to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\fonts\Yanone_Kaffeesatz_400.woff2 utils.py:332
INFO Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\aboutme.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\aboutme.png utils.py:332
INFO Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\bitbucket.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\bitbucket.png utils.py:332
INFO Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\delicious.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\delicious.png utils.py:332
INFO Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\facebook.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\facebook.png utils.py:332
INFO Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\github.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\github.png utils.py:332
INFO Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\gitorious.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\gitorious.png utils.py:332
INFO Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\gittip.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\gittip.png utils.py:332
INFO Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\google-groups.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\google-groups.png utils.py:332
INFO Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\google-plus.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\google-plus.png utils.py:332
INFO Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\hackernews.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\hackernews.png utils.py:332
INFO Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\lastfm.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\lastfm.png utils.py:332
INFO Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\linkedin.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\linkedin.png utils.py:332
INFO Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\reddit.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\reddit.png utils.py:332
INFO Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\rss.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\rss.png utils.py:332
INFO Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\slideshare.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\slideshare.png utils.py:332
INFO Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\speakerdeck.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\speakerdeck.png utils.py:332
INFO Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\stackoverflow.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\stackoverflow.png utils.py:332
INFO Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\twitter.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\twitter.png utils.py:332
INFO Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\vimeo.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\vimeo.png utils.py:332
INFO Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\youtube.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\youtube.png utils.py:332
INFO Copying D:\SashaDemoRepositories\SashaPelicanDebugging\content\images\.keep to D:\SashaDemoRepositories\SashaPelicanDebugging\output\images\.keep utils.py:302
INFO Copying D:\SashaDemoRepositories\SashaPelicanDebugging\content\images\.keep to images/.keep generators.py:906 Done: Processed 1 article, 0 drafts, 0 hidden articles, 0 pages, 0 hidden pages and 0 draft pages in 0.56 seconds
6. UNIX possible consequences
My change shouldnβt affect *nix operating systems. I check it on Circle CI.
-
Circle CI build with configuration from the item 2.3 of this issue, generated search.toml
:
[input]
base_directory = "/home/circleci/project/output"
html_selector = "body"
[[input.files]]
path = "KiraArticle.html"
url = "/KiraArticle.html"
title = "KiraArticle"
-
I change in my config.yml
:
- - run: pip install pelican-search
+ - run: pip install git+https://github.com/Kristinita/search.git@KiraFixWindowsPath
Circle CI build, the same search.toml
.
I didnβt see anything changed in Ubuntu build after my change.
7. Reproducing problem
I canβt reproduce my problem on free remote CI services. Unfortunately, installing Stork on Windows isnβt quick. To install Stork, a Windows user must install Rust and compile Stork on his own machine. I can to compile Stork on my machine, but I was getting bugs on Circle CI and AppVeyor CI.
If you know how to compile Stork for Windows on free remote CI services, please, tell me. See also my issue on the Stork issue tracker.
8. Environment
-
Operating system:
- Local β Microsoft Windows [Version 10.0.19041.1415]
- Circle CI β Ubuntu 22.04 LTS (Jammy Jellyfish)
-
Python β 3.10.5, 3.10.6
-
Pelican β 4.8.0
-
Stork β 1.5.0
-
pelican-search β 1.0.1
Thanks.