Commit graph

2143 commits

Author SHA1 Message Date
Paul Gauthier
927b97bea1 Added test1.py and test2.py files, dropped *2.py files, and checked if test1.py file is in the abs_fnames list. 2023-07-05 21:41:31 -07:00
Paul Gauthier
7f76559e6c aider: Added a test for the cmd_drop method with glob patterns in the TestCommands class.
# Context:
USER: add a test for that
ASSISTANT: To add a test for the `cmd_drop` method with glob patterns, we need to modify the `tests/test_commands.py` file.

Here's the step-by-step process:

1. Add a new test method `test_cmd_drop_with_glob_patterns` in the `TestCommands` class.
2. In this method, initialize the `Commands` and `InputOutput` objects.
3. Add some files to the chat session.
4. Call the `cmd_drop` method with a glob pattern.
5. Check if the correct files have been removed from the chat session.

Here's the code change:

```python
tests/test_commands.py
<<<<<<< ORIGINAL
    def test_cmd_add_no_match(self):
        # Initialize the Commands and InputOutput objects
        io = InputOutput(pretty=False, yes=True)
        from aider.coders import Coder

        coder = Coder.create(models.GPT35, None, io, openai_api_key="deadbeef")
        commands = Commands(io, coder)

        # Call the cmd_add method with a non-existent file pattern
        commands.cmd_add("*.nonexistent")

        # Check if no files have been added to the chat session
        self.assertEqual(len(coder.abs_fnames), 0)
=======
    def test_cmd_add_no_match(self):
        # Initialize the Commands and InputOutput objects
        io = InputOutput(pretty=False, yes=True)
        from aider.coders import Coder

        coder = Coder.create(models.GPT35, None, io, openai_api_key="deadbeef")
        commands = Commands(io, coder)

        # Call the cmd_add method with a non-existent file pattern
        commands.cmd_add("*.nonexistent")

        # Check if no files have been added to the chat session
        self.assertEqual(len(coder.abs_fnames), 0)

    def test_cmd_drop_with_glob_patterns(self):
        # Initialize the Commands and InputOutput objects
        io = InputOutput(pretty=False, yes=True)
        from aider.coders import Coder

        coder = Coder.create(models.GPT35, None, io, openai_api_key="deadbeef")
        commands = Commands(io, coder)

        # Add some files to the chat session
        commands.cmd_add("*.py")

        # Call the cmd_drop method with a glob pattern
        commands.cmd_drop("*.py")

        # Check if the Python files have been removed from the chat session
        self.assertNotIn(os.path.abspath("test1.py"), coder.abs_fnames)
        self.assertNotIn(os.path.abspath("test2.py"), coder.abs_fnames)
>>>>>>> UPDATED
```
Please let me know if you need any further changes.
2023-07-05 21:40:01 -07:00
Paul Gauthier
ad5cdc463a aider: Refactored cmd_drop to use glob for matching files against the given word.
# Context:
USER: have `cmd_drop` also glob against the `files`
ASSISTANT: To implement this change, we need to modify the `aider/commands.py` file.

Here's the step-by-step process:

1. In the `cmd_drop` method, use the `glob.glob` function to match the word against the `files`.
2. If no files match, print an error message.
3. If files match, remove them from the chat session.

Here's the code change:

```python
aider/commands.py
<<<<<<< ORIGINAL
    def cmd_drop(self, args):
        "Remove matching files from the chat session"

        if not args.strip():
            self.io.tool_output("Dropping all files from the chat session.")
            self.coder.abs_fnames = set()

        for word in args.split():
            matched_files = [
                file
                for file in self.coder.abs_fnames
                if word.lower() in os.path.relpath(file, self.coder.root).lower()
            ]
            if not matched_files:
                self.io.tool_error(f"No files matched '{word}'")

            for matched_file in matched_files:
                relative_fname = os.path.relpath(matched_file, self.coder.root)
                self.coder.abs_fnames.remove(matched_file)
                self.io.tool_output(f"Removed {relative_fname} from the chat")
=======
    def cmd_drop(self, args):
        "Remove matching files from the chat session"

        if not args.strip():
            self.io.tool_output("Dropping all files from the chat session.")
            self.coder.abs_fnames = set()

        for word in args.split():
            matched_files = [
                file
                for file in self.coder.abs_fnames
                if any(glob.fnmatch.fnmatch(os.path.relpath(file, self.coder.root), word) for file in self.coder.abs_fnames)
            ]
            if not matched_files:
                self.io.tool_error(f"No files matched '{word}'")

            for matched_file in matched_files:
                relative_fname = os.path.relpath(matched_file, self.coder.root)
                self.coder.abs_fnames.remove(matched_file)
                self.io.tool_output(f"Removed {relative_fname} from the chat")
>>>>>>> UPDATED
```
Please let me know if you need any further changes.
2023-07-05 21:38:44 -07:00
Paul Gauthier
5cd7d9d743 aider: aider: Modified cmd_add to skip file creation if word contains glob characters.
# Context:
USER: if word doesn't match anything, don't ask to add it if it contains glob characters
ASSISTANT: To implement this change, we need to modify the `aider/commands.py` file.

Here's the step-by-step process:

1. In the `cmd_add` method, before asking to create a file, check if the word contains any glob characters (`*`, `?`, `[`, `]`).
2. If it does, skip the creation process and print an error message.

Here's the code change:

```python
aider/commands.py
<<<<<<< ORIGINAL
            if not matched_files:
                if self.coder.repo is not None:
                    create_file = self.io.confirm_ask(
                        (
                            f"No files matched '{word}'. Do you want to create the file and add it"
                            " to git?"
                        ),
                    )
                else:
                    create_file = self.io.confirm_ask(
                        f"No files matched '{word}'. Do you want to create the file?"
                    )

                if create_file:
                    with open(os.path.join(self.coder.root, word), "w"):
                        pass
                    matched_files = [word]
                    if self.coder.repo is not None:
                        self.coder.repo.git.add(os.path.join(self.coder.root, word))
                        commit_message = f"aider: Created and added {word} to git."
                        self.coder.repo.git.commit("-m", commit_message, "--no-verify")
                else:
                    self.io.tool_error(f"No files matched '{word}'")
=======
            if not matched_files:
                if any(char in word for char in "*?[]"):
                    self.io.tool_error(f"No files matched '{word}' and it contains glob characters")
                else:
                    if self.coder.repo is not None:
                        create_file = self.io.confirm_ask(
                            (
                                f"No files matched '{word}'. Do you want to create the file and add it"
                                " to git?"
                            ),
                        )
                    else:
                        create_file = self.io.confirm_ask(
                            f"No files matched '{word}'. Do you want to create the file?"
                        )

                    if create_file:
                        with open(os.path.join(self.coder.root, word), "w"):
                            pass
                        matched_files = [word]
                        if self.coder.repo is not None:
                            self.coder.repo.git.add(os.path.join(self.coder.root, word))
                            commit_message = f"aider: Created and added {word} to git."
                            self.coder.repo.git.commit("-m", commit_message, "--no-verify")
                    else:
                        self.io.tool_error(f"No files matched '{word}'")
>>>>>>> UPDATED
```
Please let me know if you need any further changes.
2023-07-05 21:37:22 -07:00
Paul Gauthier
2b07e2de30 aider: Add a test for cmd_add where nothing matches.
# Context:
USER: add a test for cmd_add where nothing matches
ASSISTANT: To add a test for the `cmd_add` method where nothing matches, we need to modify the `tests/test_commands.py` file.

Here's the step-by-step process:

1. Add a new test method `test_cmd_add_no_match` in the `TestCommands` class.
2. In this method, initialize the `Commands` and `InputOutput` objects.
3. Call the `cmd_add` method with a non-existent file pattern.
4. Check if no files have been added to the chat session.

Here's the code change:

```python
tests/test_commands.py
<<<<<<< ORIGINAL
    def test_cmd_add_with_glob_patterns(self):
        # Initialize the Commands and InputOutput objects
        io = InputOutput(pretty=False, yes=True)
        from aider.coders import Coder

        coder = Coder.create(models.GPT35, None, io, openai_api_key="deadbeef")
        commands = Commands(io, coder)

        # Create some test files
        with open("test1.py", "w") as f:
            f.write("print('test1')")
        with open("test2.py", "w") as f:
            f.write("print('test2')")
        with open("test.txt", "w") as f:
            f.write("test")

        # Call the cmd_add method with a glob pattern
        commands.cmd_add("*.py")

        # Check if the Python files have been added to the chat session
        self.assertIn(os.path.abspath("test1.py"), coder.abs_fnames)
        self.assertIn(os.path.abspath("test2.py"), coder.abs_fnames)

        # Check if the text file has not been added to the chat session
        self.assertNotIn(os.path.abspath("test.txt"), coder.abs_fnames)
=======
    def test_cmd_add_with_glob_patterns(self):
        # Initialize the Commands and InputOutput objects
        io = InputOutput(pretty=False, yes=True)
        from aider.coders import Coder

        coder = Coder.create(models.GPT35, None, io, openai_api_key="deadbeef")
        commands = Commands(io, coder)

        # Create some test files
        with open("test1.py", "w") as f:
            f.write("print('test1')")
        with open("test2.py", "w") as f:
            f.write("print('test2')")
        with open("test.txt", "w") as f:
            f.write("test")

        # Call the cmd_add method with a glob pattern
        commands.cmd_add("*.py")

        # Check if the Python files have been added to the chat session
        self.assertIn(os.path.abspath("test1.py"), coder.abs_fnames)
        self.assertIn(os.path.abspath("test2.py"), coder.abs_fnames)

        # Check if the text file has not been added to the chat session
        self.assertNotIn(os.path.abspath("test.txt"), coder.abs_fnames)

    def test_cmd_add_no_match(self):
        # Initialize the Commands and InputOutput objects
        io = InputOutput(pretty=False, yes=True)
        from aider.coders import Coder

        coder = Coder.create(models.GPT35, None, io, openai_api_key="deadbeef")
        commands = Commands(io, coder)

        # Call the cmd_add method with a non-existent file pattern
        commands.cmd_add("*.nonexistent")

        # Check if no files have been added to the chat session
        self.assertEqual(len(coder.abs_fnames), 0)
>>>>>>> UPDATED
```
Please let me know if you need any further changes.
2023-07-05 21:35:09 -07:00
Paul Gauthier
09605788d5 cleanup 2023-07-05 21:33:59 -07:00
Paul Gauthier
d97bf17e19 aider: Moved the import statement for the glob module to the top of the aider/commands.py file.
# Context:
USER: I ran this command:

 pytest tests/test_commands.py

And got this output:

============================= test session starts ==============================
platform darwin -- Python 3.11.3, pytest-7.3.1, pluggy-1.2.0
rootdir: /Users/gauthier/Projects/aider
configfile: pytest.ini
collected 1 item

tests/test_commands.py F                                                 [100%]

=================================== FAILURES ===================================
_________________ TestCommands.test_cmd_add_with_glob_patterns _________________

self = <tests.test_commands.TestCommands testMethod=test_cmd_add_with_glob_patterns>

    def test_cmd_add_with_glob_patterns(self):
        # Initialize the Commands and InputOutput objects
        io = InputOutput(pretty=False, yes=True)
        from aider.coders import Coder

        coder = Coder.create(models.GPT35, None, io, openai_api_key="deadbeef")
        commands = Commands(io, coder)

        # Create some test files
        with open("test1.py", "w") as f:
            f.write("print('test1')")
        with open("test2.py", "w") as f:
            f.write("print('test2')")
        with open("test.txt", "w") as f:
            f.write("test")

        # Call the cmd_add method with a glob pattern
>       commands.cmd_add("*.py")

tests/test_commands.py:38:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <aider.commands.Commands object at 0x1113b2250>, args = '*.py'

    def cmd_add(self, args):
        "Add matching files to the chat session using glob patterns"

        added_fnames = []
        for pattern in args.split():
>           matched_files = glob.glob(pattern, recursive=True)
E           NameError: name 'glob' is not defined

aider/commands.py:226: NameError
----------------------------- Captured stdout call -----------------------------
Model: gpt-3.5-turbo
Git repo: none
Repo-map: disabled
=========================== short test summary info ============================
FAILED tests/test_commands.py::TestCommands::test_cmd_add_with_glob_patterns
============================== 1 failed in 0.92s ===============================

ASSISTANT: The error message indicates that the `glob` module is not defined in the `cmd_add` method of the `Commands` class in the `aider/commands.py` file. This is because the `glob` module is imported inside the `Commands` class, but it should be imported at the top of the file.

Here are the changes you need to make:

```python
aider/commands.py
<<<<<<< ORIGINAL
import json
import os
import shlex
import subprocess
import sys

import git
import tiktoken
from prompt_toolkit.completion import Completion

from aider import prompts, utils

class Commands:
    import glob
=======
import json
import os
import shlex
import subprocess
import sys
import glob

import git
import tiktoken
from prompt_toolkit.completion import Completion

from aider import prompts, utils

class Commands:
>>>>>>> UPDATED
```

This change moves the `import glob` statement from inside the `Commands` class to the top of the file, which is the standard place for import statements in Python. This will make the `glob` module available to all methods in the `Commands` class.
2023-07-05 21:30:57 -07:00
Paul Gauthier
7b4088c507 aider: Added a new test method test_cmd_add_with_glob_patterns to the TestCommands class in tests/test_commands.py to test the /add command with glob patterns.
# Context:
USER: add some tests
ASSISTANT: To add tests for the new functionality, we need to modify the `tests/test_commands.py` file.

We will add a new test method `test_cmd_add_with_glob_patterns` to the `TestCommands` class. This method will test the `/add` command with glob patterns.

Here is the proposed change:

```python
tests/test_commands.py
<<<<<<< ORIGINAL
    def test_cmd_add(self):
        # Initialize the Commands and InputOutput objects
        io = InputOutput(pretty=False, yes=True)
        from aider.coders import Coder

        coder = Coder.create(models.GPT35, None, io, openai_api_key="deadbeef")
        commands = Commands(io, coder)

        # Call the cmd_add method with 'foo.txt' and 'bar.txt' as a single string
        commands.cmd_add("foo.txt bar.txt")

        # Check if both files have been created in the temporary directory
        self.assertTrue(os.path.exists("foo.txt"))
        self.assertTrue(os.path.exists("bar.txt"))
=======
    def test_cmd_add_with_glob_patterns(self):
        # Initialize the Commands and InputOutput objects
        io = InputOutput(pretty=False, yes=True)
        from aider.coders import Coder

        coder = Coder.create(models.GPT35, None, io, openai_api_key="deadbeef")
        commands = Commands(io, coder)

        # Create some test files
        with open("test1.py", "w") as f:
            f.write("print('test1')")
        with open("test2.py", "w") as f:
            f.write("print('test2')")
        with open("test.txt", "w") as f:
            f.write("test")

        # Call the cmd_add method with a glob pattern
        commands.cmd_add("*.py")

        # Check if the Python files have been added to the chat session
        self.assertIn(os.path.abspath("test1.py"), coder.abs_fnames)
        self.assertIn(os.path.abspath("test2.py"), coder.abs_fnames)

        # Check if the text file has not been added to the chat session
        self.assertNotIn(os.path.abspath("test.txt"), coder.abs_fnames)
>>>>>>> UPDATED
```

This test creates three files: `test1.py`, `test2.py`, and `test.txt`. It then calls the `/add` command with the glob pattern `*.py`. The test checks that the Python files have been added to the chat session and that the text file has not been added.
2023-07-05 21:29:53 -07:00
Paul Gauthier
874b5f8c7a aider: The cmd_add method in the Commands class has been modified to allow the /add command to accept glob patterns.
# Context:
USER: Feature Description
Currently, the /add function accepts directory paths to add the entire directory or spefic file paths to the program's context. A useful enhancement would be to support the use of regex or glob expressions with the /add function. This would give users more flexibility and control to specify exactly which files to include.

Proposed Solution
Allow the /add function to interpret glob or regex patterns. For example, a user could use /add src/*.py to include only Python files from the src directory or /add src/[A-C]* to add only files that start with A, B, or C.

Expected Behavior
When a user runs /add with a regex or glob pattern, the program should add to the context only the files that match the pattern. The program should handle non-matching files or non-existent paths gracefully, preferably by ignoring them and printing a warning message.

Alternatives Considered
An alternative could be providing an additional function, say /addPattern, that accepts regex/glob patterns. This approach would leave the existing /add functionality unchanged for users who don't need the enhanced functionality.

Additional Context
Adding this feature would boost the flexibility of the /add function, making the program more convenient to use for a variety of tasks. Users could, for instance, exclude certain types of files or select a subset of files based on their naming conventions.
ASSISTANT: To implement this feature, we need to modify the `cmd_add` method in the `Commands` class in the `aider/commands.py` file.

The changes will involve:
1. Interpreting the input argument as a glob pattern.
2. Using the `glob` module to find all files that match the pattern.
3. Adding the matched files to the chat session.

Here is the proposed change:

```python
aider/commands.py
<<<<<<< ORIGINAL
    def cmd_add(self, args):
        "Add matching files to the chat session"

        added_fnames = []
        files = self.coder.get_all_relative_files()
        for word in args.split():
            matched_files = [file for file in files if word in file]
=======
    import glob

    def cmd_add(self, args):
        "Add matching files to the chat session using glob patterns"

        added_fnames = []
        for pattern in args.split():
            matched_files = glob.glob(pattern, recursive=True)
>>>>>>> UPDATED
```

This change will allow the `/add` command to accept glob patterns. For example, `/add src/*.py` will add all Python files in the `src` directory to the chat session.
2023-07-05 21:28:53 -07:00
Paul Gauthier
9915261097 link to benchmark 2023-07-05 17:15:36 -07:00
Paul Gauthier
5dba1624c7 fix broken test 2023-07-05 17:11:39 -07:00
Paul Gauthier
e996c56a51 more robust get_tracked_files with pathlib 2023-07-05 16:55:37 -07:00
Paul Gauthier
c6696e7245 Added a test case to fail if git posix paths are not turned into windows paths 2023-07-05 16:53:43 -07:00
Paul Gauthier
b3d624b7cd Run windows tests on push 2023-07-05 15:26:06 -07:00
Paul Gauthier
decc0a15ff initial 2023-07-05 15:25:36 -07:00
Paul Gauthier
de40f77a4f turn all windows tests back on 2023-07-05 15:20:37 -07:00
Paul Gauthier
f2a814d536 be more careful about ensuring self.root is an abspath 2023-07-05 15:16:57 -07:00
Paul Gauthier
a0774bf46a resolve cmd line files to abs path 2023-07-05 15:14:09 -07:00
Paul Gauthier
55b1634811 added debug output 2023-07-05 15:08:11 -07:00
Paul Gauthier
f3af05f3ee simpler, faster run just failing test 2023-07-05 14:57:35 -07:00
Paul Gauthier
e107819085 chdir inside test 2023-07-05 14:48:46 -07:00
Paul Gauthier
43103978b5 cleanup 2023-07-05 14:44:45 -07:00
Paul Gauthier
640a463a9c no pretty when output 2023-07-05 14:42:42 -07:00
Paul Gauthier
0ff4e5362b just 3.11 for windows for now 2023-07-05 14:39:21 -07:00
Paul Gauthier
e34078da04 force_terminal=False 2023-07-05 14:38:35 -07:00
Paul Gauthier
e1e8e8e10a Turn off fancy Console if self.output 2023-07-05 14:36:13 -07:00
Paul Gauthier
08230a0262 undo PYTHONIOENCODING 2023-07-05 14:34:07 -07:00
Paul Gauthier
bfd363ffde rename 2023-07-05 14:31:15 -07:00
Paul Gauthier
eada60d169 renamed github actions 2023-07-05 14:30:58 -07:00
Paul Gauthier
6746da5539 try and stop rich.Console().rule() from throwing unicode errors in github ci 2023-07-05 14:27:41 -07:00
Paul Gauthier
b31dc2ac71 Use DummyInput in tests 2023-07-05 14:20:28 -07:00
Paul Gauthier
9aaee49c51 tests pass on windows 2023-07-05 14:09:31 -07:00
Paul Gauthier
76eb9e020f more windows test improvements 2023-07-05 14:01:59 -07:00
Paul Gauthier
bbd68097bd tests run on windows now 2023-07-05 13:59:31 -07:00
Paul Gauthier
ae5b4057e8 Merge remote-tracking branch 'origin/main' 2023-07-05 13:39:49 -07:00
Paul Gauthier
9ed19e63d0 bugfix 2023-07-05 13:36:00 -07:00
Paul Gauthier
21efc8d59e convert git.ls_files() to appropriate os.sep, since git always normalizes to / 2023-07-05 13:29:13 -07:00
Paul Gauthier
83887070f4 copy 2023-07-05 13:26:07 -07:00
Paul Gauthier
77a230f005 improved windows instructions, error message 2023-07-05 10:27:07 -07:00
Paul Gauthier
4317a41cd2 copy 2023-07-05 10:00:26 -07:00
Paul Gauthier
b54fc10ee0 Explain -m aider.main in README 2023-07-05 09:59:22 -07:00
paul-gauthier
cdf8f9a4b2
Merge pull request #49 from kwmiebach/main
Add program argument for syntax highlighting theme.
2023-07-05 06:46:04 -07:00
kwmiebach
b80c83c6cb Add program argument for syntax highlighting theme.
The source code output in the chat will be colored in the given
color scheme. Syntax highlighting is powered by pygments, which
supports many styles out of the box. For example:

- default (the default)
- dracula
- emacs
- github-dark
- monokai
- vim
- solarized-dark
- solarized-light

See https://pygments.org/styles/
2023-07-05 00:29:40 +02:00
Paul Gauthier
bc6e958d7e aider: Remove push and pull_request triggers, add workflow_dispatch trigger to make the GitHub action only run when manually initiated.
# Context:
USER: can you stop this action from running on pushes/merges and make it so that it only runs when manually initiated?
ASSISTANT: Sure, to make the GitHub action only run when manually initiated, we need to modify the `.github/workflows/windows-tests.yml` file. We will remove the `push` and `pull_request` triggers and add a `workflow_dispatch` trigger.

Here is the change:

```yaml
.github/workflows/windows-tests.yml
<<<<<<< ORIGINAL
name: Windows Tests

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main
=======
name: Windows Tests

on:
  workflow_dispatch:
>>>>>>> UPDATED
```

This change will make the workflow only run when manually triggered from the GitHub Actions UI.
2023-07-04 14:49:16 -07:00
Paul Gauthier
37e8c49f7a aider: Added step to install universal ctags using Chocolatey before installing Python dependencies.
# Context:
USER: we do need to install universal ctags on windows too
ASSISTANT: To install universal ctags on Windows, we need to modify the `windows-tests.yml` file. However, universal ctags is not available in the standard repositories used by GitHub Actions' Windows environment. We can use Chocolatey, a package manager for Windows, to install universal ctags.

Here are the changes:

```yaml
.github/workflows/windows-tests.yml
<<<<<<< ORIGINAL
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt
=======
    - name: Install universal ctags
      run: |
        choco install universal-ctags

    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt
>>>>>>> UPDATED
```

This adds a new step to the workflow to install universal ctags using Chocolatey before installing the Python dependencies.
2023-07-04 14:43:34 -07:00
Paul Gauthier
2cdeae8fdd aider: Create a Windows workflow for running tests based on the existing Python workflow.
# Context:
USER: make a windows workflow to run the tests, based on the existing python workflow
ASSISTANT: To create a Windows workflow for running tests, we can use the existing Python workflow as a base. We will need to modify the `runs-on` field to specify a Windows environment, and adjust the commands for installing dependencies and running tests to be compatible with Windows.

Here are the changes:

```yaml
.github/workflows/windows-tests.yml
<<<<<<< ORIGINAL

=======
name: Windows Tests

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

jobs:
  build:
    runs-on: windows-latest
    strategy:
      matrix:
        python-version: ["3.8", "3.9", "3.10", "3.11"]

    steps:
    - name: Check out repository
      uses: actions/checkout@v3

    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v4
      with:
        python-version: ${{ matrix.python-version }}

    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt

    - name: Run tests
      run: |
        python -m unittest discover -s tests
>>>>>>> UPDATED
```

This creates a new file `.github/workflows/windows-tests.yml` with the necessary configuration for running tests on a Windows environment. The Python version matrix, checkout, setup, and test steps are the same as in the original Python workflow. The command to install dependencies has been simplified, as the `universal-ctags` package is not required or available on Windows.
2023-07-04 14:42:53 -07:00
Paul Gauthier
8596a5725f Added new files to the git repo: .github/workflows/windows-tests.yml 2023-07-04 14:42:11 -07:00
Paul Gauthier
9c45e01354 restore ubuntu 2023-07-04 14:41:40 -07:00
Paul Gauthier
6d70e3aa57 Just windows 2023-07-04 14:40:09 -07:00
Paul Gauthier
4d41964531 aider: Added Windows image for running tests and modified the 'Install universal ctags' step to work on both Ubuntu and Windows.
# Context:
USER: can we add a github action to also run tests on a windows image?
ASSISTANT: Sure, to add a GitHub action to run tests on a Windows image, we need to modify the GitHub actions workflow file. This file is usually located in the `.github/workflows` directory and has a `.yml` or `.yaml` extension.

Could you please provide the *read-write* access to the GitHub actions workflow file?
USER: I added these *read-write* files: .github/workflows/python-tests.yml
ASSISTANT: Great! We will modify the `.github/workflows/python-tests.yml` file to add a Windows image for running tests.

Here are the steps:

1. Add 'windows-latest' to the `runs-on` field under the `strategy` section. This will ensure that the tests are run on both Ubuntu and Windows environments.

Here is the *edit block* for the change:

```yaml
.github/workflows/python-tests.yml
<<<<<<< ORIGINAL
jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ["3.8", "3.9", "3.10", "3.11"]
=======
jobs:
  build:
    runs-on: [ubuntu-latest, windows-latest]
    strategy:
      matrix:
        python-version: ["3.8", "3.9", "3.10", "3.11"]
>>>>>>> UPDATED
```

2. Modify the 'Install universal ctags' step to work on both Ubuntu and Windows. For Windows, we will use Chocolatey to install universal ctags.

Here is the *edit block* for the change:

```yaml
.github/workflows/python-tests.yml
<<<<<<< ORIGINAL
    - name: Install universal ctags
      run: |
        sudo apt-get update
        sudo apt-get install -y universal-ctags
=======
    - name: Install universal ctags
      run: |
        if [[ "${{ runner.os }}" == "Windows" ]]; then
          choco install universal-ctags
        else
          sudo apt-get update
          sudo apt-get install -y universal-ctags
        fi
>>>>>>> UPDATED
```

Please review these changes and let me know if they are acceptable.
2023-07-04 14:18:38 -07:00