Skip to content

Commit 0e7923e

Browse files
Merge pull request #1 from FrontierDevelopmentLab/prepare-public-release
Prepare repo for public release
2 parents 236b1b0 + 9155ce9 commit 0e7923e

43 files changed

Lines changed: 7338 additions & 1851 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.env.example

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# Copy this file to ``.env`` and fill in values for your environment.
2+
# ``python-dotenv`` is loaded by ``gee_mcp.server.auth`` on import, so any
3+
# variables set here will be picked up automatically when the server
4+
# starts.
5+
6+
# ----------------------------------------------------------------------
7+
# Gemini (pick ONE of the two paths below)
8+
# ----------------------------------------------------------------------
9+
10+
# Path A — Gemini Developer API key
11+
# GEMINI_API_KEY=
12+
# GOOGLE_API_KEY=
13+
14+
# Path B — Vertex AI project (requires ``gcloud auth
15+
# application-default login`` to have been run)
16+
# VERTEXAI_PROJECT=your-vertexai-project
17+
# VERTEXAI_LOCATION=global
18+
19+
# ----------------------------------------------------------------------
20+
# Google Earth Engine
21+
# ----------------------------------------------------------------------
22+
#
23+
# Auth is delegated to ``ee.Initialize`` which walks the standard
24+
# Google Cloud credential chain (GOOGLE_APPLICATION_CREDENTIALS,
25+
# gcloud ADC, the ``earthengine authenticate`` cache, GCE metadata).
26+
# You typically just need GEE_PROJECT after running
27+
# ``earthengine authenticate`` or ``gcloud auth application-default login``.
28+
29+
# Required: GEE project id used for ``ee.Initialize(project=...)``.
30+
GEE_PROJECT=your-gee-project
31+
32+
# Optional: path to a service-account JSON key file. Set this when
33+
# running headlessly (CI, Cloud Run, etc.) without interactive
34+
# authentication.
35+
# GOOGLE_APPLICATION_CREDENTIALS=/absolute/path/to/service-account.json
36+
37+
# ----------------------------------------------------------------------
38+
# Test / CI escape hatch
39+
# ----------------------------------------------------------------------
40+
41+
# Set to ``1`` to skip GEE auth entirely on import. Used by the test
42+
# suite to avoid hitting the auth chain in CI. Do not set for normal
43+
# use.
44+
# GEE_SKIP_AUTH=1

.github/workflows/main.yml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
on: push
2+
jobs:
3+
test:
4+
strategy:
5+
matrix:
6+
python-version: ['3.11', '3.12', '3.13', '3.14']
7+
defaults:
8+
run:
9+
shell: bash
10+
runs-on: ubuntu-latest
11+
steps:
12+
- uses: actions/checkout@v4
13+
- name: Set up Python ${{ matrix.python-version }}
14+
uses: actions/setup-python@v5
15+
with:
16+
python-version: ${{ matrix.python-version }}
17+
- name: Install Poetry
18+
uses: snok/install-poetry@v1
19+
with:
20+
virtualenvs-create: true
21+
virtualenvs-in-project: true
22+
installer-parallel: true
23+
- name: Cache Poetry dependencies
24+
uses: actions/cache@v4
25+
with:
26+
path: .venv
27+
key: venv-${{ runner.os }}-${{ matrix.python-version }}-${{ hashFiles('poetry.lock') }}
28+
restore-keys: |
29+
venv-${{ runner.os }}-${{ matrix.python-version }}-
30+
- name: Install dependencies
31+
run: |
32+
poetry install --no-interaction
33+
- name: Running pre-commit
34+
uses: pre-commit/action@v3.0.1

.gitignore

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
# Byte-compiled / optimized / DLL files
2+
__pycache__/
3+
*.py[codz]
4+
*$py.class
5+
6+
# C extensions
7+
*.so
8+
9+
# Distribution / packaging
10+
.Python
11+
build/
12+
develop-eggs/
13+
dist/
14+
downloads/
15+
download/
16+
eggs/
17+
.eggs/
18+
lib64/
19+
parts/
20+
sdist/
21+
var/
22+
wheels/
23+
share/python-wheels/
24+
*.egg-info/
25+
.installed.cfg
26+
*.egg
27+
MANIFEST
28+
29+
# PyInstaller
30+
*.manifest
31+
*.spec
32+
33+
# Installer logs
34+
pip-log.txt
35+
pip-delete-this-directory.txt
36+
37+
# Unit test / coverage reports
38+
htmlcov/
39+
.tox/
40+
.nox/
41+
.coverage
42+
.coverage.*
43+
.cache
44+
nosetests.xml
45+
coverage.xml
46+
*.cover
47+
*.py.cover
48+
.hypothesis/
49+
.pytest_cache/
50+
cover/
51+
52+
# Logs
53+
*.log
54+
55+
# Translations
56+
*.mo
57+
*.pot
58+
59+
# Sphinx documentation
60+
docs/_build/
61+
62+
# PyBuilder
63+
.pybuilder/
64+
target/
65+
66+
# Jupyter Notebook
67+
.ipynb_checkpoints
68+
69+
# IPython
70+
profile_default/
71+
ipython_config.py
72+
73+
# Environments
74+
.env
75+
.envrc
76+
.venv
77+
env/
78+
venv/
79+
ENV/
80+
env.bak/
81+
venv.bak/
82+
83+
# Tooling caches
84+
.mypy_cache/
85+
.dmypy.json
86+
dmypy.json
87+
.pyre/
88+
.pytype/
89+
.ruff_cache/
90+
91+
# Editors
92+
.vscode/
93+
.idea/
94+
95+
# Project-specific
96+
.config/
97+
*.tif
98+
download/
99+
CLAUDE.md

.pre-commit-config.yaml

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
repos:
2+
- repo: local
3+
hooks:
4+
- id: detect-secrets
5+
name: Detect secrets
6+
language: system
7+
entry: poetry run detect-secrets-hook
8+
args: ['--baseline', '.secrets.baseline']
9+
exclude: '\.ipynb$'
10+
- id: autoflake
11+
name: autoflake
12+
language: system
13+
"types": [python]
14+
require_serial: true
15+
entry: poetry run autoflake
16+
args:
17+
- "--in-place"
18+
- "--remove-unused-variables"
19+
- "--recursive"
20+
- id: black
21+
name: black
22+
entry: poetry run black .
23+
language: system
24+
types: [python]
25+
- id: isort
26+
name: isort
27+
entry: poetry run isort .
28+
language: system
29+
exclude: |
30+
(?x)^(
31+
.+\.js$|
32+
.+\.jsx$|
33+
.+\.css$|
34+
.+\.html$|
35+
.+\.json$|
36+
.+\.md$
37+
)$
38+
- id: mypy
39+
name: mypy
40+
entry: poetry run mypy src tests
41+
pass_filenames: false
42+
language: system
43+
args:
44+
- "--ignore-missing-imports"
45+
- "--warn-unused-ignores"
46+
- id: pylint
47+
name: pylint
48+
entry: poetry run pylint src tests
49+
pass_filenames: false
50+
language: system
51+
args:
52+
- "--enable-useless-suppression"
53+
- id: pytest-with-coverage
54+
name: Run pytest with coverage
55+
entry: poetry run coverage run -m pytest --testdox tests
56+
language: system
57+
pass_filenames: false
58+
always_run: true
59+
- id: coverage-report
60+
name: Coverage report
61+
entry: poetry run coverage report
62+
language: system
63+
pass_filenames: false
64+
verbose: true
65+
args:
66+
- "--fail-under=20"
67+
- "--skip-empty"
68+
- "--skip-covered"
69+
- "--show-missing"

0 commit comments

Comments
 (0)