|
1
|
[project] |
|
2
|
name = "fossilrepo" |
|
3
|
version = "0.1.0" |
|
4
|
description = "Self-hosted Fossil SCM forge — code hosting, issues, wiki, and continuous backups in one command." |
|
5
|
license = "MIT" |
|
6
|
requires-python = ">=3.12" |
|
7
|
readme = "README.md" |
|
8
|
authors = [ |
|
9
|
{ name = "CONFLICT LLC", email = "[email protected]" }, |
|
10
|
] |
|
11
|
keywords = ["fossil", "scm", "vcs", "code-hosting", "self-hosted", "forge"] |
|
12
|
classifiers = [ |
|
13
|
"Development Status :: 3 - Alpha", |
|
14
|
"Environment :: Web Environment", |
|
15
|
"Framework :: Django", |
|
16
|
"Framework :: Django :: 5.1", |
|
17
|
"Intended Audience :: Developers", |
|
18
|
"Intended Audience :: System Administrators", |
|
19
|
"License :: OSI Approved :: MIT License", |
|
20
|
"Operating System :: POSIX :: Linux", |
|
21
|
"Programming Language :: Python :: 3.12", |
|
22
|
"Topic :: Software Development :: Version Control", |
|
23
|
] |
|
24
|
dependencies = [ |
|
25
|
"django>=5.1,<6.0", |
|
26
|
"psycopg2-binary>=2.9", |
|
27
|
"redis>=5.0", |
|
28
|
"celery[redis]>=5.4", |
|
29
|
"django-celery-results>=2.5", |
|
30
|
"django-celery-beat>=2.7", |
|
31
|
"django-import-export>=4.0", |
|
32
|
"django-simple-history>=3.7", |
|
33
|
"django-ratelimit>=4.1", |
|
34
|
"django-health-check>=3.18", |
|
35
|
"django-constance[database]>=4.1", |
|
36
|
"django-storages[s3]>=1.14", |
|
37
|
"django-ses>=4.1", |
|
38
|
"django-cors-headers>=4.4", |
|
39
|
"gunicorn>=23.0", |
|
40
|
"whitenoise>=6.7", |
|
41
|
"boto3>=1.35", |
|
42
|
"sentry-sdk[django]>=2.14", |
|
43
|
"click>=8.1", |
|
44
|
"rich>=13.0", |
|
45
|
"markdown>=3.6", |
|
46
|
"requests>=2.31", |
|
47
|
"cryptography>=43.0", |
|
48
|
"mcp>=1.0", |
|
49
|
] |
|
50
|
|
|
51
|
[project.urls] |
|
52
|
Homepage = "https://fossilrepo.dev" |
|
53
|
Documentation = "https://fossilrepo.dev" |
|
54
|
Repository = "https://github.com/ConflictHQ/fossilrepo" |
|
55
|
Issues = "https://github.com/ConflictHQ/fossilrepo/issues" |
|
56
|
Demo = "https://fossilrepo.io" |
|
57
|
|
|
58
|
[project.scripts] |
|
59
|
fossilrepo-ctl = "ctl.main:cli" |
|
60
|
fossilrepo-mcp = "mcp_server.__main__:run" |
|
61
|
|
|
62
|
[project.optional-dependencies] |
|
63
|
dev = [ |
|
64
|
"ruff>=0.7", |
|
65
|
"pytest>=8.3", |
|
66
|
"pytest-django>=4.9", |
|
67
|
"pytest-cov>=5.0", |
|
68
|
"coverage>=7.6", |
|
69
|
"freezegun>=1.4", |
|
70
|
"pip-audit>=2.7", |
|
71
|
] |
|
72
|
|
|
73
|
[tool.ruff] |
|
74
|
target-version = "py312" |
|
75
|
line-length = 140 |
|
76
|
|
|
77
|
[tool.ruff.lint] |
|
78
|
select = ["E", "F", "I", "W", "UP", "B", "SIM", "N"] |
|
79
|
ignore = ["E501"] |
|
80
|
|
|
81
|
[tool.ruff.lint.isort] |
|
82
|
known-first-party = ["config", "core", "accounts", "organization", "projects", "pages", "fossil", "testdata", "ctl", "mcp_server"] |
|
83
|
|
|
84
|
[tool.ruff.format] |
|
85
|
quote-style = "double" |
|
86
|
|
|
87
|
[tool.pytest.ini_options] |
|
88
|
DJANGO_SETTINGS_MODULE = "config.settings" |
|
89
|
python_files = ["tests.py", "test_*.py"] |
|
90
|
python_classes = ["Test*"] |
|
91
|
python_functions = ["test_*"] |
|
92
|
addopts = "-v --tb=short --strict-markers" |
|
93
|
|
|
94
|
[tool.coverage.run] |
|
95
|
source = ["core", "accounts", "organization", "projects", "pages", "fossil"] |
|
96
|
omit = ["*/migrations/*", "*/tests/*", "*/testdata/*", "manage.py", "startup.py"] |
|
97
|
|
|
98
|
[tool.coverage.report] |
|
99
|
fail_under = 80 |
|
100
|
show_missing = true |
|
101
|
|
|
102
|
[tool.hatch.build.targets.wheel] |
|
103
|
packages = ["ctl", "core", "accounts", "organization", "projects", "pages", "fossil", "config", "mcp_server"] |
|
104
|
|
|
105
|
[build-system] |
|
106
|
requires = ["hatchling"] |
|
107
|
build-backend = "hatchling.build" |
|
108
|
|