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
4 changes: 2 additions & 2 deletions .fvmrc
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{
"flutter": "beta",
"flutter": "3.44.4",
"flavors": {}
}
}
2 changes: 0 additions & 2 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@

# CI and config: repo owner only
/.github/ @chaudharydeepanshu
/.gitmodules @chaudharydeepanshu
/cellar @chaudharydeepanshu
/.githooks/ @chaudharydeepanshu

# Build + supply-chain machinery: repo owner only. Holds the commit-types list
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/auto-close.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:
auto-close:
permissions:
issues: write # label, comment on, and close resolved issues
uses: whuppi/ci/.github/workflows/auto-close.yml@v2.0.0
uses: whuppi/ci/.github/workflows/auto-close.yml@v2.0.4
with:
# Team slug, not a hardcoded person — membership is managed in the org
# (the same team CODEOWNERS uses), so a maintainer change never edits this.
Expand Down
25 changes: 12 additions & 13 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ jobs:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false
- uses: whuppi/ci/actions/make-target@v2.0.0
- uses: whuppi/ci/actions/make-target@v2.0.4
with:
make-target: format

Expand All @@ -95,7 +95,7 @@ jobs:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false
- uses: whuppi/ci/actions/make-target@v2.0.0
- uses: whuppi/ci/actions/make-target@v2.0.4
with:
make-target: analyze

Expand All @@ -113,7 +113,7 @@ jobs:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false
- uses: whuppi/ci/actions/make-target@v2.0.0
- uses: whuppi/ci/actions/make-target@v2.0.4
with:
make-target: analyze-floor

Expand All @@ -132,12 +132,12 @@ jobs:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false
- uses: whuppi/ci/actions/make-target@v2.0.0
- uses: whuppi/ci/actions/make-target@v2.0.4
with:
make-target: platforms

test:
name: Test guards
name: Package tests
needs: [inputs, changes]
if: needs.changes.outputs.code == 'true'
runs-on: ${{ needs.inputs.outputs.runner }}
Expand All @@ -148,12 +148,12 @@ jobs:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false
- uses: whuppi/ci/actions/make-target@v2.0.0
- uses: whuppi/ci/actions/make-target@v2.0.4
with:
make-target: test

test-example-matrix:
name: Unit tests (VM)
name: Example journeys (host VM)
needs: [inputs, changes]
if: needs.changes.outputs.code == 'true'
runs-on: ${{ needs.inputs.outputs.runner }}
Expand All @@ -164,7 +164,7 @@ jobs:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false
- uses: whuppi/ci/actions/make-target@v2.0.0
- uses: whuppi/ci/actions/make-target@v2.0.4
with:
make-target: test-example-matrix

Expand All @@ -185,9 +185,8 @@ jobs:
ANALYZE: ${{ needs.analyze.result }}
FLOOR: ${{ needs.analyze-floor.result }}
PLATFORMS: ${{ needs.platforms.result }}
GUARDS: ${{ needs.test-guards.result }}
UNIT: ${{ needs.test-unit.result }}
WEB: ${{ needs.test-web.result }}
PKG: ${{ needs.test.result }}
JOURNEYS: ${{ needs.test-example-matrix.result }}
run: |
# A failed (not skipped) changes job clears its outputs, so CODE
# arrives empty — which must NOT read as "doc-only". Gate on the job
Expand All @@ -200,8 +199,8 @@ jobs:
echo "Doc-only PR — CI gate passes"
exit 0
fi
if [[ "$FORMAT" != "success" ]] || [[ "$ANALYZE" != "success" ]] || [[ "$FLOOR" != "success" ]] || [[ "$PLATFORMS" != "success" ]] || [[ "$GUARDS" != "success" ]] || [[ "$UNIT" != "success" ]] || [[ "$WEB" != "success" ]]; then
echo "FAILED: format=$FORMAT analyze=$ANALYZE floor=$FLOOR platforms=$PLATFORMS guards=$GUARDS unit=$UNIT web=$WEB"
if [[ "$FORMAT" != "success" ]] || [[ "$ANALYZE" != "success" ]] || [[ "$FLOOR" != "success" ]] || [[ "$PLATFORMS" != "success" ]] || [[ "$PKG" != "success" ]] || [[ "$JOURNEYS" != "success" ]]; then
echo "FAILED: format=$FORMAT analyze=$ANALYZE floor=$FLOOR platforms=$PLATFORMS pkg=$PKG journeys=$JOURNEYS"
exit 1
fi
echo "All CI checks passed"
2 changes: 1 addition & 1 deletion .github/workflows/debug-ssh.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ jobs:
with:
persist-credentials: false

- uses: whuppi/ci/actions/debug-ssh@v2.0.0
- uses: whuppi/ci/actions/debug-ssh@v2.0.4

- name: Keep alive (touch /tmp/stop to end)
shell: bash
Expand Down
9 changes: 7 additions & 2 deletions .github/workflows/full-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,11 @@ jobs:
matrix:
include:

# ── Package tests ──
- { name: "pkg: Linux (ubuntu-x64)", runner: ubuntu-24.04, make: test, timeout: 20 }
- { name: "pkg: macOS (macos-arm64)", runner: macos-14, make: test, timeout: 20 }
- { name: "pkg: Windows (win-x64)", runner: windows-2025-vs2026, make: test, timeout: 30 }

# ── Example journeys (host VM, in-memory) ──
- { name: "int: Journeys (ubuntu-x64)", runner: ubuntu-24.04, make: test-example-matrix, timeout: 20 }
- { name: "int: Journeys (macos-arm64) [P]", runner: macos-14, make: test-example-matrix, timeout: 20, portability: true }
Expand Down Expand Up @@ -122,7 +127,7 @@ jobs:
steps:
- name: Check filter
id: filter
uses: whuppi/ci/actions/matrix-filter@v2.0.0
uses: whuppi/ci/actions/matrix-filter@v2.0.4
with:
name: ${{ matrix.name }}
filter: ${{ needs.inputs.outputs.filter }}
Expand All @@ -132,7 +137,7 @@ jobs:
if: steps.filter.outputs.match == 'true'
with:
persist-credentials: false
- uses: whuppi/ci/actions/make-target@v2.0.0
- uses: whuppi/ci/actions/make-target@v2.0.4
if: steps.filter.outputs.match == 'true'
with:
make-target: ${{ matrix.make }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/labels.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,4 @@ jobs:
permissions:
contents: read # checkout reads .github/labels.json
issues: write # labels are managed through the Issues API
uses: whuppi/ci/.github/workflows/labels.yml@v2.0.0
uses: whuppi/ci/.github/workflows/labels.yml@v2.0.4
2 changes: 1 addition & 1 deletion .github/workflows/pr-checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,4 @@ jobs:
checks:
permissions:
contents: read # the reusable jobs only checkout + lint, read-only
uses: whuppi/ci/.github/workflows/pr-checks.yml@v2.0.0
uses: whuppi/ci/.github/workflows/pr-checks.yml@v2.0.4
8 changes: 7 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,11 @@ on:
default: 'dev'
type: choice
options: [dev, prod]
runner:
description: "Runner for infra jobs (gate, discover, publish)"
type: choice
options: [ubuntu-24.04, macos-14, windows-2025-vs2026]
default: ubuntu-24.04

permissions: {}

Expand All @@ -30,8 +35,9 @@ jobs:
release:
permissions:
contents: write # create the release/tag, edit notes, ephemeral publish commit
uses: whuppi/ci/.github/workflows/release.yml@v2.0.0
uses: whuppi/ci/.github/workflows/release.yml@v2.0.4
with:
branch: ${{ inputs.branch || github.ref_name }}
runner: ${{ inputs.runner || 'ubuntu-24.04' }}
secrets:
pub-credentials: ${{ secrets.PUB_CREDENTIALS }}
2 changes: 1 addition & 1 deletion .github/workflows/retry.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,4 @@ jobs:
retry:
permissions:
actions: write # gh run rerun re-runs the failed jobs of the run
uses: whuppi/ci/.github/workflows/retry.yml@v2.0.0
uses: whuppi/ci/.github/workflows/retry.yml@v2.0.4
2 changes: 1 addition & 1 deletion .github/workflows/triage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,4 @@ jobs:
contents: read # labeler reads .github/labeler.yml + the PR file list
issues: write # assign maintainer on issue-opened events
pull-requests: write # apply labels, revoke ready-to-test, post notices
uses: whuppi/ci/.github/workflows/triage.yml@v2.0.0
uses: whuppi/ci/.github/workflows/triage.yml@v2.0.4
2 changes: 1 addition & 1 deletion .github/workflows/upgrade-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
permissions:
contents: write # pushes the chore/flutter-sdk + chore/lockfiles branches
pull-requests: write # opens / edits the upgrade PRs
uses: whuppi/ci/.github/workflows/upgrade-check.yml@v2.0.0
uses: whuppi/ci/.github/workflows/upgrade-check.yml@v2.0.4
with:
branch: dev

Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -321,3 +321,6 @@ pip-wheel-*
*.temp
*.orig
.sass-cache/

# Local co-development override (points cellar at a sibling checkout)
pubspec_overrides.yaml
4 changes: 0 additions & 4 deletions .gitmodules

This file was deleted.

6 changes: 6 additions & 0 deletions .pubignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,9 @@ tool/
Makefile
docs/
.githooks/

# Banner: ship only the optimized *-web-min.webp the README embeds. The
# heavy *-3x.png sources stay tracked in git (org-quality preservation)
# but out of the published download — nothing references them on pub.dev.
assets/cellar_flutter-banner-dark-3x.png
assets/cellar_flutter-banner-light-3x.png
16 changes: 9 additions & 7 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ Manual edits to this file will be overwritten on the next stamp.
## What this tool does

cellar_flutter is the Flutter front door for the pure-Dart `cellar`
object-storage core (pinned as the `cellar/` git submodule). It holds ONLY
object-storage core (a hosted dependency, version-locked). It holds ONLY
what needs the Flutter engine: `openCellar()`, which resolves the
platform storage roots via path_provider (behind a stub-default
conditional import — web builds never compile path_provider) and
Expand Down Expand Up @@ -82,19 +82,21 @@ When in doubt, read existing code in this repo and match it. Per-repo style cons

- **Only engine-bound code lives here.** Anything pure Dart — including
web code (`package:web` is SDK, not Flutter) — belongs in the
`cellar` core (its own repo; pinned here as a submodule). This package exists because path_provider needs the
Flutter plugin chain.
`cellar` core (its own repo; consumed from pub.dev at the locked
version). This package exists because path_provider needs the Flutter
plugin chain.
- **path_provider is imported ONLY in `flutter_roots_native.dart`**,
behind the conditional import in `flutter_roots.dart` — its API
returns dart:io types, which don't compile for web. Never import the
branch files directly.
- **`openCellar` mirrors the core's `Cellar` constructor parameter for
parameter.** A new core parameter means the same parameter here,
forwarded, in the same change.
- **The core is a pinned submodule (`cellar/`, pubspec path dep).**
Core changes land in whuppi/cellar first, then the pin bumps here —
commit inside the submodule, push there, `git add cellar` here. Run
`make check` after any bump.
- **The core is a hosted dependency; `pubspec.lock` is the pin.**
Core changes land and release in whuppi/cellar first; the Dependabot
bump PR here certifies them against the matrix. For local
co-development use a gitignored `pubspec_overrides.yaml`
(`cellar: {path: ../cellar}`).
- **Tests fake path_provider at `PathProviderPlatform.instance`** (the
platform-interface seam) and assert storage actually lands under the
fake roots — never just that calls succeed.
Expand Down
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,7 @@ CONTENT RULES (never change)
-->

<!-- Add new versions below, newest first. -->

## 1.0.0

First stable release — cellar for Flutter, zero-setup storage on all six platforms.
7 changes: 1 addition & 6 deletions CHANGELOG.pre.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,4 @@ CONTENT RULES (never change)

## 1.0.0-dev.0

First release — the Flutter front door for `cellar`.

- **API:** `openCellar()` — one call resolves the platform storage roots via path_provider, opens, and returns a ready `Cellar`; mirrors the core constructor's parameters
- **Re-export:** the full `cellar` core API from one import — apps never also depend on `cellar`
- **Platforms:** iOS, Android, macOS, Windows, Linux, web — the path_provider glue sits behind a stub-default conditional import, so web builds never compile it
- **Example:** the seven-tab demo app with device-matrix UI journeys and a per-platform integration smoke
First release.
19 changes: 13 additions & 6 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Contributions are welcome.
## Setup

```bash
git clone --recursive https://github.com/whuppi/cellar_flutter.git
git clone https://github.com/whuppi/cellar_flutter.git
cd cellar_flutter
make hooks # activates commit-msg + pre-commit (run once)
fvm install # downloads the SDK version pinned in .fvmrc
Expand All @@ -16,8 +16,15 @@ fvm flutter test
```

**Requires:** [FVM](https://fvm.app) (`.fvmrc` pins the exact Flutter
version). The `cellar` core is a pinned git submodule at `cellar/` —
clone with `--recursive` (or run `git submodule update --init` after).
version). The `cellar` core resolves from pub.dev at the locked version.
Co-developing against a local core checkout? Drop a gitignored
`pubspec_overrides.yaml` next to each pubspec:

```yaml
dependency_overrides:
cellar:
path: ../cellar # ../../cellar from example/
```

**Without FVM:** all Makefile commands accept `DART` and `FLUTTER`
overrides:
Expand All @@ -41,9 +48,9 @@ Runs `format` + `analyze` (package + example) + `analyze-floor`
device profile, on the host VM). Must pass. Don't suppress with
`// ignore:` — fix the underlying issue.

Touching the `cellar` core too? Its changes land in its own repo
first; then bump the submodule pin here (commit inside `cellar/`, push
there, `git add cellar` here) and run `make check`.
Touching the `cellar` core too? Its changes land in its own repo and
release first; the Dependabot bump PR here runs the full matrix against
that release.

---

Expand Down
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@ analyze-floor:

# pana's platform attribution — all six targets must survive the
# conditional-import walk (the stub default is what makes web attribute).
# The cellar core is a submodule INSIDE the repo, so the gate's snapshot
# carries it and the `path: cellar` dep resolves — no wrapper needed.
# The cellar core is a published hosted dep, so pana resolves it exactly
# as pub.dev will.
platforms:
@DART="$(DART)" EXPECTED_PLATFORMS="android ios linux macos windows web" bash tool/platforms_gate.sh

Expand Down
Loading