diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index 8e5cb1f51..171690a50 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -1,6 +1,6 @@ name: CI/CD Pipeline -on: [push, pull_request, workflow_dispatch] +on: [ push, pull_request, workflow_dispatch ] jobs: ci: @@ -8,7 +8,6 @@ jobs: 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 }} @@ -18,27 +17,6 @@ jobs: with: dotnet-version: 6.0.x - - name: Data gatherer - id: data_gatherer - shell: pwsh - run: | - # Get default branch - $repo = 'microsoft/OpenAPI.NET' - $defaultBranch = Invoke-RestMethod -Method GET -Uri https://api.github.com/repos/$repo | Select-Object -ExpandProperty default_branch - Write-Output "::set-output name=default_branch::$(echo $defaultBranch)" - - - 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 "::set-output name=is_default_branch::$(echo $isDefaultBranch)" - - name: Checkout repository id: checkout_repo uses: actions/checkout@v3 @@ -46,54 +24,53 @@ jobs: token: ${{ secrets.GITHUB_TOKEN }} fetch-depth: 0 - - if: steps.conditionals_handler.outputs.is_default_branch == 'true' + - if: github.event_name == 'push' && github.ref == 'refs/heads/master' name: Bump GH tag id: tag_generator uses: mathieudutour/github-tag-action@v6.0 with: github_token: ${{ secrets.GITHUB_TOKEN }} default_bump: false - release_branches: ${{ steps.data_gatherer.outputs.default_branch }} + release_branches: master - name: Build projects id: build_projects shell: pwsh run: | - $projectsArray = @( - '.\src\Microsoft.OpenApi\Microsoft.OpenApi.csproj', - '.\src\Microsoft.OpenApi.Readers\Microsoft.OpenApi.Readers.csproj', - '.\src\Microsoft.OpenApi.Hidi\Microsoft.OpenApi.Hidi.csproj' - ) $gitNewVersion = if ("${{ steps.tag_generator.outputs.new_version }}") {"${{ steps.tag_generator.outputs.new_version }}"} else {$null} - $projectCurrentVersion = ([xml](Get-Content .\src\Microsoft.OpenApi\Microsoft.OpenApi.csproj)).Project.PropertyGroup.Version + $projectCurrentVersion = ([xml](Get-Content -Path .\src\Microsoft.OpenApi\Microsoft.OpenApi.csproj)).Project.PropertyGroup.Version $projectNewVersion = $gitNewVersion ?? $projectCurrentVersion - $projectsArray | ForEach-Object { - dotnet build $PSItem ` - -c Release # ` - # -o $env:ARTIFACTS_FOLDER ` - # /p:Version=$projectNewVersion + Get-ChildItem -Path src/ -Filter *.csproj -Exclude *Workbench* -File -Recurse | ForEach-Object { + dotnet build $PSItem.FullName ` + --configuration Release # ` + # --output $env:ARTIFACTS_FOLDER ` + # -property: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" + # New-Item -Name Artifacts/NuGet -ItemType Directory + # Get-ChildItem -Path Artifacts/ -Filter *.nupkg | Move-Item -Destination Artifacts/NuGet - name: Run unit tests id: run_unit_tests shell: pwsh run: | - $testProjectsArray = @( - '.\test\Microsoft.OpenApi.Tests\Microsoft.OpenApi.Tests.csproj', - '.\test\Microsoft.OpenApi.Readers.Tests\Microsoft.OpenApi.Readers.Tests.csproj', - '.\test\Microsoft.OpenApi.SmokeTests\Microsoft.OpenApi.SmokeTests.csproj' - ) - - $testProjectsArray | ForEach-Object { - dotnet test $PSItem ` - -c Release + Get-ChildItem -Path test/ -Filter *.csproj -File -Recurse | ForEach-Object { + $fileBaseName = $PSItem.Basename + dotnet test $PSItem.FullName ` + --configuration Release ` + --logger "trx;LogFileName=$fileBaseName.trx;verbosity=normal" ` + --results-directory TestResults/ } + - name: Upload test results as artifacts + id: ul_testresults_artifact + uses: actions/upload-artifact@v1 + with: + name: TestResults + path: TestResults/ + # - if: steps.tag_generator.outputs.new_version != '' # name: Upload NuGet packages as artifacts # id: ul_packages_artifact @@ -103,11 +80,18 @@ jobs: # path: Artifacts/NuGet/ cd: - if: needs.ci.outputs.is_default_branch == 'true' && needs.ci.outputs.latest_version != '' + if: needs.ci.outputs.latest_version != '' name: Continuous Deployment needs: ci runs-on: ubuntu-latest steps: + - name: Checkout repository + id: checkout_repo + uses: actions/checkout@v2 + with: + token: ${{ secrets.GITHUB_TOKEN }} + fetch-depth: 0 + # - name: Download and extract NuGet packages # id: dl_packages_artifact # uses: actions/download-artifact@v2 @@ -120,8 +104,8 @@ jobs: # continue-on-error: true # shell: pwsh # run: | - # Get-ChildItem NuGet/*.nupkg | ForEach-Object { - # nuget push $PSItem ` + # Get-ChildItem -Path NuGet/ -Filter *.nupkg | ForEach-Object { + # nuget push $PSItem.FullName ` # -ApiKey $env:NUGET_API_KEY ` # -Source https://api.nuget.org/v3/index.json # } @@ -130,14 +114,14 @@ jobs: - name: Create and publish release id: create_release - uses: softprops/action-gh-release@v1 - with: - name: OpenApi 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 + shell: pwsh + run: | + $releaseTag = "v${{ needs.ci.outputs.latest_version }}" + $releaseTitle = "OpenApi v${{ needs.ci.outputs.latest_version }}" + # $releaseAssets = 'NuGet/Microsoft.OpenApi.${{ needs.ci.outputs.latest_version }}.nupkg', 'NuGet/Microsoft.OpenApi.Readers.${{ needs.ci.outputs.latest_version }}.nupkg' + + gh release create $releaseTag -t $releaseTitle $releaseAssets env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Built with ❤ by [Pipeline Foundation](https://pipeline.foundation) \ No newline at end of file