How to automate your release notes

Search the blog

Share

a screenshot of a cell phone
READ TIME
4 min

WRITTEN BY

/en-us/opensource/blog/author/jasmine-greenaway

Two facts are generally true for software releases.  One, as users, we wish software releases came with better release notes, and two, we hate creating release notes when it’s our turn to ship software updates. Creating release notes requires someone to go back in time to the last release, gathering the relevant information, and compiling it into a document to share with users. This can be quite a challenge and very time consuming. Wouldn’t it be nice to automate this process?

In this blog post, I’ll walk you through an application I created to automate release note generation for source code hosted in GitHub using Azure Functions. This walk-through highlights the services used for the application and comes with a sample repo so that you can create your own generator and explore ways to enhance your workflow.

Azure Functions and GitHub webhooks make it easy to merge your GitHub workflow with serverless solutions. This inspired the creation of the GitHub Release Notes Generator, an application written in C# that creates neatly formatted release notes, using GitHub, Azure Functions, and Azure Storage, to shave time off of your release process and ensure all relevant information reaches your team and users.

Rendered markdown file of example release notes

Rendered markdown file of example release notes

Serverless applications are event-driven, so something needs to happen to make your code run, and one of the benefits of this is that you’re only paying for the time your application runs. This makes Azure Functions a good fit for the generator. Functions are hosted within a function app, which provides a central area for configuring general settings and key management for all functions. When a new release is created in the selected GitHub repository, a GitHub webhook function executes code to create the release notes.

This results in writing less code: configuration for all functions happens in one place, and the functions themselves have bindings, which allow your functions to interact with additional Azure services or external ones, such as the GitHub webhook. After creating the function app and function, there is very minimal setup to make sure the webhook is set up for the proper GitHub event and repository.

Markdown files in a blob container

Markdown files in a blob container

The function now can be updated to generate the notes. Since GitHub uses Markdown for documentation in repositories and releases, the generator also uses markdown and creates a markdown file with relevant release information. Azure blob storage provides a managed solution for unstructured data, such as markdown files of varying sizes and will scale as more releases are created. The end result is a file store available for distributed access or serving to a browser. Using the Azure Storage API, the generator creates the markdown file, then appends additional information about the release. With a storage account you can create a blob container, where the release notes will live.

When a release is created, its specific details can be found in the webhook’s HTTP response. The response includes information about the event and additional metadata about the repository, which is where the generator sets the file name as the release name and header. It also appends the release’s body to the file.

Here I extract the name and body of the new release from the webhook response and set the release name as the file name:

public static async Task Run(HttpRequestMessage req, TraceWriter log)
{

// Get request body

dynamic data = await req.Content.ReadAsAsync<object>();

// Extract github release data from request body

string releaseBody = data?.release?.body;

string releaseName = data?.release?.name;

//Connect to storage account

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(Environment.GetEnvironmentVariable("StorageAccountConnectionString"));

var blobClient = storageAccount.CreateCloudBlobClient();

var container = blobClient.GetContainerReference("releases");

//Set name of file

var blob = container.GetBlockBlobReference(releaseName + ".md" );
}
<p>It’s not possible to include all of the Issues and Pull Request history with this event alone, so we’ll need to get some additional information about the repository through the Octokit.NET API. This requires some minimal setup in the GitHub website by creating a new OAuth app, then using the app’s name to access the API. The function uses the API with a date qualifier to get the last two weeks’ closed Issues and merged Pull Requests.</p>
<p>Here I get issues and pull requests from GitHub through the Octokit.NET API:</p>
<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate" title="">public static async Task<string> GetReleaseDetails(IssueTypeQualifier type)
{

//Connect to client with OAuth App

var github = new GitHubClient(new ProductHeaderValue(Environment.GetEnvironmentVariable("ReleaseNotes")));

var twoWeeks = DateTime.Now.Subtract(TimeSpan.FromDays(14));

var request = new SearchIssuesRequest();

//Find Issues or PRs closed within the past 14 days in specified Repo

request.Repos.Add(Environment.GetEnvironmentVariable("Repo"));

request.Type = type;

request.Closed = new DateRange(twoWeeks, SearchQualifierOperator.GreaterThan);
}
</string></pre></div>
<p>Azure Functions are a quick and straightforward way to create your own customizable serverless workflows. Working with external services, such as GitHub, requires minimal setup with webhooks and makes getting started fast and manageable. The release notes generator is just one of several possible tools to do this, and its sample code is a good start if you’re interested in exploring possibilities that work for you.</p>
<p>The sample includes instructions for building your own generator from scratch or deploying it from your Azure subscription. Once you’ve got your own notes generator up and running, be sure to visit the docs and samples to see what else you can do with serverless applications.</p>
<h4 class="wp-block-heading" id="sample-code">Sample code</h4>
<p><a href="https://github.com/Azure-Samples/functions-dotnet-github-release-notes">GitHub Release Notes Generator</a></p>
<h4 class="wp-block-heading" id="additional-resources">Additional resources</h4>
<p><a href="https://docs.microsoft.com/en-us/azure/azure-functions/functions-overview?WT.mc_id=blog-functions-jasmineg">An introduction to Azure Functions</a></p>
<p><a href="https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-github-webhook-triggered-function?WT.mc_id=blog-functions-jasmineg">Create a function triggered by a GitHub webhook</a></p>
<p><a href="https://docs.microsoft.com/en-us/dotnet/standard/serverless-architecture/?WT.mc_id=blog-functions-jasmineg">Serverless apps: Architecture, patterns and Azure implementation (e-book)</a></p>
<p><a href="https://docs.microsoft.com/en-us/azure/storage?WT.mc_id=blog-functions-jasmineg">Azure Storage Documentation</a></p>
<h4 class="wp-block-heading" id="feedback-or-questions-let-us-know-in-the-comments-below">Feedback or questions? Let us know in the comments below.</h4>

<div class="single__author-byline mt-5 border-top" data-bi-an="Author Bio">

<div class="row mt-5">

<div class="col col-12 col-md-3">

<div class="author__avatar rounded-circle embed-responsive embed-responsive-1by1">

<div class="embed-responsive-item">

<img width="170" height="170" src="https://opensource.microsoft.com/blog/wp-content/uploads/2018/09/Jasmine-250x250.jpg" class="avatar avatar-170 photo border-radius-round wp-post-image" alt="a person posing for the camera">                        </div>

</div>

</div>

<div class="col col-12 col-md-9 pt-2 pt-md-0">

<div class="author__info-meta text-center text-md-left">

<div class="author__info-name h5 mb-2" itemprop="name">

Jasmine Greenaway                   </div>

<div class="author__info-title small pt-0" itemprop="jobTitle">

Jasmine is an NYC-based Cloud Developer Advocate at Microsoft, who has almost too much fun finding interesting ways to use Azure and working on open source with .NET. Her development experience has led her to different development environments and industries, such as in retail with Sears, gaming with Rockstar Games, and prior to Microsoft, .NET developer tooling as a software engineer at GitHub. She also teaches the basics of web development as an adjunct professor at a local college and co-organizes a JavaScript meetup in Brooklyn.                      </div>


<div class="d-inline-flex my-3">

<a href="https://x.com/paladique" target="_blank" rel="noreferrer noopener" class="d-flex action-trigger" aria-label="Follow on X" data-bi-bhvr="126" data-bi-type="social-follow">

<span class="social-share__icon" aria-hidden="true">

<svg xmlns="http://www.w3.org/2000/svg" width="29" height="29" fill="none" viewBox="0 0 29 29"><g clip-path="url(#a)"><path fill="currentColor" d="M17.259 12.273 28.055 0h-2.558l-9.375 10.657L8.635 0H0l11.322 16.115L0 28.985h2.558l9.9-11.254 7.907 11.254H29zm-3.504 3.984-1.147-1.605L3.48 1.884h3.93l7.366 10.304 1.147 1.605 9.575 13.394h-3.93z"></path></g><defs><clipPath id="a"><path fill="currentColor" d="M0 0h29v29H0z"></path></clipPath></defs></svg> </span>

</a>

</div>

</div>


<a class="author-link cta font-weight-normal base mt-3" href="https://opensource.microsoft.com/blog/author/jasmine-greenaway/" data-bi-cn="See more articles from this author" data-bi-id="95782" data-bi-ct="author link" rel="author" aria-label="

See more articles from Jasmine Greenaway                    ">

See more articles from this author              </a>

</div>

</div>

</div>




<section class="single__related" data-bi-an="Related Articles">

<div class="container">

<h2 class="single__related-heading mb-md-5 mb-4">

Related posts                       </h2>

<ul class="single__related-posts list-unstyled row row-cols-1 row-cols-sm-4">

<li class="col d-flex">

<article id="post-98186" class="card card--related material-card shadow-1 text-body border-radius-30 is-entire-card-clickable post-98186 post type-post status-publish format-standard has-post-thumbnail hentry tag-github tag-visual-studio content-type-thought-leadership topic-application-development topic-devops review-flag-1593580428-734 review-flag-1-1593580432-963 review-flag-2-1593580437-411 review-flag-3-1593580442-169 review-flag-4-1593580448-609 review-flag-5-1593580453-725 review-flag-6-1593580457-852 review-flag-7-1593580463-151 review-flag-8-1593580468-572 review-flag-9-1593580473-997 review-flag-new-1593580248-669 review-flag-partn-1593580279-545" data-bi-an="Related Article">

<div class="d-flex card__image-link px-2 pt-2 pb-0" data-bi-cn="9 open-source projects the GitHub Copilot and Visual Studio Code teams are sponsoring—and why they matter" data-bi-id="98186" data-bi-ct="image link">

<img width="388" height="212" src="https://opensource.microsoft.com/blog/wp-content/uploads/2024/06/MSC24-Japan-business-Getty-1024531730-rgb-388x212.png" class="card-img embed-responsive-item border-radius-10 img-object-cover aspect-ratio-16-9 wp-post-image" alt="" loading="lazy">          </div>


<div class="card-body p-4">

<div class="card__meta">

<div class="card__date">

Oct 16

<span class="d-inline-block mx-2">•</span>

</div>

<div class="card__read-time">

3 min read                  </div>

</div>

<h3 class="h5">

<a class="card__link" data-bi-ct="title link" data-bi-cn="9 open-source projects the GitHub Copilot and Visual Studio Code teams are sponsoring—and why they matter" data-bi-id="98186" href="https://opensource.microsoft.com/blog/2025/10/16/9-open-source-projects-the-github-copilot-and-visual-studio-code-teams-are-sponsoring-and-why-they-matter/">

<span>9 open-source projects the GitHub Copilot and Visual Studio Code teams are sponsoring—and why they matter</span> <span class="glyph-prepend glyph-prepend-small glyph-prepend-chevron-right" aria-hidden="true"></span>

</a>

</h3>

<p class="card__excerpt text-body lead">GitHub Copilot and VS Code teams are sponsoring open-source MCP projects that push the boundaries…</p>

</div>

</article>
</li>
<li class="col d-flex">

<article id="post-98109" class="card card--related material-card shadow-1 text-body border-radius-30 is-entire-card-clickable post-98109 post type-post status-publish format-standard has-post-thumbnail hentry tag-github tag-windows content-type-project-updates topic-it-trends topic-programming-languages topic-tools review-flag-1593580771-946 review-flag-1-1593580432-963 review-flag-8-1593580468-572 review-flag-micro-1680215167-604 review-flag-new-1593580248-669" data-bi-an="Related Article">

<div class="d-flex card__image-link px-2 pt-2 pb-0" data-bi-cn="Bringing BASIC back: Microsoft’s 6502 BASIC is now Open Source" data-bi-id="98109" data-bi-ct="image link">

<img width="388" height="218" src="https://opensource.microsoft.com/blog/wp-content/uploads/2025/09/Open-Source-Microsoft-retro-logo-388x218.webp" class="card-img embed-responsive-item border-radius-10 img-object-cover aspect-ratio-16-9 wp-post-image" alt="The 1975 Microsoft logo" loading="lazy">           </div>


<div class="card-body p-4">

<div class="card__meta">

<div class="card__date">

Sep 3

<span class="d-inline-block mx-2">•</span>

</div>

<div class="card__read-time">

2 min read                  </div>

</div>

<h3 class="h5">

<a class="card__link" data-bi-ct="title link" data-bi-cn="Bringing BASIC back: Microsoft’s 6502 BASIC is now Open Source" data-bi-id="98109" href="https://opensource.microsoft.com/blog/2025/09/03/microsoft-open-source-historic-6502-basic/">

<span>Bringing BASIC back: Microsoft’s 6502 BASIC is now Open Source</span> <span class="glyph-prepend glyph-prepend-small glyph-prepend-chevron-right" aria-hidden="true"></span>

</a>

</h3>

<p class="card__excerpt text-body lead">For decades, fragments and unofficial copies of Microsoft’s 6502 BASIC have circulated…</p>

</div>

</article>
</li>
<li class="col d-flex">

<article id="post-97917" class="card card--related material-card shadow-1 text-body border-radius-30 is-entire-card-clickable post-97917 post type-post status-publish format-standard has-post-thumbnail hentry tag-github tag-kubernetes content-type-tutorials-and-demos topic-ai-machine-learning topic-cloud programming-languages-pytorch review-flag-1593580428-734 review-flag-1-1593580432-963 review-flag-2-1593580437-411 review-flag-3-1593580442-169 review-flag-4-1593580448-609 review-flag-5-1593580453-725 review-flag-6-1593580457-852 review-flag-7-1593580463-151 review-flag-8-1593580468-572 review-flag-alway-1593580310-39 review-flag-lever-1593580265-989 review-flag-new-1593580248-669" data-bi-an="Related Article">

<div class="d-flex card__image-link px-2 pt-2 pb-0" data-bi-cn="Optimizing memory usage in large language models fine-tuning with KAITO: Best practices from Phi-3 " data-bi-id="97917" data-bi-ct="image link">

<img width="388" height="212" src="https://opensource.microsoft.com/blog/wp-content/uploads/2024/06/STB13_Rick_03-388x212.png" class="card-img embed-responsive-item border-radius-10 img-object-cover aspect-ratio-16-9 wp-post-image" alt="" loading="lazy">          </div>


<div class="card-body p-4">

<div class="card__meta">

<div class="card__date">

Jul 7

<span class="d-inline-block mx-2">•</span>

</div>

<div class="card__read-time">

7 min read                  </div>

</div>

<h3 class="h5">

<a class="card__link" data-bi-ct="title link" data-bi-cn="Optimizing memory usage in large language models fine-tuning with KAITO: Best practices from Phi-3 " data-bi-id="97917" href="https://opensource.microsoft.com/blog/2025/07/07/optimizing-memory-usage-in-large-language-models-fine-tuning-with-kaito-best-practices-from-phi-3/">

<span>Optimizing memory usage in large language models fine-tuning with KAITO: Best practices from Phi-3 </span> <span class="glyph-prepend glyph-prepend-small glyph-prepend-chevron-right" aria-hidden="true"></span>

</a>

</h3>

<p class="card__excerpt text-body lead">The Cloud Native team at Azure is working to make AI on…</p>

</div>

</article>
</li>
<li class="col d-flex">

<article id="post-97522" class="card card--related material-card shadow-1 text-body border-radius-30 is-entire-card-clickable post-97522 post type-post status-publish format-standard has-post-thumbnail hentry tag-github tag-kubernetes tag-mysql content-type-news content-type-project-updates topic-application-development topic-databases topic-devops topic-iot review-flag-2-1593580437-411 review-flag-integ-1593580288-449 review-flag-iot-1680213327-385 review-flag-new-1593580248-669" data-bi-an="Related Article">

<div class="d-flex card__image-link px-2 pt-2 pb-0" data-bi-cn="Drasi accepted into CNCF sandbox for change-driven solutions " data-bi-id="97522" data-bi-ct="image link">

<img width="388" height="212" src="https://opensource.microsoft.com/blog/wp-content/uploads/2024/06/CLO24-Azure-Retail-025-388x212.png" class="card-img embed-responsive-item border-radius-10 img-object-cover aspect-ratio-16-9 wp-post-image" alt="" loading="lazy">         </div>


<div class="card-body p-4">

<div class="card__meta">

<div class="card__date">

Jun 10

<span class="d-inline-block mx-2">•</span>

</div>

<div class="card__read-time">

4 min read                  </div>

</div>

<h3 class="h5">

<a class="card__link" data-bi-ct="title link" data-bi-cn="Drasi accepted into CNCF sandbox for change-driven solutions " data-bi-id="97522" href="https://opensource.microsoft.com/blog/2025/06/10/drasi-accepted-into-cncf-sandbox-for-change-driven-solutions/">

<span>Drasi accepted into CNCF sandbox for change-driven solutions </span> <span class="glyph-prepend glyph-prepend-small glyph-prepend-chevron-right" aria-hidden="true"></span>

</a>

</h3>

<p class="card__excerpt text-body lead">The Azure Incubations team is proud to share that Drasi has officially…</p>

</div>

</article>
</li>

</ul>

</div>

</section>



<footer class="feature-cta-wrapper">

<div class="container">

<div class="opensource-feature-cta-bg">

<section class="feature feature--cta feature--global-cta col-12 col-md-5 " data-bi-an="Global CTA">

<div class="card-wrapper-grid">

<div class="card-body align-self-center mx-auto">

<h2 id="global-cta-heading">Microsoft Open Source</h2>

<div class="mb-3">

<p>Open Source enables Microsoft products and services to bring choice, technology and community to our customers.</p>

</div>

<div class="link-group mb-5">

<a aria-label="Explore projects" data-bi-cn="Explore projects" data-bi-ct="cta link" href="https://opensource.microsoft.com/projects/" class="cta">

Explore projects                </a>

</div>

</div>

</div>
</section>

</div>

<section class="footer-social text-center" role="region" aria-label="social media links" data-bi-an="Global CTA Social">

<h2 class="text-white base font-weight-normal align-middle mr-g d-md-inline-block mb-3 mb-md-0">

Connect with us on social   </h2>

<ul class="list-inline mb-0 d-inline-flex align-middle">

<li class="list-inline-item mr-g icon-x">

<a class="d-flex text-body" aria-label="Follow on X" data-bi-cn="Follow on X" data-bi-ct="follow link" data-bi-bhvr="126" href="https://twitter.com/OpenAtMicrosoft" target="_blank">

<span class="svg" aria-hidden="true" role="img">

<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><circle cx="12.24" cy="12" r="11.635" fill="#041530"></circle><path fill="#fff" d="m13.348 11.11 4.332-4.928h-1.026L12.89 10.46 9.888 6.182H6.422l4.543 6.469-4.543 5.166H7.45L11.42 13.3l3.173 4.518h3.464zm-5.53-4.17h1.578l2.956 4.136.459.645 3.842 5.376h-1.577z"></path></svg> </span>

</a>

</li>

</ul>
</section>

</div>
</footer>
<div id="footerArea" class="uhf" data-m="{"cN":"footerArea","cT":"Area_coreuiArea","id":"a2Body","sN":2,"aN":"Body"}">

<div id="footerRegion" data-region-key="footerregion" data-m="{"cN":"footerRegion","cT":"Region_coreui-region","id":"r1a2","sN":1,"aN":"a2"}">

<div id="footerUniversalFooter" data-m="{"cN":"footerUniversalFooter","cT":"Module_coreui-universalfooter","id":"m1r1a2","sN":1,"aN":"r1a2"}" data-module-id="Category|footerRegion|coreui-region|footerUniversalFooter|coreui-universalfooter">

<footer id="uhf-footer" class="c-uhff context-uhf" data-uhf-mscc-rq="false" data-footer-footprint="/MSCloudBlogs/MSEnterpriseMobilityandSecurityFooter, fromService: True" data-m="{"cN":"Uhf footer_cont","cT":"Container","id":"c1m1r1a2","sN":1,"aN":"m1r1a2"}">

<nav class="c-uhff-nav" aria-label="Footer Resource links" data-m="{"cN":"Footer nav_cont","cT":"Container","id":"c1c1m1r1a2","sN":1,"aN":"c1m1r1a2"}">


<div class="c-uhff-nav-row">

<div class="c-uhff-nav-group" data-m="{"cN":"footerNavColumn1_cont","cT":"Container","id":"c1c1c1m1r1a2","sN":1,"aN":"c1c1m1r1a2"}">

<div class="c-heading-4" role="heading" aria-level="2">What's new</div>

<ul class="c-list f-bare">

<li>

<a aria-label="Surface Pro What's new" class="c-uhff-link" href="https://www.microsoft.com/surface/devices/surface-pro" data-m="{"cN":"Footer_WhatsNew_NewSurfacePro_nav","id":"n1c1c1c1m1r1a2","sN":1,"aN":"c1c1c1m1r1a2"}">Surface Pro</a>

</li>

<li>

<a aria-label="Surface Laptop What's new" class="c-uhff-link" href="https://www.microsoft.com/surface/devices/surface-laptop" data-m="{"cN":"Footer_WhatsNew_SurfaceLaptop_nav","id":"n2c1c1c1m1r1a2","sN":2,"aN":"c1c1c1m1r1a2"}">Surface Laptop</a>

</li>

<li>

<a aria-label="Surface Laptop Studio 2 What's new" class="c-uhff-link" href="https://www.microsoft.com/en-us/d/Surface-Laptop-Studio-2/8rqr54krf1dz" data-m="{"cN":"Footer_WhatsNew_SurfaceLaptopStudio2_nav","id":"n3c1c1c1m1r1a2","sN":3,"aN":"c1c1c1m1r1a2"}">Surface Laptop Studio 2</a>

</li>

<li>

<a aria-label="Copilot for organizations What's new" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-copilot/organizations?icid=DSM_Footer_CopilotOrganizations" data-m="{"cN":"Footer_WhatsNew_CopilotMicrosoft_nav","id":"n4c1c1c1m1r1a2","sN":4,"aN":"c1c1c1m1r1a2"}">Copilot for organizations</a>

</li>

<li>

<a aria-label="Copilot for personal use What's new" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-copilot/for-individuals?icid=DSM_Footer_CopilotPersonal" data-m="{"cN":"Footer_WhatsNew_CopilotMicrosoft_nav","id":"n5c1c1c1m1r1a2","sN":5,"aN":"c1c1c1m1r1a2"}">Copilot for personal use</a>

</li>

<li>

<a aria-label="AI in Windows What's new" class="c-uhff-link" href="https://www.microsoft.com/en-us/windows/ai-features?icid=DSM_Footer_WhatsNew_AIinWindows" data-m="{"cN":"Whatsnew_AIinWindows_nav","id":"n6c1c1c1m1r1a2","sN":6,"aN":"c1c1c1m1r1a2"}">AI in Windows</a>

</li>

<li>

<a aria-label="Explore Microsoft products What's new" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-products-and-apps" data-m="{"cN":"Footer_WhatsNew_ExploreMicrosoftProducts_nav","id":"n7c1c1c1m1r1a2","sN":7,"aN":"c1c1c1m1r1a2"}">Explore Microsoft products</a>

</li>

<li>

<a aria-label="Windows 11 apps What's new" class="c-uhff-link" href="https://www.microsoft.com/en-us/windows/apps-for-windows?icid=DSM_Footer_WhatsNew_Windows11apps" data-m="{"cN":"Footer_WhatsNew_Windows_11_apps_nav","id":"n8c1c1c1m1r1a2","sN":8,"aN":"c1c1c1m1r1a2"}">Windows 11 apps</a>

</li>

</ul>


</div>

<div class="c-uhff-nav-group" data-m="{"cN":"footerNavColumn2_cont","cT":"Container","id":"c2c1c1m1r1a2","sN":2,"aN":"c1c1m1r1a2"}">

<div class="c-heading-4" role="heading" aria-level="2">Microsoft Store</div>

<ul class="c-list f-bare">

<li>

<a aria-label="Account profile Microsoft Store" class="c-uhff-link" href="https://account.microsoft.com/" data-m="{"cN":"Footer_StoreandSupport_AccountProfile_nav","id":"n1c2c1c1m1r1a2","sN":1,"aN":"c2c1c1m1r1a2"}">Account profile</a>

</li>

<li>

<a aria-label="Download Center Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/download" data-m="{"cN":"Footer_StoreandSupport_DownloadCenter_nav","id":"n2c2c1c1m1r1a2","sN":2,"aN":"c2c1c1m1r1a2"}">Download Center</a>

</li>

<li>

<a aria-label="Microsoft Store support Microsoft Store" class="c-uhff-link" href="https://go.microsoft.com/fwlink/?linkid=2139749" data-m="{"cN":"Footer_StoreandSupport_SalesAndSupport_nav","id":"n3c2c1c1m1r1a2","sN":3,"aN":"c2c1c1m1r1a2"}">Microsoft Store support</a>

</li>

<li>

<a aria-label="Returns Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/returns" data-m="{"cN":"Footer_StoreandSupport_Returns_nav","id":"n4c2c1c1m1r1a2","sN":4,"aN":"c2c1c1m1r1a2"}">Returns</a>

</li>

<li>

<a aria-label="Order tracking Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/order-tracking" data-m="{"cN":"Footer_StoreandSupport_OrderTracking_nav","id":"n5c2c1c1m1r1a2","sN":5,"aN":"c2c1c1m1r1a2"}">Order tracking</a>

</li>

<li>

<a aria-label="Certified Refurbished Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/certified-refurbished-products" data-m="{"cN":"Footer_StoreandSupport_StoreLocations_nav","id":"n6c2c1c1m1r1a2","sN":6,"aN":"c2c1c1m1r1a2"}">Certified Refurbished</a>

</li>

<li>

<a aria-label="Microsoft Store Promise Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/why-microsoft-store?icid=footer_why-msft-store_7102020" data-m="{"cN":"Footer_StoreandSupport_MicrosoftPromise_nav","id":"n7c2c1c1m1r1a2","sN":7,"aN":"c2c1c1m1r1a2"}">Microsoft Store Promise</a>

</li>

<li>

<a aria-label="Flexible Payments Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/payment-financing-options?icid=footer_financing_vcc" data-m="{"cN":"Footer_StoreandSupport_Financing_nav","id":"n8c2c1c1m1r1a2","sN":8,"aN":"c2c1c1m1r1a2"}">Flexible Payments</a>

</li>

</ul>


</div>

<div class="c-uhff-nav-group" data-m="{"cN":"footerNavColumn3_cont","cT":"Container","id":"c3c1c1m1r1a2","sN":3,"aN":"c1c1m1r1a2"}">

<div class="c-heading-4" role="heading" aria-level="2">Education</div>

<ul class="c-list f-bare">

<li>

<a aria-label="Microsoft in education Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/education" data-m="{"cN":"Footer_Education_MicrosoftInEducation_nav","id":"n1c3c1c1m1r1a2","sN":1,"aN":"c3c1c1m1r1a2"}">Microsoft in education</a>

</li>

<li>

<a aria-label="Devices for education Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/education/devices/overview" data-m="{"cN":"Footer_Education_DevicesforEducation_nav","id":"n2c3c1c1m1r1a2","sN":2,"aN":"c3c1c1m1r1a2"}">Devices for education</a>

</li>

<li>

<a aria-label="Microsoft Teams for Education Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/education/products/teams" data-m="{"cN":"Footer_Education_MicrosoftTeamsforEducation_nav","id":"n3c3c1c1m1r1a2","sN":3,"aN":"c3c1c1m1r1a2"}">Microsoft Teams for Education</a>

</li>

<li>

<a aria-label="Microsoft 365 Education Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/education/products/microsoft-365" data-m="{"cN":"Footer_Education_Microsoft365Education_nav","id":"n4c3c1c1m1r1a2","sN":4,"aN":"c3c1c1m1r1a2"}">Microsoft 365 Education</a>

</li>

<li>

<a aria-label="How to buy for your school Education" class="c-uhff-link" href="https://www.microsoft.com/education/how-to-buy" data-m="{"cN":"Footer_Howtobuyforyourschool_nav","id":"n5c3c1c1m1r1a2","sN":5,"aN":"c3c1c1m1r1a2"}">How to buy for your school</a>

</li>

<li>

<a aria-label="Educator training and development Education" class="c-uhff-link" href="https://education.microsoft.com/" data-m="{"cN":"Footer_Education_EducatorTrainingDevelopment_nav","id":"n6c3c1c1m1r1a2","sN":6,"aN":"c3c1c1m1r1a2"}">Educator training and development</a>

</li>

<li>

<a aria-label="Deals for students and parents Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/education" data-m="{"cN":"Footer_Education_DealsForStudentsandParents_nav","id":"n7c3c1c1m1r1a2","sN":7,"aN":"c3c1c1m1r1a2"}">Deals for students and parents</a>

</li>

<li>

<a aria-label="AI for education Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/education/ai-in-education" data-m="{"cN":"Footer_Education_Azureforstudents_nav","id":"n8c3c1c1m1r1a2","sN":8,"aN":"c3c1c1m1r1a2"}">AI for education</a>

</li>

</ul>


</div>

</div>

<div class="c-uhff-nav-row">

<div class="c-uhff-nav-group" data-m="{"cN":"footerNavColumn4_cont","cT":"Container","id":"c4c1c1m1r1a2","sN":4,"aN":"c1c1m1r1a2"}">

<div class="c-heading-4" role="heading" aria-level="2">Business</div>

<ul class="c-list f-bare">

<li>

<a aria-label="Microsoft Cloud Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-cloud" data-m="{"cN":"Footer_Business_Microsoft_Cloud_nav","id":"n1c4c1c1m1r1a2","sN":1,"aN":"c4c1c1m1r1a2"}">Microsoft Cloud</a>

</li>

<li>

<a aria-label="Microsoft Security Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/security" data-m="{"cN":"Footer_Business_Microsoft Security_nav","id":"n2c4c1c1m1r1a2","sN":2,"aN":"c4c1c1m1r1a2"}">Microsoft Security</a>

</li>

<li>

<a aria-label="Dynamics 365 Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/dynamics-365" data-m="{"cN":"Footer_Business_MicrosoftDynamics365_nav","id":"n3c4c1c1m1r1a2","sN":3,"aN":"c4c1c1m1r1a2"}">Dynamics 365</a>

</li>

<li>

<a aria-label="Microsoft 365 Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-365/business" data-m="{"cN":"Footer_Business_M365_nav","id":"n4c4c1c1m1r1a2","sN":4,"aN":"c4c1c1m1r1a2"}">Microsoft 365</a>

</li>

<li>

<a aria-label="Microsoft Power Platform Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/power-platform" data-m="{"cN":"Footer_DeveloperAndIT_Power Platform_nav","id":"n5c4c1c1m1r1a2","sN":5,"aN":"c4c1c1m1r1a2"}">Microsoft Power Platform</a>

</li>

<li>

<a aria-label="Microsoft Teams Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-teams/group-chat-software" data-m="{"cN":"Footer_Business_Microsoft365_nav","id":"n6c4c1c1m1r1a2","sN":6,"aN":"c4c1c1m1r1a2"}">Microsoft Teams</a>

</li>

<li>

<a aria-label="Microsoft 365 Copilot Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-365-copilot?icid=DSM_Footer_Microsoft365Copilot" data-m="{"cN":"Footer_CopilotMicrosoft365_nav","id":"n7c4c1c1m1r1a2","sN":7,"aN":"c4c1c1m1r1a2"}">Microsoft 365 Copilot</a>

</li>

<li>

<a aria-label="Small Business Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/business?icid=CNavBusinessStore" data-m="{"cN":"Footer_Business-SmallBusiness_nav","id":"n8c4c1c1m1r1a2","sN":8,"aN":"c4c1c1m1r1a2"}">Small Business</a>

</li>

</ul>


</div>

<div class="c-uhff-nav-group" data-m="{"cN":"footerNavColumn5_cont","cT":"Container","id":"c5c1c1m1r1a2","sN":5,"aN":"c1c1m1r1a2"}">

<div class="c-heading-4" role="heading" aria-level="2">Developer & IT</div>

<ul class="c-list f-bare">

<li>

<a aria-label="Azure Developer & IT" class="c-uhff-link" href="https://azure.microsoft.com/en-us/" data-m="{"cN":"Footer_DeveloperAndIT_MicrosoftAzure_nav","id":"n1c5c1c1m1r1a2","sN":1,"aN":"c5c1c1m1r1a2"}">Azure</a>

</li>

<li>

<a aria-label="Microsoft Developer Developer & IT" class="c-uhff-link" href="https://developer.microsoft.com/en-us/" data-m="{"cN":"Footer_DeveloperAndIT_MicrosoftDeveloper_nav","id":"n2c5c1c1m1r1a2","sN":2,"aN":"c5c1c1m1r1a2"}">Microsoft Developer</a>

</li>

<li>

<a aria-label="Microsoft Learn Developer & IT" class="c-uhff-link" href="https://learn.microsoft.com/" data-m="{"cN":"Footer_DeveloperAndIT_MicrosoftLearn_nav","id":"n3c5c1c1m1r1a2","sN":3,"aN":"c5c1c1m1r1a2"}">Microsoft Learn</a>

</li>

<li>

<a aria-label="Support for AI marketplace apps Developer & IT" class="c-uhff-link" href="https://www.microsoft.com/software-development-companies/offers-benefits/isv-success?icid=DSM_Footer_SupportAIMarketplace&ocid=cmm3atxvn98" data-m="{"cN":"Footer_DeveloperAndIT_Marketplace_nav","id":"n4c5c1c1m1r1a2","sN":4,"aN":"c5c1c1m1r1a2"}">Support for AI marketplace apps</a>

</li>

<li>

<a aria-label="Microsoft Tech Community Developer & IT" class="c-uhff-link" href="https://techcommunity.microsoft.com/" data-m="{"cN":"Footer_DeveloperAndIT_MicrosoftTechCommunity_nav","id":"n5c5c1c1m1r1a2","sN":5,"aN":"c5c1c1m1r1a2"}">Microsoft Tech Community</a>

</li>

<li>

<a aria-label="Microsoft Marketplace Developer & IT" class="c-uhff-link" href="https://marketplace.microsoft.com?icid=DSM_Footer_Marketplace&ocid=cmm3atxvn98" data-m="{"cN":"Footer_DeveloperAndIT_Marketplace_nav","id":"n6c5c1c1m1r1a2","sN":6,"aN":"c5c1c1m1r1a2"}">Microsoft Marketplace</a>

</li>

<li>

<a aria-label="Marketplace Rewards Developer & IT" class="c-uhff-link" href="https://www.microsoft.com/software-development-companies/offers-benefits/marketplace-rewards?icid=DSM_Footer_MarketplaceRewards&ocid=cmm3atxvn98" data-m="{"cN":"Footer_DeveloperAndIT_MarketplaceRewards_nav","id":"n7c5c1c1m1r1a2","sN":7,"aN":"c5c1c1m1r1a2"}">Marketplace Rewards</a>

</li>

<li>

<a aria-label="Visual Studio Developer & IT" class="c-uhff-link" href="https://visualstudio.microsoft.com/" data-m="{"cN":"Footer_DeveloperAndIT_MicrosoftVisualStudio_nav","id":"n8c5c1c1m1r1a2","sN":8,"aN":"c5c1c1m1r1a2"}">Visual Studio</a>

</li>

</ul>


</div>

<div class="c-uhff-nav-group" data-m="{"cN":"footerNavColumn6_cont","cT":"Container","id":"c6c1c1m1r1a2","sN":6,"aN":"c1c1m1r1a2"}">

<div class="c-heading-4" role="heading" aria-level="2">Company</div>

<ul class="c-list f-bare">

<li>

<a aria-label="Careers Company" class="c-uhff-link" href="https://careers.microsoft.com/" data-m="{"cN":"Footer_Company_Careers_nav","id":"n1c6c1c1m1r1a2","sN":1,"aN":"c6c1c1m1r1a2"}">Careers</a>

</li>

<li>

<a aria-label="About Microsoft Company" class="c-uhff-link" href="https://www.microsoft.com/about" data-m="{"cN":"Footer_Company_AboutMicrosoft_nav","id":"n2c6c1c1m1r1a2","sN":2,"aN":"c6c1c1m1r1a2"}">About Microsoft</a>

</li>

<li>

<a aria-label="Company news Company" class="c-uhff-link" href="https://news.microsoft.com/source/?icid=DSM_Footer_Company_CompanyNews" data-m="{"cN":"Footer_Company_CompanyNews_nav","id":"n3c6c1c1m1r1a2","sN":3,"aN":"c6c1c1m1r1a2"}">Company news</a>

</li>

<li>

<a aria-label="Privacy at Microsoft Company" class="c-uhff-link" href="https://www.microsoft.com/en-us/privacy?icid=DSM_Footer_Company_Privacy" data-m="{"cN":"Footer_Company_PrivacyAtMicrosoft_nav","id":"n4c6c1c1m1r1a2","sN":4,"aN":"c6c1c1m1r1a2"}">Privacy at Microsoft</a>

</li>

<li>

<a aria-label="Investors Company" class="c-uhff-link" href="https://www.microsoft.com/investor/default.aspx" data-m="{"cN":"Footer_Company_Investors_nav","id":"n5c6c1c1m1r1a2","sN":5,"aN":"c6c1c1m1r1a2"}">Investors</a>

</li>

<li>

<a aria-label="Diversity and inclusion Company" class="c-uhff-link" href="https://www.microsoft.com/en-us/diversity/default?icid=DSM_Footer_Company_Diversity" data-m="{"cN":"Footer_Company_DiversityAndInclusion_nav","id":"n6c6c1c1m1r1a2","sN":6,"aN":"c6c1c1m1r1a2"}">Diversity and inclusion</a>

</li>

<li>

<a aria-label="Accessibility Company" class="c-uhff-link" href="https://www.microsoft.com/en-us/accessibility" data-m="{"cN":"Footer_Company_Accessibility_nav","id":"n7c6c1c1m1r1a2","sN":7,"aN":"c6c1c1m1r1a2"}">Accessibility</a>

</li>

<li>

<a aria-label="Sustainability Company" class="c-uhff-link" href="https://www.microsoft.com/en-us/sustainability/" data-m="{"cN":"Footer_Company_Sustainability_nav","id":"n8c6c1c1m1r1a2","sN":8,"aN":"c6c1c1m1r1a2"}">Sustainability</a>

</li>

</ul>


</div>

</div>

</nav>

<div class="c-uhff-base">

<a id="locale-picker-link" aria-label="Content Language Selector. Currently set to English (United States)" class="c-uhff-link c-uhff-lang-selector c-glyph glyph-world" href="http://www.microsoft.com/en-us/locale.aspx" data-m="{"cN":"locale_picker(US)_nav","id":"n7c1c1m1r1a2","sN":7,"aN":"c1c1m1r1a2"}">English (United States)</a>

<a data-m="{"id":"n8c1c1m1r1a2","sN":8,"aN":"c1c1m1r1a2"}" href="https://aka.ms/yourcaliforniaprivacychoices" class="c-uhff-link c-uhff-ccpa">

<svg role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 14" xml:space="preserve" height="16" width="43">

<title>Your Privacy Choices Opt-Out Icon</title>

<path d="M7.4 12.8h6.8l3.1-11.6H7.4C4.2 1.2 1.6 3.8 1.6 7s2.6 5.8 5.8 5.8z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#fff"></path>

<path d="M22.6 0H7.4c-3.9 0-7 3.1-7 7s3.1 7 7 7h15.2c3.9 0 7-3.1 7-7s-3.2-7-7-7zm-21 7c0-3.2 2.6-5.8 5.8-5.8h9.9l-3.1 11.6H7.4c-3.2 0-5.8-2.6-5.8-5.8z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#06f"></path>

<path d="M24.6 4c.2.2.2.6 0 .8L22.5 7l2.2 2.2c.2.2.2.6 0 .8-.2.2-.6.2-.8 0l-2.2-2.2-2.2 2.2c-.2.2-.6.2-.8 0-.2-.2-.2-.6 0-.8L20.8 7l-2.2-2.2c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0l2.2 2.2L23.8 4c.2-.2.6-.2.8 0z" style="fill:#fff"></path>

<path d="M12.7 4.1c.2.2.3.6.1.8L8.6 9.8c-.1.1-.2.2-.3.2-.2.1-.5.1-.7-.1L5.4 7.7c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0L8 8.6l3.8-4.5c.2-.2.6-.2.9 0z" style="fill:#06f"></path>

</svg>

<span>Your Privacy Choices</span>

</a>

<noscript>

<a data-m='{"id":"n9c1c1m1r1a2","sN":9,"aN":"c1c1m1r1a2"}' href="https://aka.ms/yourcaliforniaprivacychoices" class='c-uhff-link c-uhff-ccpa'>

<svg role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 14" xml:space="preserve" height="16" width="43">

<title>Your Privacy Choices Opt-Out Icon</title>

<path d="M7.4 12.8h6.8l3.1-11.6H7.4C4.2 1.2 1.6 3.8 1.6 7s2.6 5.8 5.8 5.8z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#fff"/>

<path d="M22.6 0H7.4c-3.9 0-7 3.1-7 7s3.1 7 7 7h15.2c3.9 0 7-3.1 7-7s-3.2-7-7-7zm-21 7c0-3.2 2.6-5.8 5.8-5.8h9.9l-3.1 11.6H7.4c-3.2 0-5.8-2.6-5.8-5.8z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#06f"/>

<path d="M24.6 4c.2.2.2.6 0 .8L22.5 7l2.2 2.2c.2.2.2.6 0 .8-.2.2-.6.2-.8 0l-2.2-2.2-2.2 2.2c-.2.2-.6.2-.8 0-.2-.2-.2-.6 0-.8L20.8 7l-2.2-2.2c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0l2.2 2.2L23.8 4c.2-.2.6-.2.8 0z" style="fill:#fff"/>

<path d="M12.7 4.1c.2.2.3.6.1.8L8.6 9.8c-.1.1-.2.2-.3.2-.2.1-.5.1-.7-.1L5.4 7.7c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0L8 8.6l3.8-4.5c.2-.2.6-.2.9 0z" style="fill:#06f"/>

</svg>

<span>Your Privacy Choices</span>

</a>

</noscript>

<a data-m="{"id":"n10c1c1m1r1a2","sN":10,"aN":"c1c1m1r1a2"}" href="https://go.microsoft.com/fwlink/?linkid=2259814" class="c-uhff-link c-uhff-consumer">

<span>Consumer Health Privacy</span>

</a>

<nav aria-label="Microsoft corporate links">

<ul class="c-list f-bare" data-m="{"cN":"Corp links_cont","cT":"Container","id":"c11c1c1m1r1a2","sN":11,"aN":"c1c1m1r1a2"}">

<li id="c-uhff-footer_sitemap">

<a class="c-uhff-link" href="https://www.microsoft.com/en-us/sitemap1.aspx" data-mscc-ic="false" data-m="{"cN":"Footer_Sitemap_nav","id":"n1c11c1c1m1r1a2","sN":1,"aN":"c11c1c1m1r1a2"}">Sitemap</a>

</li>

<li id="c-uhff-footer_contactus">

<a class="c-uhff-link" href="https://support.microsoft.com/contactus" data-mscc-ic="false" data-m="{"cN":"Footer_ContactUs_nav","id":"n2c11c1c1m1r1a2","sN":2,"aN":"c11c1c1m1r1a2"}">Contact Microsoft</a>

</li>

<li id="c-uhff-footer_privacyandcookies">

<a class="c-uhff-link" href="https://go.microsoft.com/fwlink/?LinkId=521839" data-mscc-ic="false" data-m="{"cN":"Footer_PrivacyandCookies_nav","id":"n3c11c1c1m1r1a2","sN":3,"aN":"c11c1c1m1r1a2"}">Privacy </a>

</li>

<li class=" x-hidden" id="c-uhff-footer_managecookies">

<a class="c-uhff-link" href="#" data-mscc-ic="false" data-m="{"cN":"Footer_ManageCookies_nav","id":"n4c11c1c1m1r1a2","sN":4,"aN":"c11c1c1m1r1a2"}">Manage cookies</a>

</li>

<li id="c-uhff-footer_termsofuse">

<a class="c-uhff-link" href="https://go.microsoft.com/fwlink/?LinkID=206977" data-mscc-ic="false" data-m="{"cN":"Footer_TermsOfUse_nav","id":"n5c11c1c1m1r1a2","sN":5,"aN":"c11c1c1m1r1a2"}">Terms of use</a>

</li>

<li id="c-uhff-footer_trademarks">

<a class="c-uhff-link" href="https://go.microsoft.com/fwlink/?linkid=2196228" data-mscc-ic="false" data-m="{"cN":"Footer_Trademarks_nav","id":"n6c11c1c1m1r1a2","sN":6,"aN":"c11c1c1m1r1a2"}">Trademarks</a>

</li>

<li id="c-uhff-footer_safetyandeco">

<a class="c-uhff-link" href="https://go.microsoft.com/fwlink/?linkid=2196227" data-mscc-ic="false" data-m="{"cN":"Footer_SafetyAndEco_nav","id":"n7c11c1c1m1r1a2","sN":7,"aN":"c11c1c1m1r1a2"}">Safety & eco</a>

</li>

<li id="c-uhff-recycling">

<a class="c-uhff-link" href="https://www.microsoft.com/en-us/legal/compliance/recycling" data-mscc-ic="false" data-m="{"cN":"Recycling_nav","id":"n8c11c1c1m1r1a2","sN":8,"aN":"c11c1c1m1r1a2"}">Recycling</a>

</li>

<li id="c-uhff-footer_aboutourads">

<a class="c-uhff-link" href="https://choice.microsoft.com" data-mscc-ic="false" data-m="{"cN":"Footer_AboutourAds_nav","id":"n9c11c1c1m1r1a2","sN":9,"aN":"c11c1c1m1r1a2"}">About our ads</a>

</li>

<li>© Microsoft 2025</li>


</ul>

</nav>


</div>

</footer>
<script id="uhf-footer-ccpa">

const globalPrivacyControlEnabled = navigator.globalPrivacyControl;

const GPC_DataSharingOptIn = (globalPrivacyControlEnabled) ? false : checkThirdPartyAdsOptOutCookie();

if(window.onGPCLoaded) {

window.onGPCLoaded();

}


function checkThirdPartyAdsOptOutCookie() {

try {

const ThirdPartyAdsOptOutCookieName = '3PAdsOptOut';

var cookieValue = getCookie(ThirdPartyAdsOptOutCookieName);

return cookieValue != 1;

} catch {

return true;

}

}

function getCookie(cookieName) {

var cookieValue = document.cookie.match('(^|;)\\s*' + cookieName + '\\s*=\\s*([^;]+)');

return (cookieValue) ? cookieValue[2] : '';

}
</script>

</div>

</div>

</div>
<script type="speculationrules">
{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"\/blog\/*"},{"not":{"href_matches":["\/blog\/wp-*.php","\/blog\/wp-admin\/*","\/blog\/wp-content\/uploads\/*","\/blog\/wp-content\/*","\/blog\/wp-content\/plugins\/*","\/blog\/wp-content\/themes\/cloud-marketing-moray\/*","\/blog\/wp-content\/themes\/xtheme\/*","\/blog\/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
</script>

<script>

let retryCount = 0;

const maxRetries = 50;

// Check if analytics is initialized before using it.

function maybeMetrics3pScripts() {

// Check if 1DS analytics is initialized.

if (

typeof analytics !== 'undefined' &&

typeof analytics.isInitialized === 'function' &&

analytics.isInitialized()

) {

// 1DS is ready, call the original function.

Metrics_3P_Scripts();

} else if (retryCount < maxRetries) {

retryCount++;

// If 1DS isn't ready yet, wait and try again.

setTimeout(maybeMetrics3pScripts, 100);

} else {

console.warn('Analytics initialization failed after maximum retries.');

}

}

function onConsentChanged( categoryPreferences ) {

maybeMetrics3pScripts();

// If any categories are disabled, clear all cookies

if ( ! siteConsent.getConsentFor( WcpConsent.consentCategories.Analytics ) ) {

Metrics_Clear_Cookies( 'Analytics' );

}

if ( ! siteConsent.getConsentFor( WcpConsent.consentCategories.Advertising ) ) {

Metrics_Clear_Cookies( 'Advertising' );

}

if ( ! siteConsent.getConsentFor( WcpConsent.consentCategories.SocialMedia ) ) {

Metrics_Clear_Cookies( 'SocialMedia' );

}

}

function Metrics_Clear_Cookies( category ) {

var all_cookies = document.cookie.split(";");

// array of cookie names to clear

const cookie_names = [

'_clck',

'_clsk',

'_fbp',

'_uetvid',

'mbox',

'AnalyticsSyncHistory',

'bcookie',

'bscookie',

'li_sugr',

'lidc',

'li_gc',

'UserMatchHistory',

'_mkto_trk',

'ROLLOUT_TOKEN',

'VISITOR_INFO1_LIVE',

'VISITOR_PRIVACY_METADATA',

'YSC'

];

for ( var i = 0; i < all_cookies.length; i++ ) {

var cookie_name = all_cookies[i].split("=")[0].trim();

if ( cookie_names.includes( cookie_name ) ) {

document.cookie = cookie_name + '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;';

}

}

}

function Metrics_3P_Scripts() {

// Default to true when undefined to match oneds.php behavior for US visitors.

var GPC_DataSharingOptIn_value = ( typeof GPC_DataSharingOptIn !== 'undefined' ) ? GPC_DataSharingOptIn : true;

// If GPC_DataSharingOptIn is set and true set Metrics_3POptIn.

var Metrics_3P_OptIn = false;

if ( GPC_DataSharingOptIn_value ) {

Metrics_3P_OptIn = true;

} else {

Metrics_3P_OptIn = false;

Metrics_Clear_Cookies();

}

if ( siteConsent.getConsentFor( WcpConsent.consentCategories.Analytics ) && Metrics_3P_OptIn ) {

if ( typeof microsoftAds === "function" ) {

microsoftAds();

}

if ( typeof marketoTracking === "function" ) {

marketoTracking();

}


if ( siteConsent.getConsentFor( WcpConsent.consentCategories.Advertising ) ) {

if ( typeof adobeTargetTracking === "function" ) {

adobeTargetTracking();

}

if ( typeof clarityTracking === "function" ) {

clarityTracking();

}


if ( siteConsent.getConsentFor( WcpConsent.consentCategories.SocialMedia ) ) {

if ( typeof facebookTracking === "function" ) {

facebookTracking();

}

if ( typeof linkedinTracking === "function" ) {

linkedinTracking();

}

}

}

if ( siteConsent.getConsentFor( WcpConsent.consentCategories.SocialMedia ) ) {

}

}

if ( siteConsent.getConsentFor( WcpConsent.consentCategories.Advertising ) && Metrics_3P_OptIn ) {

if ( typeof doubleclickTracking === "function" ) {

doubleclickTracking();

}


if ( siteConsent.getConsentFor( WcpConsent.consentCategories.SocialMedia ) ) {

}

}

if ( siteConsent.getConsentFor( WcpConsent.consentCategories.SocialMedia ) && Metrics_3P_OptIn ) {

}

}

window.WcpConsent && WcpConsent.init( "en-US", "ms-cookie-banner", function (err, _siteConsent) {

if ( ! err ) {

siteConsent = _siteConsent;  //siteConsent is used to get the current consent

var consentRequiredElementExists = document.getElementById( "c-uhff-footer_managecookies" ) && siteConsent.isConsentRequired;

if ( consentRequiredElementExists ) {

document.getElementById( "c-uhff-footer_managecookies" ).classList.remove("x-hidden");

document.getElementById( "c-uhff-footer_managecookies" ).onclick = function() {

siteConsent.manageConsent();

};

}

maybeMetrics3pScripts();

} else {

console.log( "Error initializing WcpConsent: " + err );

}

}, onConsentChanged );

</script>

<script type="text/javascript" src="https://opensource.microsoft.com/blog/wp-content/mu-plugins/syntaxhighlighter/syntaxhighlighter3/scripts/shCore.js?ver=3.0.9b" id="syntaxhighlighter-core-js"></script>
<script type="text/javascript" src="https://opensource.microsoft.com/blog/wp-content/mu-plugins/syntaxhighlighter/syntaxhighlighter3/scripts/shBrushPlain.js?ver=3.0.9b" id="syntaxhighlighter-brush-plain-js"></script>
<script type="text/javascript">

(function(){

var corecss = document.createElement('link');

var themecss = document.createElement('link');

var corecssurl = "https://opensource.microsoft.com/blog/wp-content/mu-plugins/syntaxhighlighter/syntaxhighlighter3/styles/shCore.css?ver=3.0.9b";

if ( corecss.setAttribute ) {

corecss.setAttribute( "rel", "stylesheet" );

corecss.setAttribute( "type", "text/css" );

corecss.setAttribute( "href", corecssurl );

} else {

corecss.rel = "stylesheet";

corecss.href = corecssurl;

}

document.head.appendChild( corecss );

var themecssurl = "https://opensource.microsoft.com/blog/wp-content/mu-plugins/syntaxhighlighter/syntaxhighlighter3/styles/shThemeDefault.css?ver=3.0.9b";

if ( themecss.setAttribute ) {

themecss.setAttribute( "rel", "stylesheet" );

themecss.setAttribute( "type", "text/css" );

themecss.setAttribute( "href", themecssurl );

} else {

themecss.rel = "stylesheet";

themecss.href = themecssurl;

}

document.head.appendChild( themecss );

})();

SyntaxHighlighter.config.strings.expandSource = '+ expand source';

SyntaxHighlighter.config.strings.help = '?';

SyntaxHighlighter.config.strings.alert = 'SyntaxHighlighter\n\n';

SyntaxHighlighter.config.strings.noBrush = 'Can\'t find brush for: ';

SyntaxHighlighter.config.strings.brushNotHtmlScript = 'Brush wasn\'t configured for html-script option: ';

SyntaxHighlighter.defaults['pad-line-numbers'] = false;

SyntaxHighlighter.defaults['toolbar'] = false;

SyntaxHighlighter.all();

// Infinite scroll support

if ( typeof( jQuery ) !== 'undefined' ) {

jQuery( function( $ ) {

$( document.body ).on( 'post-load', function() {

SyntaxHighlighter.highlight();

} );

} );

}
</script>
<script type="text/javascript" src="https://opensource.microsoft.com/blog/wp-content/plugins/ms-performance/dist/js/frontend.js?ver=5f3e306fb3070a77a1af" id="ms_performance_frontend-js"></script>
<script type="text/javascript" src="https://opensource.microsoft.com/blog/wp-content/themes/cloud-marketing-moray/dist/js/moray-scripts.js?ver=1760641688" id="mscm-moray-script-js"></script>
<script type="text/javascript" src="https://opensource.microsoft.com/blog/wp-includes/js/dist/hooks.min.js?ver=4d63a3d491d11ffd8ac6" id="wp-hooks-js"></script>
<script type="text/javascript" src="https://opensource.microsoft.com/blog/wp-includes/js/dist/i18n.min.js?ver=5e580eb46a90c2b997e6" id="wp-i18n-js"></script>
<script type="text/javascript" id="wp-i18n-js-after">
/* <![CDATA[ */
wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } );
/* ]]> */
</script>
<script type="text/javascript" id="mscm-frontend-script-js-extra">
/* <![CDATA[ */
var cloudblogs = {"i18n":{"more":"more","less":"less","more_tags":"View more tags","less_tags":"View less tags","requiredField":"This field is required"}};
/* ]]> */
</script>
<script type="text/javascript" src="https://opensource.microsoft.com/blog/wp-content/themes/cloud-marketing-moray/dist/js/frontend.js?ver=1760641688" id="mscm-frontend-script-js"></script>
<script type="text/javascript" src="https://opensource.microsoft.com/blog/wp-includes/js/dist/dom-ready.min.js?ver=f77871ff7694fffea381" id="wp-dom-ready-js"></script>
<script type="text/javascript" src="https://opensource.microsoft.com/blog/wp-includes/js/dist/a11y.min.js?ver=3156534cc54473497e14" id="wp-a11y-js"></script>
<script type="text/javascript" id="msx-frontend-js-extra">
/* <![CDATA[ */
var msx = {"darkModeToggle":"1","i18n":{"loadMore":"Load more","loading":"Loading","loadingStart":"Loading more. Please wait.","loadingEnd":"Loading complete. %d items added.","loadMoreAriaLabel":"Load more results","light":"Switch the site theme to: dark","dark":"Switch the site theme to: light","toggleOptionLight":"Light","toggleOptionDark":"Dark","more":"more","less":"less","more_tags":"Load more taxonomies","less_tags":"Load less taxonomies"}};
/* ]]> */
</script>
<script type="text/javascript" src="https://opensource.microsoft.com/blog/wp-content/themes/xtheme/dist/js/frontend.js?ver=1760641707" id="msx-frontend-js"></script>
<script type="text/javascript" src="https://opensource.microsoft.com/blog/wp-content/plugins/ms-cloud-marketing-modules/dist/js/frontend.js?ver=1760641389" id="msxcm-frontend-js"></script>
<script type="text/javascript" src="https://opensource.microsoft.com/blog/wp-content/plugins/ms-oembeds/assets/js/vendor/focus-within.js?ver=1.3.10" id="ms-oembed-focus-within-js"></script>
<script type="text/javascript" id="ms-oembed-gif-script-js-extra">
/* <![CDATA[ */
var msgifs = {"play":"Play animated gif","pause":"Pause animated gif"};
/* ]]> */
</script>
<script type="text/javascript" src="https://opensource.microsoft.com/blog/wp-content/plugins/ms-oembeds/dist/js/ms-oembed-lib-gif.js?ver=ea91bbfc3271b6d595e7" id="ms-oembed-gif-script-js"></script>
<script type="text/javascript" id="microsoft-uhf-js-extra">
/* <![CDATA[ */
var microsoftUhfSettings = {"homePath":"\/blog\/","loginUrl":"","logoutUrl":"","scripts":[],"inline":[]};
/* ]]> */
</script>
<script type="text/javascript" src="https://opensource.microsoft.com/blog/wp-content/plugins/ms-uhf/assets/microsoft-uhf.js?ver=0.6.1" id="microsoft-uhf-js"></script>

<!-- JSLL tracking -->

<script>

// 1DS initialization.

const analytics = new oneDS.ApplicationInsights();

const config = {

instrumentationKey: "b341ec446e65436485df678003ce82f7-1d36a7a4-ef54-4cf0-93eb-ba18b3241d36-7404",

channelConfiguration: {

eventsLimitInMem: 50

},

cookieCfg: {

enabled: true,

domainCookiesEnabled: true,

domain: ".microsoft.com",

},

propertyConfiguration: {

gpcDataSharingOptIn: ( typeof GPC_DataSharingOptIn !== "undefined" ) ? GPC_DataSharingOptIn : true,

callback: {

userConsentDetails: ( typeof siteConsent !== "undefined" ) ? siteConsent.getConsent : WcpConsent.siteConsent

},

},

webAnalyticsConfiguration:{

autoCapture: {

scroll: true,

pageView: true,

onLoad: true,

onUnload: true,

click: true,

resize: true,

jsError: true

},

coreData: {"pageName":"How to automate your release notes","pageType":"Post"},

urlCollectQuery: true,

urlCollectHash: true,

},

customProperties: {

_mkto_trk: function() {

return document.cookie.replace(/(?:(?:^|.*;\s*)_mkto_trk\s*\=\s*([^;]*).*$)|^.*$/, "$1");

}

}

};

// Initialize OneDS SDK

analytics.initialize( config, [] );

</script>

<!--
Performance optimized by Redis Object Cache. Learn more: https://wprediscache.com
Retrieved 2742 objects (445 KB) from Redis using PhpRedis (v6.2.0).
-->
</object>
/en-us/opensource/blog/author/jasmine-greenaway
Related posts