Skip to content

Release Process

Cassidy James Blaede edited this page May 18, 2020 · 38 revisions

Setup Requirements

There's a handful of setup on GitHub and Launchpad necessary for this workflow.

GitHub

Launchpad

  • Set up a daily build recipe to import and build the master branch from git into the daily PPA
  • Set up a daily build recipe to import and build the stable branch from git into the stable PPA

Normal Development

Humans 👩‍💻

  1. Create a pull request with a new feature or fix

  2. Ensure the AppData contains relevant release notes in the PR, i.e.:

    <release version="1.0.1" urgency="medium">
      <description>
        <p>Fixes</p>
        <ul>
          <li>Fix crash when opening</li>
          <li>Ensure text is always readable</li>
        </ul>
        <p>Minor updates</p>
        <ul>
          <li>Reduced memory usage to improve performance</li>
          <li>Updated translations</li>
        </ul>
      </description>
    </release>

    Ideally, include a concise <p> tag that describes/categorizes the fixes, and then provide each change in a unordered list.

    This process makes for less work at release time, plus allows time for the release description to get translated before the release

  3. Update screenshots if the UI has changed as a result of the PR

  4. PR is reviewed, approved, and merged

CI/CD 🤖

GitHub Action

  1. Updates translation files when there are string changes and pushes it to master

Launchpad

  1. Auto-imports the master branch from git
  2. Builds it into a package in the daily repo for testing

Release Time

Humans 👩‍💻

  1. Create a release PR based off of the master branch
  2. Fill out the PR template:
    • Verify the versioning for the new release in Meson and AppData (i.e. if it's a x.y.patch or x.minor.z bump)
    • Verify screenshots, AppData, etc.
    • Fill in/bump the release date in AppData
    • Verify that the PR has a label called Release (should be auto-set by the PR template)
  3. PR is reviewed, approved, and merged into master

CI/CD 🤖

GitHub Action

  1. Updates the Debian changelog in the deb-packaging branch using a sanitized commit log
  2. Tags the x.y.z version on the master branch and creates a new GitHub Release
  3. Tags the x.y.z-debian version on the deb-packaging branch
  4. Merges the master branch into the user-defined stable branch (eg. juno) to enable stable Launchpad builds
  5. TODO: Pushes a next-version commit to master including:
    • an empty AppData release with a patch version bump
    • a patch version bump in Meson

Launchpad

  1. Auto-imports the defined stable branch from git
  2. Builds it into a package in the stable repo, which is made available to users

Automation Notes 📝

Triggering a Launchpad build

For elementary projects, each repo uses Launchpad recipes to create daily builds from the master git branch and stable builds from the user-defined stable git branch (e.g. juno) . So to summarize:

  1. Create or fast forward a release branch (aka step 5 of automated release process)
  2. Use Launchpad automatic git imports
  3. Use launchpad recipes to "daily" build the release branch in the stable PPA. (But since this branch is not updated daily, it'll only build release commits)