BlogsGitLabRelease Management and Cadence

Release Management and Cadence

Release Management and Cadence

20
posts
2015–2024

GitLab's release management capabilities are enhanced with automated release note and changelog generation using commit trailers and the Changelog API. This allows for the creation of release artifacts, release notes, and comprehensive changelogs directly from CI/CD pipelines when a semantically versioned tag is pushed. The system leverages commit trailers like 'Changelog: added/changed/removed' to categorize changes, and the release-cli to create official releases with associated assets. The platform has also adopted a time-based release cadence, releasing new versions on the 22nd of every month regardless of feature completion. This philosophy prioritizes predictability, user trust, and developer motivation over feature-driven releases. This post discusses the challenges of releasing code before it's ready due to deadline pressure and unrealistic expectations, and suggests leveraging CI/CD and DevOps practices to ensure code is always tested and ready for deployment. It also highlights that releasing more often can help prevent premature releases.

2024

We’re combining patch and security releases

3/26/2024

This post announces the consolidation of patch and security releases into a single 'patch' release type, effective April. It also details the increase in planned patch releases from one to two per month, scheduled for the second and fourth Wednesdays. The goal is to improve planning for users and accelerate the delivery of fixes.

Pair GitLab and The Good Docs Project template to improve release notes

1/23/2024

This post details how The Good Docs Project uses GitLab's issue tracking, milestones, and release tagging features to gather changes for release notes. It also explains how they leverage a Markdown template to craft human-readable release notes, which are then added to the release via the GitLab UI. This demonstrates a practical application of GitLab's release management features for improving the quality and efficiency of release note generation.

2023

Tutorial: Automate releases and release notes with GitLab

11/1/2023

This post introduces the automation of release notes and changelogs using GitLab's Changelog API and commit trailers. It details how to configure a CI/CD pipeline with a `release` job and a `prepare_job` that calls the Changelog API to generate release notes based on commit trailers. The post also explains the use of semantic versioning for tags and the `release-cli` for creating releases with assets. It demonstrates how to add 'Changelog: added' and 'Changelog: removed' trailers to commit messages and how these are parsed to generate structured release notes and changelogs.

Coordinating major documentation projects with GitLab

8/24/2023

This post details how The Good Docs Project utilizes GitLab's project management features (milestones, scoped labels, health status, project boards) to manage their release cycle. It outlines their four-phase release process: Scheduling, Planning, Tracking, and Releasing. Specific technical details include using issue templates, scheduled pipelines, webhooks, GLQL, and project mirroring for onboarding contributors, and leveraging commit trailers and the Changelog API for automated release note generation. The post also highlights the use of a global project board for tracking progress and a burndown chart for release initiatives.

A first look at GitLab’s enhanced Deprecations page

3/20/2023

This post introduces updates to the Deprecations page, making it the single source of truth for breaking changes, deprecations, and removals. New features include filtering by removal version and a toggle for breaking changes only. This aims to improve communication and minimize disruption for users.

2022

How we increased our release velocity with GitLab

12/5/2022

This post details Evolphin's migration from Subversion to GitLab, resulting in a 30-40% increase in release velocity. The technical improvements include adopting a merge request workflow for code review and approval, utilizing feature branches for parallel development, and integrating GitLab with Jenkins for CI/CD and JetBrains YouTrack for issue tracking. The use of GitLab Wikis for internal documentation and collaboration is also highlighted. The transition from a slow, manual branching and merging process in Subversion to a more agile, cloud-based development model in GitLab is the core technical contribution.

2021

Why iterative software development is critical

4/30/2021

This post introduces and advocates for the principle of iterative software development and Minimum Viable Change (MVC) within the context of shipping features and experiments. It uses the "suggest a pipeline" experiment as a case study to illustrate the benefits of smaller, faster iterations, such as faster value delivery, reduced risk, easier impact assessment, and quicker learning cycles. It contrasts this with a larger, less iterative approach. The post also describes how the "invite members" experiment is being approached using a "painted door test" to validate user interest before full development. The core technical contribution is the articulation of a development philosophy and its application to product development and experimentation.

2020

GitLab Version 12 Year In Review: Releases 12.0 to 12.10

5/21/2020

This post reviews the features and improvements released in GitLab versions 12.0 to 12.10. It highlights advancements in Dev (Productivity Analytics, Code Review Analytics, Code Quality Reports, Conan and NuGet repositories, DAGs, Parent-Child Pipelines), Sec (Dependency List, Security Dashboards, vulnerability management, Container Network Security), and Ops (Environments Dashboard, Merge Trains, group-level deploy tokens, HashiCorp Vault integration, EKS integration, Log Explorer). It also emphasizes the significant growth in community contributions and the ongoing DevSecOps vision.

Inside GitLab: How we release software patches

5/13/2020

This post details the process of creating patch releases for self-managed GitLab customers and the auto-deployment process for GitLab.com. It explains the role of release managers, the severity-based criteria for patch releases, and the use of ChatOps and CI/CD for automating release tasks. For GitLab.com, it describes the use of scheduled pipelines for hourly checks, automated packaging, deployment, and QA testing, with a manual trigger for production deployment. The post also outlines future goals for the Delivery team, including reducing manual intervention, increasing release velocity, and migrating GitLab.com to Kubernetes infrastructure.

How GitLab is automating release generation in .gitlab-ci.yml

5/7/2020

Introduced the `release-cli` tool, a Go-based CLI application designed to automate the creation of GitLab releases directly from CI/CD pipelines. This tool interacts with the GitLab API to create releases based on parameters defined in `.gitlab-ci.yml`. The initial implementation supports specifying release names and descriptions, leveraging the `CI_JOB_TOKEN` for authentication and `CI_PROJECT_ID` for context. The post also details the architectural decision-making process that led to the development of an independent CLI tool over a Rails-based or runner-helper approach.

Improving iteration and collaboration with user stories

3/27/2020

This post details the development of the 'Deploy Freeze' feature, which allows users to specify windows of time when deployments are not allowed for an environment within a GitLab project. The feature is configured via the UI and leverages cron syntax, similar to Pipeline Schedules, to enforce these restrictions. The development process involved user research to understand the need for such a feature, particularly in enterprise and regulated industries, and iterative design to arrive at an MVC that focuses on UI configuration rather than YAML-based pipeline modifications. Key technical decisions included reusing cron syntax from Pipeline Schedules and implementing UI notifications for users when a freeze period is active.

2019

HPublishing Android apps to Play Store with GitLab & fastlane

1/28/2019

This post details the integration of GitLab CI/CD with fastlane for automating the publishing of Android applications to the Google Play Store. It covers configuring fastlane for app metadata management, automated signing, versioning, and phased distribution. It also outlines setting up a Docker build environment with necessary dependencies and the Android SDK for consistent builds. Key technical aspects include using Gradle for build tasks, managing secrets via environment variables and configuration files, and leveraging fastlane actions like `supply` and `upload_to_play_store`.

2018

Friends don't let friends add options to code

12/10/2018

This post argues against the introduction of optional features in software development, advocating for an iterative approach where core functionality is shipped first and enhancements are made based on user feedback and feature proposals. It highlights the increased development work, user burden of choice, and complexity introduced by optional features, suggesting that solving the underlying problem directly is preferable. This aligns with GitLab's iterative development philosophy.

2017

How to shorten the conversation cycle

6/19/2017

This post introduces the concept of shortening the 'conversation cycle' for new features by measuring cycle time, adopting minimum viable changes (MVCs), involving gatekeepers early, and ensuring team buy-in. It advocates for breaking down large features into smaller, iterative releases to accelerate the time from idea to production and improve developer motivation through faster feedback.

Why code gets released too early (and how to fix it)

4/27/2017

This post identifies the problem of releasing code before it's ready due to deadline pressure and unrealistic expectations, citing survey data. It proposes solutions such as leveraging Continuous Integration and Continuous Delivery (CI/CD) to ensure code is always tested and ready, adopting DevOps practices for better communication and collaboration, and releasing more often to avoid rushing incomplete code.

2016

Feature Preview: Introducing Cycle Analytics

9/16/2016

Introduced Cycle Analytics to measure the time from idea to production, breaking down the process into stages. This feature aims to help teams identify bottlenecks and improve overall cycle time for continuous improvement. The initial release will be part of GitLab 8.12.

Our first webcast and our 50th release

1/13/2016

This post announces the 50th monthly release of GitLab and a celebratory webcast. The webcast will feature a walkthrough of GitLab 8.4 features including enhanced search, improved importing, GitLab CI enhancements, artifact support, runner auto-queue, and CNAME support for GitLab Pages. It will also provide an overview of GitLab's future direction and a Q&A session covering release management learnings.

2015

How we managed 49 monthly releases

12/17/2015

This post details GitLab's established monthly release cadence, which has been consistently followed since October 2011, reaching 49 releases by December 2015. It explains the rationale behind time-based releases for distributed software, highlighting benefits like predictability, user anticipation, and simplified communication. The post elaborates on the advantages of a monthly cycle, such as keeping development focused on smaller iterations and enabling quick feedback. It outlines the organizational structure where team members pick up tasks from a pool, guided by a published Direction document. The role of Release Manager is emphasized as a rotating responsibility rather than a fixed person, promoting reliability and process improvement. The post details the Release Manager's tasks, including coordinating activities, using a checklist, and appointing the next Release Manager. It also describes the steps leading up to a release, including creating release candidates, testing, deploying to GitLab.com, and preparing packages and blog posts. Finally, it discusses post-release activities, including handling regressions and patch releases, and reiterates the advantages of a timed release process for open-source projects, fostering trust and indicating active development.

Why we shift objectives and not release dates at GitLab

12/7/2015

This post introduces and explains GitLab's time-based release cadence, where releases occur on the 22nd of every month regardless of feature completion. It contrasts this with feature-driven releases, highlighting the benefits of predictability, user trust, developer motivation, and quality promotion. The post also discusses how this approach helps manage developer energy and satisfaction by allowing for periods of intense activity followed by rest and celebration.

Release Manager - The invisible hero

6/25/2015

This post details the evolution of the Release Manager role at GitLab, highlighting the transition from manual, labor-intensive processes to a more automated and CI-oriented system. It outlines the tasks involved in the Release Manager role, the historical challenges, and the improvements made to streamline the process. The post also discusses the difficulties in finding volunteers for this critical role and explores potential rewards, emphasizing the 'invisible hero' aspect of the position.