From 764f4672ce9561665c3d415f7ffa3ebaf6d90554 Mon Sep 17 00:00:00 2001 From: Takeru O'oyama Date: Mon, 28 Oct 2024 07:36:40 +0900 Subject: [PATCH] =?UTF-8?q?##=20=F0=9F=9A=80=20Python=E3=83=97=E3=83=AD?= =?UTF-8?q?=E3=82=B8=E3=82=A7=E3=82=AF=E3=83=88=E3=81=AE=E3=82=BB=E3=83=83?= =?UTF-8?q?=E3=83=88=E3=82=A2=E3=83=83=E3=83=97=E3=81=A8=E3=82=B3=E3=83=BC?= =?UTF-8?q?=E3=83=89=E5=93=81=E8=B3=AA=E5=90=91=E4=B8=8A=E3=81=AE=E6=94=B9?= =?UTF-8?q?=E5=96=84=20(#39)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Refactor workflow and scripts, improve configuration (#37) * Refactor workflow and scripts, improve configuration * Refactor pyproject.toml and scripts, improve configuration * Add installation of "ruff" package using Homebrew * Refactor README.ja.md and improve setup instructions * Refactor README.ja.md and add "ruff" package to dependencies * Add "ripgrep" to cspell.json * Add ruff pre-commit hooks for Python linting and formatting * Add Python version setup to pre-commit workflow --- .github/workflows/pre-commit.yml | 11 ++++++++++ .pre-commit-config.yaml | 29 ++++++++++++++++++++++++++ README.md | 32 +++++++++++++---------------- cspell.json | 1 + docs/README.ja.md | 33 +++++++++++++----------------- pyproject.toml | 5 +++++ scripts/generate_pr_description.py | 24 ++++++++++++++++------ setup | 3 +++ 8 files changed, 95 insertions(+), 43 deletions(-) diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 7e8a6740..c7c0cbc7 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -18,6 +18,17 @@ jobs: with: ref: ${{ github.head_ref }} + - name: Read Python version from .python-version + id: read_python_version + run: | + PYTHON_VERSION=$(cat .python-version) + echo "PYTHON_VERSION=$PYTHON_VERSION" >> $GITHUB_ENV + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: ${{ env.PYTHON_VERSION }} + - name: pre-commit uses: pre-commit/action@v3.0.1 with: diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f06d565d..42516f0a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -63,3 +63,32 @@ repos: hooks: - id: renovate-config-validator files: renovate\.json + + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.1.6 + hooks: + # Run the linter. + - id: ruff + name: ruff + description: "Run 'ruff' for extremely fast Python linting" + entry: ruff check --force-exclude + language: python + language_version: 3.12.1 + types_or: [python, pyi] + # --fix: enable lint fixes + args: [--fix] + require_serial: true + additional_dependencies: [] + minimum_pre_commit_version: "2.9.2" + # Run the formatter. + - id: ruff-format + name: ruff-format + description: "Run 'ruff' for extremely fast Python formatting" + entry: ruff format --force-exclude + language: python + language_version: 3.12.1 + types_or: [python, pyi] + args: [] + require_serial: true + additional_dependencies: [] + minimum_pre_commit_version: "2.9.2" diff --git a/README.md b/README.md index b4185af2..dc695f42 100644 --- a/README.md +++ b/README.md @@ -21,25 +21,20 @@ curl -sL https://setup.tqer39.dev | bash ```mermaid sequenceDiagram - participant User - participant Cloudflare - participant CloudDomains - participant GitHub - participant GCP - participant setup.tqer39.dev - participant bash + participant User + participant Cloudflare + participant CloudDomains + participant GitHub + participant setup.tqer39.dev - User->>Cloudflare: https://setup.tqer39.dev - Cloudflare->>Cloudflare: Add rules - Cloudflare->>setup.tqer39.dev: Redirect - setup.tqer39.dev->>GitHub: setup.sh - GitHub->>setup.tqer39.dev: setup.sh - setup.tqer39.dev->>bash: setup.sh - bash->>CloudDomains: Acquire - CloudDomains->>Cloudflare: Define - Cloudflare->>Cloudflare: SSL/TLS - Cloudflare->>Cloudflare: NS record - Cloudflare->>User: Complete + User->>Cloudflare: https://setup.tqer39.dev + Cloudflare->>Cloudflare: Add rule + Cloudflare->>setup.tqer39.dev: Redirect + setup.tqer39.dev->>GitHub: setup.sh + GitHub->>setup.tqer39.dev: setup.sh + setup.tqer39.dev->>User: setup.sh + User->>User: Install software + User->>User: Configure dotfiles ``` ## Setup Contents @@ -58,6 +53,7 @@ sequenceDiagram - [jq](https://stedolan.github.io/jq/) - [Rancher Desktop](https://rancherdesktop.io/) - [ripgrep](https://github.com/BurntSushi/ripgrep) +- [ruff](https://github.com/astral-sh/ruff) - [Starship](https://starship.rs/) - [Visual Studio Code](https://code.visualstudio.com/) - [zsh](https://www.zsh.org/) diff --git a/cspell.json b/cspell.json index 0276b562..a673a941 100644 --- a/cspell.json +++ b/cspell.json @@ -63,6 +63,7 @@ "OPENAI", "pcra", "pyenv", + "ripgrep", "rxvt", "SAVEHIST", "schelp", diff --git a/docs/README.ja.md b/docs/README.ja.md index 4edfebca..b019fd43 100644 --- a/docs/README.ja.md +++ b/docs/README.ja.md @@ -21,28 +21,22 @@ curl -sL https://setup.tqer39.dev | bash ```mermaid sequenceDiagram - participant User - participant Cloudflare - participant CloudDomains - participant GitHub - participant GCP - participant setup.tqer39.dev - participant bash + participant User + participant Cloudflare + participant CloudDomains + participant GitHub + participant setup.tqer39.dev - User->>Cloudflare: https://setup.tqer39.dev - Cloudflare->>Cloudflare: ルール追加 - Cloudflare->>setup.tqer39.dev: リダイレクト - setup.tqer39.dev->>GitHub: setup.sh - GitHub->>setup.tqer39.dev: setup.sh - setup.tqer39.dev->>bash: setup.sh - bash->>CloudDomains: 取得 - CloudDomains->>Cloudflare: 定義 - Cloudflare->>Cloudflare: SSL/TLS - Cloudflare->>Cloudflare: NS レコード - Cloudflare->>User: 完了 + User->>Cloudflare: https://setup.tqer39.dev + Cloudflare->>Cloudflare: ルール追加 + Cloudflare->>setup.tqer39.dev: リダイレクト + setup.tqer39.dev->>GitHub: setup.sh + GitHub->>setup.tqer39.dev: setup.sh + setup.tqer39.dev->>User: setup.sh + User->>User: ソフトウェアのインストール + User->>User: dotfiles の設定 ``` - ## セットアップ内容 ### インストールされるソフトウェア @@ -59,6 +53,7 @@ sequenceDiagram - [jq](https://stedolan.github.io/jq/) - [Rancher Desktop](https://rancherdesktop.io/) - [ripgrep](https://github.com/BurntSushi/ripgrep) +- [ruff](https://github.com/astral-sh/ruff) - [Starship](https://starship.rs/) - [Visual Studio Code](https://code.visualstudio.com/) - [zsh](https://www.zsh.org/) diff --git a/pyproject.toml b/pyproject.toml index 10e33397..76835071 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,3 +7,8 @@ requires-python = ">=3.12" dependencies = [ "openai==1.52.2", ] + +[tool.ruff] +line-length = 88 +select = ["E", "F", "W", "C"] +ignore = ["E501"] # 長い行を無視する場合 diff --git a/scripts/generate_pr_description.py b/scripts/generate_pr_description.py index 37d41396..0098cd61 100644 --- a/scripts/generate_pr_description.py +++ b/scripts/generate_pr_description.py @@ -9,9 +9,10 @@ client = OpenAI( # This is the default and can be omitted - api_key = os.getenv("OPENAI_API_KEY") + api_key=os.getenv("OPENAI_API_KEY") ) + # プロンプトの準備 def create_prompt(commit_logs): return f""" @@ -61,6 +62,7 @@ def create_prompt(commit_logs): - 詳細な説明B """ + # OpenAI API でのリクエスト def generate_pr_description(commit_logs): prompt = create_prompt(commit_logs) @@ -77,26 +79,36 @@ def generate_pr_description(commit_logs): return response.choices[0].message.content.strip() + # Git コミットログとファイルの差分の取得 def get_commit_logs_and_diffs(): # リモートの変更を取得 - subprocess.run(['git', 'fetch', 'origin'], check=True) + subprocess.run(["git", "fetch", "origin"], check=True) - result = subprocess.run(['git', 'log', '--pretty=format:%H %s', 'origin/main..HEAD', '-n', '70'], capture_output=True, text=True) # コミットログの数を制限 - commit_logs = result.stdout.strip().split('\n') + result = subprocess.run( + ["git", "log", "--pretty=format:%H %s", "origin/main..HEAD", "-n", "70"], + capture_output=True, + text=True, + ) # コミットログの数を制限 + commit_logs = result.stdout.strip().split("\n") - if not commit_logs or commit_logs == ['']: + if not commit_logs or commit_logs == [""]: return "" logs_and_diffs = [] for commit in commit_logs: commit_hash = commit.split()[0] if commit_hash: - diff_result = subprocess.run(['git', 'diff', commit_hash + '^!', '--'], capture_output=True, text=True) + diff_result = subprocess.run( + ["git", "diff", commit_hash + "^!", "--"], + capture_output=True, + text=True, + ) logs_and_diffs.append(f"Commit: {commit}\nDiff:\n{diff_result.stdout}") return "\n\n".join(logs_and_diffs) + # メインロジック if __name__ == "__main__": commit_logs_and_diffs = get_commit_logs_and_diffs() diff --git a/setup b/setup index 0c5058dd..1ce329b7 100755 --- a/setup +++ b/setup @@ -258,6 +258,9 @@ install_if_missing "eza" "brew install eza" # fd install_if_missing "fd" "brew install fd" +# ruff +install_if_missing "ruff" "brew install ruff" + # ripgrep if ! command -v rp &> /dev/null; then echo "ripgrep がインストールされていません。インストールを試みます。"