diff --git a/.azuredevops/pipelines/build.yaml b/.azuredevops/pipelines/build.yaml new file mode 100644 index 000000000..e69de29bb diff --git a/.azuredevops/pipelines/main.yaml b/.azuredevops/pipelines/main.yaml new file mode 100644 index 000000000..a6fb9e880 --- /dev/null +++ b/.azuredevops/pipelines/main.yaml @@ -0,0 +1,18 @@ +name: '$(Build.SourceBranchName)_$(Date:yyyy.MM.dd)$(Rev:.r)' + +trigger: none + +variables: + - template: templates/variables.yml + +jobs: +- job: Build + pool: + vmImage: ${{ variables.vmImage }} + steps: + - template: templates/build-steps.yml +- job: Publish + pool: + vmImage: ${{ variables.vmImage }} + steps: + - template: templates/publish-steps.yml \ No newline at end of file diff --git a/.azuredevops/pipelines/templates/build-steps.yaml b/.azuredevops/pipelines/templates/build-steps.yaml new file mode 100644 index 000000000..b21fa3804 --- /dev/null +++ b/.azuredevops/pipelines/templates/build-steps.yaml @@ -0,0 +1,49 @@ +steps: +## This is needed due to https://github.com/microsoft/azure-pipelines-tasks/issues/8429 +## For the set version tool... +- task: DotNetCoreInstaller@1 + displayName: 'Use .NET Core sdk ' + inputs: + packageType: 'sdk' + version: '3.x' +- task: DotNetCoreInstaller@1 + displayName: 'Use .NET Core sdk for versioning' + inputs: + packageType: 'sdk' + version: '2.1.x' + + +- task: PowerShell@2 + displayName: 'Get Release Notes' + inputs: + targetType: 'inline' + script: | + $response = Invoke-WebRequest -Uri "https://ombireleasenote.azurewebsites.net/api/ReleaseNotesFunction?buildId=$(Build.BuildId)" + Write-Host "##vso[task.setvariable variable=ReleaseNotes;]$response" + +- task: PowerShell@2 + displayName: 'Set Version' + inputs: + targetType: 'inline' + script: | + dotnet tool install -g dotnet-setversion + setversion -r $(BuildVersion) + +- task: Yarn@3 + displayName: 'Install UI Dependancies' + inputs: + projectDirectory: '$(UiLocation)' + arguments: 'install' + +- task: Yarn@3 + displayName: 'Build and Publish Angular App' + inputs: + projectDirectory: '$(UiLocation)' + arguments: 'run build' + +- task: DotNetCoreCLI@2 + displayName: Run Unit Tests + inputs: + comand: 'test' + projects: '$(TestProject)' + continueOnError: true \ No newline at end of file diff --git a/.azuredevops/pipelines/templates/publish-steps.yaml b/.azuredevops/pipelines/templates/publish-steps.yaml new file mode 100644 index 000000000..80ec2ce5c --- /dev/null +++ b/.azuredevops/pipelines/templates/publish-steps.yaml @@ -0,0 +1,171 @@ +steps: + +- task: DotNetCoreCLI@2 + displayName: Publish Win10-x64 + inputs: + command: 'publish' + publishWebProjects: true + arguments: '-c $(BuildConfiguration) -r "win10-x64" -o $(Build.ArtifactStagingDirectory)/win-64' + zipAfterPublish: false + modifyOutputPath: false + +- task: CopyFiles@2 + displayName: 'Copy Angular App Win10-x64' + inputs: + SourceFolder: '$(UiLocation)dist' + Contents: '**' + TargetFolder: '$(Build.ArtifactStagingDirectory)/win-64/ClientApp/dist' + +- task: DotNetCoreCLI@2 + displayName: Publish Win10-x86 + inputs: + command: 'publish' + publishWebProjects: true + arguments: '-c $(BuildConfiguration) -r "win10-x86" -o $(Build.ArtifactStagingDirectory)/win-86' + zipAfterPublish: false + modifyOutputPath: false + +- task: CopyFiles@2 + displayName: 'Copy Angular App Win10-x86' + inputs: + SourceFolder: '$(UiLocation)dist' + Contents: '**' + TargetFolder: '$(Build.ArtifactStagingDirectory)/win-86/ClientApp/dist' + +- task: DotNetCoreCLI@2 + displayName: Publish OSX-x64 + inputs: + command: 'publish' + publishWebProjects: true + arguments: '-c $(BuildConfiguration) -r "osx-x64" -o $(Build.ArtifactStagingDirectory)/osx-64' + zipAfterPublish: false + modifyOutputPath: false + +- task: CopyFiles@2 + displayName: 'Copy Angular App OSX-x64' + inputs: + SourceFolder: '$(UiLocation)dist' + Contents: '**' + TargetFolder: '$(Build.ArtifactStagingDirectory)/osx-64/ClientApp/dist' + +- task: DotNetCoreCLI@2 + displayName: Publish Linux-x64 + inputs: + command: 'publish' + publishWebProjects: true + arguments: '-c $(BuildConfiguration) -r "linux-x64" -o $(Build.ArtifactStagingDirectory)/linux-64' + zipAfterPublish: false + modifyOutputPath: false + +- task: CopyFiles@2 + displayName: 'Copy Angular App Linux-x64' + inputs: + SourceFolder: '$(UiLocation)dist' + Contents: '**' + TargetFolder: '$(Build.ArtifactStagingDirectory)/linux-64/ClientApp/dist' + +- task: DotNetCoreCLI@2 + displayName: Publish Linux-ARM + inputs: + command: 'publish' + publishWebProjects: true + arguments: '-c $(BuildConfiguration) -r "linux-arm" -o $(Build.ArtifactStagingDirectory)/linux-arm' + zipAfterPublish: false + modifyOutputPath: false + +- task: CopyFiles@2 + displayName: 'Copy Angular App Linux-ARM' + inputs: + SourceFolder: '$(UiLocation)dist' + Contents: '**' + TargetFolder: '$(Build.ArtifactStagingDirectory)/linux-arm/ClientApp/dist' + +- task: DotNetCoreCLI@2 + displayName: Publish Linux-ARM-x64 + inputs: + command: 'publish' + publishWebProjects: true + arguments: '-c $(BuildConfiguration) -r "linux-arm64" -o $(Build.ArtifactStagingDirectory)/linux-arm64' + zipAfterPublish: false + modifyOutputPath: false + +- task: CopyFiles@2 + displayName: 'Copy Angular App Linux-ARM64' + inputs: + SourceFolder: '$(UiLocation)dist' + Contents: '**' + TargetFolder: '$(Build.ArtifactStagingDirectory)/linux-arm64/ClientApp/dist' + +### Zip them up + +- task: ArchiveFiles@2 + displayName: Zip Win-x64 + inputs: + rootFolderOrFile: '$(Build.ArtifactStagingDirectory)/win-64' + includeRootFolder: false + archiveType: 'zip' + archiveFile: '$(Build.ArtifactStagingDirectory)/win-x64-$(Build.BuildId).zip' + replaceExistingArchive: true + +- task: ArchiveFiles@2 + displayName: Zip Win-x86 + inputs: + rootFolderOrFile: '$(Build.ArtifactStagingDirectory)/win-86' + includeRootFolder: false + archiveType: 'zip' + archiveFile: '$(Build.ArtifactStagingDirectory)/win-x86-$(Build.BuildId).zip' + replaceExistingArchive: true + +- task: ArchiveFiles@2 + displayName: Zip OSX-x64 + inputs: + rootFolderOrFile: '$(Build.ArtifactStagingDirectory)/osx-64' + includeRootFolder: false + archiveType: 'tar' + archiveFile: '$(Build.ArtifactStagingDirectory)/osx-x64-$(Build.BuildId).tar.gz' + replaceExistingArchive: true + +- task: ArchiveFiles@2 + displayName: Zip Linux-x64 + inputs: + rootFolderOrFile: '$(Build.ArtifactStagingDirectory)/linux-64' + includeRootFolder: false + archiveType: 'tar' + archiveFile: '$(Build.ArtifactStagingDirectory)/linux-x64-$(Build.BuildId).tar.gz' + replaceExistingArchive: true + +- task: ArchiveFiles@2 + displayName: Zip Linux-ARM + inputs: + rootFolderOrFile: '$(Build.ArtifactStagingDirectory)/linux-arm' + includeRootFolder: false + archiveType: 'tar' + archiveFile: '$(Build.ArtifactStagingDirectory)/linux-arm-$(Build.BuildId).tar.gz' + replaceExistingArchive: true + +- task: ArchiveFiles@2 + displayName: Zip Linux-ARM-x64 + inputs: + rootFolderOrFile: '$(Build.ArtifactStagingDirectory)/linux-arm64' + includeRootFolder: false + archiveType: 'tar' + archiveFile: '$(Build.ArtifactStagingDirectory)/linux-arm64-$(Build.BuildId).tar.gz' + replaceExistingArchive: true + +- task: GitHubRelease@1 + inputs: + gitHubConnection: 'github.com_tidusjar' + repositoryName: 'tidusjar/Ombi.Releases' + action: 'create' + target: 'c7fcbb77b58aef1076d635a9ef99e4374abc8672' + tagSource: 'userSpecifiedTag' + tag: '$(gitTag)' + releaseNotesSource: 'inline' + releaseNotesInline: '$(ReleaseNotes)' + assets: | + $(Build.ArtifactStagingDirectory)/*.zip + $(Build.ArtifactStagingDirectory)/*.gz + isPreRelease: true + changeLogCompareToRelease: 'lastNonDraftRelease' + changeLogType: 'commitBased' + condition: and(succeeded(), eq(variables['PublishToGithub'], 'true')) \ No newline at end of file diff --git a/.azuredevops/pipelines/templates/variables.yaml b/.azuredevops/pipelines/templates/variables.yaml new file mode 100644 index 000000000..3d1d83c3e --- /dev/null +++ b/.azuredevops/pipelines/templates/variables.yaml @@ -0,0 +1,27 @@ +variables: + - name: "BuildConfiguration" + value: "Release" + + - name: "vmImage" + value: "ubuntu-latest" + + - name: "Solution" + value: "**/*.sln" + + - name: "TestProject" + value: "**/*.Tests.csproj" + + - name: "NetCoreVersion" + value: "3.1" + + - name: "PublishLocation" + value: "$(Build.SourcesDirectory)/src/Ombi/bin/Release/netcoreapp$(NetCoreVersion)" + + - name: "GitTag" + value: "v$(buildVersion)" + + - name: "UiLocation" + value: "$(Build.SourcesDirectory)/src/Ombi/ClientApp/" + + - name: "BuildVersion" + value: "4.0.$(Build.BuildId)" diff --git a/azure-pipelines.yml b/azure-pipelines.yml index fdf1ae345..63bf242b4 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,7 +9,7 @@ trigger: branches: include: - - feature/* + - feature/v4* exclude: - develop - master @@ -19,7 +19,7 @@ variables: testProj: '**/*.Tests.csproj' csProj: '**/*.csproj' buildConfiguration: 'Release' - publishLocation: '$(Build.SourcesDirectory)/src/Ombi/bin/Release/netcoreapp3.0' + publishLocation: '$(Build.SourcesDirectory)/src/Ombi/bin/Release/netcoreapp3.1' pool: vmImage: 'ubuntu-latest'