# blog
-Blog at unlimited.pizza -> Only 3 at a time.*
+Blog at unlimited.pizza -> Only 3 at a time.
The blog is no longer 100% ephemeral. Instead it now keeps an archive
in a separate folder. The archive is intended to be used as a gemlog.
## How to add a new entry
-Create a directory with a `.gmi` gemini file, and an `/assets`
-directory with anything you want in there. This can be in any directory.
-
-```
-.
-└── this-is-an-example-post
- ├── assets
- │ └── example.wav
- └── this-is-an-example-post.md
-```
+Create a `.gmi` gemini file.
You can add this to the blog using the following command, it will shift
all entries and remove the oldest one if limit of posts is reached
(defualts to 3):
-`blog --add path/to/blog_post`
+```
+blog --add path/to/blog_post.gmi
+```
These commands will regenerate the static files. At that point you can
preview your blog by serving the files on the `static` directory.
If you need to make corrections use:
-`blog --update path/to/blog_post`
+```
+blog --update path/to/blog_post.gmi
+```
This will replace the latest with the contents of the `path` without
shifting the existing entries.
-`blog --publish <bucket>`
+You can always regenerate the static files by using
-Will publish the blog to the mentioned s3 bucket.
+```
+blog --generate
+```
+
+To publish the blog, you can select an s3 bucket and run it with:
+
+```
+blog --publish <bucket>
+```
+
+You can also publish the archive of posts as a gemlog, by passing a valid
+rsync target
+
+```
+blog --publish-archive <rsync_target>
+```
+
+Blog supports saving snapshots of the blog in git, and you can add and remove
+remotes with the following commands:
+
+```
+blog --add-remote <git_url>
+blog --remove-remote
+```
+
+If a remote is present, it will be pulled before adding or updating, and pushed
+after it finishes. You can manually trigger this by calling
+
+```
+blog --sync-up
+blog --sync-down
+```
## Configuring
_printUsage() {
console.error('\nUsage:\n');
- console.error('blog --add path/to/blog_post\t\t(creates new blog post)');
- console.error('blog --update path/to/blog_post\t\t(updates latest blog post)');
+ console.error('blog --add <path_to_post>\t\t(creates new blog post)');
+ console.error('blog --update <path_to_post>\t\t(updates latest blog post)');
console.error('blog --generate \t\t\t(generates the blog assets)');
console.error('blog --publish <bucket> \t\t(publishes the blog to an S3 bucket)');
console.error('blog --publish-archive <destination> \t(publishes the archive to a remote host)');
+++ /dev/null
-# This is the title of another entry
-
-An entry will have paragraphs, these paragraphs will contain text. The
-text should be formatted correctly: visitors will want to read whatever
-is in the blog, so it should be readable. It should account for several
-types of tags, like **strong**, or *emphasised*. It should even support
-[links](/)
-
-An entry will have paragraphs, these paragraphs will contain text. The
-text should be formatted correctly: visitors will want to read whatever
-is in the blog, so it should be readable. It should account for several
-types of tags, like **strong**, or *emphasised*. It
-should even support [links](/)
-
-An entry will have paragraphs, these paragraphs will contain text. The
-text should be formatted correctly: visitors will want to read whatever
-is in the blog, so it should be readable. It should account for several
-types of tags, like **strong**, or *emphasised*. It
-should even support [links](/)
-
-## Subheading 1 (h2)
-
-An entry will have paragraphs, these paragraphs will contain text. The
-text should be formatted correctly: visitors will want to read whatever
-is in the blog, so it should be readable. It should account for several
-types of tags, like **strong**, or *emphasised*. It
-should even support [links](/)
-
-* There will be **lists**
-* Lists will have *tags*
-* And everything else [in the world](/)
-
-An entry will have paragraphs, these paragraphs will contain text. The
-text should be formatted correctly: visitors will want to read whatever
-is in the blog, so it should be readable. It should account for several
-types of tags, like **strong**, or *emphasised*. It
-should even support [links](/)
-
-![Picture: two persons in a ceremony][example-image]
-
-### Other types of subheadings, other types of lists (h3)
-
-1. There will be **lists**
-2. Lists will have *tags*
-3. And everything else [in the world](/)
-
-An entry will have paragraphs, these paragraphs will contain text. The
-text should be formatted correctly: visitors will want to read whatever
-is in the blog, so it should be readable. It should account for several
-types of tags, like **strong**, or *emphasised*. It
-should even support [links](/)
-
-#### Finally there are hfours (h4)
-
-And that's about it!
-
-[example-image]: /assets/example_image.png
}
/**
- * Shifts the blog posts, adds the passed path to slot 0, and
+ * Shifts the blog posts, adds the passed file to slot 0, and
* generates files.
*
* @function add
* @memberof Blog
- * @param {string} postLocation the path to the directory containing
- * the post structure
+ * @param {string} postLocation the path to the blog post file
* @return {Promise<undefined>} empty promise, returns no value
* @instance
*/
}
/**
- * Adds the passed path to slot 0, and generates files.
+ * Update slot 0 with the passed gmi file, and generates files.
*
* @function update
* @memberof Blog
- * @param {string} postLocation the path to the directory containing
- * the post structure
+ * @param {string} postLocation the path to the blog post file
* @return {Promise<undefined>} empty promise, returns no value
* @instance
*/
await writeFile(metadataTarget, JSON.stringify(metadata, null, 2));
}
- // Copies a post directory to the latest slot.
+ // Copies a post file to the latest slot.
async _copyPost(postLocation) {
+ internals.debuglog(`Copying ${postLocation}`);
const targetPath = join(this.postsDirectory, '0');
const postName = basename(postLocation);
const targetPost = join(targetPath, postName);
- internals.debuglog(`Removing ${targetPath}`);
await rmIfExists(targetPath);
await ensureDirectoryExists(targetPath);
- internals.debuglog(`Adding ${postLocation} to ${targetPost}`);
await cp(postLocation, targetPost, { recursive: true });
internals.debuglog(`Added ${postLocation} to ${targetPath}`);
}