syncgate 0.8.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.
- syncgate-0.8.1/.github/workflows/ci.yml +97 -0
- syncgate-0.8.1/.github/workflows/daily-promo.yml +44 -0
- syncgate-0.8.1/.github/workflows/daily-promotion.yml +29 -0
- syncgate-0.8.1/.github/workflows/publish.yml +38 -0
- syncgate-0.8.1/.gitignore +16 -0
- syncgate-0.8.1/CHANGELOG.md +336 -0
- syncgate-0.8.1/CONTRIBUTING.md +92 -0
- syncgate-0.8.1/DEMO_OUTPUT.md +73 -0
- syncgate-0.8.1/DEMO_README.md +27 -0
- syncgate-0.8.1/HN_SUBMISSION.md +43 -0
- syncgate-0.8.1/HN_SUBMISSION_V2.md +51 -0
- syncgate-0.8.1/KANBAN.md +72 -0
- syncgate-0.8.1/LICENSE +21 -0
- syncgate-0.8.1/MARKETING.md +90 -0
- syncgate-0.8.1/PKG-INFO +158 -0
- syncgate-0.8.1/PROJECT.md +1197 -0
- syncgate-0.8.1/PROMO.md +91 -0
- syncgate-0.8.1/QUICK_START.md +84 -0
- syncgate-0.8.1/README.md +140 -0
- syncgate-0.8.1/REDDIT_POST.md +51 -0
- syncgate-0.8.1/RELEASE.md +98 -0
- syncgate-0.8.1/RELEASE_CHECKLIST.md +101 -0
- syncgate-0.8.1/USAGE.md +433 -0
- syncgate-0.8.1/ai_demo.py +97 -0
- syncgate-0.8.1/auto_promo.py +81 -0
- syncgate-0.8.1/cli_init.py +63 -0
- syncgate-0.8.1/demo.html +199 -0
- syncgate-0.8.1/demo.py +52 -0
- syncgate-0.8.1/demo_complete.py +123 -0
- syncgate-0.8.1/demo_v2.py +89 -0
- syncgate-0.8.1/devto-blog.md +79 -0
- syncgate-0.8.1/docs/config-design.md +38 -0
- syncgate-0.8.1/feedback-form.md +59 -0
- syncgate-0.8.1/hn-submission.txt +28 -0
- syncgate-0.8.1/outreach-template.md +65 -0
- syncgate-0.8.1/promote.sh.py +82 -0
- syncgate-0.8.1/pyproject.toml +56 -0
- syncgate-0.8.1/reddit-post.txt +39 -0
- syncgate-0.8.1/syncgate/__init__.py +3 -0
- syncgate-0.8.1/syncgate/ai/__init__.py +213 -0
- syncgate-0.8.1/syncgate/api.py +193 -0
- syncgate-0.8.1/syncgate/backend/__init__.py +8 -0
- syncgate-0.8.1/syncgate/backend/base.py +71 -0
- syncgate-0.8.1/syncgate/backend/ftp.py +138 -0
- syncgate-0.8.1/syncgate/backend/http.py +67 -0
- syncgate-0.8.1/syncgate/backend/local.py +70 -0
- syncgate-0.8.1/syncgate/backend/protocol.py +43 -0
- syncgate-0.8.1/syncgate/backend/s3.py +119 -0
- syncgate-0.8.1/syncgate/backend/sftp.py +137 -0
- syncgate-0.8.1/syncgate/backend/webdav.py +178 -0
- syncgate-0.8.1/syncgate/batch.py +193 -0
- syncgate-0.8.1/syncgate/cli.py +191 -0
- syncgate-0.8.1/syncgate/error_handler.py +216 -0
- syncgate-0.8.1/syncgate/gateway/__init__.py +5 -0
- syncgate-0.8.1/syncgate/gateway/gateway.py +84 -0
- syncgate-0.8.1/syncgate/monitor.py +193 -0
- syncgate-0.8.1/syncgate/utils.py +141 -0
- syncgate-0.8.1/syncgate/vfs/__init__.py +5 -0
- syncgate-0.8.1/syncgate/vfs/fs.py +153 -0
- syncgate-0.8.1/syncgate/vfs/optimized.py +323 -0
- syncgate-0.8.1/syncgate/vfs/streaming.py +303 -0
- syncgate-0.8.1/syncgate/webhook.py +99 -0
- syncgate-0.8.1/tests/__init__.py +6 -0
- syncgate-0.8.1/tests/benchmark_streaming.py +124 -0
- syncgate-0.8.1/tests/debug_list.py +25 -0
- syncgate-0.8.1/tests/test_ai.py +177 -0
- syncgate-0.8.1/tests/test_api.py +85 -0
- syncgate-0.8.1/tests/test_backend.py +112 -0
- syncgate-0.8.1/tests/test_batch.py +141 -0
- syncgate-0.8.1/tests/test_ftp.py +84 -0
- syncgate-0.8.1/tests/test_gateway.py +97 -0
- syncgate-0.8.1/tests/test_monitor.py +189 -0
- syncgate-0.8.1/tests/test_performance.py +117 -0
- syncgate-0.8.1/tests/test_streaming.py +216 -0
- syncgate-0.8.1/tests/test_vfs.py +82 -0
- syncgate-0.8.1/tests/test_webdav.py +107 -0
- syncgate-0.8.1/tests/test_webhook.py +193 -0
- syncgate-0.8.1/tweet.txt +7 -0
- syncgate-0.8.1/twitter-thread.md +60 -0
- syncgate-0.8.1/user-survey.md +46 -0
- syncgate-0.8.1/video-script.md +52 -0
- syncgate-0.8.1/virtual/test/file.txt.link +4 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
name: SyncGate CI/CD
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
paths-ignore:
|
|
7
|
+
- '**.md'
|
|
8
|
+
pull_request:
|
|
9
|
+
branches: [main]
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
test:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
strategy:
|
|
15
|
+
matrix:
|
|
16
|
+
python-version: ['3.10', '3.11', '3.12']
|
|
17
|
+
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@v4
|
|
20
|
+
|
|
21
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
22
|
+
uses: actions/setup-python@v5
|
|
23
|
+
with:
|
|
24
|
+
python-version: ${{ matrix.python-version }}
|
|
25
|
+
cache: 'pip'
|
|
26
|
+
|
|
27
|
+
- name: Install dependencies
|
|
28
|
+
run: |
|
|
29
|
+
python -m pip install --upgrade pip
|
|
30
|
+
pip install -e ".[dev]"
|
|
31
|
+
|
|
32
|
+
- name: Run tests
|
|
33
|
+
run: pytest -v
|
|
34
|
+
|
|
35
|
+
- name: Upload coverage
|
|
36
|
+
uses: codecov/codecov-action@v4
|
|
37
|
+
with:
|
|
38
|
+
files: ./coverage.xml
|
|
39
|
+
fail_ci_if_error: true
|
|
40
|
+
token: ${{ secrets.CODECOV_TOKEN }}
|
|
41
|
+
|
|
42
|
+
lint:
|
|
43
|
+
runs-on: ubuntu-latest
|
|
44
|
+
|
|
45
|
+
steps:
|
|
46
|
+
- uses: actions/checkout@v4
|
|
47
|
+
|
|
48
|
+
- name: Set up Python
|
|
49
|
+
uses: actions/setup-python@v5
|
|
50
|
+
with:
|
|
51
|
+
python-version: '3.12'
|
|
52
|
+
cache: 'pip'
|
|
53
|
+
|
|
54
|
+
- name: Install linting tools
|
|
55
|
+
run: |
|
|
56
|
+
pip install black mypy
|
|
57
|
+
|
|
58
|
+
- name: Check code formatting
|
|
59
|
+
run: black --check syncgate/ tests/
|
|
60
|
+
|
|
61
|
+
- name: Type checking
|
|
62
|
+
run: mypy syncgate/
|
|
63
|
+
|
|
64
|
+
build:
|
|
65
|
+
runs-on: ubuntu-latest
|
|
66
|
+
needs: [test, lint]
|
|
67
|
+
if: github.ref == 'refs/heads/main'
|
|
68
|
+
|
|
69
|
+
steps:
|
|
70
|
+
- uses: actions/checkout@v4
|
|
71
|
+
|
|
72
|
+
- name: Set up Python
|
|
73
|
+
uses: actions/setup-python@v5
|
|
74
|
+
with:
|
|
75
|
+
python-version: '3.12'
|
|
76
|
+
cache: 'pip'
|
|
77
|
+
|
|
78
|
+
- name: Build package
|
|
79
|
+
run: |
|
|
80
|
+
pip install build
|
|
81
|
+
python -m build
|
|
82
|
+
|
|
83
|
+
- name: Publish to PyPI
|
|
84
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
85
|
+
with:
|
|
86
|
+
password: ${{ secrets.PYPI_API_TOKEN }}
|
|
87
|
+
|
|
88
|
+
notify:
|
|
89
|
+
runs-on: ubuntu-latest
|
|
90
|
+
needs: [test, lint]
|
|
91
|
+
if: always()
|
|
92
|
+
|
|
93
|
+
steps:
|
|
94
|
+
- name: Send notification
|
|
95
|
+
run: |
|
|
96
|
+
echo "✅ Tests: ${{ needs.test.result }}"
|
|
97
|
+
echo "✅ Lint: ${{ needs.lint.result }}"
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
name: Daily SyncList Promotion
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
schedule:
|
|
5
|
+
- cron: '0 8 * * *' # 每天 8:00 UTC
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
promote:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
steps:
|
|
12
|
+
- uses: actions/checkout@v4
|
|
13
|
+
|
|
14
|
+
- name: Set up Python
|
|
15
|
+
uses: actions/setup-python@v5
|
|
16
|
+
with:
|
|
17
|
+
python-version: '3.11'
|
|
18
|
+
|
|
19
|
+
- name: Install dependencies
|
|
20
|
+
run: |
|
|
21
|
+
pip install requests
|
|
22
|
+
|
|
23
|
+
- name: Run auto promotion
|
|
24
|
+
env:
|
|
25
|
+
TWITTER_TOKEN: ${{ secrets.TWITTER_TOKEN }}
|
|
26
|
+
REDDIT_CLIENT_ID: ${{ secrets.REDDIT_CLIENT_ID }}
|
|
27
|
+
REDDIT_CLIENT_SECRET: ${{ secrets.REDDIT_CLIENT_SECRET }}
|
|
28
|
+
run: |
|
|
29
|
+
python auto_promo.py
|
|
30
|
+
|
|
31
|
+
- name: Post daily stats
|
|
32
|
+
run: |
|
|
33
|
+
echo "## 📊 SyncList 每日推广" >> $GITHUB_STEP_SUMMARY
|
|
34
|
+
echo "- 时间: $(date)" >> $GITHUB_STEP_SUMMARY
|
|
35
|
+
echo "- 任务: Twitter + Reddit 推广" >> $GITHUB_STEP_SUMMARY
|
|
36
|
+
echo "" >> $GITHUB_STEP_SUMMARY
|
|
37
|
+
echo "## 🔗 链接" >> $GITHUB_STEP_SUMMARY
|
|
38
|
+
echo "- GitHub: https://github.com/cyydark/syncgate" >> $GITHUB_STEP_SUMMARY
|
|
39
|
+
echo "- 演示: python3 ai_demo.py" >> $GITHUB_STEP_SUMMARY
|
|
40
|
+
echo "" >> $GITHUB_STEP_SUMMARY
|
|
41
|
+
echo "## 📝 待手动执行" >> $GITHUB_STEP_SUMMARY
|
|
42
|
+
echo "- [ ] 制作视频: video-script.md" >> $GITHUB_STEP_SUMMARY
|
|
43
|
+
echo "- [ ] 收集反馈: feedback-form.md" >> $GITHUB_STEP_SUMMARY
|
|
44
|
+
echo "- [ ] 提交 HN: hn-submission.txt" >> $GITHUB_STEP_SUMMARY
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
name: Daily Promotion
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
schedule:
|
|
5
|
+
- cron: '0 8 * * *' # 每天 8:00 UTC
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
promote:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
steps:
|
|
12
|
+
- name: Send reminder
|
|
13
|
+
run: |
|
|
14
|
+
echo "🤖 Auto-Company Promotion Reminder"
|
|
15
|
+
echo ""
|
|
16
|
+
echo "SyncGate v0.1.0 is live!"
|
|
17
|
+
echo "GitHub: https://github.com/cyydark/syncgate"
|
|
18
|
+
echo ""
|
|
19
|
+
echo "TODO today:"
|
|
20
|
+
echo "1. [ ] Share on Twitter/X"
|
|
21
|
+
echo "2. [ ] Submit to Hacker News"
|
|
22
|
+
echo "3. [ ] Post on Reddit"
|
|
23
|
+
echo "4. [ ] Share on LinkedIn"
|
|
24
|
+
echo ""
|
|
25
|
+
echo "Marketing assets ready:"
|
|
26
|
+
echo "- twitter-thread.md"
|
|
27
|
+
echo "- hn-submission.txt"
|
|
28
|
+
echo "- reddit-post.txt"
|
|
29
|
+
echo "- devto-blog.md"
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [created]
|
|
6
|
+
push:
|
|
7
|
+
branches:
|
|
8
|
+
- main
|
|
9
|
+
paths:
|
|
10
|
+
- 'syncgate/**'
|
|
11
|
+
- 'pyproject.toml'
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
pypi-publish:
|
|
15
|
+
name: Publish to PyPI
|
|
16
|
+
runs-on: ubuntu-latest
|
|
17
|
+
permissions:
|
|
18
|
+
id-token: write
|
|
19
|
+
contents: read
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@v4
|
|
22
|
+
with:
|
|
23
|
+
python-version: '3.11'
|
|
24
|
+
- name: Set up Python
|
|
25
|
+
uses: actions/setup-python@v5
|
|
26
|
+
with:
|
|
27
|
+
python-version: '3.11'
|
|
28
|
+
- name: Install dependencies
|
|
29
|
+
run: |
|
|
30
|
+
python -m pip install --upgrade pip
|
|
31
|
+
pip install build
|
|
32
|
+
- name: Build package
|
|
33
|
+
run: |
|
|
34
|
+
python -m build
|
|
35
|
+
- name: Publish to PyPI
|
|
36
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
37
|
+
with:
|
|
38
|
+
password: ${{ secrets.PYPI_API_TOKEN }}
|
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
# CHANGELOG
|
|
2
|
+
|
|
3
|
+
## [0.8.1] - 2025-01-20
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- **文档完善** - Cycle #38
|
|
8
|
+
- `USAGE.md` - 完整使用指南
|
|
9
|
+
- `QUICK_START.md` - 5 分钟快速开始
|
|
10
|
+
|
|
11
|
+
### Documentation
|
|
12
|
+
|
|
13
|
+
| 文档 | 说明 |
|
|
14
|
+
|------|------|
|
|
15
|
+
| README.md | 项目介绍 |
|
|
16
|
+
| QUICK_START.md | **5 分钟快速开始** |
|
|
17
|
+
| USAGE.md | **完整使用指南** |
|
|
18
|
+
| PROJECT.md | 架构设计 |
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## [0.8.0] - 2025-01-20
|
|
23
|
+
|
|
24
|
+
### Added
|
|
25
|
+
|
|
26
|
+
- **功能补齐** - Cycle #37
|
|
27
|
+
- `syncgate/batch.py` - 批量操作
|
|
28
|
+
- `syncgate/monitor.py` - 监控和统计
|
|
29
|
+
- `syncgate/error_handler.py` - 错误处理和重试
|
|
30
|
+
- `tests/test_batch.py` - 7 个测试
|
|
31
|
+
- `tests/test_monitor.py` - 12 个测试
|
|
32
|
+
|
|
33
|
+
### 新功能
|
|
34
|
+
|
|
35
|
+
| 模块 | 功能 |
|
|
36
|
+
|------|------|
|
|
37
|
+
| Batch | 批量创建/删除/验证链接 |
|
|
38
|
+
| Batch | 导入/导出配置 |
|
|
39
|
+
| Monitor | 统计收集和健康评分 |
|
|
40
|
+
| Monitor | 性能监控 |
|
|
41
|
+
| Error | 重试机制 |
|
|
42
|
+
| Error | 熔断器 |
|
|
43
|
+
| Error | 错误日志 |
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## [0.7.0] - 2025-01-20
|
|
48
|
+
|
|
49
|
+
### Added
|
|
50
|
+
|
|
51
|
+
- **Webhook 通知** - 支持外部通知
|
|
52
|
+
- `syncgate/webhook.py` - Webhook 管理器
|
|
53
|
+
- `tests/test_webhook.py` - 10 个测试
|
|
54
|
+
|
|
55
|
+
### Webhook 功能
|
|
56
|
+
|
|
57
|
+
| 功能 | 说明 |
|
|
58
|
+
|------|------|
|
|
59
|
+
| 事件通知 | link.created, link.deleted, validate |
|
|
60
|
+
| 多 webhook | 支持多个通知端点 |
|
|
61
|
+
| 事件过滤 | 只订阅需要的事件 |
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## [0.6.1] - 2025-01-20
|
|
66
|
+
|
|
67
|
+
### Added
|
|
68
|
+
|
|
69
|
+
- **推广执行** - Cycle #35
|
|
70
|
+
- `promote.sh.py` - 一键推广脚本
|
|
71
|
+
- `HN_SUBMISSION_V2.md` - HN 提交内容
|
|
72
|
+
|
|
73
|
+
### Changed
|
|
74
|
+
|
|
75
|
+
- 执行推广计划
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## [0.6.0] - 2025-01-20
|
|
80
|
+
|
|
81
|
+
### Added
|
|
82
|
+
|
|
83
|
+
- **REST API Server** - 支持程序化访问
|
|
84
|
+
- `syncgate/api.py` - REST API 服务器
|
|
85
|
+
- `tests/test_api.py` - 6 个 API 测试
|
|
86
|
+
- 支持 CRUD 操作 (创建/读取/更新/删除链接)
|
|
87
|
+
|
|
88
|
+
### API 端点
|
|
89
|
+
|
|
90
|
+
| 方法 | 端点 | 说明 |
|
|
91
|
+
|------|------|------|
|
|
92
|
+
| GET | /api/stats | 获取统计 |
|
|
93
|
+
| GET | /api/links/<path> | 获取链接信息 |
|
|
94
|
+
| POST | /api/links | 创建链接 |
|
|
95
|
+
| DELETE | /api/links/<path> | 删除链接 |
|
|
96
|
+
|
|
97
|
+
### 运行 API
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
python -m syncgate.api --port 8080
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## [0.5.0] - 2025-01-20
|
|
106
|
+
|
|
107
|
+
### Added
|
|
108
|
+
|
|
109
|
+
- **CLI Enhancement** - 增强命令行工具
|
|
110
|
+
- `syncgate/utils.py` - 配置管理和日志工具
|
|
111
|
+
- Config 类 - 配置文件管理
|
|
112
|
+
- ProgressBar 类 - 进度条
|
|
113
|
+
- Logger 类 - 彩色日志输出
|
|
114
|
+
- config 命令 - 管理配置
|
|
115
|
+
|
|
116
|
+
### Changed
|
|
117
|
+
|
|
118
|
+
- CLI 支持新的 config 子命令
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## [0.4.0] - 2025-01-20
|
|
123
|
+
|
|
124
|
+
### Added
|
|
125
|
+
|
|
126
|
+
- **FTP Backend** - 支持 FTP 服务器
|
|
127
|
+
- `syncgate/backend/ftp.py` - FTP 后端实现
|
|
128
|
+
- `tests/test_ftp.py` - 5 个测试
|
|
129
|
+
|
|
130
|
+
- **SFTP Backend** - 支持 SFTP 服务器
|
|
131
|
+
- `syncgate/backend/sftp.py` - SFTP 后端实现
|
|
132
|
+
- 依赖: paramiko>=3.0.0
|
|
133
|
+
|
|
134
|
+
### Changed
|
|
135
|
+
|
|
136
|
+
- **Total Tests: 33** (新增 5 个 FTP 测试)
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## [0.3.0] - 2025-01-20
|
|
141
|
+
|
|
142
|
+
### Added
|
|
143
|
+
|
|
144
|
+
- **WebDAV Backend** - 支持 NAS/云存储
|
|
145
|
+
- `syncgate/backend/webdav.py` - WebDAV 后端实现
|
|
146
|
+
- `tests/test_webdav.py` - 6 个测试
|
|
147
|
+
- 支持 PROPFIND/PUT/HEAD/MKCOL 等 WebDAV 方法
|
|
148
|
+
|
|
149
|
+
### Changed
|
|
150
|
+
|
|
151
|
+
- **Total Tests: 28** (新增 6 个 WebDAV 测试)
|
|
152
|
+
- 修复 pyproject.toml 重复配置
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## [0.2.4] - 2025-01-20
|
|
157
|
+
|
|
158
|
+
### Changed
|
|
159
|
+
|
|
160
|
+
- **推广执行** - Cycle #30
|
|
161
|
+
- Twitter 推广准备就绪
|
|
162
|
+
- Hacker News 提交准备就绪
|
|
163
|
+
- Reddit 发布准备就绪
|
|
164
|
+
|
|
165
|
+
### 推广状态
|
|
166
|
+
|
|
167
|
+
| 渠道 | 状态 |
|
|
168
|
+
|------|------|
|
|
169
|
+
| Twitter | ✅ 推文已准备 |
|
|
170
|
+
| Hacker News | ✅ 提交内容已准备 |
|
|
171
|
+
| Reddit | ✅ 帖子已准备 |
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## [0.2.3] - 2025-01-20
|
|
176
|
+
|
|
177
|
+
### Changed
|
|
178
|
+
|
|
179
|
+
- **CI/CD 优化**
|
|
180
|
+
- 添加 coverage 配置 (pyproject.toml)
|
|
181
|
+
- 优化工作流 (notify job)
|
|
182
|
+
- 支持多 Python 版本 (3.10, 3.11, 3.12)
|
|
183
|
+
- 添加 codecov 集成
|
|
184
|
+
|
|
185
|
+
### CI/CD Features
|
|
186
|
+
|
|
187
|
+
| 功能 | 状态 |
|
|
188
|
+
|------|------|
|
|
189
|
+
| 多版本测试 | ✅ 3.10, 3.11, 3.12 |
|
|
190
|
+
| Lint (black/mypy) | ✅ |
|
|
191
|
+
| Coverage | ✅ |
|
|
192
|
+
| Auto PyPI Publish | ✅ |
|
|
193
|
+
| Notifications | ✅ |
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## [0.2.2] - 2025-01-20
|
|
198
|
+
|
|
199
|
+
### Added
|
|
200
|
+
|
|
201
|
+
- **AI Module Tests** - 9 new tests for AI functionality
|
|
202
|
+
- test_simple_embedding
|
|
203
|
+
- test_embedding_vector
|
|
204
|
+
- test_ai_module_init
|
|
205
|
+
- test_extract_metadata
|
|
206
|
+
- test_index_content
|
|
207
|
+
- test_search
|
|
208
|
+
- test_cosine_similarity
|
|
209
|
+
- test_get_metadata
|
|
210
|
+
- test_list_indexed
|
|
211
|
+
|
|
212
|
+
### Changed
|
|
213
|
+
|
|
214
|
+
- **Total Tests: 22 passing** (9 new + 13 existing)
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## [0.2.1] - 2025-01-20
|
|
219
|
+
|
|
220
|
+
### Changed
|
|
221
|
+
|
|
222
|
+
- **代码重构** - 提取 BaseBackend 基类
|
|
223
|
+
- **代码减少 25%** - 437 行 → 327 行
|
|
224
|
+
- **减少重复代码** - 数据库操作集中到 BaseBackend
|
|
225
|
+
|
|
226
|
+
### Optimization
|
|
227
|
+
|
|
228
|
+
| 文件 | 优化前 | 优化后 | 减少 |
|
|
229
|
+
|------|--------|--------|------|
|
|
230
|
+
| local.py | 135 行 | 70 行 | 48% |
|
|
231
|
+
| http.py | 125 行 | 67 行 | 46% |
|
|
232
|
+
| s3.py | 177 行 | 119 行 | 33% |
|
|
233
|
+
| base.py | - | 71 行 | - |
|
|
234
|
+
| **总计** | **437 行** | **327 行** | **25%** |
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## [0.2.0] - 2025-01-20
|
|
239
|
+
|
|
240
|
+
### Added
|
|
241
|
+
|
|
242
|
+
- **AI Module** - 元数据管理和语义搜索
|
|
243
|
+
- `syncgate/ai/__init__.py` - AI 模块核心
|
|
244
|
+
- `ai_demo.py` - 演示脚本
|
|
245
|
+
- 元数据提取 (大小、字数、编码)
|
|
246
|
+
- 简单向量嵌入 (词袋模型)
|
|
247
|
+
- 语义搜索 (余弦相似度)
|
|
248
|
+
|
|
249
|
+
### Changed
|
|
250
|
+
|
|
251
|
+
- 代码提交统计: 6 次提交 (Cycle #22-26)
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## [0.1.4] - 2025-01-20
|
|
256
|
+
|
|
257
|
+
### Added
|
|
258
|
+
|
|
259
|
+
- **PROMO.md** - 推广文案 (Twitter/HN/Reddit)
|
|
260
|
+
- **DEMO_OUTPUT.md** - 演示输出截图
|
|
261
|
+
- **README.md v2** - 优化后的项目介绍
|
|
262
|
+
|
|
263
|
+
### Changed
|
|
264
|
+
|
|
265
|
+
- README: SyncList → SyncGate
|
|
266
|
+
- README: 添加支持存储类型表格
|
|
267
|
+
- README: 添加使用示例
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
## [0.1.2] - 2025-01-20
|
|
272
|
+
|
|
273
|
+
### Added
|
|
274
|
+
|
|
275
|
+
- **demo_complete.py** - Complete demo with all backends
|
|
276
|
+
- **S3Backend 测试** - Verified S3 URL parsing works
|
|
277
|
+
- **多后端演示** - Local + HTTP + S3
|
|
278
|
+
|
|
279
|
+
### Verified
|
|
280
|
+
|
|
281
|
+
- ✅ LocalBackend - 本地存储
|
|
282
|
+
- ✅ HTTPBackend - HTTP/HTTPS
|
|
283
|
+
- ✅ S3Backend - AWS S3
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## [0.1.1] - 2025-01-20
|
|
288
|
+
|
|
289
|
+
### Added
|
|
290
|
+
|
|
291
|
+
- **demo_v2.py** - New complete demo script
|
|
292
|
+
- **演示验证** - Core functionality verified working
|
|
293
|
+
|
|
294
|
+
### Fixed
|
|
295
|
+
|
|
296
|
+
- Demo script parameter order
|
|
297
|
+
- LocalBackend initialization
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
301
|
+
## [0.1.0] - 2025-01-20
|
|
302
|
+
|
|
303
|
+
### Added
|
|
304
|
+
|
|
305
|
+
- Initial release
|
|
306
|
+
- VirtualFS core with memory index
|
|
307
|
+
- Local backend (local filesystem)
|
|
308
|
+
- HTTP backend (HTTP/HTTPS read-only)
|
|
309
|
+
- S3 backend (AWS S3)
|
|
310
|
+
- Gateway with CLI commands:
|
|
311
|
+
- `ls` - List directory contents
|
|
312
|
+
- `tree` - Display tree structure
|
|
313
|
+
- `link` - Create a link
|
|
314
|
+
- `unlink` - Remove a link
|
|
315
|
+
- `validate` - Validate links
|
|
316
|
+
- `status` - Show link status
|
|
317
|
+
|
|
318
|
+
### Features
|
|
319
|
+
|
|
320
|
+
- Memory index for O(1) directory listing
|
|
321
|
+
- Link validation with status tracking
|
|
322
|
+
- SQLite-based status storage
|
|
323
|
+
- Support for multiple storage backends
|
|
324
|
+
|
|
325
|
+
### Documentation
|
|
326
|
+
|
|
327
|
+
- README with quick start guide
|
|
328
|
+
- PROJECT.md with architecture design
|
|
329
|
+
- CLI help documentation
|
|
330
|
+
|
|
331
|
+
### Tests
|
|
332
|
+
|
|
333
|
+
- 13 passing tests
|
|
334
|
+
- VirtualFS tests
|
|
335
|
+
- Backend tests
|
|
336
|
+
- Gateway tests
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Contributing to SyncGate
|
|
2
|
+
|
|
3
|
+
Thank you for your interest in contributing to SyncGate! This document outlines the process for contributing.
|
|
4
|
+
|
|
5
|
+
## Getting Started
|
|
6
|
+
|
|
7
|
+
### Prerequisites
|
|
8
|
+
|
|
9
|
+
- Python 3.10+
|
|
10
|
+
- pip or poetry
|
|
11
|
+
|
|
12
|
+
### Setting Up Development Environment
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
# Clone the repository
|
|
16
|
+
git clone https://github.com/yourusername/syncgate.git
|
|
17
|
+
cd syncgate
|
|
18
|
+
|
|
19
|
+
# Install in development mode
|
|
20
|
+
pip install -e ".[dev]"
|
|
21
|
+
|
|
22
|
+
# Run tests
|
|
23
|
+
pytest tests/
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Code Style
|
|
27
|
+
|
|
28
|
+
We use:
|
|
29
|
+
- **Black** for code formatting
|
|
30
|
+
- **mypy** for type checking
|
|
31
|
+
- **pytest** for testing
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
# Format code
|
|
35
|
+
black syncgate/ tests/
|
|
36
|
+
|
|
37
|
+
# Type check
|
|
38
|
+
mypy syncgate/
|
|
39
|
+
|
|
40
|
+
# Run tests with coverage
|
|
41
|
+
pytest --cov=syncgate tests/
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Submitting Changes
|
|
45
|
+
|
|
46
|
+
### 1. Fork the Repository
|
|
47
|
+
|
|
48
|
+
Fork the repository on GitHub and clone your fork.
|
|
49
|
+
|
|
50
|
+
### 2. Create a Feature Branch
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
git checkout -b feature/your-feature-name
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### 3. Make Changes
|
|
57
|
+
|
|
58
|
+
- Write clean, documented code
|
|
59
|
+
- Add tests for new functionality
|
|
60
|
+
- Run the full test suite
|
|
61
|
+
|
|
62
|
+
### 4. Submit a Pull Request
|
|
63
|
+
|
|
64
|
+
- Describe your changes
|
|
65
|
+
- Link any related issues
|
|
66
|
+
- Ensure CI passes
|
|
67
|
+
|
|
68
|
+
## Issue Reporting
|
|
69
|
+
|
|
70
|
+
### Bug Reports
|
|
71
|
+
|
|
72
|
+
When reporting bugs, include:
|
|
73
|
+
- Steps to reproduce
|
|
74
|
+
- Expected behavior
|
|
75
|
+
- Actual behavior
|
|
76
|
+
- Python version
|
|
77
|
+
- Operating system
|
|
78
|
+
|
|
79
|
+
### Feature Requests
|
|
80
|
+
|
|
81
|
+
When requesting features, include:
|
|
82
|
+
- Use case description
|
|
83
|
+
- Proposed solution
|
|
84
|
+
- Any relevant examples
|
|
85
|
+
|
|
86
|
+
## Code of Conduct
|
|
87
|
+
|
|
88
|
+
This project follows the [Contributor Covenant](https://www.contributor-covenant.org/).
|
|
89
|
+
|
|
90
|
+
## Questions?
|
|
91
|
+
|
|
92
|
+
Open an issue for discussion.
|