Skip to content
This repository has been archived by the owner on Aug 17, 2023. It is now read-only.

Commit

Permalink
Merge pull request #213 from beproud/t095-show-version-releasenote
Browse files Browse the repository at this point in the history
バージョンもしくはリリースノートが帰ってくるコマンド
  • Loading branch information
NaoY-2501 authored Nov 2, 2020
2 parents 5381b87 + 5693af8 commit b9837ca
Show file tree
Hide file tree
Showing 7 changed files with 143 additions and 0 deletions.
5 changes: 5 additions & 0 deletions ChangeLog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@
Unreleased
----------

Release Notes - 2020-11-02
--------------------------
- [#213] リリースノートの最新バージョンの記述を返すversionコマンドを追加


Release Notes - 2020-10-30
--------------------------
- [#210] READMEとenv.sampleにREDMINE_API_KEYについて追記
Expand Down
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -268,3 +268,7 @@ http://localhost:9000/redmine/issues/12345
- `$status <del,delte,rm,remove> <name>`: リソース削除
- `$status <name>`: リソースのステータスをデフォルトに戻す
- `$status <name> <value>`: リソースのステータス設定

### version コマンド

- `$version` : リリースノートから最新の更新を取得して表示する
1 change: 1 addition & 0 deletions env.sample
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ SQLALCHEMY_ECHO=true or false
#SQLALCHEMY_POOL_SIZE=20
WATER_EMPTY_TO=user_group_id
REDMINE_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxx
PROJECT_ROOT=/home/haro/beproudbot

# ansible
# ENVIRONMENT_FILE_PATH=/home/haro/beproudbot/.env
Expand Down
61 changes: 61 additions & 0 deletions src/haro/plugins/version.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import re

from slackbot import settings
from slackbot.bot import respond_to
from haro.botmessage import botsend

VERSION_PAT = re.compile(r'Release Notes - [\d-]+')
LOG_PAT = re.compile(r'-\s[#[\w\W]+]\s[\w\W]+')
HELP = """
`$version`: デプロイされているChangeLog.rstから最新の更新内容を表示する
"""


def read_change_log():
change_log_path = '{}/ChangeLog.rst'.format(settings.PROJECT_ROOT)
try:
with open(change_log_path, 'r', encoding='utf-8') as f:
change_log = f.read()
return change_log
except FileNotFoundError:
raise FileNotFoundError


def version():
try:
body = read_change_log()
except FileNotFoundError:
message = 'リリースノートが見つかりません'
return message

release_notes = body.strip().split('\n')
latest_row = 0
for idx, line in enumerate(release_notes):
if VERSION_PAT.match(line):
latest_row = idx
break
version = release_notes[latest_row].strip()
log = ''
for line in release_notes[latest_row + 2:]:
if LOG_PAT.match(line):
log += '{}\n'.format(line)
else:
break
message = '{}\n'.format(version) + \
'--------------------------\n' + \
'{}'.format(log)
return message


@respond_to(r'^version$')
def show_version_commands(message):
botsend(message, version())


@respond_to(r'^version\s+help$')
def show_help_version_commands(message):
"""versionコマンドのhelpを表示
:param message: slackbot.dispatcher.Message
"""
botsend(message, HELP)
3 changes: 3 additions & 0 deletions src/slackbot_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,9 @@ def is_true(arg):
import logging
logging.basicConfig(level=logging.DEBUG)

# haroのプロジェクトルート
PROJECT_ROOT = os.environ['PROJECT_ROOT']

##### DB #####
SQLALCHEMY_URL = os.environ['SQLALCHEMY_URL']
SQLALCHEMY_ECHO = os.environ['SQLALCHEMY_ECHO']
Expand Down
68 changes: 68 additions & 0 deletions tests/test_version.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
from unittest import mock
import pytest

class TestVersion:
@pytest.fixture
def target(self):
from haro.plugins.version import version
return version

@pytest.mark.parametrize(
'change_log,expected',
[
# issue番号が数値
(
# ChangeLog.rst
'Unreleased\n' + \
'----------\n' + \
'\n' + \
'Release Notes - 2020-10-30\n' + \
'--------------------------\n' + \
'- [#210] READMEとenv.sampleにREDMINE_API_KEYについて追記\n' + \
'\n' + \
'Release Notes - 2020-10-23\n' + \
'--------------------------\n' + \
'- [#207] Redmine Reminderが動いていないバグ\n',
# expected
'Release Notes - 2020-10-30\n' + \
'--------------------------\n' + \
'- [#210] READMEとenv.sampleにREDMINE_API_KEYについて追記\n'
),
# issue番号が数値以外
(
# ChangeLog.rst
'Unreleased\n' + \
'----------\n' + \
'\n' + \
'Release Notes - 2020-10-30\n' + \
'--------------------------\n' + \
'- [#foo] READMEとenv.sampleにREDMINE_API_KEYについて追記\n' + \
'\n' + \
'Release Notes - 2020-10-23\n' + \
'--------------------------\n' + \
'- [#bar] Redmine Reminderが動いていないバグ\n',
# expected
'Release Notes - 2020-10-30\n' + \
'--------------------------\n' + \
'- [#foo] READMEとenv.sampleにREDMINE_API_KEYについて追記\n'
)
]
)
def test_get_version_success(self, target, change_log, expected):
with mock.patch('haro.plugins.version.read_change_log') as m:
# arrange
m.return_value = change_log
# act
actual = target()
# assert
assert actual == expected

def test_get_version_failed(self, target):
with mock.patch('haro.plugins.version.read_change_log') as m:
# arrange
m.side_effect = FileNotFoundError
expected = 'リリースノートが見つかりません'
# act
actual = target()
# assert
assert actual == expected
1 change: 1 addition & 0 deletions tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ setenv =
HARO_DEBUG=True
SQLALCHEMY_URL=sqlite:///test.db
SQLALCHEMY_ECHO=true
PROJECT_ROOT=/home/haro/beproudbot

deps =
pytest
Expand Down

0 comments on commit b9837ca

Please sign in to comment.