Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
dad48a0
ci: prepare release v1 workflows (#1400)
andrinoff Jun 1, 2026
1890665
chore: use go-keybind (#1397)
andrinoff Jun 1, 2026
e4987f3
test: implement encryption tests (#1399)
mavonx Jun 1, 2026
cbd1137
fix(badge): dedupe unread count (#1398)
FromSi Jun 1, 2026
1295b58
chore: update flake.lock (#1401)
floatpanebot Jun 1, 2026
f97aca4
chore: sync gomod2nix.toml (#1402)
floatpanebot Jun 1, 2026
daab110
chore(deps): charm.land/bubbletea/v2 ^ v2.0.7 (#1405)
floatpanebot Jun 1, 2026
4ee8a9b
chore(deps): react ^ 19.2.7 (#1406)
floatpanebot Jun 1, 2026
617e1aa
chore: sync gomod2nix.toml (#1407)
floatpanebot Jun 1, 2026
ced3444
docs: add a mention of v1 in README (#1409)
andrinoff Jun 2, 2026
e9adba8
docs: remove gitads (#1428)
andrinoff Jun 3, 2026
5840b30
chore(deps): go ^ 1.26.4 (#1430)
floatpanebot Jun 3, 2026
ab0d447
chore(deps): actions/checkout ^ (#1429)
floatpanebot Jun 3, 2026
e06a2fe
chore(deps): go ^ 1.26.4 (#1419)
floatpanebot Jun 3, 2026
d14a4cb
fix: gate status request (#1427)
andrinoff Jun 4, 2026
0527f4c
fix: save drafts on quit (#1424)
andrinoff Jun 4, 2026
2256ec7
chore(deps): github.com/floatpane/bubble-overlay ^ v0.1.0 (#1437)
floatpanebot Jun 4, 2026
b3fd04c
chore: sync gomod2nix.toml (#1439)
floatpanebot Jun 4, 2026
57d1d7e
chore: update flake.lock (#1438)
floatpanebot Jun 4, 2026
c090aa6
fix(ui): use overlay for move modal (#1440)
andrinoff Jun 4, 2026
4e6108f
fix: better protocol selector (#1441)
andrinoff Jun 5, 2026
28a4580
fix: move "Language set" to loglevel (#1442)
LeaWhoCodes Jun 5, 2026
11d4adb
fix: JMAP integration (#1445)
masukomi Jun 5, 2026
496a775
fix: JMAP fetching and moving (#1446)
masukomi Jun 6, 2026
8fd928e
feat: send or unsend matcha messages (#1434)
mavonx Jun 7, 2026
b30febd
feat: make daemon optional (#1450)
andrinoff Jun 7, 2026
76aefba
docs: update feature screenshots (#1452)
floatpanebot Jun 7, 2026
5c8bfb7
docs: update demo.gif (#1451)
floatpanebot Jun 7, 2026
8710452
fix: crashes when sending (#1454)
andrinoff Jun 7, 2026
a7c5ba1
fix: make undo message non-blocking (#1455)
andrinoff Jun 7, 2026
eab4d68
chore(deps): golang.org/x/text ^ v0.38.0 (#1459)
floatpanebot Jun 8, 2026
d188d37
chore(deps): golang.org/x/term ^ v0.44.0 (#1458)
floatpanebot Jun 9, 2026
02e483c
ci: use plugins instead of list-plugins (#1468)
andrinoff Jun 15, 2026
f5cfc58
chore: update flake.lock (#1460)
floatpanebot Jun 15, 2026
1858d14
chore: sync gomod2nix.toml (#1461)
floatpanebot Jun 15, 2026
fa782ba
fix: keybinds working in search mode (#1469)
andrinoff Jun 15, 2026
e64a6cb
chore(deps): greenmail/standalone ^ 2.1.9 (#1465)
floatpanebot Jun 15, 2026
d986da1
chore(deps): charm.land/lipgloss/v2 ^ v2.0.4 (#1464)
floatpanebot Jun 15, 2026
4f45a9a
chore: sync gomod2nix.toml (#1471)
floatpanebot Jun 15, 2026
0ecbe2d
chore: update flake.lock (#1470)
floatpanebot Jun 15, 2026
b6919cb
chore: update the website (#1475)
andrinoff Jun 15, 2026
1ae21f4
feat: grace period for any action (#1474)
andrinoff Jun 15, 2026
9598266
feat: support pass commands (#1473)
andrinoff Jun 15, 2026
c35df66
chore(deps): github.com/floatpane/bubble-overlay ^ v0.2.0 (#1479)
floatpanebot Jun 17, 2026
4c20b1e
chore: add make install (#1482)
andrinoff Jun 17, 2026
4aaaeb1
chore: update flake.lock (#1480)
floatpanebot Jun 17, 2026
030f814
chore: sync gomod2nix.toml (#1481)
floatpanebot Jun 17, 2026
9cc364e
chore(deps): github.com/floatpane/go-openpgp-card-hl ^ v0.1.2 (#1488)
floatpanebot Jun 20, 2026
da1d1e3
chore(deps): actions/checkout ^ v7.0.0 (#1490)
floatpanebot Jun 20, 2026
4adabe1
chore: sync gomod2nix.toml (#1494)
floatpanebot Jun 20, 2026
d093013
fix(tui): update folder unread counter (#1493)
youdie006 Jun 20, 2026
1e9089d
fix: add more providers, set priority (#1495)
andrinoff Jun 21, 2026
55eb945
chore: update docs website (#1497)
andrinoff Jun 21, 2026
f322dd8
chore: add rc upgrade message (#1617)
andrinoff Jun 23, 2026
91e7c4d
chore(deps): renovatebot/github-action ^ v46.1.16
floatpanebot Jun 23, 2026
7466757
chore: move daemon start log to debug (#1620)
andrinoff Jun 24, 2026
8235eaa
fix: add cap to image rendering (#1621)
andrinoff Jun 24, 2026
f9c5f76
docs: add mermaid diagrams (#1623)
andrinoff Jun 24, 2026
01e7764
fix: gmail 555 error when sending (#1496)
andrinoff Jun 24, 2026
ee18b1b
chore: update README (#1634)
andrinoff Jun 28, 2026
5e69b08
chore(deps): vue ^ 3.5.39 (#1629)
floatpanebot Jun 30, 2026
ecdf226
chore(deps): mermaid ^ 11.16.0 (#1630)
floatpanebot Jun 30, 2026
c157af0
fix: release fail (#1649)
andrinoff Jul 4, 2026
fe6a521
chore(deps): charm.land/bubbletea/v2 ^ v2.0.8 (#1644)
floatpanebot Jul 5, 2026
62619e2
chore(deps): charm.land/bubbles/v2 ^ v2.1.1 (#1647)
floatpanebot Jul 5, 2026
5a4c6e1
chore(deps): charm.land/lipgloss/v2 ^ v2.0.5 (#1645)
floatpanebot Jul 5, 2026
a13b8b4
chore: sync gomod2nix.toml (#1653)
floatpanebot Jul 5, 2026
2b0fadf
docs: update demo.gif from release
andrinoff Jul 5, 2026
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
17 changes: 17 additions & 0 deletions .github/labels.yml
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,23 @@
color: c2e0c6
description: Docs site / README

# --- Release / v1 routing ---
- name: backport/v1
color: 0e8a16
description: Merge to master and backport to release/v1
- name: target/v1
color: 1d76db
description: PR targets the release/v1 branch directly
- name: backported
color: c5def5
description: Cherry-picked onto release/v1
- name: backport-failed
color: b60205
description: Cherry-pick conflict — needs manual backport
- name: skip-changelog
color: ededed
description: Exclude from generated release notes

# --- Size ---
- name: size/XS
color: "3cbf00"
Expand Down
127 changes: 127 additions & 0 deletions .github/workflows/backport.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
name: Backport to release/v1

# Cherry-picks a merged PR's commit straight onto release/v1 and pushes it —
# no intermediate PR. Fires when:
# - a PR labeled `backport/v1` is merged into master, or
# - a maintainer comments `/backport v1` on an already-merged PR.
# On a clean cherry-pick the commit is pushed directly. On conflict nothing is
# pushed; the source PR is labeled `backport-failed` and a comment asks for a
# manual cherry-pick.

on:
pull_request_target:
types: [closed]
issue_comment:
types: [created]

permissions:
contents: write
pull-requests: write
issues: write

jobs:
backport:
name: Backport
runs-on: ubuntu-latest
if: >
(github.event_name == 'pull_request_target'
&& github.event.pull_request.merged == true
&& contains(github.event.pull_request.labels.*.name, 'backport/v1'))
|| (github.event_name == 'issue_comment'
&& github.event.issue.pull_request
&& github.event.issue.state == 'closed'
&& startsWith(github.event.comment.body, '/backport v1')
&& contains(fromJSON('["OWNER","MEMBER","COLLABORATOR"]'), github.event.comment.author_association))
steps:
- name: Resolve PR and merge commit
id: pr
uses: actions/github-script@v9
with:
github-token: ${{ secrets.HOMEBREW_GITHUB_TOKEN }}
script: |
const { owner, repo } = context.repo;
const num = context.eventName === 'issue_comment'
? context.payload.issue.number
: context.payload.pull_request.number;

const { data: pr } = await github.rest.pulls.get({ owner, repo, pull_number: num });

if (!pr.merged || !pr.merge_commit_sha) {
core.notice(`PR #${num} is not merged; nothing to backport.`);
core.setOutput('run', 'false');
return;
}
core.setOutput('run', 'true');
core.setOutput('number', String(num));
core.setOutput('sha', pr.merge_commit_sha);
core.setOutput('title', pr.title);

- name: Checkout
if: steps.pr.outputs.run == 'true'
uses: actions/checkout@v7
with:
fetch-depth: 0
ref: release/v1
token: ${{ secrets.HOMEBREW_GITHUB_TOKEN }}

- name: Cherry-pick onto release/v1
if: steps.pr.outputs.run == 'true'
id: pick
run: |
set -euo pipefail
SHA="${{ steps.pr.outputs.sha }}"
git config user.name "Floatpane Bot"
git config user.email "us@floatpane.com"
git fetch --no-tags origin "$SHA"

# A true merge commit has >1 parent and needs a mainline (-m 1);
# squash/rebase merges are a single commit cherry-picked as-is.
PARENTS=$(git rev-list --parents -n1 "$SHA" | wc -w)
PICK_ARGS="-x"
if [ "$PARENTS" -gt 2 ]; then PICK_ARGS="-x -m 1"; fi

if git cherry-pick $PICK_ARGS "$SHA"; then
git push origin HEAD:release/v1
echo "status=ok" >> "$GITHUB_OUTPUT"
else
git cherry-pick --abort || true
echo "status=conflict" >> "$GITHUB_OUTPUT"
fi

- name: Report result
if: steps.pr.outputs.run == 'true'
uses: actions/github-script@v9
with:
github-token: ${{ secrets.HOMEBREW_GITHUB_TOKEN }}
script: |
const { owner, repo } = context.repo;
const issue_number = Number('${{ steps.pr.outputs.number }}');
const status = '${{ steps.pick.outputs.status }}';
const sha = '${{ steps.pr.outputs.sha }}';

if (status === 'ok') {
await github.rest.issues.addLabels({ owner, repo, issue_number, labels: ['backported'] });
try {
await github.rest.issues.removeLabel({ owner, repo, issue_number, name: 'backport-failed' });
} catch (e) { if (e.status !== 404) throw e; }
await github.rest.issues.createComment({
owner, repo, issue_number,
body: `Cherry-picked \`${sha.substring(0, 7)}\` onto \`release/v1\`.`,
});
} else {
await github.rest.issues.addLabels({ owner, repo, issue_number, labels: ['backport-failed'] });
await github.rest.issues.createComment({
owner, repo, issue_number,
body: [
`Backport to \`release/v1\` hit a conflict — cherry-pick it manually:`,
'```bash',
'git fetch origin',
'git checkout release/v1',
`git cherry-pick -x ${sha}`,
'# resolve conflicts, then:',
'git push origin release/v1',
'```',
].join('\n'),
});
core.setFailed('Cherry-pick conflict.');
}
4 changes: 2 additions & 2 deletions .github/workflows/benchmarks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,14 @@ jobs:
timeout-minutes: 30
steps:
- name: Checkout PR
uses: actions/checkout@v6
uses: actions/checkout@v7
with:
fetch-depth: 0

- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: "1.26.3"
go-version: "1.26.4"

- name: Install system dependencies
run: sudo apt-get update && sudo apt-get install -y libpcsclite-dev
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/bot-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ jobs:
core.setOutput('repo', pr.head.repo.full_name);

- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7
with:
repository: ${{ steps.pr.outputs.repo }}
ref: ${{ steps.pr.outputs.ref }}
Expand All @@ -77,7 +77,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: "1.26.3"
go-version: "1.26.4"

- name: Set up Zig
uses: goto-bus-stop/setup-zig@v2
Expand Down Expand Up @@ -134,8 +134,8 @@ jobs:
zig cc -c -target aarch64-linux-musl -o "$RUNNER_TEMP/pcsclite_stub_arm64.o" "$RUNNER_TEMP/pcsclite_stub.c"

mkdir -p "$PCSC_DIR/lib/amd64" "$PCSC_DIR/lib/arm64"
ar rcs "$PCSC_DIR/lib/amd64/libpcsclite.a" "$RUNNER_TEMP/pcsclite_stub_amd64.o"
ar rcs "$PCSC_DIR/lib/arm64/libpcsclite.a" "$RUNNER_TEMP/pcsclite_stub_arm64.o"
zig ar rcs "$PCSC_DIR/lib/amd64/libpcsclite.a" "$RUNNER_TEMP/pcsclite_stub_amd64.o"
zig ar rcs "$PCSC_DIR/lib/arm64/libpcsclite.a" "$RUNNER_TEMP/pcsclite_stub_arm64.o"

cat > "$PCSC_DIR/lib/pkgconfig/libpcsclite.pc" << EOF
Name: libpcsclite
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/bot-check-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,9 @@ jobs:
lint: "Run `make lint` locally.",
'mod-tidy': "Run `go mod tidy` and commit `go.mod`/`go.sum`.",
nix: "Run `nix flake check --no-build` locally.",
snap: "Validate `snapcraft.yaml` with `snapcraft list-plugins`.",
snap: "Validate `snapcraft.yaml` with `snapcraft plugins`.",
flatpak: "Validate the Flatpak manifest YAML structure.",
website: "Run `cd docs && npm ci && npx docusaurus build`.",
website: "Run `cd docs && npm ci && npm run build`.",
'lua-plugins': "Run `luac -p plugins/*.lua` to check Lua syntax.",
goreleaser: "Run `goreleaser check -f .goreleaser.yml`.",
build: "Run `go build ./...` and `go test ./...` locally.",
Expand Down
35 changes: 18 additions & 17 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@ name: CI

on:
push:
branches: [master]
branches: [master, release/v1]
pull_request:
branches: [master]
branches: [master, release/v1]
merge_group:

jobs:
build:
Expand All @@ -13,12 +14,12 @@ jobs:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7

- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: "1.26.3"
go-version: "1.26.4"

- name: Install system dependencies
if: runner.os == 'Linux'
Expand All @@ -36,12 +37,12 @@ jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7

- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: "1.26.3"
go-version: "1.26.4"

- name: Install system dependencies
run: sudo apt-get update && sudo apt-get install -y libpcsclite-dev
Expand All @@ -68,12 +69,12 @@ jobs:
mod-tidy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7

- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: "1.26.3"
go-version: "1.26.4"

- name: Check go.mod and go.sum are tidy
run: |
Expand All @@ -90,7 +91,7 @@ jobs:
run:
working-directory: docs
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7

- name: Set up Node.js
uses: actions/setup-node@v6
Expand All @@ -103,18 +104,18 @@ jobs:
run: npm ci

- name: Build
run: npx docusaurus build
run: npm run build

snap:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7

- name: Validate snapcraft.yaml
run: |
sudo snap install snapcraft --classic
# Verify snapcraft can parse the project file
snapcraft list-plugins
snapcraft plugins
# Validate YAML structure and required fields
python3 << 'PYEOF'
import yaml, sys
Expand Down Expand Up @@ -148,7 +149,7 @@ jobs:
flatpak:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7

- name: Install dependencies
run: |
Expand Down Expand Up @@ -190,7 +191,7 @@ jobs:
nix:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7

- name: Install Nix
uses: cachix/install-nix-action@v31
Expand All @@ -203,7 +204,7 @@ jobs:
lua-plugins:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7

- name: Install Lua
run: sudo apt-get update && sudo apt-get install -y lua5.4
Expand All @@ -222,14 +223,14 @@ jobs:
goreleaser:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7
with:
fetch-depth: 0

- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: "1.26.3"
go-version: "1.26.4"

- name: Install GoReleaser
uses: goreleaser/goreleaser-action@v7
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/demo.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v6
uses: actions/checkout@v7
with:
persist-credentials: false

Expand Down
Loading
Loading