This workflow action helps in automatically creating archives for GitHub pages built with Jekyll.
- Open
_config.yml
file to edit your configuration. - Add a collection to the configuration like below.
# Archives
collections:
archives:
output: true
permalink: /archives/:path/
- Create a folder
_archives
in your GitHub pages root. - Create a text file
archivedata.txt
with the below code.
---
---
{
"categories": [
{%- for category in site.categories -%}
"{{ category[0]}}"{% unless forloop.last %},{% endunless %}
{%- endfor -%}
],
"tags": [
{%- for tag in site.tags -%}
"{{ tag[0] }}"{% unless forloop.last %},{% endunless %}
{%- endfor -%}
],
"years": [
{%- for post in site.posts -%}
"{{ post.date | date: "%Y" }}"{% unless forloop.last %},{% endunless %}
{%- endfor -%}
]
}
-
Build your site and see if you can see the archive data by navigating to your site.
(yoursite.com/archives/archivedata)
-
You should see a
json
structure like the below one.
{
"categories": [
"Software Testing",
"Excel",
"Blogging",
"Programming",
"Quiz",
"Photography",
"RPA"
],
"tags": [
"Automation Testing",
"UFT",
"QTP",
"Excel VBA"
],
"years": [
"2020",
"2020",
"2019",
"2018",
"2017"
]
}
File was formatted for better reading. This will appear minified on your site.
- Create 3 layouts in the
_layouts
folder.archive-categories.html
archive-tags.html
archive-years.html
Sample layouts and files are present in the folder
blog-files
of this repository. If you are using it make sure to include a file from_includes
folder too.
Do not rename the files in the
_layouts
folder.
- Got to your blog repository.
- Create a folder named
.github
and createworkflows
folder inside it if it doesn't exist. - Create a new file named
add_archives.yml
in theworkflows
folder. You can name it anything you want. - Add the following code inside the file.
name: Generate Jekyll Archives
# description: Generate categories, tags and years archive files.
on:
workflow_dispatch:
push:
paths:
- "_posts/**"
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Jekyll Blog Archive
uses: kannansuresh/jekyll-blog-archive-workflow@v1.0.3
with:
archive_url: "https://yoursite.com/archives/archivedata"
archive_folder_path: "_archives"
- name: setup git config
run: |
git config user.name "GitHub Actions Bot"
git config user.email "<>"
- name: commit
run: |
git add --all
git commit -m "Created and updated archive files." || echo "No changes to commit."
git push origin master || echo "No changes to push."
Variable Name | Description | Required |
---|---|---|
archive_url |
Your blog's archive data URL. e.g. yoursite.com/archives/archivedata |
Yes |
archive_folder_path |
Path to your _archives folder. Default value _archives |
Yes |
In the code above, make sure to change the variable
archive_url
to your site's archive data URL.
By default, the code pushes changes to
master
branch. Change the code if you want the changes to be pushed to a different branch.
The action is set to run every time a commit happens in your
_posts
folder.
- To trigger the action manually
- Navigate to
Actions
tab. - Select
Generate Jekyll Archives
. - Select
Run workflow
and run it. - Wait for the run to complete.
- After a successful run, navigate to
_archives
folder and you will see the archive files generated.
- Navigate to
To view the archives on your site, use the following URLs.
- For categories:
yoursite.com/category/category_name
- For tags:
yoursite.com/tag/tag_name
- For categories:
yoursite.com/year/2020
I have implemented this on my website Aneejian
See the below URLs.