<commit_before># Contributing

You will find here the conventions and rules to publish new blog posts and to develop new blog features and enhancements.

Please,
- [open an issue](https://github.com/src-d/blog/issues) to request any new feature or to report a bug.
- [create a new PR](https://github.com/src-d/blog/pulls) to request the review of a new post or feature.


## Table of contents

<!-- TOC -->

- [Propose a new blog post](#propose-a-new-blog-post)
- [Creating a new post](#creating-a-new-post)
    - [Content schema](#content-schema)
    - [Front matter](#front-matter)
    - [Formatting the content](#formatting-the-content)
    - [Links to other source{d} blog posts](#links-to-other-sourced-blog-posts)
    - [Assets](#assets)
    - [Authors](#authors)
- [Preview the blog posts](#preview-the-blog-posts)
    - [Troubleshoot](#troubleshoot)
- [Peer review](#peer-review)
- [How to publish blog posts and deploy the blog](#how-to-publish-blog-posts-and-deploy-the-blog)
- [Publishing and promoting a blog post](#publishing-and-promoting-a-blog-post)

<!-- /TOC -->

## Propose a new blog post

The first step on the process to release a blog post is to reach general agreement on whether the topic
and general structure of the blog post makes sense. This will help you structure your blog post early and
avoid wasting any time by receiving feedback too late.

We use a very similar approach to [src-d/conferences](https://github.com/src-d/conferences), using issues
and PRs as a way to track and approve proposals.

Whenever you have a new idea for a blog post simply create a new issue following the
[post issue template](.github/ISSUE_TEMPLATES/post.md), you can also simply click
[here](https://github.com/src-d/blog/issues/new?template=post.md).

[![propose new blog post](https://svg-badge.appspot.com/badge/PROPOSE%20NEW%20BLOG%20POST/click?color=fea)](https://github.com/src-d/blog/issues/new?template=post.md)

If you'd rather copy paste the content, you can use the content below:

```markdown
Issue Title: [PROPOSAL] Blog post title

* Title:
* Author(s):
* Short description: What is the topic? Any main takeaways?
* Categories:
* Deadlines: are there any deadlines for this? do we need to wait for any other event?

## Table of contents

What are the main sections of the blog post? What will each one explain?

## Management

This section will be filled by @campoy.

* State: (proposed | writing | written | published)
* Scheduled:
* Link to post:

## Social Media

* Wording for tweet:
* Hashtags:
* Subreddits:
```

Once you've created this issue make sure to add the `post` label and assign it to `@campoy`,
he will then review the proposal and give feedback on it until the initial proposal is accepted.
Once the proposal has been accepted, the issue will be labeled with an `accepted` label, or if it's
been rejected or abandoned the issue will be closed.

Once accepted, you can start writing your blog post, creating a new pull request that will `fix` the issue
you created for the proposal. Make sure you add `[WIP]` at the beginning of the title in the PR until you're
ready for review.

## Creating a new post

Posts are stored under [`post` content directory](content/post) as plain text `.md` files.

To create a new blog post:
 1. create a new `.md` file with under `content/post/__POST_FILE_NAME__.md`
    it will be accessible in the the URL `//__BLOG_HOST_NAME__/post/__POST_FILE_NAME__`
 2. for a first time authors, add your name to [authors list](#authors)

The post `.md` files must have the following [schema](#content-schema):


### Content schema

Every blog post content file is stored under the path `content/post/__POST_FILE_NAME__.md`, and has the following schema:

```
---
author: authorKeyName
date: 2006-01-02
title: "Post title"
image: /post/__POST_FILE_NAME__/header-image.png
description: "Short description of the post"
categories: ["science", "technical", "culture"]
draft: true
---

Whatever content in `markdown` format.

```
IMPORTANT: `authorKeyName` must exist in [data/authors.yml](data/authors.yml)

### Front matter

The **front matter** is the first section inside the content file &ndash;enclosed by "`---`" chars&ndash; where the content metadata is defined.<br />(Read more about it in the Hugo docs for the [Front Matter section](https://gohugo.io/content-management/front-matter))

- `author`: Defines the authorship as explained in the [authors section](#authors)<commit_msg>add a note on line length for blog posts<commit_after># Contributing

You will find here the conventions and rules to publish new blog posts and to develop new blog features and enhancements.

Please,
- [open an issue](https://github.com/src-d/blog/issues) to request any new feature or to report a bug.
- [create a new PR](https://github.com/src-d/blog/pulls) to request the review of a new post or feature.


## Table of contents

<!-- TOC -->

- [Propose a new blog post](#propose-a-new-blog-post)
- [Creating a new post](#creating-a-new-post)
    - [Content schema](#content-schema)
    - [Front matter](#front-matter)
    - [Formatting the content](#formatting-the-content)
    - [Links to other source{d} blog posts](#links-to-other-sourced-blog-posts)
    - [Assets](#assets)
    - [Authors](#authors)
- [Preview the blog posts](#preview-the-blog-posts)
    - [Troubleshoot](#troubleshoot)
- [Peer review](#peer-review)
- [How to publish blog posts and deploy the blog](#how-to-publish-blog-posts-and-deploy-the-blog)
- [Publishing and promoting a blog post](#publishing-and-promoting-a-blog-post)

<!-- /TOC -->

## Propose a new blog post

The first step on the process to release a blog post is to reach general agreement on whether the topic
and general structure of the blog post makes sense. This will help you structure your blog post early and
avoid wasting any time by receiving feedback too late.

We use a very similar approach to [src-d/conferences](https://github.com/src-d/conferences), using issues
and PRs as a way to track and approve proposals.

Whenever you have a new idea for a blog post simply create a new issue following the
[post issue template](.github/ISSUE_TEMPLATES/post.md), you can also simply click
[here](https://github.com/src-d/blog/issues/new?template=post.md).

[![propose new blog post](https://svg-badge.appspot.com/badge/PROPOSE%20NEW%20BLOG%20POST/click?color=fea)](https://github.com/src-d/blog/issues/new?template=post.md)

If you'd rather copy paste the content, you can use the content below:

```markdown
Issue Title: [PROPOSAL] Blog post title

* Title:
* Author(s):
* Short description: What is the topic? Any main takeaways?
* Categories:
* Deadlines: are there any deadlines for this? do we need to wait for any other event?

## Table of contents

What are the main sections of the blog post? What will each one explain?

## Management

This section will be filled by @campoy.

* State: (proposed | writing | written | published)
* Scheduled:
* Link to post:

## Social Media

* Wording for tweet:
* Hashtags:
* Subreddits:
```

Once you've created this issue make sure to add the `post` label and assign it to `@campoy`,
he will then review the proposal and give feedback on it until the initial proposal is accepted.
Once the proposal has been accepted, the issue will be labeled with an `accepted` label, or if it's
been rejected or abandoned the issue will be closed.

Once accepted, you can start writing your blog post, creating a new pull request that will `fix` the issue
you created for the proposal. Make sure you add `[WIP]` at the beginning of the title in the PR until you're
ready for review.

## Creating a new post

Posts are stored under [`post` content directory](content/post) as plain text `.md` files.

To create a new blog post:
 1. create a new `.md` file with under `content/post/__POST_FILE_NAME__.md`
    it will be accessible in the the URL `//__BLOG_HOST_NAME__/post/__POST_FILE_NAME__`
 2. for a first time authors, add your name to [authors list](#authors)

The post `.md` files must have the following [schema](#content-schema):


### Content schema

Every blog post content file is stored under the path `content/post/__POST_FILE_NAME__.md`, and has the following schema:

```
---
author: authorKeyName
date: 2006-01-02
title: "Post title"
image: /post/__POST_FILE_NAME__/header-image.png
description: "Short description of the post"
categories: ["science", "technical", "culture"]
draft: true
---

Whatever content in `markdown` format.

_NOTE_: Write in short lines, soft limit on 80 characters, to facilitate
line comments on GitHub.

```
IMPORTANT: `authorKeyName` must exist in [data/authors.yml](data/authors.yml)

### Front matter

The **front matter** is the first section inside the content file &ndash;enclosed by "`---`" chars&ndash; where the content metadata is defined.<br />(Read more about it in the Hugo docs for the [Front Matter section](https://gohugo.io/content-management/front-matter))

- `author`: Defines the authorship as explained in the [authors section](#authors)
{'fraction_non_alphanumeric': 0.1064630367419212, 'fraction_numerical': 0.0037627268702965914, 'mean_word_length': 4.281706604324956, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 9, 'https://': 14, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2918914', 'n_tokens_mistral': 2784, 'n_tokens_neox': 2623, 'n_words': 1131}