Skip to content

Efficient pack development at scale #4384

@jeking3

Description

@jeking3
SUMMARY

Currently stackstorm-exchange packs have a development workflow that requires the version to get bumped with every pull request. As part of a discussion in a pull request for the vSphere pack, some limitations of the current methodologies came up which will hinder scaling development. As the number of developers in the community grows, packs will need a better way to accumulate many changes between releases.

ISSUE TYPE
  • Best Practices
OS / ENVIRONMENT / INSTALL METHOD

StackStorm-Exchange

DISCUSSION

In the vSphere pack (and likely other packs) today, every pull request requires a version bump. If two changes are committed to master and the version is not bumped, one cannot determine which version that they might have, since the master branch always has the version of the latest release in it, and there is no staging branch.

This will not scale, and a solution is needed to enable for expected growth in the community. The boost community for example solves this by maintaining a master branch which is always deemed to be the latest release, and a "develop" branch to which all pull requests are targeted. This allows each boost library to accumulate multiple changes in a holding area ("develop") until the maintainer deems them sound, good, etc. The maintainer then merges "develop" into "master" (this should be a simple fast-forward), and then the maintainer updates the version and performs release activities (a final CI build, tagging the release, and bumping any version info to whatever will be next.)

To translate this mechanism to a pack repository, one would:

  1. Create a "develop" branch off "master".
  2. Change github to direct all PRs to "develop".
  3. Now multiple developers can submit as many changes as they need.
  4. Maintainer decides it is time for a release, and fast-forwards master to develop, then commits a change to pack.yaml with the version bump, then tags the release and performs any other release related activities.

This has many benefits:

  1. Allows a pack to accumulate multiple changes between releases.
  2. Avoids collisions on pack.yaml if every PR would normally need to update it with a version bump.
  3. Puts the decision of what is a patch/minor/major bump on the maintainer, not the submitter.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions