Automate Publishing with Front Matter Variables
Tags: automation, bash, editing, publishing
Published: 2020-10-23 07:25:54

---
title: Automate Publishing with Front Matter Variables
published: true
series: Publishing workflow
tags: automation, bash, editing, publishing
---

Dev.to supports [Font Matter](https://jekyllrb.com/docs/front-matter/). That means you can manipulate the publishing date with variables. 
In this Article i am playing around with this variables and evaluate the possibilities for my blogging workflow.

As i already mentioned, we can use a special section which contains variables.
E.g. this Article contains following header: 
```
---
title: Automate Publishing with Front Matter Variables
published: false
series: Publishing workflow
---
```
I set a title, a series, and prevent from direct publishing. But when we take a closer look on the documentation, we have more possibilities which i want to use in my workflow. 

Based on the official Documentation, i can use following Font Matter variables:
```
title: Hello, World!
published: true
tags: discuss, help
date: 20190701T10:00Z
series: Hello series
canonical_url: https://example.com/blog/hello
cover_image: article_published_cover_image
```

`date`, `series` and `canonical_url` are optional. `date` is the publication date-time `series` is the name of the series the article belongs to `canonical_url` is the canonical URL of the article `cover_image` is the main image of the article.

The most interesting variables are `date`, `tags` and `published`. I want to find out the behaviour of `date` vs `published`.
I would expect that, if `published` is `true` and the `date` is in the future, the article becomes published on the given date.
But i have to test what happen, if the `published` variable is false but i am using a `date` variable.
With usage of variables I get also the possibility to simplify my `curl` call, but i have to be aware that it contains always a Front Matter block with at least the `title` and the `published` variables.

> Sadly after testing and playing it seems that the `date` variable has no influence over the real publishing date.

For this approach i will adapt my script accordingly:

```bash
#!/bin/bash
source ~/dotfiles/.credencials

filePath=$1
# Content has to be json encoded
content=$(cat "$filePath" | jq '.' --raw-input --slurp)

# to keep it simple, use the first 6 lines
headOfContent=$(cat "$filePath" | head -n6)

if [[ "$headOfContent" != *"title"* ]]; then
  echo "No title Flag found"
  exit
fi

if [[ "$headOfContent" != *"published"* ]]; then
  echo "No published Flag found"
  exit
fi

tee /tmp/devtoArticle.md << END
{"article":{"body_markdown":$content}}
END

curl -X POST -H "Content-Type: application/json" \
    -H "api-key: ${devtoApiToken}" \
    -d @/tmp/devtoArticle.md \
    https://dev.to/api/articles

#get the current date
date=$(date +%m-%d-%Y)
# grab only the filename
fileName=$(echo "$filePath" | cut -d"/" -f3)
mv "$filePath" "$(pwd)/content/published/$date $fileName"
```

The call of my script is now really easy:
```bash
./helper.sh 'content/drafts/Automate Publishing with Front Matter Variables.md' 
```
After this changes, the current workflow is really charming. I know this script is by far not bullet proof but it is enough for me.