missing-ag-updater 0.1.0__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.
- missing_ag_updater-0.1.0/.github/dependabot.yml +15 -0
- missing_ag_updater-0.1.0/.github/workflows/ci.yml +272 -0
- missing_ag_updater-0.1.0/.gitignore +12 -0
- missing_ag_updater-0.1.0/LICENSE +21 -0
- missing_ag_updater-0.1.0/Makefile +27 -0
- missing_ag_updater-0.1.0/PKG-INFO +149 -0
- missing_ag_updater-0.1.0/README.md +135 -0
- missing_ag_updater-0.1.0/coverage.svg +20 -0
- missing_ag_updater-0.1.0/pyproject.toml +42 -0
- missing_ag_updater-0.1.0/src/generate_badge.py +59 -0
- missing_ag_updater-0.1.0/src/missing_ag_updater/__init__.py +674 -0
- missing_ag_updater-0.1.0/src/missing_ag_updater/__main__.py +4 -0
- missing_ag_updater-0.1.0/tests/test_missing_ag_updater.py +77 -0
- missing_ag_updater-0.1.0/uv.lock +108 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
updates:
|
|
3
|
+
- package-ecosystem: "uv"
|
|
4
|
+
directory: "/"
|
|
5
|
+
schedule:
|
|
6
|
+
interval: "weekly"
|
|
7
|
+
assignees:
|
|
8
|
+
- "hellqvio86"
|
|
9
|
+
|
|
10
|
+
- package-ecosystem: "github-actions"
|
|
11
|
+
directory: "/"
|
|
12
|
+
schedule:
|
|
13
|
+
interval: "weekly"
|
|
14
|
+
assignees:
|
|
15
|
+
- "hellqvio86"
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
name: CI/CD
|
|
2
|
+
|
|
3
|
+
permissions:
|
|
4
|
+
contents: read
|
|
5
|
+
|
|
6
|
+
on:
|
|
7
|
+
push:
|
|
8
|
+
branches: [main]
|
|
9
|
+
pull_request:
|
|
10
|
+
branches: [main]
|
|
11
|
+
release:
|
|
12
|
+
types: [published]
|
|
13
|
+
workflow_dispatch:
|
|
14
|
+
inputs:
|
|
15
|
+
job:
|
|
16
|
+
description: 'Select which job to run'
|
|
17
|
+
required: true
|
|
18
|
+
default: 'all'
|
|
19
|
+
type: choice
|
|
20
|
+
options:
|
|
21
|
+
- all
|
|
22
|
+
- lint
|
|
23
|
+
- test
|
|
24
|
+
- draft-release
|
|
25
|
+
- publish
|
|
26
|
+
|
|
27
|
+
jobs:
|
|
28
|
+
lint:
|
|
29
|
+
name: Lint
|
|
30
|
+
runs-on: ubuntu-latest
|
|
31
|
+
if: |
|
|
32
|
+
github.event_name != 'workflow_dispatch' ||
|
|
33
|
+
inputs.job == 'all' ||
|
|
34
|
+
inputs.job == 'lint'
|
|
35
|
+
steps:
|
|
36
|
+
- name: Checkout code
|
|
37
|
+
uses: actions/checkout@v6
|
|
38
|
+
|
|
39
|
+
- name: Install uv
|
|
40
|
+
uses: astral-sh/setup-uv@v7
|
|
41
|
+
with:
|
|
42
|
+
enable-cache: true
|
|
43
|
+
|
|
44
|
+
- name: Set up Python
|
|
45
|
+
uses: actions/setup-python@v6
|
|
46
|
+
with:
|
|
47
|
+
python-version: "3.12"
|
|
48
|
+
|
|
49
|
+
- name: Install dependencies
|
|
50
|
+
run: uv sync
|
|
51
|
+
|
|
52
|
+
- name: Run ruff check
|
|
53
|
+
run: uv run ruff check .
|
|
54
|
+
|
|
55
|
+
- name: Run ruff format check
|
|
56
|
+
run: uv run ruff format --check .
|
|
57
|
+
|
|
58
|
+
test:
|
|
59
|
+
name: Test (Python ${{ matrix.python-version }})
|
|
60
|
+
runs-on: ubuntu-latest
|
|
61
|
+
permissions:
|
|
62
|
+
contents: write
|
|
63
|
+
if: |
|
|
64
|
+
github.event_name != 'workflow_dispatch' ||
|
|
65
|
+
inputs.job == 'all' ||
|
|
66
|
+
inputs.job == 'test'
|
|
67
|
+
strategy:
|
|
68
|
+
fail-fast: false
|
|
69
|
+
matrix:
|
|
70
|
+
python-version: ["3.12", "3.13", "3.14"]
|
|
71
|
+
|
|
72
|
+
steps:
|
|
73
|
+
- name: Checkout code
|
|
74
|
+
uses: actions/checkout@v6
|
|
75
|
+
|
|
76
|
+
- name: Install uv
|
|
77
|
+
uses: astral-sh/setup-uv@v7
|
|
78
|
+
with:
|
|
79
|
+
enable-cache: true
|
|
80
|
+
|
|
81
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
82
|
+
uses: actions/setup-python@v6
|
|
83
|
+
with:
|
|
84
|
+
python-version: ${{ matrix.python-version }}
|
|
85
|
+
|
|
86
|
+
- name: Install dependencies
|
|
87
|
+
run: uv sync
|
|
88
|
+
|
|
89
|
+
- name: Run tests
|
|
90
|
+
run: |
|
|
91
|
+
uv run pytest --cov=src/missing_ag_updater --cov-report=term-missing
|
|
92
|
+
|
|
93
|
+
- name: Generate coverage badge
|
|
94
|
+
if: matrix.python-version == '3.12'
|
|
95
|
+
run: |
|
|
96
|
+
uv run python src/generate_badge.py
|
|
97
|
+
|
|
98
|
+
- name: Commit and push coverage badge
|
|
99
|
+
if: matrix.python-version == '3.12' && github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
100
|
+
run: |
|
|
101
|
+
git config user.name "github-actions[bot]"
|
|
102
|
+
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
103
|
+
git add coverage.svg
|
|
104
|
+
git commit -m "Update coverage badge [skip ci]" || exit 0
|
|
105
|
+
git push origin HEAD:main
|
|
106
|
+
|
|
107
|
+
all-checks:
|
|
108
|
+
name: All Checks Passed
|
|
109
|
+
if: always()
|
|
110
|
+
needs: [lint, test]
|
|
111
|
+
outputs:
|
|
112
|
+
success: ${{ steps.check.outputs.success }}
|
|
113
|
+
runs-on: ubuntu-latest
|
|
114
|
+
steps:
|
|
115
|
+
- name: Check all jobs
|
|
116
|
+
id: check
|
|
117
|
+
run: |
|
|
118
|
+
LINT_RESULT="${{ needs.lint.result }}"
|
|
119
|
+
TEST_RESULT="${{ needs.test.result }}"
|
|
120
|
+
if [[ "$LINT_RESULT" == "success" || "$LINT_RESULT" == "skipped" ]] && \
|
|
121
|
+
[[ "$TEST_RESULT" == "success" || "$TEST_RESULT" == "skipped" ]]; then
|
|
122
|
+
echo "success=true" >> $GITHUB_OUTPUT
|
|
123
|
+
echo "All executed checks passed!"
|
|
124
|
+
else
|
|
125
|
+
echo "success=false" >> $GITHUB_OUTPUT
|
|
126
|
+
echo "One or more checks failed"
|
|
127
|
+
exit 1
|
|
128
|
+
fi
|
|
129
|
+
|
|
130
|
+
draft-release:
|
|
131
|
+
name: Draft Release
|
|
132
|
+
runs-on: ubuntu-latest
|
|
133
|
+
needs: [all-checks]
|
|
134
|
+
if: |
|
|
135
|
+
always() &&
|
|
136
|
+
needs.all-checks.outputs.success == 'true' &&
|
|
137
|
+
(
|
|
138
|
+
(github.event_name == 'push' && github.ref == 'refs/heads/main') ||
|
|
139
|
+
(github.event_name == 'workflow_dispatch' && (inputs.job == 'all' || inputs.job == 'draft-release'))
|
|
140
|
+
)
|
|
141
|
+
permissions:
|
|
142
|
+
contents: write
|
|
143
|
+
steps:
|
|
144
|
+
- name: Checkout code
|
|
145
|
+
uses: actions/checkout@v6
|
|
146
|
+
with:
|
|
147
|
+
fetch-depth: 2
|
|
148
|
+
|
|
149
|
+
- name: Check version change
|
|
150
|
+
id: check_version
|
|
151
|
+
shell: bash
|
|
152
|
+
run: |
|
|
153
|
+
CURRENT_VERSION=$(grep -m 1 '^version =' pyproject.toml | cut -d '"' -f 2)
|
|
154
|
+
PREVIOUS_VERSION=$(git show HEAD~1:pyproject.toml 2>/dev/null | grep -m 1 '^version =' | cut -d '"' -f 2 || echo "")
|
|
155
|
+
|
|
156
|
+
if [ -n "$PREVIOUS_VERSION" ] && [ "$CURRENT_VERSION" != "$PREVIOUS_VERSION" ]; then
|
|
157
|
+
echo "changed=true" >> $GITHUB_OUTPUT
|
|
158
|
+
echo "version=$CURRENT_VERSION" >> $GITHUB_OUTPUT
|
|
159
|
+
else
|
|
160
|
+
echo "changed=false" >> $GITHUB_OUTPUT
|
|
161
|
+
fi
|
|
162
|
+
|
|
163
|
+
- name: Create Git tag
|
|
164
|
+
if: steps.check_version.outputs.changed == 'true'
|
|
165
|
+
run: |
|
|
166
|
+
git config user.name "github-actions[bot]"
|
|
167
|
+
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
168
|
+
git tag -a "v${{ steps.check_version.outputs.version }}" -m "Release v${{ steps.check_version.outputs.version }}"
|
|
169
|
+
git push origin "v${{ steps.check_version.outputs.version }}"
|
|
170
|
+
|
|
171
|
+
- name: Build package
|
|
172
|
+
if: steps.check_version.outputs.changed == 'true'
|
|
173
|
+
run: |
|
|
174
|
+
uv build
|
|
175
|
+
|
|
176
|
+
- name: Generate SBOM
|
|
177
|
+
if: steps.check_version.outputs.changed == 'true'
|
|
178
|
+
uses: anchore/sbom-action@v0
|
|
179
|
+
with:
|
|
180
|
+
path: .
|
|
181
|
+
format: spdx-json
|
|
182
|
+
output-file: sbom.spdx.json
|
|
183
|
+
|
|
184
|
+
- name: Create Release Draft
|
|
185
|
+
if: steps.check_version.outputs.changed == 'true'
|
|
186
|
+
uses: softprops/action-gh-release@v3
|
|
187
|
+
with:
|
|
188
|
+
tag_name: v${{ steps.check_version.outputs.version }}
|
|
189
|
+
name: v${{ steps.check_version.outputs.version }}
|
|
190
|
+
draft: true
|
|
191
|
+
generate_release_notes: true
|
|
192
|
+
files: |
|
|
193
|
+
dist/*.whl
|
|
194
|
+
dist/*.tar.gz
|
|
195
|
+
sbom.spdx.json
|
|
196
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
|
197
|
+
|
|
198
|
+
publish:
|
|
199
|
+
name: Build and Publish
|
|
200
|
+
runs-on: ubuntu-latest
|
|
201
|
+
permissions:
|
|
202
|
+
contents: write
|
|
203
|
+
id-token: write
|
|
204
|
+
needs: [all-checks]
|
|
205
|
+
environment:
|
|
206
|
+
name: pypi
|
|
207
|
+
url: https://pypi.org/p/missing-ag-updater
|
|
208
|
+
if: |
|
|
209
|
+
always() &&
|
|
210
|
+
needs.all-checks.outputs.success == 'true' &&
|
|
211
|
+
(
|
|
212
|
+
(github.event_name == 'release' && github.event.action == 'published') ||
|
|
213
|
+
(github.event_name == 'workflow_dispatch' && inputs.job == 'publish')
|
|
214
|
+
)
|
|
215
|
+
steps:
|
|
216
|
+
- name: Checkout code
|
|
217
|
+
uses: actions/checkout@v6
|
|
218
|
+
|
|
219
|
+
- name: Install uv
|
|
220
|
+
uses: astral-sh/setup-uv@v7
|
|
221
|
+
with:
|
|
222
|
+
enable-cache: true
|
|
223
|
+
|
|
224
|
+
- name: Set up Python
|
|
225
|
+
uses: actions/setup-python@v6
|
|
226
|
+
with:
|
|
227
|
+
python-version: "3.12"
|
|
228
|
+
|
|
229
|
+
- name: Build package
|
|
230
|
+
run: uv build
|
|
231
|
+
|
|
232
|
+
- name: Generate SBOM
|
|
233
|
+
uses: anchore/sbom-action@v0
|
|
234
|
+
with:
|
|
235
|
+
path: .
|
|
236
|
+
format: spdx-json
|
|
237
|
+
output-file: sbom.spdx.json
|
|
238
|
+
|
|
239
|
+
- name: Upload SBOM to release
|
|
240
|
+
if: github.event_name == 'release'
|
|
241
|
+
uses: softprops/action-gh-release@v3
|
|
242
|
+
with:
|
|
243
|
+
files: sbom.spdx.json
|
|
244
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
|
245
|
+
|
|
246
|
+
- name: Publish to PyPI
|
|
247
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
248
|
+
with:
|
|
249
|
+
packages-dir: dist/
|
|
250
|
+
|
|
251
|
+
sbom:
|
|
252
|
+
name: Generate and Upload SBOM
|
|
253
|
+
runs-on: ubuntu-latest
|
|
254
|
+
if: |
|
|
255
|
+
(github.event_name == 'push' && github.ref == 'refs/heads/main') ||
|
|
256
|
+
(github.event_name == 'workflow_dispatch' && (inputs.job == 'all' || inputs.job == 'publish' || inputs.job == 'draft-release'))
|
|
257
|
+
steps:
|
|
258
|
+
- name: Checkout code
|
|
259
|
+
uses: actions/checkout@v6
|
|
260
|
+
|
|
261
|
+
- name: Generate SBOM
|
|
262
|
+
uses: anchore/sbom-action@v0
|
|
263
|
+
with:
|
|
264
|
+
path: .
|
|
265
|
+
format: spdx-json
|
|
266
|
+
output-file: sbom.spdx.json
|
|
267
|
+
|
|
268
|
+
- name: Upload SBOM Artifact
|
|
269
|
+
uses: actions/upload-artifact@v7
|
|
270
|
+
with:
|
|
271
|
+
name: sbom
|
|
272
|
+
path: sbom.spdx.json
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 hellqvio
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
.PHONY: venv lint test clean format build publish
|
|
2
|
+
|
|
3
|
+
.venv: pyproject.toml
|
|
4
|
+
if [ ! -d .venv ]; then uv venv; fi
|
|
5
|
+
uv pip install -e . --group dev
|
|
6
|
+
|
|
7
|
+
venv: .venv
|
|
8
|
+
|
|
9
|
+
lint: .venv
|
|
10
|
+
.venv/bin/ruff check .
|
|
11
|
+
.venv/bin/ruff format --check .
|
|
12
|
+
|
|
13
|
+
format: .venv
|
|
14
|
+
.venv/bin/ruff format .
|
|
15
|
+
|
|
16
|
+
test: .venv
|
|
17
|
+
.venv/bin/pytest --cov=src/missing_ag_updater --cov-report=term-missing
|
|
18
|
+
.venv/bin/python3 src/generate_badge.py
|
|
19
|
+
|
|
20
|
+
build: .venv
|
|
21
|
+
uv build
|
|
22
|
+
|
|
23
|
+
publish: build
|
|
24
|
+
uv publish
|
|
25
|
+
|
|
26
|
+
clean:
|
|
27
|
+
rm -rf .venv __pycache__ .pytest_cache .ruff_cache dist
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: missing-ag-updater
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Auto-updater utility for Google Antigravity developer tools (IDE, Hub, CLI)
|
|
5
|
+
Author: hellqvio
|
|
6
|
+
License: MIT
|
|
7
|
+
License-File: LICENSE
|
|
8
|
+
Classifier: Development Status :: 3 - Alpha
|
|
9
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
10
|
+
Classifier: Operating System :: OS Independent
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Requires-Python: >=3.12
|
|
13
|
+
Description-Content-Type: text/markdown
|
|
14
|
+
|
|
15
|
+
# missing-ag-updater
|
|
16
|
+
|
|
17
|
+
[](https://github.com/hellqvio86/missing-ag-updater/actions/workflows/ci.yml)
|
|
18
|
+
[](https://github.com/hellqvio86/missing-ag-updater/actions)
|
|
19
|
+
[](https://pypi.org/project/missing-ag-updater/)
|
|
20
|
+
[](https://pypi.org/project/missing-ag-updater/)
|
|
21
|
+
[](https://opensource.org/licenses/MIT)
|
|
22
|
+
|
|
23
|
+
> [!IMPORTANT]
|
|
24
|
+
> **Disclaimer:** This project is an unofficial, community-maintained utility. It is **NOT** affiliated with, sponsored by, or supported by Google LLC.
|
|
25
|
+
|
|
26
|
+
> [!WARNING]
|
|
27
|
+
> **Alpha Software:** This utility is currently in an early **alpha** stage of development. Features may change without notice, and bugs may occur. Use with caution.
|
|
28
|
+
|
|
29
|
+
This repository contains a Python utility to check for and apply updates to the Google Antigravity developer suite on Linux, macOS, and Windows.
|
|
30
|
+
|
|
31
|
+
## Features
|
|
32
|
+
|
|
33
|
+
- **Component Support:** Independently check and upgrade:
|
|
34
|
+
- **Antigravity IDE** (VS Code-based AI Editor)
|
|
35
|
+
- **Antigravity Hub** (Standalone Agent Desktop Application)
|
|
36
|
+
- **Antigravity CLI** (`agy` command line tool)
|
|
37
|
+
- **Cross-Platform:** Supports Linux (`.tar.gz`), macOS (`.dmg` mount installation), and Windows (`.exe` silent installation).
|
|
38
|
+
- **Safe Installation:** Warns if the target application is running before attempting to overwrite files.
|
|
39
|
+
- **Verification:** Downloads the CLI directly and verifies SHA512 checksums prior to installation.
|
|
40
|
+
- **Rich Terminal UI:** Displays download progress bars and clear success/warning logs.
|
|
41
|
+
- **Dry Run Support:** Check if any updates are available without changing any files.
|
|
42
|
+
- **Development Tooling:** Complete with linter, test coverage, and environment creation via `uv`.
|
|
43
|
+
|
|
44
|
+
## Installation
|
|
45
|
+
|
|
46
|
+
### For Users (via pipx)
|
|
47
|
+
|
|
48
|
+
You can install the tool globally into an isolated virtual environment using `pipx`:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
# Install directly from the GitHub repository:
|
|
52
|
+
pipx install git+https://github.com/hellqvio86/missing-ag-updater.git
|
|
53
|
+
|
|
54
|
+
# Or install from PyPI (once published):
|
|
55
|
+
pipx install missing-ag-updater
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Once installed, the `antigravity-updater` command will be globally available.
|
|
59
|
+
|
|
60
|
+
### For Developers
|
|
61
|
+
|
|
62
|
+
Create the local virtual environment and install development tools (`pytest`, `ruff`) using `uv` and the provided `Makefile`:
|
|
63
|
+
```bash
|
|
64
|
+
make venv
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Usage
|
|
68
|
+
|
|
69
|
+
Run the package directly to check and update all components:
|
|
70
|
+
```bash
|
|
71
|
+
python -m missing_ag_updater
|
|
72
|
+
# or using the installed entrypoint:
|
|
73
|
+
antigravity-updater
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Options
|
|
77
|
+
|
|
78
|
+
```text
|
|
79
|
+
usage: python -m missing_ag_updater [-h] [--check] [--ide] [--hub] [--cli] [--force]
|
|
80
|
+
[--dir-ide DIR_IDE] [--dir-hub DIR_HUB] [--path-cli PATH_CLI]
|
|
81
|
+
|
|
82
|
+
Auto-updater utility for Google Antigravity developer tools (Cross-Platform).
|
|
83
|
+
|
|
84
|
+
options:
|
|
85
|
+
-h, --help show this help message and exit
|
|
86
|
+
--check Check for available updates without installing (dry run)
|
|
87
|
+
--ide Update only the Antigravity IDE
|
|
88
|
+
--hub Update only the Antigravity Hub
|
|
89
|
+
--cli Update only the Antigravity CLI
|
|
90
|
+
--force Bypass version checks and active process warnings
|
|
91
|
+
--dir-ide DIR_IDE Override path to Antigravity IDE folder/bundle
|
|
92
|
+
--dir-hub DIR_HUB Override path to Antigravity Hub folder/bundle
|
|
93
|
+
--path-cli PATH_CLI Override path to Antigravity CLI binary
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Examples
|
|
97
|
+
|
|
98
|
+
- **Dry run check for all tools:**
|
|
99
|
+
```bash
|
|
100
|
+
python -m missing_ag_updater --check
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
- **Force update the Hub application only:**
|
|
104
|
+
```bash
|
|
105
|
+
python -m missing_ag_updater --hub --force
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
- **Update only the CLI tool:**
|
|
109
|
+
```bash
|
|
110
|
+
python -m missing_ag_updater --cli
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Launching the Applications
|
|
114
|
+
|
|
115
|
+
Once updated, you can launch the Antigravity tools using their standard terminal commands:
|
|
116
|
+
|
|
117
|
+
- **Antigravity IDE** (VS Code-based AI Editor):
|
|
118
|
+
```bash
|
|
119
|
+
antigravity-ide
|
|
120
|
+
```
|
|
121
|
+
- **Antigravity Hub** (Standalone agent desktop application):
|
|
122
|
+
```bash
|
|
123
|
+
antigravity
|
|
124
|
+
```
|
|
125
|
+
- **Antigravity CLI** (Terminal utility):
|
|
126
|
+
```bash
|
|
127
|
+
agy
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Development
|
|
131
|
+
|
|
132
|
+
The project includes a `Makefile` to simplify development tasks:
|
|
133
|
+
|
|
134
|
+
- **Lint check (Ruff):**
|
|
135
|
+
```bash
|
|
136
|
+
make lint
|
|
137
|
+
```
|
|
138
|
+
- **Run unit tests (Pytest):**
|
|
139
|
+
```bash
|
|
140
|
+
make test
|
|
141
|
+
```
|
|
142
|
+
- **Clean virtual environment & cache:**
|
|
143
|
+
```bash
|
|
144
|
+
make clean
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## License
|
|
148
|
+
|
|
149
|
+
This project is licensed under the [MIT License](LICENSE).
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# missing-ag-updater
|
|
2
|
+
|
|
3
|
+
[](https://github.com/hellqvio86/missing-ag-updater/actions/workflows/ci.yml)
|
|
4
|
+
[](https://github.com/hellqvio86/missing-ag-updater/actions)
|
|
5
|
+
[](https://pypi.org/project/missing-ag-updater/)
|
|
6
|
+
[](https://pypi.org/project/missing-ag-updater/)
|
|
7
|
+
[](https://opensource.org/licenses/MIT)
|
|
8
|
+
|
|
9
|
+
> [!IMPORTANT]
|
|
10
|
+
> **Disclaimer:** This project is an unofficial, community-maintained utility. It is **NOT** affiliated with, sponsored by, or supported by Google LLC.
|
|
11
|
+
|
|
12
|
+
> [!WARNING]
|
|
13
|
+
> **Alpha Software:** This utility is currently in an early **alpha** stage of development. Features may change without notice, and bugs may occur. Use with caution.
|
|
14
|
+
|
|
15
|
+
This repository contains a Python utility to check for and apply updates to the Google Antigravity developer suite on Linux, macOS, and Windows.
|
|
16
|
+
|
|
17
|
+
## Features
|
|
18
|
+
|
|
19
|
+
- **Component Support:** Independently check and upgrade:
|
|
20
|
+
- **Antigravity IDE** (VS Code-based AI Editor)
|
|
21
|
+
- **Antigravity Hub** (Standalone Agent Desktop Application)
|
|
22
|
+
- **Antigravity CLI** (`agy` command line tool)
|
|
23
|
+
- **Cross-Platform:** Supports Linux (`.tar.gz`), macOS (`.dmg` mount installation), and Windows (`.exe` silent installation).
|
|
24
|
+
- **Safe Installation:** Warns if the target application is running before attempting to overwrite files.
|
|
25
|
+
- **Verification:** Downloads the CLI directly and verifies SHA512 checksums prior to installation.
|
|
26
|
+
- **Rich Terminal UI:** Displays download progress bars and clear success/warning logs.
|
|
27
|
+
- **Dry Run Support:** Check if any updates are available without changing any files.
|
|
28
|
+
- **Development Tooling:** Complete with linter, test coverage, and environment creation via `uv`.
|
|
29
|
+
|
|
30
|
+
## Installation
|
|
31
|
+
|
|
32
|
+
### For Users (via pipx)
|
|
33
|
+
|
|
34
|
+
You can install the tool globally into an isolated virtual environment using `pipx`:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
# Install directly from the GitHub repository:
|
|
38
|
+
pipx install git+https://github.com/hellqvio86/missing-ag-updater.git
|
|
39
|
+
|
|
40
|
+
# Or install from PyPI (once published):
|
|
41
|
+
pipx install missing-ag-updater
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Once installed, the `antigravity-updater` command will be globally available.
|
|
45
|
+
|
|
46
|
+
### For Developers
|
|
47
|
+
|
|
48
|
+
Create the local virtual environment and install development tools (`pytest`, `ruff`) using `uv` and the provided `Makefile`:
|
|
49
|
+
```bash
|
|
50
|
+
make venv
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Usage
|
|
54
|
+
|
|
55
|
+
Run the package directly to check and update all components:
|
|
56
|
+
```bash
|
|
57
|
+
python -m missing_ag_updater
|
|
58
|
+
# or using the installed entrypoint:
|
|
59
|
+
antigravity-updater
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Options
|
|
63
|
+
|
|
64
|
+
```text
|
|
65
|
+
usage: python -m missing_ag_updater [-h] [--check] [--ide] [--hub] [--cli] [--force]
|
|
66
|
+
[--dir-ide DIR_IDE] [--dir-hub DIR_HUB] [--path-cli PATH_CLI]
|
|
67
|
+
|
|
68
|
+
Auto-updater utility for Google Antigravity developer tools (Cross-Platform).
|
|
69
|
+
|
|
70
|
+
options:
|
|
71
|
+
-h, --help show this help message and exit
|
|
72
|
+
--check Check for available updates without installing (dry run)
|
|
73
|
+
--ide Update only the Antigravity IDE
|
|
74
|
+
--hub Update only the Antigravity Hub
|
|
75
|
+
--cli Update only the Antigravity CLI
|
|
76
|
+
--force Bypass version checks and active process warnings
|
|
77
|
+
--dir-ide DIR_IDE Override path to Antigravity IDE folder/bundle
|
|
78
|
+
--dir-hub DIR_HUB Override path to Antigravity Hub folder/bundle
|
|
79
|
+
--path-cli PATH_CLI Override path to Antigravity CLI binary
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Examples
|
|
83
|
+
|
|
84
|
+
- **Dry run check for all tools:**
|
|
85
|
+
```bash
|
|
86
|
+
python -m missing_ag_updater --check
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
- **Force update the Hub application only:**
|
|
90
|
+
```bash
|
|
91
|
+
python -m missing_ag_updater --hub --force
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
- **Update only the CLI tool:**
|
|
95
|
+
```bash
|
|
96
|
+
python -m missing_ag_updater --cli
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Launching the Applications
|
|
100
|
+
|
|
101
|
+
Once updated, you can launch the Antigravity tools using their standard terminal commands:
|
|
102
|
+
|
|
103
|
+
- **Antigravity IDE** (VS Code-based AI Editor):
|
|
104
|
+
```bash
|
|
105
|
+
antigravity-ide
|
|
106
|
+
```
|
|
107
|
+
- **Antigravity Hub** (Standalone agent desktop application):
|
|
108
|
+
```bash
|
|
109
|
+
antigravity
|
|
110
|
+
```
|
|
111
|
+
- **Antigravity CLI** (Terminal utility):
|
|
112
|
+
```bash
|
|
113
|
+
agy
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Development
|
|
117
|
+
|
|
118
|
+
The project includes a `Makefile` to simplify development tasks:
|
|
119
|
+
|
|
120
|
+
- **Lint check (Ruff):**
|
|
121
|
+
```bash
|
|
122
|
+
make lint
|
|
123
|
+
```
|
|
124
|
+
- **Run unit tests (Pytest):**
|
|
125
|
+
```bash
|
|
126
|
+
make test
|
|
127
|
+
```
|
|
128
|
+
- **Clean virtual environment & cache:**
|
|
129
|
+
```bash
|
|
130
|
+
make clean
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## License
|
|
134
|
+
|
|
135
|
+
This project is licensed under the [MIT License](LICENSE).
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="90" height="20">
|
|
2
|
+
<linearGradient id="b" x2="0" y2="100%">
|
|
3
|
+
<stop offset="0" stop-color="#bbb" stop-opacity=".1"/>
|
|
4
|
+
<stop offset="1" stop-opacity=".1"/>
|
|
5
|
+
</linearGradient>
|
|
6
|
+
<mask id="a">
|
|
7
|
+
<rect width="90" height="20" rx="3" fill="#fff"/>
|
|
8
|
+
</mask>
|
|
9
|
+
<g mask="url(#a)">
|
|
10
|
+
<rect width="61" height="20" fill="#555"/>
|
|
11
|
+
<rect x="61" width="29" height="20" fill="#e05d44"/>
|
|
12
|
+
<rect width="90" height="20" fill="url(#b)"/>
|
|
13
|
+
</g>
|
|
14
|
+
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
|
|
15
|
+
<text x="31.5" y="15" fill="#010101" fill-opacity=".3">coverage</text>
|
|
16
|
+
<text x="31.5" y="14">coverage</text>
|
|
17
|
+
<text x="75.5" y="15" fill="#010101" fill-opacity=".3">22%</text>
|
|
18
|
+
<text x="75.5" y="14">22%</text>
|
|
19
|
+
</g>
|
|
20
|
+
</svg>
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "missing-ag-updater"
|
|
3
|
+
version = "0.1.0"
|
|
4
|
+
description = "Auto-updater utility for Google Antigravity developer tools (IDE, Hub, CLI)"
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
requires-python = ">=3.12"
|
|
7
|
+
license = {text = "MIT"}
|
|
8
|
+
authors = [
|
|
9
|
+
{name = "hellqvio"}
|
|
10
|
+
]
|
|
11
|
+
classifiers = [
|
|
12
|
+
"Development Status :: 3 - Alpha",
|
|
13
|
+
"Programming Language :: Python :: 3",
|
|
14
|
+
"License :: OSI Approved :: MIT License",
|
|
15
|
+
"Operating System :: OS Independent",
|
|
16
|
+
]
|
|
17
|
+
dependencies = []
|
|
18
|
+
|
|
19
|
+
[project.scripts]
|
|
20
|
+
antigravity-updater = "missing_ag_updater:main"
|
|
21
|
+
|
|
22
|
+
[build-system]
|
|
23
|
+
requires = ["hatchling"]
|
|
24
|
+
build-backend = "hatchling.build"
|
|
25
|
+
|
|
26
|
+
[tool.hatch.build.targets.wheel]
|
|
27
|
+
packages = ["src/missing_ag_updater"]
|
|
28
|
+
|
|
29
|
+
[dependency-groups]
|
|
30
|
+
dev = [
|
|
31
|
+
"pytest>=8.0.0",
|
|
32
|
+
"ruff>=0.3.0",
|
|
33
|
+
"pytest-cov>=4.0.0",
|
|
34
|
+
]
|
|
35
|
+
|
|
36
|
+
[tool.ruff]
|
|
37
|
+
line-length = 120
|
|
38
|
+
target-version = "py39"
|
|
39
|
+
|
|
40
|
+
[tool.ruff.lint]
|
|
41
|
+
select = ["E", "F", "W", "I"]
|
|
42
|
+
ignore = []
|