main.yml 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. name: Build, Test And Create Nuget Package
  2. permissions: {}
  3. on:
  4. push:
  5. branches: [ main ]
  6. workflow_dispatch:
  7. jobs:
  8. main:
  9. name: ${{ matrix.runtime.name }}
  10. runs-on: ${{ matrix.runtime.runs-on }}
  11. container: ${{ matrix.runtime.container }}
  12. timeout-minutes: 20
  13. strategy:
  14. fail-fast: false
  15. matrix:
  16. runtime:
  17. - name: win-x64
  18. runs-on: windows-latest-xlarge
  19. # - name: win-x86
  20. # runs-on: windows-latest-xlarge
  21. - name: linux-x64
  22. runs-on: ubuntu-latest-xlarge
  23. container: ubuntu:24.04
  24. - name: linux-arm64
  25. runs-on: ubuntu-latest-xlarge-arm64
  26. container: ubuntu:24.04
  27. - name: linux-musl-x64
  28. runs-on: ubuntu-latest-xlarge
  29. container: alpine:3.20
  30. - name: osx-x64
  31. runs-on: macos-latest-large
  32. - name: osx-arm64
  33. runs-on: macos-latest-xlarge
  34. steps:
  35. - name: Checkout sources
  36. uses: actions/checkout@v4
  37. - name: Install Build Tools (Linux)
  38. if: matrix.runtime.name == 'linux-x64' || matrix.runtime.name == 'linux-arm64'
  39. shell: sh
  40. run: |
  41. apt update --yes
  42. apt upgrade --yes
  43. # required by actions/setup-dotnet
  44. apt install bash wget --yes
  45. # required by conformance testing tools: veraPDF and mustang
  46. apt install unzip default-jre --yes
  47. java -version
  48. - name: Install Build Tools (Alpine)
  49. if: matrix.runtime.name == 'linux-musl-x64'
  50. shell: sh
  51. run: |
  52. apk update
  53. apk upgrade
  54. # required by actions/setup-dotnet
  55. apk add bash wget
  56. # required by dotnet build command
  57. apk add libstdc++ libgcc
  58. - name: Setup dotnet
  59. uses: actions/setup-dotnet@v5
  60. with:
  61. dotnet-version: '10.0.x'
  62. - name: Install veraPDF - PDF conformance testing tool
  63. if: matrix.runtime.name == 'linux-x64'
  64. run: |
  65. mkdir -p ~/verapdf
  66. cd ~/verapdf
  67. wget -q https://software.verapdf.org/rel/verapdf-installer.zip
  68. unzip -q verapdf-installer.zip
  69. rm verapdf-installer.zip
  70. mv verapdf* verapdf
  71. cd verapdf
  72. printf "1\n\nO\n1\nY\nY\nN\n1\nY\n\n" | ./verapdf-install
  73. alias verapdf='/root/verapdf/verapdf'
  74. verapdf --version
  75. - name: Install mustang - ZUGFeRD conformance testing tool
  76. if: matrix.runtime.name == 'linux-x64'
  77. run: |
  78. mkdir -p /root/mustang
  79. cd /root/mustang
  80. wget https://repo1.maven.org/maven2/org/mustangproject/Mustang-CLI/2.20.0/Mustang-CLI-2.20.0.jar -O mustang-cli.jar
  81. alias mustang='java -jar /root/mustang/mustang-cli.jar'
  82. mustang --help
  83. - name: Build and test solution
  84. shell: bash
  85. working-directory: ./Source
  86. env:
  87. VERAPDF_EXECUTABLE_PATH: '/root/verapdf/verapdf'
  88. MUSTANG_EXECUTABLE_PATH: '/root/mustang/mustang-cli.jar'
  89. DOTNET_SYSTEM_GLOBALIZATION_INVARIANT: 1
  90. run: |
  91. dotnet build --configuration Release --property WarningLevel=0
  92. dotnet test QuestPDF.UnitTests --configuration Release --runtime ${{ matrix.runtime.name }} --framework net10.0
  93. dotnet test QuestPDF.LayoutTests --configuration Release --runtime ${{ matrix.runtime.name }} --framework net10.0
  94. dotnet test QuestPDF.VisualTests --configuration Release --runtime ${{ matrix.runtime.name }} --framework net10.0
  95. dotnet test QuestPDF.DocumentationExamples --configuration Release --runtime ${{ matrix.runtime.name }} --framework net10.0
  96. dotnet test QuestPDF.ReportSample --configuration Release --runtime ${{ matrix.runtime.name }} --framework net10.0
  97. dotnet test QuestPDF.ZUGFeRD --configuration Release --runtime ${{ matrix.runtime.name }} --framework net10.0
  98. if [ "${{ matrix.runtime.name }}" == "linux-x64" ]; then
  99. dotnet test QuestPDF.ConformanceTests --configuration Release --runtime ${{ matrix.runtime.name }} --framework net10.0
  100. fi
  101. dotnet build QuestPDF/QuestPDF.csproj --configuration Release --property WarningLevel=0 --property BUILD_PACKAGE=true
  102. TEST_EXECUTION_PATH='QuestPDF.ReportSample/bin/Release/net10.0/${{ matrix.runtime.name }}'
  103. mkdir -p testOutput/${{ matrix.runtime.name }}
  104. cp -r $TEST_EXECUTION_PATH/report.pdf testOutput/${{ matrix.runtime.name }}
  105. - name: Upload test results
  106. uses: actions/upload-artifact@v4
  107. with:
  108. name: questpdf-test-results-${{ matrix.runtime.name }}
  109. path: |
  110. **/*.pdf
  111. - name: Upload nuget artifacts
  112. uses: actions/upload-artifact@v4
  113. if: ${{ matrix.runtime.name == 'win-x64' }}
  114. with:
  115. name: questpdf-nuget-package
  116. path: |
  117. **/*.nupkg
  118. **/*.snupkg
  119. !.nuget
  120. merge:
  121. runs-on: ubuntu-latest
  122. needs: main
  123. steps:
  124. - name: Merge Artifacts
  125. uses: actions/upload-artifact/merge@v4
  126. with:
  127. name: questpdf-test-results
  128. pattern: questpdf-test-results-*
  129. delete-merged: true