From 06ed83878c7ef7b23ca8fddda62bfe04475ee012 Mon Sep 17 00:00:00 2001 From: Bob Brown Date: Mon, 19 Aug 2024 16:38:58 -0700 Subject: [PATCH] Release pipelines for themes and extension pack (#12589) --- Build/package/cpptools_extension_pack.yml | 48 ++++++++++++++++++++ Build/package/cpptools_themes.yml | 48 ++++++++++++++++++++ Build/package/jobs_package_vsix.yml | 54 +++++++++++++++++++++++ Build/publish/cpptools_extension_pack.yml | 43 ++++++++++++++++++ Build/publish/cpptools_themes.yml | 43 ++++++++++++++++++ Build/publish/jobs_manual_validation.yml | 19 ++++++++ Build/publish/jobs_publish_vsix.yml | 44 ++++++++++++++++++ 7 files changed, 299 insertions(+) create mode 100644 Build/package/cpptools_extension_pack.yml create mode 100644 Build/package/cpptools_themes.yml create mode 100644 Build/package/jobs_package_vsix.yml create mode 100644 Build/publish/cpptools_extension_pack.yml create mode 100644 Build/publish/cpptools_themes.yml create mode 100644 Build/publish/jobs_manual_validation.yml create mode 100644 Build/publish/jobs_publish_vsix.yml diff --git a/Build/package/cpptools_extension_pack.yml b/Build/package/cpptools_extension_pack.yml new file mode 100644 index 0000000000..ef49f2128a --- /dev/null +++ b/Build/package/cpptools_extension_pack.yml @@ -0,0 +1,48 @@ +name: $(date:yyyyMMdd)$(rev:.r) +trigger: none +pr: none + +parameters: +- name: verifyVersion + displayName: Attest version in package.json is correct + type: boolean + default: false +- name: verifyReadme + displayName: Attest README.md is updated + type: boolean + default: false + +resources: + repositories: + - repository: MicroBuildTemplate + type: git + name: 1ESPipelineTemplates/MicroBuildTemplate + ref: refs/tags/release + +extends: + template: azure-pipelines/MicroBuild.1ES.Official.yml@MicroBuildTemplate + parameters: + pool: + name: AzurePipelines-EO + image: AzurePipelinesWindows2022compliantGPT + os: windows + sdl: + sourceAnalysisPool: + name: AzurePipelines-EO + image: AzurePipelinesWindows2022compliantGPT + os: windows + + stages: + - stage: package + jobs: + # Introduce pipeline compilation errors to block scheduling if the requisite parameters are not set + - ${{ if not(eq(parameters.verifyVersion, true)) }}: + - 'The version in package.json should be updated before scheduling the pipeline.' + + - ${{ if not(eq(parameters.verifyReadme, true)) }}: + - 'README.md should be updated before scheduling the pipeline.' + + - template: /Build/package/jobs_package_vsix.yml@self + parameters: + vsixName: cpptools-extension-pack.vsix + srcDir: ExtensionPack \ No newline at end of file diff --git a/Build/package/cpptools_themes.yml b/Build/package/cpptools_themes.yml new file mode 100644 index 0000000000..eec1ac9f24 --- /dev/null +++ b/Build/package/cpptools_themes.yml @@ -0,0 +1,48 @@ +name: $(date:yyyyMMdd)$(rev:.r) +trigger: none +pr: none + +parameters: +- name: verifyVersion + displayName: Attest version in package.json is correct + type: boolean + default: false +- name: verifyReadme + displayName: Attest README.md is updated + type: boolean + default: false + +resources: + repositories: + - repository: MicroBuildTemplate + type: git + name: 1ESPipelineTemplates/MicroBuildTemplate + ref: refs/tags/release + +extends: + template: azure-pipelines/MicroBuild.1ES.Official.yml@MicroBuildTemplate + parameters: + pool: + name: AzurePipelines-EO + image: AzurePipelinesWindows2022compliantGPT + os: windows + sdl: + sourceAnalysisPool: + name: AzurePipelines-EO + image: AzurePipelinesWindows2022compliantGPT + os: windows + + stages: + - stage: package + jobs: + # Introduce pipeline compilation errors to block scheduling if the requisite parameters are not set + - ${{ if not(eq(parameters.verifyVersion, true)) }}: + - 'The version in package.json should be updated before scheduling the pipeline.' + + - ${{ if not(eq(parameters.verifyReadme, true)) }}: + - 'README.md should be updated before scheduling the pipeline.' + + - template: /Build/package/jobs_package_vsix.yml@self + parameters: + vsixName: cpptools-themes.vsix + srcDir: Themes \ No newline at end of file diff --git a/Build/package/jobs_package_vsix.yml b/Build/package/jobs_package_vsix.yml new file mode 100644 index 0000000000..abbc5026da --- /dev/null +++ b/Build/package/jobs_package_vsix.yml @@ -0,0 +1,54 @@ +parameters: +- name: vsixName + type: string + default: '' +- name: srcDir + type: string + default: '' + +jobs: +- job: package + displayName: Build ${{ parameters.vsixName }} + timeoutInMinutes: 30 + cancelTimeoutInMinutes: 1 + templateContext: + outputs: + - output: pipelineArtifact + displayName: '${{ parameters.vsixName }}' + targetPath: $(Build.ArtifactStagingDirectory)\vsix + artifactName: vsix + + steps: + - checkout: self + + - task: UseNode@1 + displayName: Use Node 18.x + inputs: + version: 18.x + + - task: Npm@0 + displayName: Install vsce + inputs: + arguments: --global @vscode/vsce + + - task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@3 + displayName: Use Yarn 1.x + + - task: CmdLine@1 + displayName: Create Staging Directory + inputs: + filename: mkdir + arguments: $(Build.ArtifactStagingDirectory)\vsix + + - task: CmdLine@1 + displayName: Run VSCE to package vsix + inputs: + filename: vsce + arguments: package --yarn -o $(Build.ArtifactStagingDirectory)\vsix\${{ parameters.vsixName }} + workingFolder: $(Build.SourcesDirectory)\${{ parameters.srcDir }} + + - task: Npm@0 + displayName: Uninstall vsce + inputs: + command: uninstall + arguments: --global @vscode/vsce \ No newline at end of file diff --git a/Build/publish/cpptools_extension_pack.yml b/Build/publish/cpptools_extension_pack.yml new file mode 100644 index 0000000000..9e93ee5c30 --- /dev/null +++ b/Build/publish/cpptools_extension_pack.yml @@ -0,0 +1,43 @@ +name: $(Date:yyyyMMdd)$(rev:.r) +trigger: none +pr: none + +resources: + repositories: + - repository: MicroBuildTemplate + type: git + name: 1ESPipelineTemplates/MicroBuildTemplate + ref: refs/tags/release + pipelines: + - pipeline: vsixBuild + source: '\VC\VSCode\CpptoolsVSIX\Package cpptools-extension-pack' + trigger: true + +extends: + template: azure-pipelines/MicroBuild.1ES.Official.yml@MicroBuildTemplate + parameters: + pool: + name: AzurePipelines-EO + image: AzurePipelinesWindows2022compliantGPT + os: windows + sdl: + sourceAnalysisPool: + name: AzurePipelines-EO + image: AzurePipelinesWindows2022compliantGPT + os: windows + + stages: + - stage: Validate + jobs: + - template: /Build/publish/jobs_manual_validation.yml@self + parameters: + notifyUsers: $(NotifyUsers) + releaseBuildUrl: $(ReleaseBuildUrl) + + - stage: Release + dependsOn: Validate + jobs: + - template: /Build/publish/jobs_publish_vsix.yml@self + parameters: + vsixName: cpptools-extension-pack.vsix + diff --git a/Build/publish/cpptools_themes.yml b/Build/publish/cpptools_themes.yml new file mode 100644 index 0000000000..b9b167a084 --- /dev/null +++ b/Build/publish/cpptools_themes.yml @@ -0,0 +1,43 @@ +name: $(Date:yyyyMMdd)$(rev:.r) +trigger: none +pr: none + +resources: + repositories: + - repository: MicroBuildTemplate + type: git + name: 1ESPipelineTemplates/MicroBuildTemplate + ref: refs/tags/release + pipelines: + - pipeline: vsixBuild + source: '\VC\VSCode\CpptoolsVSIX\Package cpptools-themes' + trigger: true + +extends: + template: azure-pipelines/MicroBuild.1ES.Official.yml@MicroBuildTemplate + parameters: + pool: + name: AzurePipelines-EO + image: AzurePipelinesWindows2022compliantGPT + os: windows + sdl: + sourceAnalysisPool: + name: AzurePipelines-EO + image: AzurePipelinesWindows2022compliantGPT + os: windows + + stages: + - stage: Validate + jobs: + - template: /Build/publish/jobs_manual_validation.yml@self + parameters: + notifyUsers: $(NotifyUsers) + releaseBuildUrl: $(ReleaseBuildUrl) + + - stage: Release + dependsOn: Validate + jobs: + - template: /Build/publish/jobs_publish_vsix.yml@self + parameters: + vsixName: cpptools-themes.vsix + diff --git a/Build/publish/jobs_manual_validation.yml b/Build/publish/jobs_manual_validation.yml new file mode 100644 index 0000000000..2c5a710d97 --- /dev/null +++ b/Build/publish/jobs_manual_validation.yml @@ -0,0 +1,19 @@ +parameters: +- name: notifyUsers + type: string + default: '' +- name: releaseBuildUrl + type: string + default: '' + +jobs: +- job: WaitForValidation + displayName: Wait for VSIX validation + pool: server + steps: + - task: ManualValidation@0 + displayName: "Manual Validation" + inputs: + notifyUsers: $(notifyUsers) + instructions: | + Download and test the vsix from the latest release build: $(releaseBuildUrl) diff --git a/Build/publish/jobs_publish_vsix.yml b/Build/publish/jobs_publish_vsix.yml new file mode 100644 index 0000000000..c2a9664fb8 --- /dev/null +++ b/Build/publish/jobs_publish_vsix.yml @@ -0,0 +1,44 @@ +parameters: +- name: vsixName + type: string + default: '' + +jobs: +- job: Publish + displayName: Publish to Marketplace + templateContext: + type: releaseJob + isProduction: true + inputs: + - input: pipelineArtifact + pipeline: vsixBuild + artifactName: vsix + targetPath: $(Build.StagingDirectory)\vsix + + steps: + - task: NodeTool@0 + displayName: Use Node 18.x + inputs: + versionSpec: 18.x + + - task: Npm@0 + displayName: Install vsce + inputs: + arguments: --global @vscode/vsce + + - task: AzureCLI@2 + displayName: Generate AAD_TOKEN + inputs: + azureSubscription: $(AzureSubscription) + scriptType: ps + scriptLocation: inlineScript + inlineScript: | + $aadToken = az account get-access-token --query accessToken --resource $(AzureGuid) -o tsv + Write-Host "##vso[task.setvariable variable=AAD_TOKEN;issecret=true]$aadToken" + + - script: | + vsce publish --packagePath $(Build.StagingDirectory)\vsix\${{ parameters.vsixName }} + displayName: Publish to Marketplace + env: + VSCE_PAT: $(AAD_TOKEN) +