Skip to content

Commit

Permalink
Merge branch 'release/4.3.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
Sunwood-ai-labs committed May 14, 2024
2 parents 71ff860 + e590f10 commit 6384bc8
Show file tree
Hide file tree
Showing 11 changed files with 318 additions and 15 deletions.
4 changes: 3 additions & 1 deletion .SourceSageignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,6 @@ modules\__pycache__
sourcesage.egg-info
.pytest_cache
dist
build
build
.SourceSageAssets
docs
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -164,3 +164,5 @@ SourceSageAssets

.pypirc
temp/
.SourceSageAssets
.Gaiah.md
49 changes: 49 additions & 0 deletions example/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@


## 1. `generate_diff_report.py`

### 概要
このスクリプトは、Gitリポジトリ内の最新のリリースと前回のリリースの間の差分を取得し、それをマークダウン形式のレポートに変換します。

### 主な機能
- **`run_command`関数**: 指定されたコマンドを実行し、その出力をキャプチャして表示します。
- **`get_git_diff`関数**: 最新のGitタグを取得し、それと前のタグの間の差分を生成します。
- **`generate_markdown_report`関数**: 差分情報を整理し、マークダウン形式のレポートを生成します。
- **`main`関数**: 全体のプロセスを管理し、実行します。

---

## 2. `get_diff.py`

### 概要
このスクリプトは、現在のGitリポジトリのステージングエリアにある変更を取得し、その差分を表示します。

### 主な機能
- **リポジトリの初期化**: 指定されたパスのGitリポジトリを初期化します。
- **差分の取得**: ステージングエリアにある変更を取得し、それを表示します。

---

## 3. `get_issues.py`

### 概要
このスクリプトは、指定されたGitHubリポジトリから開いているIssueを取得し、そのデータをJSONファイルとして保存します。

### 主な機能
- **GitHub APIの使用**: GitHub APIを利用して、指定されたリポジトリから開いているIssueを取得します。
- **データの保存**: 取得したIssueデータをJSON形式で保存します。

---

## 4. `make_issue_res.py`

### 概要
このスクリプトは、取得したIssueデータを元に、指定されたテンプレートを使用してマークダウンファイルを生成します。

### 主な機能
- **テンプレートの読み込み**: 指定されたテンプレートファイルを読み込みます。
- **マークダウンファイルの生成**: 各Issueに対してテンプレートを適用し、マークダウンファイルを生成します。

---

以上が`example`フォルダ内の各ファイルの日本語解説です。それぞれのスクリプトは、SourceSageプロジェクトの様々な自動化タスクをサポートするために設計されています。
76 changes: 76 additions & 0 deletions example/generate_diff_report.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
import subprocess
import os
from loguru import logger

def run_command(command):
"""
指定されたコマンドを実行し、出力をキャプチャして表示します。
"""
logger.info(f">>>>>> 実行コマンド: {' '.join(command)}")
result = subprocess.run(command, capture_output=True, text=True, encoding='utf-8')
if result.returncode != 0:
raise Exception(f"コマンドが失敗しました: {result.stderr}")
return result.stdout.strip() # 出力の前後の空白を削除

def get_git_diff():
"""
現在のリリースと前のリリースの間の git diff を取得します。
"""
logger.info("最新の git タグを取得しています...")
run_command(["git", "fetch", "--tags"])

logger.info("最新と前のタグを取得しています...")
tags_output = run_command(["git", "tag", "--sort=-creatordate"])
tags = tags_output.split()

if len(tags) < 2:
raise Exception("比較するタグが十分にありません。")

latest_tag, previous_tag = tags[:2]
logger.success(f"最新タグ: {latest_tag}, 前のタグ: {previous_tag}")

logger.info("git diff を生成しています...")
diff = run_command(["git", "diff", previous_tag, latest_tag])

return diff, latest_tag, previous_tag

def generate_markdown_report(diff, latest_tag, previous_tag):
"""
git diff からマークダウンレポートを生成します。
"""
logger.info("マークダウンレポートを生成しています...")
report_content = f"# Git Diff レポート\n\n"
report_content += f"## バージョン比較\n\n"
report_content += f"**{previous_tag}** と **{latest_tag}** の比較\n\n"
report_content += "## 差分の詳細\n\n"

# ファイル名ごとに差分を整理
file_diffs = {}
current_file = None
for line in diff.split("\n"):
if line.startswith("diff --git"):
current_file = line.split(" ")[-1][2:] # ファイル名を抽出
file_diffs[current_file] = []
elif current_file:
file_diffs[current_file].append(line)

# ファイル名ごとに見出しとコードブロックを生成
for file, lines in file_diffs.items():
report_content += f"### {file}\n\n"
report_content += "```diff\n"
report_content += "\n".join(lines)
report_content += "\n```\n\n"

with open(".SourceSageAssets/git_diff_report.md", "w", encoding='utf8') as file:
file.write(report_content)

logger.success("マークダウンレポートが正常に生成されました!")

def main():
logger.info("git diff レポートの生成を開始します...")
diff, latest_tag, previous_tag = get_git_diff()
generate_markdown_report(diff, latest_tag, previous_tag)
logger.success("プロセスが完了しました。")

if __name__ == "__main__":
main()
File renamed without changes.
File renamed without changes.
File renamed without changes.
3 changes: 2 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
name='sourcesage',

# パッケージのバージョン
version='4.2.1',
version='4.3.0',

# パッケージに含めるモジュールを自動的に探す
packages=find_packages(),
Expand Down Expand Up @@ -55,5 +55,6 @@
'GitPython',
'requests',
'art',
'termcolor',
],
)
50 changes: 38 additions & 12 deletions sourcesage/cli.py
Original file line number Diff line number Diff line change
@@ -1,28 +1,28 @@
import argparse
from .core import SourceSage
from .modules.ReleaseDiffReportGenerator import GitDiffGenerator, MarkdownReportGenerator
import os
from loguru import logger
import sys
# logger.add(sink=sys.stderr, format="{time:YYYY-MM-DD HH:mm:ss.SSS} | {level:<8} | {name}:{line} | {message}")
from art import *

# ログ出力のフォーマットを指定
logger.configure(
handlers=[
{
"sink": sys.stderr,
"format": "<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | <level>{level:<6}</level> | <cyan>{name:<45}:{line:<5}</cyan> | <level>{message}</level>",
"format": "<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | <level>{level:<8}</level> | <cyan>{name:<45}:{line:<5}</cyan> | <level>{message}</level>",
"colorize": True,
}
]
)

def main():
parser = argparse.ArgumentParser(description='SourceSage CLI')
parser.add_argument('--config', help='Path to the configuration file', default='sourcesage.yml')
parser.add_argument('--output', help='Output directory for generated files', default='./')
parser.add_argument('--repo', help='Path to the repository', default='./')
parser.add_argument('--owner', help='Owner of the repository', default='Sunwood-ai-labs') # デフォルト値を設定
parser.add_argument('--repository', help='Name of the repository', default='SourceSage') # デフォルト値を設定
parser.add_argument('--config', help='設定ファイルへのパス', default='sourcesage.yml')
parser.add_argument('--output', help='生成されたファイルの出力ディレクトリ', default='./')
parser.add_argument('--repo', help='リポジトリへのパス', default='./')
parser.add_argument('--owner', help='リポジトリのオーナー', default='Sunwood-ai-labs')
parser.add_argument('--repository', help='リポジトリの名前', default='SourceSage')

package_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
default_ignore_file = os.path.join(package_root, 'sourcesage', 'config', '.SourceSageignore')
Expand All @@ -31,18 +31,44 @@ def main():
current_dir_ignore_file = os.path.join(os.getcwd(), '.SourceSageignore')
if os.path.exists(current_dir_ignore_file):
ignore_file = current_dir_ignore_file
logger.info(f"Using ignore file from current directory: {ignore_file}")
logger.info(f"カレントディレクトリの無視ファイルを使用: {ignore_file}")
else:
ignore_file = default_ignore_file
logger.info(f"Using default ignore file: {ignore_file}")
logger.info(f"デフォルトの無視ファイルを使用: {ignore_file}")

parser.add_argument('--ignore-file', help='Path to the ignore file', default=ignore_file)
parser.add_argument('--language-map', help='Path to the language map file', default=default_language_map)
parser.add_argument('--ignore-file', help='無視ファイルへのパス', default=ignore_file)
parser.add_argument('--language-map', help='言語マップファイルへのパス', default=default_language_map)

# レポート生成用の引数を追加
parser.add_argument('--repo-path', type=str, default="", help='gitリポジトリへのパス')
parser.add_argument('--git-fetch-tags', type=str, nargs='+', default=["git", "fetch", "--tags"], help='gitタグを取得するコマンド')
parser.add_argument('--git-tag-sort', type=str, nargs='+', default=["git", "tag", "--sort=-creatordate"], help='gitタグをソートするコマンド')
parser.add_argument('--git-diff-command', type=str, nargs='+', default=["git", "diff"], help='git diffを生成するコマンド')
parser.add_argument('--report-title', type=str, default="Git Diff レポート", help='Markdownレポートのタイトル')
parser.add_argument('--report-sections', type=str, nargs='+', default=["version_comparison", "diff_details"], help='レポートに含めるセクション')
parser.add_argument('--output-path', type=str, default=".SourceSageAssets/RELEASE_REPORT/", help='Markdownレポートの保存先フォルダ')
parser.add_argument('--report-file-name', type=str, default="Report_{latest_tag}.md", help='Markdownレポートのファイル名。{latest_tag}は最新のタグに置換されます。')

args = parser.parse_args()

# SourceSageの実行
sourcesage = SourceSage(args.config, args.output, args.repo, args.owner, args.repository, args.ignore_file, args.language_map)
sourcesage.run()

# レポートの生成
logger.info("git diff レポートの生成を開始します...")
git_diff_generator = GitDiffGenerator(args.repo_path, args.git_fetch_tags, args.git_tag_sort, args.git_diff_command)
diff, latest_tag, previous_tag = git_diff_generator.get_git_diff()

report_file_name = args.report_file_name.format(latest_tag=latest_tag)
os.makedirs(args.output_path, exist_ok=True)
output_path = os.path.join(args.output_path, report_file_name)

markdown_report_generator = MarkdownReportGenerator(diff, latest_tag, previous_tag, args.report_title, args.report_sections, output_path)
markdown_report_generator.generate_markdown_report()

logger.success("プロセスが完了しました。")
tprint("!! successfully !!", font="rnd-medium")

if __name__ == '__main__':
main()
2 changes: 1 addition & 1 deletion sourcesage/config/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ def __init__(self, output_dir, owner, repository):
self.set_output_dir(output_dir)

def set_output_dir(self, output_dir):
self.SOURCE_SAGE_ASSETS_DIR = os.path.join(output_dir, "SourceSageAssets")
self.SOURCE_SAGE_ASSETS_DIR = os.path.join(output_dir, ".SourceSageAssets")
self.ISSUE_LOG_DIR = os.path.join(self.SOURCE_SAGE_ASSETS_DIR, "ISSUE_LOG")
self.ISSUES_RESOLVE_DIR = os.path.join(self.SOURCE_SAGE_ASSETS_DIR, "ISSUE_WISE/ISSUES_RESOLVE")
self.STAGE_INFO_DIR = os.path.join(self.SOURCE_SAGE_ASSETS_DIR, "COMMIT_CRAFT/STAGE_INFO")
Expand Down
Loading

0 comments on commit 6384bc8

Please sign in to comment.