# This is a basic workflow that is manually triggered name: regression_template on: workflow_call: inputs: install_script: default: './scripts/install.sh' required: false type: string build_script: default: './scripts/build.sh' required: false type: string test_script: default: './scripts/test.sh' required: false type: string cmake_path: default: './test/cmake' required: false type: string skip_test: default: false required: false type: boolean skip_coverage: default: false required: false type: boolean coverage_name: default: 'default_build_coverage' required: false type: string skip_deploy: default: false required: false type: boolean deploy_list: default: '' required: false type: string result_affix: default: '' required: false type: string # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: # This workflow contains a single job called "linux_job" run_tests: if: ${{ !inputs.skip_test}} permissions: contents: read issues: read checks: write pull-requests: write # The type of runner that the job will run on runs-on: ubuntu-latest # Steps represent a sequence of tasks that will be executed as part of the job steps: - name: Check out the repository uses: actions/checkout@v4 with: submodules: true - name: Install softwares run: ${{ inputs.install_script }} - name: Build run: ${{ inputs.build_script }} - name: Test run: ${{ inputs.test_script }} - name: Publish Test Results uses: EnricoMi/publish-unit-test-result-action@v2.11.0 if: always() with: check_name: Test Results ${{ inputs.result_affix }} files: | ${{ inputs.cmake_path }}/build/*/*.xml - name: Upload Test Results if: success() || failure() uses: actions/upload-artifact@v3.1.3 with: name: test_reports ${{ inputs.result_affix }} path: | ${{ inputs.cmake_path }}/build/*.txt ${{ inputs.cmake_path }}/build/*/Testing/**/*.xml ${{ inputs.cmake_path }}/build/**/regression/output_files/*.bin - name: Configure GitHub Pages uses: actions/configure-pages@v3.0.6 - name: Generate Code Coverage Results Summary if: (!inputs.skip_coverage) uses: irongut/CodeCoverageSummary@v1.3.0 with: filename: ${{ inputs.cmake_path }}/coverage_report/${{ inputs.coverage_name }}.xml format: markdown badge: true hide_complexity: true output: file - name: Write Code Coverage Summary if: (!inputs.skip_coverage) run: | echo "## Coverage Report ${{ inputs.result_affix }}" >> $GITHUB_STEP_SUMMARY cat code-coverage-results.md >> $GITHUB_STEP_SUMMARY - name: Create CheckRun for Code Coverage if: ((github.event_name == 'push') || (github.event_name == 'workflow_dispatch') || (github.event.pull_request.head.repo.full_name == github.repository)) && (!inputs.skip_coverage) uses: LouisBrunner/checks-action@v1.6.2 with: token: ${{ secrets.GITHUB_TOKEN }} name: Code Coverage ${{ inputs.result_affix }} conclusion: ${{ job.status }} output: | {"summary":"Coverage Report"} output_text_description_file: code-coverage-results.md - name: Add Code Coverage PR Comment if: ((github.event_name == 'push') || (github.event.pull_request.head.repo.full_name == github.repository)) && (!inputs.skip_coverage) uses: marocchino/sticky-pull-request-comment@v2 with: header: Code Coverage ${{ inputs.result_affix }} path: code-coverage-results.md # Add sudo to move coverage folder created by root user - name: Prepare Coverage GitHub Pages if: (!inputs.skip_coverage) run: >- if [ "${{ inputs.result_affix }}" != "" ] && ${{ inputs.skip_deploy }}; then sudo mv ${{ inputs.cmake_path }}/coverage_report/${{ inputs.coverage_name }} \ ${{ inputs.cmake_path }}/coverage_report/${{ inputs.result_affix }} fi - name: Upload Code Coverage Artifacts uses: actions/upload-artifact@v3.1.3 if: (inputs.skip_deploy && !inputs.skip_coverage) with: name: coverage_report path: ${{ inputs.cmake_path }}/coverage_report retention-days: 1 - name: Upload Code Coverage Pages uses: actions/upload-pages-artifact@v2.0.0 if: (!inputs.skip_deploy && !inputs.skip_coverage) with: path: ${{ inputs.cmake_path }}/coverage_report/${{ inputs.coverage_name }} deploy_code_coverage: runs-on: ubuntu-latest if: ((github.event_name == 'push') || (github.event_name == 'workflow_dispatch')) && !inputs.skip_coverage && !inputs.skip_deploy && !failure() && !cancelled() needs: run_tests environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} permissions: pages: write id-token: write steps: - uses: actions/download-artifact@v3 if: ${{ inputs.skip_test }} with: name: coverage_report - name: Upload Code Coverage Pages uses: actions/upload-pages-artifact@v2.0.0 if: ${{ inputs.skip_test }} with: path: . - name: Delete Duplicate Code Coverage Artifact uses: geekyeggo/delete-artifact@v2 with: name: coverage_report - name: Deploy GitHub Pages site id: deployment uses: actions/deploy-pages@v1.2.9 - name: Write Code Coverage Report URL run: >- if [ "${{ inputs.deploy_list }}" != "" ]; then for i in ${{ inputs.deploy_list }}; do echo 'Coverage report for ' $i ':${{ steps.deployment.outputs.page_url }}'$i >> $GITHUB_STEP_SUMMARY done else echo 'Coverage report: ${{ steps.deployment.outputs.page_url }}' >> $GITHUB_STEP_SUMMARY fi