Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ jobs:

- name: Build
shell: pwsh
run: python build_native.py
run: python scripts/build.py

- name: Smoke tests
shell: pwsh
run: python core\native\tests\native_smoke.py
run: python proto/tests/native_smoke.py
46 changes: 34 additions & 12 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,24 +37,24 @@ jobs:
- name: Build and test
shell: pwsh
run: |
python build_native.py
python scripts/build.py
if ($LASTEXITCODE -ne 0) { throw 'Native build failed' }
python core\native\tests\native_smoke.py
python proto/tests/native_smoke.py
if ($LASTEXITCODE -ne 0) { throw 'Smoke tests failed' }

- name: Package flat distribution
shell: pwsh
run: |
$files = @(
'dist/binary/QuickFileCopy.exe',
'dist/binary/QuickFileCopy_cli.exe',
'dist/binary/WebView2Loader.dll',
'dist/documents/readme.txt',
'dist/documents/readme_jp.txt',
'dist/documents/history.txt',
'dist/documents/history_jp.txt',
'dist/documents/LICENSE.txt',
'dist/documents/LICENSE_jp.txt'
'dist/QuickFileCopy.exe',
'dist/QuickFileCopy_cli.exe',
'dist/WebView2Loader.dll',
'docs/distribution/readme.txt',
'docs/distribution/readme_jp.txt',
'docs/distribution/history.txt',
'docs/distribution/history_jp.txt',
'docs/distribution/LICENSE.txt',
'docs/distribution/LICENSE_jp.txt'
)
foreach ($file in $files) {
if (!(Test-Path -LiteralPath $file)) { throw "Missing distribution file: $file" }
Expand All @@ -64,12 +64,34 @@ jobs:
foreach ($file in $files) { Copy-Item -LiteralPath $file -Destination $staging -Force }
Compress-Archive -Path (Join-Path $staging '*') -DestinationPath 'QuickFileCopy-binary.zip' -Force

- name: Generate SHA-256 checksums
shell: pwsh
run: |
$checksumFile = Join-Path $env:GITHUB_WORKSPACE 'SHA256SUMS.txt'
$lines = @()
$zipPath = Join-Path $env:GITHUB_WORKSPACE 'QuickFileCopy-binary.zip'
$zipHash = (Get-FileHash -Algorithm SHA256 -Path $zipPath).Hash.ToUpper()
$lines += "$zipHash QuickFileCopy-binary.zip"
$lines += ""
$lines += "# Binaries inside archive:"
$binFiles = @('dist/QuickFileCopy.exe', 'dist/QuickFileCopy_cli.exe', 'dist/WebView2Loader.dll')
foreach ($f in $binFiles) {
if (Test-Path -LiteralPath $f) {
$h = (Get-FileHash -Algorithm SHA256 -Path $f).Hash.ToUpper()
$name = Split-Path -Leaf $f
$lines += "$h $name"
}
}
$lines | Set-Content -Path $checksumFile -Encoding utf8

- name: Upload release asset
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ github.event_name == 'workflow_dispatch' && inputs.tag || github.ref_name }}
name: ${{ github.event_name == 'workflow_dispatch' && inputs.tag || github.ref_name }}
files: QuickFileCopy-binary.zip
files: |
QuickFileCopy-binary.zip
SHA256SUMS.txt
overwrite_files: true
generate_release_notes: true
body: |
Expand Down
46 changes: 19 additions & 27 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,14 @@
# Python and test caches
# Build output & intermediate files
build/
dist/*
!dist/.gitkeep
*.o
*.exe
*.dll
*.log
*_debug.log

# Python & virtual environments
__pycache__/
*.py[cod]
*$py.class
Expand All @@ -9,34 +19,16 @@ env/
*.egg-info/
.env

# Editors and local tools
# Editors & local tools
.vscode/
.idea/
.claude/
CODEX_PROJECT_NOTE.txt

# C++ and CMake outputs
build/
core/native/*.dll
core/native/*.o
core/native/resources/QuickFileCopy.html

# Distribution binaries are generated; distribution documents are retained.
dist/binary/*
!dist/binary/.gitkeep
dist/*.zip

# Benchmark data generated on local machines
python/benchmark/testdata/
python/benchmark/**/results/*.json

# Prototype build outputs
python/prototype/*.dist/
python/prototype/*.build/
python/prototype/*.onefile-build/

# Reference repositories and logs
reference/
*.log
# Benchmark & test data
proto/benchmark/testdata/
proto/benchmark/**/results/*.json
proto/prototype/*.dist/
proto/prototype/*.build/
proto/prototype/*.onefile-build/
*.dat
*_debug.log
CODEX_PROJECT_NOTE.txt
48 changes: 30 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,14 @@ Extract every file into the same folder and run `QuickFileCopy.exe`.
- `history.txt` / `history_jp.txt` - change log
- `LICENSE.txt` / `LICENSE_jp.txt` - license files

### Integrity verification (SHA-256)

Official SHA-256 checksums for the distribution ZIP and binaries are automatically computed during the CI (GitHub Actions) build and published as `SHA256SUMS.txt` on each release page. Verify the downloaded package with PowerShell:

```powershell
Get-FileHash .\QuickFileCopy-binary.zip -Algorithm SHA256
```

The GUI HTML is embedded in `QuickFileCopy.exe`; an external `index.html` is not required.

## GUI usage
Expand All @@ -57,9 +65,9 @@ Complete-preservation modes launch a separate elevated worker through UAC. The m
## CLI usage

```powershell
.\dist\binary\QuickFileCopy_cli.exe --help
.\dist\binary\QuickFileCopy_cli.exe copy C:\Source D:\Backup --contents --policy newer
.\dist\binary\QuickFileCopy_cli.exe copy C:\Source D:\Backup --folder --policy overwrite --verify
.\dist\QuickFileCopy_cli.exe --help
.\dist\QuickFileCopy_cli.exe copy C:\Source D:\Backup --contents --policy newer
.\dist\QuickFileCopy_cli.exe copy C:\Source D:\Backup --folder --policy overwrite --verify
```

## Build
Expand All @@ -73,33 +81,37 @@ Requirements:

```powershell
winget install --id BrechtSanders.WinLibs.MCF.UCRT --exact --source winget
build.bat
scripts\build.bat
```

The default WebView2 SDK root is `C:\tools\webview2\build\native`. Override it with `WEBVIEW2_ROOT`, `WEBVIEW2_INCLUDE`, or `WEBVIEW2_LOADER`.

Build outputs are written to `dist\binary`. Run the smoke tests after building:
Build outputs are written to `dist/`. Run the smoke tests after building:

```powershell
python python\tests\native_smoke.py
python proto\tests\native_smoke.py
```

Detailed specifications and build notes are in [`document/`](document/).
Detailed specifications and build notes are in [`docs/`](docs/).

## Project layout

```text
core/native/ C++ engine, GUI host, CLI, and resources
python/prototype/ archived Python/PySide6 prototype
python/tests/ native CLI smoke and benchmark runners
python/benchmark/ historical Python prototype measurements
templates/ self-contained WebView2 development UI
static/ reserved CSS/JS/image source area
assets/ icon sources and future public screenshots
document/ specification, environment, and version information
plans/ dated implementation plans and results
dist/binary/ generated binaries, excluded from source control
dist/documents/ user-facing distribution documents
QuickFileCopy/
├── src/
│ ├── app/ GUI host & Windows resources (main_gui.cpp, .rc, .ico, resource.h)
│ ├── cli/ CLI entry point (main_cli.cpp)
│ ├── engine/ Copy engine and qfc/ header (copy_engine.cpp, qfc/copy_engine.h)
│ └── ui/ UI source files (index.html, css/, js/, img/)
├── proto/
│ ├── prototype/ archived Python/PySide6 prototype
│ ├── tests/ native CLI smoke and benchmark runners
│ └── benchmark/ historical Python prototype measurements
├── scripts/ build.py, build.bat, bundle_html.py
├── docs/ specification, environment, and version information
│ └── distribution/ user-facing distribution documents
├── dist/ generated binaries, excluded from source control (except .gitkeep)
└── .github/workflows/ CI and release workflows
```

## License and disclaimer
Expand Down
48 changes: 30 additions & 18 deletions README_jp.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,14 @@ GUIと文書は日本語/Englishに対応し、QDB形式の言語ボタンで
- `history.txt` / `history_jp.txt` - 更新履歴
- `LICENSE.txt` / `LICENSE_jp.txt` - ライセンス

### 完全性検証 (SHA-256)

配布用 ZIP および各バイナリの公式 SHA-256 ハッシュ値は、CI (GitHub Actions) ビルド時に自動計算され、各リリースページに `SHA256SUMS.txt` として添付・公開されています。PowerShell でダウンロードファイルの完全性を確認できます:

```powershell
Get-FileHash .\QuickFileCopy-binary.zip -Algorithm SHA256
```

GUIのHTMLは`QuickFileCopy.exe`へ埋め込まれるため、外部の`index.html`は不要です。

## GUIの使い方
Expand All @@ -57,9 +65,9 @@ GUIのHTMLは`QuickFileCopy.exe`へ埋め込まれるため、外部の`index.ht
## CLIの使い方

```powershell
.\dist\binary\QuickFileCopy_cli.exe --help
.\dist\binary\QuickFileCopy_cli.exe copy C:\Source D:\Backup --contents --policy newer
.\dist\binary\QuickFileCopy_cli.exe copy C:\Source D:\Backup --folder --policy overwrite --verify
.\dist\QuickFileCopy_cli.exe --help
.\dist\QuickFileCopy_cli.exe copy C:\Source D:\Backup --contents --policy newer
.\dist\QuickFileCopy_cli.exe copy C:\Source D:\Backup --folder --policy overwrite --verify
```

## ビルド
Expand All @@ -73,33 +81,37 @@ GUIのHTMLは`QuickFileCopy.exe`へ埋め込まれるため、外部の`index.ht

```powershell
winget install --id BrechtSanders.WinLibs.MCF.UCRT --exact --source winget
build.bat
scripts\build.bat
```

WebView2 SDKの既定ルートは`C:\tools\webview2\build\native`です。別の場所を使う場合は`WEBVIEW2_ROOT`、`WEBVIEW2_INCLUDE`、`WEBVIEW2_LOADER`で指定できます。

成果物は`dist\binary`へ出力されます。ビルド後のスモークテスト:
成果物は`dist/`へ出力されます。ビルド後のスモークテスト:

```powershell
python python\tests\native_smoke.py
python proto\tests\native_smoke.py
```

詳しい仕様とビルド情報は[`document/`](document/)にあります。
詳しい仕様とビルド情報は[`docs/`](docs/)にあります。

## フォルダ構成

```text
core/native/ C++エンジン、GUIホスト、CLI、リソース
python/prototype/ 旧Python/PySide6プロトタイプ
python/tests/ ネイティブCLIのスモークとベンチマーク
python/benchmark/ 旧Python試作の計測記録
templates/ 自己完結WebView2開発用UI
static/ CSS/JS/画像を分離する場合の配置先
assets/ アイコン原本と今後の公開用スクリーンショット
document/ 仕様、開発環境、バージョン情報
plans/ 日付付きの計画書と実施結果
dist/binary/ 生成バイナリ(ソース管理対象外)
dist/documents/ 配布用ユーザー文書
QuickFileCopy/
├── src/
│ ├── app/ GUIホスト & Windowsリソース(main_gui.cpp, .rc, .ico, resource.h)
│ ├── cli/ CLIエントリーポイント(main_cli.cpp)
│ ├── engine/ コピーエンジンおよびqfc/ヘッダー(copy_engine.cpp, qfc/copy_engine.h)
│ └── ui/ UIソース(index.html, css/, js/, img/)
├── proto/
│ ├── prototype/ 旧Python/PySide6プロトタイプ
│ ├── tests/ ネイティブCLIのスモークとベンチマーク
│ └── benchmark/ 旧Python試作の計測記録
├── scripts/ build.py, build.bat, bundle_html.py
├── docs/ 仕様、開発環境、バージョン情報
│ └── distribution/ 配布用ユーザー文書
├── dist/ 生成バイナリ(ソース管理対象外、.gitkeepのみ保持)
└── .github/workflows/ CI / Release ワークフロー
```

## ライセンスと免責
Expand Down
5 changes: 0 additions & 5 deletions build.bat

This file was deleted.

44 changes: 0 additions & 44 deletions core/native/CMakeLists.txt

This file was deleted.

32 changes: 0 additions & 32 deletions core/native/README.md

This file was deleted.

Loading
Loading