Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/Anmol-Baranwal/DevtoGitHub

Save your DEV.to articles and reading list on GitHub with a bunch of useful options.
https://github.com/Anmol-Baranwal/DevtoGitHub

actions-workflow dev-api devto github-action github-config save workflow

Last synced: about 2 months ago
JSON representation

Save your DEV.to articles and reading list on GitHub with a bunch of useful options.

Awesome Lists containing this project

README

        

![DevtoGitHub Banner](https://github.com/Anmol-Baranwal/DevtoGitHub/assets/74038190/839a978c-cfa3-4977-a7a4-5656354642e0)

# DevtoGitHub
Save your DEV.to articles and reading list with a bunch of useful options.

## Use cases

> The problem is that there is no way to save the articles or reading list from DEV.to as a backup, and this solves that in an efficient way.

- The workflow can save your articles each in a different markdown file.
- The details like tags, cover image, URL, and published time is shown in a proper format.
- The best part is that you can create a table of contents in the readme to view and visit each of your articles in the saved repository.
- You can also save your reading lists with specified structures and URLs for easy access.
- You can display the reading time for each article in the reading list.
- You can customize the directory in which you want to save the articles and the reading list.
Your sentences are clear, but here are some minor grammar adjustments for clarity and correctness:
- I've included [custom logic](https://github.com/Anmol-Baranwal/DevtoGitHub?tab=readme-ov-file#the-concept-of-excludetags-and-mustincludetags) based on tags to provide you with more flexibility in managing your reading list.
- All articles and the reading list will be fetched regardless of the total number.
- If you update an article on DEV, it will be automatically updated here the next time the workflow runs.
- You can synchronize your reading list from DEV. For instance, if you remove any article from the reading list on DEV, then it will also be removed in the reading list in the readme.

---

## 🚀 Getting Started

- Before you continue, you should take a few steps to create a repository and generate an API token from DEV. Don't worry, you can use this [complete guide](./GetStarted.md), which has clear instructions and image examples for each step.

- Create a file in the repository at the following path: `.github/workflows/dev-sync.yml` and paste the following code into it.

```yml
name: DevtoGitHub

on:
schedule:
- cron: "0 0 * * *" # Run daily, adjust as needed
# The lines below will allow you to manually run the workflow with each commit
workflow_dispatch:
push:
branches: ["main"]

jobs:
save-articles:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v3

- name: Run DevtoGitHub
uses: Anmol-Baranwal/DevtoGitHub@v1
with:
devApiKey: ${{ secrets.DEV_TOKEN }}
saveArticles: true # default
outputDir: "articles" # this will save the articles in "articles" directory
saveArticlesReadme: true # this will create a table of content for easy navigation
```

- For detailed instructions on custom configuration and visual samples, please refer to the [examples](./Examples.md). To get started, I've also mentioned some of the [common cron schedule](https://github.com/Anmol-Baranwal/DevtoGitHub/blob/main/Examples.md#other-options) for you to use in the workflow.

---

## Inputs

Various inputs are defined to let you configure the action:

| Name | Description | Default | Required |
| ---- | ----------- | ------- | -------- |
| `gh-token` | The GitHub token for authentication. | `'${{ github.token }}'` | `No` |
| `devApiKey` | The API key from your DEV. | `''` | `Yes` |
| `saveArticles` | This will save your articles in respective markdown file. | `'true'` | `No` |
| `outputDir` | The directory to save your articles. Default will save it under articles directory. | `'articles'` | `No` |
| `saveArticlesReadme` | To create a table of contents for your articles in readme (same directory). | `'false'` | `No` |
| `readingList` | To create a reading list from DEV. | `'false'` | `No` |
| `readTime` | To include the reading time for each article in the reading list. | `'false'` | `No` |
| `outputDirReading` | The output directory for saving the reading list (Readme.md). Default will save it under root directory. | `''` | `No` |
| `excludeTags` | To filter the reading list to avoid this tag. Use commas to separate if there are multiple tags. | `''` | `No` |
| `mustIncludeTags` | To create a reading list to include this tag prioritizing over excludeTags. Use commas to separate if there are multiple tags. | `''` | `No` |
| `branch` | The git branch to use for these process. | `'main'` | `No` |
| `conventionalCommits` | To use conventional commit message standards. | `'true'` | `No` |
| `synchronizeReadingList` | To synchronize the reading list from DEV. Removing an article from the reading list on DEV will also remove it from the repository. | `'false'` | `No` |


## The concept of excludeTags and mustIncludeTags

The Combinations that you can use with `readingList`:

As you're aware, there are four tags (max) for each article.
So, I devised a way to give you some flexibility based on the tags.

Suppose you want to remove some articles with tag `#discuss` but want to include the post if that article with `#discuss` tag also has a `#programming` tag. So, you can include `#discuss` in `exlcudeTags` & `#programming` in `mustIncludeTags`.
In case you feel confused. Let's understand it with an example.

Suppose we have an article with tags: `['react', 'javascript', 'frontend', 'tutorial']`.

- If `excludeTags` is 'frontend' and `mustIncludeTags` is 'javascript'. The article is included because it has the `javascript` tag (even though it also has the `frontend` tag).
- If `excludeTags` is 'tutorial' and `mustIncludeTags` is empty (default), the article will be excluded because it has the `tutorial` tag.
- If `excludeTags` is 'backend' and `mustIncludeTags` is 'typescript'. The article is included because it does not have the `backend` tag.
- These cases will work for multiple tags, and `mustIncludeTags` will only work if `excludeTags` is provided.

---

## 🤝 How to Contribute?

All changes are welcome. Please read our [contributing guidelines](Contributing.md)

Feel free to suggest any features or report bugs using these [issue templates](https://github.com/Anmol-Baranwal/DevtoGitHub/issues/new/choose).

---

## 📝 License








The scripts and documentation in this project are released under the MIT License.

---

## bullseye Tech & Tools

> In case you want to run the action locally, without having to commit/push every time, you can use the [act](https://github.com/nektos/act) tool.


- I've used Forem v1 APIs for building DevtoGithub. You can refer to the [docs](https://developers.forem.com/api/v1).

---

## Author

> Feel free to contact me if you need a custom workflow for your project. I'll be happy to build one.

GitHub Profile of Anmol Baranwal
Anmol Baranwal

@Anmol-Baranwal

I would appreciate if you could give this repository a star 🌟. It would help others to discover this.
Thank you for your support 💜