Save your DEV.to articles and reading list with a bunch of useful options.
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 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.
-
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, 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.
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. To get started, I've also mentioned some of the common cron schedule for you to use in the workflow.
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 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' andmustIncludeTags
is 'javascript'. The article is included because it has thejavascript
tag (even though it also has thefrontend
tag). - If
excludeTags
is 'tutorial' andmustIncludeTags
is empty (default), the article will be excluded because it has thetutorial
tag. - If
excludeTags
is 'backend' andmustIncludeTags
is 'typescript'. The article is included because it does not have thebackend
tag. - These cases will work for multiple tags, and
mustIncludeTags
will only work ifexcludeTags
is provided.
All changes are welcome. Please read our contributing guidelines
Feel free to suggest any features or report bugs using these issue templates.
The scripts and documentation in this project are released under the MIT License. |
In case you want to run the action locally, without having to commit/push every time, you can use the act tool.
- I've used Forem v1 APIs for building DevtoGithub. You can refer to the docs.
Feel free to contact me if you need a custom workflow for your project. I'll be happy to build one.
|
I would appreciate if you could give this repository a star 🌟. It would help others to discover this. Thank you for your support 💜