Organize release structure and documentation
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,5 +1,6 @@
|
|||||||
bin/
|
bin/
|
||||||
obj/
|
obj/
|
||||||
|
builds/
|
||||||
*.user
|
*.user
|
||||||
*.suo
|
*.suo
|
||||||
*.pdb
|
*.pdb
|
||||||
|
|||||||
70
README.md
Normal file
70
README.md
Normal file
@@ -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 `<Version>` 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.
|
||||||
@@ -8,7 +8,6 @@ param(
|
|||||||
$ErrorActionPreference = "Stop"
|
$ErrorActionPreference = "Stop"
|
||||||
|
|
||||||
$projectDir = Split-Path -Parent $PSScriptRoot
|
$projectDir = Split-Path -Parent $PSScriptRoot
|
||||||
$workspaceDir = Split-Path -Parent $projectDir
|
|
||||||
$projectPath = Join-Path $projectDir "TaskbarLauncher.csproj"
|
$projectPath = Join-Path $projectDir "TaskbarLauncher.csproj"
|
||||||
|
|
||||||
[xml]$projectXml = Get-Content -LiteralPath $projectPath
|
[xml]$projectXml = Get-Content -LiteralPath $projectPath
|
||||||
@@ -18,10 +17,10 @@ if ([string]::IsNullOrWhiteSpace($version)) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$packageKind = if ($SelfContained) { "self-contained" } else { "small" }
|
$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"
|
$releaseDir = Join-Path $releaseRoot "TaskbarLauncher-v$version-$packageKind"
|
||||||
$zipPath = Join-Path $releaseRoot "TaskbarLauncher-v$version-$packageKind.zip"
|
$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
|
Get-Process TaskbarLauncher -ErrorAction SilentlyContinue | Stop-Process -Force
|
||||||
|
|
||||||
@@ -46,7 +45,10 @@ Get-ChildItem -LiteralPath $releaseDir -Filter "*.pdb" -ErrorAction SilentlyCont
|
|||||||
Remove-Item -Force
|
Remove-Item -Force
|
||||||
|
|
||||||
if ($IncludeCurrentConfig) {
|
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) {
|
if (Test-Path -LiteralPath $configPath) {
|
||||||
Copy-Item -LiteralPath $configPath -Destination (Join-Path $releaseDir "config.json") -Force
|
Copy-Item -LiteralPath $configPath -Destination (Join-Path $releaseDir "config.json") -Force
|
||||||
}
|
}
|
||||||
|
|||||||
37
docs/FOLDER-CLEANUP.md
Normal file
37
docs/FOLDER-CLEANUP.md
Normal file
@@ -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
|
||||||
|
```
|
||||||
47
docs/INSTALL.md
Normal file
47
docs/INSTALL.md
Normal file
@@ -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.
|
||||||
67
docs/RELEASE.md
Normal file
67
docs/RELEASE.md
Normal file
@@ -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.
|
||||||
Reference in New Issue
Block a user