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
55 changes: 55 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
name: Bug report
description: Report a reproducible problem in FileFlow
title: "[Bug]: "
body:
- type: markdown
attributes:
value: |
Thanks for reporting a problem. Please remove usernames, personal folder names, filenames, and other private data from anything you share.
- type: input
id: version
attributes:
label: FileFlow version
description: For example, 0.1.0.
placeholder: 0.1.0
validations:
required: true
- type: input
id: windows
attributes:
label: Windows version
description: Include the edition and version or build when known.
placeholder: Windows 11 24H2
validations:
required: true
- type: textarea
id: reproduction
attributes:
label: Steps to reproduce
description: Use temporary sample folders where possible. Describe the rule and exact sequence of actions.
placeholder: |
1. Create a Copy rule for .txt files...
2. Choose Run...
3. Choose Execute...
validations:
required: true
- type: textarea
id: expected
attributes:
label: Expected behavior
validations:
required: true
- type: textarea
id: actual
attributes:
label: Actual behavior
description: Include any error message shown by FileFlow.
validations:
required: true
- type: textarea
id: logs
attributes:
label: Sanitized logs or additional context
description: Optional. Attach only material you have checked for usernames, personal paths, filenames, and other private data.
validations:
required: false
24 changes: 24 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: CI

on:
pull_request:
push:
branches: [main]

permissions:
contents: read

jobs:
build-and-test:
runs-on: windows-latest
steps:
- uses: actions/checkout@v7
- uses: actions/setup-dotnet@v6
with:
dotnet-version: '8.0.x'
- name: Restore
run: dotnet restore FileFlow.sln
- name: Release tests
run: dotnet test FileFlow.sln --configuration Release --no-restore
- name: Release build
run: dotnet build FileFlow.sln --configuration Release --no-restore
59 changes: 59 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
name: Draft release

on:
push:
tags: ['v*']

permissions:
contents: read

concurrency:
group: release-${{ github.ref }}
cancel-in-progress: false

jobs:
draft-release:
runs-on: windows-latest
permissions:
contents: write
defaults:
run:
shell: pwsh
steps:
- uses: actions/checkout@v7
- uses: actions/setup-dotnet@v6
with:
dotnet-version: '8.0.x'
- name: Validate tag and dated changelog
env:
RELEASE_TAG: ${{ github.ref_name }}
run: |
if ($env:RELEASE_TAG -notmatch '^v\d+\.\d+\.\d+$') { throw 'Expected a vMAJOR.MINOR.PATCH tag.' }
$version = (dotnet msbuild src/FileFlow.App/FileFlow.App.csproj -nologo -getProperty:Version) -join "`n"
if ($LASTEXITCODE -ne 0) { throw 'Could not read application version.' }
$version = $version.Trim()
if ($env:RELEASE_TAG -cne "v$version") { throw 'Tag does not match application version.' }
$heading = '(?m)^## \[' + [regex]::Escape($version) + '\] - (\d{4}-\d{2}-\d{2})\r?$'
if ((Get-Content CHANGELOG.md -Raw) -notmatch $heading) { throw 'Date the changelog before creating the release tag.' }
[datetime]::ParseExact($Matches[1], 'yyyy-MM-dd', [cultureinfo]::InvariantCulture) | Out-Null
- name: Restore
run: dotnet restore FileFlow.sln
- name: Release tests
run: dotnet test FileFlow.sln --configuration Release --no-restore
- name: Release build
run: dotnet build FileFlow.sln --configuration Release --no-restore
- name: Package portable Windows build
run: ./scripts/Publish-Portable.ps1
- name: Create unpublished draft with portable ZIP
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_REPO: ${{ github.repository }}
RELEASE_TAG: ${{ github.ref_name }}
run: |
# Include drafts: --draft alone does not guarantee uniqueness for an existing tag.
$existingTags = @(gh api --paginate "repos/$env:GH_REPO/releases?per_page=100" --jq '.[].tag_name')
if ($LASTEXITCODE -ne 0) { throw 'Could not check existing releases; refusing to create a draft.' }
if ($env:RELEASE_TAG -cin $existingTags) { throw 'A release or draft already exists for this tag.' }
gh release create $env:RELEASE_TAG "artifacts/FileFlow-$env:RELEASE_TAG-win-x64.zip" `
--draft --verify-tag --title "FileFlow $env:RELEASE_TAG" --notes-file CHANGELOG.md
if ($LASTEXITCODE -ne 0) { throw 'Draft creation failed; inspect GitHub before retrying.' }
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Changelog

All notable changes to FileFlow are documented in this file.

## [0.1.0] - Unreleased

- Added a Windows desktop workflow for creating, editing, deleting, previewing, and explicitly executing saved Move or Copy rules.
- Added case-insensitive direct-file extension matching and immediate-folder scanning.
- Added read-only previews with ordered operations and blocking diagnostics for missing directories, conflicts, unsupported network paths, and reparse points.
- Added guarded execution with whole-batch preflight validation, per-operation revalidation, non-overwriting file operations, and ordered results.
- Added local JSON rule storage at `%LOCALAPPDATA%\FileFlow\rules.json`, including validation, writer locking, and retention of one previous valid document.
- Added per-Windows-user single-instance handling.
- Added Windows-targeted automated tests for Core behavior and the desktop presentation workflow.
- Added a self-contained portable Windows x64 ZIP packaging path with runtime license notices and overwrite protection.
- Added pull request and `main` CI plus guarded tag-based preparation of unpublished draft releases.
22 changes: 22 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Contributing to FileFlow

Thanks for helping improve FileFlow. Bug reports, documentation corrections, tests, and focused fixes are welcome. Please open an issue to discuss large features, architectural changes, or broad scope changes before investing substantial work.

## Report a bug

Use the bug report form and include the FileFlow version, Windows version, clear reproduction steps, expected behavior, and actual behavior. Attach logs only when useful, and remove usernames, personal folder names, filenames, and other private data first.

## Develop locally

Development requires Windows and the .NET 8 SDK `8.0.400` or newer within the .NET 8.0 SDK line.

```powershell
dotnet restore FileFlow.sln
dotnet test FileFlow.sln --configuration Release --no-restore
dotnet build FileFlow.sln --configuration Release --no-restore
dotnet run --project src/FileFlow.App/FileFlow.App.csproj --configuration Release
```

Keep changes focused, preserve FileFlow's preview-before-execution safety model, and add meaningful tests when behavior changes. Before submitting a pull request, run the Release test and build commands above and describe the behavior change and validation performed.

By contributing, you agree that your contribution is licensed under the repository's [MIT License](LICENSE).
Loading