Contributing

We're beyond grateful for your interest in contributing to the Spin project. We're always looking for ways to improve the project and we're excited to see what you have to offer.

Before submitting a PR

  • Please be intentional and clear in your proposal
  • If you're looking to add a new feature, it may be a good idea to open an issue first to discuss the feature

Improving the documentation

All docs are located under docs/. In there is a "Nuxt Content" site. Read docs/README.md for more information on how to run the docs locally.

Installing a local development copy of Spin

If you'd like to install a copy for development, clone your fork and add this to your shell profile:

Add an alias to your shell profile

export PATH="/path/to/the-project/spin/bin:$PATH"

You you point spin on to your project, you'll be able to easily test changes before submitting a pull request.

Development dependencies

Other than having a working Docker Desktop or Docker Engine installation -- the only other dependency is running Bash v3 or higher. This means there literally are not any other dependencies to install. 🥳

Installing a specific version of Spin by the branch

The install script allows you to install a specific branch of Spin. This is useful if you want to test a new feature or bug fix before it's released.

Install a test version of Spin

BRANCH="release/2.0" bash -c "$(curl -fsSL -H "Cache-Control: no-cache" https://raw.githubusercontent.com/serversideup/spin/main/tools/install.sh)"

Testing a local installation script

bash -c "$(cat /path/to/the-project/spin/tools/install.sh)"

Knowing your way around the code

  • bin/spin - This is the main entry point for the spin command. This file is responsible for parsing the arguments and calling the appropriate function.
  • lib/functions.sh - This file contains all of the functions that are called by bin/spin.
  • lib/actions/ - This directory contains all of the actions that are called by bin/spin. Each action is a file that contains a function with the same name as the file. For example, lib/actions/init.sh contains a function called init. This function is called by bin/spin when the init action is called.