Auto-populate your Github readme with data fetched from a remote notion database.
Tags: typescript, notion, actions, automation
Published: 2021-05-04 16:44:16

Hello everyone. This article will share how I managed to auto-populate a Github readme learned section using data fetched from a remote notion database using a GitHub action that I created using Typescript.

[Github](https://github.com/Devorein/github-readme-learn-section-notion)
 
## Steps

### In Repository File

#### 1. Add the following content to your `README.md`

```markdown
## What I have learned so far

<!--START_SECTION:learn-->
<!--END_SECTION:learn-->
```

#### 2. Configure the workflow

```yaml
name: 'Github Readme Updater'
on:
  workflow_dispatch:
  schedule:
    - cron: '0 0 * * *' # Runs Every Day
jobs:
  update_learn:
    name: 'Update learn section'
    runs-on: ubuntu-latest
    steps:
      - name: 'Fetching Repository Contents'
        uses: actions/checkout@main
      - name: 'Learn Section Updater'
        uses: 'devorein/github-readme-learn-section-notion@master'
        with:
          database_id: '6626c1ebc5a44db78e3f2fe285171ab7'
          token_v2: ${{ secrets.NOTION_TOKEN_V2 }} # Required only if your database is private
```

**TIP**: You can test out using [this template](https://www.notion.so/devorein/6c46c1ebc5a44db78e3f5fe285071ab6?v=0bc36e7c59e54f34b0838956e35b4490) that I've created just for this purpose.

### In your notion account

#### 1. Create a full-page database

![Notion Full Page Database](https://cdn.hashnode.com/res/hashnode/image/upload/v1620140790011/ZSlkgNHas.png)

**NOTE**: Your database must maintain the following structure/schema

![Notion Table Schema Options](https://cdn.hashnode.com/res/hashnode/image/upload/v1620141419086/HQVjtExaB.png)

#### 2. Get the id of the database

![Notion Full Page Database Id](https://cdn.hashnode.com/res/hashnode/image/upload/v1620140795651/PhdNBZEQH.png)

#### 3. Add it in the workflow file

```yaml
with:
  database_id: '6626c1ebc5a44db78e3f2fe285171ab7'
```

Follow the rest of the steps only if your database is not public, if its public you don't need to set the token_v2

#### To make your database public

1. Navigate to the database in your notion account
2. Click on Share at the top right corner
3. Click on the Share to Web button.

#### 1. Get your notion `token_v2`

**NOTE**: By no means should you share or expose your notion `token_v2`. If you feel like you've done so accidentally, immediately log out from that account in all of your devices.

Follow the steps below to obtain your `token_v2`:

1. Open up the dev tools of your preferred browser.
2. Go to the Application > Cookies section.
3. There you'll find a `token_v2` cookie.

**NOTE**: Its highly recommended to store your `token_v2` as a github secret rather than pasting it in your workflow file.

#### 2. Create a github secret to store `token_v2`

1. navigate to the url `https://github.com/<USERNAME>/<REPO-NAME>/settings/secrets/actions`
2. Click on `New repository secret`
3. You can name your secret as anything you want
4. Paste the `token_v2` value in the `Value` textarea
5. Use the secret in your workflow file

```yaml
with:
  token_v2: ${{ secrets.NOTION_TOKEN_V2 }} # The secret was named NOTION_TOKEN_V2
```

### Outcome

If you follow all the steps properly your readme should look something like this.

![Github Readme Learn Section](https://cdn.hashnode.com/res/hashnode/image/upload/v1620140780727/qz4TAzMgV.png)

Hope this was helpful to you. That's all from me for now.

The code for the Github action is [here](https://github.com/Devorein/github-readme-learn-section-notion). Feel free to submit a pull request or open a new issue, contributions are highly appreciated and more than welcome. Thank you for reading.