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
9 changes: 9 additions & 0 deletions .github/workflows/candidate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,15 @@ jobs:
tool/release/prepare_unsigned_app.sh \
"build/macos/Build/Products/Release/$PRODUCT_NAME.app"

- name: Verify update feed
shell: bash
run: |
repository_name=${GITHUB_REPOSITORY#*/}
expected_feed_url="https://$GITHUB_REPOSITORY_OWNER.github.io/$repository_name/appcast.xml"
tool/release/verify_update_feed.sh \
"build/macos/Build/Products/Release/$PRODUCT_NAME.app" \
"$expected_feed_url"

- name: Verify app architectures
shell: bash
run: |
Expand Down
6 changes: 6 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,12 @@ jobs:
exit 1
fi

repository_name=${GITHUB_REPOSITORY#*/}
expected_feed_url="https://$GITHUB_REPOSITORY_OWNER.github.io/$repository_name/appcast.xml"
tool/release/verify_update_feed.sh \
"$app_path" \
"$expected_feed_url"

hdiutil detach "$mount_point"
trap - EXIT

Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
Capture and organize tasks one click away—without an account or cloud service.
</p>
<p>
<a href="https://github.com/lucaslushuo/floatick/actions/workflows/ci.yml">
<img src="https://github.com/lucaslushuo/floatick/actions/workflows/ci.yml/badge.svg" alt="CI status" />
<a href="https://github.com/lucaslus/floatick/actions/workflows/ci.yml">
<img src="https://github.com/lucaslus/floatick/actions/workflows/ci.yml/badge.svg" alt="CI status" />
</a>
<img src="https://img.shields.io/badge/macOS-10.15%2B-111111?logo=apple" alt="macOS 10.15 or later" />
<img src="https://img.shields.io/badge/Flutter-3.44.7-02569B?logo=flutter" alt="Flutter 3.44.7" />
Expand Down Expand Up @@ -46,7 +46,7 @@ near any display edge.
## Download Floatick for macOS

Download the latest DMG from
[GitHub Releases](https://github.com/lucaslushuo/floatick/releases), open it,
[GitHub Releases](https://github.com/lucaslus/floatick/releases), open it,
and drag Floatick into `Applications`. Release packages are universal binaries
for both Apple silicon and Intel Macs.

Expand Down Expand Up @@ -170,7 +170,7 @@ preparing a release.

## Contributing

[Issues](https://github.com/lucaslushuo/floatick/issues) and focused pull
[Issues](https://github.com/lucaslus/floatick/issues) and focused pull
requests are welcome. Please keep changes scoped, add tests for meaningful
behavior, and preserve the local JSON data contract.

Expand Down
8 changes: 4 additions & 4 deletions README.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
无需账号或云服务,让任务记录与整理始终触手可及。
</p>
<p>
<a href="https://github.com/lucaslushuo/floatick/actions/workflows/ci.yml">
<img src="https://github.com/lucaslushuo/floatick/actions/workflows/ci.yml/badge.svg" alt="CI 状态" />
<a href="https://github.com/lucaslus/floatick/actions/workflows/ci.yml">
<img src="https://github.com/lucaslus/floatick/actions/workflows/ci.yml/badge.svg" alt="CI 状态" />
</a>
<img src="https://img.shields.io/badge/macOS-10.15%2B-111111?logo=apple" alt="支持 macOS 10.15 或更高版本" />
<img src="https://img.shields.io/badge/Flutter-3.44.7-02569B?logo=flutter" alt="Flutter 3.44.7" />
Expand Down Expand Up @@ -41,7 +41,7 @@ Floatick 是一款支持离线使用的 macOS 桌面待办应用。它平时以

## 下载 Floatick macOS 版

从 [GitHub Releases](https://github.com/lucaslushuo/floatick/releases)
从 [GitHub Releases](https://github.com/lucaslus/floatick/releases)
下载最新 DMG,打开后将 Floatick 拖入 `Applications`。发布包是 Universal
Binary,同时支持 Apple 芯片和 Intel Mac。

Expand Down Expand Up @@ -162,7 +162,7 @@ flowchart LR

## 参与贡献

欢迎提交 [Issue](https://github.com/lucaslushuo/floatick/issues) 和范围清晰的
欢迎提交 [Issue](https://github.com/lucaslus/floatick/issues) 和范围清晰的
Pull Request。请为有意义的行为变更补充测试,并保持本地 JSON 数据格式向后
兼容。

Expand Down
2 changes: 1 addition & 1 deletion docs/DEVELOPMENT_WORKFLOW.md
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ git push origin "v$VERSION"
Floatick 使用以下 Sparkle 更新源:

```text
https://lucaslushuo.github.io/floatick/appcast.xml
https://lucaslus.github.io/floatick/appcast.xml
```

- 首个正式版本发布前,该文件还不存在,候选包会显示“更新服务暂未就绪”。
Expand Down
14 changes: 8 additions & 6 deletions docs/RELEASING.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ Floatick uses a lightweight release-branch model. `main` is the only stable
branch, short-lived branches carry daily work, and `release/x.y.z` branches
produce private Draft Releases for manual acceptance.

Release repository: `https://github.com/lucaslushuo/floatick`
Release repository: `https://github.com/lucaslus/floatick`

Sparkle appcast: `https://lucaslushuo.github.io/floatick/appcast.xml`
Sparkle appcast: `https://lucaslus.github.io/floatick/appcast.xml`

## Branch model

Expand Down Expand Up @@ -63,9 +63,10 @@ Every push to `release/X.Y.Z` runs the Release Candidate workflow. It:
2. runs formatting, analysis, and tests;
3. builds the universal release-mode macOS app;
4. normalizes embedded code to one ad-hoc identity for the unsigned candidate;
5. verifies both architectures and launches the app on the Apple silicon runner;
6. creates the DMG, SHA-256 checksum, and build manifest;
7. creates or updates a Draft Release associated with
5. verifies the embedded Sparkle feed URL and downloads a valid live appcast;
6. verifies both architectures and launches the app on the Apple silicon runner;
7. creates the DMG, SHA-256 checksum, and build manifest;
8. creates or updates a Draft Release associated with
`candidate/vX.Y.Z`.

Only users with push access can list Draft Releases through the GitHub API.
Expand Down Expand Up @@ -93,6 +94,7 @@ Download the DMG from the Draft Release and verify at least:
unavailable status instead of Sparkle's network error;
- after the first appcast is published, manual “Check for updates” opens
Sparkle's native result;
- the built app's `SUFeedURL` matches the live appcast URL listed above;
- CPU and memory remain reasonable with a long todo list;
- both architecture slices exist, with an Apple silicon launch test and a
Rosetta launch smoke test when available.
Expand Down Expand Up @@ -174,7 +176,7 @@ independent EdDSA key. The public key is stored in
Keychain and in the production environment's `SPARKLE_ED_PRIVATE_KEY` GitHub
Actions secret. Candidate workflows cannot access the production secret. The
production environment accepts only `v*` tags and requires approval from
`lucaslushuo` before exposing the secret.
`lucaslus` before exposing the secret.

Never commit or print the private key. Keep an encrypted offline backup. The
Sparkle key protects the update chain but does not replace Apple Developer ID
Expand Down
2 changes: 1 addition & 1 deletion macos/Runner/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
<key>SUEnableAutomaticChecks</key>
<true/>
<key>SUFeedURL</key>
<string>https://lucaslushuo.github.io/floatick/appcast.xml</string>
<string>https://lucaslus.github.io/floatick/appcast.xml</string>
<key>SUPublicEDKey</key>
<string>QV3YrniNCTaEG6ePfUUTvB1bTgxcoOjL4/OG9fRdS9A=</string>
<key>SURequireSignedFeed</key>
Expand Down
2 changes: 1 addition & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: floatick
description: A focused, local-first floating todo list for macOS.
publish_to: 'none'
version: 0.3.1+8
version: 0.3.2+9

environment:
sdk: ^3.12.2
Expand Down
52 changes: 52 additions & 0 deletions tool/release/verify_update_feed.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
#!/usr/bin/env bash

set -euo pipefail

readonly expected_argument_count=2

if [[ $# -ne $expected_argument_count ]]; then
echo "Usage: $0 <app-path> <expected-feed-url>" >&2
exit 64
fi

readonly app_path=$1
readonly expected_feed_url=$2
readonly info_plist="$app_path/Contents/Info.plist"

if [[ ! -d "$app_path" || "$app_path" != *.app ]]; then
echo "Expected an existing .app bundle: $app_path" >&2
exit 66
fi
if [[ ! -f "$info_plist" ]]; then
echo "App Info.plist is missing: $info_plist" >&2
exit 66
fi

configured_feed_url=$(
/usr/libexec/PlistBuddy -c 'Print :SUFeedURL' "$info_plist"
)
readonly configured_feed_url
if [[ "$configured_feed_url" != "$expected_feed_url" ]]; then
echo "Expected SUFeedURL $expected_feed_url, found $configured_feed_url." >&2
exit 1
fi

temporary_directory=${RUNNER_TEMP:-${TMPDIR:-/tmp}}
appcast_path=$(mktemp "$temporary_directory/floatick-appcast.XXXXXX")
readonly temporary_directory
readonly appcast_path
trap 'rm -f "$appcast_path"' EXIT

curl \
--fail \
--location \
--retry 3 \
--retry-delay 2 \
--silent \
--show-error \
--max-time 15 \
"$configured_feed_url" \
--output "$appcast_path"
/usr/bin/xmllint --noout "$appcast_path"

echo "Verified Sparkle feed: $configured_feed_url"
6 changes: 3 additions & 3 deletions website/src/components/LandingPage.astro
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ const isEnglish = locale === 'en';
const languageHref = isEnglish ? '/zh/' : '/';
const changelogHref = isEnglish ? '/changelog/' : '/zh/changelog/';
const featureRequestUrl =
'https://github.com/lucaslushuo/floatick/issues/new?labels=enhancement';
'https://github.com/lucaslus/floatick/issues/new?labels=enhancement';
---

<SiteLayout
Expand Down Expand Up @@ -277,7 +277,7 @@ const featureRequestUrl =
<article class="latest-release-card" data-reveal>
<div class="release-meta">
<span>{copy.updates.latestLabel}</span>
<time datetime="2026-07-29">{copy.updates.date}</time>
<time datetime={copy.updates.dateTime}>{copy.updates.date}</time>
</div>
<strong>{copy.updates.version}</strong>
<ul>
Expand Down Expand Up @@ -397,7 +397,7 @@ const featureRequestUrl =
{copy.footer.releases}
</a>
<a
href="https://github.com/lucaslushuo/floatick/blob/main/LICENSE"
href="https://github.com/lucaslus/floatick/blob/main/LICENSE"
target="_blank"
rel="noreferrer"
>
Expand Down
2 changes: 1 addition & 1 deletion website/src/config/site-links.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export const repositoryUrl = 'https://github.com/lucaslushuo/floatick';
export const repositoryUrl = 'https://github.com/lucaslus/floatick';

export const latestDownloadUrl =
`${repositoryUrl}/releases/latest/download/Floatick-macos-universal.dmg`;
58 changes: 44 additions & 14 deletions website/src/content/changelog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,21 @@ export const changelogCopy: Record<Locale, ChangelogCopy> = {

export const changelogEntries: Record<Locale, ChangelogEntry[]> = {
en: [
{
version: 'v0.3.2',
date: 'July 31, 2026',
dateTime: '2026-07-31',
title: 'Update checks restored',
summary:
'This hotfix restores the Sparkle update feed after the GitHub account address changed.',
highlights: [
'Point in-app update checks to the active GitHub Pages feed.',
'Verify the built app feed address and live appcast before publishing a release.',
'Users on v0.3.0 or v0.3.1 need to install this update manually once.',
],
releaseUrl: 'https://github.com/lucaslus/floatick/releases/tag/v0.3.2',
compareUrl: 'https://github.com/lucaslus/floatick/compare/v0.3.1...v0.3.2',
},
{
version: 'v0.3.1',
date: 'July 31, 2026',
Expand All @@ -93,8 +108,8 @@ export const changelogEntries: Record<Locale, ChangelogEntry[]> = {
'Render a sharper, closer 3D product view on mobile.',
'Remove the oversized 3D backdrop on narrow screens so the app panels stay in focus.',
],
releaseUrl: 'https://github.com/lucaslushuo/floatick/releases/tag/v0.3.1',
compareUrl: 'https://github.com/lucaslushuo/floatick/compare/v0.3.0...v0.3.1',
releaseUrl: 'https://github.com/lucaslus/floatick/releases/tag/v0.3.1',
compareUrl: 'https://github.com/lucaslus/floatick/compare/v0.3.0...v0.3.1',
},
{
version: 'v0.3.0',
Expand All @@ -109,8 +124,8 @@ export const changelogEntries: Record<Locale, ChangelogEntry[]> = {
'Optionally collapse the main panel after clicking outside it.',
'Keep scrolling responsive in local workspaces with up to 10,000 todos.',
],
releaseUrl: 'https://github.com/lucaslushuo/floatick/releases/tag/v0.3.0',
compareUrl: 'https://github.com/lucaslushuo/floatick/compare/v0.2.0...v0.3.0',
releaseUrl: 'https://github.com/lucaslus/floatick/releases/tag/v0.3.0',
compareUrl: 'https://github.com/lucaslus/floatick/compare/v0.2.0...v0.3.0',
},
{
version: 'v0.2.0',
Expand All @@ -125,8 +140,8 @@ export const changelogEntries: Record<Locale, ChangelogEntry[]> = {
'Create, edit, search, and combine multiple color-coded tags.',
'Choose appearance, always-on-top behavior, and open-at-login settings.',
],
releaseUrl: 'https://github.com/lucaslushuo/floatick/releases/tag/v0.2.0',
compareUrl: 'https://github.com/lucaslushuo/floatick/compare/v0.1.0...v0.2.0',
releaseUrl: 'https://github.com/lucaslus/floatick/releases/tag/v0.2.0',
compareUrl: 'https://github.com/lucaslus/floatick/compare/v0.1.0...v0.2.0',
},
{
version: 'v0.1.0',
Expand All @@ -141,10 +156,25 @@ export const changelogEntries: Record<Locale, ChangelogEntry[]> = {
'Switch between English and Simplified Chinese.',
'Check for updates through Sparkle with EdDSA verification.',
],
releaseUrl: 'https://github.com/lucaslushuo/floatick/releases/tag/v0.1.0',
releaseUrl: 'https://github.com/lucaslus/floatick/releases/tag/v0.1.0',
},
],
zh: [
{
version: 'v0.3.2',
date: '2026 年 7 月 31 日',
dateTime: '2026-07-31',
title: '恢复应用更新检查',
summary:
'这个热修复解决 GitHub 账号地址变更后 Sparkle 更新源不可用的问题。',
highlights: [
'将应用内更新检查切换到当前有效的 GitHub Pages 地址。',
'发布前校验构建产物中的更新地址和线上 appcast。',
'v0.3.0 或 v0.3.1 用户需要手动安装一次这个版本。',
],
releaseUrl: 'https://github.com/lucaslus/floatick/releases/tag/v0.3.2',
compareUrl: 'https://github.com/lucaslus/floatick/compare/v0.3.1...v0.3.2',
},
{
version: 'v0.3.1',
date: '2026 年 7 月 31 日',
Expand All @@ -157,8 +187,8 @@ export const changelogEntries: Record<Locale, ChangelogEntry[]> = {
'移动端使用更清晰、更聚焦的 3D 产品视图。',
'窄屏隐藏过大的 3D 背景板,让应用面板成为视觉焦点。',
],
releaseUrl: 'https://github.com/lucaslushuo/floatick/releases/tag/v0.3.1',
compareUrl: 'https://github.com/lucaslushuo/floatick/compare/v0.3.0...v0.3.1',
releaseUrl: 'https://github.com/lucaslus/floatick/releases/tag/v0.3.1',
compareUrl: 'https://github.com/lucaslus/floatick/compare/v0.3.0...v0.3.1',
},
{
version: 'v0.3.0',
Expand All @@ -173,8 +203,8 @@ export const changelogEntries: Record<Locale, ChangelogEntry[]> = {
'支持点击窗口外部后自动收起主容器。',
'在多达 10,000 条本地 Todo 下保持列表滚动响应。',
],
releaseUrl: 'https://github.com/lucaslushuo/floatick/releases/tag/v0.3.0',
compareUrl: 'https://github.com/lucaslushuo/floatick/compare/v0.2.0...v0.3.0',
releaseUrl: 'https://github.com/lucaslus/floatick/releases/tag/v0.3.0',
compareUrl: 'https://github.com/lucaslus/floatick/compare/v0.2.0...v0.3.0',
},
{
version: 'v0.2.0',
Expand All @@ -189,8 +219,8 @@ export const changelogEntries: Record<Locale, ChangelogEntry[]> = {
'创建、编辑、搜索并组合多个彩色标签。',
'设置外观、始终置顶与登录时启动。',
],
releaseUrl: 'https://github.com/lucaslushuo/floatick/releases/tag/v0.2.0',
compareUrl: 'https://github.com/lucaslushuo/floatick/compare/v0.1.0...v0.2.0',
releaseUrl: 'https://github.com/lucaslus/floatick/releases/tag/v0.2.0',
compareUrl: 'https://github.com/lucaslus/floatick/compare/v0.1.0...v0.2.0',
},
{
version: 'v0.1.0',
Expand All @@ -205,7 +235,7 @@ export const changelogEntries: Record<Locale, ChangelogEntry[]> = {
'支持英文与简体中文切换。',
'通过 Sparkle 与 EdDSA 验证应用更新。',
],
releaseUrl: 'https://github.com/lucaslushuo/floatick/releases/tag/v0.1.0',
releaseUrl: 'https://github.com/lucaslus/floatick/releases/tag/v0.1.0',
},
],
};
Loading