Compare commits
4 Commits
9caf08a277
...
b69bdb424a
Author | SHA1 | Date | |
---|---|---|---|
b69bdb424a | |||
c46a1c0bae | |||
359916e7d9 | |||
d49b9d48a8 |
13
CHANGELOG.md
13
CHANGELOG.md
@ -2,6 +2,19 @@
|
||||
|
||||
Included is a summary of changes to the project, by version. Details can be found in the commit history.
|
||||
|
||||
## v2.0.2
|
||||
|
||||
### Bugfixes
|
||||
|
||||
* Paths for files in the `pages/` root no longer have an extra `./` in them, which made URLs look ugly and also added an
|
||||
extra blank breadcrumb in the breadcrumbs.
|
||||
|
||||
### Improvements
|
||||
|
||||
* `custom-static` in the instance dir is now ignored and has no special handling --- put static files in `pages/static/`
|
||||
like all the other files that get copied. This also fixes a bug where the build errored if the directory didn't exist.
|
||||
* Some README typos fixed.
|
||||
|
||||
## v2.0.1
|
||||
|
||||
### Improvements
|
||||
|
@ -14,19 +14,19 @@ Something like the following should suffice:
|
||||
% incorporealcms-build ./path/to/instance ./path/to/output/www/root
|
||||
```
|
||||
|
||||
This will generate the directory suitable for serving by e.g. Nginx.
|
||||
This will generate the directory suitable for serving by e.g. nginx.
|
||||
|
||||
## Creating a Site
|
||||
|
||||
Put content, notably Markdown content, inside `./your-instance/pages/` and when you are ready, run the build command
|
||||
above. When you run `incorporealcms-build`, the following happens:
|
||||
|
||||
* Markdown files (ending in `.md`) are rendered via Python-Markdown as .html files and output to the static site
|
||||
* Markdown files (ending in `.md`) are rendered via Python-Markdown as `.html` files and output to the static site
|
||||
directory. The `.md` files are also copied there, though this behavior may be toggleable in the future.
|
||||
* Directory paths (e.g. a request to `/dir/`) can be served via a `/dir/index.md` file, which will generate
|
||||
`/dir/index.html`, with the appropriate web server configuration to use `index.html` for directory listings.
|
||||
* Symlinks to files are retained and mirrored into the output directory, and handled per the web server's configuration,
|
||||
whanever it is.
|
||||
whatever it is.
|
||||
* All other files are copied directly, so images, text files, etc., can be referenced naturally as URLs.
|
||||
|
||||
## Configuration
|
||||
|
@ -4,6 +4,7 @@ SPDX-FileCopyrightText: © 2025 Brian S. Stephan <bss@incorporeal.org>
|
||||
SPDX-License-Identifier: GPL-3.0-only
|
||||
"""
|
||||
import argparse
|
||||
import logging
|
||||
import os
|
||||
import shutil
|
||||
import stat
|
||||
@ -16,6 +17,8 @@ from incorporealcms.error_pages import generate_error_pages
|
||||
from incorporealcms.feed import generate_feed
|
||||
from incorporealcms.markdown import handle_markdown_file_path
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class StaticSiteGenerator(object):
|
||||
"""Generate static site output based on the instance's content."""
|
||||
@ -53,10 +56,6 @@ class StaticSiteGenerator(object):
|
||||
pass
|
||||
self.build_in_destination(program_static_dir, static_output_dir, convert_markdown=False)
|
||||
|
||||
# copy the instance's static dir --- should I deprecate this since it could just be stuff in pages/static/?
|
||||
custom_static_dir = os.path.join(self.instance_dir, 'custom-static')
|
||||
self.build_in_destination(custom_static_dir, static_output_dir, convert_markdown=False)
|
||||
|
||||
# generate the feeds
|
||||
cprint("generating feeds", 'green')
|
||||
generate_feed('atom', self.instance_dir, tmp_output_dir)
|
||||
@ -89,8 +88,10 @@ class StaticSiteGenerator(object):
|
||||
cprint(f"copying files from '{source_dir}' to '{dest_dir}'", 'green')
|
||||
os.chdir(source_dir)
|
||||
for base_dir, subdirs, files in os.walk(source_dir):
|
||||
logger.debug("starting to build against %s || %s || %s", base_dir, subdirs, files)
|
||||
# remove the absolute path of the directory from the base_dir
|
||||
base_dir = os.path.relpath(base_dir, source_dir)
|
||||
relpath = os.path.relpath(base_dir, source_dir)
|
||||
base_dir = relpath if relpath != '.' else ''
|
||||
# create subdirs seen here for subsequent depth
|
||||
for subdir in subdirs:
|
||||
self.build_subdir_in_destination(source_dir, base_dir, subdir, dest_dir)
|
||||
@ -149,6 +150,7 @@ class StaticSiteGenerator(object):
|
||||
# render markdown as HTML
|
||||
if src.endswith('.md') and convert_markdown:
|
||||
rendered_file = dst.removesuffix('.md') + '.html'
|
||||
print(f"rendering file '{src}' -> '{rendered_file}'")
|
||||
try:
|
||||
content = handle_markdown_file_path(src)
|
||||
except UnicodeDecodeError:
|
||||
|
@ -73,6 +73,21 @@ def test_og_image():
|
||||
os.chdir(os.path.join(src_dir, 'pages'))
|
||||
|
||||
ssg.build_file_in_destination(os.path.join(HERE, 'instance', 'pages'), '', 'more-metadata.md', tmpdir, True)
|
||||
with open(os.path.join(tmpdir, 'more-metadata.html'), 'r') as graphviz_output:
|
||||
data = graphviz_output.read()
|
||||
assert ('<meta property="og:image" content="http://example.org/test.img') in data
|
||||
with open(os.path.join(tmpdir, 'more-metadata.html'), 'r') as markdown_output:
|
||||
data = markdown_output.read()
|
||||
assert ('<meta property="og:image" content="http://example.org/test.img">') in data
|
||||
|
||||
|
||||
def test_og_url():
|
||||
"""Test that the og:url meta tag is present as expected."""
|
||||
with tempfile.TemporaryDirectory() as tmpdir:
|
||||
src_dir = os.path.join(HERE, 'instance')
|
||||
ssg = StaticSiteGenerator(src_dir, tmpdir)
|
||||
os.chdir(os.path.join(src_dir, 'pages'))
|
||||
|
||||
# testing a whole build run because of bugs in how I handle pathing adding a "./" in
|
||||
# the generated URLs for content in the pages/ root
|
||||
ssg.build_in_destination(os.path.join(HERE, 'instance', 'pages'), tmpdir, True)
|
||||
with open(os.path.join(tmpdir, 'index.html'), 'r') as markdown_output:
|
||||
data = markdown_output.read()
|
||||
assert ('<meta property="og:url" content="http://example.org/">') in data
|
||||
|
@ -18,7 +18,7 @@
|
||||
"level": "DEBUG",
|
||||
"handlers": ["console"]
|
||||
},
|
||||
"incorporealcms.pages": {
|
||||
"incorporealcms.ssg": {
|
||||
"level": "DEBUG",
|
||||
"handlers": ["console"]
|
||||
}
|
||||
|
@ -1,31 +0,0 @@
|
||||
"""Configure the test application.
|
||||
|
||||
SPDX-FileCopyrightText: © 2020 Brian S. Stephan <bss@incorporeal.org>
|
||||
SPDX-License-Identifier: GPL-3.0-only
|
||||
"""
|
||||
|
||||
LOGGING = {
|
||||
'version': 1,
|
||||
'formatters': {
|
||||
'default': {
|
||||
'format': '[%(asctime)s %(levelname)-7s %(name)s] %(message)s',
|
||||
},
|
||||
},
|
||||
'handlers': {
|
||||
'console': {
|
||||
'level': 'DEBUG',
|
||||
'class': 'logging.StreamHandler',
|
||||
'formatter': 'default',
|
||||
},
|
||||
},
|
||||
'loggers': {
|
||||
'incorporealcms.mdx': {
|
||||
'level': 'DEBUG',
|
||||
'handlers': ['console'],
|
||||
},
|
||||
'incorporealcms.pages': {
|
||||
'level': 'DEBUG',
|
||||
'handlers': ['console'],
|
||||
},
|
||||
},
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user