diff --git a/eng/pipelines/templates/jobs/archetype-go-release.yml b/eng/pipelines/templates/jobs/archetype-go-release.yml new file mode 100644 index 000000000000..b83c1665a223 --- /dev/null +++ b/eng/pipelines/templates/jobs/archetype-go-release.yml @@ -0,0 +1,33 @@ +parameters: + DependsOn: Build + ServiceDirectory: '' + +stages: + - ${{if and(eq(variables['Build.Reason'], 'Manual'), eq(variables['System.TeamProject'], 'internal'))}}: + - stage: Release + displayName: 'Release: ${{parameters.ServiceDirectory}}' + dependsOn: ${{parameters.DependsOn}} + condition: and(succeeded(), ne(variables['SetDevVersion'], 'true'), ne(variables['Skip.Release'], 'true'), ne(variables['Build.Repository.Name'], 'Azure/azure-sdk-for-go-pr')) + jobs: + - deployment: TagRepository + displayName: "Create release tag" + condition: ne(variables['Skip.TagRepository'], 'true') + environment: github + + pool: + name: azsdk-pool-mms-ubuntu-2004-general + vmImage: MMSUbuntu20.04 + + strategy: + runOnce: + deploy: + steps: + - checkout: self + - template: /eng/common/pipelines/templates/steps/retain-run.yml + - template: /eng/common/pipelines/templates/steps/create-tags-and-git-release.yml + parameters: + ArtifactLocation: $(Build.SourcesDirectory)/sdk/${{parameters.ServiceDirectory}} + ReleaseSha: $(Build.SourceVersion) + RepoId: Azure/azure-sdk-for-go + WorkingDirectory: $(System.DefaultWorkingDirectory) + \ No newline at end of file diff --git a/eng/pipelines/templates/jobs/archetype-sdk-client.yml b/eng/pipelines/templates/jobs/archetype-sdk-client.yml index 6b385ef5d9e2..7a5d0eb8fc3b 100644 --- a/eng/pipelines/templates/jobs/archetype-sdk-client.yml +++ b/eng/pipelines/templates/jobs/archetype-sdk-client.yml @@ -87,16 +87,9 @@ stages: Scope: $(SCOPE) LintVersion: $(GoLintCLIVersion) -# Below stage won't work until the release stage is added/necessary. -# "Releasing" is just the package in the repository on github, but there may be some other metadata related -# tasks that become necessary later on. - # The Prerelease and Release stages are conditioned on whether we are building a pull request and the branch. - # - ${{if and(ne(variables['Build.Reason'], 'PullRequest'), eq(variables['System.TeamProject'], 'internal'))}}: - # - template: archetype-go-release.yml - # parameters: - # DependsOn: Build - # ServiceDirectory: ${{parameters.ServiceDirectory}} - # Artifacts: ${{parameters.Artifacts}} - # ArtifactName: packages - # DocArtifact: documentation + - ${{if and(ne(variables['Build.Reason'], 'PullRequest'), eq(variables['System.TeamProject'], 'internal'))}}: + - template: archetype-go-release.yml + parameters: + DependsOn: Build + ServiceDirectory: ${{parameters.ServiceDirectory}} \ No newline at end of file diff --git a/eng/scripts/Language-Settings.ps1 b/eng/scripts/Language-Settings.ps1 new file mode 100644 index 000000000000..7f020182c021 --- /dev/null +++ b/eng/scripts/Language-Settings.ps1 @@ -0,0 +1,82 @@ +$Language = "go" +$packagePattern = "go.mod" +# rewrite from ChangeLog-Operations.ps1 used in Get-ChangeLogEntriesFromContent for go uses vx.x.x as version number +$RELEASE_TITLE_REGEX = "(?^\#+\s+(?v$([AzureEngSemanticVersion]::SEMVER_REGEX))(\s+(?\(.+\))))" + +# rewrite from artifact-metadata-parsing.ps1 used in RetrievePackages for fetch go single module info +function Get-go-PackageInfoFromPackageFile ($pkg, $workingDirectory) +{ + $workFolder = $pkg.Directory + $releaseNotes = "" + + if ($workFolder -match "sdk[\/|\\]((?(?.*?)[\/|\\])?(?arm)?(?.*))") + { + if ($matches["arm"]) + { + $packageName = "arm" + $matches["pkgname"] + $rpName = $matches["service"] + $pkgId = "sdk/$rpName/$packageName" + } + else + { + $packageName = $matches["pkgname"] + $pkgId = "sdk/$packageName" + } + } + + $pkgVersion = Get-Version $workFolder + + $changeLogLoc = @(Get-ChildItem -Path $workFolder -Recurse -Include "CHANGELOG.md")[0] + if ($changeLogLoc) + { + $releaseNotes = Get-ChangeLogEntryAsString -ChangeLogLocation $changeLogLoc -VersionString v$pkgVersion + } + + $resultObj = New-Object PSObject -Property @{ + PackageId = $pkgId + PackageVersion = $pkgVersion + ReleaseTag = "$pkgId/v$pkgVersion" + Deployable = $true + ReleaseNotes = $releaseNotes + } + + return $resultObj +} + +# get version from specific files (*constants.go, *version.go) +function Get-Version ($pkgPath) +{ + # find any file with suffix + $versionFiles = @() + $version_file_suffixs = "*constants.go", "*version.go" + foreach ($versionFileSuffix in $version_file_suffixs) + { + Get-ChildItem -Recurse -Path $pkgPath -Filter $versionFileSuffix | ForEach-Object { + Write-Host "Adding $_ to list of version files" + $versionFiles += $_ + } + } + + # for each version file, use regex to search go version num + $go_version_regex = ".+\s*=\s*`".*v?(?$([AzureEngSemanticVersion]::SEMVER_REGEX))`"" + foreach ($versionFile in $versionFiles) + { + try + { + $content = Get-Content $versionFile -Raw + # finding where the version number are + if ($content -match $go_version_regex) + { + return $matches["version"] + } + } + catch + { + Write-Error "Error parsing version." + Write-Error $_ + } + } + + Write-Host "Cannot find release version." + exit 1 +} \ No newline at end of file