Build & Release (Azure DevOps Migration Tools) #109
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build & Release (Azure DevOps Migration Tools) | |
on: | |
push: | |
branches: | |
tags-ignore: | |
- 'v*-*' | |
pull_request: | |
branches: | |
- main | |
workflow_dispatch: | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
env: | |
APP_ID: "Iv23li9aYvt0VW9x4Jhh" | |
PRIVATE_KEY: ${{ secrets.NKDAGILITY_BOT_CLIENTSECRET }} | |
jobs: | |
# Setup & Configuration | |
Setup: | |
name: "Setup & Configuration " | |
runs-on: ubuntu-latest | |
outputs: | |
GitVersion_BranchName: ${{ steps.gitversion.outputs.GitVersion_BranchName }} | |
GitVersion_SemVer: ${{ steps.gitversion.outputs.GitVersion_SemVer }} | |
GitVersion_PreReleaseLabel: ${{ steps.gitversion.outputs.GitVersion_PreReleaseLabel }} | |
GitVersion_AssemblySemVer: ${{ steps.gitversion.outputs.GitVersion_AssemblySemVer }} | |
GitVersion_InformationalVersion: ${{ steps.gitversion.outputs.GitVersion_InformationalVersion }} | |
GitVersion_NuGetVersion: ${{ steps.gitversion.outputs.GitVersion_NuGetVersion }} | |
HasChanged_src: ${{ steps.filter.outputs.src }} | |
HasChanged_docs: ${{ steps.filter.outputs.docs }} | |
HasChanged_automation: ${{ steps.filter.outputs.automation }} | |
nkdAgility_Ring: ${{ steps.nkdagility-outputs.outputs.Ring }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v2 | |
with: | |
fetch-depth: 0 | |
- name: Install GitVersion | |
uses: gittools/actions/gitversion/[email protected] | |
with: | |
versionSpec: '5.x' | |
includePrerelease: true | |
- name: Execute GitVersion | |
id: gitversion | |
uses: gittools/actions/gitversion/[email protected] | |
with: | |
useConfigFile: true | |
- uses: dorny/paths-filter@v3 | |
id: filter | |
with: | |
filters: | | |
src: | |
- 'src/**' | |
docs: | |
- 'docs/**' | |
automation: | |
- 'build/**' | |
- '.github/workflows/**' | |
- name: "Build NKDAgility Outputs" | |
shell: pwsh | |
id: nkdagility-outputs | |
run: | | |
$Ring = "Canary" | |
switch ($Env:GitVersion_PreReleaseLabel) { | |
"" { | |
$Ring = "Release"; | |
} | |
"Preview" { | |
$Ring = "Preview"; | |
} | |
default { | |
$Ring = "Canary"; | |
} | |
} | |
Write-Output "We are running for the $Ring Ring!" | |
echo "Ring=$Ring" >> $env:GITHUB_OUTPUT | |
# Setup Validator | |
SetupSummeryStage: | |
name: "Summery" | |
runs-on: ubuntu-latest | |
needs: Setup | |
steps: | |
- name: "Create Summery" | |
if: always() | |
shell: pwsh | |
id: nkdagility-summery | |
run: | | |
$markdown = @" | |
# Setup & Configuration | |
## GitVersion | |
- GitVersion_BranchName: ${{needs.Setup.outputs.GitVersion_BranchName}} | |
- GitVersion_SemVer: ${{needs.Setup.outputs.GitVersion_SemVer}} | |
- GitVersion_PreReleaseLabel: ${{needs.Setup.outputs.GitVersion_PreReleaseLabel}} | |
- GitVersion_AssemblySemVer: ${{needs.Setup.outputs.GitVersion_AssemblySemVer}} | |
- GitVersion_InformationalVersion: ${{needs.Setup.outputs.GitVersion_InformationalVersion}} | |
- GitVersion_NuGetVersion: ${{needs.Setup.outputs.GitVersion_NuGetVersion}} | |
## Has Changed | |
- HasChanged_src: ${{needs.Setup.outputs.HasChanged_src}} | |
- HasChanged_docs: ${{needs.Setup.outputs.HasChanged_docs}} | |
- HasChanged_automation: ${{needs.Setup.outputs.HasChanged_automation}} | |
## NKDAgility | |
- nkdAgility_Ring: ${{needs.Setup.outputs.nkdAgility_Ring}}"@ | |
# Build, Test, Sonar Cloud Analysis, & Package | |
build: | |
name: "Build, Test, Sonar Cloud Analysis, & Package" | |
runs-on: windows-latest | |
needs: Setup | |
if: ${{ needs.Setup.outputs.HasChanged_src }} | |
env: | |
solution: '**/*.sln' | |
buildPlatform: 'Any CPU' | |
buildConfiguration: 'Release' | |
GitVersion_SemVer: ${{ needs.Setup.outputs.GitVersion_SemVer }} | |
GitVersion_AssemblySemVer: ${{ needs.Setup.outputs.GitVersion_AssemblySemVer }} | |
GitVersion_InformationalVersion: ${{ needs.Setup.outputs.GitVersion_InformationalVersion }} | |
GitVersion_NuGetVersion: ${{ needs.Setup.outputs.GitVersion_NuGetVersion }} | |
GitVersion_PreReleaseLabel: ${{ needs.Setup.outputs.GitVersion_PreReleaseLabel }} | |
steps: | |
# - name: Setup NuGet | |
# uses: NuGet/[email protected] | |
# - name: Restore NuGet Packages | |
# run: nuget restore MigrationTools.sln | |
# - name: Build and Publish Web App | |
# run: msbuild MigrationTools.sln | |
- name: Set up JDK 17 | |
uses: actions/setup-java@v3 | |
with: | |
java-version: 17 | |
distribution: 'zulu' | |
- name: Checkout | |
uses: actions/checkout@v2 | |
- uses: cschleiden/replace-tokens@v1 | |
with: | |
files: '["**/StaticVariables.cs"]' | |
tokenPrefix: "${" | |
tokenSuffix: "}" | |
- name: Setup .NET | |
uses: actions/setup-dotnet@v1 | |
with: | |
dotnet-version: | | |
8.x | |
- name: "Find solution files" | |
shell: pwsh | |
run: | | |
Get-Item -Path .\ | |
Get-ChildItem -Path .\ -Recurse -Filter '*.sln' | ForEach-Object { $_.FullName } | |
- run: dotnet tool install --global dotnet-sonarscanner | |
- run: dotnet sonarscanner begin | |
/o:"nkdagility" | |
/k:"vsts-sync-migrator:master" | |
/d:sonar.host.url="https://sonarcloud.io" | |
/d:sonar.token="${{ secrets.SONAR_TOKEN }}" | |
- run: dotnet build MigrationTools.sln /p:Version=${{ env.GitVersion_SemVer }} /p:FileVersion=${{ env.GitVersion_AssemblySemVer }} /p:InformationalVersion=${{ env.GitVersion_InformationalVersion }} /p:GitVersionTag=${{ env.GitVersion_PreReleaseLabel }} | |
name: Build MigrationTools.sln | |
id: Build | |
- run: dotnet test "MigrationTools.sln" --results-directory ".\test-results\" --logger trx --collect "Code coverage" --no-build --filter "(TestCategory=L0|TestCategory=L1)" | |
- run: dotnet test "MigrationTools.sln" --results-directory ".\test-results\" --logger trx --collect "Code coverage" --no-build --filter "(TestCategory=L2|TestCategory=L3)" | |
- run: dotnet test "MigrationTools.sln" --results-directory ".\test-results\" --logger trx --collect "Code coverage" --no-build --filter "(TestCategory!=L0&TestCategory!=L1&TestCategory!=L2&TestCategory!=L3)" | |
- run: dotnet sonarscanner end /d:sonar.token="${{ secrets.SONAR_TOKEN }}" | |
- name: "Package Executable Files" | |
id: packageExecutable | |
shell: pwsh | |
if: ${{ steps.Build.outcome == 'success' }} | |
run: | | |
./build/packageExecutable.ps1 -version ${{ env.GitVersion_SemVer }} -outfolder "./staging" | |
- name: "Package Chocolatey Files" | |
shell: pwsh | |
if: ${{ steps.packageExecutable.outcome == 'success' }} | |
run: | | |
$item = Get-ChildItem -Path ./staging/ -Recurse -Filter 'MigrationTools-${{ env.GitVersion_SemVer }}.zip' | Select-Object -First 1 | |
Write-Output "Found: $item.FullName" | |
.\build\packageChocolatey.ps1 -SemVer ${{ env.GitVersion_SemVer }} -NuGetVersion ${{ env.GitVersion_NuGetVersion }} -outfolder "./staging" -migrationToolsFilename $item.FullName | |
- name: "Package Extension Files" | |
shell: pwsh | |
if: ${{ steps.Build.outcome == 'success' }} | |
run: | | |
.\build\packageExtension.ps1 -version ${{ env.GitVersion_AssemblySemVer }} -outfolder "./staging" | |
- name: "List Package Files" | |
shell: pwsh | |
if: ${{ steps.Build.outcome == 'success' }} | |
run: | | |
Get-ChildItem -Path ./staging/ -Recurse | ForEach-Object { $_.FullName } | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: AzureDevOpsMigrationTools-Packages | |
path: ./staging/** | |
# Build Docs | |
BuildDocs: | |
name: "Build Documentation output" | |
runs-on: ubuntu-latest | |
needs: [Setup] | |
env: | |
GitVersion_SemVer: ${{ needs.Setup.outputs.GitVersion_SemVer }} | |
GitVersion_AssemblySemVer: ${{ needs.Setup.outputs.GitVersion_AssemblySemVer }} | |
GitVersion_InformationalVersion: ${{ needs.Setup.outputs.GitVersion_InformationalVersion }} | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: cschleiden/replace-tokens@v1 | |
with: | |
files: '["**/*.html"]' | |
tokenPrefix: "${" | |
tokenSuffix: "}" | |
- uses: igsekor/[email protected] | |
id: spellcheck | |
name: Spellcheck | |
- name: Build Jekyll | |
uses: jerryjvl/jekyll-build-action@v1 | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: AzureDevOpsMigrationTools-Site | |
path: ./_site/**/* | |
# GitHubRelease | |
GitHubRelease: | |
name: "Release to GitHub Releases" | |
runs-on: ubuntu-latest | |
if: ${{ needs.Setup.outputs.HasChanged_src }} | |
env: | |
GitVersion_SemVer: ${{ needs.Setup.outputs.GitVersion_SemVer }} | |
GitVersion_AssemblySemVer: ${{ needs.Setup.outputs.GitVersion_AssemblySemVer }} | |
GitVersion_InformationalVersion: ${{ needs.Setup.outputs.GitVersion_InformationalVersion }} | |
GitVersion_NuGetVersion: ${{ needs.Setup.outputs.GitVersion_NuGetVersion }} | |
GitVersion_PreReleaseLabel: ${{ needs.Setup.outputs.GitVersion_PreReleaseLabel }} | |
needs: [build, Setup] | |
#if: ${{ success() && ( needs.Setup.outputs.nkdAgility_Ring != 'Canary' ) }} | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
name: AzureDevOpsMigrationTools-Packages | |
- uses: actions/create-github-app-token@v1 | |
id: app-token | |
with: | |
app-id: ${{ env.APP_ID }} | |
private-key: ${{ env.PRIVATE_KEY }} | |
- name: "Package Files" | |
shell: pwsh | |
run: | | |
Get-ChildItem -Path .\ -Recurse | ForEach-Object { $_.FullName } | |
- name: Release | |
if: ${{ false }} | |
uses: softprops/action-gh-release@v2 | |
with: | |
files: | | |
MigrationTools-*.zip | |
nkdAgility.vsts-sync-migration-*.vsix | |
vsts-sync-migrator.*.nupkg | |
generate_release_notes: true | |
tag_name: v${{ needs.Setup.outputs.GitVersion_SemVer }} | |
name: Azure DevOps Migration Tools v${{ needs.Setup.outputs.GitVersion_SemVer }} | |
token: ${{ steps.app-token.outputs.token }} | |
prerelease: ${{ needs.Setup.outputs.GitVersion_PreReleaseLabel == 'Preview' }} | |
discussion_category_name: "Anouncement" | |
draft: true | |
# ElmahDeployment | |
ElmahDeployemnt: | |
name: "Create Elmah.io Deployment" | |
runs-on: ubuntu-latest | |
env: | |
GitVersion_SemVer: ${{ needs.Setup.outputs.GitVersion_SemVer }} | |
needs: [GitHubRelease, Setup] | |
if: ${{ success() && ( needs.Setup.outputs.nkdAgility_Ring != 'Canary' ) }} | |
steps: | |
- name: Create Deployment on elmah.io | |
uses: elmahio/github-create-deployment-action@v1 | |
with: | |
apiKey: ${{ secrets.ELMAH_IO_API_KEY }} | |
version: ${{ needs.Setup.outputs.GitVersion_SemVer }} | |
logId: ${{ secrets.ELMAH_IO_LOG_ID }} | |
# Release to Marketplace | |
MarketplaceRelease: | |
name: "Release to Marketplace (Not Migrated)" | |
runs-on: ubuntu-latest | |
needs: [Setup, GitHubRelease] | |
if: ${{ (needs.Setup.outputs.HasChanged_src) && (false) }} | |
#if: ${{ success() && ( needs.Setup.outputs.nkdAgility_Ring != 'Canary' ) && (needs.Setup.outputs.HasChanged_src) }} | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
name: AzureDevOpsMigrationTools-Packages | |
- name: "Find solution files" | |
shell: pwsh | |
run: | | |
Get-Item -Path .\ | |
Get-ChildItem -Path .\ -Recurse -Filter '*.sln' | ForEach-Object { $_.FullName } | |
# Release to Chocolatey | |
ChocolateyRelease: | |
name: "Release to Chocolatey (Not Migrated)" | |
runs-on: ubuntu-latest | |
needs: [Setup, GitHubRelease] | |
if: ${{ (needs.Setup.outputs.HasChanged_src) && (false) }} | |
#if: ${{ success() && ( needs.Setup.outputs.nkdAgility_Ring != 'Canary' ) && (needs.Setup.outputs.HasChanged_src) }} | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
name: AzureDevOpsMigrationTools-Packages | |
- name: "Find solution files" | |
shell: pwsh | |
run: | | |
Get-Item -Path .\ | |
Get-ChildItem -Path .\ -Recurse -Filter '*.sln' | ForEach-Object { $_.FullName } | |
# Release to Winget | |
WingetRelease: | |
name: "Release to Winget (Not Migrated)" | |
runs-on: ubuntu-latest | |
needs: [Setup, GitHubRelease] | |
if: ${{ (needs.Setup.outputs.HasChanged_src) && (false) }} | |
#if: ${{ success() && ( needs.Setup.outputs.nkdAgility_Ring != 'Canary' ) && (needs.Setup.outputs.HasChanged_src) }} | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
name: AzureDevOpsMigrationTools-Packages | |
- name: "Find solution files" | |
shell: pwsh | |
run: | | |
Get-Item -Path .\ | |
Get-ChildItem -Path .\ -Recurse -Filter '*.sln' | ForEach-Object { $_.FullName } | |
# Release to Docs | |
DocsRelease: | |
name: "Release to Docs" | |
runs-on: ubuntu-latest | |
needs: [BuildDocs, GitHubRelease] | |
if: ${{ (needs.Setup.outputs.HasChanged_docs) && (false) }} | |
#if: ${{ success() && ( needs.Setup.outputs.nkdAgility_Ring != 'Canary' ) }} | |
steps: | |
- name: Download a single artifact | |
uses: actions/download-artifact@v3 | |
with: | |
name: AzureDevOpsMigrationTools-Site | |
path: ./_site | |
- name: "Find files" | |
shell: pwsh | |
run: | | |
Get-Item -Path .\ | |
- name: SFTP Upload | |
# You may pin to the exact commit or the version. | |
# uses: Dylan700/sftp-upload-action@f90db607d9fe1acdc0eefccee84d37c119b268fe | |
uses: Dylan700/[email protected] | |
with: | |
server: nakedalmweb.sftp.wpengine.com | |
username: nakedalmweb-learn | |
password: ${{ secrets.SFTP_PASSWORD }} | |
port: 2222 | |
# If true, outputs the results of the upload, without actually uploading. | |
dry-run: false | |
# A list of folders to upload in the format of `folder/ => upload_folder/` | |
uploads: | | |
./_site/ => ./azure-devops-migration-tools | |
# If true, any existing files in the remote upload directories are deleted. | |
delete: false |