...
1<#
2.SYNOPSIS
3Uploads the release asset and returns the resulting object from the upload
4
5.PARAMETER ReleaseTag
6Tag to look up release
7
8.PARAMETER AssetPath
9Location of the asset file to upload
10
11.PARAMETER GitHubRepo
12Name of the GitHub repo to search (of the form Azure/azure-sdk-for-cpp)
13
14#>
15
16param (
17 [Parameter(Mandatory = $true)]
18 [ValidateNotNullOrEmpty()]
19 [string] $ReleaseTag,
20
21 [Parameter(Mandatory = $true)]
22 [ValidateNotNullOrEmpty()]
23 [string] $AssetPath,
24
25 [Parameter(Mandatory = $true)]
26 [ValidateNotNullOrEmpty()]
27 [string] $GitHubRepo,
28
29 [Parameter(Mandatory = $true)]
30 [ValidateNotNullOrEmpty()]
31 [string] $GitHubPat
32)
33
34# Get information about release at $ReleaseTag
35$releaseInfoUrl = "https://api.github.com/repos/$GitHubRepo/releases/tags/$ReleaseTag"
36Write-Verbose "Requesting release info from $releaseInfoUrl"
37$release = Invoke-RestMethod `
38 -Uri $releaseInfoUrl `
39 -Method GET
40
41$assetFilename = Split-Path $AssetPath -Leaf
42
43# Upload URL comes in the literal form (yes, those curly braces) of:
44# https://uploads.github.com/repos/Azure/azure-sdk-for-cpp/releases/123/assets{?name,label}
45# Converts to something like:
46# https://uploads.github.com/repos/Azure/azure-sdk-for-cpp/releases/123/assets?name=foo.tar.gz
47# Docs: https://docs.github.com/en/rest/reference/repos#get-a-release-by-tag-name
48$uploadUrl = $release.upload_url.Split('{')[0] + "?name=$assetFilename"
49
50Write-Verbose "Uploading $assetFilename to $uploadUrl"
51
52$asset = Invoke-RestMethod `
53 -Uri $uploadUrl `
54 -Method POST `
55 -InFile $AssetPath `
56 -Credential $credentials `
57 -Headers @{ Authorization = "token $GitHubPat" } `
58 -ContentType "application/gzip"
59
60Write-Verbose "Upload complete. Browser download URL: $($asset.browser_download_url)"
61
62return $asset
View as plain text