Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
0fb56b3
feat: 添加SFTP和WEBDAV协议支持
May 2, 2026
72d6647
fix: 修复了一些已知问题
May 3, 2026
23c505c
fix: 移除对config.json的跟踪
May 4, 2026
3eefbab
feat: 添加了一些新功能
May 16, 2026
152ea60
Add Russian translations for edit command keys
May 23, 2026
0efa5d8
Add edit command i18n keys to ja_JP locale
May 23, 2026
11c9915
Add edit command translation keys to ko_KR locale
May 23, 2026
3e7e23b
Add diff command French translations to fr_FR.json
May 23, 2026
ac2a3ce
Add diff command translations to ja_JP, pt_BR, ko_KR locales
May 23, 2026
27a5f77
fix: 6个bug修复 + 4个新功能 + 68个针对性测试
May 29, 2026
8a14fda
chore: 添加 .claude 到 .gitignore
May 29, 2026
4fbbf7c
feat: 3个实用功能 — 备份锁/Shell补全/并行上传
Jun 6, 2026
67cba85
feat: 进度增强 + 恢复点快照标签
Jun 6, 2026
6ee9e95
feat: 定时备份后台服务化 — schedule install
Jun 6, 2026
5e06de3
test: 新增38个测试 — keychain/chunked_backup/CLI 新命令
Jun 6, 2026
6eea46b
chore: add minio dependency for S3 cloud storage
Jun 6, 2026
db761d3
feat: 云存储/去重/重试 — 3个增强功能
Jun 6, 2026
2c7ff07
feat: HTML报告 — report --format html
Jun 6, 2026
663f3d3
feat: 交互式配置向导 — sbackup wizard (5步引导)
Jun 6, 2026
2e5d93c
fix: 修复 JSON 尾部逗号和单引号字符串语法错误
Jun 6, 2026
a7ced40
chore: add reedsolo dependency for Reed-Solomon error correction
Jun 6, 2026
a731cc2
feat: 5个增强功能 — 文件过滤/带宽限速/diff细节/自修复/并行压缩
Jun 6, 2026
ce6d682
feat: 数据完整性校验 + 任务队列 + 配置校验 (106 tests)
Jun 6, 2026
c6ed726
feat: 备份轮转清理 + Dry-run预览 + 磁盘空间预估 (98 tests)
Jun 6, 2026
5422ab3
feat: Pre/Post Hook + 配置Profile + 选择性恢复 + 审计日志 (119 tests)
Jun 6, 2026
14ae82e
feat: 多目标备份 + 跨档案搜索 + 压缩基准测试 + 元数据导出 (103 tests)
Jun 6, 2026
8f3c6db
fix: 简化 hooks 跨平台命令解析,改进测试兼容性
Jun 6, 2026
ca942c0
fix: 改进 SFTP 认证流程和主机密钥验证,修复 WebDAV 重定向处理
Jun 19, 2026
2b1dd9c
docs: 更新 README 文档和 CI/CD 工作流
Jun 19, 2026
2458989
fix: 修复测试状态污染导致的 6 个失败
Jun 19, 2026
b9f8319
fix(i18n): 补全 en_US 缺失的 3 个 table header 翻译
Jun 19, 2026
7b792f4
i18n: 补全全部 9 种语言翻译(665 keys,0 缺失)
Jun 19, 2026
d9f85ca
docs: README 国际化(9 种语言)+ badges
Jun 19, 2026
8d7c31d
ci: 二进制文件名添加版本号+平台+架构标识
Jun 19, 2026
6b881c4
ci: Release 工作流读取 releases/v{version}.md 作为发布说明
Jun 19, 2026
8774b4d
docs: 添加 v2.0.0 更新日志
Jun 19, 2026
fce0ef6
chore: 版本号升级到 2.0.0
Jun 19, 2026
1e09e4d
fix: 修复 CI 13 个测试失败
Jun 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: CI

on:
push:
branches: [dev, main]
pull_request:
branches: [dev, main]

jobs:
test:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
python-version: ['3.10', '3.12']

steps:
- uses: actions/checkout@v4

- name: Install uv
uses: astral-sh/setup-uv@v3
with:
version: "latest"

- name: Set up Python ${{ matrix.python-version }}
run: uv python install ${{ matrix.python-version }}

- name: Install dependencies
run: uv sync

- name: Run tests
run: uv run pytest tests/ -q
101 changes: 92 additions & 9 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,25 +37,52 @@ jobs:
python-version: '3.12'

- name: Install dependencies
run: pip install nuitka py7zr tqdm zstandard
run: pip install nuitka py7zr tqdm zstandard paramiko minio reedsolo watchdog

- name: Extract version from tag
id: version
shell: bash
run: echo "VERSION=${GITHUB_REF_NAME#v}" >> $GITHUB_OUTPUT

- name: Read release notes
id: notes
shell: bash
run: |
NOTES_FILE="releases/v${{ steps.version.outputs.VERSION }}.md"
if [ -f "$NOTES_FILE" ]; then
echo "HAS_NOTES=true" >> $GITHUB_OUTPUT
# 使用 EOF 分隔符避免特殊字符问题
echo "NOTES<<EOF" >> $GITHUB_OUTPUT
cat "$NOTES_FILE" >> $GITHUB_OUTPUT
echo "" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
else
echo "HAS_NOTES=false" >> $GITHUB_OUTPUT
echo "NOTES=Release v${{ steps.version.outputs.VERSION }}" >> $GITHUB_OUTPUT
fi

- name: Build executable
run: |
python -m nuitka `
--onefile `
--assume-yes-for-downloads `
--output-filename=sbackup.exe `
--output-filename=sbackup-${{ steps.version.outputs.VERSION }}-windows-x64.exe `
--include-package=sbackup `
--include-data-dir=sbackup/locales=sbackup/locales `
--include-package=py7zr `
--include-package=tqdm `
--include-package=zstandard `
--include-package=paramiko `
--include-package=minio `
--include-package=reedsolo `
--include-package=watchdog `
main.py

- name: Upload to Release
uses: softprops/action-gh-release@v1
with:
files: sbackup.exe
body: ${{ steps.notes.outputs.NOTES }}
files: sbackup-${{ steps.version.outputs.VERSION }}-windows-x64.exe

# 构建 macOS 可执行文件
build-macos:
Expand All @@ -68,25 +95,53 @@ jobs:
python-version: '3.12'

- name: Install dependencies
run: pip install nuitka py7zr tqdm zstandard
run: pip install nuitka py7zr tqdm zstandard paramiko minio reedsolo watchdog

- name: Extract version from tag
id: version
run: echo "VERSION=${GITHUB_REF_NAME#v}" >> $GITHUB_OUTPUT

- name: Detect architecture
id: arch
run: echo "ARCH=$(uname -m)" >> $GITHUB_OUTPUT

- name: Read release notes
id: notes
run: |
NOTES_FILE="releases/v${{ steps.version.outputs.VERSION }}.md"
if [ -f "$NOTES_FILE" ]; then
echo "HAS_NOTES=true" >> $GITHUB_OUTPUT
echo "NOTES<<EOF" >> $GITHUB_OUTPUT
cat "$NOTES_FILE" >> $GITHUB_OUTPUT
echo "" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
else
echo "HAS_NOTES=false" >> $GITHUB_OUTPUT
echo "NOTES=Release v${{ steps.version.outputs.VERSION }}" >> $GITHUB_OUTPUT
fi

- name: Build executable
run: |
python -m nuitka \
--onefile \
--assume-yes-for-downloads \
--output-filename=sbackup-macos \
--output-filename=sbackup-${{ steps.version.outputs.VERSION }}-macos-${{ steps.arch.outputs.ARCH }} \
--include-package=sbackup \
--include-data-dir=sbackup/locales=sbackup/locales \
--include-package=py7zr \
--include-package=tqdm \
--include-package=zstandard \
--include-package=paramiko \
--include-package=minio \
--include-package=reedsolo \
--include-package=watchdog \
main.py

- name: Upload to Release
uses: softprops/action-gh-release@v1
with:
files: sbackup-macos
body: ${{ steps.notes.outputs.NOTES }}
files: sbackup-${{ steps.version.outputs.VERSION }}-macos-${{ steps.arch.outputs.ARCH }}

# 构建 Linux 可执行文件
build-linux:
Expand All @@ -99,22 +154,50 @@ jobs:
python-version: '3.12'

- name: Install dependencies
run: pip install nuitka py7zr tqdm zstandard
run: pip install nuitka py7zr tqdm zstandard paramiko minio reedsolo watchdog

- name: Extract version from tag
id: version
run: echo "VERSION=${GITHUB_REF_NAME#v}" >> $GITHUB_OUTPUT

- name: Detect architecture
id: arch
run: echo "ARCH=$(uname -m)" >> $GITHUB_OUTPUT

- name: Read release notes
id: notes
run: |
NOTES_FILE="releases/v${{ steps.version.outputs.VERSION }}.md"
if [ -f "$NOTES_FILE" ]; then
echo "HAS_NOTES=true" >> $GITHUB_OUTPUT
echo "NOTES<<EOF" >> $GITHUB_OUTPUT
cat "$NOTES_FILE" >> $GITHUB_OUTPUT
echo "" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
else
echo "HAS_NOTES=false" >> $GITHUB_OUTPUT
echo "NOTES=Release v${{ steps.version.outputs.VERSION }}" >> $GITHUB_OUTPUT
fi

- name: Build executable
run: |
python -m nuitka \
--onefile \
--assume-yes-for-downloads \
--output-filename=sbackup-linux \
--output-filename=sbackup-${{ steps.version.outputs.VERSION }}-linux-${{ steps.arch.outputs.ARCH }} \
--include-package=sbackup \
--include-data-dir=sbackup/locales=sbackup/locales \
--include-package=py7zr \
--include-package=tqdm \
--include-package=zstandard \
--include-package=paramiko \
--include-package=minio \
--include-package=reedsolo \
--include-package=watchdog \
main.py

- name: Upload to Release
uses: softprops/action-gh-release@v1
with:
files: sbackup-linux
body: ${{ steps.notes.outputs.NOTES }}
files: sbackup-${{ steps.version.outputs.VERSION }}-linux-${{ steps.arch.outputs.ARCH }}
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,12 @@ wheels/
.vscode/
*.exe
sbackup.json
config.json

# Virtual environments
.venv

.qwen
.claude
memory
.coverage
Loading
Loading