<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">Blog posts by owaiskhan</title><link href="http://world.optimizely.com" /><updated>2026-06-16T13:43:41.0000000Z</updated><id>https://world.optimizely.com/blogs/owaiskhan/</id> <generator uri="http://world.optimizely.com" version="2.0">Optimizely World</generator> <entry><title>CI/CD deployment failure in Optimizely DXP Passportal. .NET 10 and GitHub Runner Compatibility</title><link href="https://world.optimizely.com/blogs/owaiskhan/dates/2026/6/cicd-deployment-failure-in-optimizely-dxp-passportal/" /><id>&lt;h3&gt;.NET 10 and GitHub Runner Compatibility&lt;/h3&gt;
&lt;p class=&quot;isSelectedEnd&quot;&gt;With the release of .NET 10, the &lt;code&gt;windows-latest&lt;/code&gt; and &lt;code&gt;ubuntu-latest&lt;/code&gt; GitHub Actions runners may use the latest installed .NET SDK by default.&lt;/p&gt;
&lt;p class=&quot;isSelectedEnd&quot;&gt;As a result, if your application is built using a different SDK version and no SDK version is explicitly specified, the build and deployment process may use the latest SDK available on the runner. This can lead to build failures, deployment issues, or the website failing to start after deployment.&lt;/p&gt;
&lt;p class=&quot;isSelectedEnd&quot;&gt;To avoid this issue, define the required SDK version in a &lt;code&gt;global.json&lt;/code&gt; file at the root of your repository. This ensures that the build pipeline consistently uses the intended .NET SDK version regardless of updates to the GitHub-hosted runners.&lt;/p&gt;
&lt;p class=&quot;isSelectedEnd&quot;&gt;Example:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;sdk&quot;: {
    &quot;version&quot;: &quot;8.0.100&quot;
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;By pinning the SDK version in &lt;code&gt;global.json&lt;/code&gt;, you can ensure predictable builds and deployments across different environments and runner updates.&lt;/p&gt;</id><updated>2026-06-16T13:43:41.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>Integrating Optimizely CMP Assets into an Existing Document Listing Page</title><link href="https://world.optimizely.com/blogs/owaiskhan/dates/2026/6/optimizely-cmp-assets-with-optimizely-episerver-search-index/" /><id>&lt;p class=&quot;isSelectedEnd&quot;&gt;Integrating Optimizely CMP Assets into an Existing Document Listing Page&lt;/p&gt;
&lt;p class=&quot;isSelectedEnd&quot;&gt;In some projects, there may be a requirement to retrieve assets from Optimizely CMP and display them alongside existing content on the website.&lt;/p&gt;
&lt;h3&gt;Scenario&lt;/h3&gt;
&lt;p class=&quot;isSelectedEnd&quot;&gt;Consider an existing &lt;strong&gt;Document Listing&lt;/strong&gt; page where all documents are managed in &lt;strong&gt;Optimizely CMS&lt;/strong&gt; and indexed through &lt;strong&gt;Episerver Search &amp;amp; Navigation (Find)&lt;/strong&gt;. A new requirement is introduced to display assets stored in &lt;strong&gt;Optimizely CMP&lt;/strong&gt; within the same listing page, together with CMS documents.&lt;/p&gt;
&lt;h3&gt;Available Options for Retrieving CMP Assets&lt;/h3&gt;
&lt;h4&gt;1. Optimizely CMP Graph API&lt;/h4&gt;
&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;a href=&quot;https://cg.optimizely.com/app/graphiql?auth={singlekey&quot;&gt;https://cg.optimizely.com/app/graphiql?auth={singlekey&lt;/a&gt;}&lt;/p&gt;
&lt;h4&gt;2. Optimizely CMP Open REST API&lt;/h4&gt;
&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;a href=&quot;https://www.postman.com/optimizely/optimizely-s-postman-collection-s/collection/9vnewz3/optimizely-cmp-open-rest-api?sideView=agentMode&quot;&gt;https://www.postman.com/optimizely/optimizely-s-postman-collection-s/collection/9vnewz3/optimizely-cmp-open-rest-api?sideView=agentMode&lt;/a&gt;&lt;/p&gt;
&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;a href=&quot;https://developers.welcomesoftware.com/openapi.html&quot;&gt;https://developers.welcomesoftware.com/openapi.html&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Proposed Solution&lt;/h3&gt;
&lt;p class=&quot;isSelectedEnd&quot;&gt;Implement a dedicated &lt;strong&gt;CMP API Service&lt;/strong&gt; responsible for retrieving assets from Optimizely CMP. The service should:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fetch asset data using either the CMP Graph API or Open REST API.&lt;/li&gt;
&lt;li&gt;Map CMP asset data to a common document model already used by the existing Document Listing page.&lt;/li&gt;
&lt;li&gt;Merge CMP assets and Optimizely CMS documents into a unified collection.&lt;/li&gt;
&lt;li&gt;Apply existing filtering, sorting, and pagination logic consistently across both content sources.&lt;/li&gt;
&lt;li&gt;Render the combined results on the same listing page without requiring significant changes to the front-end implementation.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This approach allows the existing listing page to support content from multiple sources while maintaining a consistent user experience and minimizing changes to the current architecture.&lt;/p&gt;</id><updated>2026-06-16T12:56:07.0000000Z</updated><summary type="html">Blog post</summary></entry></feed>