diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7d9ddd79..1ad3dfa9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -9,54 +9,23 @@ permissions: contents: write jobs: - build: - runs-on: macos-latest - strategy: - matrix: - include: - - goarch: arm64 - asset: flow-darwin-arm64 - - goarch: amd64 - asset: flow-darwin-amd64 - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-go@v5 - with: - go-version-file: go.mod - - name: Build ${{ matrix.asset }} - env: - GOOS: darwin - GOARCH: ${{ matrix.goarch }} - CGO_ENABLED: '0' - run: | - go build -trimpath \ - -ldflags "-s -w -X main.version=${GITHUB_REF_NAME}" \ - -o "${{ matrix.asset }}" . - - uses: actions/upload-artifact@v4 - with: - name: ${{ matrix.asset }} - path: ${{ matrix.asset }} - if-no-files-found: error - - release: - needs: build + goreleaser: runs-on: ubuntu-latest steps: - - uses: actions/download-artifact@v4 + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Set up Go + uses: actions/setup-go@v5 with: - path: dist - merge-multiple: true - - name: Generate checksums - working-directory: dist - run: | - shasum -a 256 flow-darwin-* > SHA256SUMS - cat SHA256SUMS - - name: Create GitHub Release - uses: softprops/action-gh-release@v2 + go-version-file: go.mod + - name: Run GoReleaser + uses: goreleaser/goreleaser-action@v6 with: - files: | - dist/flow-darwin-arm64 - dist/flow-darwin-amd64 - dist/SHA256SUMS - generate_release_notes: true - fail_on_unmatched_files: true + distribution: goreleaser + version: latest + args: release --clean + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + HOMEBREW_TAP_GITHUB_TOKEN: ${{ secrets.HOMEBREW_TAP_GITHUB_TOKEN }} diff --git a/.goreleaser.yaml b/.goreleaser.yaml new file mode 100644 index 00000000..6ca1cf71 --- /dev/null +++ b/.goreleaser.yaml @@ -0,0 +1,54 @@ +# .goreleaser.yaml +# Documentation at https://goreleaser.com +version: 2 + +before: + hooks: + - go mod tidy + +builds: + - goos: + - darwin + goarch: + - amd64 + - arm64 + ldflags: + - -s -w -X main.version={{.Version}} + binary: flow + +archives: + - formats: + - tar.gz + # this name template makes the result look like flow_0.1.0_darwin_amd64.tar.gz + name_template: "{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}" + files: + - LICENSE + - README.md + - CHANGELOG.md + +checksum: + name_template: 'checksums.txt' + +snapshot: + version_template: "{{ incpatch .Version }}-next" + +changelog: + use: github-native + +homebrew_casks: + - name: flow + repository: + owner: Facets-cloud + name: homebrew-tap + token: "{{ .Env.HOMEBREW_TAP_GITHUB_TOKEN }}" + homepage: "https://github.com/Facets-cloud/flow" + description: "A complete task manager for Claude Code — and the working memory layer that turns every session from a brilliant new hire into the engineer on your team." + license: "MIT" + caveats: | + After installation, you must run: + flow init + to set up the SQLite database and wire flow into Claude Code. + hooks: + post: + install: | + system_command "/usr/bin/xattr", args: ["-d", "com.apple.quarantine", "#{staged_path}/flow"], sudo: true diff --git a/README.md b/README.md index 4dcae4e6..349b9f42 100644 --- a/README.md +++ b/README.md @@ -43,14 +43,14 @@ the next one smarter. │ processes · business │ └─────▲──────────▲───────┘ │ │ - flow do │ scoop │ sweep - ┌────────┐ ─────────────────▶ ┌─────────┴──────────┴─────┐ - │ Task │ │ Claude session │ - │ brief │ ◀──── updates ───── │ loads brief + kb + │ - │ +notes │ │ notes + repo conventions│ - └────────┘ ─── flow done ───▶ └──────────────────────────┘ - (auto-sweep transcript - into kb on done) + flow do │ scoop │ sweep + ┌────────┐ ─────────────────▶ ┌─────────┴──────────┴─────┐ + │ Task │ │ Claude session │ + │ brief │ ◀──── updates ───── │ loads brief + kb + │ + │ +notes │ │ notes + repo conventions│ + └────────┘ ─── flow done ───▶ └──────────────────────────┘ + (auto-sweep transcript + into kb on done) ``` - **Scoop (live):** during a session the flow skill listens for @@ -90,7 +90,18 @@ back to the knowledge base on `flow done` like any other task. Same compounding mechanic — your weekly review session two months from now will know everything every prior weekly review surfaced. -## Install +## Installation + +### Homebrew (Recommended for macOS) + +```bash +brew install --cask Facets-cloud/tap/flow +flow init +``` + + + +### via Claude Code In any Claude Code session, paste this: @@ -102,24 +113,6 @@ and registers a SessionStart hook so every future Claude session loads the skill automatically. Then say **"let's get to work"** and follow along. -
-Manual install (curl + chmod + flow init) - -```bash -# 1. Download the binary for your Mac. -ARCH=arm64 # Apple Silicon (M1/M2/M3/M4) — use amd64 for Intel. - -curl -fsSL -o /usr/local/bin/flow \ - "https://github.com/Facets-cloud/flow/releases/latest/download/flow-darwin-${ARCH}" -chmod +x /usr/local/bin/flow -xattr -d com.apple.quarantine /usr/local/bin/flow 2>/dev/null || true - -# 2. Initialize. This is required — it creates ~/.flow/, the SQLite -# index, the knowledge base, AND installs the Claude skill + -# SessionStart hook. Without this step, Claude can't talk to flow. -flow init -``` - `flow init` is the step that wires flow into Claude Code. It: - Creates `~/.flow/` (database, kb, projects, tasks, playbooks) @@ -127,11 +120,6 @@ flow init - Adds a SessionStart hook to `~/.claude/settings.json` so every new Claude Code session auto-loads the skill -The `xattr` step removes Gatekeeper's quarantine attribute so macOS -doesn't refuse to run the unsigned binary. - -
- ## Upgrade In any Claude Code session: