Repository navigation
[codex] improve runtime setup, settings, and release workflow - #3
Merged
Merged
Conversation
Dependency checking & onboarding:
- DependencyChecker.swift: EnvironmentChecker enum runs Node.js and skills
CLI checks concurrently via async let; fetches latest version from
npm registry (registry.npmjs.org/skills/latest) in parallel.
Enriches Process PATH with /opt/homebrew/bin:/usr/local/bin so
Homebrew-installed Node is found from a GUI app context.
- DependencyStatus struct: tracks node/skillsCLI Availability, latest
version, hasUpdate flag, and semantic version comparison.
- OnboardingView: sheet shown on first launch when dependencies are
missing. Non-dismissable (interactiveDismissDisabled) when Node is
absent (hard requirement); "Skip for Now" available when only skills
CLI is not globally installed (npx auto-download still works).
Each SetupStep shows install command with one-click clipboard copy
and a "Learn more" link.
- ContentView: triggers loadSkills + checkEnvironment concurrently on
.task; re-checks silently on scenePhase .active (app foreground).
Shows OnboardingView sheet when skillsReady is false.
Settings window (⌘,):
- SettingsView: two-tab Settings scene added to SkillsUIApp alongside
WindowGroup. Same SkillsManager instance shared via .environment.
- About tab: app icon preview (SwiftUI replica of programmatic icon),
version from AppVersion.swift, links to skills.sh and GitHub.
- Environment tab: live Node.js / npm / skills CLI availability rows
with green checkmark or red ✕; latest npm version; one-click
"Update skills CLI" button (npm update -g skills); "Check Again".
- SkillsManager: adds dependencyStatus: DependencyStatus?, checkEnvironment(),
and updateSkillsCLI() (runs npm update then re-checks).
- SkillsSidebar: adds safeAreaInset footer showing current skills
version; orange "v{latest}" badge that opens Settings when an update
is available.
Release CI (.github/workflows/release.yml):
- Triggers on push to tags matching v[0-9]*.
- Injects tag version into Sources/AppVersion.swift before building,
so Settings → About shows the correct release version.
- Builds with swift build -c release on macos-15.
- Produces a tar.gz archive + SHA-256 checksum and uploads both to
the GitHub Release (creates the release if not pre-created).
- All ${{ }} expressions used only via env: vars in run: blocks to
prevent expression injection.
- AppVersion.swift committed with "dev" placeholder; CI overwrites it
in-place without committing back.
README updates:
- Replaced external Apple CDN logo with assets/icon.svg (SVG replica
of the programmatic blue-purple puzzle-piece icon).
- Added Guided Setup and Settings & Versioning to feature table.
- Updated Prerequisites: Node.js with onboarding note; removed manual
skills CLI install requirement.
- Added Download a Pre-built Binary section with checksum verification.
- Added Releasing a New Version section (git tag v* workflow).
- Updated Architecture file tree and Key Design Decisions.
- Both README.md (English) and README_ZH.md (Chinese) updated in sync.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
IchenDEV
marked this pull request as ready for review
April 23, 2026 16:19
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changed
skillsCLI, plus a first-run onboarding sheet and a Settings window so users can see runtime status and update the CLI from inside the appWhy
npx skillsfor install, remove, and update actions, so runtime requirements need to be visible and understandable inside the product instead of being hidden in docs or failing laterImpact
skillsCLI is missing, and they can inspect environment status in SettingsRoot cause
The Node warning was coming from GitHub Actions runtimes used by older action versions, not because the macOS app build itself depends on an old Node toolchain. The app does still require Node.js at runtime for
npx skillsoperations.Checks
swift buildruby -e 'require "yaml"; %w[.github/workflows/build.yml .github/workflows/release.yml].each { |f| YAML.load_file(f); puts "OK #{f}" }'