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
79 changes: 79 additions & 0 deletions .github/workflows/winget-publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# SPDX-License-Identifier: MPL-2.0
# Copyright (c) 2025-2026 SKY, LLC.
#
# WinGet Publish — auto-submit the winget-pkgs manifest on every release.
#
# When `release.yml` finishes and publishes a non-draft, non-prerelease
# GitHub Release (it sets `draft: false`, `prerelease: false`), GitHub
# emits a `release: released` event. This workflow reacts to that event
# and uses `winget-releaser` (komac under the hood) to open a pull
# request against microsoft/winget-pkgs that bumps `SkyLLC.UFFS` to the
# new version.
#
# The action clones the *previous* version's manifest as a template and
# updates only the version, installer URL, SHA256, and release date — so
# the nested-installer structure (InstallerType: zip / NestedInstallerType:
# portable, the four PortableCommandAliases uffs/uffsd/uffsmcp/uffs-mft)
# carries over automatically with no manifest authoring on our side.
#
# ── Required secret ──────────────────────────────────────────────────
# `WINGET_TOKEN` — a **classic** Personal Access Token with the
# `public_repo` scope (fine-grained tokens that can fork + push to
# microsoft/winget-pkgs also work). The default `GITHUB_TOKEN` CANNOT
# be used: it has no permission to fork an external repo or push the
# manifest branch. Create it under the maintainer account that owns the
# winget-pkgs fork (the same account that hand-submitted PR
# microsoft/winget-pkgs#378294 for v0.5.102), then add it at
# Settings → Secrets and variables → Actions → New repository secret.

name: 📦 WinGet Publish

run-name: 📦 WinGet ${{ github.event.release.tag_name || inputs.release-tag }}

on:
release:
types: [released]
# Manual fallback: re-submit a specific tag if the release-triggered
# run failed (e.g. the token expired) or a release predates this
# workflow. Provide the git tag, e.g. `v0.5.102`.
workflow_dispatch:
inputs:
release-tag:
description: 'Git tag to publish to WinGet (e.g. v0.5.102)'
required: true
type: string

# Serialise submissions so two releases landing close together queue
# cleanly instead of racing to open competing winget-pkgs PRs.
concurrency:
group: winget-publish-${{ github.event.release.tag_name || inputs.release-tag }}
cancel-in-progress: false

permissions:
contents: read

jobs:
publish:
name: Submit winget-pkgs manifest
runs-on: ubuntu-latest
timeout-minutes: 15
# Never run from forks — only the canonical repo holds WINGET_TOKEN.
if: github.repository_owner == 'skyllc-ai'
steps:
- name: Submit manifest to winget-pkgs
uses: vedantmgoyal9/winget-releaser@4ffc7888bffd451b357355dc214d43bb9f23917e # v2
with:
identifier: SkyLLC.UFFS
# Match the Windows ZIP asset uploaded by release.yml. The
# action derives the package version from the release tag,
# stripping the leading `v` (v0.5.102 → 0.5.102).
installers-regex: 'uffs-windows-x64\.zip$'
release-tag: ${{ github.event.release.tag_name || inputs.release-tag }}
# The account that owns the microsoft/winget-pkgs fork komac
# pushes the manifest branch to. MUST match the account that
# owns WINGET_TOKEN — i.e. the maintainer who submitted the
# original PR microsoft/winget-pkgs#378294, NOT the `skyllc-ai`
# org (the action's default `github.repository_owner`, which
# has no winget-pkgs fork).
fork-user: githubrobbi
token: ${{ secrets.WINGET_TOKEN }}
26 changes: 26 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,32 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Added — WinGet distribution: live install docs + auto-submission pipeline

`SkyLLC.UFFS` is published on the Windows Package Manager community
repository (microsoft/winget-pkgs#378294, v0.5.102), so `winget install
SkyLLC.UFFS` now works.

- **Docs promote WinGet as the recommended Windows install.** `README.md`
Download section gains the `winget install SkyLLC.UFFS` one-liner and
the stale "WinGet (coming)" note is removed;
`docs/user-manual/installation.md` gains a new §1 *WinGet (Windows —
Recommended)* and renumbers the downstream sections (Pre-Built Binaries
→ §2 … Verify Installation → §6).
- **`.github/workflows/winget-publish.yml`** — on every published
release (`release: released`), `winget-releaser` (komac under the hood)
opens a winget-pkgs PR bumping the manifest. The prior version's
nested-installer structure (`InstallerType: zip` /
`NestedInstallerType: portable`, the four `uffs`/`uffsd`/`uffsmcp`/
`uffs-mft` command aliases) carries over automatically. A
`workflow_dispatch` fallback re-submits a specific tag by hand.
- **One-time setup required:** add a `WINGET_TOKEN` repository secret —
a classic PAT with `public_repo` scope owned by the maintainer
account that holds the winget-pkgs fork (the action's `fork-user` is
pinned to `githubrobbi`, not the `skyllc-ai` org). The default
`GITHUB_TOKEN` cannot fork an external repo, so the workflow no-ops
until this secret exists.

### Added — Phase 8: operator-driven memory tiering (v0.6.0 staging)

The full operator-facing memory-tiering surface — every command end-to-end
Expand Down
10 changes: 7 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,9 +84,13 @@ Each release ships pre-built binaries, a `CHECKSUMS.txt` (SHA256), per-crate SBO
| **macOS Apple Silicon** | [`uffs-macos-arm64.zip`](https://github.com/skyllc-ai/UltraFastFileSearch/releases/latest) | Offline MFT analysis only. Includes `UFFS.app` bundle. |
| **Linux x64** | [`uffs-linux-x64.zip`](https://github.com/skyllc-ai/UltraFastFileSearch/releases/latest) | Offline MFT analysis only. Includes `install.sh`. |

**Windows quick-install (one command):**
**Windows quick-install (one command) — via [WinGet](https://learn.microsoft.com/windows/package-manager/):**
```powershell
winget install SkyLLC.UFFS
```

Or grab the ZIP above, extract it anywhere, add the folder to PATH, then:
```powershell
# Extract the ZIP anywhere, add the folder to PATH, then:
uffs --version
```

Expand All @@ -105,7 +109,7 @@ gh attestation verify uffs-windows-x64.exe --owner skyllc-ai
cargo build --release
```

> 📖 **[Full installation guide](docs/user-manual/installation.md)** — PATH setup, daemon autostart, WinGet (coming), Scoop (coming)
> 📖 **[Full installation guide](docs/user-manual/installation.md)** — WinGet, PATH setup, daemon autostart, Scoop (coming)

---

Expand Down
44 changes: 36 additions & 8 deletions docs/user-manual/installation.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
# Installation

Pre-built Windows binaries are available from
[GitHub Releases](https://github.com/skyllc-ai/UltraFastFileSearch/releases).
On Windows, the fastest path is [WinGet](https://learn.microsoft.com/windows/package-manager/)
(§1). Pre-built binaries for all platforms are also available from
[GitHub Releases](https://github.com/skyllc-ai/UltraFastFileSearch/releases) (§2).
Most users do not need to build from source.

> **See also:** [Getting Started](getting-started.md) ·
Expand All @@ -10,7 +11,34 @@ Most users do not need to build from source.

---

## 1 Pre-Built Binaries (Recommended)
## 1 WinGet (Windows — Recommended)

If you have the [Windows Package Manager](https://learn.microsoft.com/windows/package-manager/)
(bundled with Windows 11 and modern Windows 10), install in one command:

```powershell
winget install SkyLLC.UFFS
```

This installs the `uffs` CLI (daemon + MCP + MFT tools) and puts it on
your PATH automatically. Upgrade later with:

```powershell
winget upgrade SkyLLC.UFFS
```

Confirm the install:

```powershell
uffs --version
```

> Live NTFS search still requires an **Administrator** terminal — see
> [§3 Platform Requirements](#3--platform-requirements).

---

## 2 Pre-Built Binaries

Download the latest Windows x64 binaries from the
[GitHub Releases page](https://github.com/skyllc-ai/UltraFastFileSearch/releases/latest).
Expand Down Expand Up @@ -71,7 +99,7 @@ Get-FileHash uffs-windows-x64.exe -Algorithm SHA256

---

## 2 Platform Requirements
## 3 Platform Requirements

| Platform | Data source | Privileges |
|----------|------------|------------|
Expand Down Expand Up @@ -106,7 +134,7 @@ See [Cache & Data Sources](cache-and-data.md) for how to set up the

---

## 3 Add to PATH
## 4 Add to PATH

### Windows (PowerShell)

Expand All @@ -128,15 +156,15 @@ uffs --version
uffs "*.txt" --limit 5
```

### macOS / Linux (build from source — see §4)
### macOS / Linux (build from source — see §5)

```bash
ln -s "$(pwd)/target/release/uffs" /usr/local/bin/uffs
```

---

## 4 Build from Source
## 5 Build from Source

Building from source is needed for development, contributing, or
running on macOS/Linux.
Expand Down Expand Up @@ -211,7 +239,7 @@ for details on the `xwin-dev` profile and COFF archive size limits.

---

## 5 Verify Installation
## 6 Verify Installation

```bash
# Check version
Expand Down
Loading