{
    "version": "https://jsonfeed.org/version/1",
    "title": "Tramline Changelog",
    "home_page_url": "https://docs.tramline.app/changelog",
    "description": "Keep yourself up-to-date about new features in every release",
    "items": [
        {
            "id": "https://docs.tramline.app/changelog/january-30-2026",
            "content_html": "<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/automatic-rollout-e9d7636f94747671a66707dff8837a2d.png\" width=\"2284\" height=\"682\" class=\"img_ev3q\"></p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"smart-staged-rollouts\">Smart staged rollouts<a href=\"https://docs.tramline.app/changelog/january-30-2026#smart-staged-rollouts\" class=\"hash-link\" aria-label=\"Direct link to Smart staged rollouts\" title=\"Direct link to Smart staged rollouts\" translate=\"no\">​</a></h3>\n<p>Tramline can now automatically progress your <strong>Android</strong> staged rollout. When enabled, the rollout advances to the next configured stage once every 24 hours, as long as the release remains healthy. If <a class=\"\" href=\"https://docs.tramline.app/using-tramline/quality-and-monitoring/release-health-monitoring\">release health rules</a> detect problems, the rollout is automatically paused. You can manually pause, resume, or switch back to manual control at any time.</p>\n<p>Read more about configuring automatic rollouts → <a class=\"\" href=\"https://docs.tramline.app/using-tramline/release-management/release-settings#automatic-rollout\">here</a></p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"auto-start-rollouts-after-submission\">Auto-start rollouts after submission<a href=\"https://docs.tramline.app/changelog/january-30-2026#auto-start-rollouts-after-submission\" class=\"hash-link\" aria-label=\"Direct link to Auto-start rollouts after submission\" title=\"Direct link to Auto-start rollouts after submission\" translate=\"no\">​</a></h3>\n<p>Production rollouts can now start automatically without manual intervention. On iOS, enabling this sets the release type to \"After Approval\" in App Store Connect — once Apple approves the review, the release begins on its own. On Android, the rollout kicks off as soon as submission preparation completes.</p>\n<p>Read more about auto-start rollouts → <a class=\"\" href=\"https://docs.tramline.app/using-tramline/release-management/release-settings#auto-start-rollout-after-submission\">here</a></p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"form-factor-support-android-only\">Form-factor support (Android only)<a href=\"https://docs.tramline.app/changelog/january-30-2026#form-factor-support-android-only\" class=\"hash-link\" aria-label=\"Direct link to Form-factor support (Android only)\" title=\"Direct link to Form-factor support (Android only)\" translate=\"no\">​</a></h3>\n<p>\n  <img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/img/changelog/production-form-factors.png\" width=\"400\" class=\"img_ev3q\">\n</p>\n<p>You can now target Android releases to specific device form factors — Wear OS, Android TV, Automotive, and Android XR. These can be configured both on production and internal submissions.</p>\n<p>\n  <img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/img/changelog/wear-os-submission.png\" width=\"400\" class=\"img_ev3q\">\n</p>\n<p>Note that we currently don't support a hybrid release of separate form-factor tracks to <strong>production</strong> from the same release train. We recommend creating separate trains or apps for this. Separate tracks for Internal/Beta submissions are, however, supported in a hybrid way.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"auto-update-inflight-release-with-latest-rc\">Auto-update inflight release with latest RC<a href=\"https://docs.tramline.app/changelog/january-30-2026#auto-update-inflight-release-with-latest-rc\" class=\"hash-link\" aria-label=\"Direct link to Auto-update inflight release with latest RC\" title=\"Direct link to Auto-update inflight release with latest RC\" translate=\"no\">​</a></h3>\n<p>When a new release candidate build is generated while a production release is still awaiting review, Tramline now automatically swaps in the latest build and re-prepares the submission. This keeps your in-flight release current without manual intervention.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"lock-platforms\">Lock platforms<a href=\"https://docs.tramline.app/changelog/january-30-2026#lock-platforms\" class=\"hash-link\" aria-label=\"Direct link to Lock platforms\" title=\"Direct link to Lock platforms\" translate=\"no\">​</a></h3>\n<p>For <a class=\"\" href=\"https://docs.tramline.app/using-tramline/release-management/synchronized-release\">synchronized releases</a>, you can now lock individual platforms to mark them as complete independently. This unblocks upcoming releases for that platform without waiting for the other platform to finish. Critical fixes can still be applied after locking.</p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/lock-platforms-6a70ff49f686a9bef7f24b72729b767c.png\" width=\"2100\" height=\"1376\" class=\"img_ev3q\"></p>\n<p>Read more about locking platforms → <a class=\"\" href=\"https://docs.tramline.app/using-tramline/release-management/suspending-releases#locking-platforms\">here</a></p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"draft-release-notes\">Draft release notes<a href=\"https://docs.tramline.app/changelog/january-30-2026#draft-release-notes\" class=\"hash-link\" aria-label=\"Direct link to Draft release notes\" title=\"Direct link to Draft release notes\" translate=\"no\">​</a></h3>\n<p>Release notes and other text metadata (like iOS promo text) that don't meet store validation requirements are now saved as a draft. You can re-apply, edit, and save them as needed.</p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/draft-metadata-b3bad32519c79c79883a220b1b6a0358.png\" width=\"2308\" height=\"1006\" class=\"img_ev3q\"></p>\n<details open=\"\" class=\"details_lb9f alert alert--info details_b_Ee\" data-collapsed=\"false\"><summary>Improvements and Fixes</summary><div><div class=\"collapsibleContent_i85q\">\n<!-- -->\n<ul>\n<li class=\"\">Don't create version bump PRs for hotfix releases</li>\n<li class=\"\">Make scheduled releases DST-insensitive (rely on time-of-day)</li>\n<li class=\"\">Review-rejected builds can now be resubmitted</li>\n<li class=\"\">Limit production blocking checks to active releases only</li>\n<li class=\"\">If git tagging fails, do not block further operations</li>\n</ul>\n</div></div></details>",
            "url": "https://docs.tramline.app/changelog/january-30-2026",
            "title": "January 30, 2026",
            "summary": "Smart staged rollouts",
            "date_modified": "2026-01-30T00:00:00.000Z",
            "author": {
                "name": "Animesh Ghosh",
                "url": "https://github.com/Animesh-Ghosh"
            },
            "tags": []
        },
        {
            "id": "https://docs.tramline.app/changelog/december-17-2025",
            "content_html": "<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/soak-remaining-f096b95975df1ff2e2c4f7200f735f2a.png\" width=\"1182\" height=\"706\" class=\"img_ev3q\"></p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"time-limited-soak-period\">Time-limited soak period<a href=\"https://docs.tramline.app/changelog/december-17-2025#time-limited-soak-period\" class=\"hash-link\" aria-label=\"Direct link to Time-limited soak period\" title=\"Direct link to Time-limited soak period\" translate=\"no\">​</a></h3>\n<p>Soak is a designated way to block releases from moving to production until a configured time period has passed. Soak starts as soon as the first RC is available and allows time to monitor the RC before proceeding to send the app to production tracks. Soak can be configured under your Release Settings, in increments of 1 hour. It is available for all apps: android, iOS and cross-platform.</p>\n<p>The Release Candidate step will show a <em>pending</em> status as long as the soak is running. You can optionally end early or extend the configured soak period. All soak related actions come with with individual notifications that can be turned on/off.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"improvements-to-preparing-new-releases\">Improvements to preparing new releases<a href=\"https://docs.tramline.app/changelog/december-17-2025#improvements-to-preparing-new-releases\" class=\"hash-link\" aria-label=\"Direct link to Improvements to preparing new releases\" title=\"Direct link to Improvements to preparing new releases\" translate=\"no\">​</a></h3>\n<p><strong>Release from commit SHA</strong>: if you're not not sure if the working branch is stable to deploy, you can choose a specific commit from an older point in history and cut the release branch from there.</p>\n<p>\n  <img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/img/changelog/release-from-sha.png\" width=\"400\" class=\"img_ev3q\">\n</p>\n<p><strong>Start release from mobile view</strong>: a quick quality-of-life improvement to the mobile-browser view that allows you to start releases as you normally would (with all standard options).</p>\n<p>\n  <img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/img/changelog/start-release-mobile-view.png\" width=\"400\" class=\"img_ev3q\">\n</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"gitlab-re-authorization\">GitLab re-authorization<a href=\"https://docs.tramline.app/changelog/december-17-2025#gitlab-re-authorization\" class=\"hash-link\" aria-label=\"Direct link to GitLab re-authorization\" title=\"Direct link to GitLab re-authorization\" translate=\"no\">​</a></h3>\n<p>GitLab as an integration is notoriously flaky in terms of liveliness. The access tokens tend to expire too quickly and the TTLs aren't particularly well-documented. If one doesn't touch Tramline for a while, this integration can get disconnected in the background. Tramline now handles this gracefully and prompts you to re-authorize GitLab (CI/CD or VCS both).</p>\n<p>\n  <img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/img/changelog/gitlab-reauth.png\" width=\"400\" class=\"img_ev3q\">\n</p>\n<details open=\"\" class=\"details_lb9f alert alert--info details_b_Ee\" data-collapsed=\"false\"><summary>Improvements and Fixes</summary><div><div class=\"collapsibleContent_i85q\">\n<!-- -->\n<ul>\n<li class=\"\">Fix release schedules to strictly adhere to time-of-day and not be DST-sensitive</li>\n<li class=\"\">Fixed concurrency bug with multiple invites being sent out to users</li>\n<li class=\"\">Better auth checks around role escalation (previously only on client-side)</li>\n<li class=\"\">Fix the <em>refresh</em> button when Tramline is finalizing a release</li>\n</ul>\n</div></div></details>",
            "url": "https://docs.tramline.app/changelog/december-17-2025",
            "title": "December 17, 2025",
            "summary": "Time-limited soak period",
            "date_modified": "2025-12-17T00:00:00.000Z",
            "author": {
                "name": "Animesh Ghosh",
                "url": "https://github.com/Animesh-Ghosh"
            },
            "tags": []
        },
        {
            "id": "https://docs.tramline.app/changelog/december-1-2025",
            "content_html": "<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/release-settings-update-f5250213998647a6c5d90043cf9374d1.png\" width=\"1488\" height=\"442\" class=\"img_ev3q\"></p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"edit-release-settings\">Edit release settings<a href=\"https://docs.tramline.app/changelog/december-1-2025#edit-release-settings\" class=\"hash-link\" aria-label=\"Direct link to Edit release settings\" title=\"Direct link to Edit release settings\" translate=\"no\">​</a></h3>\n<p>Previously, Tramline blocked editing release settings while an active release was running — a sensible safeguard at the time. This restriction has now been relaxed: you can tweak your release train settings even during an ongoing release, and the changes will apply starting with the next one.</p>\n<p>The only exception is versioning and branching strategies. These remain set-once. If you need to change them, you can create a new train and retire the current one.</p>\n<p>This update now also allows you to tweak your release schedule (which was previously not possible).</p>\n<div class=\"theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary\"><div class=\"admonitionHeading_Gvgb\"><span class=\"admonitionIcon_Rf37\"><svg viewBox=\"0 0 14 16\"><path fill-rule=\"evenodd\" d=\"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z\"></path></svg></span>note</div><div class=\"admonitionContent_BuS1\"><p><a class=\"\" href=\"https://docs.tramline.app/using-tramline/release-management/release-settings#submission-settings\">Submission settings</a> are always editable regardless of the state of your release.</p></div></div>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"app-icons\">App Icons<a href=\"https://docs.tramline.app/changelog/december-1-2025#app-icons\" class=\"hash-link\" aria-label=\"Direct link to App Icons\" title=\"Direct link to App Icons\" translate=\"no\">​</a></h3>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/app-icons-example-f87cee77bd42b2014f8128b45450726e.png\" width=\"812\" height=\"168\" class=\"img_ev3q\"></p>\n<p>In app settings, you can now upload a size-compatible app icon to help visually distinguish your apps when you have multiple configured in Tramline. You can add an icon anytime, either when creating a new app or after setup.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"disable-all-back-merges\">Disable all back-merges<a href=\"https://docs.tramline.app/changelog/december-1-2025#disable-all-back-merges\" class=\"hash-link\" aria-label=\"Direct link to Disable all back-merges\" title=\"Direct link to Disable all back-merges\" translate=\"no\">​</a></h3>\n<p>Until now, Tramline let you choose between creating a single final back-merge PR at the end of a release cycle (the default) or <a class=\"\" href=\"https://docs.tramline.app/using-tramline/release-management/release-settings#continuous-backmerge\">continuously</a> creating PRs for commits landing in the release branch.</p>\n<p>For teams following <a href=\"https://trunkbaseddevelopment.com/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">trunk-based development</a>, back-merges often aren’t useful. You’re typically cherry-picking all commits (<em>including</em> fixes) from trunk into the release branch.</p>\n<p>If you follow a TBD workflow, you can now disable back-merges entirely.</p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/disable-all-backmerges-2af603209cd7cfd263594f430943afe3.png\" width=\"678\" height=\"298\" class=\"img_ev3q\"></p>\n<details open=\"\" class=\"details_lb9f alert alert--info details_b_Ee\" data-collapsed=\"false\"><summary>Improvements and Fixes</summary><div><div class=\"collapsibleContent_i85q\">\n<!-- -->\n<ul>\n<li class=\"\">Upcoming releases can be started even if the previous release is partially rolled out to Production (only one store in a cross-platform release)</li>\n<li class=\"\">If a review fails on iOS, you can now re-submit from Tramline without needing to land another commit to kick-start another cycle</li>\n<li class=\"\">Integrations are now configured per integration, instead of per category</li>\n</ul>\n</div></div></details>",
            "url": "https://docs.tramline.app/changelog/december-1-2025",
            "title": "December 1, 2025",
            "summary": "Edit release settings",
            "date_modified": "2025-12-01T00:00:00.000Z",
            "author": {
                "name": "Animesh Ghosh",
                "url": "https://github.com/Animesh-Ghosh"
            },
            "tags": []
        },
        {
            "id": "https://docs.tramline.app/changelog/september-4-2025",
            "content_html": "<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/outgoing-webhook-logs-9b778cb15e30f6fb68e75a31d6ec7f52.png\" width=\"830\" height=\"846\" class=\"img_ev3q\"></p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"outgoing-webhooks\">Outgoing Webhooks<a href=\"https://docs.tramline.app/changelog/september-4-2025#outgoing-webhooks\" class=\"hash-link\" aria-label=\"Direct link to Outgoing Webhooks\" title=\"Direct link to Outgoing Webhooks\" translate=\"no\">​</a></h3>\n<p>Tramline's outgoing webhooks notify you in real-time when certain events happen in your release. Webhooks are HTTPS POST requests made to an endpoint of your choice that you can then implement custom business logic for. For example, you can receive a webhook when the release first kicks off. Your endpoint that receives this webhook can then process the payload of the webhook to automate some internal process you have based on this event, such as triggering a different pipeline, creating a ticket, or sending a custom notification or email to your team.</p>\n<p>We currently support the following events:</p>\n<ul>\n<li class=\"\"><code>release.started</code></li>\n<li class=\"\"><code>rc.finished</code></li>\n<li class=\"\"><code>release.completed</code></li>\n</ul>\n<p>Read more about configuring webhooks → <a href=\"https://docs.tramline.app/using-tramline/quality-and-monitoring/outgoing-webhooks\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">here</a>.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"custom-content-in-slack-notifications\">Custom content in Slack notifications<a href=\"https://docs.tramline.app/changelog/september-4-2025#custom-content-in-slack-notifications\" class=\"hash-link\" aria-label=\"Direct link to Custom content in Slack notifications\" title=\"Direct link to Custom content in Slack notifications\" translate=\"no\">​</a></h3>\n<p>\n  <img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/img/changelog/slack-formatting-example-output.png\" alt=\"Slack formatting output\" width=\"600\" class=\"img_ev3q\">\n</p>\n<p>Teams can now add custom user-defined content to their Slack notifications, providing additional context and personalized information alongside standard release updates. This enhancement allows release managers to include:</p>\n<ul>\n<li class=\"\">Additional instructions for testing</li>\n<li class=\"\">Important notes about the release</li>\n<li class=\"\">Links to relevant documentation or dashboards</li>\n<li class=\"\">Team-specific context or reminders</li>\n<li class=\"\">Tagging specific users or groups about certain release events</li>\n</ul>\n<p>\n  <img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/img/changelog/slack-formatting-example-input.png\" alt=\"Slack formatting input\" width=\"400\" class=\"img_ev3q\">\n</p>\n<p>The custom content appears as a separate section in Slack notifications and can be configured per notification type.</p>\n<p>Read more about configuring custom notification content → <a class=\"\" href=\"https://docs.tramline.app/using-tramline/quality-and-monitoring/notifications#custom-content\">here</a>.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"flexible-release-branch-names\">Flexible release branch names<a href=\"https://docs.tramline.app/changelog/september-4-2025#flexible-release-branch-names\" class=\"hash-link\" aria-label=\"Direct link to Flexible release branch names\" title=\"Direct link to Flexible release branch names\" translate=\"no\">​</a></h3>\n<p>Release branch naming is now fully customizable with dynamic token substitution. Teams can create branch naming patterns that automatically include contextual information like train names, release dates, and version numbers.</p>\n<p>Available tokens include:</p>\n<ul>\n<li class=\"\"><code>~trainName~</code>: The name of the release train</li>\n<li class=\"\"><code>~releaseStartDate~</code>: Date when the release was started/will start</li>\n<li class=\"\"><code>~releaseVersion~</code>: Version name of the release</li>\n</ul>\n<p>For example, a pattern like <code>release/~trainName~/~releaseVersion~/~releaseStartDate~</code> would generate branch names like <code>release/production/1.2.0/2025-08-29</code>.</p>\n<p>Read more about how tokens in patterns work → <a href=\"https://docs.tramline.app/using-tramline/release-management/embeddable-tokens\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">here</a></p>\n<details open=\"\" class=\"details_lb9f alert alert--info details_b_Ee\" data-collapsed=\"false\"><summary>Improvements and Fixes</summary><div><div class=\"collapsibleContent_i85q\">\n<!-- -->\n<ul>\n<li class=\"\">Enhanced error reporting when App Store rollouts fail to start</li>\n<li class=\"\">Added automatic retries for release branch creation to improve reliability</li>\n<li class=\"\">Retries for workflow triggers to handle transient failures for GitLab Pipelines</li>\n<li class=\"\">Link to Release Activity page on Rollout timeline panel</li>\n</ul>\n</div></div></details>",
            "url": "https://docs.tramline.app/changelog/september-4-2025",
            "title": "September 4, 2025",
            "summary": "Outgoing Webhooks",
            "date_modified": "2025-09-04T00:00:00.000Z",
            "author": {
                "name": "Animesh Ghosh",
                "url": "https://github.com/Animesh-Ghosh"
            },
            "tags": []
        },
        {
            "id": "https://docs.tramline.app/changelog/september-2-2025",
            "content_html": "<p>\n  <img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/img/changelog/tramline-mobile-rollout.png\" width=\"400\" class=\"img_ev3q\">\n</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"limited-mobile-experience\">Limited Mobile experience<a href=\"https://docs.tramline.app/changelog/september-2-2025#limited-mobile-experience\" class=\"hash-link\" aria-label=\"Direct link to Limited Mobile experience\" title=\"Direct link to Limited Mobile experience\" translate=\"no\">​</a></h3>\n<p>Tramline now includes dedicated mobile views, making it easier for teams to monitor and manage releases on mobile devices. The mobile experience includes:</p>\n<p><strong>Release List View</strong>: Browse all releases with a mobile-optimized layout</p>\n<p><strong>Release Details</strong>: View release summaries with essential information</p>\n<p><strong>Production Rollout Controls</strong>: Manage rollout percentages and status directly from mobile</p>\n<p>This mobile support is particularly valuable for release managers who need to monitor or respond to release issues while away from their desktop. We will continue to add more desktop-like controls to this view in the future. Feel free to reach out if you have any suggestions!</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"cleaner-changelogs-in-notifications\">Cleaner changelogs in notifications<a href=\"https://docs.tramline.app/changelog/september-2-2025#cleaner-changelogs-in-notifications\" class=\"hash-link\" aria-label=\"Direct link to Cleaner changelogs in notifications\" title=\"Direct link to Cleaner changelogs in notifications\" translate=\"no\">​</a></h3>\n<p>Changelogs sent in notifications are now much cleaner and more focused, with automatic filtering to remove noise from pull requests and irrelevant commits. This enhancement improves the readability of release notes by:</p>\n<ul>\n<li class=\"\">Excluding PRs and commits that were merged using continuous back-merge functionality from previous releases</li>\n<li class=\"\">Filtering out merge commits, co-authored-by lines and other distracting details</li>\n<li class=\"\">Removing emoji characters and standardizing commit message formatting</li>\n<li class=\"\">Compacting and deduplicating similar commit messages</li>\n</ul>\n<p>The result is more scannable logs that focus on the meaningful changes shipped in each release, making it easier for teams and stakeholders to understand what's new.</p>\n<details open=\"\" class=\"details_lb9f alert alert--info details_b_Ee\" data-collapsed=\"false\"><summary>Improvements and Fixes</summary><div><div class=\"collapsibleContent_i85q\">\n<!-- -->\n<ul>\n<li class=\"\">Enhanced search functionality with improved filtering and results display</li>\n<li class=\"\">Improved GitLab repository fetching to include all accessible repositories</li>\n<li class=\"\">Fixed navigation issues when using the back button from Account Settings</li>\n</ul>\n</div></div></details>",
            "url": "https://docs.tramline.app/changelog/september-2-2025",
            "title": "September 2, 2025",
            "summary": "Limited Mobile experience",
            "date_modified": "2025-09-02T00:00:00.000Z",
            "author": {
                "name": "Animesh Ghosh",
                "url": "https://github.com/Animesh-Ghosh"
            },
            "tags": []
        },
        {
            "id": "https://docs.tramline.app/changelog/august-28-2025",
            "content_html": "<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/bitrise-pipelines-4158fe9c0c7494d1d7bcc2bf4181daef.png\" width=\"2344\" height=\"776\" class=\"img_ev3q\"></p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"bitrise-pipeline-support\">Bitrise Pipeline support<a href=\"https://docs.tramline.app/changelog/august-28-2025#bitrise-pipeline-support\" class=\"hash-link\" aria-label=\"Direct link to Bitrise Pipeline support\" title=\"Direct link to Bitrise Pipeline support\" translate=\"no\">​</a></h3>\n<p>Bitrise users can now also use <a href=\"https://docs.bitrise.io/en/bitrise-ci/workflows-and-pipelines/build-pipelines.html\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">pipelines</a> with Tramline. This enhancement provides more flexible workflow management beyond the standard Bitrise workflow configurations.</p>\n<p>Pipelines allow teams to:</p>\n<ul>\n<li class=\"\">Use complex multi-step pipeline configurations</li>\n<li class=\"\">Have better control on overall status tracking</li>\n</ul>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"flexible-build-number-management\">Flexible Build Number management<a href=\"https://docs.tramline.app/changelog/august-28-2025#flexible-build-number-management\" class=\"hash-link\" aria-label=\"Direct link to Flexible Build Number management\" title=\"Direct link to Flexible Build Number management\" translate=\"no\">​</a></h3>\n<p>Teams now have full control over how build numbers are managed in their release process. Tramline supports two distinct strategies:</p>\n<p><strong>Internal Management (existing)</strong>: Tramline automatically increments build numbers for each release, maintaining consistency across your release train.</p>\n<p><strong>External Management (newly added)</strong>: Build numbers are expected to be the CI workflow numbers (typically monotonically increasing)</p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/build-number-managed-by-ci-d9b712dc3401f4451d4d020b0b309956.png\" width=\"974\" height=\"488\" class=\"img_ev3q\"></p>\n<p>This flexibility is particularly useful for teams with complex versioning requirements or those who prefer to manage build numbers within their existing CI/CD infrastructure.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"resilient-build-discovery\">Resilient Build discovery<a href=\"https://docs.tramline.app/changelog/august-28-2025#resilient-build-discovery\" class=\"hash-link\" aria-label=\"Direct link to Resilient Build discovery\" title=\"Direct link to Resilient Build discovery\" translate=\"no\">​</a></h3>\n<p>Tramline now Automatically finds builds that were uploaded directly to app stores by CI workflows. This improvement makes the release process more robust when dealing with:</p>\n<ul>\n<li class=\"\">Build artifacts that weren't properly attached during CI runs</li>\n<li class=\"\">Direct uploads to Google Play Store or Firebase App Distribution</li>\n<li class=\"\">Network-related artifact retrieval issues</li>\n</ul>\n<p>The system will automatically retry and attempt to locate builds in the target stores, ensuring your release process continues smoothly even when build attachment fails initially.</p>\n<details open=\"\" class=\"details_lb9f alert alert--info details_b_Ee\" data-collapsed=\"false\"><summary>Improvements and Fixes</summary><div><div class=\"collapsibleContent_i85q\">\n<!-- -->\n<ul>\n<li class=\"\">Improved Firebase build discovery logic during preprocessing phase</li>\n<li class=\"\">Reduced retry attempts for attaching build artifacts</li>\n<li class=\"\">Fixed Bitrise integration connection checks to only validate connected integrations</li>\n<li class=\"\">Better error handling for GitHub parameters that aren't accepted by target workflows</li>\n</ul>\n</div></div></details>",
            "url": "https://docs.tramline.app/changelog/august-28-2025",
            "title": "August 28, 2025",
            "summary": "Bitrise Pipeline support",
            "date_modified": "2025-08-28T00:00:00.000Z",
            "author": {
                "name": "Akshay Gupta",
                "url": "https://github.com/kitallis"
            },
            "tags": []
        },
        {
            "id": "https://docs.tramline.app/changelog/august-26-2025",
            "content_html": "<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/changes-in-release-slack-linked-05f16c6a72f043bb69b6d3dc9e560bb5.png\" width=\"1432\" height=\"1564\" class=\"img_ev3q\"></p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"linked-tickets-and-prs-in-changelog-notifications\">Linked Tickets and PRs in changelog notifications<a href=\"https://docs.tramline.app/changelog/august-26-2025#linked-tickets-and-prs-in-changelog-notifications\" class=\"hash-link\" aria-label=\"Direct link to Linked Tickets and PRs in changelog notifications\" title=\"Direct link to Linked Tickets and PRs in changelog notifications\" translate=\"no\">​</a></h3>\n<p>Changelogs now automatically detect and create clickable links for project management tickets/issues and pull requests mentioned in commit messages sent over Slack. This enhancement makes it much easier to navigate from release notes to the underlying work items and code changes. Supported integrations include:</p>\n<p><strong>Version Control</strong>: GitHub, GitLab, Bitbucket pull requests</p>\n<p><strong>Project Management</strong>: Jira tickets, Linear issues</p>\n<p>The feature automatically detects patterns like <code>PROJ-123</code> for tickets or <code>#456</code> for pull requests and converts them into clickable links that open directly in the respective tools. This can be enabled or disabled per release train based on team preferences.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"new-release-notifications\">New Release notifications<a href=\"https://docs.tramline.app/changelog/august-26-2025#new-release-notifications\" class=\"hash-link\" aria-label=\"Direct link to New Release notifications\" title=\"Direct link to New Release notifications\" translate=\"no\">​</a></h3>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/changes-in-release-threads-linked-839523dff83dcae3ccc7ebd7ae66edcb.png\" width=\"1422\" height=\"1588\" class=\"img_ev3q\"></p>\n<p>Both these new notifications have dual-set changelogs that are threaded (after 20 items) into multiple messages.</p>\n<p><strong>Production Rollout Started Notifications</strong>: When a production rollout starts, the changelogs for this release and another set for the current rollout changes (if there are multiple rollouts) are threaded into the notification.</p>\n<p><strong>RC Finished Notifications</strong>: When any RC build is generated and sent to appropriate submissions. Changes since the last RC build and all the changes since the release started are threaded in as well.</p>\n<p>Both notifications have linked tickets (Project Management integration should be enabled) and PRs in their changelogs.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"version-bumping-strategies\">Version Bumping strategies<a href=\"https://docs.tramline.app/changelog/august-26-2025#version-bumping-strategies\" class=\"hash-link\" aria-label=\"Direct link to Version Bumping strategies\" title=\"Direct link to Version Bumping strategies\" translate=\"no\">​</a></h3>\n<p>Teams now have more granular control over version bumping with new strategic options for different release scenarios:</p>\n<p>In <strong>Current Version Before Release Branch Cuts</strong>, Tramline will increment the version information in your code before cutting the release branch for a new release.</p>\n<p>In <strong>Next Version After Release Branch Cuts</strong>, Tramline will increment the version information in your code after a release branch has been cut and the release has started.</p>\n<p>Learn more about version bumping strategies → <a class=\"\" href=\"https://docs.tramline.app/using-tramline/release-management/release-settings#automatic-version-bumps\">here</a>.</p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/automatic-version-bump-in-code-53727c25792f93d6fc4e45af1f78c097.png\" width=\"1184\" height=\"650\" class=\"img_ev3q\"></p>\n<details open=\"\" class=\"details_lb9f alert alert--info details_b_Ee\" data-collapsed=\"false\"><summary>Improvements and Fixes</summary><div><div class=\"collapsibleContent_i85q\">\n<!-- -->\n<ul>\n<li class=\"\">Added Play Store deep links to RC finished notifications for easier access</li>\n<li class=\"\">Improved right-side pane behavior to close when clicking outside</li>\n<li class=\"\">Updated documentation links throughout the application</li>\n<li class=\"\">Ensured version bump jobs only run for appropriate release strategies</li>\n</ul>\n</div></div></details>",
            "url": "https://docs.tramline.app/changelog/august-26-2025",
            "title": "August 26, 2025",
            "summary": "Linked Tickets and PRs in changelog notifications",
            "date_modified": "2025-08-26T00:00:00.000Z",
            "author": {
                "name": "Animesh Ghosh",
                "url": "https://github.com/Animesh-Ghosh"
            },
            "tags": []
        },
        {
            "id": "https://docs.tramline.app/changelog/august-21-2025",
            "content_html": "<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/project-management-integrations-a2c2d9f76fff7836d4b7eecccec21fac.png\" width=\"2006\" height=\"564\" class=\"img_ev3q\"></p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"linear-and-jira-integrations-for-project-management\">Linear and Jira integrations for Project Management<a href=\"https://docs.tramline.app/changelog/august-21-2025#linear-and-jira-integrations-for-project-management\" class=\"hash-link\" aria-label=\"Direct link to Linear and Jira integrations for Project Management\" title=\"Direct link to Linear and Jira integrations for Project Management\" translate=\"no\">​</a></h3>\n<p>Tramline now supports <a href=\"https://linear.app/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Linear</a> as a project management integration in addition to <a href=\"https://www.atlassian.com/software/jira\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Jira</a>, expanding the platform's ability to connect with project management tools. This integration provides the foundation for tracking project tickets and linking them to releases.</p>\n<p>The project management integrations currently allow for configuration of workspace, issue statuses and release labels (or fix versions).</p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/project-management-config-688507ab03d7c6ce674dedfa3d4c840b.png\" width=\"1544\" height=\"1776\" class=\"img_ev3q\"></p>\n<p>While this initial implementation focuses on connection and configuration, future updates will expand Linear and Jira support to include automatic issue tracking and linking within releases.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"enhanced-gitlab-support\">Enhanced GitLab support<a href=\"https://docs.tramline.app/changelog/august-21-2025#enhanced-gitlab-support\" class=\"hash-link\" aria-label=\"Direct link to Enhanced GitLab support\" title=\"Direct link to Enhanced GitLab support\" translate=\"no\">​</a></h3>\n<p>GitLab integration has been significantly improved with added support for GitLab CI/CD and making the VCS integration up to date with the updated features. Key improvements include:</p>\n<p><strong>GitLab Pipelines Support</strong>: Full integration with GitLab's CI/CD pipeline system</p>\n<p><strong>Artifact Processing</strong>: Improved artifact downloading and filtering with optional pattern matching</p>\n<p><strong>Better Error Handling</strong>: More granular error reporting for workflow triggers and pipeline failures</p>\n<p><strong>Cherry-pick PRs</strong>: Ability to cherry-pick commits from the release branch to the working branch</p>\n<p>This brings GitLab integration to feature parity with other supported CI/CD platforms like GitHub Actions and Bitrise.</p>\n<p>Learn more about setting up GitLab integrations → <a class=\"\" href=\"https://docs.tramline.app/integrations/ci-cd/gitlab\">here</a>.</p>\n<details open=\"\" class=\"details_lb9f alert alert--info details_b_Ee\" data-collapsed=\"false\"><summary>Improvements and Fixes</summary><div><div class=\"collapsibleContent_i85q\">\n<!-- -->\n<ul>\n<li class=\"\">Improved workflow trigger failure handling across all CI/CD integrations</li>\n<li class=\"\">Added build number display to \"Previous Releases\" section for better version tracking</li>\n<li class=\"\">Fixed YAML formatting issue in invitation email templates</li>\n<li class=\"\">Improved Slack message formatting for publishing review notifications</li>\n</ul>\n</div></div></details>",
            "url": "https://docs.tramline.app/changelog/august-21-2025",
            "title": "August 21, 2025",
            "summary": "Linear and Jira integrations for Project Management",
            "date_modified": "2025-08-21T00:00:00.000Z",
            "author": {
                "name": "Animesh Ghosh",
                "url": "https://github.com/Animesh-Ghosh"
            },
            "tags": []
        },
        {
            "id": "https://docs.tramline.app/changelog/august-19-2025",
            "content_html": "<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/release-specific-channels-012a169d2691a09d10033c39af6f2370.png\" width=\"1960\" height=\"830\" class=\"img_ev3q\"></p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"release-specific-notification-channels\">Release-Specific notification channels<a href=\"https://docs.tramline.app/changelog/august-19-2025#release-specific-notification-channels\" class=\"hash-link\" aria-label=\"Direct link to Release-Specific notification channels\" title=\"Direct link to Release-Specific notification channels\" translate=\"no\">​</a></h3>\n<p>Teams can now create dedicated Slack channels for individual releases, providing focused communication spaces for each release cycle. Key features include:</p>\n<p><strong>Creation</strong>: Channel is created with sanitized names including app, platform, and version</p>\n<p><strong>Context</strong>: Each channel is specific to a single release, reducing noise and improving focus</p>\n<p><strong>Configuration</strong>: Can be enabled per release train based on team preferences</p>\n<p>This feature is particularly valuable for teams managing multiple concurrent releases or those who prefer dedicated communication channels for major releases.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"advanced-tagging-scenarios\">Advanced Tagging scenarios<a href=\"https://docs.tramline.app/changelog/august-19-2025#advanced-tagging-scenarios\" class=\"hash-link\" aria-label=\"Direct link to Advanced Tagging scenarios\" title=\"Direct link to Advanced Tagging scenarios\" translate=\"no\">​</a></h3>\n<p>Tramline now supports much more flexible tagging strategies to accommodate different team workflows and release processes. Teams can configure exactly when and how tags are created throughout their release lifecycle:</p>\n<p><strong>End-of-Release Tagging</strong>: Cut tags only when releases complete (with optional GitHub release)</p>\n<p><strong>Rollout-Based Tagging</strong>: Cut tags when rollouts start (with optional GitHub release)</p>\n<p><strong>Platform-Specific Tags</strong>: Include platform suffixes for cross-platform apps (like <code>-ios</code> or <code>-android</code>)</p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/advanced-tagging-scenarios-949b0c298c6e6d9017a09c30c34dbdfb.png\" width=\"1430\" height=\"706\" class=\"img_ev3q\"></p>\n<p>These options give teams fine-grained control over their tagging strategy, supporting everything from simple end-of-release tags to complex multi-platform, multi-rollout scenarios.</p>\n<details open=\"\" class=\"details_lb9f alert alert--info details_b_Ee\" data-collapsed=\"false\"><summary>Improvements and Fixes</summary><div><div class=\"collapsibleContent_i85q\">\n<!-- -->\n<ul>\n<li class=\"\">Enhanced Bitbucket workflow stage halting capabilities</li>\n<li class=\"\">Added support for APK uploads to Play Store with feature flag control</li>\n<li class=\"\">Improved artifact attachment reliability across all platforms</li>\n<li class=\"\">Fixed integration connection checks to properly ignore disconnected integrations</li>\n<li class=\"\">Added confirmation dialog before refreshing Slack channels</li>\n<li class=\"\">Implemented asynchronous CI/CD workflow list refresh functionality</li>\n</ul>\n</div></div></details>",
            "url": "https://docs.tramline.app/changelog/august-19-2025",
            "title": "August 19, 2025",
            "summary": "Release-Specific notification channels",
            "date_modified": "2025-08-19T00:00:00.000Z",
            "author": {
                "name": "Akshay Gupta",
                "url": "https://github.com/kitallis"
            },
            "tags": []
        },
        {
            "id": "https://docs.tramline.app/changelog/june-11-2025",
            "content_html": "<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/version-bumps-98d30b99524082434d22a386be09362f.png\" width=\"1090\" height=\"838\" class=\"img_ev3q\"></p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"automatic-version-bumps\">Automatic version bumps<a href=\"https://docs.tramline.app/changelog/june-11-2025#automatic-version-bumps\" class=\"hash-link\" aria-label=\"Direct link to Automatic version bumps\" title=\"Direct link to Automatic version bumps\" translate=\"no\">​</a></h3>\n<p>Up until now, to manage build coordinates (version name, build number) Tramline would send over the right values to the triggered workflows so that the correct build could be generated; this ensures that Tramline is always the source of truth for version management.</p>\n<p>However, this system has a limitation. It makes tracking the versions in the source a bit hard. One either has to write the version names manually to the build files like <code>build.gradle</code>, <code>pubspec.yaml</code> etc or maintain a script that reads the values sent by Tramline and then run some script to do it.</p>\n<p>Tramline now introduces two version bumping strategies that automatically create a PR to write the versioning info against some supported build files.</p>\n<ol>\n<li class=\"\">Current version (to working branch) before release branch is cut</li>\n<li class=\"\">Next version (to working branch) after the release branch is cut</li>\n</ol>\n<p>The following build files are currently supported:</p>\n<ul>\n<li class=\"\"><code>build.gradle</code> (gradle)</li>\n<li class=\"\"><code>build.gradle.kts</code> (gradle with Kotlin)</li>\n<li class=\"\"><code>plist</code> (for iOS)</li>\n<li class=\"\"><code>pbxproj</code> (for iOS)</li>\n<li class=\"\"><code>pubspec.yaml</code> (for flutter)</li>\n</ul>\n<p>We will continue to extend this feature to add support for more file types, custom versioning files and more granular strategies in the future.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"branch-prefixes\">Branch prefixes<a href=\"https://docs.tramline.app/changelog/june-11-2025#branch-prefixes\" class=\"hash-link\" aria-label=\"Direct link to Branch prefixes\" title=\"Direct link to Branch prefixes\" translate=\"no\">​</a></h3>\n<p>Quick quality-of-life improvement, you can now add prefixes to some of the automatic branches we create from Tramline. <code>&lt;prefix&gt;-version-bump</code> or <code>&lt;prefix&gt;-patch-main</code>. Note that prefix or any branch name modification is not supported for the release branches themselves currently.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"fixing-releases-on-github\">Fixing Releases on GitHub<a href=\"https://docs.tramline.app/changelog/june-11-2025#fixing-releases-on-github\" class=\"hash-link\" aria-label=\"Direct link to Fixing Releases on GitHub\" title=\"Direct link to Fixing Releases on GitHub\" translate=\"no\">​</a></h3>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/fixed-github-releases-13f01fd9e1ab010e41d844581d7fbbfb.png\" width=\"1854\" height=\"1424\" class=\"img_ev3q\"></p>\n<p>For GitHub VCS integrations, when we cut tags related to the releases, we also allow creating GitHub Releases against them. Previously, this experience was sort of broken because the GitHub API to create tags with releases is unreliable. It often internally blows up if the changelog for the release is too big (to workaround this, we would send Tramline's own copy of the changelog). Secondly, it also isn't very predictable in terms of the two tags it picks for the changes. Sometimes the previous tag picked is arbitrarily quite far back in time.</p>\n<p>We've fixed these longstanding issues and now always generate the correct changelog between the correct tags and retain the formatting style of the changelogs from GitHub.</p>\n<details open=\"\" class=\"details_lb9f alert alert--info details_b_Ee\" data-collapsed=\"false\"><summary>Improvements and Fixes</summary><div><div class=\"collapsibleContent_i85q\">\n<!-- -->\n<ul>\n<li class=\"\">Hide previous releases paginator if there are too few releases to show</li>\n<li class=\"\">Add confirmation message before refreshing Slack channels</li>\n<li class=\"\">Allow resubmitting the same iOS build again</li>\n<li class=\"\">Show search results in reverse chronological order</li>\n</ul>\n</div></div></details>",
            "url": "https://docs.tramline.app/changelog/june-11-2025",
            "title": "June 11, 2025",
            "summary": "Automatic version bumps",
            "date_modified": "2025-06-11T00:00:00.000Z",
            "author": {
                "name": "Akshay Gupta",
                "url": "https://github.com/kitallis"
            },
            "tags": []
        },
        {
            "id": "https://docs.tramline.app/changelog/may-10-2025",
            "content_html": "<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/search-releases-banner-0a286e527d7d8a137868e91bf7a732c2.png\" width=\"936\" height=\"736\" class=\"img_ev3q\"></p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"search-through-releases\">Search through releases<a href=\"https://docs.tramline.app/changelog/may-10-2025#search-through-releases\" class=\"hash-link\" aria-label=\"Direct link to Search through releases\" title=\"Direct link to Search through releases\" translate=\"no\">​</a></h3>\n<p>Being able to find a needle in the stack of all your releases from the past has been a highly requested feature, and we're excited to ship the very first cut of this. You can simply press <code>/</code> anywhere on the Tramline dashboard and it will take you to the search page. This search page now also engulfs the previous (and limited) search functionality around finding builds against the versionCode and/or versionName.</p>\n<p>It's a powerful way for developers to find the release that shipped a particular feature or bug. We search through commits, authors, pull requests, labels, ticket numbers and map that onto the release they went out in. This is otherwise tricky to do manually via Git or Git interfaces without diligent and extensive annotation and tagging of changes. Since Tramline is a system of record for everything about releases, this is a big (free) unlock.</p>\n<p>For example, you remember a tidbit of a feature or bug, say the word, <mark>\"highlight\"</mark>. You've forgotten the context and the details of the feature, so you just search for the term and you'll see all the pull requests and commits that match, narrowed down to the release in which they were first introduced.</p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/search-releases-b7f909934430ac3508a3801b21232ddc.png\" width=\"3298\" height=\"1754\" class=\"img_ev3q\"></p>\n<p>This is a powerful debugging and auditing tool that doesn't require any extra state management in source control or sifting through changelogs on Slack.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"skip-the-next-scheduled-release\">Skip the next scheduled release<a href=\"https://docs.tramline.app/changelog/may-10-2025#skip-the-next-scheduled-release\" class=\"hash-link\" aria-label=\"Direct link to Skip the next scheduled release\" title=\"Direct link to Skip the next scheduled release\" translate=\"no\">​</a></h3>\n<p>\n  <img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/img/changelog/scheduled-release-skip.png\" width=\"400\" class=\"img_ev3q\">\n</p>\n<p>A quick quality-of-life enhancement for scheduled release users, allowing you to skip just the next upcoming release (not the future ones). This is actually helps cover up a lot of existing limitations with automatic scheduled releases:</p>\n<ol>\n<li class=\"\">You can skip, cram more work in the last moment and then release it later manually</li>\n<li class=\"\">You can skip, and release a major version, since scheduled releases only bump up minor</li>\n<li class=\"\">You can skip, and forego that week's release, for when there are short holidays and such</li>\n</ol>\n<p>This is different from the current \"deactivate\" functionality, that disables all the scheduled releases and the entire release train indefinitely.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"vcs-integrations-can-be-disconnected\">VCS integrations can be disconnected<a href=\"https://docs.tramline.app/changelog/may-10-2025#vcs-integrations-can-be-disconnected\" class=\"hash-link\" aria-label=\"Direct link to VCS integrations can be disconnected\" title=\"Direct link to VCS integrations can be disconnected\" translate=\"no\">​</a></h3>\n<p>\n  <img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/img/changelog/disconnect-vcs.png\" width=\"400\" class=\"img_ev3q\">\n</p>\n<p>VCS providers don't really change that often, but this feature is particularly useful when you're changing accounts within the same VCS provider, for example, you're moving from a regular GitHub account to an enterprise account, or if you're using Bitbucket, and you're switching the owner of the integration to be a different user, you can simply disconnect the current integration and reconnect it in the new way. This does not affect the state or data of any of the previous releases against the previous integration.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"workflow-triggers-gracefully-fail\">Workflow triggers gracefully fail<a href=\"https://docs.tramline.app/changelog/may-10-2025#workflow-triggers-gracefully-fail\" class=\"hash-link\" aria-label=\"Direct link to Workflow triggers gracefully fail\" title=\"Direct link to Workflow triggers gracefully fail\" translate=\"no\">​</a></h3>\n<p>Tramline so far, has always synchronized the state of the workflows that generate different types of builds. But sometimes, especially when initially setting up the release, workflow failures can be a bit of a pain to debug. Errors such as missing <code>workflow_dispatch</code> configs, invalid input parameters, etc., are now clearly surfaced on the dashboard.</p>\n<details open=\"\" class=\"details_lb9f alert alert--info details_b_Ee\" data-collapsed=\"false\"><summary>Improvements and Fixes</summary><div><div class=\"collapsibleContent_i85q\">\n<!-- -->\n<ul>\n<li class=\"\">Increase the max number of pages for fetching repositories in Bitbucket</li>\n<li class=\"\">If a PR closes during a Tramline-attempted merge, accept and move on</li>\n<li class=\"\">Allow resubmitting the same iOS build again</li>\n<li class=\"\">All input selections now have an upper limit of 100 items</li>\n</ul>\n</div></div></details>",
            "url": "https://docs.tramline.app/changelog/may-10-2025",
            "title": "May 10, 2025",
            "summary": "Search through releases",
            "date_modified": "2025-05-10T00:00:00.000Z",
            "author": {
                "name": "Akshay Gupta",
                "url": "https://github.com/kitallis"
            },
            "tags": []
        },
        {
            "id": "https://docs.tramline.app/changelog/february-18-2025",
            "content_html": "<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/reuse-integrations-243bcf7f4169f650d589bb8610c4ee08.png\" width=\"2720\" height=\"1148\" class=\"img_ev3q\"></p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"reuse-integrations-across-apps\">Reuse Integrations across apps<a href=\"https://docs.tramline.app/changelog/february-18-2025#reuse-integrations-across-apps\" class=\"hash-link\" aria-label=\"Direct link to Reuse Integrations across apps\" title=\"Direct link to Reuse Integrations across apps\" translate=\"no\">​</a></h3>\n<p>Tramline now allows reusing integrations from other apps in your organization, and also from within the same app. For teams with multiple apps, access to third-party integrations like Slack and GitHub are often not accessible to the user setting up the app on Tramline. If multiple apps use the same underlying integration, you should now no longer be blocked on your Ops/Support teams for access.</p>\n<p>\n  <img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/img/changelog/reuse-integrations-github-example.png\" width=\"400\" class=\"img_ev3q\">\n</p>\n<div class=\"theme-admonition theme-admonition-info admonition_xJq3 alert alert--info\"><div class=\"admonitionHeading_Gvgb\"><span class=\"admonitionIcon_Rf37\"><svg viewBox=\"0 0 14 16\"><path fill-rule=\"evenodd\" d=\"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z\"></path></svg></span>info</div><div class=\"admonitionContent_BuS1\"><p>If you only have one app, you can still reuse integrations across some categories. For example, you can reuse GitHub for both Version Control and CI/CD.</p></div></div>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"better-editing-experience-for-release-notes\">Better editing experience for Release Notes<a href=\"https://docs.tramline.app/changelog/february-18-2025#better-editing-experience-for-release-notes\" class=\"hash-link\" aria-label=\"Direct link to Better editing experience for Release Notes\" title=\"Direct link to Better editing experience for Release Notes\" translate=\"no\">​</a></h3>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/release-notes-enhancements-e28e5b06c654829932d4f76008bfeccc.png\" width=\"2440\" height=\"934\" class=\"img_ev3q\"></p>\n<p>The validations on iOS are much more strict and the error messages are clearer. Emojis and various other character rules are now disallowed, including the <code>&lt;</code> character in particular.</p>\n<p>Each input field: <em>Release Notes</em>, <em>Promo Text</em> and <em>What's new</em> now have character count hints at the bottom. The input does not disallow adding more, but only hints at trimming down so you can rewrite as necessary. Additionally, the input areas now also auto-resize as you type.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"custom-parameters-for-workflows\">Custom parameters for workflows<a href=\"https://docs.tramline.app/changelog/february-18-2025#custom-parameters-for-workflows\" class=\"hash-link\" aria-label=\"Direct link to Custom parameters for workflows\" title=\"Direct link to Custom parameters for workflows\" translate=\"no\">​</a></h3>\n<p>For both Internal and RC workflows, you can now add custom parameters that get passed to the workflows or jobs triggered by Tramline. These can be set in the submission settings. This is helpful when you have the same workflow doing different things based on external parameters, e.g. making a staging build and production build from the same workflow file.</p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/workflow-params-2dadc14325c73517521ade6a0714c5b3.png\" width=\"1398\" height=\"436\" class=\"img_ev3q\"></p>\n<div class=\"theme-admonition theme-admonition-info admonition_xJq3 alert alert--info\"><div class=\"admonitionHeading_Gvgb\"><span class=\"admonitionIcon_Rf37\"><svg viewBox=\"0 0 14 16\"><path fill-rule=\"evenodd\" d=\"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z\"></path></svg></span>info</div><div class=\"admonitionContent_BuS1\"><p>These do not affect the default workflow parameters that Tramline already sends for <code>versionCode</code>, <code>versionName</code>, <code>commitRef</code> etc.</p></div></div>\n<div class=\"theme-admonition theme-admonition-info admonition_xJq3 alert alert--info\"><div class=\"admonitionHeading_Gvgb\"><span class=\"admonitionIcon_Rf37\"><svg viewBox=\"0 0 14 16\"><path fill-rule=\"evenodd\" d=\"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z\"></path></svg></span>info</div><div class=\"admonitionContent_BuS1\"><p>Ensure that you gracefully accept the custom workflow parameters in your workflow job, otherwise the workflow trigger could fail.</p></div></div>\n<details open=\"\" class=\"details_lb9f alert alert--info details_b_Ee\" data-collapsed=\"false\"><summary>Improvements and Fixes</summary><div><div class=\"collapsibleContent_i85q\">\n<!-- -->\n<ul>\n<li class=\"\">Paginate the historical releases</li>\n<li class=\"\">Reduce fetch frequency of release metrics from Crashlytics</li>\n<li class=\"\">Fetch release metrics from Crashlytics only after rollout start</li>\n<li class=\"\">Avoid fetching release metrics for stale production releases</li>\n<li class=\"\">Better notification messaging for when the release ends</li>\n<li class=\"\">Allow retries for failed rollouts for Google Play Store</li>\n<li class=\"\">Avoid \"Edit has been deleted\" errors from Google Play Store</li>\n<li class=\"\">Open up view-only access to configuration screens for viewers</li>\n</ul>\n</div></div></details>",
            "url": "https://docs.tramline.app/changelog/february-18-2025",
            "title": "February 18, 2025",
            "summary": "Reuse Integrations across apps",
            "date_modified": "2025-02-18T00:00:00.000Z",
            "author": {
                "name": "Akshay Gupta",
                "url": "https://github.com/kitallis"
            },
            "tags": []
        },
        {
            "id": "https://docs.tramline.app/changelog/january-20-2025",
            "content_html": "<p>\n  <img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/img/changelog/calver-banner.png\" width=\"600\" class=\"img_ev3q\">\n</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"calver-\">CalVer 📅<a href=\"https://docs.tramline.app/changelog/january-20-2025#calver-\" class=\"hash-link\" aria-label=\"Direct link to CalVer 📅\" title=\"Direct link to CalVer 📅\" translate=\"no\">​</a></h3>\n<p>In addition to a SemVer-like versioning scheme, we now also support a calendar-based versioning scheme. Stores (both Apple and Google) don't particularly support one scheme or another, and neither are they very particular about the adherence to a <a href=\"https://semver.org/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">spec</a>. App Store, for example, suggests a roughly SemVer-like format for build versions and Google Play Store is pretty free-form.</p>\n<p>Since Tramline automatically manages versions for you, we categorize them into specific versioning schemes so that the increments are predictable.</p>\n<p>For example, In SemVer, we allow the following versions:</p>\n<p>✅ Allowed</p>\n<div class=\"language-text codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">1.2.0</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">4.2.1</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">16.9</span><br></span></code></pre></div></div>\n<p>❌ Invalid</p>\n<div class=\"language-text codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">1</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">1.2.3.4</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">1.02</span><br></span></code></pre></div></div>\n<p>With <strong>CalVer</strong>, we use the following scheme:</p>\n<div class=\"language-text codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">YYYY.0M.0D0N</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">YYYY = Full-year</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">0D = Zero-padded day</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">0M = Zero-padded month</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">0N = Zero-padded sequence number</span><br></span></code></pre></div></div>\n<p>✅ Allowed</p>\n<div class=\"language-text codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">2025.01.20</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">2022.02.01</span><br></span></code></pre></div></div>\n<p>❌ Invalid</p>\n<div class=\"language-text codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">25.1.20</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">25.1.32</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">2025.1.1</span><br></span></code></pre></div></div>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/calver-setup-545128e1ff62da87be717b42d7a6e0c1.png\" width=\"2034\" height=\"720\" class=\"img_ev3q\"></p>\n<p>The sequence numbers are used to track patch updates. For example, if you start rollout on <code>2025.01.20</code> to the store, but you add a patch update before it completes, the next version will be <code>2025.01.2001</code>.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"manual-retries-for-submissions-\">Manual retries for submissions 🔁<a href=\"https://docs.tramline.app/changelog/january-20-2025#manual-retries-for-submissions-\" class=\"hash-link\" aria-label=\"Direct link to Manual retries for submissions 🔁\" title=\"Direct link to Manual retries for submissions 🔁\" translate=\"no\">​</a></h3>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/manual-retry-48c6bc6bf372ef561f79b516e32fde4b.png\" width=\"2490\" height=\"528\" class=\"img_ev3q\"></p>\n<p>We now <strong>finally</strong> support retrying failed submission for any submission channel. This is a highly requested feature, but due to the complexity of tracking resumability of different submission states, we delayed it until we got it right. For most known issues or one-off errors, we already internally retry. But now it should be possible to manually retry issues that escape our internal error handling or automatic retries.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"build-suffixes-for-android-builds-\">Build suffixes for Android builds 🪜<a href=\"https://docs.tramline.app/changelog/january-20-2025#build-suffixes-for-android-builds-\" class=\"hash-link\" aria-label=\"Direct link to Build suffixes for Android builds 🪜\" title=\"Direct link to Build suffixes for Android builds 🪜\" translate=\"no\">​</a></h3>\n<p>\n  <img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/img/changelog/build-suffix.png\" width=\"500\" class=\"img_ev3q\">\n</p>\n<p>When configuring submissions, you can now add a suffix to the version name that is assigned to the build. This is useful for segregating build versions (and release names) clearly in different submissions channels like Firebase / Play Store.</p>\n<p>For example, if you setup a suffix <code>staging</code>, the version name will become <code>1.0.0-staging</code>.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"archiving-team-members-and-invites-️\">Archiving team members and invites 🗑️<a href=\"https://docs.tramline.app/changelog/january-20-2025#archiving-team-members-and-invites-%EF%B8%8F\" class=\"hash-link\" aria-label=\"Direct link to Archiving team members and invites 🗑️\" title=\"Direct link to Archiving team members and invites 🗑️\" translate=\"no\">​</a></h3>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/delete-members-a290959e7a4720c4485c34777dda90f4.png\" width=\"1690\" height=\"336\" class=\"img_ev3q\"></p>\n<p>Previously, owners could only edit roles of team members, now they can also remove them. When users are removed, they are soft-deleted or archived and not actually deleted from the system. This is why we avoid the terminology of <em>delete</em>. Pending invites, however, are permanently deleted.</p>\n<p>For SSO users, removing a user does not revoke their SSO access from the IdP (identity provider), which means they can always log back in as a viewer. On the flip side, if they are removed from the IdP, they aren't automatically kicked out from Tramline, however, they naturally won't be able to login (and can be cleaned up from Tramline if necessary).</p>\n<details open=\"\" class=\"details_lb9f alert alert--info details_b_Ee\" data-collapsed=\"false\"><summary>Improvements and Fixes</summary><div><div class=\"collapsibleContent_i85q\">\n<!-- -->\n<ul>\n<li class=\"\">Fix bug that disallowed role change for SSO users</li>\n<li class=\"\">Allow automatic scheduled releases to start upcoming releases</li>\n<li class=\"\">Show a snapshot of recent events in pre-prod releases</li>\n<li class=\"\">Finalizing a release should only check for PRs created by Tramline</li>\n</ul>\n</div></div></details>",
            "url": "https://docs.tramline.app/changelog/january-20-2025",
            "title": "January 20, 2025",
            "summary": "CalVer 📅",
            "date_modified": "2025-01-20T00:00:00.000Z",
            "author": {
                "name": "Akshay Gupta",
                "url": "https://github.com/kitallis"
            },
            "tags": []
        },
        {
            "id": "https://docs.tramline.app/changelog/december-30-2024",
            "content_html": "<p>\n  <img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/img/changelog/firebase-crashlytics.png\" width=\"600\" class=\"img_ev3q\">\n</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"release-health-monitoring--firebase-crashlytics\">Release Health Monitoring – Firebase Crashlytics<a href=\"https://docs.tramline.app/changelog/december-30-2024#release-health-monitoring--firebase-crashlytics\" class=\"hash-link\" aria-label=\"Direct link to Release Health Monitoring – Firebase Crashlytics\" title=\"Direct link to Release Health Monitoring – Firebase Crashlytics\" translate=\"no\">​</a></h3>\n<p>Tramline <a class=\"\" href=\"https://docs.tramline.app/using-tramline/quality-and-monitoring/release-health-monitoring\">continously monitors</a> the release health of an app by listening to signals and metrics from dedicated monitoring tools and condensing them down through a release lens. Along with Bugsnag, we now also support Firebase Crashlytics.</p>\n<p>This integration works by internally <a class=\"\" href=\"https://docs.tramline.app/integrations/monitoring/crashlytics\">integrating</a> with two tools: Google Analytics and Crashlytics itself.</p>\n<p>Crashlytics by itself isn't feasbile for calculating aggregate stats like crash-free rate or adoption rate, because it only contains info on unhealthy sessions; without info on healthy session stats, there is no denominator for crash-free rates or adoption. This denominator is pulled from Google Analytics.</p>\n<p>This feature is in beta as we're still collecting feedback and data from our users and will be publically available early next year.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"copy-approvals-from-previous-release\">Copy approvals from previous release<a href=\"https://docs.tramline.app/changelog/december-30-2024#copy-approvals-from-previous-release\" class=\"hash-link\" aria-label=\"Direct link to Copy approvals from previous release\" title=\"Direct link to Copy approvals from previous release\" translate=\"no\">​</a></h3>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/copy-approvals-489503474b37f0ad6ff8f3f0408495e2.png\" width=\"1846\" height=\"410\" class=\"img_ev3q\"></p>\n<p>We have extended our <a class=\"\" href=\"https://docs.tramline.app/changelog/november-12-2024#approvals\">stakeholder approvals</a> feature to now automatically copy over approval items from the previous release to the next one. This cuts down work for teams who want a similar set of approval items in each release assigned to a bunch of different people.</p>\n<p>Even if you don't have the automatic setting on, you can still copy them over from a single click after the release starts.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"combine-commits-in-a-single-push-in-patch-prs\">Combine commits in a single push in patch PRs<a href=\"https://docs.tramline.app/changelog/december-30-2024#combine-commits-in-a-single-push-in-patch-prs\" class=\"hash-link\" aria-label=\"Direct link to Combine commits in a single push in patch PRs\" title=\"Direct link to Combine commits in a single push in patch PRs\" translate=\"no\">​</a></h3>\n<p>\n  <img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/img/changelog/pending-backmerges.png\" width=\"600\" class=\"img_ev3q\">\n</p>\n<p>When creating <a class=\"\" href=\"https://docs.tramline.app/changelog/september-8-2023#continuously-backmerge\">patch PRs</a> (for continuous backmerges), Tramline now combines all the commits from a single git push (to the release branch) in a single pull request. This reduces the number of changes that need to be reviewed and merged, and cuts down on general PR noise.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"auto-retry-merge-failures-for-pull-requests\">Auto-retry merge failures for pull requests<a href=\"https://docs.tramline.app/changelog/december-30-2024#auto-retry-merge-failures-for-pull-requests\" class=\"hash-link\" aria-label=\"Direct link to Auto-retry merge failures for pull requests\" title=\"Direct link to Auto-retry merge failures for pull requests\" translate=\"no\">​</a></h3>\n<p>\n  <img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/img/changelog/unable-to-merge.png\" width=\"400\" class=\"img_ev3q\">\n</p>\n<p>For all kinds of pull requests in Tramline, namely:</p>\n<ul>\n<li class=\"\">Pre-release pull requests (before release starts)</li>\n<li class=\"\">Continuous backmerge pull requests or \"patch PRs\" (release ongoing PRs)</li>\n<li class=\"\">Post-release pull requests (after release is completed)</li>\n</ul>\n<p>Whenever Tramline creates these, we always try to merge them right after. Apart from merge-conflict related reasons, we are often unable to merge because of various pre-merge checks. For some VCS integrations (like GitHub), we handle this gracefully by enabling post-check auto-merges. But in cases where that's not possible, Tramline now continously tries to merge until checks pass. So if there's a human or bot dependency that's blocking the merge from immediately happening, the merge from our side is still largely hands-free.</p>\n<p>For conflict related errors, Tramline clearly marks those PRs on the dashboard as such so that they can be manually resolved.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"allow-fixed-build-version-for-releases\">Allow fixed build version for releases<a href=\"https://docs.tramline.app/changelog/december-30-2024#allow-fixed-build-version-for-releases\" class=\"hash-link\" aria-label=\"Direct link to Allow fixed build version for releases\" title=\"Direct link to Allow fixed build version for releases\" translate=\"no\">​</a></h3>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/fixed-version-6789482c45dd4821db27b357aeaf7670.png\" width=\"1654\" height=\"364\" class=\"img_ev3q\"></p>\n<p>This is useful for non-production / nightly releases where you don't care about the actual version name (like 1.2.3), you just need to generate and distribute new builds. Turning this on will fix the version name across all releases for a train. Note that this does not affect the version codes, they get bumped normally as expected.</p>\n<details open=\"\" class=\"details_lb9f alert alert--info details_b_Ee\" data-collapsed=\"false\"><summary>Improvements and Fixes</summary><div><div class=\"collapsibleContent_i85q\">\n<!-- -->\n<ul>\n<li class=\"\">Add rollout percentage to store version APIs</li>\n<li class=\"\">Remove all previous code from before a major Tramline rehaul</li>\n<li class=\"\">Run specs on docker</li>\n<li class=\"\">Improve page titles</li>\n<li class=\"\">Allow upcoming releases to start when rollouts are paused in the current</li>\n<li class=\"\">Handle CRLF/LF in release notes consistently</li>\n<li class=\"\">Paginate Bitbucket APIs when listing repos</li>\n<li class=\"\">Handle lack of millisecond-precision for multi-commit git pushes</li>\n</ul>\n</div></div></details>",
            "url": "https://docs.tramline.app/changelog/december-30-2024",
            "title": "December 30, 2024",
            "summary": "Release Health Monitoring – Firebase Crashlytics",
            "date_modified": "2024-12-30T00:00:00.000Z",
            "author": {
                "name": "Guru Pratap",
                "url": "https://github.com/gurupratap"
            },
            "tags": []
        },
        {
            "id": "https://docs.tramline.app/changelog/november-27-2024",
            "content_html": "<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/cascading-rollouts-643c5a137d18110ab659a5209f0df460.png\" width=\"1568\" height=\"836\" class=\"img_ev3q\"></p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"cascading-rollouts\">Cascading rollouts<a href=\"https://docs.tramline.app/changelog/november-27-2024#cascading-rollouts\" class=\"hash-link\" aria-label=\"Direct link to Cascading rollouts\" title=\"Direct link to Cascading rollouts\" translate=\"no\">​</a></h3>\n<p>With Google Play Console, when you update your rollout to a 100%, it is not possible to halt it, even if in reality the actual rollout hasn't farmed out to all of the 100% of users yet.</p>\n<p>For example, if you have 100 users, and your rollout sequence is 10%, 50% and 100%, and once you actually move the rollout to 100%, it is possible that number of users/sessions that actually receive the update is still much less than 100. Since a halt isn't possible on the Play Console at 100%, teams usually have a workaround to release to 99.9%. This allows them to halt the rollout until as late as possible.</p>\n<p>Tramline now natively supports this process; you can set your rollouts to be <strong>cascading</strong>, which will only rollout to 99.9% (or your final rollout value of choice) and <em>prevent</em> you from starting the rollout of the next release until the previous one is moved from 99.9% to a 100%.</p>\n<p>This entire flow is managed and prompted through appropriate callouts and actions during the release process.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"continuous-backmerges-without-cherry-picks\">Continuous backmerges without cherry-picks<a href=\"https://docs.tramline.app/changelog/november-27-2024#continuous-backmerges-without-cherry-picks\" class=\"hash-link\" aria-label=\"Direct link to Continuous backmerges without cherry-picks\" title=\"Direct link to Continuous backmerges without cherry-picks\" translate=\"no\">​</a></h3>\n<p>every commit. However, this method is unfortunately integration-specific, as not all VCS providers support cherry-picking through APIs.</p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/cont-backmerge-bitbucket-6f694cde9c82eadd847979697feceb23.png\" width=\"1422\" height=\"504\" class=\"img_ev3q\"></p>\n<p>Specifically, Bitbucket doesn't support cherry-picks or even mimicking a cherry-pick, so we do the following:</p>\n<ul>\n<li class=\"\">Create new patch branches, like <code>patch-main-afddfcd</code> from the release branch for every new commit</li>\n<li class=\"\">Try and merge the patch branches to the <code>main</code> (working branch) via a pull request</li>\n</ul>\n<p>In this mode, subsequent patch branches could have more than one commit, if the previous ones are unmerged. So we recommend merging everything as soon as possible and in the correct order to avoid confusion.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"re-fetch-workflow-status\">Re-fetch workflow status<a href=\"https://docs.tramline.app/changelog/november-27-2024#re-fetch-workflow-status\" class=\"hash-link\" aria-label=\"Direct link to Re-fetch workflow status\" title=\"Direct link to Re-fetch workflow status\" translate=\"no\">​</a></h3>\n<p>\n  <img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/img/changelog/refetch-build-status.png\" width=\"600\" class=\"img_ev3q\">\n</p>\n<p>Until now, Tramline allowed you to re-trigger workflows if there was a failure in the runs. Now, additionally, you can simply re-fetch the status of the workflow run instead of retriggering. This is especially helpful when you don't want to retrigger the entire workflow but can just re-run the specific failed jobs and have them sync on Tramline.</p>\n<details open=\"\" class=\"details_lb9f alert alert--info details_b_Ee\" data-collapsed=\"false\"><summary>Improvements and Fixes</summary><div><div class=\"collapsibleContent_i85q\">\n<!-- -->\n<ul>\n<li class=\"\">Stricter validation for release notes for each platform</li>\n<li class=\"\">Submission configuration is now optional for internal testing</li>\n<li class=\"\">Do not auto-stop a scheduled release on post-release failure</li>\n<li class=\"\">Do not allow -ve values in reldex computation</li>\n<li class=\"\">Allow a different set of supported languages for Android and iOS</li>\n<li class=\"\">Truncate commit messages in notifications to adhere to Slack limits</li>\n<li class=\"\">Notifications around internal submissions finishing</li>\n<li class=\"\">Generally nicer cues for showing progress in live release</li>\n<li class=\"\">Optimize load times for the Release Activity page</li>\n</ul>\n</div></div></details>",
            "url": "https://docs.tramline.app/changelog/november-27-2024",
            "title": "November 27, 2024",
            "summary": "Cascading rollouts",
            "date_modified": "2024-11-27T00:00:00.000Z",
            "author": {
                "name": "Akshay Gupta",
                "url": "https://github.com/kitallis"
            },
            "tags": []
        },
        {
            "id": "https://docs.tramline.app/changelog/november-12-2024",
            "content_html": "<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/approvals-blocked-c20ca7a57f7d98bf6b0515255c755089.png\" width=\"1106\" height=\"516\" class=\"img_ev3q\"></p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"approvals\">Approvals<a href=\"https://docs.tramline.app/changelog/november-12-2024#approvals\" class=\"hash-link\" aria-label=\"Direct link to Approvals\" title=\"Direct link to Approvals\" translate=\"no\">​</a></h3>\n<p>Tramline now has an approvals system that allows you to add high-level approvals from various stakeholders for the release.</p>\n<p>During a release, the release captain can add tasks to be approved by any set of members in the team. When a task is assigned to a team member, they receive an email notification.</p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/approvals-live-release-2b9440131cac59978af7bda7b8908cff.png\" width=\"2190\" height=\"1004\" class=\"img_ev3q\"></p>\n<p>The assignees of the task can mark the task as approved, blocked, or in-progress. The release cannot be sent to the production track on the stores until all the approvals are complete.</p>\n<p>The release captain can choose to override the approvals for a release. This is useful for rare scenarios where there is an urgency in getting the release to production and the team members are unavailable for the required approvals.</p>\n<p>If the override is used, it will be reflected on the release activity page for auditing purposes.</p>\n<p>The configuration to enable approvals for the release can be found in the <strong>Advanced Settings</strong> of the release.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"edit-roles-of-team-members\">Edit roles of team members<a href=\"https://docs.tramline.app/changelog/november-12-2024#edit-roles-of-team-members\" class=\"hash-link\" aria-label=\"Direct link to Edit roles of team members\" title=\"Direct link to Edit roles of team members\" translate=\"no\">​</a></h3>\n<p>You can now edit the roles of your team members in the team section of the <strong>Organization Settings</strong> page.</p>\n<img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/img/changelog/edit-roles.png\" width=\"300\" class=\"img_ev3q\">\n<p>The owners and developers in the team can edit the roles of the developers and viewers, respectively.</p>\n<p>This is especially useful for teams with SSO enabled. With SSO, any member of your organization can log in to Tramline as a viewer. You can choose to change the role of the user to the most appropriate one once they have joined your team in Tramline.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"re-use-the-same-integration-for-multiple-categories\">Re-use the same integration for multiple categories<a href=\"https://docs.tramline.app/changelog/november-12-2024#re-use-the-same-integration-for-multiple-categories\" class=\"hash-link\" aria-label=\"Direct link to Re-use the same integration for multiple categories\" title=\"Direct link to Re-use the same integration for multiple categories\" translate=\"no\">​</a></h3>\n<p>You can now re-use the same integration for multiple categories. This reduces the number of connections required for onboarding a new app.</p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/integration-reuse-dd1a433cb8b485290f054aed0be950dc.png\" width=\"1014\" height=\"358\" class=\"img_ev3q\"></p>\n<details open=\"\" class=\"details_lb9f alert alert--info details_b_Ee\" data-collapsed=\"false\"><summary>Improvements and Fixes</summary><div><div class=\"collapsibleContent_i85q\">\n<!-- -->\n<ul>\n<li class=\"\">Enhance FAD build upload check to search by build number and version name</li>\n<li class=\"\">Auto-detect file extension for build archive files when not provided</li>\n<li class=\"\">Send branch context to Bitbucket when triggering pipeline for commit</li>\n<li class=\"\">Ensure submissions get picked up in the correct order</li>\n<li class=\"\">Set the app time zone correctly on the live release pages</li>\n<li class=\"\">Fix default production submission config for Android</li>\n<li class=\"\">Fix resume action for app store rollout</li>\n<li class=\"\">Handle a phased rollout on the App Store when it's already complete</li>\n<li class=\"\">Pick active locales only from the production track for Play Store</li>\n<li class=\"\">Fix \"changes since previous\" to handle unapplied commits</li>\n<li class=\"\">Add missing locale string for rollout getting updated</li>\n<li class=\"\">Add a warning to show until which release step the notes can be edited</li>\n<li class=\"\">Fix health metric jobs to stop fetching after the monitoring period</li>\n</ul>\n</div></div></details>",
            "url": "https://docs.tramline.app/changelog/november-12-2024",
            "title": "November 12, 2024",
            "summary": "Approvals",
            "date_modified": "2024-11-12T00:00:00.000Z",
            "author": {
                "name": "Akshay Gupta",
                "url": "https://github.com/kitallis"
            },
            "tags": []
        },
        {
            "id": "https://docs.tramline.app/changelog/october-13-2024",
            "content_html": "<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/live-release-800dc006b1a310f3314d4e42c24f75a1.png\" width=\"1950\" height=\"1852\" class=\"img_ev3q\"></p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"the-work-pane-live-release-page\">The work pane (live release page)<a href=\"https://docs.tramline.app/changelog/october-13-2024#the-work-pane-live-release-page\" class=\"hash-link\" aria-label=\"Direct link to The work pane (live release page)\" title=\"Direct link to The work pane (live release page)\" translate=\"no\">​</a></h3>\n<p>Tramline is conceptually a relatively rare paradigm of DevTools. Other \"release management\" DevTools on the server-side like Heroku can operate more or less solely through a CLI. For most teams, Tramline is a high-touch tool where a lot of people end up collaborating. It is as much a GitHub as it is a Heroku.</p>\n<p>This is why a more-than-default thoughtful design is necessary for Tramline. It is important so that people can get used to the \"right flow\" for releasing apps.</p>\n<p>From this lens, we've made two broad changes.</p>\n<ol>\n<li class=\"\">Porting our <a class=\"\" href=\"https://docs.tramline.app/changelog/march-25-2024\">design</a> over to the \"work pane\"</li>\n<li class=\"\">Simplifying the building blocks for configuring a release</li>\n</ol>\n<h4 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"layout--design\">Layout &amp; design<a href=\"https://docs.tramline.app/changelog/october-13-2024#layout--design\" class=\"hash-link\" aria-label=\"Direct link to Layout &amp; design\" title=\"Direct link to Layout &amp; design\" translate=\"no\">​</a></h4>\n<p>The work pane is auto-structured into four main sections:</p>\n<p>\n<ins>Overview:</ins> Issue tracking, changeset tracking and the homepage for the Release Captain.\n</p>\n<p>\n<ins>Stability:</ins> Internal builds, Release Candidates, testing.\n</p>\n<p>\n<ins>Metadata:</ins> Dedicated space for updating notes, store metadata and screenshots.\n</p>\n<p>\n<ins>Store Release:</ins> Managing reviews and rolling out to production.\n</p>\n<p>Previously, the work pane was one giant page, and even though there's some value in everything in one single page; it is a nightmare of information architecture and page load times. More specifically, categorizing them allows us to clearly differentiate historical state, present state and future state across different events.</p>\n<h4 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"improved-ux-around-app-submission\">Improved UX around app submission<a href=\"https://docs.tramline.app/changelog/october-13-2024#improved-ux-around-app-submission\" class=\"hash-link\" aria-label=\"Direct link to Improved UX around app submission\" title=\"Direct link to Improved UX around app submission\" translate=\"no\">​</a></h4>\n<p>Because the design allows for more breathing room, we can focus on individual aspects of the release a bit better.</p>\n<p>For example, there's a lot more control around app submission. You can cancel a running review in progress and you can also replace the build for an existing review with a new one or a previous valid one.</p>\n<p>\n  <img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/img/changelog/change-build.png\" width=\"500\" class=\"img_ev3q\">\n</p>\n<p>Similarly when rolling out, the entire page doesn't get filled with a lot of rollout data, there's a dedicated place for it:</p>\n<p>\n  <img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/img/changelog/new-rollout.png\" width=\"500\" class=\"img_ev3q\">\n</p>\n<h4 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"not-just-tabs\">Not just tabs<a href=\"https://docs.tramline.app/changelog/october-13-2024#not-just-tabs\" class=\"hash-link\" aria-label=\"Direct link to Not just tabs\" title=\"Direct link to Not just tabs\" translate=\"no\">​</a></h4>\n<p>\n  <img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/img/changelog/live-release-tabs.png\" width=\"200\" class=\"img_ev3q\">\n</p>\n<p>The tabs are alive — they always track the current state of that section — whether it's in progress, completed or pending. They also automatically get switched over to the most important tab in the current release and they disappear if they aren't necessary to the current release.</p>\n<h4 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"configuring-the-release\">Configuring the release<a href=\"https://docs.tramline.app/changelog/october-13-2024#configuring-the-release\" class=\"hash-link\" aria-label=\"Direct link to Configuring the release\" title=\"Direct link to Configuring the release\" translate=\"no\">​</a></h4>\n<p>We have now thrown away all the bloated abstractionware of <em>Steps</em> and <em>Deployments</em> and instead we just deal with <strong>Submissions</strong>. The interface to configure them is a single pane to setup everything about your release and will continue to grow down this path.</p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/live-release-configure-dbbf57fb07313c414bcd2fad0fe99a98.png\" width=\"2690\" height=\"1800\" class=\"img_ev3q\"></p>\n<p>Trying to be clever with our release abstractions and modeling them after CI/CD pipelines was a mistake. We now model things around actual user patterns.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"support-for-multi-locale-release-metadata\">Support for multi-locale release metadata<a href=\"https://docs.tramline.app/changelog/october-13-2024#support-for-multi-locale-release-metadata\" class=\"hash-link\" aria-label=\"Direct link to Support for multi-locale release metadata\" title=\"Direct link to Support for multi-locale release metadata\" translate=\"no\">​</a></h3>\n<p>We now also support updating multiple languages for the release notes. When you start your release we pick up your last updated release notes, which you can edit before release.</p>\n<p>On top of this, we also support updating multiple languages for both iOS and Android (for cross-platform apps) from the same place!</p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/multi-locale-release-notes-2fc97e8e34ad8a7705da4958d2ba9d05.png\" width=\"2528\" height=\"1380\" class=\"img_ev3q\"></p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"remove-slack-as-a-submission-integration\">Remove Slack as a submission integration<a href=\"https://docs.tramline.app/changelog/october-13-2024#remove-slack-as-a-submission-integration\" class=\"hash-link\" aria-label=\"Direct link to Remove Slack as a submission integration\" title=\"Direct link to Remove Slack as a submission integration\" translate=\"no\">​</a></h3>\n<p>Slack was previously available as a submission integration so that you could send builds to a channel. This is <a class=\"\" href=\"https://docs.tramline.app/changelog/april-22-2024#attach-builds-with-slack-notifications\">still supported</a>, but as a part of the notification configuration itself.</p>\n<p>We've been <a href=\"https://github.com/tramlinehq/tramline/issues/448\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">wanting to make this change</a> for a bit because it makes the purpose of each category very clear. Integrations that distribute should be integrations where the primary purpose is to distribute, it's not enough that they can optionally help distribute. Slack is foremost a team chat tool, and file server later.</p>\n<p>This is only applicable to new apps, existing apps with Slack as a submission integration will be gracefully ported over.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"app-variants-with-their-own-integrations\">App Variants with their own integrations<a href=\"https://docs.tramline.app/changelog/october-13-2024#app-variants-with-their-own-integrations\" class=\"hash-link\" aria-label=\"Direct link to App Variants with their own integrations\" title=\"Direct link to App Variants with their own integrations\" translate=\"no\">​</a></h3>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/app-variants-2-48236a78737188b44ed77c57e5fb4634.png\" width=\"902\" height=\"220\" class=\"img_ev3q\"></p>\n<p>Late last year, we added support for adding multiple bundle identifiers within a single primary app <a class=\"\" href=\"https://docs.tramline.app/changelog/december-21-2023#app-variants\">under App Variants</a>. This helps support flavors of the same app being distributed to different submission channels. We've gone a step further, and allow configuring a different account/integration altogether rather than just using the existing primary app integrations.</p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/app-variants-account-firebase-786c8cf63abf2a3be70b8f7f7f93de11.png\" width=\"1504\" height=\"506\" class=\"img_ev3q\"></p>\n<div class=\"theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary\"><div class=\"admonitionHeading_Gvgb\"><span class=\"admonitionIcon_Rf37\"><svg viewBox=\"0 0 14 16\"><path fill-rule=\"evenodd\" d=\"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z\"></path></svg></span>note</div><div class=\"admonitionContent_BuS1\"><p>App Variants still only support Firebase App Distribution at the moment. We will be adding more integrations in the future.</p></div></div>\n<details open=\"\" class=\"details_lb9f alert alert--info details_b_Ee\" data-collapsed=\"false\"><summary>Improvements and Fixes</summary><div><div class=\"collapsibleContent_i85q\">\n<!-- -->\n<ul>\n<li class=\"\">Ensure all API-call based user actions are async</li>\n<li class=\"\">Fix UI issue around showing 100% rollout correctly for non-staged rollouts</li>\n<li class=\"\">Ensure there are valid build workflows available before allowing train creation</li>\n<li class=\"\">Fix the password reveal toggle in the signup form</li>\n<li class=\"\">Show a generic flash message instead of a full 500 page</li>\n<li class=\"\">GitHub release notes are now well formatted and respect automatic notes</li>\n<li class=\"\">Dockerize the entire dev setup</li>\n</ul>\n</div></div></details>",
            "url": "https://docs.tramline.app/changelog/october-13-2024",
            "title": "October 13, 2024",
            "summary": "The work pane (live release page)",
            "date_modified": "2024-10-13T00:00:00.000Z",
            "author": {
                "name": "Akshay Gupta",
                "url": "https://github.com/kitallis"
            },
            "tags": []
        },
        {
            "id": "https://docs.tramline.app/changelog/september-17-2024",
            "content_html": "<img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/img/changelog/bitbucket.png\" width=\"500\" class=\"img_ev3q\">\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"bitbucket-support\">Bitbucket support<a href=\"https://docs.tramline.app/changelog/september-17-2024#bitbucket-support\" class=\"hash-link\" aria-label=\"Direct link to Bitbucket support\" title=\"Direct link to Bitbucket support\" translate=\"no\">​</a></h3>\n<p>We now support Bitbucket both as a VCS and a build server integration. As with other integration categories, Bitbucket falls neatly in our abstractions but with two primary exceptions.</p>\n<p>First, Bitbucket doesn't allow us to pull builds from pipelines directly. You can upload them to the Downloads section for your repo via the <a href=\"https://bitbucket.org/atlassian/bitbucket-upload-file\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">upload-file</a> pipe. We will soon release a custom pipe that wraps this and makes setting everything up even simpler.</p>\n<p>\n  <img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/img/changelog/bitbucket-downloads.png\" width=\"400\" class=\"img_ev3q\">\n</p>\n<p>Second, Bitbucket doesn't provide us a way to cherry-pick commits (either manually or automatically) from the API, so <a class=\"\" href=\"https://docs.tramline.app/changelog/september-8-2023#continuously-backmerge\">continous backmerges</a> are currently turned off for this integration. We'll push an update as soon as we have a way around this.</p>\n<p>That's it! The rest works precisely as Tramline is meant to work.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"sso-improvements\">SSO improvements<a href=\"https://docs.tramline.app/changelog/september-17-2024#sso-improvements\" class=\"hash-link\" aria-label=\"Direct link to SSO improvements\" title=\"Direct link to SSO improvements\" translate=\"no\">​</a></h3>\n<ol>\n<li class=\"\">\n<p>If you're an SSO-enabled org, you now don't need to invite viewer users, all SSO users can self-join automatically as viewers. For write-enabled (developer) users, you would still need to go through the invite flow as usual.</p>\n</li>\n<li class=\"\">\n<p>Until now, you could have both email-based authN and SAML-based authN working together. Now, if you're an SSO-enabled org, no other auth mechanism is allowed.</p>\n</li>\n</ol>\n<details open=\"\" class=\"details_lb9f alert alert--info details_b_Ee\" data-collapsed=\"false\"><summary>Improvements and Fixes</summary><div><div class=\"collapsibleContent_i85q\">\n<!-- -->\n<ul>\n<li class=\"\">Improve integration/config onboarding wizard</li>\n<li class=\"\">Add a banner to prompt users to complete their profile</li>\n<li class=\"\">Handle new Play Store errors – foreground services and account issues</li>\n<li class=\"\">Handle unauthorized errors from App Store properly</li>\n<li class=\"\">Allow internal testing releases when app is in draft mode</li>\n<li class=\"\">Allow hotfix for a cross-platform app when one platform has started rollout</li>\n</ul>\n</div></div></details>",
            "url": "https://docs.tramline.app/changelog/september-17-2024",
            "title": "September 17, 2024",
            "summary": "Bitbucket support",
            "date_modified": "2024-09-17T00:00:00.000Z",
            "author": {
                "name": "Akshay Gupta",
                "url": "https://github.com/kitallis"
            },
            "tags": []
        },
        {
            "id": "https://docs.tramline.app/changelog/august-3-2024",
            "content_html": "<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/sso-9e5eaf880045cc24585ac3f5128c354b.png\" width=\"1036\" height=\"532\" class=\"img_ev3q\"></p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"single-sign-on-support-\">Single Sign-On Support 🔑<a href=\"https://docs.tramline.app/changelog/august-3-2024#single-sign-on-support-\" class=\"hash-link\" aria-label=\"Direct link to Single Sign-On Support 🔑\" title=\"Direct link to Single Sign-On Support 🔑\" translate=\"no\">​</a></h3>\n<p>SSO (via SAML) is now available as an authentication method in Tramline. Once enabled, all users in the organization will be required to sign in using the SSO provider.</p>\n<p>To simplify the setup and management of SSO, we use a third-party auth service provider. However, we continue to maintain our existing email/password login natively, i.e, without relying on any third-party dependencies. This allows open-source users to self-host Tramline without the need for setting up additional accounts outside.</p>\n<p>With this, the user access management to Tramline can be centrally managed by companies and their IT teams. This is a big step for Tramline towards supporting enterprise organizations!</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"new-reldex-components-\">New Reldex components 📊<a href=\"https://docs.tramline.app/changelog/august-3-2024#new-reldex-components-\" class=\"hash-link\" aria-label=\"Direct link to New Reldex components 📊\" title=\"Direct link to New Reldex components 📊\" translate=\"no\">​</a></h3>\n<p>We <a class=\"\" href=\"https://docs.tramline.app/changelog#introducing-reldex-release-process-index-\">rolled out Reldex</a> to all users in our last major release. We have since added a few more optional components to the Reldex score:</p>\n<h4 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"days-since-the-last-release\">Days since the last release<a href=\"https://docs.tramline.app/changelog/august-3-2024#days-since-the-last-release\" class=\"hash-link\" aria-label=\"Direct link to Days since the last release\" title=\"Direct link to Days since the last release\" translate=\"no\">​</a></h4>\n<p>The number of days since the last release to production was made. This is a good indicator of how much you are sticking to your regular release cadence. This is an indirect measure of drops in your deployment frequency.</p>\n<h4 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"number-of-rollout-changes--patch-fixes\">Number of rollout changes / patch fixes<a href=\"https://docs.tramline.app/changelog/august-3-2024#number-of-rollout-changes--patch-fixes\" class=\"hash-link\" aria-label=\"Direct link to Number of rollout changes / patch fixes\" title=\"Direct link to Number of rollout changes / patch fixes\" translate=\"no\">​</a></h4>\n<p>Tramline classifies changes in the following ways:</p>\n<ul>\n<li class=\"\"><strong>Stability changes</strong>: changes on the release branch during the testing phase</li>\n<li class=\"\"><strong>Patch fixes</strong>: changes after the rollout to production has started</li>\n<li class=\"\"><strong>Hotfixes</strong>: special releases made after the rollout to production has completed</li>\n</ul>\n<p>This component now takes the \"Patch fixes\" into account separately, along with Stability changes and Hotfixes.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"patch-version-bumps-across-releases-\">Patch-version bumps across releases 🤛<a href=\"https://docs.tramline.app/changelog/august-3-2024#patch-version-bumps-across-releases-\" class=\"hash-link\" aria-label=\"Direct link to Patch-version bumps across releases 🤛\" title=\"Direct link to Patch-version bumps across releases 🤛\" translate=\"no\">​</a></h3>\n<p>You can now configure your release train to only bump the patch version across new releases. This is especially helpful for daily/weekly scheduled releases, where you don't want too many minor version bumps constantly as each subsequent change is likely trivial.</p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/assets/images/patch-only-1c0146bd51735e8db9cf7fca3d79c8bd.png\" width=\"972\" height=\"266\" class=\"img_ev3q\"></p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"upcoming-release-without-internal-builds-\">Upcoming release without internal builds 🚂<a href=\"https://docs.tramline.app/changelog/august-3-2024#upcoming-release-without-internal-builds-\" class=\"hash-link\" aria-label=\"Direct link to Upcoming release without internal builds 🚂\" title=\"Direct link to Upcoming release without internal builds 🚂\" translate=\"no\">​</a></h3>\n<p>The <a class=\"\" href=\"https://docs.tramline.app/changelog/september-8-2023#prepare-an-upcoming-release\">upcoming release feature</a> is now available for release trains that directly ship to beta/production (without any internal builds). This allows you to prepare the next release while the current one is still in progress. This is especially useful for teams that have a long beta period and want to get a head start on the next release.</p>\n<details open=\"\" class=\"details_lb9f alert alert--info details_b_Ee\" data-collapsed=\"false\"><summary>Improvements and Fixes</summary><div><div class=\"collapsibleContent_i85q\">\n<!-- -->\n<ul>\n<li class=\"\">Add Indian+Indonesian languages to list of locales for release notes</li>\n<li class=\"\">Gracefully handle lack of apps in iOS or Android projects on Firebase</li>\n<li class=\"\">Handle double-quotes inside build notes when distributing</li>\n</ul>\n</div></div></details>",
            "url": "https://docs.tramline.app/changelog/august-3-2024",
            "title": "August 3, 2024",
            "summary": "Single Sign-On Support 🔑",
            "date_modified": "2024-08-03T00:00:00.000Z",
            "author": {
                "name": "Akshay Gupta",
                "url": "https://github.com/kitallis"
            },
            "tags": []
        },
        {
            "id": "https://docs.tramline.app/changelog/may-12-2024",
            "content_html": "<img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/img/changelog/reldex-breakdown.png\" width=\"500\" class=\"img_ev3q\">\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"introducing-reldex-release-process-index-\">Introducing Reldex (release process index) 📊<a href=\"https://docs.tramline.app/changelog/may-12-2024#introducing-reldex-release-process-index-\" class=\"hash-link\" aria-label=\"Direct link to Introducing Reldex (release process index) 📊\" title=\"Direct link to Introducing Reldex (release process index) 📊\" translate=\"no\">​</a></h3>\n<p>We are excited to introduce Reldex, a new metric and scoring mechanism that helps you understand the efficacy of your release process.</p>\n<p>It combines various signals like release duration, hotfixes, time taken to rollout, and fixes during stabilization to give you a single score (between 0 and 1) that represents an overall quality of the delivery process.</p>\n<p>This is different from the post-release <a class=\"\" href=\"https://docs.tramline.app/changelog/april-22-2024#release-health-rules-and-alerts\">monitoring of the health</a> of a release based on signals from APM and monitoring tools. Reldex measures everything before or during delivery, rather than the stuff after the release has been rolled out.</p>\n<p>\n  <img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/img/changelog/reldex-trend.png\" width=\"600\" class=\"img_ev3q\">\n</p>\n<p>Reldex is enabled by default and available to all users, both free and paid. You should already be seeing this score show up on your dashboard. It comes pre-configured with some sensible defaults, but you can fine-tune it based on how you want to weigh and prioritize the importance of each of the signals. Read more about Reldex → <a href=\"https://docs.tramline.app/reldex\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">here</a>.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"allow-continuous-scheduling-despite-previous-failures-\">Allow continuous scheduling despite previous failures 🚲<a href=\"https://docs.tramline.app/changelog/may-12-2024#allow-continuous-scheduling-despite-previous-failures-\" class=\"hash-link\" aria-label=\"Direct link to Allow continuous scheduling despite previous failures 🚲\" title=\"Direct link to Allow continuous scheduling despite previous failures 🚲\" translate=\"no\">​</a></h3>\n<p>\n  <img decoding=\"async\" loading=\"lazy\" src=\"https://docs.tramline.app/img/changelog/auto-stop-scheduled-release.png\" width=\"400\" class=\"img_ev3q\">\n</p>\n<p>Tramline currently halts the scheduling of an automatic train if the last release failed, but was not explicitly stopped. This is a safety mechanism to prevent a series of failures.</p>\n<p>With the new option of <strong>Automatic stop on failure</strong> under scheduled releases, Tramline will automatically stop a failed release so that a new one can be scheduled and kicked off. This is useful when you're confident that the failure was a one-off and/or you don't want to handhold scheduled releases.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"less-noise-when-generating-automatic-tester-notes-\">Less noise when generating automatic tester notes 🎧<a href=\"https://docs.tramline.app/changelog/may-12-2024#less-noise-when-generating-automatic-tester-notes-\" class=\"hash-link\" aria-label=\"Direct link to Less noise when generating automatic tester notes 🎧\" title=\"Direct link to Less noise when generating automatic tester notes 🎧\" translate=\"no\">​</a></h3>\n<p>When generating automatic commit-based tester notes, we now only consider the first parent when encountering a merge commit. Since Tramline doesn't actually checkout code, we manually <a href=\"https://git-scm.com/docs/git-log#Documentation/git-log.txt---first-parent\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">simulate</a> <code>git log [range] --first-parent</code> to get the correct set of commits needed to generate the appropriate notes.</p>\n<details open=\"\" class=\"details_lb9f alert alert--info details_b_Ee\" data-collapsed=\"false\"><summary>Improvements and Fixes</summary><div><div class=\"collapsibleContent_i85q\">\n<!-- -->\n<ul>\n<li class=\"\">Auto-populate release notes from previous release for a new release</li>\n<li class=\"\">Add a note about Slack file upload requiring Tramline to be invited to channel</li>\n<li class=\"\">Ensure that GitHub integration exists with a mandatory <code>installation_id</code></li>\n<li class=\"\">Show the last 15 releases on the team page instead of 10</li>\n<li class=\"\">Add checks for duplicate-actions for all phased rollout related triggers</li>\n</ul>\n</div></div></details>",
            "url": "https://docs.tramline.app/changelog/may-12-2024",
            "title": "May 12, 2024",
            "summary": "Introducing Reldex (release process index) 📊",
            "date_modified": "2024-05-12T00:00:00.000Z",
            "author": {
                "name": "Akshay Gupta",
                "url": "https://github.com/kitallis"
            },
            "tags": []
        }
    ]
}