danger-xcode_summary 0.5.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. checksums.yaml +5 -5
  2. data/.gitattributes +1 -0
  3. data/.rubocop.yml +6 -6
  4. data/.travis.yml +11 -3
  5. data/Gemfile +2 -0
  6. data/Gemfile.lock +90 -64
  7. data/Guardfile +2 -0
  8. data/README.md +10 -29
  9. data/Rakefile +2 -0
  10. data/danger-xcode_summary.gemspec +7 -4
  11. data/lib/danger_plugin.rb +2 -0
  12. data/lib/danger_xcode_summary.rb +2 -0
  13. data/lib/xcode_summary/gem_version.rb +3 -1
  14. data/lib/xcode_summary/plugin.rb +95 -146
  15. data/spec/fixtures/build_error.xcresult/Data/data.0~8rlpy8Zk2MdRSU0KgHQ-dzLsgOGyu-14Vc-N0xpF5NjTgHQgt3Y2C80SFK9G34F8tFCT42Ddo_9fUgkxBW3O9w== +0 -0
  16. data/spec/fixtures/build_error.xcresult/Data/data.0~IRr5bjJHBy3PCL5WuT9beYwr1YJflTZAOvsiw4f8sjvfJO1N516fkBcRW8rzgz3AkdAAidUfmPabPcZq3iarbA== +0 -0
  17. data/spec/fixtures/build_error.xcresult/Data/data.0~M95TCFtTnRKHBi17FlVGNc2kRMfbb_nRcsKPCf3ttPQyiTHHtDZhXhZ7cyeQ_qQ4zMKPS6y7I0oN4BKz0S4Uwg== +1 -0
  18. data/spec/fixtures/build_error.xcresult/Data/data.0~R8E9aNLCgS5_YXRF2Ugae_CaCFKR0ScZt9yP6r7ov-20PVARt7VwmAHWg2P6EBKQXm2TML95dp7BNnz9vunkBw== +0 -0
  19. data/spec/fixtures/build_error.xcresult/Data/data.0~YHIIkYp8-XSCi9oQYeEXZLa8EYpvUizVzEQGN5YmnJtTfJ4ujBdfy2EVAk8cUl8jtQskdFE84I-7eu59N9_pLA== +1 -0
  20. data/spec/fixtures/build_error.xcresult/Data/data.0~oBktD27DLW9QTHTv0MDsoaN2N6qCqZMwiFJeX7RwARc9fFan5V2awd_aThA9ZdCFTmHTSrdRglfQ5-ry9bJBUQ== +0 -0
  21. data/spec/fixtures/build_error.xcresult/Data/data.0~sMF2ys5sALLwuAv5pBXjiul46mqlgymNeLHDD_y99cE5gPqv8vL-IHIBlpnlNYSO4VvKHlaNafxanp-NDJTh-A== +0 -0
  22. data/spec/fixtures/build_error.xcresult/Data/refs.0~8rlpy8Zk2MdRSU0KgHQ-dzLsgOGyu-14Vc-N0xpF5NjTgHQgt3Y2C80SFK9G34F8tFCT42Ddo_9fUgkxBW3O9w== +0 -0
  23. data/spec/fixtures/build_error.xcresult/Data/refs.0~IRr5bjJHBy3PCL5WuT9beYwr1YJflTZAOvsiw4f8sjvfJO1N516fkBcRW8rzgz3AkdAAidUfmPabPcZq3iarbA== +0 -0
  24. data/spec/fixtures/build_error.xcresult/Data/refs.0~M95TCFtTnRKHBi17FlVGNc2kRMfbb_nRcsKPCf3ttPQyiTHHtDZhXhZ7cyeQ_qQ4zMKPS6y7I0oN4BKz0S4Uwg== +0 -0
  25. data/spec/fixtures/build_error.xcresult/Data/refs.0~R8E9aNLCgS5_YXRF2Ugae_CaCFKR0ScZt9yP6r7ov-20PVARt7VwmAHWg2P6EBKQXm2TML95dp7BNnz9vunkBw== +0 -0
  26. data/spec/fixtures/build_error.xcresult/Data/refs.0~YHIIkYp8-XSCi9oQYeEXZLa8EYpvUizVzEQGN5YmnJtTfJ4ujBdfy2EVAk8cUl8jtQskdFE84I-7eu59N9_pLA== +0 -0
  27. data/spec/fixtures/build_error.xcresult/Data/refs.0~oBktD27DLW9QTHTv0MDsoaN2N6qCqZMwiFJeX7RwARc9fFan5V2awd_aThA9ZdCFTmHTSrdRglfQ5-ry9bJBUQ== +0 -0
  28. data/spec/fixtures/build_error.xcresult/Data/refs.0~sMF2ys5sALLwuAv5pBXjiul46mqlgymNeLHDD_y99cE5gPqv8vL-IHIBlpnlNYSO4VvKHlaNafxanp-NDJTh-A== +0 -0
  29. data/spec/fixtures/build_error.xcresult/Info.plist +29 -0
  30. data/spec/fixtures/pr_json.json +2 -2
  31. data/spec/fixtures/swiftlint.xcresult/Data/data.0~0-xWm2AiZ5I3ekRhpAO8g4-GGm1rZIaTIaO2e60GD8nRSProBd-a_Yc1i7HKUd7bcVhfz2trCFFjRoELo2Srsw== +1 -0
  32. data/spec/fixtures/swiftlint.xcresult/Data/data.0~0OZeLqccmhzjAKAPA0eS1xbrEYM0PXX1u6A91vWH_ALTk8ho004_4kSNB9wC5XH28w-WgXxARYsmR5za20WacA== +0 -0
  33. data/spec/fixtures/swiftlint.xcresult/Data/data.0~0S6H6SLQKxWYgRYf_D_1IY-6QHDo-BsTnbSwsmikZV81avlhu5M1VAH-NOUVMY64xcmrqOJTvhE3NuQQTem2Cw== +1 -0
  34. data/spec/fixtures/swiftlint.xcresult/Data/data.0~2kkEPYCm3NJ7Qa1mJdA2u8iJvxvealDfVga3ndyyZs38sQL36q1IX7MYvrKo4eDbd-nyAQ96ZvSgaqpY4LJS1g== +0 -0
  35. data/spec/fixtures/swiftlint.xcresult/Data/data.0~3_PlvRIvUTDBxcDG2Xfka2hgB7TiNgptAFA36_GXRa52Nvcr0scZcjFMT5dD_zIOEF07s48D6roAaO5Fuhqm4A== +0 -0
  36. data/spec/fixtures/swiftlint.xcresult/Data/data.0~4G0wQRF6xQNh3N32d9TJzcahHXtF9nsz9VnT8U0otA3r2iR598yAPi99CNnJ6RdVZdbjKKM5mOz4wlM-xL99GQ== +0 -0
  37. data/spec/fixtures/swiftlint.xcresult/Data/data.0~4ybc14a0wWeJTE6Wyco_E5GMC4AV1uhumwDmYN_qe_Xatx7ngcL09_ef5aIBySSqpNNu4zcclYpHn9GrlNRuFQ== +1 -0
  38. data/spec/fixtures/swiftlint.xcresult/Data/data.0~6gayYzI1pf7Ae5plNUTUjxPN56sJMCVjiFgbL47tofr0MkqR24pCBQ_WR8ObwxOF1d0CMgO6xzegongDrChlJg== +1 -0
  39. data/spec/fixtures/swiftlint.xcresult/Data/data.0~8IYU0zHEOjhUXKlujKg1LRsjykPpzvWzofthV0L5wC4B7k8gHyaZ-7cZuqFSoPtzJazWCx-EKgYEH2IqJWzfEg== +0 -0
  40. data/spec/fixtures/swiftlint.xcresult/Data/data.0~8sQuTfDcyJlc0Fi-_NLh3a8jvYBs_okTaD87IqdKyCzN32fu0jp6ApVWBgFD38xL2_Q87YDxQ6IxUZv7NNvqow== +1 -0
  41. data/spec/fixtures/swiftlint.xcresult/Data/data.0~CJoU5w7TNA2we8IxsH6JLXhJ2Tgwn4MNMGYzl5g5KiXF8gJQm6HlNTnQ1LSu2ISGxTLCQ9g-epXuzLU5utBfFA== +0 -0
  42. data/spec/fixtures/swiftlint.xcresult/Data/data.0~E-76cUuxKNsc00En6QiGIdNWgUkhPKWbzbY-g7Xs1I8QHEMM8XUyKPxeMCp0ZXs_s4n1v1-sgg4Cr_BgvCBB6Q== +1 -0
  43. data/spec/fixtures/swiftlint.xcresult/Data/data.0~ES9w2o-hBWjCbFGFTzMnh3Y8PpOwPGSGtWZ9X9jy-xdmxdZNKNzsKpz5MRG0TSYYKul6Y0HPDMb6NUx1KCvp1g== +0 -0
  44. data/spec/fixtures/swiftlint.xcresult/Data/data.0~H9Ox0jwnLyzNmCS9JM53xW5lgvG9wCoyFrOocfEMniMt9ZomGQCEAkcpEABl2RAkEJrYWhbW_Rrvy0_m93Jnnw== +0 -0
  45. data/spec/fixtures/swiftlint.xcresult/Data/data.0~LCIporNdr1dPYSczSS8zeRwLlf3Cq-xsjXgA0FzrCLqqpRmUcrJDAa5R7STT0lyZeGi2M13jXHyGZ5rZ7qCrrQ== +0 -0
  46. data/spec/fixtures/swiftlint.xcresult/Data/data.0~LpdFNGBXQ0G_AiEBUv6jWVmPykDLvumWlLqe9FOU9Sautm_uAIUhkdYsC3Ai7CHCV6Ec_A9EgLa5dzbuBuSm0Q== +1 -0
  47. data/spec/fixtures/swiftlint.xcresult/Data/data.0~MPQdxkf7R97XmBRC6k_HRasY3Wpzf6Ji9mPhXyPVbkbZreWJ4iOdeDBLCRqR2Jn_ffDNfJCvU4gSl6NdwqltzA== +0 -0
  48. data/spec/fixtures/swiftlint.xcresult/Data/data.0~Mbg926q5J0cd3yItw2ktYihgAmF3Bs3imeg-AgyGMQYnQx0IUUFlnuY3xldjSVaGFNU4N892Usibic6TZXFbTw== +0 -0
  49. data/spec/fixtures/swiftlint.xcresult/Data/data.0~OZKuCYOwI0z3jDNmJQ-bb0OUCKuFWw1iz9Na6m-M3pOyVRqP09YONvdvG1ezCE57EI5b8Ym9g8hX1ZVZJg124w== +1 -0
  50. data/spec/fixtures/swiftlint.xcresult/Data/data.0~P1yCjbYuC-f-Yp5vY3jDumuu5B5U2_SdjxLObNcTH3XZMXTGlY9I20IlZP6UkWOIIPSr4IYewBY82b4sq82ldw== +0 -0
  51. data/spec/fixtures/swiftlint.xcresult/Data/data.0~PgE51YCf92l9xvNpSiVbHOmsnaRpxz_zGezAUjflsYK7nfGH7YRTDdb1jnNn0WlHUlme8-fO8fPQRJ9n51hfPg== +1 -0
  52. data/spec/fixtures/swiftlint.xcresult/Data/data.0~QLGQgkmvGM1G0GFHWwBAJoAn881RCWKI51niXWwchH2k_1ahgBUMANJWO98yUC5HwqptnBQLC0aoD4GE7Zb3Yg== +1 -0
  53. data/spec/fixtures/swiftlint.xcresult/Data/data.0~QdTITudcOZvjswLWT8gvlQMZHVJJ5yA_GP2ZKrevsgAbABDadn3tsrUH4rbPPD0HZeZVi5oDNPTcqoaMnueJ6A== +0 -0
  54. data/spec/fixtures/swiftlint.xcresult/Data/data.0~TNVRLj0efZi3RNElgmBqJ-AnCofs0p8pnjLDsQw2TMFPfg6driapeVvOlnsFyOS_27P7ZHNiLt2xJ9kiE57VlA== +0 -0
  55. data/spec/fixtures/swiftlint.xcresult/Data/data.0~Vo-bwGSGWiUUFgBwAGdskHUHwVQh0q8hYJmYmmyHI4AVhbtLsMeJQyYvHOuTuPmJcJsX_4bDig3Mg1GPwE9oWw== +1 -0
  56. data/spec/fixtures/swiftlint.xcresult/Data/data.0~YBV5ZYd3le3PYE4Xz7kCb4sj6ZJ25X18ArIVKxMOCZHZ479XzQByz07m8qpm3hIL3oUPozbag-zRSomHuRfKLQ== +1 -0
  57. data/spec/fixtures/swiftlint.xcresult/Data/data.0~ZYx73XhABxgrY0rQpAJbZMCn_MDQFCJimII9c-ninClo_0ZErb0fGcXrX-8AkQ_8ngCyX1YyDzb825PzreCLFg== +0 -0
  58. data/spec/fixtures/swiftlint.xcresult/Data/data.0~_Vk-6Z65ePcSA8pCiCFHA53AP-PRZ6KqdEH_Su2CQbd3QM7P-By063lIn7SyLdlE1ENrRCOL_9VFHwb6Q2de4A== +0 -0
  59. data/spec/fixtures/swiftlint.xcresult/Data/data.0~aBrGz65aeXPVqACvo49xELHeqBawlmly6M_SmRa-iT99yzTiBp2st43mhwZEOVIgvsBEHLkKbH5oQpqjWgkueA== +0 -0
  60. data/spec/fixtures/swiftlint.xcresult/Data/data.0~amieE2Vo8zyuqmVg_XehREgJFzuJaWOzAODZVk_7d1g6p6Y_sPmomY580XqThK7-5nyr3Z3ZX8PBps4zPLU86A== +0 -0
  61. data/spec/fixtures/swiftlint.xcresult/Data/data.0~bC3ChphZGxwicYgFPaTJhJvXLOQJmKnAxXU_qdERqu-B1727kHJX61TfzqMUqRiPUwu5E9r_5RH_xoRYJ2L6gQ== +1 -0
  62. data/spec/fixtures/swiftlint.xcresult/Data/data.0~dKm5kNy23i7r5zU946OFV5V5VysbNcVshgmPE1cDjnTybi4d2hDYQHf5DDhl2cd8blicZGSNT1U56_sMCeKgGA== +0 -0
  63. data/spec/fixtures/swiftlint.xcresult/Data/data.0~fOlw5DSt-BTx_3MEsZueO9WvR0v7M_4Qox6aT8izuwPfWLYDmQLCsC3_Hymzu9pvNdnU-hnLmqI7VHwds0tZJg== +0 -0
  64. data/spec/fixtures/swiftlint.xcresult/Data/data.0~fQN-Kpy21p-A8sCOyS-jK7ytWncDa2hFDzVN8GFtbxfcsSDqHuHlelgGVDfMRGaCjl0_YvECcpxkOXMSCMz-yA== +0 -0
  65. data/spec/fixtures/swiftlint.xcresult/Data/data.0~fg_OE_1GIKhnHZVCf6vX3IBffLrmbWUH4AsgsdCfNDOxp0B_FS01mzFt8QUR8SFpl0wzqzGZLqQjyYhO6RevrQ== +1 -0
  66. data/spec/fixtures/swiftlint.xcresult/Data/data.0~gan-cZ22YZhS_xIHkTo3QDwbZPFY4kFjFla450U2lB0YvYEyKbq78RSwEXNISk5oLbXL4hT7MUx_j9YlvordmQ== +0 -0
  67. data/spec/fixtures/swiftlint.xcresult/Data/data.0~gullQKRfJbsVcDBXIhfPjmm5JnaE0Beei-34BEkBv4R4RAuRHQMSnctdI5JXfKywafaWXcpQiYYRa9ukH7dA8w== +0 -0
  68. data/spec/fixtures/swiftlint.xcresult/Data/data.0~ifHHINpGjhER45qG-5imtXxa30gPYyHpFGHLw-i9F-M4nTjIGxvHkfprtACth9aAoeu7xyBFp9i0NZuPFaK-qQ== +0 -0
  69. data/spec/fixtures/swiftlint.xcresult/Data/data.0~j4nemHY9VBZOlHsEur0YydlrsprTU9r-MZEFaCsZ71qzr_Y2j_wX_zeb8BIyCfQq6WCHDuJGwCvDxYGxFHFKJQ== +1 -0
  70. data/spec/fixtures/swiftlint.xcresult/Data/data.0~jLNWr6BK3vDe2KRCbTLDhymPjtRFa0UT1BKEjXSbv29IXEwjhP4bUKt6LMUdkCtM4FvPlQ8z7YOpAYFoZFSPOA== +0 -0
  71. data/spec/fixtures/swiftlint.xcresult/Data/data.0~jLxEh4TDlOXovDeeA90ahrPFfK6KWCWAM1RveDzpglwOI01s2gFfzKcZ5uuMA4PDXedeCvNf2DqCdKJIcgHnVQ== +1 -0
  72. data/spec/fixtures/swiftlint.xcresult/Data/data.0~lDipbRFZoMGAPyIHXNVPjW96huFRLV5fDc8iChQGTp2D1rW9Y3yat6jqgAUFtF94uKKChvQXQU2YOrKELWTWRQ== +0 -0
  73. data/spec/fixtures/swiftlint.xcresult/Data/data.0~m1Fg2athRJukt11SG2HxPjSj8K7CqPcdkSiJSNtxUGsVPezdEjZT_PPnBkROObmplPJ7SQmO9ccwDfGagdcKLg== +0 -0
  74. data/spec/fixtures/swiftlint.xcresult/Data/data.0~oRMi0sbQLktfDDDGUS-SqBKpdDiD6HCztVES_ShfGr0KVcYENoIq7y9oUSDWL5B_P2gkdtWG8JEsJLxPbdWOZA== +0 -0
  75. data/spec/fixtures/swiftlint.xcresult/Data/data.0~oRai0E4F38qqrWTBu_VggauLdzUNvBJ9uOpjjW4rdru1cdBUSmJsWp7wGRoTaegMas7lrFfF7hqYW76UAkN_Aw== +1 -0
  76. data/spec/fixtures/swiftlint.xcresult/Data/data.0~oc4kwngaTuUPiuwoua8qsQolC7-ZoEhH98wttJsSLjXvqDEIcMSdd0Y06IcfLovOve5P5sgs01gVV9FxgA9Cgg== +0 -0
  77. data/spec/fixtures/swiftlint.xcresult/Data/data.0~pfWL_0E_rKWkISZ_-ykT-jtTq0T1Bs4pRoI0Rvd1L48EF2pJwep6TzEd_f2AXvlBLDYPKU_8b0hRyDco495MuA== +0 -0
  78. data/spec/fixtures/swiftlint.xcresult/Data/data.0~qvKb6_pMbXLkop24YkPLBvBGPB0vTCJVE1x5_F3lvNeXSrkS-aTEVLcbm50ypOEDTvq5lWbE3WCTmiwTrycTtA== +1 -0
  79. data/spec/fixtures/swiftlint.xcresult/Data/data.0~rWtEuNODRlqS4h5IKE2daTjC3jn_FFVbc5AFmP9pWRCMe5Pnl26q-RtgyD_RKEch9v3KhAMX6v_o_6tAvVJqCA== +0 -0
  80. data/spec/fixtures/swiftlint.xcresult/Data/data.0~ryOJ0LA52DIkg1NBt38A9g4laq_cWjst7WaY2GqaYbfcPtErYNGwwseRWOUJ888fdbPpei28zwb3FQmyyY0P7A== +1 -0
  81. data/spec/fixtures/swiftlint.xcresult/Data/data.0~ufMI-FnN2y3q-eI9BtVFtGpA8_fkrqmtH5a6cmoMsFqJdZ7LAFu1X1f-KhV78VbCx3NJFw-Z37YrEEheJ0aoew== +0 -0
  82. data/spec/fixtures/swiftlint.xcresult/Data/data.0~vFXD8mGF6_qQ0OnB0Wcon_YnvTiD4pn7MUywowp2zOVLErpHH1Ub9F67rFgJUj5qH44PC8HGhivGatweCwtA1g== +0 -0
  83. data/spec/fixtures/swiftlint.xcresult/Data/data.0~xgcJ3zOq4tRMu41EmxgQwt9WxpLQm2v2wbY1e8CAQ8EEYhNYnBcMTAFjYWFgIg4LKguSsH1Djbu9dtiDJ6ZXww== +1 -0
  84. data/spec/fixtures/swiftlint.xcresult/Data/data.0~ygm24RJKzu1R3AxMJebgBRXDXv1XqRs_UZUYB9XNRQlwNRqHlLdmUDM2A0c5MZ0rM9Rzk8J6DVpUtgbXCqdEig== +1 -0
  85. data/spec/fixtures/swiftlint.xcresult/Data/data.0~z0TKqUleKKN7fLZIVvFv3iQkQDn9im3HWNWKHBCNC0CrWtbKyMM79u3yFkfV0iz5I-pyszXp3C532_0QdYPUlA== +0 -0
  86. data/spec/fixtures/swiftlint.xcresult/Data/data.0~zs6Rgx87_LJyVnCSv0mqZMG6J9lpsTcTg9rpJsB_IBDSH2MQBeY5mGj-C3dLPzD8HFtKiumJ9EcGo-mGYqnZvQ== +0 -0
  87. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~0-xWm2AiZ5I3ekRhpAO8g4-GGm1rZIaTIaO2e60GD8nRSProBd-a_Yc1i7HKUd7bcVhfz2trCFFjRoELo2Srsw== +0 -0
  88. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~0OZeLqccmhzjAKAPA0eS1xbrEYM0PXX1u6A91vWH_ALTk8ho004_4kSNB9wC5XH28w-WgXxARYsmR5za20WacA== +0 -0
  89. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~0S6H6SLQKxWYgRYf_D_1IY-6QHDo-BsTnbSwsmikZV81avlhu5M1VAH-NOUVMY64xcmrqOJTvhE3NuQQTem2Cw== +0 -0
  90. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~2kkEPYCm3NJ7Qa1mJdA2u8iJvxvealDfVga3ndyyZs38sQL36q1IX7MYvrKo4eDbd-nyAQ96ZvSgaqpY4LJS1g== +0 -0
  91. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~3_PlvRIvUTDBxcDG2Xfka2hgB7TiNgptAFA36_GXRa52Nvcr0scZcjFMT5dD_zIOEF07s48D6roAaO5Fuhqm4A== +0 -0
  92. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~4G0wQRF6xQNh3N32d9TJzcahHXtF9nsz9VnT8U0otA3r2iR598yAPi99CNnJ6RdVZdbjKKM5mOz4wlM-xL99GQ== +0 -0
  93. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~4ybc14a0wWeJTE6Wyco_E5GMC4AV1uhumwDmYN_qe_Xatx7ngcL09_ef5aIBySSqpNNu4zcclYpHn9GrlNRuFQ== +0 -0
  94. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~6gayYzI1pf7Ae5plNUTUjxPN56sJMCVjiFgbL47tofr0MkqR24pCBQ_WR8ObwxOF1d0CMgO6xzegongDrChlJg== +0 -0
  95. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~8IYU0zHEOjhUXKlujKg1LRsjykPpzvWzofthV0L5wC4B7k8gHyaZ-7cZuqFSoPtzJazWCx-EKgYEH2IqJWzfEg== +0 -0
  96. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~8sQuTfDcyJlc0Fi-_NLh3a8jvYBs_okTaD87IqdKyCzN32fu0jp6ApVWBgFD38xL2_Q87YDxQ6IxUZv7NNvqow== +0 -0
  97. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~CJoU5w7TNA2we8IxsH6JLXhJ2Tgwn4MNMGYzl5g5KiXF8gJQm6HlNTnQ1LSu2ISGxTLCQ9g-epXuzLU5utBfFA== +0 -0
  98. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~E-76cUuxKNsc00En6QiGIdNWgUkhPKWbzbY-g7Xs1I8QHEMM8XUyKPxeMCp0ZXs_s4n1v1-sgg4Cr_BgvCBB6Q== +0 -0
  99. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~ES9w2o-hBWjCbFGFTzMnh3Y8PpOwPGSGtWZ9X9jy-xdmxdZNKNzsKpz5MRG0TSYYKul6Y0HPDMb6NUx1KCvp1g== +0 -0
  100. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~H9Ox0jwnLyzNmCS9JM53xW5lgvG9wCoyFrOocfEMniMt9ZomGQCEAkcpEABl2RAkEJrYWhbW_Rrvy0_m93Jnnw== +0 -0
  101. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~LCIporNdr1dPYSczSS8zeRwLlf3Cq-xsjXgA0FzrCLqqpRmUcrJDAa5R7STT0lyZeGi2M13jXHyGZ5rZ7qCrrQ== +0 -0
  102. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~LpdFNGBXQ0G_AiEBUv6jWVmPykDLvumWlLqe9FOU9Sautm_uAIUhkdYsC3Ai7CHCV6Ec_A9EgLa5dzbuBuSm0Q== +0 -0
  103. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~MPQdxkf7R97XmBRC6k_HRasY3Wpzf6Ji9mPhXyPVbkbZreWJ4iOdeDBLCRqR2Jn_ffDNfJCvU4gSl6NdwqltzA== +0 -0
  104. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~Mbg926q5J0cd3yItw2ktYihgAmF3Bs3imeg-AgyGMQYnQx0IUUFlnuY3xldjSVaGFNU4N892Usibic6TZXFbTw== +0 -0
  105. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~OZKuCYOwI0z3jDNmJQ-bb0OUCKuFWw1iz9Na6m-M3pOyVRqP09YONvdvG1ezCE57EI5b8Ym9g8hX1ZVZJg124w== +0 -0
  106. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~P1yCjbYuC-f-Yp5vY3jDumuu5B5U2_SdjxLObNcTH3XZMXTGlY9I20IlZP6UkWOIIPSr4IYewBY82b4sq82ldw== +0 -0
  107. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~PgE51YCf92l9xvNpSiVbHOmsnaRpxz_zGezAUjflsYK7nfGH7YRTDdb1jnNn0WlHUlme8-fO8fPQRJ9n51hfPg== +0 -0
  108. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~QLGQgkmvGM1G0GFHWwBAJoAn881RCWKI51niXWwchH2k_1ahgBUMANJWO98yUC5HwqptnBQLC0aoD4GE7Zb3Yg== +0 -0
  109. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~QdTITudcOZvjswLWT8gvlQMZHVJJ5yA_GP2ZKrevsgAbABDadn3tsrUH4rbPPD0HZeZVi5oDNPTcqoaMnueJ6A== +0 -0
  110. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~TNVRLj0efZi3RNElgmBqJ-AnCofs0p8pnjLDsQw2TMFPfg6driapeVvOlnsFyOS_27P7ZHNiLt2xJ9kiE57VlA== +0 -0
  111. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~Vo-bwGSGWiUUFgBwAGdskHUHwVQh0q8hYJmYmmyHI4AVhbtLsMeJQyYvHOuTuPmJcJsX_4bDig3Mg1GPwE9oWw== +0 -0
  112. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~YBV5ZYd3le3PYE4Xz7kCb4sj6ZJ25X18ArIVKxMOCZHZ479XzQByz07m8qpm3hIL3oUPozbag-zRSomHuRfKLQ== +0 -0
  113. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~ZYx73XhABxgrY0rQpAJbZMCn_MDQFCJimII9c-ninClo_0ZErb0fGcXrX-8AkQ_8ngCyX1YyDzb825PzreCLFg== +0 -0
  114. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~_Vk-6Z65ePcSA8pCiCFHA53AP-PRZ6KqdEH_Su2CQbd3QM7P-By063lIn7SyLdlE1ENrRCOL_9VFHwb6Q2de4A== +0 -0
  115. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~aBrGz65aeXPVqACvo49xELHeqBawlmly6M_SmRa-iT99yzTiBp2st43mhwZEOVIgvsBEHLkKbH5oQpqjWgkueA== +0 -0
  116. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~amieE2Vo8zyuqmVg_XehREgJFzuJaWOzAODZVk_7d1g6p6Y_sPmomY580XqThK7-5nyr3Z3ZX8PBps4zPLU86A== +0 -0
  117. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~bC3ChphZGxwicYgFPaTJhJvXLOQJmKnAxXU_qdERqu-B1727kHJX61TfzqMUqRiPUwu5E9r_5RH_xoRYJ2L6gQ== +0 -0
  118. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~dKm5kNy23i7r5zU946OFV5V5VysbNcVshgmPE1cDjnTybi4d2hDYQHf5DDhl2cd8blicZGSNT1U56_sMCeKgGA== +0 -0
  119. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~fOlw5DSt-BTx_3MEsZueO9WvR0v7M_4Qox6aT8izuwPfWLYDmQLCsC3_Hymzu9pvNdnU-hnLmqI7VHwds0tZJg== +0 -0
  120. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~fQN-Kpy21p-A8sCOyS-jK7ytWncDa2hFDzVN8GFtbxfcsSDqHuHlelgGVDfMRGaCjl0_YvECcpxkOXMSCMz-yA== +0 -0
  121. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~fg_OE_1GIKhnHZVCf6vX3IBffLrmbWUH4AsgsdCfNDOxp0B_FS01mzFt8QUR8SFpl0wzqzGZLqQjyYhO6RevrQ== +0 -0
  122. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~gan-cZ22YZhS_xIHkTo3QDwbZPFY4kFjFla450U2lB0YvYEyKbq78RSwEXNISk5oLbXL4hT7MUx_j9YlvordmQ== +0 -0
  123. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~gullQKRfJbsVcDBXIhfPjmm5JnaE0Beei-34BEkBv4R4RAuRHQMSnctdI5JXfKywafaWXcpQiYYRa9ukH7dA8w== +0 -0
  124. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~ifHHINpGjhER45qG-5imtXxa30gPYyHpFGHLw-i9F-M4nTjIGxvHkfprtACth9aAoeu7xyBFp9i0NZuPFaK-qQ== +0 -0
  125. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~j4nemHY9VBZOlHsEur0YydlrsprTU9r-MZEFaCsZ71qzr_Y2j_wX_zeb8BIyCfQq6WCHDuJGwCvDxYGxFHFKJQ== +0 -0
  126. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~jLNWr6BK3vDe2KRCbTLDhymPjtRFa0UT1BKEjXSbv29IXEwjhP4bUKt6LMUdkCtM4FvPlQ8z7YOpAYFoZFSPOA== +0 -0
  127. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~jLxEh4TDlOXovDeeA90ahrPFfK6KWCWAM1RveDzpglwOI01s2gFfzKcZ5uuMA4PDXedeCvNf2DqCdKJIcgHnVQ== +0 -0
  128. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~lDipbRFZoMGAPyIHXNVPjW96huFRLV5fDc8iChQGTp2D1rW9Y3yat6jqgAUFtF94uKKChvQXQU2YOrKELWTWRQ== +0 -0
  129. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~m1Fg2athRJukt11SG2HxPjSj8K7CqPcdkSiJSNtxUGsVPezdEjZT_PPnBkROObmplPJ7SQmO9ccwDfGagdcKLg== +0 -0
  130. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~oRMi0sbQLktfDDDGUS-SqBKpdDiD6HCztVES_ShfGr0KVcYENoIq7y9oUSDWL5B_P2gkdtWG8JEsJLxPbdWOZA== +0 -0
  131. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~oRai0E4F38qqrWTBu_VggauLdzUNvBJ9uOpjjW4rdru1cdBUSmJsWp7wGRoTaegMas7lrFfF7hqYW76UAkN_Aw== +0 -0
  132. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~oc4kwngaTuUPiuwoua8qsQolC7-ZoEhH98wttJsSLjXvqDEIcMSdd0Y06IcfLovOve5P5sgs01gVV9FxgA9Cgg== +0 -0
  133. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~pfWL_0E_rKWkISZ_-ykT-jtTq0T1Bs4pRoI0Rvd1L48EF2pJwep6TzEd_f2AXvlBLDYPKU_8b0hRyDco495MuA== +0 -0
  134. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~qvKb6_pMbXLkop24YkPLBvBGPB0vTCJVE1x5_F3lvNeXSrkS-aTEVLcbm50ypOEDTvq5lWbE3WCTmiwTrycTtA== +0 -0
  135. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~rWtEuNODRlqS4h5IKE2daTjC3jn_FFVbc5AFmP9pWRCMe5Pnl26q-RtgyD_RKEch9v3KhAMX6v_o_6tAvVJqCA== +0 -0
  136. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~ryOJ0LA52DIkg1NBt38A9g4laq_cWjst7WaY2GqaYbfcPtErYNGwwseRWOUJ888fdbPpei28zwb3FQmyyY0P7A== +0 -0
  137. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~ufMI-FnN2y3q-eI9BtVFtGpA8_fkrqmtH5a6cmoMsFqJdZ7LAFu1X1f-KhV78VbCx3NJFw-Z37YrEEheJ0aoew== +0 -0
  138. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~vFXD8mGF6_qQ0OnB0Wcon_YnvTiD4pn7MUywowp2zOVLErpHH1Ub9F67rFgJUj5qH44PC8HGhivGatweCwtA1g== +0 -0
  139. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~xgcJ3zOq4tRMu41EmxgQwt9WxpLQm2v2wbY1e8CAQ8EEYhNYnBcMTAFjYWFgIg4LKguSsH1Djbu9dtiDJ6ZXww== +0 -0
  140. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~ygm24RJKzu1R3AxMJebgBRXDXv1XqRs_UZUYB9XNRQlwNRqHlLdmUDM2A0c5MZ0rM9Rzk8J6DVpUtgbXCqdEig== +0 -0
  141. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~z0TKqUleKKN7fLZIVvFv3iQkQDn9im3HWNWKHBCNC0CrWtbKyMM79u3yFkfV0iz5I-pyszXp3C532_0QdYPUlA== +0 -0
  142. data/spec/fixtures/swiftlint.xcresult/Data/refs.0~zs6Rgx87_LJyVnCSv0mqZMG6J9lpsTcTg9rpJsB_IBDSH2MQBeY5mGj-C3dLPzD8HFtKiumJ9EcGo-mGYqnZvQ== +0 -0
  143. data/spec/fixtures/swiftlint.xcresult/Info.plist +29 -0
  144. data/spec/spec_helper.rb +11 -4
  145. data/spec/xcode_summary_spec.rb +93 -112
  146. metadata +281 -25
  147. data/spec/fixtures/errors.json +0 -31
  148. data/spec/fixtures/ld_warnings.json +0 -31
  149. data/spec/fixtures/summary.json +0 -44
  150. data/spec/fixtures/summary_messages.json +0 -5
  151. data/spec/fixtures/summary_with_empty_line.json +0 -37
  152. data/spec/fixtures/test_errors.json +0 -11
  153. data/spec/fixtures/warnings_errors.json +0 -32
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: e222df89970744f0a9e0e9ec76408480aaa6020c
4
- data.tar.gz: f07bbe188cf33ef8cd5707742bbd4d68b965da8f
2
+ SHA256:
3
+ metadata.gz: e30986734f1f4563b6c7f58e5765cb2b00be9bf4cc86ae03c88485d429009e3e
4
+ data.tar.gz: 570891d22c3fbb5a9b2cdbb61dab1833ac8570013e0c2689886b78702cbff368
5
5
  SHA512:
6
- metadata.gz: fb7531300b28f2307a50ce66562c28e3bec695d6e70223220f811b822b5522137e5022677359f92509a7fa651f0fd9beaa3a6d084733df7e76016ab5ef5e8d0d
7
- data.tar.gz: 70d9df94ff7603adb1b340650cb5b4f6b350c228797aa5b89ea790b99de1c5792439ed0ac5eaf7663c94ec45f9261865c827828a58150e27437856a463971d11
6
+ metadata.gz: dac17c30dbeaf27f6b026c82f213a8d6ede70623c05bd811ab352957dde61b9a7c402ebca595146b161b8a82c3405e7cc93002c950363aa4262bee9d17267f76
7
+ data.tar.gz: 32db5f742803b7cc51d46be5825a644be65d40c89b790db6cfad3e15312b099f58912b7febb542767ee0dd8ef63fd703a059ae20c2b80ee1765bdea8dbdbf05b
data/.gitattributes ADDED
@@ -0,0 +1 @@
1
+ *.xcresult binary
data/.rubocop.yml CHANGED
@@ -1,11 +1,11 @@
1
+ AllCops:
2
+ NewCops: enable
3
+ SuggestExtensions: false
4
+
1
5
  # kind_of? is a good way to check a type
2
6
  Style/ClassCheck:
3
7
  EnforcedStyle: kind_of?
4
8
 
5
- # It's better to be more explicit about the type
6
- Style/BracesAroundHashParameters:
7
- Enabled: false
8
-
9
9
  # specs sometimes have useless assignments, which is fine
10
10
  Lint/UselessAssignment:
11
11
  Exclude:
@@ -54,8 +54,8 @@ Metrics/CyclomaticComplexity:
54
54
  Max: 17
55
55
 
56
56
  # Configuration parameters: AllowURI, URISchemes.
57
- Metrics/LineLength:
58
- Max: 120
57
+ Layout/LineLength:
58
+ Max: 130
59
59
 
60
60
  # Configuration parameters: CountKeywordArgs.
61
61
  Metrics/ParameterLists:
data/.travis.yml CHANGED
@@ -3,9 +3,17 @@ cache:
3
3
  directories:
4
4
  - bundle
5
5
 
6
+ os: osx
7
+ osx_image: xcode11
8
+
6
9
  rvm:
7
- - 2.1.3
8
- - 2.3.1
10
+ - 2.6.0
11
+ - 2.5.3
12
+
13
+ # install bundler 2.x
14
+ before_install:
15
+ - gem update --system
16
+ - gem install bundler
9
17
 
10
18
  script:
11
- - bundle exec rake spec
19
+ - bundle exec rake spec
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in danger-xcode_summary.gemspec
data/Gemfile.lock CHANGED
@@ -1,47 +1,61 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- danger-xcode_summary (0.5.0)
4
+ danger-xcode_summary (1.0.0)
5
5
  danger-plugin-api (~> 1.0)
6
+ xcresult (~> 0.2)
6
7
 
7
8
  GEM
8
9
  remote: https://rubygems.org/
9
10
  specs:
10
- addressable (2.5.2)
11
- public_suffix (>= 2.0.2, < 4.0)
12
- ast (2.4.0)
13
- claide (1.0.2)
11
+ addressable (2.7.0)
12
+ public_suffix (>= 2.0.2, < 5.0)
13
+ ast (2.4.2)
14
+ claide (1.0.3)
14
15
  claide-plugins (0.9.2)
15
16
  cork
16
17
  nap
17
18
  open4 (~> 1.3)
18
- coderay (1.1.2)
19
+ coderay (1.1.3)
19
20
  colored2 (3.1.2)
20
21
  cork (0.3.0)
21
22
  colored2 (~> 3.1)
22
- danger (5.5.10)
23
+ danger (8.2.3)
23
24
  claide (~> 1.0)
24
25
  claide-plugins (>= 0.9.2)
25
26
  colored2 (~> 3.1)
26
27
  cork (~> 0.1)
27
- faraday (~> 0.9)
28
- faraday-http-cache (~> 1.0)
29
- git (~> 1)
30
- kramdown (~> 1.5)
28
+ faraday (>= 0.9.0, < 2.0)
29
+ faraday-http-cache (~> 2.0)
30
+ git (~> 1.7)
31
+ kramdown (~> 2.3)
32
+ kramdown-parser-gfm (~> 1.0)
31
33
  no_proxy_fix
32
34
  octokit (~> 4.7)
33
- terminal-table (~> 1)
35
+ terminal-table (>= 1, < 4)
34
36
  danger-plugin-api (1.0.0)
35
37
  danger (> 2.0)
36
- diff-lcs (1.3)
37
- faraday (0.14.0)
38
+ diff-lcs (1.4.4)
39
+ faraday (1.4.2)
40
+ faraday-em_http (~> 1.0)
41
+ faraday-em_synchrony (~> 1.0)
42
+ faraday-excon (~> 1.1)
43
+ faraday-net_http (~> 1.0)
44
+ faraday-net_http_persistent (~> 1.1)
38
45
  multipart-post (>= 1.2, < 3)
39
- faraday-http-cache (1.3.1)
40
- faraday (~> 0.8)
41
- ffi (1.9.23)
46
+ ruby2_keywords (>= 0.0.4)
47
+ faraday-em_http (1.0.0)
48
+ faraday-em_synchrony (1.0.0)
49
+ faraday-excon (1.1.0)
50
+ faraday-http-cache (2.2.0)
51
+ faraday (>= 0.8)
52
+ faraday-net_http (1.0.1)
53
+ faraday-net_http_persistent (1.1.0)
54
+ ffi (1.15.1)
42
55
  formatador (0.2.5)
43
- git (1.3.0)
44
- guard (2.14.2)
56
+ git (1.8.1)
57
+ rchardet (~> 1.8)
58
+ guard (2.17.0)
45
59
  formatador (>= 0.2.4)
46
60
  listen (>= 2.7, < 4.0)
47
61
  lumberjack (>= 1.0.12, < 2.0)
@@ -55,81 +69,93 @@ GEM
55
69
  guard (~> 2.1)
56
70
  guard-compat (~> 1.1)
57
71
  rspec (>= 2.99.0, < 4.0)
58
- kramdown (1.16.2)
72
+ kramdown (2.3.1)
73
+ rexml
74
+ kramdown-parser-gfm (1.1.0)
75
+ kramdown (~> 2.0)
59
76
  listen (3.0.7)
60
77
  rb-fsevent (>= 0.9.3)
61
78
  rb-inotify (>= 0.9.7)
62
- lumberjack (1.0.12)
63
- method_source (0.9.0)
64
- multipart-post (2.0.0)
79
+ lumberjack (1.2.8)
80
+ method_source (1.0.0)
81
+ multipart-post (2.1.1)
65
82
  nap (1.1.0)
66
83
  nenv (0.3.0)
67
84
  no_proxy_fix (0.1.2)
68
- notiffany (0.1.1)
85
+ notiffany (0.1.3)
69
86
  nenv (~> 0.1)
70
87
  shellany (~> 0.0)
71
- octokit (4.8.0)
88
+ octokit (4.21.0)
89
+ faraday (>= 0.9)
72
90
  sawyer (~> 0.8.0, >= 0.5.3)
73
91
  open4 (1.3.4)
74
- parallel (1.12.1)
75
- parser (2.5.0.2)
76
- ast (~> 2.4.0)
77
- powerpack (0.1.1)
78
- pry (0.11.3)
79
- coderay (~> 1.1.0)
80
- method_source (~> 0.9.0)
81
- public_suffix (3.0.2)
92
+ parallel (1.20.1)
93
+ parser (3.0.1.1)
94
+ ast (~> 2.4.1)
95
+ pry (0.14.1)
96
+ coderay (~> 1.1)
97
+ method_source (~> 1.0)
98
+ public_suffix (4.0.6)
82
99
  rainbow (3.0.0)
83
- rake (10.5.0)
84
- rb-fsevent (0.10.3)
85
- rb-inotify (0.9.10)
86
- ffi (>= 0.5.0, < 2)
87
- rspec (3.7.0)
88
- rspec-core (~> 3.7.0)
89
- rspec-expectations (~> 3.7.0)
90
- rspec-mocks (~> 3.7.0)
91
- rspec-core (3.7.1)
92
- rspec-support (~> 3.7.0)
93
- rspec-expectations (3.7.0)
100
+ rake (13.0.3)
101
+ rb-fsevent (0.11.0)
102
+ rb-inotify (0.10.1)
103
+ ffi (~> 1.0)
104
+ rchardet (1.8.0)
105
+ regexp_parser (2.1.1)
106
+ rexml (3.2.5)
107
+ rspec (3.10.0)
108
+ rspec-core (~> 3.10.0)
109
+ rspec-expectations (~> 3.10.0)
110
+ rspec-mocks (~> 3.10.0)
111
+ rspec-core (3.10.1)
112
+ rspec-support (~> 3.10.0)
113
+ rspec-expectations (3.10.1)
94
114
  diff-lcs (>= 1.2.0, < 2.0)
95
- rspec-support (~> 3.7.0)
96
- rspec-mocks (3.7.0)
115
+ rspec-support (~> 3.10.0)
116
+ rspec-mocks (3.10.2)
97
117
  diff-lcs (>= 1.2.0, < 2.0)
98
- rspec-support (~> 3.7.0)
99
- rspec-support (3.7.1)
100
- rubocop (0.52.1)
118
+ rspec-support (~> 3.10.0)
119
+ rspec-support (3.10.2)
120
+ rubocop (1.15.0)
101
121
  parallel (~> 1.10)
102
- parser (>= 2.4.0.2, < 3.0)
103
- powerpack (~> 0.1)
122
+ parser (>= 3.0.0.0)
104
123
  rainbow (>= 2.2.2, < 4.0)
124
+ regexp_parser (>= 1.8, < 3.0)
125
+ rexml
126
+ rubocop-ast (>= 1.5.0, < 2.0)
105
127
  ruby-progressbar (~> 1.7)
106
- unicode-display_width (~> 1.0, >= 1.0.1)
107
- ruby-progressbar (1.9.0)
108
- sawyer (0.8.1)
109
- addressable (>= 2.3.5, < 2.6)
110
- faraday (~> 0.8, < 1.0)
128
+ unicode-display_width (>= 1.4.0, < 3.0)
129
+ rubocop-ast (1.5.0)
130
+ parser (>= 3.0.1.1)
131
+ ruby-progressbar (1.11.0)
132
+ ruby2_keywords (0.0.4)
133
+ sawyer (0.8.2)
134
+ addressable (>= 2.3.5)
135
+ faraday (> 0.8, < 2.0)
111
136
  shellany (0.0.1)
112
- terminal-table (1.8.0)
113
- unicode-display_width (~> 1.1, >= 1.1.1)
114
- thor (0.20.0)
115
- unicode-display_width (1.3.0)
116
- yard (0.9.12)
137
+ terminal-table (3.0.1)
138
+ unicode-display_width (>= 1.1.1, < 3)
139
+ thor (1.1.0)
140
+ unicode-display_width (2.0.0)
141
+ xcresult (0.2.1)
142
+ yard (0.9.26)
117
143
 
118
144
  PLATFORMS
119
145
  ruby
120
146
 
121
147
  DEPENDENCIES
122
- bundler (~> 1.3)
148
+ bundler (>= 2.2.10)
123
149
  danger
124
150
  danger-xcode_summary!
125
151
  guard (~> 2.14)
126
152
  guard-rspec (~> 4.7)
127
153
  listen (= 3.0.7)
128
154
  pry
129
- rake (~> 10.0)
155
+ rake (~> 13.0)
130
156
  rspec (~> 3.4)
131
157
  rubocop
132
158
  yard
133
159
 
134
160
  BUNDLED WITH
135
- 1.16.1
161
+ 2.2.26
data/Guardfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # A guardfile for making Danger Plugins
2
4
  # For more info see https://github.com/guard/guard#readme
3
5
 
data/README.md CHANGED
@@ -3,14 +3,9 @@
3
3
  [![License](http://img.shields.io/badge/license-MIT-green.svg?style=flat)](LICENSE.txt)
4
4
  [![Gem Version](https://badge.fury.io/rb/danger-xcode_summary.svg)](https://badge.fury.io/rb/danger-xcode_summary)
5
5
  [![Build Status](https://travis-ci.org/diogot/danger-xcode_summary.svg?branch=master)](https://travis-ci.org/diogot/danger-xcode_summary)
6
- [![Dependency Status](https://dependencyci.com/github/diogot/danger-xcode_summary/badge)](https://dependencyci.com/github/diogot/danger-xcode_summary)
7
6
 
8
7
  A [Danger](http://danger.systems) plugin that shows all build errors, warnings and unit tests results generated from `xcodebuild`.
9
8
 
10
- You need to use [xcpretty](https://github.com/supermarin/xcpretty) with
11
- [xcpretty-json-formatter](https://github.com/marcelofabri/xcpretty-json-formatter)
12
- to generate a JSON file that this plugin can read.
13
-
14
9
  ## How does it look?
15
10
 
16
11
  <table>
@@ -61,24 +56,6 @@ to generate a JSON file that this plugin can read.
61
56
  </tbody>
62
57
  </table>
63
58
 
64
- <table>
65
- <thead>
66
- <tr>
67
- <th width="50"></th>
68
- <th width="100%">
69
- 1 Message
70
- </th>
71
- </tr>
72
- </thead>
73
- <tbody>
74
- <tr>
75
- <td><g-emoji alias="book" fallback-src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4d6.png">📖</g-emoji></td>
76
- <td>Executed 5 tests, with 1 failure (0 unexpected) in 0.032 (0.065) seconds</td>
77
- </tr>
78
- </tr>
79
- </tbody>
80
- </table>
81
-
82
59
  ## Installation
83
60
 
84
61
  Add this line to your Gemfile:
@@ -92,9 +69,13 @@ gem 'danger-xcode_summary'
92
69
  Just add this line to your `Dangerfile`:
93
70
 
94
71
  ```ruby
95
- xcode_summary.report 'xcodebuild.json'
72
+ xcode_summary.report 'MyApp.xcresult'
96
73
  ```
97
74
 
75
+ You need to pass the path of the `xcresult` generated after compiling your app.
76
+ By default, this is inside the `DerivedData` for your project, but you can use the `-resultBundlePath`
77
+ flag when calling `xcodebuild` to customize its path. You can read more about it in this [blog post from the folks at PSPDFKit](https://pspdfkit.com/blog/2021/deflaking-ci-tests-with-xcresults/#using-xcresult-bundles).
78
+
98
79
  You can also ignore warnings from certain files by setting `ignored_files`:
99
80
  Warning: `ignored_files` patterns applied on relative paths.
100
81
 
@@ -104,10 +85,10 @@ xcode_summary.ignored_files = 'Pods/**'
104
85
 
105
86
  # Ignoring specific warnings
106
87
  xcode_summary.ignored_results { |result|
107
- result.message.start_with 'ld' # Ignore ld_warnings
88
+ result.message.include? 'ld' # Ignore ld_warnings
108
89
  }
109
90
 
110
- xcode_summary.report 'xcodebuild.json'
91
+ xcode_summary.report 'MyApp.xcresult'
111
92
  ```
112
93
 
113
94
  You can use `ignores_warnings` to supress warnings and shows only errors.
@@ -122,13 +103,13 @@ When this value is enabled, each warnings and errors are commented on each lines
122
103
  ```ruby
123
104
  # Comment on each lines
124
105
  xcode_summary.inline_mode = true
125
- xcode_summary.report 'xcodebuild.json'
106
+ xcode_summary.report 'MyApp.xcresult'
126
107
  ```
127
108
 
128
- You can get warning and error number by calling `warning_error_count`. The return will be a JSON string contains warning and error count, e.g {"warnings":1,"errors":3}:
109
+ You can get warning and error number by calling `warning_error_count`. The return will be a JSON string contains warning and error count, e.g `{"warnings":1,"errors":3}`:
129
110
 
130
111
  ```ruby
131
- result = xcode_summary.warning_error_count 'xcodebuild.json'
112
+ result = xcode_summary.warning_error_count 'MyApp.xcresult'
132
113
  ```
133
114
 
134
115
  ## License
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/gem_tasks'
2
4
  require 'rspec/core/rake_task'
3
5
  require 'rubocop/rake_task'
@@ -1,6 +1,6 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
- lib = File.expand_path('../lib', __FILE__)
3
+ lib = File.expand_path('lib', __dir__)
4
4
 
5
5
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
6
6
  require 'xcode_summary/gem_version.rb'
@@ -21,11 +21,14 @@ Gem::Specification.new do |spec|
21
21
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
22
22
  spec.require_paths = ['lib']
23
23
 
24
+ spec.required_ruby_version = ">= 2.4.0"
25
+
26
+ spec.add_dependency 'xcresult', '~> 0.2'
24
27
  spec.add_runtime_dependency 'danger-plugin-api', '~> 1.0'
25
28
 
26
29
  # General ruby development
27
- spec.add_development_dependency 'bundler', '~> 1.3'
28
- spec.add_development_dependency 'rake', '~> 10.0'
30
+ spec.add_development_dependency 'bundler', '>= 2.2.10'
31
+ spec.add_development_dependency 'rake', '~> 13.0'
29
32
 
30
33
  # Testing support
31
34
  spec.add_development_dependency 'rspec', '~> 3.4'
data/lib/danger_plugin.rb CHANGED
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'xcode_summary/plugin'
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'xcode_summary/gem_version'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module XcodeSummary
2
- VERSION = '0.5.0'.freeze
4
+ VERSION = '1.0.0'
3
5
  end
@@ -1,18 +1,19 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'json'
4
+ require 'xcresult'
2
5
 
3
6
  module Danger
4
7
  # Shows all build errors, warnings and unit tests results generated from `xcodebuild`.
5
- # You need to use [xcpretty](https://github.com/supermarin/xcpretty)
6
- # with [xcpretty-json-formatter](https://github.com/marcelofabri/xcpretty-json-formatter)
7
- # to generate a JSON file that this plugin can read.
8
+ # You need to use the `xcresult` produced by Xcode 11. It's located in the Derived Data folder.
8
9
  # @example Showing summary
9
10
  #
10
- # xcode_summary.report 'xcodebuild.json'
11
+ # xcode_summary.report 'build.xcresult'
11
12
  #
12
13
  # @example Filtering warnings in Pods
13
14
  #
14
15
  # xcode_summary.ignored_files = '**/Pods/**'
15
- # xcode_summary.report 'xcodebuild.json'
16
+ # xcode_summary.report 'build.xcresult'
16
17
  #
17
18
  # @see diogot/danger-xcode_summary
18
19
  # @tags xcode, xcodebuild, format
@@ -42,18 +43,6 @@ module Danger
42
43
  # @return [Block]
43
44
  attr_accessor :ignored_results
44
45
 
45
- # Defines if the test summary will be sticky or not.
46
- # Defaults to `false`.
47
- # @param [Boolean] value
48
- # @return [Boolean]
49
- attr_accessor :sticky_summary
50
-
51
- # Defines if the build summary is shown or not.
52
- # Defaults to `true`.
53
- # @param [Boolean] value
54
- # @return [Boolean]
55
- attr_accessor :test_summary
56
-
57
46
  # Defines if using inline comment or not.
58
47
  # Defaults to `false`.
59
48
  # @param [Boolean] value
@@ -81,14 +70,6 @@ module Danger
81
70
  @ignored_results ||= block
82
71
  end
83
72
 
84
- def sticky_summary
85
- @sticky_summary || false
86
- end
87
-
88
- def test_summary
89
- @test_summary.nil? ? true : @test_summary
90
- end
91
-
92
73
  def inline_mode
93
74
  @inline_mode || false
94
75
  end
@@ -96,30 +77,41 @@ module Danger
96
77
  def ignores_warnings
97
78
  @ignores_warnings || false
98
79
  end
80
+
81
+ # Pick a Dangerfile plugin for a chosen request_source and cache it
82
+ # based on https://github.com/danger/danger/blob/master/lib/danger/plugin_support/plugin.rb#L31
83
+ def plugin
84
+ plugins = Plugin.all_plugins.select { |plugin| Dangerfile.essential_plugin_classes.include? plugin }
85
+ @plugin ||= plugins.select { |p| p.method_defined? :html_link }.map { |p| p.new(@dangerfile) }.compact.first
86
+ end
99
87
  # rubocop:enable Lint/DuplicateMethods
100
88
 
101
- # Reads a file with JSON Xcode summary and reports it.
89
+ # Reads a `.xcresult` and reports it.
102
90
  #
103
- # @param [String] file_path Path for Xcode summary in JSON format.
91
+ # @param [String] file_path Path for xcresult bundle.
104
92
  # @return [void]
105
93
  def report(file_path)
106
- if File.file?(file_path)
107
- xcode_summary = JSON.parse(File.read(file_path), symbolize_names: true)
94
+ if File.exist?(file_path)
95
+ xcode_summary = XCResult::Parser.new(path: file_path)
108
96
  format_summary(xcode_summary)
109
97
  else
110
98
  fail 'summary file not found'
111
99
  end
112
100
  end
113
101
 
114
- # Reads a file with JSON Xcode summary and reports its warning and error count.
102
+ # Reads a `.xcresult` and reports its warning and error count.
115
103
  #
116
- # @param [String] file_path Path for Xcode summary in JSON format.
104
+ # @param [String] file_path Path for xcresult bundle.
117
105
  # @return [String] JSON string with warningCount and errorCount
118
106
  def warning_error_count(file_path)
119
- if File.file?(file_path)
120
- xcode_summary = JSON.parse(File.read(file_path), symbolize_names: true)
121
- warning_count = warnings(xcode_summary).count
122
- error_count = errors(xcode_summary).count
107
+ if File.exist?(file_path)
108
+ xcode_summary = XCResult::Parser.new(path: file_path)
109
+ warning_count = 0
110
+ error_count = 0
111
+ xcode_summary.actions_invocation_record.actions.each do |action|
112
+ warning_count += warnings(action).count
113
+ error_count += errors(action).count
114
+ end
123
115
  result = { warnings: warning_count, errors: error_count }
124
116
  result.to_json
125
117
  else
@@ -130,111 +122,90 @@ module Danger
130
122
  private
131
123
 
132
124
  def format_summary(xcode_summary)
133
- messages(xcode_summary).each { |s| message(s, sticky: sticky_summary) }
134
- warnings(xcode_summary).each do |result|
135
- if inline_mode && result.location
136
- warn(result.message, sticky: false, file: result.location.file_name, line: result.location.line)
137
- else
138
- warn(result.message, sticky: false)
125
+ xcode_summary.actions_invocation_record.actions.each do |action|
126
+ warnings(action).each do |result|
127
+ if inline_mode && result.location
128
+ warn(result.message, sticky: false, file: result.location.file_path, line: result.location.line)
129
+ else
130
+ warn(result.message, sticky: false)
131
+ end
139
132
  end
140
- end
141
- errors(xcode_summary).each do |result|
142
- if inline_mode && result.location
143
- fail(result.message, sticky: false, file: result.location.file_name, line: result.location.line)
144
- else
145
- fail(result.message, sticky: false)
133
+ # rubocop:disable Lint/UnreachableLoop
134
+ errors(action).each do |result|
135
+ if inline_mode && result.location
136
+ fail(result.message, sticky: false, file: result.location.file_path, line: result.location.line)
137
+ else
138
+ fail(result.message, sticky: false)
139
+ end
146
140
  end
141
+ # rubocop:enable Lint/UnreachableLoop
147
142
  end
148
143
  end
149
144
 
150
- def messages(xcode_summary)
151
- if test_summary
152
- [
153
- xcode_summary[:tests_summary_messages]
154
- ].flatten.uniq.compact.map(&:strip)
155
- else
156
- []
157
- end
158
- end
159
-
160
- def warnings(xcode_summary)
161
- if ignores_warnings
162
- return []
163
- end
145
+ def warnings(action)
146
+ return [] if ignores_warnings
164
147
 
165
148
  warnings = [
166
- xcode_summary.fetch(:warnings, []).map { |message| Result.new(message, nil) },
167
- xcode_summary.fetch(:ld_warnings, []).map { |message| Result.new(message, nil) },
168
- xcode_summary.fetch(:compile_warnings, {}).map do |h|
169
- Result.new(format_compile_warning(h), parse_location(h))
170
- end
171
- ].flatten.uniq.compact.reject { |result| result.message.nil? }
149
+ action.action_result.issues.warning_summaries,
150
+ action.build_result.issues.warning_summaries
151
+ ].flatten.compact.map do |summary|
152
+ result = Result.new(summary.message, parse_location(summary.document_location_in_creating_workspace))
153
+ Result.new(format_warning(result), result.location)
154
+ end
155
+ warnings = warnings.uniq.reject { |result| result.message.nil? }
172
156
  warnings.delete_if(&ignored_results)
173
157
  end
174
158
 
175
- def errors(xcode_summary)
159
+ def errors(action)
176
160
  errors = [
177
- xcode_summary.fetch(:errors, []).map { |message| Result.new(message, nil) },
178
- xcode_summary.fetch(:compile_errors, {}).map do |h|
179
- Result.new(format_compile_warning(h), parse_location(h))
180
- end,
181
- xcode_summary.fetch(:file_missing_errors, {}).map do |h|
182
- Result.new(format_format_file_missing_error(h), parse_location(h))
183
- end,
184
- xcode_summary.fetch(:undefined_symbols_errors, {}).map do |h|
185
- Result.new(format_undefined_symbols(h), nil)
186
- end,
187
- xcode_summary.fetch(:duplicate_symbols_errors, {}).map do |h|
188
- Result.new(format_duplicate_symbols(h), nil)
189
- end,
190
- xcode_summary.fetch(:tests_failures, {}).map do |test_suite, failures|
191
- failures.map do |failure|
192
- Result.new(format_test_failure(test_suite, failure), parse_test_location(failure))
193
- end
194
- end
195
- ].flatten.uniq.compact.reject { |result| result.message.nil? }
196
- errors.delete_if(&ignored_results)
197
- end
161
+ action.action_result.issues.error_summaries,
162
+ action.build_result.issues.error_summaries
163
+ ].flatten.compact.map do |summary|
164
+ result = Result.new(summary.message, parse_location(summary.document_location_in_creating_workspace))
165
+ Result.new(format_warning(result), result.location)
166
+ end
198
167
 
199
- def parse_location(h)
200
- file_path, line, _column = h[:file_path].split(':')
201
- Location.new(h[:file_name], file_path, line.to_i)
202
- end
168
+ test_failures = [
169
+ action.action_result.issues.test_failure_summaries,
170
+ action.build_result.issues.test_failure_summaries
171
+ ].flatten.compact.map do |summary|
172
+ result = Result.new(summary.message, parse_location(summary.document_location_in_creating_workspace))
173
+ Result.new(format_test_failure(result, summary.producing_target, summary.test_case_name),
174
+ result.location)
175
+ end
203
176
 
204
- def parse_test_location(failure)
205
- path, line = failure[:file_path].split(':')
206
- file_name = relative_path(path)
207
- Location.new(file_name, path, line.to_i)
177
+ results = (errors + test_failures).uniq.reject { |result| result.message.nil? }
178
+ results.delete_if(&ignored_results)
208
179
  end
209
180
 
210
- def format_path(path)
211
- clean_path, line = parse_filename(path)
212
- path = clean_path + '#L' + line if clean_path && line
213
-
214
- # Pick a Dangerfile plugin for a chosen request_source
215
- # based on https://github.com/danger/danger/blob/master/lib/danger/plugin_support/plugin.rb#L31
216
- plugins = Plugin.all_plugins.select { |plugin| Dangerfile.essential_plugin_classes.include? plugin }
217
- plugin = plugins.select { |p| p.method_defined? :html_link }.map { |p| p.new(@dangerfile) }.compact.first
181
+ def parse_location(document_location)
182
+ return nil if document_location.nil?
218
183
 
219
- plugin.html_link(path)
184
+ file_path = document_location.url.gsub('file://', '').split('#').first
185
+ file_name = file_path.split('/').last
186
+ fragment = document_location.url.split('#').last
187
+ params = CGI.parse(fragment).transform_values(&:first)
188
+ line = params['StartingLineNumber'].to_i + 1 # StartingLineNumber is 0-based, but we need a 1-based value
189
+ Location.new(file_name, relative_path(file_path), line)
220
190
  end
221
191
 
222
- def parse_filename(path)
223
- regex = /^(.*?):(\d*):?\d*$/
224
- match = path.match(regex)
225
- if match
226
- match.captures
192
+ def format_path(file_path, line)
193
+ if plugin
194
+ path = file_path
195
+ path += "#L#{line}" if line
196
+ plugin.html_link(path)
197
+ else
198
+ file_path
227
199
  end
228
200
  end
229
201
 
230
202
  def relative_path(path)
231
203
  return nil if project_root.nil?
204
+
232
205
  path.gsub(project_root, '')
233
206
  end
234
207
 
235
208
  def should_ignore_warning?(path)
236
- parsed = parse_filename(path)
237
- path = parsed.first || path
238
209
  ignored_files.any? { |pattern| File.fnmatch(pattern, path) }
239
210
  end
240
211
 
@@ -242,44 +213,22 @@ module Danger
242
213
  reason.gsub('>', '\>').gsub('<', '\<')
243
214
  end
244
215
 
245
- def format_compile_warning(h)
246
- path = relative_path(h[:file_path])
247
- return nil if should_ignore_warning?(path)
248
-
249
- path_link = format_path(path)
216
+ def format_warning(result)
217
+ return escape_reason(result.message) if result.location.nil?
250
218
 
251
- warning = "**#{path_link}**: #{escape_reason(h[:reason])} <br />"
252
- if h[:line] && !h[:line].empty?
253
- "#{warning}" \
254
- "```\n" \
255
- "#{h[:line]}\n" \
256
- '```'
257
- else
258
- warning
259
- end
260
- end
261
-
262
- def format_format_file_missing_error(h)
263
- path = relative_path(h[:file_path])
264
- path_link = format_path(path)
265
- "**#{escape_reason(h[:reason])}**: #{path_link}"
266
- end
219
+ path = result.location.file_path
220
+ return nil if should_ignore_warning?(path)
267
221
 
268
- def format_undefined_symbols(h)
269
- "#{h[:message]} <br />" \
270
- "> Symbol: #{h[:symbol]} <br />" \
271
- "> Referenced from: #{h[:reference]}"
272
- end
222
+ path_link = format_path(path, result.location.line)
273
223
 
274
- def format_duplicate_symbols(h)
275
- "#{h[:message]} <br />" \
276
- "> #{h[:file_paths].map { |path| path.split('/').last }.join('<br /> ')}"
224
+ "**#{path_link}**: #{escape_reason(result.message)}"
277
225
  end
278
226
 
279
- def format_test_failure(suite_name, failure)
280
- path = relative_path(failure[:file_path])
281
- path_link = format_path(path)
282
- "**#{suite_name}**: #{failure[:test_case]}, #{escape_reason(failure[:reason])} <br /> #{path_link}"
227
+ def format_test_failure(result, producing_target, test_case_name)
228
+ path = result.location.file_path
229
+ path_link = format_path(path, result.location.line)
230
+ suite_name = "#{producing_target}.#{test_case_name}"
231
+ "**#{suite_name}**: #{escape_reason(result.message)} <br /> #{path_link}"
283
232
  end
284
233
  end
285
234
  end