Я управляю своим блогом dev.to в репозитории GitHub


Введение

Я веду блог на японском языке в Zenn, сообществе инженеров, помогающих друг другу. Zenn дает нам возможность управлять своими блогами в репозитории GitHub и писать статьи в моем любимом редакторе. Кроме того, если я сливаю статьи в основную ветку, они автоматически публикуются в моем блоге с помощью CI/CD.

Я хотел бы, чтобы блог dev.to был таким же, и я понимаю, что я управляю своим блогом dev.to в репозитории GitHub и автоматически публикую/обновляю его со ссылкой на эту статью.

https://dev.to/maxime1992/manage-your-dev-to-blog-posts-from-a-git-repo-and-use-continuous-deployment-to-auto-publish-update-them-143j

Я внедряю GitHub Actions CI/CD с помощью DEV API. Основываясь на этой статье, я представляю свой собственный способ управления блогом dev.to.

Как создать

1. Скопируйте шаблон

Перейдите в хранилище авторов статей. https://github.com/Yuhta28/dev-to-blog-template и скопируйте шаблон.

2. Сгенерируйте ключ DEV Community API

Перейдите на сайт https://dev.to/settings/account и сгенерируйте ключ DEV Community API.

3. Установите API-ключ для GitHub Actions

Перейдите в репозиторий GitHub, скопированный из шаблона, и установите API-ключ на секреты Actions.

4. Постройте рабочий процесс GitHub Actions

В справочной статье используйте prettier для форматирования разметки и фрагментов кода. В дополнение к этому я реализую проверку текста с помощью textlint и reviewdog.

name: Build and Deploy

on:
  push:
    branches: [main]
  pull_request:

jobs:
  build:
    name: Build
    if: github.event_name == 'pull_request'
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Repo
        uses: actions/checkout@master

      - name: Install reviewdog
        uses: reviewdog/action-setup@v1
        with:
          reviewdog_version: latest

      - name: Install Dependencies
        uses: bahmutov/npm-install@v1

        #Make sure that cache is retrieved even if steps fail
      - name: cache-node-modules
        uses: pat-s/always-upload-cache@v3
        env:
          cache-name: cache-node-modules
        with:
          path: ~/.npm
          key: node-${{ hashFiles('**/package-lock.json') }}
          restore-keys: |
            node-

      - name: Install textlint
        run: 'npm install --save-dev textlint textlint-rule-common-misspellings textlint-rule-spellchecker'

      - name: Run textlint
        run: npx textlint -f checkstyle "blog-posts/**/*.md" >> .textlint.log

      - name: Run reviewdog
        if: failure()
        env:
          REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          cat .textlint.log
          cat .textlint.log | reviewdog -f=checkstyle -name="textlint" -reporter="github-pr-review"

      - name: Run Prettier
        run: yarn run prettier:check

      - name: Run Embedme
        run: yarn run embedme:check

  deploy:
    name: Deploy
    if: github.ref == 'refs/heads/main' && github.event_name == 'push'
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Repo
        uses: actions/checkout@master

      - name: Install Dependencies
        uses: bahmutov/npm-install@v1

      - name: Deploy to dev.to
        run: DEV_TO_GIT_TOKEN=${{ secrets.DEV_TO_GIT_TOKEN }} yarn run dev-to-git
Вход в полноэкранный режим Выход из полноэкранного режима

5. Связать GitHub с dev.to

Определите свойство repository.url в package.json и установите его в URL репозитория GitHub.

  "name": "dev.to",
  "repository": {
    "type": "git",
    "url": "https://github.com/Yuhta28/dev-to-blog.git"
  }
Вход в полноэкранный режим Выйдите из полноэкранного режима

6. Создайте новую статью

Создайте шаблон для новой статьи, чтобы использовать DEV API. go run create-post.go.

package main

import (
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
    "os"
    "strings"
)

func main() {
    DEVAPIKEY := os.Getenv("DEVAPIKEY") //Set your dev.to API key in your environment variables
    client := &http.Client{}
    var data = strings.NewReader(`{"article":{"title":"Template","body_markdown":"Body","published":false,"tags":["tag1", "tag2"]}}`)
    req, err := http.NewRequest("POST", "https://dev.to/api/articles", data)
    if err != nil {
        log.Fatal(err)
    }
    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("api-key", DEVAPIKEY)
    resp, err := client.Do(req)
    if err != nil {
        log.Fatal(err)
    }
    defer resp.Body.Close()
    bodyText, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("%sn", bodyText)
}
Вход в полноэкранный режим Выйдите из полноэкранного режима

К сожалению, шаблон не может быть подключен к репозиторию GitHub, поэтому мне нужно получить ID статьи и установить его в dev-to-git.json, чтобы подключить его к репозиторию GitHub.

7. Установите ID статьи

Получите ID статьи, чтобы также использовать DEV API. go run get-blog-id.go.

package main

import (
    "encoding/json"
    "fmt"
    "log"
    "net/http"
    "os"

    "github.com/itchyny/gojq"
)

func curl() interface{} {
    DEVAPIKEY := os.Getenv("DEVAPIKEY") //Set your dev.to API key in your environment variables
    client := &http.Client{}
    req, err := http.NewRequest("GET", "https://dev.to/api/articles/me/unpublished", nil)
    if err != nil {
        log.Fatal(err)
    }
    req.Header.Set("api-key", DEVAPIKEY)
    resp, err := client.Do(req)
    if err != nil {
        log.Fatal(err)
    }
    defer resp.Body.Close()
    var data interface{}
    err = json.NewDecoder(resp.Body).Decode(&data)
    if err != nil {
        log.Fatal(err)
    }
    return data
}

func main() {
    // Parse JSON
    query, err := gojq.Parse(".[].id")
    if err != nil {
        log.Fatalln(err)
    }
    input := curl()
    iter := query.Run(input) // or query.RunWithContext
    for {
        v, ok := iter.Next()
        if !ok {
            break
        }
        if err, ok := v.(error); ok {
            log.Fatalln(err)
        }
        fmt.Printf("%1.0fn", v)
    }
}
Войдите в полноэкранный режим Выйти из полноэкранного режима

8. Создайте шаблон для новой статьи

Создайте шаблон для новой статьи. go run make-template.go.

package main

import (
    "fmt"
    "os"
)

func main() {

    var blog string

    print("Enter the name of the new article: ")
    fmt.Scan(&blog)

    // Create blog directory and article file
    if err := os.MkdirAll("blog-posts/"+blog, 0777); err != nil {
        fmt.Println(err)
    }
    file_article, err := os.Create("blog-posts/" + blog + "/" + blog + ".md")
    if err != nil {
        fmt.Println(err)
    }
    defer file_article.Close()

    // Add blog metadata in article file
    file_article.WriteString("---ntitle: Title npublished: falsendescription: descriptionntags: tag1, tag2n---n")

    // Create code directory
    if err := os.MkdirAll("blog-posts/"+blog+"/code", 0777); err != nil {
        fmt.Println(err)
    }
    file_code, err := os.Create("blog-posts/" + blog + "/code/.gitkeep")
    if err != nil {
        fmt.Println(err)
    }
    defer file_code.Close()

    // Create assets directory
    if err := os.MkdirAll("blog-posts/"+blog+"/assets", 0777); err != nil {
        fmt.Println(err)
    }
    file_assets, err := os.Create("blog-posts/" + blog + "/assets/.gitkeep")
    if err != nil {
        fmt.Println(err)
    }
    defer file_assets.Close()
}
Войти в полноэкранный режим Выйти из полноэкранного режима

9. Свяжите ID статьи с шаблоном

Свяжите ID статьи с шаблоном в dev-to-git.json.

[
  {
    "id": 773216,
    "relativePathToArticle": "./blog-posts/cw-oss-cloudwatch/i-use-cw-which-is-oss-to-tail-aws-cloudwatch-logs-2e9g.md"
  },
  {
    "id": 1056501,
    "relativePathToArticle": "./blog-posts/repography-make-readme-rich/repography-makes-github-repository-beautiful-3dn3.md"
  }
]
Войти в полноэкранный режим Выйдите из полноэкранного режима

10. Разверните статью

Управление блогом dev.to в репозитории GitHub завершено. После этого переместите ветку и pull request в основную ветку и запустите GitHub Actions CI/CD.

Заключение

Я управлял своим блогом dev.to в репозитории GitHub. Это облегчает мне контроль версий, и я могу писать статьи, используя мой любимый редактор (Visual Studio code). Более того, инструмент linter помогает мне сократить количество ошибок при написании статей. Итак, давайте попробуем этот метод при написании статей в dev.to.

Оригинал

https://zenn.dev/yuta28/articles/dev-github-vscode

Ссылки

https://dev.to/maxime1992/manage-your-dev-to-blog-posts-from-a-git-repo-and-use-continuous-deployment-to-auto-publish-update-them-143j https://dev.to/beeman/automate-your-dev-posts-using-github-actions-4hp3

Оцените статью
Procodings.ru
Добавить комментарий