mirror of
https://github.com/microsoft/terminal.git
synced 2025-12-19 09:58:08 -05:00
Due to an unexpected decision on behalf of the Azure Artifacts folks, the default view for a feed with upstream sources reports all packages, even if they are not actually populated into the feed. This results in (uncontrolled) 401 errors whenever a new package appears upstream, because the feed tells our users and our build system that it is available, but fails when the download actually begins because it is not allowed to "write" the upstream version to the feed.
105 lines
3.7 KiB
YAML
105 lines
3.7 KiB
YAML
parameters:
|
|
- name: buildConfiguration
|
|
type: string
|
|
- name: buildPlatforms
|
|
type: object
|
|
- name: pool
|
|
type: object
|
|
default: []
|
|
- name: dependsOn
|
|
type: object
|
|
default: null
|
|
- name: artifactStem
|
|
type: string
|
|
default: ''
|
|
- name: variables
|
|
type: object
|
|
default: {}
|
|
- name: environment
|
|
type: string
|
|
- name: storagePublicRootURL
|
|
type: string
|
|
- name: subscription
|
|
type: string
|
|
- name: storageAccount
|
|
type: string
|
|
- name: storageContainer
|
|
type: string
|
|
|
|
jobs:
|
|
- job: DeployAzure
|
|
${{ if ne(length(parameters.pool), 0) }}:
|
|
pool: ${{ parameters.pool }}
|
|
displayName: Publish to Azure Storage (Prod)
|
|
dependsOn: ${{ parameters.dependsOn }}
|
|
variables:
|
|
${{ insert }}: ${{ parameters.variables }}
|
|
steps:
|
|
- download: none
|
|
|
|
- checkout: self
|
|
clean: true
|
|
fetchDepth: 1
|
|
fetchTags: false # Tags still result in depth > 1 fetch; we don't need them here
|
|
submodules: true
|
|
persistCredentials: True
|
|
|
|
- task: DownloadPipelineArtifact@2
|
|
displayName: Download MSIX Bundle Artifact
|
|
inputs:
|
|
artifactName: appxbundle-${{ parameters.buildConfiguration }}${{ parameters.artifactStem }}
|
|
downloadPath: '$(Build.SourcesDirectory)/_out'
|
|
itemPattern: '**/*.msixbundle'
|
|
|
|
- ${{ each platform in parameters.buildPlatforms }}:
|
|
- task: DownloadPipelineArtifact@2
|
|
displayName: Download unpackaged build for ${{ platform }} ${{ parameters.buildConfiguration }}
|
|
inputs:
|
|
artifactName: build-${{ platform }}-${{ parameters.buildConfiguration }}${{ parameters.artifactStem }}
|
|
downloadPath: '$(Build.SourcesDirectory)/_unpackaged'
|
|
itemPattern: '**/_unpackaged/*.zip'
|
|
|
|
- pwsh: |-
|
|
$b = Get-Item _out/*.msixbundle
|
|
./build/scripts/New-AppInstallerFromTemplateAndBundle.ps1 -BundlePath $b.FullName -AppInstallerTemplatePath ./build/config/template.appinstaller -AppInstallerRoot "${{ parameters.storagePublicRootURL }}" -OutputPath _out/Microsoft.WindowsTerminalCanary.appinstaller
|
|
displayName: "Produce AppInstaller for MSIX bundle"
|
|
|
|
- pwsh: |-
|
|
$zips = Get-ChildItem -Recurse -Filter *.zip _unpackaged
|
|
$zips | ForEach-Object {
|
|
$name = $_.Name
|
|
$parts = $name.Split('_')
|
|
$parts[1] = "latest"
|
|
$name = [String]::Join('_', $parts)
|
|
$_ | Move-Item -Destination (Join-Path "_out" $name)
|
|
}
|
|
displayName: "Wrangle Unpackaged builds into place, rename"
|
|
|
|
- task: PowerShell@2
|
|
displayName: Install Azure Modules from custom PowerShell Gallery Repo
|
|
env:
|
|
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
|
|
inputs:
|
|
pwsh: false # We are preparing modules for AzureFileCopy, which uses PowerShell 5.1
|
|
targetType: inline
|
|
script: |-
|
|
$MachineToken = $env:SYSTEM_ACCESSTOKEN | ConvertTo-SecureString -AsPlainText -Force
|
|
$Credential = [PSCredential]::new("ONEBRANCH_TOKEN", $MachineToken)
|
|
$MachineToken = $null
|
|
$Feed = "https://pkgs.dev.azure.com/shine-oss/terminal/_packaging/TerminalDependencies%40Local/nuget/v3/index.json"
|
|
Register-PSResourceRepository -Name "PSGalleryUpstream" -Uri $Feed -Trusted
|
|
Get-PSResourceRepository
|
|
|
|
Install-PSResource -Name Az.Accounts, Az.Storage, Az.Network, Az.Resources, Az.Compute -Repository "PSGalleryUpstream" -Credential $Credential
|
|
|
|
- task: AzureFileCopy@6
|
|
displayName: Publish to Storage Account
|
|
inputs:
|
|
sourcePath: _out/*
|
|
Destination: AzureBlob
|
|
azureSubscription: ${{ parameters.subscription }}
|
|
storage: ${{ parameters.storageAccount }}
|
|
ContainerName: ${{ parameters.storageContainer }}
|
|
AdditionalArgumentsForBlobCopy: "--content-type application/octet-stream"
|
|
|