Skip to content

Commit

Permalink
first commit
Browse files Browse the repository at this point in the history
  • Loading branch information
halkt committed Sep 19, 2023
1 parent c291a4e commit 80fda82
Show file tree
Hide file tree
Showing 11 changed files with 240 additions and 1 deletion.
17 changes: 17 additions & 0 deletions .github/workflows/create-draft.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
name: create draft

on:
workflow_dispatch:
inputs:
title:
description: "Title"
required: true

jobs:
create-draft:
uses: hatena/hatenablog-workflows/.github/workflows/_create-draft.yaml@main
with:
title: ${{ github.event.inputs.title }}
BLOG_DOMAIN: ${{ vars.BLOG_DOMAIN }}
secrets:
OWNER_API_KEY: ${{ secrets.OWNER_API_KEY }}
12 changes: 12 additions & 0 deletions .github/workflows/initialize.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
name: initialize

on:
workflow_dispatch:

jobs:
initialize:
uses: hatena/hatenablog-workflows/.github/workflows/_initialize.yaml@main
with:
BLOG_DOMAIN: ${{ vars.BLOG_DOMAIN }}
secrets:
OWNER_API_KEY: ${{ secrets.OWNER_API_KEY }}
17 changes: 17 additions & 0 deletions .github/workflows/pull-draft.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
name: pull draft from hatenablog

on:
workflow_dispatch:
inputs:
title:
description: "Draft Entry Title"
required: true

jobs:
pull-draft:
uses: hatena/hatenablog-workflows/.github/workflows/_pull-draft.yaml@main
with:
title: ${{ github.event.inputs.title }}
BLOG_DOMAIN: ${{ vars.BLOG_DOMAIN }}
secrets:
OWNER_API_KEY: ${{ secrets.OWNER_API_KEY }}
12 changes: 12 additions & 0 deletions .github/workflows/pull.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
name: pull from hatenablog

on:
workflow_dispatch:

jobs:
pull:
uses: hatena/hatenablog-workflows/.github/workflows/_pull.yaml@main
with:
BLOG_DOMAIN: ${{ vars.BLOG_DOMAIN }}
secrets:
OWNER_API_KEY: ${{ secrets.OWNER_API_KEY }}
12 changes: 12 additions & 0 deletions .github/workflows/push-draft.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
name: push draft to hatena blog

on:
pull_request:
paths:
- "draft_entries/**"

jobs:
pull-draft:
uses: hatena/hatenablog-workflows/.github/workflows/_push-draft.yaml@main
secrets:
OWNER_API_KEY: ${{ secrets.OWNER_API_KEY }}
20 changes: 20 additions & 0 deletions .github/workflows/push-when-publishing-from-draft.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
name: push when publishing from draft

on:
pull_request:
branches:
- main
types: [closed]
paths:
- "draft_entries/**"

jobs:
push:
if: |
github.event.pull_request.merged == true
&& !startsWith(github.head_ref, 'from-draft-to-publish')
uses: hatena/hatenablog-workflows/workflows/_push-when-publishing-from-draft.yaml@main
with:
BLOG_DOMAIN: ${{ vars.BLOG_DOMAIN }}
secrets:
OWNER_API_KEY: ${{ secrets.OWNER_API_KEY }}
20 changes: 20 additions & 0 deletions .github/workflows/push.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
name: push to hatena blog

on:
pull_request:
branches:
- main
types: [closed]
paths:
- "entries/**"

jobs:
push:
if: |
github.event.pull_request.merged == true
&& !startsWith(github.head_ref, 'from-draft-to-publish')
uses: hatena/hatenablog-workflows/.github/workflows/_push.yaml@main
with:
local_root: "entries"
secrets:
OWNER_API_KEY: ${{ secrets.OWNER_API_KEY }}
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
draft.md
121 changes: 120 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,120 @@
# Hatena-Blog-Workflows-Boilerplate
# GitHub Template for HatenaBlog(β)

## この GitHub Template の目的、できること

- このツールは、企業がはてなブログで技術ブログを運営する際のレビューや公開作業など、運営ワークフローを支援する目的で作成しています
- GitHub 上で、はてなブログとの記事の同期、下書きの作成・編集、記事の公開・編集、などを行うことができます
- 下書きの作成時にプルリクエストが作成されるため、記事のレビューなどのワークフローに組み込むことが容易になります
- 下書き記事の公開や公開記事の編集は、プルリクエストの main ブランチへのマージでのみ実行されます。main ブランチを保護するなどで、記事の公開を制御することが可能です
- 本機能はベータ版です。正常に動作しない場合がありますがご了承下さい
- フィードバックなどお待ちしております

## セットアップ

1. `blogsync.yaml`の各種項目を記述してください

```yaml
<BLOG DOMAIN>:
username: <HATENA ID>
owner: <OWNER HATENA ID>
default:
local_root: entries
```
2. GitHub リポジトリの `Repository variables` に連携するブログのドメインを追加する

3. GitHub リポジトリの `Secrets` に Atom Pub API キーを登録する

- リポジトリの環境変数として`OWNER_API_KEY`を設定してください
- ブログのオーナーはてなアカウントの API キー を登録してください
- API キーは、ブログオーナーアカウントでログイン後、[アカウント設定](https://blog.hatena.ne.jp/-/config) よりご確認いただけます

4. リポジトリにはてなブログの記事を同期させる

- Actions から`initialize`を workflow_dispatch で実行する
- 全記記事が含まれたプルリクエストが作成されます。マージしてはてなブログとリポジトリの状況を同期させます

5. セットアップ完了

- これで使用開始の準備が整いました!

## 想定するワークフロー

このツールで想定している下書き作成から記事公開までのワークフローは以下のとおりです。

1. 下書きを作成する
- 下書きの作成方法は、「個人のアカウント」「ブログオーナーアカウント」の 2 通りの方法があります。詳しくは下記「下書きの作成」セクションをご参照下さい
2. 下書き記事をプルリクエスト上で編集する
3. リポジトリにプッシュし、下書きのはてなブログ上のプレビューを行う
- 下書き記事に限り、はてなブログでのプレビューを行えるようにするため、 プッシュされた時点ではてなブログに同期される仕組みになっています
- 記事の編集画面の URL は、プルリクエストに記載されています。編集画面に遷移した後、下書きプレビューの URL を発行し、プルリクエストの概要に記載しておくとプレビューが容易になって便利です
4. 適宜レビューなどを行い、通れば次の公開手順に進む
5. 下書き記事の `Draft: true` 行を削除し、プルリクエストを main ブランチにマージする
6. はてなブログ上で記事が公開されます

## 下書きの作成

下書きの作成方法は以下の 2 通りの方法があります。

- ブログメンバーが個人のアカウントで投稿する(記事の署名は個人のアカウントになります)
- ブログオーナーのアカウントで投稿する(記事の署名はブログオーナーアカウントになります)

それぞれ、下書き作成の手順が異なります。ブログの運営方針に沿った方法を選択してください。

### ブログメンバーが個人のアカウントで投稿する場合

1. 投稿したいブログの編集画面を開く
2. 下書き記事の記事タイトルを `{{username}}-{{日付}}` 等、ユニークな記事タイトルに設定し、クリップボードにコピーしておく
3. 下書きを投稿する
4. `pull draft from hatenablog` の workflow_dispatch を選択し、`Draft Entry Title`に先程コピーしたタイトルを設定し、実行する
5. 投稿した下書きを含むプルリクエストが作成される

### ブログオーナーのアカウントで投稿する場合

1. `create draft` workflow_dispatch を選択し、`Title`に記事タイトルを設定し、実行する

2. 作成した下書きを含むプルリクエストが作成される

## 各種操作方法

### はてなブログの公開記事の同期

- Actions から`pull from hatenablog`を workflow_dispatch で実行してください
- はてなブログから公開記事のみの記事のデータを取得したプルリクエストが作成されます

### メンバーアカウントで新規記事の下書きを作成

- 記事を投稿するブログの編集画面を開き、下書きを作成してください。また、この際の記事のタイトルはユニークなものになるように指定して下さい
- 例) `example_user-20230101` など
- Actions から `pull draft from hatenablog` の workflow_dispatch を選択、 `Draft Entry Title` に作成したエントリーのタイトルを指定し、実行して下さい
- 記事のタイトルが一致する下書き記事を取得した、下書き用のプルリクエストが作成されます
- 記事を編集する場合には、ここで生成されたファイルを編集してください
- 下書きファイルは `draft_entries` 配下に作成されます
- この時点で投稿日や URL は確定していないため, 未入力の状態となります
- ブログメンバーが作成した記事をブログオーナーが編集したり、公開したりしても、記事の作成者は当該ブログメンバーから変更されません

### ブログオーナーアカウントで新規記事の下書きを作成

- Actions から `create draft` の workflow_dispatch を選択、記事のタイトルを入力し、実行して下さい
- はてなブログに下書きデータが投稿され、下書き用のプルリクエストがが作成されます
- 記事を編集する場合はここで生成されたファイルを編集してください
- 下書きファイルは `draft_entries` 配下に作成されます
- この時点で投稿日や URL は確定していないため, 未入力の状態となります
- ここで作成した記事はブログオーナーの記事として作成されます

### 下書き記事の編集

- 上記で作成した下書き記事はローカル上で編集ができます
- 下書き記事は, 編集した記事の差分を含むコミットをリモートリポジトリに push したタイミングで, はてなブログの下書き記事も更新されます
- これは、下書き記事をはてなブログ上でプレビューするための仕様です
- そのため、記事の metadata に `Draft: true` が含まれていない場合、はてなブログへの同期は行われません

### 下書き記事の公開

- 記事の metadata から `Draft` の記述を削除した記事が main ブランチにマージされると記事が公開されます
- 公開と同時に `draft_entries` の記事ファイルを `entries` に移動するプルリクエストが作成され自動的に Merge されます
- 記事の metadata に `Date` が存在している場合、ここに入力された日時が記事の公開日時として扱われるため必要に応じて編集をお願いします。`Date` を削除すると、公開日時が自動で指定されます

### 既存公開記事の更新

- `entries` 配下の記事を編集した プルリクエストが main ブランチにマージされると、はてなブログの記事も同時に更新されます
5 changes: 5 additions & 0 deletions blogsync.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<BLOG DOMAIN>:
username: <HATENA ID>
owner: <OWNER HATENA ID>
default:
local_root: entries
4 changes: 4 additions & 0 deletions draft.md.template
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
Title: ${TITLE}
Draft: true
---

0 comments on commit 80fda82

Please sign in to comment.