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
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ pasted HTML, entirely on your Mac.
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
[![Platform](https://img.shields.io/badge/platform-macOS%2015%2B-black?logo=apple)](#requirements)
[![Swift 6](https://img.shields.io/badge/Swift-6-orange.svg?logo=swift)](https://swift.org)
[![Status](https://img.shields.io/badge/status-v1.2.3--candidate-orange.svg)](#status)
[![Version](https://img.shields.io/badge/version-v1.2.3-blue.svg)](#status)

| `vgrab htop` | `vgrab lazygit` | `vgrab nvim` |
| --- | --- | --- |
Expand Down Expand Up @@ -665,7 +665,7 @@ in [`docs/`](docs/):

## Status

🟠 **v1.2.3 (build 38) is the current release candidate in source.** Public artifacts are published only
**v1.2.3 (build 38) is the newest version in source.** Public artifacts are published only
through the vetted release workflow; the [Releases page](https://github.com/johnny4young/vitrine/releases)
is the source of truth for the newest downloadable version. Everything under
[Features](#features) is driven by one design-token system
Expand All @@ -677,9 +677,9 @@ pre-authorize XCTest UI automation — see [docs/RELEASING.md](docs/RELEASING.md
The complete, versioned history lives in [CHANGELOG.md](CHANGELOG.md), and every release
also ships an in-app **What's New**.

Preparing this candidate does not publish it: the production website, Homebrew tap,
Sparkle appcast, and GitHub Release remain unchanged until the separately authorized
promotion verifies the exact candidate bytes. Anything added under **Unreleased** in the
Bumping the version in source does not publish it: the production website, Homebrew tap,
Sparkle appcast, and GitHub Release change only when the separately authorized promotion
verifies the exact candidate bytes. Anything added under **Unreleased** in the
changelog belongs to a future build and is not part of the v1.2.3 release line.

Two explicit product boundaries — no arbitrary screen/window capture and no dependency
Expand Down
8 changes: 4 additions & 4 deletions Tests/AppStoreReadinessTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -255,9 +255,9 @@ struct AppStoreReadinessTests {
"the Unreleased section must link from the latest release to HEAD")
}

/// The README — the project's front page — keeps its release-status badge and its
/// The README — the project's front page — keeps its version badge and its
/// `## Status` section in lockstep with `MARKETING_VERSION`. The badge encodes the
/// version in its shields.io URL (`status-vX.Y.Z…`) and the section prose names it
/// version in its shields.io URL (`version-vX.Y.Z…`) and the section prose names it
/// in the current release-status line; a version bump that forgets either would greet
/// every visitor with a stale release number. This fails the bump until the README
/// is updated, exactly like the CHANGELOG and APP-STORE guards above, so the README
Expand All @@ -267,8 +267,8 @@ struct AppStoreReadinessTests {
let marketingVersion = try Self.marketingVersion()

#expect(
readme.contains("status-v\(marketingVersion)"),
"README.md status badge must name project version v\(marketingVersion) (stale badge — bump it with the release)"
readme.contains("version-v\(marketingVersion)"),
"README.md version badge must name project version v\(marketingVersion) (stale badge — bump it with the release)"
)

let statusSection = try #require(
Expand Down
2 changes: 1 addition & 1 deletion docs/RELEASING.md
Original file line number Diff line number Diff line change
Expand Up @@ -1096,7 +1096,7 @@ license again.
- [ ] `make icon` up to date
- [ ] Version bumped with `make bump VERSION=x.y.z BUILD=n`, which rewrites the six
mechanical sites together — `project.yml`, `CLIVersion.swift`, the cask,
`Commercial.astro`, the README status badge and sentences, and `docs/APP-STORE.md`
`Commercial.astro`, the README version badge and sentences, and `docs/APP-STORE.md`
— and prints the prose it deliberately leaves to you. It refuses a version the tag
guard would reject, refuses a build that does not move forward, and fails loudly if
any anchor stops matching rather than skipping that file
Expand Down
14 changes: 7 additions & 7 deletions scripts/bump-version.sh
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,10 @@ SITES=(
'^([|] Marketing version [|] `)[^`]*(`)' '\1@V@\2'
'docs/APP-STORE.md' 'App Store build number'
'^([|] Build number [|] `)[^`]*(`)' '\1@B@\2'
'README.md' 'status badge'
'(status-v)[0-9][^-]*(--candidate-orange)' '\1@V@\2'
'README.md' 'version badge'
'(version-v)[0-9][^-]*(-blue)' '\1@V@\2'
'README.md' 'status sentence'
'([*][*]v)[0-9][0-9.]*( [(]build )[0-9]+([)] is the current release candidate)' '\1@V@\2@B@\3'
'([*][*]v)[0-9][0-9.]*( [(]build )[0-9]+([)] is the newest version in source)' '\1@V@\2@B@\3'
'README.md' 'release-line sentence'
'(not part of the v)[0-9][0-9.]*( release line)' '\1@V@\2'
)
Expand Down Expand Up @@ -223,8 +223,8 @@ self_test() {
grep -q "releaseVersion = '9.9.9'" "$dir/site/src/components/Commercial.astro" || fail "site"
grep -q '| Marketing version | `9.9.9`' "$dir/docs/APP-STORE.md" || fail "app store version"
grep -q '| Build number | `999`' "$dir/docs/APP-STORE.md" || fail "app store build"
grep -q 'status-v9.9.9--candidate' "$dir/README.md" || fail "badge"
grep -q '\*\*v9.9.9 (build 999) is the current release candidate' "$dir/README.md" || fail "status sentence"
grep -q 'version-v9.9.9-blue' "$dir/README.md" || fail "badge"
grep -q '\*\*v9.9.9 (build 999) is the newest version in source' "$dir/README.md" || fail "status sentence"
grep -q 'not part of the v9.9.9 release line' "$dir/README.md" || fail "release-line sentence"

# A resubmission keeps the marketing version and moves only the build.
Expand Down Expand Up @@ -284,12 +284,12 @@ self_test() {

# A site that fails late writes nothing, so the same command works once it is fixed.
dir="$(fixture recovery)"
sed 's/--candidate-orange/--stable-green/' "$dir/README.md" > "$dir/README.md.next"
sed 's/\(version-v[0-9.]*\)-blue/\1-green/' "$dir/README.md" > "$dir/README.md.next"
mv "$dir/README.md.next" "$dir/README.md"
before="$(fingerprint "$dir")"
if run_bump "$dir" 9.9.9 999 >/dev/null 2>&1; then fail "a moved anchor was accepted"; fi
[ "$(fingerprint "$dir")" = "$before" ] || fail "a failed bump left files half-rewritten"
sed 's/--stable-green/--candidate-orange/' "$dir/README.md" > "$dir/README.md.next"
sed 's/\(version-v[0-9.]*\)-green/\1-blue/' "$dir/README.md" > "$dir/README.md.next"
mv "$dir/README.md.next" "$dir/README.md"
run_bump "$dir" 9.9.9 999 >/dev/null || fail "the same bump failed after its anchor was restored"

Expand Down
Loading