Swift-based utility for managing project commands, inspired by Make. Write your project commands in Swift and enjoy type safety, code reuse, and seamless integration.
Tip
New to Sake? Check out these comprehensive tutorials:
- Sake Part I: Getting Started - Installation, setup, and creating your first commands
- Sake Part II: Advanced Usage - Command groups, testing automation, and release management
- Swift-Native Workflow: Write, execute, and manage all your project commands in Swift with full IDE support, type safety, and seamless integration
- Command Dependencies: Define commands that depend on other commands
- Conditional Execution: Skip commands based on custom conditions
- Command Listing: Display all available commands with their descriptions
First, take a look at what you can accomplish with Sake, and then we'll dive into how to make it happen:
Define your project commands like this:
// Sakefile.swift
struct Commands: SakeApp {
// MARK: - Code style
public static var format: Command {
Command(
description: "Format source code",
dependencies: [BrewCommands.ensureSwiftFormatInstalled],
run: { context in
try runAndPrint("swiftformat", "Sources", "Package.swift")
}
)
}
// MARK: - Release automation
public static var buildReleaseArtifacts: Command {
Command(
description: "Build release artifacts for distribution",
dependencies: [buildRelease, stripBinary, createArchive]
)
}
static var buildRelease: Command {
Command(
description: "Build optimized release binary",
run: { context in
try runAndPrint("swift", "build", "--configuration", "release")
}
)
}
static var stripBinary: Command {
Command(
description: "Strip debug symbols to reduce size",
run: { context in
try runAndPrint("strip", "-rSTx", ".build/release/MyApp")
}
)
}
static var createArchive: Command {
Command(
description: "Create distribution ZIP archive",
run: { context in
try runAndPrint("zip", "-j", "MyApp.zip", ".build/release/MyApp")
}
)
}
}
Note
The runAndPrint
function used in this example is not provided by Sake by default. For running CLI commands in your Sake commands, please refer to the CLI Tools Running documentation.
Then run them like this:
β― sake list
Commands:
* format - Format source code
* buildReleaseArtifacts - Build release artifacts for distribution
β― sake buildReleaseArtifacts
Building for production...
Compiling MyApp...
Build complete.
creating: MyApp.zip
π Documentation β’ π Getting Started β’ π» GitHub
-
Install Sake
brew install kattouf/sake/sake
-
Initialize a new SakeApp:
sake init
-
Run your first command:
sake hello
- Build Automation: Compile your project with different configurations and run tests
- Release Management: Automate version updates
- Code Quality: Run formatters and linters to maintain consistent code style
We welcome contributions! Whether it's:
- π Bug Reports
- π‘ Feature Requests
- π Documentation Improvements
- π§ Code Contributions
π Before writing code: We kindly ask that you open a discussion or issue first to discuss your proposed changes. This helps ensure your time is well-spent on features or fixes that align with the project's direction and prevents duplicate efforts.
Check out our Contribution Guide to find more details on how to get started.
Sake is released under the MIT License. See the LICENSE file for details.