Repository navigation
fix(release): route v2 publishing by component tag #2572
Workflow file for this run
This file contains hidden or 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: CI/CD Pipeline | |
| on: [push, pull_request, workflow_dispatch] | |
| permissions: | |
| contents: write | |
| jobs: | |
| ci: | |
| name: Continuous Integration | |
| runs-on: ubuntu-latest | |
| outputs: | |
| latest_version: ${{ steps.tag_generator.outputs.new_version }} | |
| is_default_branch: ${{ steps.conditionals_handler.outputs.is_default_branch }} | |
| env: | |
| ARTIFACTS_FOLDER: ${{ github.workspace }}/Artifacts | |
| GITHUB_RUN_NUMBER: ${{ github.run_number }} | |
| steps: | |
| - name: Setup .NET | |
| uses: actions/setup-dotnet@v5 | |
| with: | |
| dotnet-version: | | |
| 8.0.x | |
| 10.0.x | |
| - name: Data gatherer | |
| id: data_gatherer | |
| shell: pwsh | |
| run: | | |
| # Get default branch | |
| $repo = 'microsoft/OpenAPI.NET.OData' | |
| $defaultBranch = Invoke-RestMethod -Method GET -Uri https://api.github.com/repos/$repo | Select-Object -ExpandProperty default_branch | |
| Write-Output "default_branch=$(echo $defaultBranch) >> $GITHUB_OUTPUT" | |
| - name: Conditionals handler | |
| id: conditionals_handler | |
| shell: pwsh | |
| run: | | |
| $defaultBranch = "${{ steps.data_gatherer.outputs.default_branch }}" | |
| $githubRef = "${{ github.ref }}" | |
| $isDefaultBranch = 'false' | |
| if ( $githubRef -like "*$defaultBranch*" ) { | |
| $isDefaultBranch = 'true' | |
| } | |
| Write-Output "is_default_branch=$(echo $isDefaultBranch) >> $GITHUB_OUTPUT" | |
| - name: Checkout repository | |
| id: checkout_repo | |
| uses: actions/checkout@v6 | |
| with: | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| fetch-depth: 0 | |
| - if: steps.conditionals_handler.outputs.is_default_branch == 'true' | |
| name: Bump GH tag | |
| id: tag_generator | |
| uses: mathieudutour/github-tag-action@v6.2 | |
| with: | |
| github_token: ${{ secrets.GITHUB_TOKEN }} | |
| default_bump: false | |
| release_branches: ${{ steps.data_gatherer.outputs.default_branch }} | |
| - name: Build projects | |
| id: build_projects | |
| shell: pwsh | |
| run: | | |
| $projectsArray = @( | |
| '.\src\Microsoft.OpenApi.OData.Reader\Microsoft.OpenAPI.OData.Reader.csproj' | |
| ) | |
| $gitNewVersion = if ("${{ steps.tag_generator.outputs.new_version }}") {"${{ steps.tag_generator.outputs.new_version }}"} else {$null} | |
| $projectCurrentVersion = ([xml](Get-Content .\src\Microsoft.OpenApi.OData.Reader\Microsoft.OpenAPI.OData.Reader.csproj)).Project.PropertyGroup.Version | |
| $projectNewVersion = $gitNewVersion ?? $projectCurrentVersion | |
| $projectsArray | ForEach-Object { | |
| dotnet build $PSItem ` | |
| -c Release # ` | |
| # -o $env:ARTIFACTS_FOLDER ` | |
| # /p:Version=$projectNewVersion | |
| } | |
| # Move NuGet packages to separate folder for pipeline convenience | |
| # New-Item Artifacts/NuGet -ItemType Directory | |
| # Get-ChildItem Artifacts/*.nupkg | Move-Item -Destination "Artifacts/NuGet" | |
| - name: Run unit tests | |
| id: run_unit_tests | |
| shell: pwsh | |
| run: | | |
| $testProjectsArray = @( | |
| '.\test\Microsoft.OpenAPI.OData.Reader.Tests\Microsoft.OpenAPI.OData.Reader.Tests.csproj' | |
| ) | |
| $testProjectsArray | ForEach-Object { | |
| dotnet test $PSItem ` | |
| -c Release | |
| } | |
| - name: Run hidi tests (Microsoft.Testing.Platform) | |
| shell: pwsh | |
| run: | | |
| dotnet run --project .\test\Microsoft.OpenApi.Hidi.Tests\Microsoft.OpenApi.Hidi.Tests.csproj -c Release -- --minimum-expected-tests 1 | |
| if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } | |
| - name: Pack and install hidi locally | |
| shell: pwsh | |
| run: | | |
| dotnet pack .\src\Microsoft.OpenApi.Hidi\Microsoft.OpenApi.Hidi.csproj -c Release --no-build -o .\artifacts\hidi\nuget | |
| if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } | |
| .\install-tool.ps1 | |
| if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } | |
| $workspace = (Get-Location).Path | |
| $fixtures = Join-Path $workspace 'test' 'Microsoft.OpenApi.Hidi.Tests' 'UtilityFiles' | |
| $outputs = Join-Path $workspace 'artifacts' 'hidi' | |
| $hidi = Join-Path $outputs 'installed' 'hidi' | |
| $sampleInput = Join-Path $fixtures 'SampleOpenApi.yml' | |
| $csdlInput = Join-Path $fixtures 'Todo.xml' | |
| $jsonOutput = Join-Path $outputs 'openapi.json' | |
| $csdlOutput = Join-Path $outputs 'csdl.yaml' | |
| $diagramOutput = Join-Path $outputs 'diagram.md' | |
| & $hidi --help | |
| if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } | |
| & $hidi validate --openapi $sampleInput | |
| if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } | |
| & $hidi transform --openapi $sampleInput --format json --version 3.0 --output $jsonOutput --clean-output | |
| if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } | |
| & $hidi transform --csdl $csdlInput --format yaml --version 3.0 --output $csdlOutput --clean-output | |
| if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } | |
| $document = Get-Content $jsonOutput -Raw | ConvertFrom-Json | |
| if ($document.openapi -notlike '3.0.*' -or @($document.paths.PSObject.Properties).Count -eq 0) { | |
| throw "Expected an OpenAPI 3.0 document with paths from SampleOpenApi." | |
| } | |
| $csdlDocument = Get-Content $csdlOutput -Raw | |
| if ($csdlDocument -notmatch '(?m)^openapi:\s*3\.0\.' -or $csdlDocument -notmatch '(?m)^ /Todos:\s*$' -or $csdlDocument -notmatch '(?m)^ schemas:\s*$') { | |
| throw "Expected OpenAPI 3.0, /Todos paths and schemas in the CSDL YAML output." | |
| } | |
| & $hidi show --openapi $sampleInput --output $diagramOutput | |
| if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } | |
| if (-not (Select-String $diagramOutput -Pattern 'mermaid' -Quiet)) { throw "Expected a Mermaid diagram from hidi show." } | |
| - name: Upload hidi NuGet artifact (not a release) | |
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 | |
| with: | |
| name: hidi-nuget | |
| path: artifacts/hidi/nuget | |
| if-no-files-found: error | |
| # - if: steps.tag_generator.outputs.new_version != '' | |
| # name: Upload NuGet packages as artifacts | |
| # id: ul_packages_artifact | |
| # uses: actions/upload-artifact@v1 | |
| # with: | |
| # name: NuGet packages | |
| # path: Artifacts/NuGet/ | |
| hidi-windows: | |
| name: Hidi Windows executable | |
| runs-on: windows-latest | |
| permissions: | |
| contents: read | |
| steps: | |
| - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6 | |
| - uses: actions/setup-dotnet@26b0ec14cb23fa6904739307f278c14f94c95bf1 # v5 | |
| with: | |
| dotnet-version: | | |
| 8.0.x | |
| 10.0.x | |
| - name: Publish and smoke-test Windows executable | |
| shell: pwsh | |
| run: | | |
| dotnet publish .\src\Microsoft.OpenApi.Hidi\Microsoft.OpenApi.Hidi.csproj -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -p:PackAsTool=false -p:GeneratePackageOnBuild=false -o .\artifacts\hidi\win-x64 | |
| if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } | |
| & .\artifacts\hidi\win-x64\Microsoft.OpenApi.Hidi.exe --help | |
| if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } | |
| Compress-Archive -Path .\artifacts\hidi\win-x64\* -DestinationPath .\artifacts\hidi\hidi-win-x64.zip | |
| - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 | |
| with: | |
| name: hidi-windows-executable | |
| path: | | |
| artifacts/hidi/hidi-win-x64.zip | |
| artifacts/hidi/win-x64/Microsoft.OpenApi.Hidi.exe | |
| if-no-files-found: error | |
| hidi-docker: | |
| name: Hidi Docker build | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| steps: | |
| - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6 | |
| - name: Build and smoke-test Docker image (no push) | |
| run: | | |
| docker build --tag hidi:ci . | |
| docker run --rm hidi:ci --help | |
| cd: | |
| if: needs.ci.outputs.is_default_branch == 'true' && needs.ci.outputs.latest_version != '' | |
| name: Continuous Deployment | |
| needs: ci | |
| runs-on: ubuntu-latest | |
| steps: | |
| # - name: Download and extract NuGet packages | |
| # id: dl_packages_artifact | |
| # uses: actions/download-artifact@v2 | |
| # with: | |
| # name: NuGet packages | |
| # path: NuGet/ | |
| # - name: Push NuGet packages to NuGet.org | |
| # id: push_nuget_packages | |
| # continue-on-error: true | |
| # shell: pwsh | |
| # run: | | |
| # Get-ChildItem NuGet/*.nupkg | ForEach-Object { | |
| # nuget push $PSItem ` | |
| # -ApiKey $env:NUGET_API_KEY ` | |
| # -Source https://api.nuget.org/v3/index.json | |
| # } | |
| # env: | |
| # NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }} | |
| - name: Create and publish release | |
| id: create_release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| name: OpenAPI.Net.OData v${{ needs.ci.outputs.latest_version }} | |
| tag_name: v${{ needs.ci.outputs.latest_version }} | |
| # files: | | |
| # NuGet/Microsoft.OpenApi.${{ needs.ci.outputs.latest_version }}.nupkg | |
| # NuGet/Microsoft.OpenApi.Readers.${{ needs.ci.outputs.latest_version }}.nupkg | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| # Built with ❤ by [Pipeline Foundation](https://pipeline.foundation) |