Skip to content

fix(release): route v2 publishing by component tag #2572

fix(release): route v2 publishing by component tag

fix(release): route v2 publishing by component tag #2572

Workflow file for this run

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)