From d71c01cbca22d8e03e49a548235b4801b789398e Mon Sep 17 00:00:00 2001 From: Ray Berezowski <6616212+rberezowski@users.noreply.github.com> Date: Tue, 2 Jun 2026 17:41:12 -0400 Subject: [PATCH] Organize release structure and documentation --- .gitignore | 1 + README.md | 70 ++++++++++++++++++++++++++++ Tools/New-TaskbarLauncherRelease.ps1 | 10 ++-- docs/FOLDER-CLEANUP.md | 37 +++++++++++++++ docs/INSTALL.md | 47 +++++++++++++++++++ docs/RELEASE.md | 67 ++++++++++++++++++++++++++ 6 files changed, 228 insertions(+), 4 deletions(-) create mode 100644 README.md create mode 100644 docs/FOLDER-CLEANUP.md create mode 100644 docs/INSTALL.md create mode 100644 docs/RELEASE.md diff --git a/.gitignore b/.gitignore index f91cad3..44f48b7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ bin/ obj/ +builds/ *.user *.suo *.pdb diff --git a/README.md b/README.md new file mode 100644 index 0000000..b7ecab8 --- /dev/null +++ b/README.md @@ -0,0 +1,70 @@ +# Taskbar Launcher + +Taskbar Launcher is a small Windows tray launcher for folders, applications, scripts, files, and nested menus. + +## Features + +- System tray launcher +- Global hotkey, default `Ctrl+Alt+Space` +- Search/filter in the launcher popup +- Nested menus and drag/drop ordering in Settings +- Per-item icon and display mode +- Automatic icon selection from app/folder targets +- Portable `config.json` +- Backup/restore config +- Optional Start with Windows shortcut +- Windows light/dark theme support + +## Project Layout + +```text +TaskbarLauncher/ + App.xaml + MainWindow.xaml + Models/ + Services/ + Views/ + Tools/ + docs/ + builds/ generated locally, ignored by Git +``` + +## Build + +Requires the .NET 10 SDK on the developer machine. + +```powershell +dotnet build +``` + +## Release + +Create the small framework-dependent release package: + +```powershell +.\Tools\New-TaskbarLauncherRelease.ps1 +``` + +Create a self-contained package that does not require users to install .NET: + +```powershell +.\Tools\New-TaskbarLauncherRelease.ps1 -SelfContained +``` + +Release zips are written to: + +```text +builds/releases/ +``` + +## Versioning + +The app version is controlled in `TaskbarLauncher.csproj`. + +Recommended release flow: + +1. Update `` in `TaskbarLauncher.csproj`. +2. Commit the change. +3. Run `.\Tools\New-TaskbarLauncherRelease.ps1`. +4. Tag the release, for example `v1.0.1`. +5. Upload the generated zip to Gitea Releases. diff --git a/Tools/New-TaskbarLauncherRelease.ps1 b/Tools/New-TaskbarLauncherRelease.ps1 index 6014bd8..844bb22 100644 --- a/Tools/New-TaskbarLauncherRelease.ps1 +++ b/Tools/New-TaskbarLauncherRelease.ps1 @@ -8,7 +8,6 @@ param( $ErrorActionPreference = "Stop" $projectDir = Split-Path -Parent $PSScriptRoot -$workspaceDir = Split-Path -Parent $projectDir $projectPath = Join-Path $projectDir "TaskbarLauncher.csproj" [xml]$projectXml = Get-Content -LiteralPath $projectPath @@ -18,10 +17,10 @@ if ([string]::IsNullOrWhiteSpace($version)) { } $packageKind = if ($SelfContained) { "self-contained" } else { "small" } -$releaseRoot = Join-Path $workspaceDir "TaskbarLauncher-releases" +$releaseRoot = Join-Path $projectDir "builds\releases" $releaseDir = Join-Path $releaseRoot "TaskbarLauncher-v$version-$packageKind" $zipPath = Join-Path $releaseRoot "TaskbarLauncher-v$version-$packageKind.zip" -$buildDir = Join-Path $workspaceDir "TaskbarLauncher-build-release-$packageKind" +$buildDir = Join-Path $projectDir "builds\intermediate\$packageKind" Get-Process TaskbarLauncher -ErrorAction SilentlyContinue | Stop-Process -Force @@ -46,7 +45,10 @@ Get-ChildItem -LiteralPath $releaseDir -Filter "*.pdb" -ErrorAction SilentlyCont Remove-Item -Force if ($IncludeCurrentConfig) { - $configPath = Join-Path $workspaceDir "TaskbarLauncher-editor-publish\config.json" + $configPath = Join-Path $projectDir "builds\local-self-contained\config.json" + if (!(Test-Path -LiteralPath $configPath)) { + $configPath = Join-Path (Split-Path -Parent $projectDir) "TaskbarLauncher-editor-publish\config.json" + } if (Test-Path -LiteralPath $configPath) { Copy-Item -LiteralPath $configPath -Destination (Join-Path $releaseDir "config.json") -Force } diff --git a/docs/FOLDER-CLEANUP.md b/docs/FOLDER-CLEANUP.md new file mode 100644 index 0000000..6040822 --- /dev/null +++ b/docs/FOLDER-CLEANUP.md @@ -0,0 +1,37 @@ +# Folder Cleanup Notes + +The source of truth is: + +```text +demo_projects/TaskbarLauncher +``` + +The following sibling folders were created during early prototype/testing and are no longer the preferred release output: + +```text +TaskbarLauncher-build +TaskbarLauncher-build-handout +TaskbarLauncher-build-preview +TaskbarLauncher-build-release-small +TaskbarLauncher-build-small +TaskbarLauncher-editor-publish +TaskbarLauncher-preview-publish +TaskbarLauncher-releases +TaskbarLauncher-small-handout +TaskbarLauncher-small-publish +TaskbarLauncher-small-handout.zip +``` + +Do not delete them until you confirm there is nothing in their `config.json` files or backups that you want to keep. + +Going forward, release output should be generated by: + +```powershell +.\Tools\New-TaskbarLauncherRelease.ps1 +``` + +The new release output location is: + +```text +TaskbarLauncher/builds/releases +``` diff --git a/docs/INSTALL.md b/docs/INSTALL.md new file mode 100644 index 0000000..a493d4b --- /dev/null +++ b/docs/INSTALL.md @@ -0,0 +1,47 @@ +# Install and Use Taskbar Launcher + +## Small Package + +The small package requires: + +- Windows x64 +- Microsoft .NET 10 Desktop Runtime x64 + +Download .NET 10 Desktop Runtime: + +https://dotnet.microsoft.com/en-us/download/dotnet/10.0 + +Install the **.NET Desktop Runtime** for **Windows x64**. + +## Install + +1. Extract the Taskbar Launcher zip to a folder. +2. Run `TaskbarLauncher.exe`. +3. The app appears in the system tray. +4. Press `Ctrl+Alt+Space` to open the launcher. + +## Configure + +Open the tray menu and choose **Settings**. + +From Settings you can: + +- Add top-level menus +- Add submenus +- Add folders, apps, files, and websites +- Drag/drop items to reorder +- Set per-item icon sizes +- Back up and restore `config.json` +- Enable Start with Windows + +## Portable Settings + +The app stores settings in: + +```text +config.json +``` + +Keep `config.json` beside `TaskbarLauncher.exe`. + +If `config.json` is missing, the app creates a clean starter config on first run. diff --git a/docs/RELEASE.md b/docs/RELEASE.md new file mode 100644 index 0000000..0f29d75 --- /dev/null +++ b/docs/RELEASE.md @@ -0,0 +1,67 @@ +# Release Process + +## Branches + +Recommended Gitea layout: + +- `main`: stable released source code +- `dev`: active development work + +Release builds should come from `main`. + +## Version Numbers + +Use semantic versioning: + +```text +MAJOR.MINOR.PATCH +``` + +Examples: + +- `1.0.0`: first stable release +- `1.0.1`: bug fix +- `1.1.0`: new feature + +Update version fields in: + +```text +TaskbarLauncher.csproj +``` + +## Build Release Zip + +Small package: + +```powershell +.\Tools\New-TaskbarLauncherRelease.ps1 +``` + +Self-contained package: + +```powershell +.\Tools\New-TaskbarLauncherRelease.ps1 -SelfContained +``` + +Output: + +```text +builds/releases/TaskbarLauncher-vVERSION-small.zip +``` + +## Publish to Gitea + +1. Commit all source changes. +2. Merge `dev` into `main`. +3. Tag the release: + +```powershell +git tag v1.0.0 +git push origin main +git push origin v1.0.0 +``` + +4. In Gitea, create a release from the tag. +5. Upload the zip from `builds/releases`. + +Older releases stay available through Gitea Releases and Git tags.