Add official signed build pipeline - #1016

Merged
dagood merged 9 commits into
dotnet:masterfrom
dagood:official
Dec 19, 2019
Merged

Add official signed build pipeline#1016
dagood merged 9 commits into
dotnet:masterfrom
dagood:official

Conversation

@dagood

@dagooddagood commented Dec 18, 2019

Copy link
Copy Markdown
Member

Adds runtime-official.yml.

The new pipeline builds the subsets in release mode. It includes an AllConfigurations libraries job, which fans out into each installer job in addition to the platform-specific artifacts. After the installer build, a utility stage runs to sign and prepare the artifacts for publish. Then Arcade validation and publish stages run.

I tweaked Libraries publish a bit to let AllConfigurations bits get published. testhost doesn't seem to get built that way, causing a copy step to fail, plus publishing in an additional layout to get the OOB packages signed.

Feedback items on the runtime live CI build (#749) are not generally addressed in this PR. I changed skiptests from a parameter to a variable so that I could skip Installer tests, but not much else.

I've run this all the way through green, here: https://dev.azure.com/dnceng/internal/_build/results?buildId=460871

That build didn't have any channels auto-assigned to the branch, so no publishing happened. I'm working on trying out a validation channel in a new build now.

Tested publishing via the validation channel here: https://dev.azure.com/dnceng/internal/_build/results?buildId=461236. Looks reasonable to me. It didn't publish to dotnetcli blob storage but I believe Arcade will do that based on the channel the build's assigned to. master is already set up to default-assign to .NET Core 5 Dev, so building after merging will try that out.

@dotnet/runtime-infrastructure @mmitche

I'd removed this to run the same official build ID multiple times. Adding it back.
Comment threadeng/pipelines/runtime-official.yml
Comment threadeng/pipelines/runtime-official.yml
Comment threadeng/pipelines/runtime-official.yml
Comment threadeng/pipelines/official/stages/publish.yml Outdated
Comment threadeng/Signing.props
Comment threadeng/Signing.props
Comment threadeng/liveBuilds.targets
Comment threadeng/pipelines/common/upload-unsigned-artifacts-step.yml Outdated
Comment threadeng/Signing.props
Comment threadeng/pipelines/common/upload-unsigned-artifacts-step.yml
Comment threadeng/pipelines/libraries/build-job.yml

@safernsafern left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other than a few comments/questions, LGTM.

@dagood
dagood merged commit 385121f into dotnet:masterDec 19, 2019
@dagood
dagood deleted the official branch December 19, 2019 00:55
@safern

Copy link
Copy Markdown
Member

@dagood I notices that the allConfigurations artifacts are downloaded in every installer build step... is that expected?

Should they only be downloaded in 1 build?

Which build is the one that will sign them?

@dagood

Copy link
Copy Markdown
MemberAuthor

That's normal, that's what I meant by fan out in this bit of the description:

It includes an AllConfigurations libraries job, which fans out into each installer job in addition to the platform-specific artifacts.

Some of the AllConfigurations packages are used to build the platform-specific installers assets, so all jobs need the bits.

Which build is the one that will sign them?

All the allconfigurations nupkgs are recursively signed by the "Prepare for Publish" stage. If the installer jobs need to pull out anything and put them in the Windows installers, those specific bits are signed then (because the Windows installers can't be recursively signed later). I don't know off the top of my head what's being pulled in this way though.

There might be some time saving potential there, but AFAIK we don't know yet if unnecessary round trips or redundant signing is worse yet.

@safern

Copy link
Copy Markdown
Member

Thanks for explaining.

Some of the AllConfigurations packages are used to build the platform-specific installers assets, so all jobs need the bits.

Do we know which ones?

@dagood

Copy link
Copy Markdown
MemberAuthor

Some of the AllConfigurations packages are used to build the platform-specific installers assets, so all jobs need the bits.

Do we know which ones?

@jkoritzinsky might, I think at least Microsoft.NETCore.Platforms and Microsoft.NETCore.Targets.

@safern

Copy link
Copy Markdown
Member

The reason why I ask is because the drop of allConfigurations packages is heavy. So we might instead be able to just upload to a different drop the ones we know are needed.

@jkoritzinsky

Copy link
Copy Markdown
Member

The two packages @dagood mentioned are the packages that we need.

@ghostghost locked as resolved and limited conversation to collaborators Dec 11, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@dagood@safern@jkoritzinsky
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Add official signed build pipeline - #1016

Merged
dagood merged 9 commits into
dotnet:masterfrom
dagood:official
Dec 19, 2019
Merged

Add official signed build pipeline#1016
dagood merged 9 commits into
dotnet:masterfrom
dagood:official

Conversation

@dagood

@dagooddagood commented Dec 18, 2019

Copy link
Copy Markdown
Member

Adds runtime-official.yml.

The new pipeline builds the subsets in release mode. It includes an AllConfigurations libraries job, which fans out into each installer job in addition to the platform-specific artifacts. After the installer build, a utility stage runs to sign and prepare the artifacts for publish. Then Arcade validation and publish stages run.

I tweaked Libraries publish a bit to let AllConfigurations bits get published. testhost doesn't seem to get built that way, causing a copy step to fail, plus publishing in an additional layout to get the OOB packages signed.

Feedback items on the runtime live CI build (#749) are not generally addressed in this PR. I changed skiptests from a parameter to a variable so that I could skip Installer tests, but not much else.

I've run this all the way through green, here: https://dev.azure.com/dnceng/internal/_build/results?buildId=460871

That build didn't have any channels auto-assigned to the branch, so no publishing happened. I'm working on trying out a validation channel in a new build now.

Tested publishing via the validation channel here: https://dev.azure.com/dnceng/internal/_build/results?buildId=461236. Looks reasonable to me. It didn't publish to dotnetcli blob storage but I believe Arcade will do that based on the channel the build's assigned to. master is already set up to default-assign to .NET Core 5 Dev, so building after merging will try that out.

@dotnet/runtime-infrastructure @mmitche

I'd removed this to run the same official build ID multiple times. Adding it back.
Comment threadeng/pipelines/runtime-official.yml
Comment threadeng/pipelines/runtime-official.yml
Comment threadeng/pipelines/runtime-official.yml
Comment threadeng/pipelines/official/stages/publish.yml Outdated
Comment threadeng/Signing.props
Comment threadeng/Signing.props
Comment threadeng/liveBuilds.targets
Comment threadeng/pipelines/common/upload-unsigned-artifacts-step.yml Outdated
Comment threadeng/Signing.props
Comment threadeng/pipelines/common/upload-unsigned-artifacts-step.yml
Comment threadeng/pipelines/libraries/build-job.yml

@safernsafern left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other than a few comments/questions, LGTM.

@dagood
dagood merged commit 385121f into dotnet:masterDec 19, 2019
@dagood
dagood deleted the official branch December 19, 2019 00:55
@safern

Copy link
Copy Markdown
Member

@dagood I notices that the allConfigurations artifacts are downloaded in every installer build step... is that expected?

Should they only be downloaded in 1 build?

Which build is the one that will sign them?

@dagood

Copy link
Copy Markdown
MemberAuthor

That's normal, that's what I meant by fan out in this bit of the description:

It includes an AllConfigurations libraries job, which fans out into each installer job in addition to the platform-specific artifacts.

Some of the AllConfigurations packages are used to build the platform-specific installers assets, so all jobs need the bits.

Which build is the one that will sign them?

All the allconfigurations nupkgs are recursively signed by the "Prepare for Publish" stage. If the installer jobs need to pull out anything and put them in the Windows installers, those specific bits are signed then (because the Windows installers can't be recursively signed later). I don't know off the top of my head what's being pulled in this way though.

There might be some time saving potential there, but AFAIK we don't know yet if unnecessary round trips or redundant signing is worse yet.

@safern

Copy link
Copy Markdown
Member

Thanks for explaining.

Some of the AllConfigurations packages are used to build the platform-specific installers assets, so all jobs need the bits.

Do we know which ones?

@dagood

Copy link
Copy Markdown
MemberAuthor

Some of the AllConfigurations packages are used to build the platform-specific installers assets, so all jobs need the bits.

Do we know which ones?

@jkoritzinsky might, I think at least Microsoft.NETCore.Platforms and Microsoft.NETCore.Targets.

@safern

Copy link
Copy Markdown
Member

The reason why I ask is because the drop of allConfigurations packages is heavy. So we might instead be able to just upload to a different drop the ones we know are needed.

@jkoritzinsky

Copy link
Copy Markdown
Member

The two packages @dagood mentioned are the packages that we need.

@ghostghost locked as resolved and limited conversation to collaborators Dec 11, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@dagood@safern@jkoritzinsky
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add official signed build pipeline - #1016

Merged
dagood merged 9 commits into
dotnet:masterfrom
dagood:official
Dec 19, 2019
Merged

Add official signed build pipeline#1016
dagood merged 9 commits into
dotnet:masterfrom
dagood:official

Conversation

@dagood

@dagooddagood commented Dec 18, 2019

Copy link
Copy Markdown
Member

Adds runtime-official.yml.

The new pipeline builds the subsets in release mode. It includes an AllConfigurations libraries job, which fans out into each installer job in addition to the platform-specific artifacts. After the installer build, a utility stage runs to sign and prepare the artifacts for publish. Then Arcade validation and publish stages run.

I tweaked Libraries publish a bit to let AllConfigurations bits get published. testhost doesn't seem to get built that way, causing a copy step to fail, plus publishing in an additional layout to get the OOB packages signed.

Feedback items on the runtime live CI build (#749) are not generally addressed in this PR. I changed skiptests from a parameter to a variable so that I could skip Installer tests, but not much else.

I've run this all the way through green, here: https://dev.azure.com/dnceng/internal/_build/results?buildId=460871

That build didn't have any channels auto-assigned to the branch, so no publishing happened. I'm working on trying out a validation channel in a new build now.

Tested publishing via the validation channel here: https://dev.azure.com/dnceng/internal/_build/results?buildId=461236. Looks reasonable to me. It didn't publish to dotnetcli blob storage but I believe Arcade will do that based on the channel the build's assigned to. master is already set up to default-assign to .NET Core 5 Dev, so building after merging will try that out.

@dotnet/runtime-infrastructure @mmitche

I'd removed this to run the same official build ID multiple times. Adding it back.
Comment threadeng/pipelines/runtime-official.yml
Comment threadeng/pipelines/runtime-official.yml
Comment threadeng/pipelines/runtime-official.yml
Comment threadeng/pipelines/official/stages/publish.yml Outdated
Comment threadeng/Signing.props
Comment threadeng/Signing.props
Comment threadeng/liveBuilds.targets
Comment threadeng/pipelines/common/upload-unsigned-artifacts-step.yml Outdated
Comment threadeng/Signing.props
Comment threadeng/pipelines/common/upload-unsigned-artifacts-step.yml
Comment threadeng/pipelines/libraries/build-job.yml

@safernsafern left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other than a few comments/questions, LGTM.

@dagood
dagood merged commit 385121f into dotnet:masterDec 19, 2019
@dagood
dagood deleted the official branch December 19, 2019 00:55
@safern

Copy link
Copy Markdown
Member

@dagood I notices that the allConfigurations artifacts are downloaded in every installer build step... is that expected?

Should they only be downloaded in 1 build?

Which build is the one that will sign them?

@dagood

Copy link
Copy Markdown
MemberAuthor

That's normal, that's what I meant by fan out in this bit of the description:

It includes an AllConfigurations libraries job, which fans out into each installer job in addition to the platform-specific artifacts.

Some of the AllConfigurations packages are used to build the platform-specific installers assets, so all jobs need the bits.

Which build is the one that will sign them?

All the allconfigurations nupkgs are recursively signed by the "Prepare for Publish" stage. If the installer jobs need to pull out anything and put them in the Windows installers, those specific bits are signed then (because the Windows installers can't be recursively signed later). I don't know off the top of my head what's being pulled in this way though.

There might be some time saving potential there, but AFAIK we don't know yet if unnecessary round trips or redundant signing is worse yet.

@safern

Copy link
Copy Markdown
Member

Thanks for explaining.

Some of the AllConfigurations packages are used to build the platform-specific installers assets, so all jobs need the bits.

Do we know which ones?

@dagood

Copy link
Copy Markdown
MemberAuthor

Some of the AllConfigurations packages are used to build the platform-specific installers assets, so all jobs need the bits.

Do we know which ones?

@jkoritzinsky might, I think at least Microsoft.NETCore.Platforms and Microsoft.NETCore.Targets.

@safern

Copy link
Copy Markdown
Member

The reason why I ask is because the drop of allConfigurations packages is heavy. So we might instead be able to just upload to a different drop the ones we know are needed.

@jkoritzinsky

Copy link
Copy Markdown
Member

The two packages @dagood mentioned are the packages that we need.

@ghostghost locked as resolved and limited conversation to collaborators Dec 11, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@dagood@safern@jkoritzinsky
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add official signed build pipeline - #1016

Merged
dagood merged 9 commits into
dotnet:masterfrom
dagood:official
Dec 19, 2019
Merged

Add official signed build pipeline#1016
dagood merged 9 commits into
dotnet:masterfrom
dagood:official

Conversation

@dagood

@dagooddagood commented Dec 18, 2019

Copy link
Copy Markdown
Member

Adds runtime-official.yml.

The new pipeline builds the subsets in release mode. It includes an AllConfigurations libraries job, which fans out into each installer job in addition to the platform-specific artifacts. After the installer build, a utility stage runs to sign and prepare the artifacts for publish. Then Arcade validation and publish stages run.

I tweaked Libraries publish a bit to let AllConfigurations bits get published. testhost doesn't seem to get built that way, causing a copy step to fail, plus publishing in an additional layout to get the OOB packages signed.

Feedback items on the runtime live CI build (#749) are not generally addressed in this PR. I changed skiptests from a parameter to a variable so that I could skip Installer tests, but not much else.

I've run this all the way through green, here: https://dev.azure.com/dnceng/internal/_build/results?buildId=460871

That build didn't have any channels auto-assigned to the branch, so no publishing happened. I'm working on trying out a validation channel in a new build now.

Tested publishing via the validation channel here: https://dev.azure.com/dnceng/internal/_build/results?buildId=461236. Looks reasonable to me. It didn't publish to dotnetcli blob storage but I believe Arcade will do that based on the channel the build's assigned to. master is already set up to default-assign to .NET Core 5 Dev, so building after merging will try that out.

@dotnet/runtime-infrastructure @mmitche

I'd removed this to run the same official build ID multiple times. Adding it back.
Comment threadeng/pipelines/runtime-official.yml
Comment threadeng/pipelines/runtime-official.yml
Comment threadeng/pipelines/runtime-official.yml
Comment threadeng/pipelines/official/stages/publish.yml Outdated
Comment threadeng/Signing.props
Comment threadeng/Signing.props
Comment threadeng/liveBuilds.targets
Comment threadeng/pipelines/common/upload-unsigned-artifacts-step.yml Outdated
Comment threadeng/Signing.props
Comment threadeng/pipelines/common/upload-unsigned-artifacts-step.yml
Comment threadeng/pipelines/libraries/build-job.yml

@safernsafern left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other than a few comments/questions, LGTM.

@dagood
dagood merged commit 385121f into dotnet:masterDec 19, 2019
@dagood
dagood deleted the official branch December 19, 2019 00:55
@safern

Copy link
Copy Markdown
Member

@dagood I notices that the allConfigurations artifacts are downloaded in every installer build step... is that expected?

Should they only be downloaded in 1 build?

Which build is the one that will sign them?

@dagood

Copy link
Copy Markdown
MemberAuthor

That's normal, that's what I meant by fan out in this bit of the description:

It includes an AllConfigurations libraries job, which fans out into each installer job in addition to the platform-specific artifacts.

Some of the AllConfigurations packages are used to build the platform-specific installers assets, so all jobs need the bits.

Which build is the one that will sign them?

All the allconfigurations nupkgs are recursively signed by the "Prepare for Publish" stage. If the installer jobs need to pull out anything and put them in the Windows installers, those specific bits are signed then (because the Windows installers can't be recursively signed later). I don't know off the top of my head what's being pulled in this way though.

There might be some time saving potential there, but AFAIK we don't know yet if unnecessary round trips or redundant signing is worse yet.

@safern

Copy link
Copy Markdown
Member

Thanks for explaining.

Some of the AllConfigurations packages are used to build the platform-specific installers assets, so all jobs need the bits.

Do we know which ones?

@dagood

Copy link
Copy Markdown
MemberAuthor

Some of the AllConfigurations packages are used to build the platform-specific installers assets, so all jobs need the bits.

Do we know which ones?

@jkoritzinsky might, I think at least Microsoft.NETCore.Platforms and Microsoft.NETCore.Targets.

@safern

Copy link
Copy Markdown
Member

The reason why I ask is because the drop of allConfigurations packages is heavy. So we might instead be able to just upload to a different drop the ones we know are needed.

@jkoritzinsky

Copy link
Copy Markdown
Member

The two packages @dagood mentioned are the packages that we need.

@ghostghost locked as resolved and limited conversation to collaborators Dec 11, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@dagood@safern@jkoritzinsky
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Add official signed build pipeline - #1016

Merged
dagood merged 9 commits into
dotnet:masterfrom
dagood:official
Dec 19, 2019
Merged

Add official signed build pipeline#1016
dagood merged 9 commits into
dotnet:masterfrom
dagood:official

Conversation

@dagood

@dagooddagood commented Dec 18, 2019

Copy link
Copy Markdown
Member

Adds runtime-official.yml.

The new pipeline builds the subsets in release mode. It includes an AllConfigurations libraries job, which fans out into each installer job in addition to the platform-specific artifacts. After the installer build, a utility stage runs to sign and prepare the artifacts for publish. Then Arcade validation and publish stages run.

I tweaked Libraries publish a bit to let AllConfigurations bits get published. testhost doesn't seem to get built that way, causing a copy step to fail, plus publishing in an additional layout to get the OOB packages signed.

Feedback items on the runtime live CI build (#749) are not generally addressed in this PR. I changed skiptests from a parameter to a variable so that I could skip Installer tests, but not much else.

I've run this all the way through green, here: https://dev.azure.com/dnceng/internal/_build/results?buildId=460871

That build didn't have any channels auto-assigned to the branch, so no publishing happened. I'm working on trying out a validation channel in a new build now.

Tested publishing via the validation channel here: https://dev.azure.com/dnceng/internal/_build/results?buildId=461236. Looks reasonable to me. It didn't publish to dotnetcli blob storage but I believe Arcade will do that based on the channel the build's assigned to. master is already set up to default-assign to .NET Core 5 Dev, so building after merging will try that out.

@dotnet/runtime-infrastructure @mmitche

I'd removed this to run the same official build ID multiple times. Adding it back.
Comment threadeng/pipelines/runtime-official.yml
Comment threadeng/pipelines/runtime-official.yml
Comment threadeng/pipelines/runtime-official.yml
Comment threadeng/pipelines/official/stages/publish.yml Outdated
Comment threadeng/Signing.props
Comment threadeng/Signing.props
Comment threadeng/liveBuilds.targets
Comment threadeng/pipelines/common/upload-unsigned-artifacts-step.yml Outdated
Comment threadeng/Signing.props
Comment threadeng/pipelines/common/upload-unsigned-artifacts-step.yml
Comment threadeng/pipelines/libraries/build-job.yml

@safernsafern left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other than a few comments/questions, LGTM.

@dagood
dagood merged commit 385121f into dotnet:masterDec 19, 2019
@dagood
dagood deleted the official branch December 19, 2019 00:55
@safern

Copy link
Copy Markdown
Member

@dagood I notices that the allConfigurations artifacts are downloaded in every installer build step... is that expected?

Should they only be downloaded in 1 build?

Which build is the one that will sign them?

@dagood

Copy link
Copy Markdown
MemberAuthor

That's normal, that's what I meant by fan out in this bit of the description:

It includes an AllConfigurations libraries job, which fans out into each installer job in addition to the platform-specific artifacts.

Some of the AllConfigurations packages are used to build the platform-specific installers assets, so all jobs need the bits.

Which build is the one that will sign them?

All the allconfigurations nupkgs are recursively signed by the "Prepare for Publish" stage. If the installer jobs need to pull out anything and put them in the Windows installers, those specific bits are signed then (because the Windows installers can't be recursively signed later). I don't know off the top of my head what's being pulled in this way though.

There might be some time saving potential there, but AFAIK we don't know yet if unnecessary round trips or redundant signing is worse yet.

@safern

Copy link
Copy Markdown
Member

Thanks for explaining.

Some of the AllConfigurations packages are used to build the platform-specific installers assets, so all jobs need the bits.

Do we know which ones?

@dagood

Copy link
Copy Markdown
MemberAuthor

Some of the AllConfigurations packages are used to build the platform-specific installers assets, so all jobs need the bits.

Do we know which ones?

@jkoritzinsky might, I think at least Microsoft.NETCore.Platforms and Microsoft.NETCore.Targets.

@safern

Copy link
Copy Markdown
Member

The reason why I ask is because the drop of allConfigurations packages is heavy. So we might instead be able to just upload to a different drop the ones we know are needed.

@jkoritzinsky

Copy link
Copy Markdown
Member

The two packages @dagood mentioned are the packages that we need.

@ghostghost locked as resolved and limited conversation to collaborators Dec 11, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@dagood@safern@jkoritzinsky
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add official signed build pipeline - #1016

Merged
dagood merged 9 commits into
dotnet:masterfrom
dagood:official
Dec 19, 2019
Merged

Add official signed build pipeline#1016
dagood merged 9 commits into
dotnet:masterfrom
dagood:official

Conversation

@dagood

@dagooddagood commented Dec 18, 2019

Copy link
Copy Markdown
Member

Adds runtime-official.yml.

The new pipeline builds the subsets in release mode. It includes an AllConfigurations libraries job, which fans out into each installer job in addition to the platform-specific artifacts. After the installer build, a utility stage runs to sign and prepare the artifacts for publish. Then Arcade validation and publish stages run.

I tweaked Libraries publish a bit to let AllConfigurations bits get published. testhost doesn't seem to get built that way, causing a copy step to fail, plus publishing in an additional layout to get the OOB packages signed.

Feedback items on the runtime live CI build (#749) are not generally addressed in this PR. I changed skiptests from a parameter to a variable so that I could skip Installer tests, but not much else.

I've run this all the way through green, here: https://dev.azure.com/dnceng/internal/_build/results?buildId=460871

That build didn't have any channels auto-assigned to the branch, so no publishing happened. I'm working on trying out a validation channel in a new build now.

Tested publishing via the validation channel here: https://dev.azure.com/dnceng/internal/_build/results?buildId=461236. Looks reasonable to me. It didn't publish to dotnetcli blob storage but I believe Arcade will do that based on the channel the build's assigned to. master is already set up to default-assign to .NET Core 5 Dev, so building after merging will try that out.

@dotnet/runtime-infrastructure @mmitche

I'd removed this to run the same official build ID multiple times. Adding it back.
Comment threadeng/pipelines/runtime-official.yml
Comment threadeng/pipelines/runtime-official.yml
Comment threadeng/pipelines/runtime-official.yml
Comment threadeng/pipelines/official/stages/publish.yml Outdated
Comment threadeng/Signing.props
Comment threadeng/Signing.props
Comment threadeng/liveBuilds.targets
Comment threadeng/pipelines/common/upload-unsigned-artifacts-step.yml Outdated
Comment threadeng/Signing.props
Comment threadeng/pipelines/common/upload-unsigned-artifacts-step.yml
Comment threadeng/pipelines/libraries/build-job.yml

@safernsafern left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other than a few comments/questions, LGTM.

@dagood
dagood merged commit 385121f into dotnet:masterDec 19, 2019
@dagood
dagood deleted the official branch December 19, 2019 00:55
@safern

Copy link
Copy Markdown
Member

@dagood I notices that the allConfigurations artifacts are downloaded in every installer build step... is that expected?

Should they only be downloaded in 1 build?

Which build is the one that will sign them?

@dagood

Copy link
Copy Markdown
MemberAuthor

That's normal, that's what I meant by fan out in this bit of the description:

It includes an AllConfigurations libraries job, which fans out into each installer job in addition to the platform-specific artifacts.

Some of the AllConfigurations packages are used to build the platform-specific installers assets, so all jobs need the bits.

Which build is the one that will sign them?

All the allconfigurations nupkgs are recursively signed by the "Prepare for Publish" stage. If the installer jobs need to pull out anything and put them in the Windows installers, those specific bits are signed then (because the Windows installers can't be recursively signed later). I don't know off the top of my head what's being pulled in this way though.

There might be some time saving potential there, but AFAIK we don't know yet if unnecessary round trips or redundant signing is worse yet.

@safern

Copy link
Copy Markdown
Member

Thanks for explaining.

Some of the AllConfigurations packages are used to build the platform-specific installers assets, so all jobs need the bits.

Do we know which ones?

@dagood

Copy link
Copy Markdown
MemberAuthor

Some of the AllConfigurations packages are used to build the platform-specific installers assets, so all jobs need the bits.

Do we know which ones?

@jkoritzinsky might, I think at least Microsoft.NETCore.Platforms and Microsoft.NETCore.Targets.

@safern

Copy link
Copy Markdown
Member

The reason why I ask is because the drop of allConfigurations packages is heavy. So we might instead be able to just upload to a different drop the ones we know are needed.

@jkoritzinsky

Copy link
Copy Markdown
Member

The two packages @dagood mentioned are the packages that we need.

@ghostghost locked as resolved and limited conversation to collaborators Dec 11, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@dagood@safern@jkoritzinsky
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add official signed build pipeline - #1016

Merged
dagood merged 9 commits into
dotnet:masterfrom
dagood:official
Dec 19, 2019
Merged

Add official signed build pipeline#1016
dagood merged 9 commits into
dotnet:masterfrom
dagood:official

Conversation

@dagood

@dagooddagood commented Dec 18, 2019

Copy link
Copy Markdown
Member

Adds runtime-official.yml.

The new pipeline builds the subsets in release mode. It includes an AllConfigurations libraries job, which fans out into each installer job in addition to the platform-specific artifacts. After the installer build, a utility stage runs to sign and prepare the artifacts for publish. Then Arcade validation and publish stages run.

I tweaked Libraries publish a bit to let AllConfigurations bits get published. testhost doesn't seem to get built that way, causing a copy step to fail, plus publishing in an additional layout to get the OOB packages signed.

Feedback items on the runtime live CI build (#749) are not generally addressed in this PR. I changed skiptests from a parameter to a variable so that I could skip Installer tests, but not much else.

I've run this all the way through green, here: https://dev.azure.com/dnceng/internal/_build/results?buildId=460871

That build didn't have any channels auto-assigned to the branch, so no publishing happened. I'm working on trying out a validation channel in a new build now.

Tested publishing via the validation channel here: https://dev.azure.com/dnceng/internal/_build/results?buildId=461236. Looks reasonable to me. It didn't publish to dotnetcli blob storage but I believe Arcade will do that based on the channel the build's assigned to. master is already set up to default-assign to .NET Core 5 Dev, so building after merging will try that out.

@dotnet/runtime-infrastructure @mmitche

I'd removed this to run the same official build ID multiple times. Adding it back.
Comment threadeng/pipelines/runtime-official.yml
Comment threadeng/pipelines/runtime-official.yml
Comment threadeng/pipelines/runtime-official.yml
Comment threadeng/pipelines/official/stages/publish.yml Outdated
Comment threadeng/Signing.props
Comment threadeng/Signing.props
Comment threadeng/liveBuilds.targets
Comment threadeng/pipelines/common/upload-unsigned-artifacts-step.yml Outdated
Comment threadeng/Signing.props
Comment threadeng/pipelines/common/upload-unsigned-artifacts-step.yml
Comment threadeng/pipelines/libraries/build-job.yml

@safernsafern left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other than a few comments/questions, LGTM.

@dagood
dagood merged commit 385121f into dotnet:masterDec 19, 2019
@dagood
dagood deleted the official branch December 19, 2019 00:55
@safern

Copy link
Copy Markdown
Member

@dagood I notices that the allConfigurations artifacts are downloaded in every installer build step... is that expected?

Should they only be downloaded in 1 build?

Which build is the one that will sign them?

@dagood

Copy link
Copy Markdown
MemberAuthor

That's normal, that's what I meant by fan out in this bit of the description:

It includes an AllConfigurations libraries job, which fans out into each installer job in addition to the platform-specific artifacts.

Some of the AllConfigurations packages are used to build the platform-specific installers assets, so all jobs need the bits.

Which build is the one that will sign them?

All the allconfigurations nupkgs are recursively signed by the "Prepare for Publish" stage. If the installer jobs need to pull out anything and put them in the Windows installers, those specific bits are signed then (because the Windows installers can't be recursively signed later). I don't know off the top of my head what's being pulled in this way though.

There might be some time saving potential there, but AFAIK we don't know yet if unnecessary round trips or redundant signing is worse yet.

@safern

Copy link
Copy Markdown
Member

Thanks for explaining.

Some of the AllConfigurations packages are used to build the platform-specific installers assets, so all jobs need the bits.

Do we know which ones?

@dagood

Copy link
Copy Markdown
MemberAuthor

Some of the AllConfigurations packages are used to build the platform-specific installers assets, so all jobs need the bits.

Do we know which ones?

@jkoritzinsky might, I think at least Microsoft.NETCore.Platforms and Microsoft.NETCore.Targets.

@safern

Copy link
Copy Markdown
Member

The reason why I ask is because the drop of allConfigurations packages is heavy. So we might instead be able to just upload to a different drop the ones we know are needed.

@jkoritzinsky

Copy link
Copy Markdown
Member

The two packages @dagood mentioned are the packages that we need.

@ghostghost locked as resolved and limited conversation to collaborators Dec 11, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@dagood@safern@jkoritzinsky
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Add official signed build pipeline - #1016

Merged
dagood merged 9 commits into
dotnet:masterfrom
dagood:official
Dec 19, 2019
Merged

Add official signed build pipeline#1016
dagood merged 9 commits into
dotnet:masterfrom
dagood:official

Conversation

@dagood

@dagooddagood commented Dec 18, 2019

Copy link
Copy Markdown
Member

Adds runtime-official.yml.

The new pipeline builds the subsets in release mode. It includes an AllConfigurations libraries job, which fans out into each installer job in addition to the platform-specific artifacts. After the installer build, a utility stage runs to sign and prepare the artifacts for publish. Then Arcade validation and publish stages run.

I tweaked Libraries publish a bit to let AllConfigurations bits get published. testhost doesn't seem to get built that way, causing a copy step to fail, plus publishing in an additional layout to get the OOB packages signed.

Feedback items on the runtime live CI build (#749) are not generally addressed in this PR. I changed skiptests from a parameter to a variable so that I could skip Installer tests, but not much else.

I've run this all the way through green, here: https://dev.azure.com/dnceng/internal/_build/results?buildId=460871

That build didn't have any channels auto-assigned to the branch, so no publishing happened. I'm working on trying out a validation channel in a new build now.

Tested publishing via the validation channel here: https://dev.azure.com/dnceng/internal/_build/results?buildId=461236. Looks reasonable to me. It didn't publish to dotnetcli blob storage but I believe Arcade will do that based on the channel the build's assigned to. master is already set up to default-assign to .NET Core 5 Dev, so building after merging will try that out.

@dotnet/runtime-infrastructure @mmitche

I'd removed this to run the same official build ID multiple times. Adding it back.
Comment threadeng/pipelines/runtime-official.yml
Comment threadeng/pipelines/runtime-official.yml
Comment threadeng/pipelines/runtime-official.yml
Comment threadeng/pipelines/official/stages/publish.yml Outdated
Comment threadeng/Signing.props
Comment threadeng/Signing.props
Comment threadeng/liveBuilds.targets
Comment threadeng/pipelines/common/upload-unsigned-artifacts-step.yml Outdated
Comment threadeng/Signing.props
Comment threadeng/pipelines/common/upload-unsigned-artifacts-step.yml
Comment threadeng/pipelines/libraries/build-job.yml

@safernsafern left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other than a few comments/questions, LGTM.

@dagood
dagood merged commit 385121f into dotnet:masterDec 19, 2019
@dagood
dagood deleted the official branch December 19, 2019 00:55
@safern

Copy link
Copy Markdown
Member

@dagood I notices that the allConfigurations artifacts are downloaded in every installer build step... is that expected?

Should they only be downloaded in 1 build?

Which build is the one that will sign them?

@dagood

Copy link
Copy Markdown
MemberAuthor

That's normal, that's what I meant by fan out in this bit of the description:

It includes an AllConfigurations libraries job, which fans out into each installer job in addition to the platform-specific artifacts.

Some of the AllConfigurations packages are used to build the platform-specific installers assets, so all jobs need the bits.

Which build is the one that will sign them?

All the allconfigurations nupkgs are recursively signed by the "Prepare for Publish" stage. If the installer jobs need to pull out anything and put them in the Windows installers, those specific bits are signed then (because the Windows installers can't be recursively signed later). I don't know off the top of my head what's being pulled in this way though.

There might be some time saving potential there, but AFAIK we don't know yet if unnecessary round trips or redundant signing is worse yet.

@safern

Copy link
Copy Markdown
Member

Thanks for explaining.

Some of the AllConfigurations packages are used to build the platform-specific installers assets, so all jobs need the bits.

Do we know which ones?

@dagood

Copy link
Copy Markdown
MemberAuthor

Some of the AllConfigurations packages are used to build the platform-specific installers assets, so all jobs need the bits.

Do we know which ones?

@jkoritzinsky might, I think at least Microsoft.NETCore.Platforms and Microsoft.NETCore.Targets.

@safern

Copy link
Copy Markdown
Member

The reason why I ask is because the drop of allConfigurations packages is heavy. So we might instead be able to just upload to a different drop the ones we know are needed.

@jkoritzinsky

Copy link
Copy Markdown
Member

The two packages @dagood mentioned are the packages that we need.

@ghostghost locked as resolved and limited conversation to collaborators Dec 11, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@dagood@safern@jkoritzinsky