Package: sailboat
sailboatView Documentation SiteAboutSailboat is a Python developer's best friend. It's a Python build tool that can do anything you need it to! It suports a countless number of plugins — you can evenmake your own. Sailboat is made for anyone, whether you are a beginner on your very first project, or a senior software engineer with years of experience.Let's say that that you have created a basic game,Guess My Number, and you want to send it to all of your friends. There are a lot of different ways you can do this, but using Sailboat is the easiest. All you have to do is type three commands:sail quickstart,sail build, andsail release, and you can have a Homebrew file, apipinstallable package, and aPyInstallerdesktop app. So easy!Sailboat also supports custom subcommands. These don't build your project, but they can add features such as a todo list that help speed up your development process.InstallationPip:pip3installsailboatBinary:Download fromlatest release.Homebrew:brewinstallcole-wilson/taps/SailboatBuild From Source:gitclonehttps://github.com/cole-wilson/sailboatcdsailboat
python3setup.pyinstallUsage:Sailboat is intended to be used from the command line/terminal.It is suggested to runsail quickstartto get started. Then, usesail buildto build your project, andsail releaseto release it! Be sure to to look at the subcommand docs for more detail.(look in table below)There are two base commands that can be used:sailandsailboat. These both do exactly the same thing, there is no difference.sailwill be used in the documentation, as it's shorter easier to type, but you can do whatever.To get a list of the availible subcommands typesail help.
To refresh the plugin list, typesail -r.There are countless subcommands, but these are the core ones:subcommanddescriptionaddAdd a plugin to your project.buildBuild your project for release.devRun your project without building it.gitManage git for your project.githubManage git for your project.pluginsPlugin manager.quickstartGet your project up and running.releaseRelease your project.removeRemove a plugin from you project.wizardConfigure you project or a plugin.workflowGenerate a GitHub actions workflow file.helpDisplay this message.Plugins:Sailboat uses a plugin based architecture. Every single command or subcommand is a plugin, even the core features. Plugins are registered using thePython entry points system, using the group namesailboat_plugins. There are four types of plugins:coreThis type of plugin is reserved for 1st party plugins - plugins that are part of the actual Sailboat source. They have unreserved access to all project data, and therefore this type should not be used in custom plugins.commandcommandplugins are most basic form of a plugin. They are called by typingsail <name of plugin>. They are standalone python scripts that add to the project, like a task list manager.buildThis is perhaps the most common type of plugin, they are run with thebuildcore plugin, and are used to generate or edit project files. An example would be the PyInstaller plugin, which generates frozen binaries of the project. These should store output in the top leveldistfolder, in a subfolder with the name of the project. For example: the PyInstaller plugin saves output in./dist/pyinstaller. Build plugins can also containreleaseplugins within them.releaseThis group of plugins is used by thereleasecore plugin. They are used to distribute files. For example: thehomebrewrelease plugin uploads the Homebrew formula to a GitHub repo.All plugins should be a subclass ofsailboat.plugins.Plugin, a basic class that provide the neccesary functions and registration features. An examplecommandplugin might look like this:fromsailboat.pluginsimportPluginclassEcho(Plugin):description="A basic command plugin that echos it's input."_type='command'setup={"string_to_echo":"What string should I echo? "}# Used by wizarddefrun(self):string=self.getData('string_to_echo')# Get string to echo.print(string)returnPlugins store their data in thesailboat.tomlfile, under their type namespace. For example, the above example will store it's data like so:...[command.echo]string_to_echo="Testing..."...A plugin shouldNEVERedit thesailboat.tomlfile on it's own. Instead plugins should use the provided functions OR editself.data, a dictionary of the file. Only data stored in the plugins namespace will be preserved. However, a plugin can read from the top level data.Plugins can get very complex, and therefore useful, but it is too long to put here. Please look at thesailboat.colewilson.xyz/plugins.htmlfile for details.Acknowledgements:Thanks to all the people at PyInstaller, dmgbuild, twine, and GitHub actions who provided ways for me to create this.StargazersContributorsCole WilsonContactPlease submit an issue if you have any questions or need help or find a bug. I'm happy to help!cole@colewilson.xyz