diff --git a/README.md b/README.md index 495078f..b381d7d 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,18 @@ But no need to generate any new token, you can use the Github action token (`${{ token: ${{ github.token }} ``` +#### Report name + +```yml +- uses: devmasx/coverage-check-action@v1.2.0 + with: + type: lcov + result_path: coverage/example.lcov + min_coverage: 90 + token: ${{ github.token }} + report_name: "My Github Action Check Name" +``` + ## Screenshots ![Success](./screenshots/success.png) diff --git a/action.yml b/action.yml index 673b54e..e2f0dd9 100644 --- a/action.yml +++ b/action.yml @@ -6,7 +6,7 @@ branding: color: "green" inputs: type: - description: "lcov | simplecov" + description: "lcov | simplecov | phpunit" required: true default: "lcov" token: @@ -15,6 +15,9 @@ inputs: min_coverage: description: "Minimum coverage" default: "80" + report_name: + description: "Name of the github action check" + default: "Coverage" result_path: description: "Json with coverage result" required: true diff --git a/lib/coverage_report.rb b/lib/coverage_report.rb index 8752daa..73ceae4 100644 --- a/lib/coverage_report.rb +++ b/lib/coverage_report.rb @@ -7,6 +7,8 @@ def generate(type, report_path, data) simplecov(report_path, data) elsif type == 'lcov' lcov(report_path, data) + elsif type == 'phpunit' + phpunit(report_path, data) else raise 'InvalidCoverageReportType' end @@ -25,6 +27,12 @@ def lcov(report_path, data) { 'lines' => { 'covered_percent' => lcov_covered_percent(lcov_result), 'minumum_percent' => minumum_percent } } end + def phpunit(report_path, data) + phpunit_result = execute_phpunit_parse(report_path) + minumum_percent = data[:min] + { 'lines' => { 'covered_percent' => phpunit_covered_percent(phpunit_result), 'minumum_percent' => minumum_percent} } + end + private def lcov_covered_percent(lcov_result) @@ -39,6 +47,22 @@ def execute_lcov_parse(report_path) JSON.parse(`node #{bin_path}/lcov-parse.js #{report_path}`) end + + def phpunit_covered_percent(phpunit_result) + # example for + # phpunit --coverage-text + # Summary: + # Classes: 10.14% (14/138) + # Methods: 16.67% (107/642) + # Lines: 13.95% (1059/7591) + + /Lines: * ([0-9\.]*)%/.match(phpunit_result)[1].to_f + end + + def execute_phpunit_parse(report_path) + File.read(report_path) + end + def read_json(path) JSON.parse(File.read(path)) end diff --git a/lib/github_check_run_service.rb b/lib/github_check_run_service.rb index 6d8feca..878d81e 100644 --- a/lib/github_check_run_service.rb +++ b/lib/github_check_run_service.rb @@ -1,11 +1,10 @@ # frozen_string_literal: true class GithubCheckRunService - CHECK_NAME = 'Coverage' - - def initialize(report, github_data, report_adapter) + def initialize(report, github_data, report_name, report_adapter) @report = report @github_data = github_data + @report_name = report_name @report_adapter = report_adapter @client = GithubClient.new(@github_data[:token], user_agent: 'coverage-action') end @@ -34,7 +33,7 @@ def endpoint_url def create_check_payload { - name: CHECK_NAME, + name: @report_name, head_sha: @github_data[:sha], status: 'in_progress', started_at: Time.now.iso8601 @@ -43,13 +42,13 @@ def create_check_payload def update_check_payload { - name: CHECK_NAME, + name: @report_name, head_sha: @github_data[:sha], status: 'completed', completed_at: Time.now.iso8601, conclusion: @conclusion, output: { - title: "#{CHECK_NAME} #{@percent}%", + title: "#{@report_name} #{@percent}%", summary: @summary, annotations: @annotations } diff --git a/lib/index.rb b/lib/index.rb index e888441..0b2e64c 100644 --- a/lib/index.rb +++ b/lib/index.rb @@ -17,13 +17,14 @@ def read_json(path) sha: ENV['GITHUB_SHA'], token: ENV['INPUT_TOKEN'], owner: ENV['GITHUB_REPOSITORY_OWNER'] || @event_json.dig('repository', 'owner', 'login'), - repo: ENV['GITHUB_REPOSITORY_NAME'] || @event_json.dig('repository', 'name') + repo: ENV['GITHUB_REPOSITORY_NAME'] || @event_json.dig('repository', 'name'), } @coverage_type = ENV['INPUT_TYPE'] @report_path = ENV['INPUT_RESULT_PATH'] +@report_name = ENV['INPUT_REPORT_NAME'] @data = { min: ENV['INPUT_MIN_COVERAGE'] } @report = CoverageReport.generate(@coverage_type, @report_path, @data) -GithubCheckRunService.new(@report, @github_data, ReportAdapter).run +GithubCheckRunService.new(@report, @github_data, @report_name, ReportAdapter).run diff --git a/spec/github_check_run_service_spec.rb b/spec/github_check_run_service_spec.rb index b76cb51..036a85e 100644 --- a/spec/github_check_run_service_spec.rb +++ b/spec/github_check_run_service_spec.rb @@ -7,7 +7,8 @@ { 'lines' => { 'covered_percent' => 80, 'minumum_percent' => 80 } } end let(:github_data) { { sha: 'sha', token: 'token', owner: 'owner', repo: 'repository_name' } } - let(:service) { GithubCheckRunService.new(report, github_data, ReportAdapter) } + let(:report_name) { 'Coverage' } + let(:service) { GithubCheckRunService.new(report, github_data, report_name, ReportAdapter) } it '#run' do stub_request(:any, 'https://api.github.com/repos/owner/repository_name/check-runs/id')