You can see lower below how to configure the manifest to your needs.
Release Github Action
Just by adding a simple tapestry step .post(.githubRelease(owner: "owner", repository: "repository", assetPaths: ["build.zip"]))
you can automate your whole release process with Github actions. If that sounds interesting to you, check out the action here
To then create a new release with github action, simply run tapestry github-release 0.0.1 and … that’s all! 🙂
Editing TapestryConfig
To edit the manifest, simply run tapestry edit.
That will open Xcode project with that manifest, so you can easily edit the Swift file.
You can use the documentation right in the new Xcode project or you can use the documentation below 👇
TapestryConfig
This currently only has one argument release, more will be added here
Release
The main component of the release process.
Property
Description
Type
Optional
Default
actions
Your custom release steps, more about how you can define them below (see ReleaseAction)
[ReleaseAction]
No
[]
add
Glob of your files that you want to add to git before releasing a version
[String]
Yes
commitMessage
Commit message - use Argument.version in your string which will translate to the version you are releasing
String
No
push
This option determines if the changes are committed at the end
Bool
No
Running tapestry release 0.0.7 also automatically tags the latest commit.
ReleaseAction
This type lets you define the individual actions.
Case
Description
pre(tool: String, arguments: [String] = [])
Runs before commiting and pushing. Runs the custom command from the root folder.
pre(_ predefinedAction: PredefinedAction)
Runs before commiting and pushing. Runs a PredefinedAction, more on that below.
post(tool: String, arguments: [String] = [])
Runs after commiting and pushing. Runs the custom command from the root folder.
post(_ predefinedAction: PredefinedAction)
Runs after commiting and pushing. Runs a PredefinedAction, more on that below.
PredefinedAction
This is a set of predefined actions.
Case
Description
githubRelease
Creates a new release on github. If you specify assetPaths, the files at the paths will be uploaded along with the new Github release.
docsUpdate
Updates version in your .podspec, README.md and adds it in CHANGELOG.md
dependenciesCompatibility([DependenciesManager])
Checks compatibility with given DependenciesManagers
Note that for docsUpdate your changelog must be in this format:
## Next
- your way of adding logs
## 1.0.0
....
Which will be changed to
## Next
## 1.0.1
- your way of adding logs
## 1.0.0
....
To change the version in your README.md, we use the latest tag in your git history.
You can also try out the individual actions:
tapestry run action docs-update 1.0.0
tapestry run action compatibilty spm carthage cocoapods
DependenciesManager
Let’s you say what dependency managers you want to check compatibility for.
Runs compatibility check for SPM - define platform if you are using platform-specific libraries (eg UIKit)
Generating project
To generate your project, simply run:
tapestry init --path TapestryProject
You can omit --path argument and it will generate your framework in the current directory.
It uses tuist and SPM tools, so it’s very easy to adjust it to your needs (no complicated template structure, all code is generated from the ground up!)
You can change the generated files in InitCommand and your example project in ExampleModelLoader. In the future, I’d like to make this customization even easier, so watch this space 👀
Generated project features
CocoaPods, Carthage and Swift Package Manager compatibility
README.md template
travis to automate your builds
Library support
Executable support for your CLI tools
more and even more to come!
You can check out an example project that was generated with tapestryhere.
Releasing project
Inspiration and thanks
I’d like to thank tuist for inspiration and help in this project. This project was also inspired by rocket
What’s Tapestry 🤔
Tapestry helps you with creating and managing your Swift frameworks 💫
Do you want to easily create a Swift framework that supports Carthage, Cocoapods and SPM?
Or define your release steps in a type-safe way?
Well, look no further,
tapestry
shall help you with exactly that!Projects Using Tapestry
If you are also leveraging Tapestry in your project, feel free to open a PR to include it in the list above.
These repositories can also serve as a great example configuration for your own projects.
Installation
Using mint
Using SPM
Add this to your
Package.swift
:Using Swift directly
Setup release steps
To get you started with tapestry (if you did not generate your framework with it!), you can run
This will create a
TapestryConfig.swift
that you can then customize per your needsTo configure your release steps, run:
This opens Xcode with easily editable
TapestryConfig.swift
.The generated file will look like this:
You can see lower below how to configure the manifest to your needs.
Release Github Action
Just by adding a simple tapestry step
.post(.githubRelease(owner: "owner", repository: "repository", assetPaths: ["build.zip"]))
you can automate your whole release process with Github actions. If that sounds interesting to you, check out the action hereTo then create a new release with github action, simply run
tapestry github-release 0.0.1
and … that’s all! 🙂Editing
TapestryConfig
To edit the manifest, simply run
tapestry edit
. That will open Xcode project with that manifest, so you can easily edit the Swift file. You can use the documentation right in the new Xcode project or you can use the documentation below 👇TapestryConfig
This currently only has one argument
release
, more will be added hereRelease
The main component of the release process.
ReleaseAction
)Argument.version
in your string which will translate to the version you are releasingRunning
tapestry release 0.0.7
also automatically tags the latest commit.ReleaseAction
This type lets you define the individual actions.
pre(tool: String, arguments: [String] = [])
pre(_ predefinedAction: PredefinedAction)
PredefinedAction
, more on that below.post(tool: String, arguments: [String] = [])
post(_ predefinedAction: PredefinedAction)
PredefinedAction
, more on that below.PredefinedAction
This is a set of predefined actions.
githubRelease
assetPaths
, the files at the paths will be uploaded along with the new Github release.docsUpdate
.podspec, README.md
and adds it inCHANGELOG.md
dependenciesCompatibility([DependenciesManager])
DependenciesManager
sNote that for
docsUpdate
your changelog must be in this format:Which will be changed to
To change the version in your
README.md
, we use the latest tag in your git history.You can also try out the individual actions:
DependenciesManager
Let’s you say what dependency managers you want to check compatibility for.
cocoapods
carthage
spm(Platform)
UIKit
)Generating project
To generate your project, simply run:
You can omit
--path
argument and it will generate your framework in the current directory.It uses tuist and SPM tools, so it’s very easy to adjust it to your needs (no complicated template structure, all code is generated from the ground up!)
You can change the generated files in
InitCommand
and your example project inExampleModelLoader
. In the future, I’d like to make this customization even easier, so watch this space 👀Generated project features
CocoaPods
,Carthage
andSwift Package Manager
compatibilityREADME.md
templatetravis
to automate your buildsLibrary
supportExecutable
support for your CLI toolsYou can check out an example project that was generated with
tapestry
here.Releasing project
Inspiration and thanks
I’d like to thank tuist for inspiration and help in this project. This project was also inspired by rocket