code-aide 1.0.2__tar.gz → 1.0.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. {code_aide-1.0.2 → code_aide-1.0.3}/.github/workflows/publish.yml +6 -1
  2. {code_aide-1.0.2 → code_aide-1.0.3}/PKG-INFO +28 -2
  3. {code_aide-1.0.2 → code_aide-1.0.3}/README.md +27 -1
  4. {code_aide-1.0.2 → code_aide-1.0.3}/pyproject.toml +1 -1
  5. {code_aide-1.0.2 → code_aide-1.0.3}/src/code_aide/__init__.py +1 -1
  6. {code_aide-1.0.2 → code_aide-1.0.3}/src/code_aide/entry.py +1 -4
  7. {code_aide-1.0.2 → code_aide-1.0.3}/tests/test_commands_actions.py +17 -0
  8. {code_aide-1.0.2 → code_aide-1.0.3}/.github/workflows/ci.yml +0 -0
  9. {code_aide-1.0.2 → code_aide-1.0.3}/.gitignore +0 -0
  10. {code_aide-1.0.2 → code_aide-1.0.3}/AGENTS.md +0 -0
  11. {code_aide-1.0.2 → code_aide-1.0.3}/CLAUDE.md +0 -0
  12. {code_aide-1.0.2 → code_aide-1.0.3}/LICENSE +0 -0
  13. {code_aide-1.0.2 → code_aide-1.0.3}/src/code_aide/__main__.py +0 -0
  14. {code_aide-1.0.2 → code_aide-1.0.3}/src/code_aide/commands_actions.py +0 -0
  15. {code_aide-1.0.2 → code_aide-1.0.3}/src/code_aide/commands_tools.py +0 -0
  16. {code_aide-1.0.2 → code_aide-1.0.3}/src/code_aide/config.py +0 -0
  17. {code_aide-1.0.2 → code_aide-1.0.3}/src/code_aide/console.py +0 -0
  18. {code_aide-1.0.2 → code_aide-1.0.3}/src/code_aide/constants.py +0 -0
  19. {code_aide-1.0.2 → code_aide-1.0.3}/src/code_aide/data/tools.json +0 -0
  20. {code_aide-1.0.2 → code_aide-1.0.3}/src/code_aide/detection.py +0 -0
  21. {code_aide-1.0.2 → code_aide-1.0.3}/src/code_aide/install.py +0 -0
  22. {code_aide-1.0.2 → code_aide-1.0.3}/src/code_aide/operations.py +0 -0
  23. {code_aide-1.0.2 → code_aide-1.0.3}/src/code_aide/prereqs.py +0 -0
  24. {code_aide-1.0.2 → code_aide-1.0.3}/src/code_aide/status.py +0 -0
  25. {code_aide-1.0.2 → code_aide-1.0.3}/src/code_aide/versions.py +0 -0
  26. {code_aide-1.0.2 → code_aide-1.0.3}/tests/test_commands_tools.py +0 -0
  27. {code_aide-1.0.2 → code_aide-1.0.3}/tests/test_config.py +0 -0
  28. {code_aide-1.0.2 → code_aide-1.0.3}/tests/test_console.py +0 -0
  29. {code_aide-1.0.2 → code_aide-1.0.3}/tests/test_constants.py +0 -0
  30. {code_aide-1.0.2 → code_aide-1.0.3}/tests/test_detection.py +0 -0
  31. {code_aide-1.0.2 → code_aide-1.0.3}/tests/test_install.py +0 -0
  32. {code_aide-1.0.2 → code_aide-1.0.3}/tests/test_operations.py +0 -0
  33. {code_aide-1.0.2 → code_aide-1.0.3}/tests/test_status.py +0 -0
  34. {code_aide-1.0.2 → code_aide-1.0.3}/tests/test_versions.py +0 -0
@@ -6,10 +6,15 @@ jobs:
6
6
  publish:
7
7
  runs-on: ubuntu-latest
8
8
  permissions:
9
- contents: read
9
+ contents: write
10
10
  id-token: write
11
11
  steps:
12
12
  - uses: actions/checkout@v4
13
13
  - uses: astral-sh/setup-uv@v5
14
14
  - run: uv build
15
15
  - uses: pypa/gh-action-pypi-publish@release/v1
16
+ - name: Create GitHub release notes
17
+ uses: softprops/action-gh-release@v2
18
+ with:
19
+ tag_name: ${{ github.ref_name }}
20
+ generate_release_notes: true
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-aide
3
- Version: 1.0.2
3
+ Version: 1.0.3
4
4
  Summary: Manage AI coding CLI tools (Claude, Copilot, Cursor, Gemini, Amp, Codex)
5
5
  Project-URL: Homepage, https://github.com/dajobe/code-aide
6
6
  Project-URL: Repository, https://github.com/dajobe/code-aide
@@ -62,7 +62,7 @@ code-aide install
62
62
  # Install with automatic prerequisite installation (Node.js, npm)
63
63
  code-aide install -p
64
64
 
65
- # Upgrade installed tools
65
+ # Upgrade installed tools (no args = only out-of-date tools)
66
66
  code-aide upgrade [NAMES]
67
67
 
68
68
  # Remove tools
@@ -133,6 +133,32 @@ uv run pytest tests/ -v
133
133
  uv run pytest tests/test_install.py::TestDetectOsArch -v
134
134
  ```
135
135
 
136
+ ## Release
137
+
138
+ `publish.yml` publishes to PyPI when a Git tag matching `v*` is pushed.
139
+
140
+ 1. Update version strings:
141
+ - `pyproject.toml` (`[project].version`)
142
+ - `src/code_aide/__init__.py` (`__version__`)
143
+ 2. Run checks:
144
+ - `uv run pytest tests/ -v`
145
+ - `uv build`
146
+ 3. Commit the release version bump:
147
+ - `git add pyproject.toml src/code_aide/__init__.py`
148
+ - `git commit -m "Bumped version to X.Y.Z"`
149
+ 4. Write useful commit messages before tagging:
150
+ - Start subject lines with an action verb in past tense (`Added`, `Changed`,
151
+ `Fixed`, `Removed`).
152
+ - Keep subjects user-facing so auto-generated release notes are meaningful.
153
+ - Group related changes into focused commits instead of one broad commit.
154
+ - Example: `Fixed timeout handling in status command`
155
+ 5. Tag and push:
156
+ - `git tag vX.Y.Z`
157
+ - `git push origin main --follow-tags`
158
+ 6. Confirm GitHub Actions:
159
+ - CI should pass.
160
+ - Publish workflow should upload to PyPI and create GitHub Release notes.
161
+
136
162
  ## License
137
163
 
138
164
  Apache-2.0
@@ -36,7 +36,7 @@ code-aide install
36
36
  # Install with automatic prerequisite installation (Node.js, npm)
37
37
  code-aide install -p
38
38
 
39
- # Upgrade installed tools
39
+ # Upgrade installed tools (no args = only out-of-date tools)
40
40
  code-aide upgrade [NAMES]
41
41
 
42
42
  # Remove tools
@@ -107,6 +107,32 @@ uv run pytest tests/ -v
107
107
  uv run pytest tests/test_install.py::TestDetectOsArch -v
108
108
  ```
109
109
 
110
+ ## Release
111
+
112
+ `publish.yml` publishes to PyPI when a Git tag matching `v*` is pushed.
113
+
114
+ 1. Update version strings:
115
+ - `pyproject.toml` (`[project].version`)
116
+ - `src/code_aide/__init__.py` (`__version__`)
117
+ 2. Run checks:
118
+ - `uv run pytest tests/ -v`
119
+ - `uv build`
120
+ 3. Commit the release version bump:
121
+ - `git add pyproject.toml src/code_aide/__init__.py`
122
+ - `git commit -m "Bumped version to X.Y.Z"`
123
+ 4. Write useful commit messages before tagging:
124
+ - Start subject lines with an action verb in past tense (`Added`, `Changed`,
125
+ `Fixed`, `Removed`).
126
+ - Keep subjects user-facing so auto-generated release notes are meaningful.
127
+ - Group related changes into focused commits instead of one broad commit.
128
+ - Example: `Fixed timeout handling in status command`
129
+ 5. Tag and push:
130
+ - `git tag vX.Y.Z`
131
+ - `git push origin main --follow-tags`
132
+ 6. Confirm GitHub Actions:
133
+ - CI should pass.
134
+ - Publish workflow should upload to PyPI and create GitHub Release notes.
135
+
110
136
  ## License
111
137
 
112
138
  Apache-2.0
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "code-aide"
3
- version = "1.0.2"
3
+ version = "1.0.3"
4
4
  description = "Manage AI coding CLI tools (Claude, Copilot, Cursor, Gemini, Amp, Codex)"
5
5
  readme = "README.md"
6
6
  authors = [
@@ -1,3 +1,3 @@
1
1
  """code-aide - Manage AI coding CLI tools."""
2
2
 
3
- __version__ = "1.0.2"
3
+ __version__ = "1.0.3"
@@ -40,7 +40,6 @@ def main() -> None:
40
40
  install_parser.add_argument(
41
41
  "tools",
42
42
  nargs="*",
43
- choices=list(TOOLS.keys()),
44
43
  help="Tools to install (default: all)",
45
44
  )
46
45
  install_parser.add_argument(
@@ -62,8 +61,7 @@ def main() -> None:
62
61
  upgrade_parser.add_argument(
63
62
  "tools",
64
63
  nargs="*",
65
- choices=list(TOOLS.keys()),
66
- help="Tools to upgrade (default: all)",
64
+ help="Tools to upgrade (default: out-of-date only)",
67
65
  )
68
66
  upgrade_parser.set_defaults(func=cmd_upgrade)
69
67
 
@@ -71,7 +69,6 @@ def main() -> None:
71
69
  remove_parser.add_argument(
72
70
  "tools",
73
71
  nargs="*",
74
- choices=list(TOOLS.keys()),
75
72
  help="Tools to remove (default: all)",
76
73
  )
77
74
  remove_parser.set_defaults(func=cmd_remove)
@@ -2,10 +2,12 @@
2
2
 
3
3
  import contextlib
4
4
  import io
5
+ import sys
5
6
  import unittest
6
7
  from unittest import mock
7
8
 
8
9
  from code_aide import commands_actions
10
+ from code_aide import entry
9
11
 
10
12
 
11
13
  class TestCmdInstall(unittest.TestCase):
@@ -109,3 +111,18 @@ class TestCmdUpdateVersions(unittest.TestCase):
109
111
  commands_actions.cmd_update_versions(args)
110
112
  self.assertIn("No upstream config changes detected.", buf.getvalue())
111
113
  mock_save.assert_not_called()
114
+
115
+
116
+ class TestUpgradeNoArgsParsing(unittest.TestCase):
117
+ """Test that 'code-aide upgrade' with no arguments parses successfully."""
118
+
119
+ def test_upgrade_with_no_args_parses_to_empty_tools_list(self):
120
+ with (
121
+ mock.patch.object(sys, "argv", ["code-aide", "upgrade"]),
122
+ mock.patch.object(entry, "cmd_upgrade") as mock_upgrade,
123
+ ):
124
+ entry.main()
125
+ mock_upgrade.assert_called_once()
126
+ (args,) = mock_upgrade.call_args[0]
127
+ self.assertEqual(args.command, "upgrade")
128
+ self.assertEqual(args.tools, [])
File without changes
File without changes
File without changes
File without changes