How to Set Up CI/CD for Palmier Pro: Complete GitHub Actions & Release Automation Guide
Palmier Pro ships with a production-ready CI/CD pipeline using GitHub Actions for macOS builds and a scripts/release.sh automation script for signed releases, requiring only a macOS runner and standard repository secrets to deploy.
Setting up CI/CD for Palmier Pro requires minimal configuration because the AI-native macOS video editor includes pre-configured automation. The repository provides a complete continuous integration workflow that builds and tests on every push, plus a deterministic release script that manages the entire delivery pipeline from version bump to GitHub Release publication.
Continuous Integration (CI) Configuration
The CI pipeline is defined in .github/workflows/ci.yml and executes on every push to main and every pull request.
macOS Runner and Toolchain Setup
The workflow targets the macOS platform specifically using runs-on: macos-26, ensuring builds execute on macOS 26 (Tahoe) to match the app's deployment target. The configuration begins by verifying the Swift toolchain with swift --version, creating an auditable build environment that prints the exact compiler version to logs.
Swift Package Manager Caching Strategy
Swift Package Manager dependencies are cached using actions/cache@v4 with the path set to .build and cache keys derived from Package.resolved. This significantly accelerates incremental builds by preserving compiled dependencies between runs. The pipeline then executes swift build to compile the project and swift test to run the test suite located in Tests/PalmierProTests/, ensuring all changes remain regression-free.
# .github/workflows/ci.yml
name: CI
on:
push:
branches: [main]
pull_request:
jobs:
build-test:
runs-on: macos-26
steps:
- uses: actions/checkout@v4
- name: Show toolchain
run: swift --version
- name: Cache SwiftPM
uses: actions/cache@v4
with:
path: .build
key: spm-${{ runner.os }}-${{ hashFiles('Package.resolved') }}
- name: Build
run: swift build
- name: Test
run: swift test
Continuous Delivery (CD) Automation
While CI validates code quality, the CD process is orchestrated by scripts/release.sh, a deterministic automation script that requires only a version argument to execute the full release pipeline.
The Release Script Pipeline
Running ./scripts/release.sh 0.2.0 performs seven critical operations:
- Pre-flight validation – Confirms clean working tree, correct branch state, and tag uniqueness.
- Version bumping – Updates
CFBundleShortVersionStringand auto-incrementsCFBundleVersionin the bundle property list. - Release notes generation – Creates a Markdown file containing commit messages since the last tag.
- Binary packaging – Invokes
scripts/bundle.sh release --distto produce a signed and notarized DMG. - Git operations – Commits version changes, pushes to origin, creates a Git tag, and pushes the tag.
- GitHub Release creation – Uses
gh release createto publish the DMG with generated notes. - Appcast update – Inserts a new
<item>entry intoappcast.xmlfollowing the Sparkle update feed specification for in-app auto-updates.
Version Management and Configuration Files
The release script modifies Sources/PalmierPro/Resources/Info.plist directly, reading and updating the CFBundleShortVersionString and CFBundleVersion keys. The script also updates appcast.xml to include the new version entry, ensuring the in-app update checker can discover releases immediately after publication.
# Execute full release pipeline
./scripts/release.sh 0.2.0
Integrating CI with CD
A complete CI/CD setup connects automated testing with release deployment. Configure your repository to run the CI workflow on every push and pull request, then trigger scripts/release.sh manually or via a workflow dispatch job after successful CI completion on the protected main branch.
Because the workflow runs on macos-26, no cross-compilation or Docker containers are required. The release script requires only standard repository secrets including GITHUB_TOKEN for GitHub CLI authentication.
Configuration Requirements and Best Practices
To ensure the pipeline functions correctly:
- Commit
Package.resolvedto version control; the CI cache key in.github/workflows/ci.ymldepends on this file for dependency management. - Maintain the
Info.plistpath atSources/PalmierPro/Resources/Info.plist; the release script reads and modifies this file directly using plist manipulation tools. - Preserve the
appcast.xmlstructure as Sparkle-compatible XML; custom modifications must maintain the<item>insertion logic used by the release script to prevent breaking automatic updates.
Summary
- Palmier Pro provides a complete CI/CD setup via
.github/workflows/ci.ymlandscripts/release.shwith zero additional configuration required. - The CI pipeline uses
macos-26runners withactions/cache@v4for SwiftPM caching and executesswift buildandswift teston every pull request. - The release script automates versioning in
Info.plist, DMG creation viascripts/bundle.sh, Git tagging, GitHub Releases, and Sparkleappcast.xmlupdates. - macOS-specific builds require no cross-platform tooling; the entire workflow runs natively on GitHub-hosted macOS runners.
Frequently Asked Questions
How do I trigger a new release for Palmier Pro?
Execute ./scripts/release.sh <version> (for example, ./scripts/release.sh 0.2.0) from the repository root. The script performs pre-flight checks, updates version strings in Sources/PalmierPro/Resources/Info.plist, builds a signed DMG via scripts/bundle.sh, creates a Git tag, publishes a GitHub Release using gh release create, and updates appcast.xml for Sparkle updates.
What macOS version does the CI use?
The workflow specifies runs-on: macos-26, utilizing macOS 26 (Tahoe) runners to ensure builds match the target deployment environment. This eliminates cross-compilation issues and ensures native macOS framework compatibility for the video editor.
Where does the release script update version numbers?
The script modifies Sources/PalmierPro/Resources/Info.plist, specifically updating CFBundleShortVersionString with the provided semantic version and auto-incrementing CFBundleVersion for build identification. Ensure this path remains unchanged in your project structure.
Can I run the release script from GitHub Actions?
Yes, the release script is designed to run within CI environments. Configure a workflow job that checks out the repository on a macos-26 runner, provides the necessary secrets (including GITHUB_TOKEN for GitHub CLI access), and executes ./scripts/release.sh with the desired version parameter to fully automate releases.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →