Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

github_changelog_generator による変更履歴の変更を実装 #1

Merged
merged 38 commits into from
Dec 11, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
d400f6b
スクーンショットを追加
m-tmatma Dec 8, 2018
6c7f38b
マークをつける
m-tmatma Dec 8, 2018
bfb7dd7
github_changelog_generator のインストール及び変更履歴の生成用のバッチファイルを作成
m-tmatma Dec 8, 2018
a9d6c90
赤丸を追加
m-tmatma Dec 8, 2018
f25b185
説明を更新
m-tmatma Dec 8, 2018
85bcb97
大文字に変更
m-tmatma Dec 8, 2018
3c7669a
スクリーンショットを追加
m-tmatma Dec 8, 2018
582a6f6
スクーンショットを追加
m-tmatma Dec 8, 2018
51a925b
スクーンショットを追加
m-tmatma Dec 8, 2018
2f08970
スクリーンショットに印をつける
m-tmatma Dec 8, 2018
4b9b5e4
ドキュメントを更新する
m-tmatma Dec 8, 2018
0a7d0fa
appveyor.yml を追加
m-tmatma Dec 8, 2018
89fac1f
赤丸をつけて説明を追加
m-tmatma Dec 8, 2018
d253b2d
スクリーンショットを差し替え
m-tmatma Dec 8, 2018
84cb229
GitHub Access Token の作成方法の説明を改善
m-tmatma Dec 8, 2018
4a0bd5a
[ci skip] ドキュメント更新
m-tmatma Dec 8, 2018
78e5a06
[ci skip] 説明修正
m-tmatma Dec 8, 2018
bad6f5e
バッチを追加
m-tmatma Dec 8, 2018
ca41001
テストコード追加
m-tmatma Dec 8, 2018
32eaa24
テストコードを削除
m-tmatma Dec 8, 2018
4499022
Python じゃない。Ruby だった。
m-tmatma Dec 8, 2018
af63cb7
environment, secure を使う
m-tmatma Dec 8, 2018
3e96543
スクリーンショットを追加
m-tmatma Dec 8, 2018
3131aaf
赤マルを付ける
m-tmatma Dec 8, 2018
1fa10bc
赤丸をつける
m-tmatma Dec 8, 2018
19b3a80
secure 変数の有効性に関してドキュメントを更新
m-tmatma Dec 9, 2018
739042b
スクリーンショットを追加
m-tmatma Dec 9, 2018
a06db35
`Enable secure variables in Pull Requests from the same repository on…
m-tmatma Dec 9, 2018
73d9b4b
APPVEYOR_REPO_NAME と APPVEYOR_PULL_REQUEST_HEAD_REPO_NAME のチェックを導入
m-tmatma Dec 9, 2018
e22a76d
endlocal の追加漏れを修正
m-tmatma Dec 9, 2018
38736f5
[ci skip] ローカルビルド の説明を更新
m-tmatma Dec 9, 2018
22e562a
[ci skip] ドキュメントの誤りを修正
m-tmatma Dec 9, 2018
0280390
メッセージの誤りを修正
m-tmatma Dec 10, 2018
9bbb158
--exclude-labels の値を環境変数で定義する
m-tmatma Dec 10, 2018
7b695d1
`CHANGELOG.md` のダウンロードに関する説明を追加
m-tmatma Dec 10, 2018
35ad804
コメント追加
m-tmatma Dec 10, 2018
262c8a5
リポジトリ自体の説明を追加
m-tmatma Dec 10, 2018
a416354
プロジェクト自体の説明を改善
m-tmatma Dec 10, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
162 changes: 160 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,160 @@
# changelog-sakura
changelog for sakura
# sakura editor の ChangeLog を生成するためのリポジトリです。

[![Build status](https://ci.appveyor.com/api/projects/status/9lapqyq8h7ak1otj/branch/master?svg=true)](https://ci.appveyor.com/project/sakuraeditor/changelog-sakura/branch/master)

このリポジトリは [サクラエディタ](https://github.com/sakura-editor/sakura) の Issue や Pull Request などの情報を元に外部ツールを使って 自動的に Markdown の形式で ChangeLog を生成するためのプロジェクトです。

どのようなオプション(除外するタグなど)を外部ツールに渡して markdown の生成を行うかは検討中です。
何か提案等あれば issue への登録をお願いします。

## 生成した `CHANGELOG.md` のダウンロードおよびローカルの確認

### ダウンロード先

appveyor で生成した `CHANGELOG.md` は以下からダウンロードできます。

https://ci.appveyor.com/project/sakuraeditor/changelog-sakura/build/artifacts

### ダウンロードした `CHANGELOG.md` の確認方法

`CHANGELOG.md` は [Visual Studio Code](https://code.visualstudio.com/) をインストールした上で [Markdown Preview Github Styling](https://marketplace.visualstudio.com/items?itemName=bierner.markdown-preview-github-styles) をインストールしてプレビュー表示することで
GitHub で見るのと同様の見た目で内容を確認できます。

## ChangeLog の生成方法

[github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator) を
使用してChangeLog を生成します。

### github_changelog_generator の使い方のドキュメント

https://github.com/github-changelog-generator/github-changelog-generator#usage

## GitHub Access Token

### GitHub Access Token に関して

github_changelog_generator は GitHub API を使用して GitHub から情報を取得して自動的に ChangeLog を生成します。
GitHub API は匿名アクセスの場合、一時間あたり 60 リクエストという制限があります。Access Token を使用することで
一時間あたり 5000 リクエストに拡大することができます。

https://developer.github.com/v3/#rate-limiting

サクラエディタでは、匿名アクセスの制限では足りないので、制限を緩和するために Access Token を使用します。

### GitHub Access Token の作成方法

**注意: この GitHub Access Token はアカウント名とパスワードをあわせたものと同等なので誤って漏れないように注意してください。**

1. https://github.com/settings/tokens/new にアクセスします。
2. 以下画面で、`Token description` にわかり易い名前をつけた上で、`repo` の `public_repo` にチェックを付けて、`Generate token` を押します。(`repo` 全体にチェックをつける必要はありません。)
![Access Token](image/generate-access-token.png)
3. Access Token が生成されるのでクリップボードにコピーします。


## github_changelog_generator のインストール

Ruby が利用可能な環境で以下を実行します。

```
installLog.bat
```

あるいは

```
gem install github_changelog_generator
```

installLog.bat は Ruby 2.5 を想定していますが、PATH を通せば他のバージョンでも構いません。

## github_changelog_generator の実行

### GitHub Access Token の設定

github_changelog_generator のインストールをしたあとに GitHub Access Token を環境変数に設定します。XXXX の部分は生成した Access Token です。

```
set CHANGELOG_GITHUB_TOKEN=XXXXX
```

### 実行

以下バッチファイルを実行します。

```
makeChangeLog.bat
```

以下コマンドで `github_changelog_generator` のヘルプが表示されるのでいろんなオプションを確認することができます。

```
github_changelog_generator --help
```

## appveyor での実行

appveyor で実行するときに `CHANGELOG_GITHUB_TOKEN` の環境変数を設定します。
その際、プレーンテキストで appveyor.yml に保存しなくていいように
appveyor の設定画面で暗号化した上で設定します。

fork リポジトリに対して設定する場合と [sakura-editor organizaion のプロジェクト](https://ci.appveyor.com/project/sakuraeditor/changelog-sakura) で設定する場合で
手順に違いがあります。

1. 設定画面に移動し、`Environment` を選び、`Add variable` を選びます。

![環境変数追加1](image/env1.png)

2. エディットボックスに `CHANGELOG_GITHUB_TOKEN`と入力して、その右に実際の値を設定します。
3. そして、鍵ボタンを押します。(**重要**)

![環境変数追加2](image/env2.png)

4. `CHANGELOG_GITHUB_TOKEN` の値が隠れているのを確認して、画面の下までスクロールして `Save`を押します。(**重要**)

![環境変数追加3](image/env3.png)

5. (sakura-editor organizaion のプロジェクトのみ) [sakura-editor organizaion のプロジェクト](https://ci.appveyor.com/project/sakuraeditor/changelog-sakura) で `Settings` を選び、 `Export YAML` を選ぶと以下の画面になります。

![環境変数追加4](image/env4.png)

6. (sakura-editor organizaion のプロジェクトのみ) 以下の部分を appveyor.yml にコピーします。

```
environment:
CHANGELOG_GITHUB_TOKEN:
secure: buBWtAa04hCnz74nMONW8pZgTY9sx7fdKOPXpTsMs4JoxjWX/LRUBRcmlSjpvo1a
```

↑ この値は暗号化されているので値が公開されても問題ない。

7. (sakura-editor organizaion のプロジェクトのみ) appveyor.yml をコミットして push します。

### appveyor での secure 変数

#### 有効となる条件

Pull Request 内では secure 変更は基本的には無効になります。

ただし、`Settings` → `General` の `Enable secure variables in Pull Requests from the same repository only` の設定を有効にした場合
Pull Request の送り元ブランチが、同じリポジトリの場合のみ例外的に secure 変数が有効になります。

**設定変更後、忘れずに Save する必要があります。**

![Enable secure variables in Pull Requests from the same repository only](image/enable-secure-variables-in-pull-requests-from-same-repo.png)

参考: https://github.com/appveyor/ci/issues/2355#issuecomment-390803634

#### 有効か判定するロジック

|条件|APPVEYOR_REPO_NAME|APPVEYOR_PULL_REQUEST_HEAD_REPO_NAME|secure 変数|処理実行の可否|
|--|--|--|--|--|
|ローカルビルド|空|空 (※1)|-|○|
|ブランチの appveyor ビルドの場合 (Fork)|xxx/changelog-sakura|空 (※1)|○ (UI で設定した場合)|○|
|ブランチの appveyor ビルドの場合 (sakura-editor)|sakura-editor/changelog-sakura|空 (※1)|○|○|
|PR (送信元: Fork のブランチ)|sakura-editor/changelog-sakura|xxx/changelog-sakura|×|×|
|PR (送信元: sakura-editor のブランチ)|sakura-editor/changelog-sakura|sakura-editor/changelog-sakura (※2)|○|○|

→ つまり、以下のいずれかの場合には `CHANGELOG_GITHUB_TOKEN` の変数が利用可能であり、空であればエラーとすればよい。

- `APPVEYOR_PULL_REQUEST_HEAD_REPO_NAME` が空の場合 (※1)
- (上記は当てはまらなくて) `APPVEYOR_REPO_NAME` と `APPVEYOR_PULL_REQUEST_HEAD_REPO_NAME` の値が等しい場合 (※2)
17 changes: 17 additions & 0 deletions appveyor.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
version: 1.0.{build}
image: Visual Studio 2017

environment:
# This is an API key for GitHub and generated by acount 'sakura-editor-ci' in 'sakura-ci' team.
# The team members have only readonly permission.
CHANGELOG_GITHUB_TOKEN:
secure: buBWtAa04hCnz74nMONW8pZgTY9sx7fdKOPXpTsMs4JoxjWX/LRUBRcmlSjpvo1a
takke marked this conversation as resolved.
Show resolved Hide resolved

install:
- call installChangeLog.bat

build_script:
- call makeChangeLog.bat

artifacts:
- path: 'CHANGELOG.md'
2 changes: 2 additions & 0 deletions env-set.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
@echo off
PATH=C:\Ruby25-x64\bin;C:\Ruby25\bin;%PATH%
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added image/env1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added image/env2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added image/env3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added image/env4.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added image/generate-access-token.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 8 additions & 0 deletions installChangeLog.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
@echo off

setlocal

call %~dp0env-set.bat

gem install github_changelog_generator
endlocal
48 changes: 48 additions & 0 deletions makeChangeLog.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
@echo off

setlocal

call %~dp0env-set.bat

set ACCOUNTNAME=sakura-editor
set PROJECTNAME=sakura
set OUTFILENAME=CHANGELOG.md
set EXCLUDELABELS=duplicate,question,invalid,wontfix,CI,management,refactoring

@echo.
@echo INFO: APPVEYOR_REPO_NAME = %APPVEYOR_REPO_NAME%
@echo INFO: APPVEYOR_PULL_REQUEST_HEAD_REPO_NAME = %APPVEYOR_PULL_REQUEST_HEAD_REPO_NAME%
@echo.

set SECURE_VAR_IS_VALID=
if not defined APPVEYOR_PULL_REQUEST_HEAD_REPO_NAME (
@rem if APPVEYOR_PULL_REQUEST_HEAD_REPO_NAME is empty, it is not a PR.
set SECURE_VAR_IS_VALID=1
) else if "%APPVEYOR_REPO_NAME%" == "%APPVEYOR_PULL_REQUEST_HEAD_REPO_NAME%" (
@rem if APPVEYOR_REPO_NAME and APPVEYOR_PULL_REQUEST_HEAD_REPO_NAME are equal, it is a PR from the same repository.
set SECURE_VAR_IS_VALID=1
)

if not defined SECURE_VAR_IS_VALID (
@echo secure variable is valid only in a PR from the same repository or in a branch build.
@echo secure variable is not available in this build, so skip build.
endlocal
exit /b 0
)

if not defined CHANGELOG_GITHUB_TOKEN (
@echo 1. you need to define env variable CHANGELOG_GITHUB_TOKEN in advance.
@echo 2. you can generate GitHub Access Token at https://github.com/settings/tokens/new
@echo 3. you need to set env variable CHANGELOG_GITHUB_TOKEN on command line or CI.
endlocal
exit /b 1
)

github_changelog_generator ^
-u %ACCOUNTNAME% ^
-p %PROJECTNAME% ^
-o %OUTFILENAME% ^
--exclude-labels %EXCLUDELABELS% ^
--cache-file %TEMP%\github-changelog-http-cache ^
--cache-log %TEMP%\github-changelog-logger.log
endlocal