|
| 1 | +#!/usr/bin/env ruby |
| 2 | + |
| 3 | +desc 'Get code coverage report and run complexity analysis for Sonar' |
| 4 | +lane :sonar_upload do |
| 5 | + version_number = get_version_number( |
| 6 | + xcodeproj: 'StreamChatSwiftUI.xcodeproj', |
| 7 | + target: 'StreamChatSwiftUI' |
| 8 | + )[/\d+\.\d+\.\d/] |
| 9 | + |
| 10 | + slather |
| 11 | + |
| 12 | + lizard( |
| 13 | + source_folder: './Sources/', |
| 14 | + language: 'swift', |
| 15 | + export_type: 'xml', |
| 16 | + report_file: 'reports/lizard.xml' |
| 17 | + ) |
| 18 | + |
| 19 | + if ENV['GITHUB_EVENT_NAME'] == 'pull_request' |
| 20 | + sonar( |
| 21 | + sonar_login: ENV['SONAR_TOKEN'], |
| 22 | + pull_request_branch: ENV['GITHUB_HEAD_REF'], |
| 23 | + pull_request_base: ENV['GITHUB_BASE_REF'], |
| 24 | + pull_request_key: ENV['PR_NUMBER'], |
| 25 | + project_version: version_number |
| 26 | + ) |
| 27 | + else |
| 28 | + branch = git_branch |
| 29 | + |
| 30 | + sonar( |
| 31 | + sonar_login: ENV['SONAR_TOKEN'], |
| 32 | + branch_name: branch, |
| 33 | + project_version: version_number |
| 34 | + ) |
| 35 | + |
| 36 | + case branch.to_sym |
| 37 | + when :main |
| 38 | + slack_sonarcloud_metrics(new_period: version_number, branch: branch) |
| 39 | + when :develop |
| 40 | + slack_sonarcloud_metrics(branch: branch) |
| 41 | + end |
| 42 | + end |
| 43 | +end |
| 44 | + |
| 45 | +desc 'Creates a report in Slack with SonarCloud analysis details' |
| 46 | +private_lane :slack_sonarcloud_metrics do |options| |
| 47 | + project_key = 'GetStream_stream-chat-swiftui' |
| 48 | + metrics = sonarcloud_metric_kit( |
| 49 | + project_key: project_key, |
| 50 | + quality_gate: true, |
| 51 | + branch: options[:branch] |
| 52 | + ) |
| 53 | + new_period = options[:new_period] || options[:branch] |
| 54 | + new_coverage = metrics[:new_coverage].to_f.round(2) |
| 55 | + new_duplication_density = metrics[:new_duplicated_lines_density].to_f.round(2) |
| 56 | + vulnerabilities = metrics[:security_hotspots].to_i + metrics[:vulnerabilities].to_i |
| 57 | + new_vulnerabilities = metrics[:new_security_hotspots].to_i + metrics[:new_vulnerabilities].to_i |
| 58 | + |
| 59 | + release_status = "From *#{metrics[:period_value]}* to *#{new_period}*\n _#{metrics[:new_lines_to_cover]}_ new lines of code 🚀" |
| 60 | + coverage_status = "Total: _#{metrics[:coverage]}%_\nOn new code: _#{new_coverage}%_ #{new_coverage < 80 ? '⚠️' : '✅'}" |
| 61 | + duplication_status = "Total: _#{metrics[:duplicated_lines_density]}%_\nOn new code: _#{new_duplication_density}%_ #{new_duplication_density < 3 ? '✅' : '⚠️'}" |
| 62 | + code_smells_status = "Total: _#{metrics[:code_smells]}_\nNew: _#{metrics[:new_code_smells]}_ #{metrics[:new_code_smells].to_i.positive? ? '🙊' : '✅'}" |
| 63 | + bugs_status = "Total: _#{metrics[:bugs]}_\nNew: _#{metrics[:new_bugs]}_ #{metrics[:new_bugs].to_i.positive? ? '⚠️' : '✅'}" |
| 64 | + security_status = "Total: _#{vulnerabilities}_\nNew: _#{new_vulnerabilities}_ #{new_vulnerabilities.positive? ? '⚠️' : '✅'}" |
| 65 | + |
| 66 | + slack( |
| 67 | + message: "[StreamChatSwiftUI](https://sonarcloud.io/summary/new_code?id=#{project_key}&branch=#{options[:branch]})", |
| 68 | + attachment_properties: { |
| 69 | + thumb_url: 'https://pbs.twimg.com/profile_images/955394530806829056/LC7DAYM3_400x400.jpg', |
| 70 | + fields: [ |
| 71 | + { title: 'Update', value: release_status, short: true }, |
| 72 | + { title: 'Code coverage', value: coverage_status, short: true }, |
| 73 | + { title: 'Duplicated lines density', value: duplication_status, short: true }, |
| 74 | + { title: 'Code smells', value: code_smells_status, short: true }, |
| 75 | + { title: 'Bugs', value: bugs_status, short: true }, |
| 76 | + { title: 'Vulnerabilities & Security hotspots', value: security_status, short: true } |
| 77 | + ] |
| 78 | + }, |
| 79 | + default_payloads: [], |
| 80 | + slack_url: ENV['SLACK_WEBHOOK_URL'] |
| 81 | + ) |
| 82 | +end |
0 commit comments