From c849a34557274112d7a6d2776a7c167199a13f6f Mon Sep 17 00:00:00 2001 From: Alexander Ilyin Date: Thu, 12 Dec 2024 10:20:03 +0000 Subject: [PATCH 1/3] fix(devcontainer): improve pre-commit setup and git diff handling - Added postCreateCommand to devcontainer.json for pre-commit installation. - Modified keep-a-changelog.sh to use git diff --cached --ignore-all-space. - Modified prepare-commit-msg.sh to handle whitespace discrepancies with git diff --cached --ignore-all-space. - Use temporary files for user and system prompts. - Fixed git diff command to ignore whitespace. --- .devcontainer/devcontainer.json | 123 ++++++++++++++++---------------- CHANGELOG.md | 15 +++- keep-a-changelog.sh | 14 +++- prepare-commit-msg.sh | 6 +- 4 files changed, 92 insertions(+), 66 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index fc5bd28..e6a2b2d 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,66 +1,69 @@ // For format details, see https://aka.ms/devcontainer.json. For config options, see the // README at: https://github.com/devcontainers/templates/tree/main/src/python { - "name": "Python 3", - // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile - "image": "mcr.microsoft.com/devcontainers/python:1-3.12-bullseye", - "containerEnv": { - "PRE_COMMIT_HOME": ".pre-commit", + "name": "Python 3", + // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile + "image": "mcr.microsoft.com/devcontainers/python:1-3.12-bullseye", + "containerEnv": { + "PRE_COMMIT_HOME": ".pre-commit", "OPENROUTER_API_KEY": "${localEnv:OPENROUTER_API_KEY}", "OPENROUTER_MODEL": "${localEnv:OPENROUTER_MODEL}" - }, - "features": { - "ghcr.io/devcontainers/features/python:1": { - "installTools": true, - "toolsToInstall": "pre-commit", - "version": "3.12" - }, - "ghcr.io/deepspacecartel/devcontainers-features/starship:latest": { - "version": "latest" - }, - "ghcr.io/devcontainers/features/github-cli:1": { - "installDirectlyFromGitHubRelease": true, - "version": "latest" - } - }, - "customizations": { - "vscode": { - "settings": { - "dotfiles.repository":"deepspacecartel/dotfiles", - "remote.extensionKind": { - "ms-azuretools.vscode-docker": "ui" - } - }, - // - "extensions": [ - // Code Formatting - "esbenp.prettier-vscode", - "streetsidesoftware.code-spell-checker", - // GitHub Integration - "GitHub.copilot", - "GitHub.vscode-github-actions", - "GitHub.vscode-pull-request-github", - // File Headers - "psioniq.psi-header", - // YAML Support - "redhat.vscode-yaml", - // Markdown Support - "bierner.github-markdown-preview", - "bierner.markdown-checkbox", - "bierner.markdown-footnotes", - "bierner.markdown-mermaid", - "bierner.markdown-preview-github-styles", - "bierner.markdown-yaml-preamble", - "chintans98.markdown-jira", - "yzhang.markdown-all-in-one", - // Task Management - "Gruntfuggly.todo-tree", - "wayou.vscode-todo-highlight", - // Development Tools - "Codeium.codeium", - "ryanluker.vscode-coverage-gutters" - ] - // - } - } + }, + "postCreateCommand": { + "pre-commit": "cd /workspaces/pre-commit && /usr/local/py-utils/bin/pre-commit install" + }, + "features": { + "ghcr.io/devcontainers/features/python:1": { + "installTools": true, + "toolsToInstall": "pre-commit", + "version": "3.12" + }, + "ghcr.io/deepspacecartel/devcontainers-features/starship:latest": { + "version": "latest" + }, + "ghcr.io/devcontainers/features/github-cli:1": { + "installDirectlyFromGitHubRelease": true, + "version": "latest" + } + }, + "customizations": { + "vscode": { + "settings": { + "dotfiles.repository": "deepspacecartel/dotfiles", + "remote.extensionKind": { + "ms-azuretools.vscode-docker": "ui" + } + }, + // + "extensions": [ + // Code Formatting + "esbenp.prettier-vscode", + "streetsidesoftware.code-spell-checker", + // GitHub Integration + "GitHub.copilot", + "GitHub.vscode-github-actions", + "GitHub.vscode-pull-request-github", + // File Headers + "psioniq.psi-header", + // YAML Support + "redhat.vscode-yaml", + // Markdown Support + "bierner.github-markdown-preview", + "bierner.markdown-checkbox", + "bierner.markdown-footnotes", + "bierner.markdown-mermaid", + "bierner.markdown-preview-github-styles", + "bierner.markdown-yaml-preamble", + "chintans98.markdown-jira", + "yzhang.markdown-all-in-one", + // Task Management + "Gruntfuggly.todo-tree", + "wayou.vscode-todo-highlight", + // Development Tools + "Codeium.codeium", + "ryanluker.vscode-coverage-gutters" + ] + // + } + } } diff --git a/CHANGELOG.md b/CHANGELOG.md index 63f69e8..50d6849 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -83,10 +83,23 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Fixed - jq: Argument list too long #3 - - Cleaned up temporary files after API call. +- Cleaned up temporary files after API call. ## [1.7.1] - 2024-12-02 ### Fixed - prepare-commit-msg.sh: line 237: /usr/bin/curl: Argument list too long + +## [1.8.0] - 2024-12-12 + +### Fixed + +- Fixed `git diff` command to ignore whitespace. + +### Changed + +- Added `postCreateCommand` to `devcontainer.json` for `pre-commit` installation. +- Modified `keep-a-changelog.sh` to use `git diff --cached --ignore-all-space` to reduce API call size. +- Modified `prepare-commit-msg.sh` to handle whitespace discrepancies with `git diff --cached --ignore-all-space`. +- Use temporary files to store user and system prompts. diff --git a/keep-a-changelog.sh b/keep-a-changelog.sh index 8cad47d..63d80c2 100755 --- a/keep-a-changelog.sh +++ b/keep-a-changelog.sh @@ -160,7 +160,7 @@ if [ -n "$(git diff --cached --name-only -- "${CHANGELOG_FILENAME}")" ]; then fi # Get git changes -CHANGES=$(git diff --cached) +CHANGES=$(git diff --cached --ignore-all-space) CURRENT_CHANGELOG="" if [ -f "${CHANGELOG_FILENAME}" ]; then CURRENT_CHANGELOG=$(cat "${CHANGELOG_FILENAME}") @@ -194,11 +194,19 @@ if [ -z "$OPENROUTER_API_KEY" ]; then exit 1 fi +PROMPT_FILE=$(mktemp) +echo "$USER_PROMPT" > "$PROMPT_FILE" +debug_log "Prompt saved to $PROMPT_FILE" + +SYSTEM_PROMPT_FILE=$(mktemp) +echo "$SYSTEM_PROMPT" > "$SYSTEM_PROMPT_FILE" +debug_log "System prompt saved to $SYSTEM_PROMPT_FILE" + # Prepare the request body REQUEST_BODY=$(jq -n \ --arg model "$MODEL" \ - --arg prompt "$USER_PROMPT" \ - --arg system "$SYSTEM_PROMPT" \ + --rawfile prompt "$PROMPT_FILE" \ + --rawfile system "$SYSTEM_PROMPT_FILE" \ '{ stream: false, model: $model, diff --git a/prepare-commit-msg.sh b/prepare-commit-msg.sh index 3a7d1e5..582b6be 100755 --- a/prepare-commit-msg.sh +++ b/prepare-commit-msg.sh @@ -23,6 +23,8 @@ IMPORTANT - Do not include any explanation in your response - Only return a commit message content - Do not wrap it in backticks + - One change per line. + - All lines should be a concise summary (max 80 characters) EOF ) @@ -175,9 +177,9 @@ fi # Get git changes if [ "$OPEN_SOURCE" = true ]; then - CHANGES=$(git diff --cached) + CHANGES=$(git diff --cached --ignore-all-space) else - CHANGES=$(git diff --cached --name-status) + CHANGES=$(git diff --cached --ignore-all-space --name-status) fi From c3efc77b28dd05a6fb0ce09df1b80dcb157226db Mon Sep 17 00:00:00 2001 From: Alexander Ilyin Date: Thu, 12 Dec 2024 10:50:00 +0000 Subject: [PATCH 2/3] chore(scripts): Improve script cleanup and pre-commit install - Updated devcontainer.json to use simpler pre-commit install command. - Added cleanup for temporary files in keep-a-changelog.sh and prepare-commit-msg.sh. - Modified keep-a-changelog.sh and prepare-commit-msg.sh to use git diff with --ignore-all-space. --- .devcontainer/devcontainer.json | 2 +- CHANGELOG.md | 1 + keep-a-changelog.sh | 3 +++ prepare-commit-msg.sh | 3 +++ 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index e6a2b2d..efc3329 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -10,7 +10,7 @@ "OPENROUTER_MODEL": "${localEnv:OPENROUTER_MODEL}" }, "postCreateCommand": { - "pre-commit": "cd /workspaces/pre-commit && /usr/local/py-utils/bin/pre-commit install" + "pre-commit": "pre-commit install" }, "features": { "ghcr.io/devcontainers/features/python:1": { diff --git a/CHANGELOG.md b/CHANGELOG.md index 50d6849..63a7ecc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -103,3 +103,4 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Modified `keep-a-changelog.sh` to use `git diff --cached --ignore-all-space` to reduce API call size. - Modified `prepare-commit-msg.sh` to handle whitespace discrepancies with `git diff --cached --ignore-all-space`. - Use temporary files to store user and system prompts. +- Added cleanup for temp files on script exit in keep-a-changelog.sh and prepare-commit-msg.sh. diff --git a/keep-a-changelog.sh b/keep-a-changelog.sh index 63d80c2..c651930 100755 --- a/keep-a-changelog.sh +++ b/keep-a-changelog.sh @@ -202,6 +202,9 @@ SYSTEM_PROMPT_FILE=$(mktemp) echo "$SYSTEM_PROMPT" > "$SYSTEM_PROMPT_FILE" debug_log "System prompt saved to $SYSTEM_PROMPT_FILE" +# Ensure cleanup on script exit +trap 'rm -f "$PROMPT_FILE" "$SYSTEM_PROMPT_FILE"' EXIT + # Prepare the request body REQUEST_BODY=$(jq -n \ --arg model "$MODEL" \ diff --git a/prepare-commit-msg.sh b/prepare-commit-msg.sh index 582b6be..a3a762a 100755 --- a/prepare-commit-msg.sh +++ b/prepare-commit-msg.sh @@ -215,6 +215,9 @@ SYSTEM_PROMPT_FILE=$(mktemp) echo "$SYSTEM_PROMPT" > "$SYSTEM_PROMPT_FILE" debug_log "System prompt saved to $SYSTEM_PROMPT_FILE" +# Ensure cleanup on script exit +trap 'rm -f "$PROMPT_FILE" "$SYSTEM_PROMPT_FILE"' EXIT + # Prepare the request body REQUEST_BODY=$(jq -n \ --arg model "$MODEL" \ From 860d50b4da5fe6589fa302d678c539b68e37878c Mon Sep 17 00:00:00 2001 From: Alexander Ilyin Date: Thu, 12 Dec 2024 11:00:58 +0000 Subject: [PATCH 3/3] feat(devcontainer): Improve devcontainer configuration and pre-commit hooks - Updated devcontainer.json to remove unused env variables. - Renamed pre-commit hooks for clarity. - Improved temporary file cleanup in hooks. - Refactored pre-commit config files for consistency with PartCAD naming. - Updated .vscode/settings.json for consistency with PartCAD naming and consistency with coding guidelines. - Updated CHANGELOG.md with hook renaming and cleanup improvements. --- .devcontainer/devcontainer.json | 3 +-- .pre-commit-config.yaml | 4 ++-- .pre-commit-hooks.yaml | 4 ++-- .vscode/settings.json | 9 ++------- CHANGELOG.md | 3 +++ keep-a-changelog.sh | 8 +++++++- prepare-commit-msg.sh | 7 ++++++- 7 files changed, 23 insertions(+), 15 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index efc3329..3507ea6 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -6,8 +6,7 @@ "image": "mcr.microsoft.com/devcontainers/python:1-3.12-bullseye", "containerEnv": { "PRE_COMMIT_HOME": ".pre-commit", - "OPENROUTER_API_KEY": "${localEnv:OPENROUTER_API_KEY}", - "OPENROUTER_MODEL": "${localEnv:OPENROUTER_MODEL}" + "OPENROUTER_API_KEY": "${localEnv:OPENROUTER_API_KEY}" }, "postCreateCommand": { "pre-commit": "pre-commit install" diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 81aed81..0a27a6e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -5,13 +5,13 @@ repos: - repo: local hooks: - id: prepare-commit-msg - name: Git Commit AI + name: "PartCAD: Prepare Commit Message" entry: prepare-commit-msg.sh args: ["--open-source", "--commit-msg-filename"] language: script stages: [prepare-commit-msg] - id: keep-a-changelog - name: Changelog AI + name: "PartCAD: Update CHANGELOG.md" description: A hook to assist with updating CHANGELOG.md using AI. entry: keep-a-changelog.sh language: script diff --git a/.pre-commit-hooks.yaml b/.pre-commit-hooks.yaml index a78ad23..8b0de47 100644 --- a/.pre-commit-hooks.yaml +++ b/.pre-commit-hooks.yaml @@ -1,6 +1,6 @@ # https://pre-commit.com/#creating-new-hooks - id: prepare-commit-msg - name: Git Commit AI + name: "PartCAD: Prepare Commit Message" description: A hook to assist with git commit messages using AI. entry: prepare-commit-msg.sh language: script @@ -8,7 +8,7 @@ stages: [prepare-commit-msg] pass_filenames: true - id: keep-a-changelog - name: Changelog AI + name: "PartCAD: Update CHANGELOG.md" description: A hook to assist with updating CHANGELOG.md using AI. entry: keep-a-changelog.sh language: script diff --git a/.vscode/settings.json b/.vscode/settings.json index b1e3462..ec40400 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -23,9 +23,7 @@ "editor.formatOnSave": true, "editor.formatOnType": true, "editor.insertSpaces": true, - "editor.rulers": [ - 120 - ], + "editor.rulers": [120], "editor.tabSize": 2, "editor.useTabStops": false, "files.encoding": "utf8", @@ -46,8 +44,5 @@ "terminal.integrated.fontFamily": "'Hack Nerd Font Mono', Consolas, 'Courier New', monospace", "terminal.integrated.scrollback": 10000000, "workbench.colorTheme": "GitHub Dark", - "cSpell.words": [ - "behaviour", - "EDITMSG" - ], + "cSpell.words": ["behaviour", "EDITMSG", "OPENROUTER"] } diff --git a/CHANGELOG.md b/CHANGELOG.md index 63a7ecc..a7677b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -104,3 +104,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Modified `prepare-commit-msg.sh` to handle whitespace discrepancies with `git diff --cached --ignore-all-space`. - Use temporary files to store user and system prompts. - Added cleanup for temp files on script exit in keep-a-changelog.sh and prepare-commit-msg.sh. +- Renamed "Changelog AI" hooks to "PartCAD: Update CHANGELOG.md" +- Renamed "Git Commit AI" hooks to "PartCAD: Prepare Commit Message" +- Improved cleanup mechanism for temporary files diff --git a/keep-a-changelog.sh b/keep-a-changelog.sh index c651930..03d0ba4 100755 --- a/keep-a-changelog.sh +++ b/keep-a-changelog.sh @@ -203,7 +203,13 @@ echo "$SYSTEM_PROMPT" > "$SYSTEM_PROMPT_FILE" debug_log "System prompt saved to $SYSTEM_PROMPT_FILE" # Ensure cleanup on script exit -trap 'rm -f "$PROMPT_FILE" "$SYSTEM_PROMPT_FILE"' EXIT +cleanup() { + local exit_code=$? + rm -f "$PROMPT_FILE" "$SYSTEM_PROMPT_FILE" 2>/dev/null + exit $exit_code +} +trap cleanup EXIT INT TERM + # Prepare the request body REQUEST_BODY=$(jq -n \ diff --git a/prepare-commit-msg.sh b/prepare-commit-msg.sh index a3a762a..ec56756 100755 --- a/prepare-commit-msg.sh +++ b/prepare-commit-msg.sh @@ -216,7 +216,12 @@ echo "$SYSTEM_PROMPT" > "$SYSTEM_PROMPT_FILE" debug_log "System prompt saved to $SYSTEM_PROMPT_FILE" # Ensure cleanup on script exit -trap 'rm -f "$PROMPT_FILE" "$SYSTEM_PROMPT_FILE"' EXIT +cleanup() { + local exit_code=$? + rm -f "$PROMPT_FILE" "$SYSTEM_PROMPT_FILE" "$REQUEST_BODY_FILE" 2>/dev/null + exit $exit_code +} +trap cleanup EXIT INT TERM # Prepare the request body REQUEST_BODY=$(jq -n \