Skip to content

[codex] improve runtime setup, settings, and release workflow - #3

Merged
IchenDEV merged 3 commits into
mainfrom
feature/dependency-check-settings-release-ci
Apr 23, 2026
Merged

IchenDEV merged 3 commits into
mainfrom
feature/dependency-check-settings-release-ci

Conversation

@IchenDEV

Copy link
Copy Markdown
Owner

What changed

  • refactored the core SkillsUI models and views to reduce dead code, simplify structure, and clean up several rough edges in the installed-skills and marketplace flows
  • added environment dependency checking for Node.js and the skills CLI, plus a first-run onboarding sheet and a Settings window so users can see runtime status and update the CLI from inside the app
  • added release automation that injects the app version during tagged builds and publishes release archives from GitHub Actions
  • refreshed the English and Chinese READMEs, replaced the default-looking logo/icon with a custom branded set, and upgraded GitHub Actions runtimes to avoid the Node deprecation warnings coming from older action versions

Why

  • the app relies on npx skills for 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 later
  • the release workflow was missing a cleaner binary publishing path and the current actions stack was starting to warn about an aging Node runtime even though the app itself is native Swift
  • the project presentation still looked closer to a prototype than a maintained desktop app

Impact

  • users get guided setup when Node.js or the skills CLI is missing, and they can inspect environment status in Settings
  • maintainers get a more reliable release path with version injection and newer GitHub Actions runtime support
  • the repo landing page and app icon now match the project better and explain why Node shows up in a Swift app

Root 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 skills operations.

Checks

  • swift build
  • ruby -e 'require "yaml"; %w[.github/workflows/build.yml .github/workflows/release.yml].each { |f| YAML.load_file(f); puts "OK #{f}" }'

IchenDEV and others added 2 commits April 11, 2026 20:36
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
IchenDEV marked this pull request as ready for review April 23, 2026 16:19
@IchenDEV
IchenDEV merged commit fe1f224 into main Apr 23, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant