Tina Docs
Introduction
Core Concepts
Querying Content
Editing
Customizing Tina
Going To Production
Media
Drafts
Guides
Further Reference

Contribution Releases


This page is out of date - check out the TinaCMS GitHub for the latest contribution information

Overarching Process

Tina has three main branches:

  • master: The bleeding edge of tinacms
  • next: A preview of the next release
  • latest: The current stable release

The flow of changes therefore looks like:

fix-some-bug => master => next => latest

The process happens over a week:

  • On Monday
    1. next is merged into latest; then latest is published to npm
    2. master is merged into next; then next is published to npm
  • Any hot fixes for bugs will be cherry picked into next and latest and the published accordingly.
  • Every pull request merged to master automatically triggers a canary release.

With this process:

  • all accepted changes are available as canary releases for early testing
  • critical fixes are published as soon as possible
  • new features and minor fixes take ~1.5 weeks to be published

Steps to Release

The general release process looks like this:

  1. Build the source files:
    The source must be compiled, minified, and uglified in preparation for release.
  2. Generate CHANGELOGs and Git tags:
    We use lerna to generate CHANGELOG files automatically from our commit messages.
  3. Clean the CHANGELOGs
    Lerna sometimes adds empty changelog entries. For example, if react-tinacms is changed then tinacms will get get a patch update with only the dependency updated. Make sure to install lerna-clean-changelog-cli:
    npm i -g lerna-clean-changelogs-cli
  4. Publish to NPM:
    You must have an NPM_TOKEN set locally that has access to the @tinacms organization
  5. Push CHANGELOGs and Git tags to GitHub:
    Let everyone know!

The exact commands vary slightly depending on the type of release being made.

Prerelease

  1. Build the source files:
    npm run build
  2. Generate CHANGELOGs and Git tags:
    lerna version \ --conventional-commits \ --conventional-prerelease \ --no-push \ --allow-branch next \ -m "chore(publish): prerelease"
  3. Clean the CHANGELOGs
    lcc ** && git commit -am "chore: clean changelogs"
  4. Publish to NPM: lerna publish from-package --dist-tag next
  5. Push CHANGELOGs and Git tags to GitHub: git push && git push --tags

Graduating Prereleases

  1. Build the source files:
    npm run build
  2. Generate CHANGELOGs and Git tags:
    lerna version \ --conventional-commits \ --conventional-graduate \ --no-push \ --allow-branch next \ -m "chore(publish): graduation"
  3. Clean the CHANGELOGs
    lcc ** && git commit -am "chore: clean changelogs"
  4. Publish to NPM:
    lerna publish from-package
  5. Push CHANGELOGs and Git tags to GitHub: git push && git push --tags

Release

  1. Build the source files:
    npm run build
  2. Generate CHANGELOGs and Git tags:
    lerna version \ --conventional-commits \ --no-push \ --allow-branch master \ -m "chore(publish): release"
  3. Clean the CHANGELOGs
    lcc ** && git commit -am "chore: clean changelogs"
  4. Publish to NPM: lerna publish from-package
  5. Push CHANGELOGs and Git tags to GitHub: git push && git push --tags