1+ name : CI/CD Pipeline
2+
3+ on : [push, pull_request, workflow_dispatch]
4+
5+ jobs :
6+ ci :
7+ name : Continuous Integration
8+ runs-on : ubuntu-latest
9+ outputs :
10+ latest_version : ${{ steps.tag_generator.outputs.new_version }}
11+ is_default_branch : ${{ steps.conditionals_handler.outputs.is_default_branch }}
12+ env :
13+ ARTIFACTS_FOLDER : ${{ github.workspace }}/Artifacts
14+ GITHUB_RUN_NUMBER : ${{ github.run_number }}
15+ steps :
16+ - name : Setup .NET
17+ uses : actions/setup-dotnet@v1
18+ with :
19+ dotnet-version : 5.0.x
20+
21+ - name : Data gatherer
22+ id : data_gatherer
23+ shell : pwsh
24+ run : |
25+ # Get default branch
26+ $repo = 'microsoft/OpenAPI.NET'
27+ $defaultBranch = Invoke-RestMethod -Method GET -Uri https://api.github.com/repos/$repo | Select-Object -ExpandProperty default_branch
28+ Write-Output "::set-output name=default_branch::$(echo $defaultBranch)"
29+
30+ - name : Conditionals handler
31+ id : conditionals_handler
32+ shell : pwsh
33+ run : |
34+ $defaultBranch = "${{ steps.data_gatherer.outputs.default_branch }}"
35+ $githubRef = "${{ github.ref }}"
36+ $isDefaultBranch = 'false'
37+ if ( $githubRef -like "*$defaultBranch*" ) {
38+ $isDefaultBranch = 'true'
39+ }
40+ Write-Output "::set-output name=is_default_branch::$(echo $isDefaultBranch)"
41+
42+ - name : Checkout repository
43+ id : checkout_repo
44+ uses : actions/checkout@v2
45+ with :
46+ token : ${{ secrets.GITHUB_TOKEN }}
47+ fetch-depth : 0
48+
49+ - if : steps.conditionals_handler.outputs.is_default_branch == 'true'
50+ name : Bump GH tag
51+ id : tag_generator
52+ uses :
mathieudutour/[email protected] 53+ with :
54+ github_token : ${{ secrets.GITHUB_TOKEN }}
55+ default_bump : false
56+ release_branches : ${{ steps.data_gatherer.outputs.default_branch }}
57+
58+ - name : Build projects
59+ id : build_projects
60+ shell : pwsh
61+ run : |
62+ $projectsArray = @(
63+ '.\src\Microsoft.OpenApi\Microsoft.OpenApi.csproj',
64+ '.\src\Microsoft.OpenApi.Readers\Microsoft.OpenApi.Readers.csproj',
65+ '.\src\Microsoft.OpenApi.Tool\Microsoft.OpenApi.Tool.csproj'
66+ )
67+ $gitNewVersion = if ("${{ steps.tag_generator.outputs.new_version }}") {"${{ steps.tag_generator.outputs.new_version }}"} else {$null}
68+ $projectCurrentVersion = ([xml](Get-Content .\src\Microsoft.OpenApi\Microsoft.OpenApi.csproj)).Project.PropertyGroup.Version
69+ $projectNewVersion = $gitNewVersion ?? $projectCurrentVersion
70+
71+ $projectsArray | ForEach-Object {
72+ dotnet build $PSItem `
73+ -c Release # `
74+ # -o $env:ARTIFACTS_FOLDER `
75+ # /p:Version=$projectNewVersion
76+ }
77+
78+ # Move NuGet packages to separate folder for pipeline convenience
79+ # New-Item Artifacts/NuGet -ItemType Directory
80+ # Get-ChildItem Artifacts/*.nupkg | Move-Item -Destination "Artifacts/NuGet"
81+
82+ - name : Run unit tests
83+ id : run_unit_tests
84+ shell : pwsh
85+ run : |
86+ $testProjectsArray = @(
87+ '.\test\Microsoft.OpenApi.Tests\Microsoft.OpenApi.Tests.csproj',
88+ '.\test\Microsoft.OpenApi.Readers.Tests\Microsoft.OpenApi.Readers.Tests.csproj',
89+ '.\test\Microsoft.OpenApi.SmokeTests\Microsoft.OpenApi.SmokeTests.csproj'
90+ )
91+
92+ $testProjectsArray | ForEach-Object {
93+ dotnet test $PSItem `
94+ -c Release
95+ }
96+
97+ # - if: steps.tag_generator.outputs.new_version != ''
98+ # name: Upload NuGet packages as artifacts
99+ # id: ul_packages_artifact
100+ # uses: actions/upload-artifact@v1
101+ # with:
102+ # name: NuGet packages
103+ # path: Artifacts/NuGet/
104+
105+ cd :
106+ if : needs.ci.outputs.is_default_branch == 'true' && needs.ci.outputs.latest_version != ''
107+ name : Continuous Deployment
108+ needs : ci
109+ runs-on : ubuntu-latest
110+ steps :
111+ # - name: Download and extract NuGet packages
112+ # id: dl_packages_artifact
113+ # uses: actions/download-artifact@v2
114+ # with:
115+ # name: NuGet packages
116+ # path: NuGet/
117+
118+ # - name: Push NuGet packages to NuGet.org
119+ # id: push_nuget_packages
120+ # continue-on-error: true
121+ # shell: pwsh
122+ # run: |
123+ # Get-ChildItem NuGet/*.nupkg | ForEach-Object {
124+ # nuget push $PSItem `
125+ # -ApiKey $env:NUGET_API_KEY `
126+ # -Source https://api.nuget.org/v3/index.json
127+ # }
128+ # env:
129+ # NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}
130+
131+ - name : Create and publish release
132+ id : create_release
133+ uses : softprops/action-gh-release@v1
134+ with :
135+ name : OpenApi v${{ needs.ci.outputs.latest_version }}
136+ tag_name : v${{ needs.ci.outputs.latest_version }}
137+ # files: |
138+ # NuGet/Microsoft.OpenApi.${{ needs.ci.outputs.latest_version }}.nupkg
139+ # NuGet/Microsoft.OpenApi.Readers.${{ needs.ci.outputs.latest_version }}.nupkg
140+ env :
141+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
142+
143+ # Built with ❤ by [Pipeline Foundation](https://pipeline.foundation)
0 commit comments