-
Notifications
You must be signed in to change notification settings - Fork 1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'master' into jlh/test-restore
- Loading branch information
Showing
57 changed files
with
2,328 additions
and
183 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,110 @@ | ||
name: Dead code detection | ||
on: | ||
pull_request: | ||
types: [opened, labeled, unlabeled, synchronize] | ||
paths: | ||
- '**/*.swift' | ||
|
||
jobs: | ||
dead-code-check: | ||
runs-on: macos-13 | ||
permissions: | ||
pull-requests: write | ||
|
||
steps: | ||
- name: Checkout code | ||
uses: actions/checkout@v2 | ||
with: | ||
fetch-depth: 0 | ||
|
||
- name: Install Periphery | ||
run: brew install peripheryapp/periphery/periphery | ||
|
||
- name: Build project and run Periphery scan | ||
id: periphery-scan | ||
run: | | ||
periphery scan --config .periphery.yml --clean-build 2>&1 | sed -E 's#.*/##; s/:[0-9]+:[0-9]+:/: /' | grep 'is unused' > periphery_report_feature_formatted_sorted.txt | ||
ruby ci_scripts/dead_code/process_periphery_output.rb periphery_report_feature_formatted_sorted.txt unused_code_feature.json | ||
- name: Copy .periphery.yml to temporary location | ||
run: | | ||
# Copy necessary files to /tmp/ before checking out master | ||
cp .periphery.yml /tmp/ | ||
cp ci_scripts/dead_code/process_periphery_output.rb /tmp/ | ||
- name: Compare Periphery output with master baseline | ||
run: | | ||
git fetch origin master:master | ||
git checkout master | ||
cp /tmp/.periphery.yml .periphery.yml | ||
mkdir -p ci_scripts/dead_code/ | ||
cp /tmp/process_periphery_output.rb ci_scripts/dead_code/ | ||
periphery scan --config .periphery.yml --clean-build 2>&1 | sed -E 's#.*/##; s/:[0-9]+:[0-9]+:/: /' | grep 'is unused' > periphery_report_master_formatted_sorted.txt | ||
ruby ci_scripts/dead_code/process_periphery_output.rb periphery_report_master_formatted_sorted.txt unused_code_master.json | ||
- name: Compare Unused Code JSON Files | ||
id: compare-dead-code | ||
run: | | ||
# Compare the keys in the JSON files to find new dead code | ||
ruby -r json -e ' | ||
master_file = "unused_code_master.json" | ||
feature_file = "unused_code_feature.json" | ||
output_file = "new_dead_code.json" | ||
master_unused_code = JSON.parse(File.read(master_file)) | ||
feature_unused_code = JSON.parse(File.read(feature_file)) | ||
new_dead_code = feature_unused_code.reject { |k, _| master_unused_code.key?(k) } | ||
if new_dead_code.size > 200 | ||
puts "More than 200 keys present, skipping. This usually happens if a build fails" | ||
elsif new_dead_code.empty? | ||
puts "No new dead code detected." | ||
else | ||
File.write(output_file, JSON.pretty_generate(new_dead_code) + "\n") | ||
end | ||
' | ||
# Check if new_dead_code.json exists and is not empty | ||
if [ -s new_dead_code.json ]; then | ||
echo "New dead code detected." | ||
echo "diff<<EOF" >> $GITHUB_ENV | ||
cat new_dead_code.json >> $GITHUB_ENV | ||
echo "EOF" >> $GITHUB_ENV | ||
else | ||
echo "No new dead code detected." | ||
fi | ||
- uses: peter-evans/find-comment@v3 | ||
id: find_comment | ||
with: | ||
issue-number: ${{ github.event.pull_request.number }} | ||
body-includes: '🚨 New dead code detected' | ||
|
||
- uses: peter-evans/create-or-update-comment@v3 | ||
id: create_update_comment | ||
if: env.diff != '' | ||
with: | ||
issue-number: ${{ github.event.pull_request.number }} | ||
body: | | ||
🚨 New dead code detected in this PR: | ||
```diff | ||
${{ env.diff }} | ||
``` | ||
Please remove the dead code before merging. | ||
If this is intentional, you can bypass this check by adding the label `skip dead code check` to this PR. | ||
ℹ️ If this comment appears to be left in error, make sure your branch is up-to-date with `master`. | ||
edit-mode: replace | ||
comment-id: ${{ steps.find_comment.outputs.comment-id }} | ||
token: ${{ secrets.GITHUB_TOKEN }} | ||
|
||
- name: Fail if not acknowledged | ||
if: env.diff != '' && !contains(github.event.pull_request.labels.*.name, 'skip dead code check') | ||
run: exit 1 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,106 @@ | ||
# Detects dead code | ||
# Usage periphery scan --config .periphery.yml 2>&1 | sed 's#.*/##' | grep 'is unused' | sort > periphery_report_feature_formatted_sorted.txt | ||
# Install/info https://github.com/peripheryapp/periphery | ||
# Why are so many targets/schemes commented out? This script takes a long time to run in CI, so we skip some schemes to speed it up. Note: AllStripeFrameworks covers a lot of the commented out schemes, e.g. AllStripeFrameworks contains StripeApplePay. | ||
|
||
workspace: Stripe.xcworkspace | ||
|
||
schemes: | ||
- AllStripeFrameworks | ||
# - IntegrationTester | ||
# - Stripe3DS2 | ||
# - Stripe3DS2DemoUI | ||
# - StripeApplePay | ||
# - StripeCameraCore | ||
# - StripeCardScan | ||
- StripeConnect | ||
# - StripeCore | ||
# - StripeFinancialConnections | ||
# - StripeIdentity | ||
# - StripePaymentSheet | ||
# - StripePayments | ||
# - StripePaymentsUI | ||
# - StripeUICore | ||
# - StripeiOS | ||
# - PaymentSheet Example | ||
# - AppClipExample | ||
# - CardImageVerification Example | ||
# - FinancialConnections Example | ||
# - IdentityVerification Example | ||
# - StripeConnect Example | ||
# - Non-Card Payment Examples | ||
# - UI Examples | ||
|
||
targets: | ||
# - AppClipExample | ||
# - AppClipExampleClip | ||
# - AppClipExampleClipTests | ||
# - AppClipExampleClipUITests | ||
# - AppClipExampleTests iOS | ||
# - CardImageVerification Example | ||
# - CardImageVerification ExampleUITests | ||
# - Common | ||
# - FinancialConnections Example | ||
# - FinancialConnectionsUITests | ||
# - IdentityVerification Example | ||
# - IntegrationTester | ||
# - IntegrationTesterUITests | ||
# - Non-Card Payment Examples | ||
# - PaymentSheet Example | ||
# - PaymentSheetLocalizationScreenshotGenerator | ||
# - PaymentSheetUITest | ||
- Stripe3DS2 | ||
- Stripe3DS2Tests | ||
- StripeApplePay | ||
- StripeApplePayTests | ||
- StripeCameraCore | ||
- StripeCameraCoreTestUtils | ||
- StripeCameraCoreTests | ||
- StripeCardScan | ||
- StripeCardScanTests | ||
- StripeConnect | ||
# - StripeConnect Example | ||
# - StripeConnect ExampleUITests | ||
- StripeConnectTests | ||
- StripeCore | ||
- StripeCoreTestUtils | ||
- StripeCoreTests | ||
- StripeFinancialConnections | ||
- StripeFinancialConnectionsTests | ||
- StripeIdentity | ||
- StripeIdentityTests | ||
- StripePaymentSheet | ||
- StripePaymentSheetTestHostApp | ||
- StripePaymentSheetTests | ||
- StripePayments | ||
- StripePaymentsObjcTestUtils | ||
- StripePaymentsTestHostApp | ||
- StripePaymentsTestUtils | ||
- StripePaymentsTests | ||
- StripePaymentsUI | ||
- StripePaymentsUITests | ||
- StripeUICore | ||
- StripeUICoreTests | ||
- StripeiOS | ||
- StripeiOSAppHostedTests | ||
- StripeiOSTestHostApp | ||
- StripeiOSTests | ||
# - UI Examples | ||
|
||
retain_public: true | ||
retain_objc_accessible: true | ||
retain_objc_annotated: true | ||
retain_objc_protocols: true | ||
|
||
retain_ibaction: true | ||
retain_iboutlet: true | ||
retain_ibinspectable: true | ||
|
||
analyze_tests: true | ||
|
||
verbose: true | ||
|
||
build_arguments: | ||
- -destination | ||
- 'generic/platform=iOS Simulator' | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.