ultimate-gemini-mcp 1.0.1__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.
Potentially problematic release.
This version of ultimate-gemini-mcp might be problematic. Click here for more details.
- ultimate_gemini_mcp-1.0.1/.env.example +34 -0
- ultimate_gemini_mcp-1.0.1/.github/workflows/README.md +74 -0
- ultimate_gemini_mcp-1.0.1/.github/workflows/claude-code-review.yml +57 -0
- ultimate_gemini_mcp-1.0.1/.github/workflows/claude.yml +50 -0
- ultimate_gemini_mcp-1.0.1/.github/workflows/publish.yml +161 -0
- ultimate_gemini_mcp-1.0.1/.github/workflows/test.yml +106 -0
- ultimate_gemini_mcp-1.0.1/.gitignore +66 -0
- ultimate_gemini_mcp-1.0.1/CLAUDE.md +390 -0
- ultimate_gemini_mcp-1.0.1/LICENSE +31 -0
- ultimate_gemini_mcp-1.0.1/MANIFEST.in +9 -0
- ultimate_gemini_mcp-1.0.1/PKG-INFO +372 -0
- ultimate_gemini_mcp-1.0.1/PUBLISHING.md +146 -0
- ultimate_gemini_mcp-1.0.1/README.md +336 -0
- ultimate_gemini_mcp-1.0.1/pyproject.toml +54 -0
- ultimate_gemini_mcp-1.0.1/src/__init__.py +16 -0
- ultimate_gemini_mcp-1.0.1/src/config/__init__.py +32 -0
- ultimate_gemini_mcp-1.0.1/src/config/constants.py +77 -0
- ultimate_gemini_mcp-1.0.1/src/config/settings.py +143 -0
- ultimate_gemini_mcp-1.0.1/src/core/__init__.py +55 -0
- ultimate_gemini_mcp-1.0.1/src/core/exceptions.py +60 -0
- ultimate_gemini_mcp-1.0.1/src/core/validation.py +161 -0
- ultimate_gemini_mcp-1.0.1/src/server.py +166 -0
- ultimate_gemini_mcp-1.0.1/src/services/__init__.py +15 -0
- ultimate_gemini_mcp-1.0.1/src/services/gemini_client.py +230 -0
- ultimate_gemini_mcp-1.0.1/src/services/image_service.py +243 -0
- ultimate_gemini_mcp-1.0.1/src/services/imagen_client.py +175 -0
- ultimate_gemini_mcp-1.0.1/src/services/prompt_enhancer.py +140 -0
- ultimate_gemini_mcp-1.0.1/src/tools/__init__.py +11 -0
- ultimate_gemini_mcp-1.0.1/src/tools/batch_generate.py +159 -0
- ultimate_gemini_mcp-1.0.1/src/tools/generate_image.py +252 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Ultimate Gemini MCP Server Configuration
|
|
2
|
+
|
|
3
|
+
# Required: Your Google Gemini API Key
|
|
4
|
+
# Get one from: https://makersuite.google.com/app/apikey
|
|
5
|
+
GEMINI_API_KEY=your_api_key_here
|
|
6
|
+
|
|
7
|
+
# Alternative API key name (either works)
|
|
8
|
+
# GOOGLE_API_KEY=your_api_key_here
|
|
9
|
+
|
|
10
|
+
# Optional: Output directory for generated images (default: generated_images)
|
|
11
|
+
# OUTPUT_DIR=./generated_images
|
|
12
|
+
|
|
13
|
+
# Optional: Enable/disable prompt enhancement (default: true)
|
|
14
|
+
# ENABLE_PROMPT_ENHANCEMENT=true
|
|
15
|
+
|
|
16
|
+
# Optional: Enable/disable batch processing (default: true)
|
|
17
|
+
# ENABLE_BATCH_PROCESSING=true
|
|
18
|
+
|
|
19
|
+
# Optional: Default models
|
|
20
|
+
# DEFAULT_GEMINI_MODEL=gemini-2.5-flash-image
|
|
21
|
+
# DEFAULT_IMAGEN_MODEL=imagen-4-ultra
|
|
22
|
+
|
|
23
|
+
# Optional: Request settings
|
|
24
|
+
# REQUEST_TIMEOUT=60
|
|
25
|
+
# MAX_BATCH_SIZE=8
|
|
26
|
+
# MAX_RETRIES=3
|
|
27
|
+
|
|
28
|
+
# Optional: Default generation settings
|
|
29
|
+
# DEFAULT_ASPECT_RATIO=1:1
|
|
30
|
+
# DEFAULT_OUTPUT_FORMAT=png
|
|
31
|
+
|
|
32
|
+
# Optional: Logging
|
|
33
|
+
# LOG_LEVEL=INFO
|
|
34
|
+
# LOG_FORMAT=standard
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# GitHub Actions Workflows
|
|
2
|
+
|
|
3
|
+
## Publish to PyPI
|
|
4
|
+
|
|
5
|
+
The `publish.yml` workflow automatically versions and publishes the package to PyPI.
|
|
6
|
+
|
|
7
|
+
### Automatic Versioning
|
|
8
|
+
|
|
9
|
+
The workflow automatically increments the version based on commit messages:
|
|
10
|
+
|
|
11
|
+
- **Patch bump** (default): `1.0.0` → `1.0.1`
|
|
12
|
+
- Used for bug fixes and minor changes
|
|
13
|
+
- No special keyword needed
|
|
14
|
+
|
|
15
|
+
- **Minor bump**: `1.0.0` → `1.1.0`
|
|
16
|
+
- Add `[minor]` to your commit message
|
|
17
|
+
- Used for new features
|
|
18
|
+
|
|
19
|
+
- **Major bump**: `1.0.0` → `2.0.0`
|
|
20
|
+
- Add `[major]` to your commit message
|
|
21
|
+
- Used for breaking changes
|
|
22
|
+
|
|
23
|
+
### Examples
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# Patch version (1.0.0 → 1.0.1)
|
|
27
|
+
git commit -m "Fix image saving bug"
|
|
28
|
+
git push origin main
|
|
29
|
+
|
|
30
|
+
# Minor version (1.0.0 → 1.1.0)
|
|
31
|
+
git commit -m "[minor] Add support for new aspect ratios"
|
|
32
|
+
git push origin main
|
|
33
|
+
|
|
34
|
+
# Major version (1.0.0 → 2.0.0)
|
|
35
|
+
git commit -m "[major] Complete API redesign with breaking changes"
|
|
36
|
+
git push origin main
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Manual Trigger
|
|
40
|
+
|
|
41
|
+
You can also manually trigger a release from the GitHub Actions tab:
|
|
42
|
+
|
|
43
|
+
1. Go to Actions → Publish to PyPI
|
|
44
|
+
2. Click "Run workflow"
|
|
45
|
+
3. Select the version bump type (major/minor/patch)
|
|
46
|
+
4. Click "Run workflow"
|
|
47
|
+
|
|
48
|
+
### What Happens
|
|
49
|
+
|
|
50
|
+
When you push to main:
|
|
51
|
+
|
|
52
|
+
1. ✅ Detects version bump type from commit message
|
|
53
|
+
2. ✅ Increments version in `pyproject.toml` and `src/__init__.py`
|
|
54
|
+
3. ✅ Commits the version bump with `[skip ci]` to avoid infinite loops
|
|
55
|
+
4. ✅ Creates a git tag (e.g., `v1.0.1`)
|
|
56
|
+
5. ✅ Builds the Python package
|
|
57
|
+
6. ✅ Publishes to PyPI using `PYPI_API_TOKEN` secret
|
|
58
|
+
7. ✅ Creates a GitHub Release with changelog
|
|
59
|
+
|
|
60
|
+
### Requirements
|
|
61
|
+
|
|
62
|
+
- `PYPI_API_TOKEN` secret must be configured in repository settings
|
|
63
|
+
- Python 3.11+ for building
|
|
64
|
+
- uv for fast builds and dependency management
|
|
65
|
+
|
|
66
|
+
### Skipping CI
|
|
67
|
+
|
|
68
|
+
To prevent the workflow from running on a commit, add `[skip ci]` to the commit message:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
git commit -m "Update README [skip ci]"
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
This is automatically added to version bump commits to prevent infinite loops.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
name: Claude Code Review
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
types: [opened, synchronize]
|
|
6
|
+
# Optional: Only run on specific file changes
|
|
7
|
+
# paths:
|
|
8
|
+
# - "src/**/*.ts"
|
|
9
|
+
# - "src/**/*.tsx"
|
|
10
|
+
# - "src/**/*.js"
|
|
11
|
+
# - "src/**/*.jsx"
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
claude-review:
|
|
15
|
+
# Optional: Filter by PR author
|
|
16
|
+
# if: |
|
|
17
|
+
# github.event.pull_request.user.login == 'external-contributor' ||
|
|
18
|
+
# github.event.pull_request.user.login == 'new-developer' ||
|
|
19
|
+
# github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR'
|
|
20
|
+
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
permissions:
|
|
23
|
+
contents: read
|
|
24
|
+
pull-requests: read
|
|
25
|
+
issues: read
|
|
26
|
+
id-token: write
|
|
27
|
+
|
|
28
|
+
steps:
|
|
29
|
+
- name: Checkout repository
|
|
30
|
+
uses: actions/checkout@v4
|
|
31
|
+
with:
|
|
32
|
+
fetch-depth: 1
|
|
33
|
+
|
|
34
|
+
- name: Run Claude Code Review
|
|
35
|
+
id: claude-review
|
|
36
|
+
uses: anthropics/claude-code-action@v1
|
|
37
|
+
with:
|
|
38
|
+
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
|
|
39
|
+
prompt: |
|
|
40
|
+
REPO: ${{ github.repository }}
|
|
41
|
+
PR NUMBER: ${{ github.event.pull_request.number }}
|
|
42
|
+
|
|
43
|
+
Please review this pull request and provide feedback on:
|
|
44
|
+
- Code quality and best practices
|
|
45
|
+
- Potential bugs or issues
|
|
46
|
+
- Performance considerations
|
|
47
|
+
- Security concerns
|
|
48
|
+
- Test coverage
|
|
49
|
+
|
|
50
|
+
Use the repository's CLAUDE.md for guidance on style and conventions. Be constructive and helpful in your feedback.
|
|
51
|
+
|
|
52
|
+
Use `gh pr comment` with your Bash tool to leave your review as a comment on the PR.
|
|
53
|
+
|
|
54
|
+
# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
|
|
55
|
+
# or https://docs.claude.com/en/docs/claude-code/cli-reference for available options
|
|
56
|
+
claude_args: '--allowed-tools "Bash(gh issue view:*),Bash(gh search:*),Bash(gh issue list:*),Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*),Bash(gh pr list:*)"'
|
|
57
|
+
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
name: Claude Code
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
issue_comment:
|
|
5
|
+
types: [created]
|
|
6
|
+
pull_request_review_comment:
|
|
7
|
+
types: [created]
|
|
8
|
+
issues:
|
|
9
|
+
types: [opened, assigned]
|
|
10
|
+
pull_request_review:
|
|
11
|
+
types: [submitted]
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
claude:
|
|
15
|
+
if: |
|
|
16
|
+
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
|
|
17
|
+
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
|
|
18
|
+
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
|
|
19
|
+
(github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
|
|
20
|
+
runs-on: ubuntu-latest
|
|
21
|
+
permissions:
|
|
22
|
+
contents: read
|
|
23
|
+
pull-requests: read
|
|
24
|
+
issues: read
|
|
25
|
+
id-token: write
|
|
26
|
+
actions: read # Required for Claude to read CI results on PRs
|
|
27
|
+
steps:
|
|
28
|
+
- name: Checkout repository
|
|
29
|
+
uses: actions/checkout@v4
|
|
30
|
+
with:
|
|
31
|
+
fetch-depth: 1
|
|
32
|
+
|
|
33
|
+
- name: Run Claude Code
|
|
34
|
+
id: claude
|
|
35
|
+
uses: anthropics/claude-code-action@v1
|
|
36
|
+
with:
|
|
37
|
+
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
|
|
38
|
+
|
|
39
|
+
# This is an optional setting that allows Claude to read CI results on PRs
|
|
40
|
+
additional_permissions: |
|
|
41
|
+
actions: read
|
|
42
|
+
|
|
43
|
+
# Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it.
|
|
44
|
+
# prompt: 'Update the pull request description to include a summary of changes.'
|
|
45
|
+
|
|
46
|
+
# Optional: Add claude_args to customize behavior and configuration
|
|
47
|
+
# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
|
|
48
|
+
# or https://docs.claude.com/en/docs/claude-code/cli-reference for available options
|
|
49
|
+
# claude_args: '--allowed-tools Bash(gh pr:*)'
|
|
50
|
+
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
inputs:
|
|
9
|
+
version_bump:
|
|
10
|
+
description: 'Version bump type'
|
|
11
|
+
required: false
|
|
12
|
+
default: 'patch'
|
|
13
|
+
type: choice
|
|
14
|
+
options:
|
|
15
|
+
- major
|
|
16
|
+
- minor
|
|
17
|
+
- patch
|
|
18
|
+
|
|
19
|
+
jobs:
|
|
20
|
+
publish:
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
permissions:
|
|
23
|
+
contents: write
|
|
24
|
+
|
|
25
|
+
steps:
|
|
26
|
+
- name: Checkout code
|
|
27
|
+
uses: actions/checkout@v4
|
|
28
|
+
with:
|
|
29
|
+
fetch-depth: 0
|
|
30
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
|
31
|
+
|
|
32
|
+
- name: Set up Python
|
|
33
|
+
uses: actions/setup-python@v5
|
|
34
|
+
with:
|
|
35
|
+
python-version: '3.11'
|
|
36
|
+
|
|
37
|
+
- name: Install uv
|
|
38
|
+
uses: astral-sh/setup-uv@v4
|
|
39
|
+
|
|
40
|
+
- name: Install dependencies
|
|
41
|
+
run: |
|
|
42
|
+
uv pip install --system toml packaging
|
|
43
|
+
|
|
44
|
+
- name: Determine version bump type
|
|
45
|
+
id: bump_type
|
|
46
|
+
run: |
|
|
47
|
+
# Check if manual workflow dispatch
|
|
48
|
+
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
|
|
49
|
+
echo "type=${{ inputs.version_bump }}" >> $GITHUB_OUTPUT
|
|
50
|
+
else
|
|
51
|
+
# Check commit message for version bump indicators
|
|
52
|
+
COMMIT_MSG=$(git log -1 --pretty=%B)
|
|
53
|
+
if echo "$COMMIT_MSG" | grep -iq "\[major\]"; then
|
|
54
|
+
echo "type=major" >> $GITHUB_OUTPUT
|
|
55
|
+
elif echo "$COMMIT_MSG" | grep -iq "\[minor\]"; then
|
|
56
|
+
echo "type=minor" >> $GITHUB_OUTPUT
|
|
57
|
+
else
|
|
58
|
+
echo "type=patch" >> $GITHUB_OUTPUT
|
|
59
|
+
fi
|
|
60
|
+
fi
|
|
61
|
+
|
|
62
|
+
- name: Bump version
|
|
63
|
+
id: version
|
|
64
|
+
run: |
|
|
65
|
+
python << 'EOF'
|
|
66
|
+
import os
|
|
67
|
+
import toml
|
|
68
|
+
import sys
|
|
69
|
+
from packaging import version
|
|
70
|
+
|
|
71
|
+
# Read current version
|
|
72
|
+
with open('pyproject.toml', 'r') as f:
|
|
73
|
+
data = toml.load(f)
|
|
74
|
+
|
|
75
|
+
current = version.parse(data['project']['version'])
|
|
76
|
+
bump_type = "${{ steps.bump_type.outputs.type }}"
|
|
77
|
+
|
|
78
|
+
# Calculate new version
|
|
79
|
+
if bump_type == 'major':
|
|
80
|
+
new_version = f"{current.major + 1}.0.0"
|
|
81
|
+
elif bump_type == 'minor':
|
|
82
|
+
new_version = f"{current.major}.{current.minor + 1}.0"
|
|
83
|
+
else: # patch
|
|
84
|
+
new_version = f"{current.major}.{current.minor}.{current.micro + 1}"
|
|
85
|
+
|
|
86
|
+
# Update pyproject.toml
|
|
87
|
+
data['project']['version'] = new_version
|
|
88
|
+
with open('pyproject.toml', 'w') as f:
|
|
89
|
+
toml.dump(data, f)
|
|
90
|
+
|
|
91
|
+
# Update src/__init__.py
|
|
92
|
+
with open('src/__init__.py', 'r') as f:
|
|
93
|
+
content = f.read()
|
|
94
|
+
|
|
95
|
+
content = content.replace(
|
|
96
|
+
f'__version__ = "{current}"',
|
|
97
|
+
f'__version__ = "{new_version}"'
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
with open('src/__init__.py', 'w') as f:
|
|
101
|
+
f.write(content)
|
|
102
|
+
|
|
103
|
+
print(f"new_version={new_version}")
|
|
104
|
+
with open(os.environ['GITHUB_OUTPUT'], 'a') as f:
|
|
105
|
+
f.write(f"new_version={new_version}\n")
|
|
106
|
+
f.write(f"old_version={current}\n")
|
|
107
|
+
EOF
|
|
108
|
+
|
|
109
|
+
- name: Commit version bump
|
|
110
|
+
run: |
|
|
111
|
+
git config --local user.email "github-actions[bot]@users.noreply.github.com"
|
|
112
|
+
git config --local user.name "github-actions[bot]"
|
|
113
|
+
git add pyproject.toml src/__init__.py
|
|
114
|
+
git commit -m "Bump version: ${{ steps.version.outputs.old_version }} → ${{ steps.version.outputs.new_version }} [skip ci]"
|
|
115
|
+
git tag -a "v${{ steps.version.outputs.new_version }}" -m "Release v${{ steps.version.outputs.new_version }}"
|
|
116
|
+
|
|
117
|
+
- name: Push changes
|
|
118
|
+
uses: ad-m/github-push-action@master
|
|
119
|
+
with:
|
|
120
|
+
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
121
|
+
branch: main
|
|
122
|
+
tags: true
|
|
123
|
+
|
|
124
|
+
- name: Build package
|
|
125
|
+
run: |
|
|
126
|
+
uv build
|
|
127
|
+
|
|
128
|
+
- name: Publish to PyPI
|
|
129
|
+
env:
|
|
130
|
+
TWINE_USERNAME: __token__
|
|
131
|
+
TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
|
|
132
|
+
run: |
|
|
133
|
+
uv pip install --system twine
|
|
134
|
+
twine upload dist/*
|
|
135
|
+
|
|
136
|
+
- name: Create GitHub Release
|
|
137
|
+
uses: softprops/action-gh-release@v1
|
|
138
|
+
with:
|
|
139
|
+
tag_name: v${{ steps.version.outputs.new_version }}
|
|
140
|
+
name: Release v${{ steps.version.outputs.new_version }}
|
|
141
|
+
body: |
|
|
142
|
+
## Changes in v${{ steps.version.outputs.new_version }}
|
|
143
|
+
|
|
144
|
+
**Version bump:** ${{ steps.bump_type.outputs.type }}
|
|
145
|
+
**Previous version:** ${{ steps.version.outputs.old_version }}
|
|
146
|
+
|
|
147
|
+
### Installation
|
|
148
|
+
```bash
|
|
149
|
+
pip install ultimate-gemini-mcp==${{ steps.version.outputs.new_version }}
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Or with uv:
|
|
153
|
+
```bash
|
|
154
|
+
uvx ultimate-gemini-mcp@${{ steps.version.outputs.new_version }}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
See the [README](https://github.com/${{ github.repository }}/blob/main/README.md) for full documentation.
|
|
158
|
+
draft: false
|
|
159
|
+
prerelease: false
|
|
160
|
+
env:
|
|
161
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
name: Tests and Linting
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
push:
|
|
8
|
+
branches:
|
|
9
|
+
- main
|
|
10
|
+
paths-ignore:
|
|
11
|
+
- '**.md'
|
|
12
|
+
- '.github/workflows/publish.yml'
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
lint:
|
|
16
|
+
name: Lint Code
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
|
|
19
|
+
steps:
|
|
20
|
+
- name: Checkout code
|
|
21
|
+
uses: actions/checkout@v4
|
|
22
|
+
|
|
23
|
+
- name: Set up Python
|
|
24
|
+
uses: actions/setup-python@v5
|
|
25
|
+
with:
|
|
26
|
+
python-version: '3.11'
|
|
27
|
+
|
|
28
|
+
- name: Install uv
|
|
29
|
+
uses: astral-sh/setup-uv@v4
|
|
30
|
+
|
|
31
|
+
- name: Install dependencies
|
|
32
|
+
run: |
|
|
33
|
+
uv pip install --system ruff mypy
|
|
34
|
+
|
|
35
|
+
- name: Run ruff format check
|
|
36
|
+
run: ruff format --check .
|
|
37
|
+
|
|
38
|
+
- name: Run ruff linter
|
|
39
|
+
run: ruff check .
|
|
40
|
+
|
|
41
|
+
- name: Run type checking
|
|
42
|
+
run: mypy src/ --install-types --non-interactive || true
|
|
43
|
+
|
|
44
|
+
validate-structure:
|
|
45
|
+
name: Validate Package Structure
|
|
46
|
+
runs-on: ubuntu-latest
|
|
47
|
+
|
|
48
|
+
steps:
|
|
49
|
+
- name: Checkout code
|
|
50
|
+
uses: actions/checkout@v4
|
|
51
|
+
|
|
52
|
+
- name: Set up Python
|
|
53
|
+
uses: actions/setup-python@v5
|
|
54
|
+
with:
|
|
55
|
+
python-version: '3.11'
|
|
56
|
+
|
|
57
|
+
- name: Install uv
|
|
58
|
+
uses: astral-sh/setup-uv@v4
|
|
59
|
+
|
|
60
|
+
- name: Validate pyproject.toml
|
|
61
|
+
run: |
|
|
62
|
+
uv pip install --system toml
|
|
63
|
+
python -c "import toml; toml.load('pyproject.toml')"
|
|
64
|
+
|
|
65
|
+
- name: Check required files
|
|
66
|
+
run: |
|
|
67
|
+
test -f README.md || (echo "Missing README.md" && exit 1)
|
|
68
|
+
test -f LICENSE || (echo "Missing LICENSE" && exit 1)
|
|
69
|
+
test -f pyproject.toml || (echo "Missing pyproject.toml" && exit 1)
|
|
70
|
+
test -f src/__init__.py || (echo "Missing src/__init__.py" && exit 1)
|
|
71
|
+
test -f src/server.py || (echo "Missing src/server.py" && exit 1)
|
|
72
|
+
|
|
73
|
+
- name: Test package build
|
|
74
|
+
run: |
|
|
75
|
+
uv build
|
|
76
|
+
ls -lh dist/
|
|
77
|
+
|
|
78
|
+
test-install:
|
|
79
|
+
name: Test Installation
|
|
80
|
+
runs-on: ubuntu-latest
|
|
81
|
+
strategy:
|
|
82
|
+
matrix:
|
|
83
|
+
python-version: ['3.11', '3.12']
|
|
84
|
+
|
|
85
|
+
steps:
|
|
86
|
+
- name: Checkout code
|
|
87
|
+
uses: actions/checkout@v4
|
|
88
|
+
|
|
89
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
90
|
+
uses: actions/setup-python@v5
|
|
91
|
+
with:
|
|
92
|
+
python-version: ${{ matrix.python-version }}
|
|
93
|
+
|
|
94
|
+
- name: Install uv
|
|
95
|
+
uses: astral-sh/setup-uv@v4
|
|
96
|
+
|
|
97
|
+
- name: Install package
|
|
98
|
+
run: |
|
|
99
|
+
uv pip install --system .
|
|
100
|
+
|
|
101
|
+
- name: Verify installation
|
|
102
|
+
run: |
|
|
103
|
+
python -c "import src; print(f'Version: {src.__version__}')"
|
|
104
|
+
python -c "from src.config import get_settings; print('Config module OK')"
|
|
105
|
+
python -c "from src.services import ImageService; print('Services module OK')"
|
|
106
|
+
python -c "from src.tools import generate_image_tool; print('Tools module OK')"
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.so
|
|
6
|
+
.Python
|
|
7
|
+
build/
|
|
8
|
+
develop-eggs/
|
|
9
|
+
dist/
|
|
10
|
+
downloads/
|
|
11
|
+
eggs/
|
|
12
|
+
.eggs/
|
|
13
|
+
lib/
|
|
14
|
+
lib64/
|
|
15
|
+
parts/
|
|
16
|
+
sdist/
|
|
17
|
+
var/
|
|
18
|
+
wheels/
|
|
19
|
+
*.egg-info/
|
|
20
|
+
.installed.cfg
|
|
21
|
+
*.egg
|
|
22
|
+
|
|
23
|
+
# Virtual environments
|
|
24
|
+
venv/
|
|
25
|
+
env/
|
|
26
|
+
ENV/
|
|
27
|
+
.venv
|
|
28
|
+
|
|
29
|
+
# uv
|
|
30
|
+
.uv/
|
|
31
|
+
uv.lock
|
|
32
|
+
|
|
33
|
+
# IDEs
|
|
34
|
+
.vscode/
|
|
35
|
+
.idea/
|
|
36
|
+
*.swp
|
|
37
|
+
*.swo
|
|
38
|
+
*~
|
|
39
|
+
.DS_Store
|
|
40
|
+
|
|
41
|
+
# Testing
|
|
42
|
+
.pytest_cache/
|
|
43
|
+
.coverage
|
|
44
|
+
htmlcov/
|
|
45
|
+
.tox/
|
|
46
|
+
.mypy_cache/
|
|
47
|
+
.ruff_cache/
|
|
48
|
+
|
|
49
|
+
# Environment
|
|
50
|
+
.env
|
|
51
|
+
.env.local
|
|
52
|
+
.env.*.local
|
|
53
|
+
|
|
54
|
+
# Generated images
|
|
55
|
+
generated_images/
|
|
56
|
+
*.png
|
|
57
|
+
*.jpg
|
|
58
|
+
*.jpeg
|
|
59
|
+
*.webp
|
|
60
|
+
|
|
61
|
+
# Logs
|
|
62
|
+
*.log
|
|
63
|
+
logs/
|
|
64
|
+
|
|
65
|
+
# FastMCP
|
|
66
|
+
.fastmcp/
|