αž€αžΆαžšαžœαž·αžœαžαŸ’αžαž“αŸαž“αŸƒ CI αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ’αžšαž»αž˜αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‘αžΌαžšαžŸαŸαž–αŸ’αž‘

αžŸαž–αŸ’αžœαžαŸ’αž„αŸƒαž“αŸαŸ‡ αž•αž›αž·αžαž•αž›αžŸαžΌαž αŸ’αžœαžœαŸ‚αžšαž—αžΆαž‚αž…αŸ’αžšαžΎαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‡αžΆαž€αŸ’αžšαž»αž˜αŸ” αž›αž€αŸ’αžαžαžŽαŸ’αžŒαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž€αŸ’αžšαž»αž˜αž‡αŸ„αž‚αž‡αŸαž™αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžαŸ†αžŽαžΆαž„αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αž“αŸƒαžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜αžŸαžΆαž˜αž‰αŸ’αž‰αŸ”

αž€αžΆαžšαžœαž·αžœαžαŸ’αžαž“αŸαž“αŸƒ CI αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ’αžšαž»αž˜αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‘αžΌαžšαžŸαŸαž–αŸ’αž‘

αž“αŸ…αž–αŸαž›αž’αŸ’αž“αž€αžŸαžšαžŸαŸαžšαž€αžΌαžŠαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž αžΎαž™ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžαŸ‚αž”αŸ’αžšαžΆαž€αžŠαžαžΆαžœαžΆαŸ–

  1. αž’αŸ’αžœαžΎαž€αžΆαžšαŸ”
  2. αžœαžΆαž˜αž·αž“αžαžΌαž…αž’αŸ’αžœαžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αžšαž½αž˜αž‘αžΆαŸ†αž„αž›αŸαžαž€αžΌαžŠαžŠαŸ‚αž›αž˜αž·αžαŸ’αžαžšαž½αž˜αž€αžΆαžšαž„αžΆαžšαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αžΆαž“αžŸαžšαžŸαŸαžšαž•αž„αžŠαŸ‚αžšαŸ”

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž›αž€αŸ’αžαžαžŽαŸ’αžŒαž‘αžΆαŸ†αž„αž–αžΈαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ†αž–αŸαž‰ αž“αŸ„αŸ‡αž’αŸ’αž“αž€αž€αŸ†αž–αž»αž„αž“αŸ…αž›αžΎαž•αŸ’αž›αžΌαžœαž‘αŸ…αž€αžΆαž“αŸ‹αž—αžΆαž–αž‡αŸ„αž‚αž‡αŸαž™αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž‘αžΆαŸ†αž„αž“αŸαŸ‡ αž“αž·αž„αž˜αž·αž“αž„αžΆαž€αž…αŸαž‰αž–αžΈαž•αŸ’αž›αžΌαžœαžšαž€αž”αŸ’αžšαžΆαž€αŸ‹αž…αŸ†αžŽαŸαž‰ αž™αžΎαž„αž”αžΆαž“αž˜αž€αž‡αžΆαž˜αž½αž™αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ”

CI αž‚αžΊαž‡αžΆαž›αŸ†αž αžΌαžšαž€αžΆαžšαž„αžΆαžšαžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αž‰αŸ’αž…αžΌαž›αž›αŸαžαž€αžΌαžŠαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž‘αŸ…αž€αŸ’αž“αž»αž„αž€αžΌαžŠαž•αž›αž·αžαž•αž›αž‘αžΆαŸ†αž„αž˜αžΌαž›αž±αŸ’αž™αž”αžΆαž“αž‰αžΉαž€αž‰αžΆαž”αŸ‹αžαžΆαž˜αžŠαŸ‚αž›αž’αžΆαž…αž’αŸ’αžœαžΎαž‘αŸ…αž”αžΆαž“αŸ” αž αžΎαž™β€‹αž’αŸ’αž“αž€β€‹αž˜αž·αž“β€‹αž‚αŸ’αžšαžΆαž“αŸ‹β€‹αžαŸ‚β€‹αžšαž½αž˜β€‹αž”αž‰αŸ’αž…αžΌαž›β€‹αž‚αŸ’αž“αžΆβ€‹αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡β€‹αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αž€αŸβ€‹αž–αž·αž“αž·αžαŸ’αž™β€‹αž˜αžΎαž›β€‹αž‡αžΆαž“αž·αž…αŸ’αž…β€‹αžαžΆβ€‹αž’αŸ’αžœαžΈβ€‹αž‚αŸ’αžšαž”αŸ‹β€‹αž™αŸ‰αžΆαž„β€‹αž€αŸ†αž–αž»αž„β€‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” αžŠαŸ„αž™αžŸαžΆαžšαž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž–αž·αž“αž·αžαŸ’αž™αž…αŸ’αžšαžΎαž“ αž“αž·αž„αž‰αžΉαž€αž‰αžΆαž”αŸ‹ αžœαžΆαž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαž‚αž·αžαž’αŸ†αž–αžΈαžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž€αž˜αŸ’αž˜αŸ” αž’αŸ’αž“αž€αž’αžΆαž…αž–αž·αž“αž·αžαŸ’αž™αž’αŸ’αžœαžΈαŸ—αž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αžŠαŸ„αž™αžŠαŸƒ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž’αŸ’αž“αž€αž˜αž·αž“αž‚αž½αžšαž‘αŸ αž αžΎαž™αž“αŸαŸ‡αž‡αžΆαž˜αžΌαž›αž αŸαžαž»αŸ”

  • αž˜αž“αž»αžŸαŸ’αžŸαž‡αžΆαž‘αžΈαž‚αŸ„αžšαž–. αž˜αž½αž™αž˜αŸ‰αŸ„αž„αž“αŸƒαž€αžΆαžšαž„αžΆαžšαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŽαžΆαž˜αž½αž™αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαžαŸ’αž›αŸƒαž‡αžΆαž„αž˜αž½αž™αž˜αŸ‰αŸ„αž„αž“αŸƒαž€αžΆαžšαž„αžΆαžšαžšαž”αžŸαŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžŽαžΆαž˜αž½αž™αŸ”
  • αž˜αž“αž»αžŸαŸ’αžŸαž’αŸ’αžœαžΎαžαž»αžŸ. αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž’αžΆαž…αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αžΎαžŸαžΆαžαžΆαžαž»αžŸ αž¬αž€αŸ†αž αž»αžŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αž„αž€αŸ’αžšαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αžŸαžΆαž€αž›αŸ’αž”αž„αŸ”
  • αž˜αž“αž»αžŸαŸ’αžŸαžαŸ’αž‡αž·αž›αŸ”. αž™αžΌαžšαŸ—αž˜αŸ’αžŠαž„ αž–αŸαž›αžαŸ’αž‰αž»αŸ†αž”αž‰αŸ’αž…αž”αŸ‹αž€αž·αž…αŸ’αž…αž€αžΆαžšαž˜αž½αž™ αž‚αŸ†αž“αž·αžαž€αžΎαžαž‘αžΎαž„αžαžΆ β€œαžαžΎαž˜αžΆαž“αž’αŸ’αžœαžΈαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž–αž·αž“αž·αžαŸ’αž™? αžαŸ’αž‰αž»αŸ†αžŸαžšαžŸαŸαžšαž–αžΈαžšαž‡αž½αžš - αž’αŸ’αžœαžΈαŸ—αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš! αžαŸ’αž‰αž»αŸ†αž‚αž·αžαžαžΆ αž’αŸ’αž“αž€αžαŸ’αž›αŸ‡αž€αŸαž˜αžΆαž“αž‚αŸ†αž“αž·αžαž”αŸ‚αž”αž“αŸαŸ‡αžŠαŸ‚αžšαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž’αŸ’αž“αž€αž‚αž½αžšαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž‡αžΆαž“αž·αž…αŸ’αž…αŸ”

αžšαž”αŸ€αž”αžŠαŸ‚αž›αžŸαž˜αžΆαž αžšαžŽαž€αž˜αŸ’αž˜αž”αž“αŸ’αžαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αž αž“αž·αž„αž”αž„αŸ’αž€αžΎαžαž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ’αžšαž»αž˜αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž§αž”αž€αžšαžŽαŸαž…αž›αŸαž Avito αžšαž”αŸ€αž”αžŠαŸ‚αž›αž–αž½αž€αž‚αŸαž”αžΆαž“αž‘αŸ…αž–αžΈ 0 αž‘αŸ… 450 αžŸαžΆαž„αžŸαž„αŸ‹αž€αŸ’αž“αž»αž„αž˜αž½αž™αžαŸ’αž„αŸƒ αž αžΎαž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžŠαŸ‚αž›αž”αž„αŸ’αž€αžΎαžαž”αžΆαž“αž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ† 200 αž˜αŸ‰αŸ„αž„αž€αŸ’αž“αž»αž„αž˜αž½αž™αžαŸ’αž„αŸƒ αž”αžΆαž“αž“αž·αž™αžΆαž™αžαžΆ Nikolai Nesterov (αžŽαŸαžŸαŸ’αžαŸαžšαŸ‰αžΌαžœ) αž‚αžΊαž‡αžΆαž’αŸ’αž“αž€αž…αžΌαž›αžšαž½αž˜αž€αŸ’αž“αž»αž„αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžœαž·αžœαžαŸ’αžαž“αŸαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ CI/CD Android αŸ”

αžšαžΏαž„αž“αŸαŸ‡αž‚αžΊαž•αŸ’αž’αŸ‚αž€αž›αžΎαž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ Android αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž—αžΆαž‚αž…αŸ’αžšαžΎαž“αž’αžΆαž…αž’αž“αž»αžœαžαŸ’αžαž”αžΆαž“αž“αŸ…αž›αžΎ iOS αž•αž„αžŠαŸ‚αžšαŸ”


αž˜αžΆαž“αž–αŸαž›αž˜αž½αž™ αž˜αž“αž»αžŸαŸ’αžŸαž˜αŸ’αž“αžΆαž€αŸ‹αž”αžΆαž“αž’αŸ’αžœαžΎαž€αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ’αžšαž»αž˜ Avito Android αŸ” αžαžΆαž˜αž“αž·αž™αž˜αž“αŸαž™ αž‚αžΆαžαŸ‹αž˜αž·αž“αžαŸ’αžšαžΌαžœαž€αžΆαžšαž’αŸ’αžœαžΈαž–αžΈαžŸαž˜αžΆαž αžšαžŽαž€αž˜αŸ’αž˜αž”αž“αŸ’αžαž‘αŸαŸ– αž‚αŸ’αž˜αžΆαž“αž“αžšαžŽαžΆαž˜αŸ’αž“αžΆαž€αŸ‹αž’αžΆαž…αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž˜αž½αž™αž”αžΆαž“αž‘αŸαŸ”

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αžΆαž“αžšαžΈαž€αž…αž˜αŸ’αžšαžΎαž“ αž€αžΆαžšαž„αžΆαžšαžαŸ’αž˜αžΈαŸ—αž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αžšαžΎαž“αž‘αžΎαž„ αž αžΎαž™αž€αŸ’αžšαž»αž˜αž€αŸαžšαžΈαž€αž…αž˜αŸ’αžšαžΎαž“αž‘αŸ…αžαžΆαž˜αž“αŸ„αŸ‡αžŠαŸ‚αžšαŸ” αž“αŸ…αž…αŸ†αžŽαž»αž…αžαŸ’αž›αŸ‡ αžœαžΆαžŠαž›αŸ‹αž–αŸαž›αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αž„αŸ’αž€αžΎαžαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž€αžΌαžŠαž‡αžΆαž•αŸ’αž›αžΌαžœαž€αžΆαžšαŸ” αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž”αŸ’αžšαžΎ Git flow αŸ”

αž€αžΆαžšαžœαž·αžœαžαŸ’αžαž“αŸαž“αŸƒ CI αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ’αžšαž»αž˜αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‘αžΌαžšαžŸαŸαž–αŸ’αž‘

αž‚αŸ„αž›αž‚αŸ†αž“αž·αžαž“αŸƒαž›αŸ†αž αžΌαžš Git αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαžŸαŸ’αž‚αžΆαž›αŸ‹αž™αŸ‰αžΆαž„αž…αŸ’αž”αžΆαžŸαŸ‹αŸ– αž‚αž˜αŸ’αžšαŸ„αž„αž˜αž½αž™αž˜αžΆαž“αžŸαžΆαžαžΆαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‘αžΌαž‘αŸ…αž˜αž½αž™ αž αžΎαž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αž»αžαž„αžΆαžšαžαŸ’αž˜αžΈαž“αžΈαž˜αž½αž™αŸ— αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž”αžΆαž“αž€αžΆαžαŸ‹αžŸαžΆαžαžΆαžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αž˜αž½αž™ αž”αŸ’αžαŸαž‡αŸ’αž‰αžΆαž…αŸ†αž–αŸ„αŸ‡αžœαžΆ αžšαž»αž‰ αž αžΎαž™αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž–αž½αž€αž‚αŸαž…αž„αŸ‹αž”αž‰αŸ’αž…αžΌαž›αž€αžΌαžŠαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαžΆαžαžΆαž’αž—αž·αžœαžŒαŸ’αžαž“αŸ αžŸαžΌαž˜αž”αžΎαž€ αž‘αžΆαž‰αžŸαŸ†αžŽαžΎαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€αž…αŸ†αžŽαŸαŸ‡αžŠαžΉαž„ αž“αž·αž„αž–αž·αž—αžΆαž€αŸ’αžŸαžΆαž’αŸ†αž–αžΈαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αž αž™αžΎαž„αž”αžΆαž“αžŽαŸ‚αž“αžΆαŸ†αž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž€αžΌαžŠ αž–αŸ„αž›αž‚αžΊ αžŸαž αžŸαŸαžœαž·αž€αžαŸ’αžšαžΌαžœαžαŸ‚αž–αž·αž“αž·αžαŸ’αž™ αž“αž·αž„αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž›αŸαžαž€αžΌαžŠαžšαž”αžŸαŸ‹αž‚αŸ’αž“αžΆαž‘αŸ…αžœαž·αž‰αž‘αŸ…αž˜αž€αŸ”

αž–αž·αž“αž·αžαŸ’αž™

αž€αžΆαžšαž˜αžΎαž›αž€αžΌαžŠαžŠαŸ„αž™αž—αŸ’αž“αŸ‚αž€αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž‚αžΊαžαŸ’αžšαž‡αžΆαž€αŸ‹ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž·αž“αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αž‘αŸαŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž€αŸ†αž–αž»αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŽαŸ‚αž“αžΆαŸ†αŸ”

  • αžŠαŸ†αž”αžΌαž„αž™αžΎαž„αž–αž·αž“αž·αžαŸ’αž™ αž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆ ARK.
  • αž…αŸ’αžšαžΎαž“ αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αž Junit.
  • αž™αžΎαž„αž–αž·αž…αžΆαžšαžŽαžΆαž›αžΎαž€αžΆαžšαž‚αŸ’αžšαž”αžŠαžŽαŸ’αžαž”αŸ‹αž€αžΌαžŠαž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž™αžΎαž„αž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαŸ”

αžŠαžΎαž˜αŸ’αž”αžΈαž™αž›αŸ‹αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž‚αž½αžšαžαŸ‚αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αžŸαžΌαž˜αž˜αžΎαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž“αŸ…αž€αŸ’αž“αž»αž„ Avito αŸ”

αžœαžΆαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžαŸ†αžŽαžΆαž„αžŠαŸ„αž™αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαžŠαžΌαž…αž“αŸαŸ‡:

  • αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžŸαžšαžŸαŸαžšαž€αžΌαžŠαž“αŸ…αž›αžΎαž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαž™αž½αžšαžŠαŸƒαžšαž”αžŸαŸ‹αž‚αžΆαžαŸ‹αŸ” αž’αŸ’αž“αž€αž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž“αŸ…αž‘αžΈαž“αŸαŸ‡ - αž‘αžΆαŸ†αž„αž‡αžΆαž˜αž½αž™ commit hook αž¬αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž‘αŸƒαžαžΆαž„αž€αŸ’αžšαŸ„αž™αŸ”
  • αž”αž“αŸ’αž‘αžΆαž”αŸ‹β€‹αž–αžΈβ€‹αž’αŸ’αž“αž€β€‹αž’αž—αž·αžœαžŒαŸ’αžαž“αŸβ€‹αž”αžΆαž“β€‹αžšαž»αž‰β€‹αž€αžΌαžŠβ€‹αžšαž½αž… αž‚αžΆαžαŸ‹β€‹αž”αžΎαž€β€‹αžŸαŸ†αžŽαžΎβ€‹αž‘αžΆαž‰αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž±αŸ’αž™αž›αŸαžαž€αžΌαžŠαžšαž”αžŸαŸ‹αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαžΆαžαžΆαž’αž—αž·αžœαžŒαŸ’αžαž“αŸ αžœαžΆαž…αžΆαŸ†αž”αžΆαž…αŸ‹αžαŸ’αžšαžΌαžœαž†αŸ’αž›αž„αž€αžΆαžαŸ‹αž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αž€αžΌαžŠ αž“αž·αž„αž”αŸ’αžšαž˜αžΌαž›αž…αŸ†αž“αž½αž“αž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžšαŸ” αž’αŸ’αž“αž€αž’αžΆαž…αž”αžΎαž€αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™ αž“αž·αž„αž”αž„αŸ’αž€αžΎαžαž“αŸ…αž‘αžΈαž“αŸαŸ‡αŸ– αžšαž αžΌαžαžŠαž›αŸ‹αž€αžΆαžšαžŸαŸ’αžαžΆαž”αž“αžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‘αž‘αž½αž›αž”αžΆαž“αž‡αŸ„αž‚αž‡αŸαž™ αžŸαŸ†αžŽαžΎαž‘αžΆαž‰αž˜αž·αž“αž’αžΆαž…αž”αž‰αŸ’αž…αžΌαž›αž…αžΌαž›αž‚αŸ’αž“αžΆαž”αžΆαž“αž‘αŸαŸ”
  • αž”αž“αŸ’αž‘αžΆαž”αŸ‹β€‹αž–αžΈβ€‹αžŸαŸ†αžŽαžΎβ€‹αž‘αžΆαž‰β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž”αž‰αŸ’αž…αžΌαž›β€‹αž‚αŸ’αž“αžΆ αž αžΎαž™β€‹αž€αžΌαžŠβ€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αžšαž½αž˜β€‹αž”αž‰αŸ’αž…αžΌαž›β€‹αž€αŸ’αž“αž»αž„β€‹αž€αžΆαžšβ€‹αž’αž—αž·αžœαžŒαŸ’αž αž’αŸ’αž“αž€β€‹αž’αžΆαž…β€‹αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸβ€‹αž–αŸαž›β€‹αžœαŸαž›αžΆβ€‹αžŠαŸβ€‹αž„αžΆαž™αžŸαŸ’αžšαž½αž›β€‹αž˜αž½αž™αŸ– αž§αž‘αžΆαž αžšαžŽαŸ αž“αŸ…β€‹αž–αŸαž›β€‹αž™αž”αŸ‹ αž–αŸαž›β€‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“β€‹αž˜αŸβ€‹αž‘αžΆαŸ†αž„αž’αžŸαŸ‹β€‹αž‘αŸ†αž“αŸαžš αž αžΎαž™β€‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšβ€‹αž–αž·αž“αž·αžαŸ’αž™β€‹αž…αŸ’αžšαžΎαž“β€‹αžαžΆαž˜β€‹αžŠαŸ‚αž›β€‹αž’αŸ’αž“αž€β€‹αž…αžΌαž›αž…αž·αžαŸ’αžαŸ”

αž‚αŸ’αž˜αžΆαž“αž“αžšαžŽαžΆαž˜αŸ’αž“αžΆαž€αŸ‹αž…αžΌαž›αž…αž·αžαŸ’αžαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαŸ’αž€αŸαž“αž“αŸ…αž›αžΎαž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαž™αž½αžšαžŠαŸƒαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž‘αŸαŸ” αž“αŸ…αž–αŸαž›αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹αž˜αž»αžαž„αžΆαžšαž˜αž½αž™ αž‚αžΆαžαŸ‹αž…αž„αŸ‹αžšαž»αž‰αžœαžΆαž±αŸ’αž™αž›αžΏαž“ αž αžΎαž™αž”αžΎαž€αžŸαŸ†αžŽαžΎαž‘αžΆαž‰αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž“αŸ…αž–αŸαž›αž“αŸαŸ‡ αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžšαž™αŸˆαž–αŸαž›αžœαŸ‚αž„αž˜αž½αž™αž…αŸ†αž“αž½αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ αž“αŸαŸ‡αž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ‚αž˜αž·αž“αžšαžΈαž€αžšαžΆαž™αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαŸ‚αž˜αž‘αžΆαŸ†αž„αž’αŸ’αžœαžΎαž±αŸ’αž™αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž™αžΊαžαž•αž„αžŠαŸ‚αžšαŸ– αžαžŽαŸˆαž–αŸαž›αžŠαŸ‚αž›αž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαž™αž½αžšαžŠαŸƒαž€αŸ†αž–αž»αž„αž–αž·αž“αž·αžαŸ’αž™αž’αŸ’αžœαžΈαž˜αž½αž™ αžœαžΆαž˜αž·αž“αž’αžΆαž…αž‘αŸ…αžšαž½αž…αž‘αŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαž›αžΎαžœαžΆαŸ”

αž™αžΎαž„αž–αž·αžαž‡αžΆαž…αžΌαž›αž…αž·αžαŸ’αžαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž“αŸ…αž–αŸαž›αž™αž”αŸ‹ αž–αžΈαž–αŸ’αžšαŸ„αŸ‡αž˜αžΆαž“αž–αŸαž›αž…αŸ’αžšαžΎαž“ αž“αž·αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ αž’αŸ’αž“αž€αž’αžΆαž…αžŠαžΎαžšαž‡αž»αŸ†αžœαž·αž‰αž”αžΆαž“αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‡αžΆαž’αž€αž»αžŸαž› αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž€αžΌαžŠαž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„ αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž˜αžΆαž“αž€αžΆαžšαž›αžΎαž€αž‘αžΉαž€αž…αž·αžαŸ’αžαžαž·αž…αž‡αžΆαž„αž…αŸ’αžšαžΎαž“αž€αŸ’αž“αž»αž„αž€αžΆαžšαž‡αž½αžŸαž‡αž»αž›αž€αŸ†αž αž»αžŸαžŠαŸ‚αž› CI αž”αžΆαž“αžšαž€αžƒαžΎαž‰αŸ” αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž‚αž·αžαžαŸ’αž›αž½αž“αž―αž„αž‡αžΆαž”αŸ’αžšαž…αžΆαŸ† αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž˜αžΎαž›αž€αŸ†αž αž»αžŸαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž”αžΆαž“αžšαž€αžƒαžΎαž‰αž“αŸ…αž€αŸ’αž“αž»αž„αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαž–αŸαž›αž–αŸ’αžšαžΉαž€αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž‡αž½αžŸαž‡αž»αž›αžœαžΆαž“αŸ…αžαŸ’αž„αŸƒαžŽαžΆαž˜αž½αž™αž“αŸ…αž–αŸαž›αž€αŸ’αžšαŸ„αž™ αž–αŸ’αžšαŸ„αŸ‡αž₯αž‘αžΌαžœαž“αŸαŸ‡αž˜αžΆαž“αž€αž·αž…αŸ’αž…αž€αžΆαžšαžαŸ’αž˜αžΈαžŠαŸαžαŸ’αžšαž‡αžΆαž€αŸ‹αž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„ Jira αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž…αž„αŸ‹αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž’αŸ’αžœαžΎαŸ”

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž–αž·αž“αž·αžαŸ’αž™αž‘αž”αŸ‹αžŸαŸ’αž€αžΆαžαŸ‹αžŸαŸ†αžŽαžΎαžšαž‘αžΆαž‰ αž“αŸ„αŸ‡αž˜αžΆαž“αž€αžΆαžšαž›αžΎαž€αž‘αžΉαž€αž…αž·αžαŸ’αžαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹ αž–αžΈαž–αŸ’αžšαŸ„αŸ‡αžšαž αžΌαžαžŠαž›αŸ‹αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž‘αŸ…αž‡αžΆαž–αžŽαŸŒαž”αŸƒαžαž„ αž€αžΌαžŠαž“αžΉαž„αž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αŸ αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸαž™αžαžΆαž€αž·αž…αŸ’αž…αž€αžΆαžšαž“αžΉαž„αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹αŸ”

αž‡αžΆαž›αž‘αŸ’αž’αž•αž› αž™αžΎαž„αž”αžΆαž“αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž™αž»αž‘αŸ’αž’αžŸαžΆαžŸαŸ’αžšαŸ’αžαžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ– αž™αžΎαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž’αžαž·αž”αžšαž˜αžΆαžŠαŸ‚αž›αž’αžΆαž…αž’αŸ’αžœαžΎαž‘αŸ…αž”αžΆαž“αž“αŸ…αž–αŸαž›αž™αž”αŸ‹ αž αžΎαž™αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž€αžΆαžšαžšαž·αŸ‡αž‚αž“αŸ‹αž”αŸ†αž•αž»αžαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸ αž αžΎαž™αžŸαŸ†αžαžΆαž“αŸ‹αž”αŸ†αž•αž»αžαž‚αžΊαž›αžΏαž“αž”αŸ†αž•αž»αžαžαžΆαž˜αžŸαŸ†αžŽαžΎαžšαž‘αžΆαž‰αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΎαž„αž˜αž·αž“αžˆαž”αŸ‹αž“αŸ…αž‘αžΈαž“αŸ„αŸ‡αž‘αŸ - αžŸαŸ’αžšαž”αž‚αŸ’αž“αžΆ αž™αžΎαž„αž”αž„αŸ’αž€αžΎαž“αž›αŸ’αž”αžΏαž“αž“αŸƒαž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™ αžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αž‘αŸαžšαž–αž½αž€αžœαžΆαž–αžΈαžšαž”αŸ€αž”αž–αŸαž›αž™αž”αŸ‹ αžŠαžΎαž˜αŸ’αž”αžΈαž‘αžΆαž‰αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžŸαŸ†αžŽαžΎαŸ”

αž“αŸ…αž–αŸαž›αž“αŸ„αŸ‡ αž€αžΆαžšαžŸαžΆαž„αžŸαž„αŸ‹αžšαž”αžŸαŸ‹αž™αžΎαž„αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹αž™αŸ‰αžΆαž„αž†αžΆαž”αŸ‹αžšαž αŸαžŸ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž™αžΎαž„αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž€αžΆαžšαžŸαŸ’αžαžΆαž”αž“αžΆ ARK αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αž Junit αž“αž·αž„αž€αžΆαžšαž‚αžŽαž“αžΆαž€αžΆαžšαž‚αŸ’αžšαž”αžŠαžŽαŸ’αžαž”αŸ‹αž€αžΌαžŠαž‡αžΆαž’αŸ’αž“αž€αž‘αž”αŸ‹αžŸαŸ’αž€αžΆαžαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸ†αžŽαžΎαž‘αžΆαž‰αŸ” αž™αžΎαž„αž”αžΆαž“αž”αžΎαž€αžœαžΆ αž‚αž·αžαž’αŸ†αž–αžΈαžœαžΆ αž αžΎαž™αž”αŸ„αŸ‡αž”αž„αŸ‹αž€αžΆαžšαž‚αŸ’αžšαž”αžŠαžŽαŸ’αžαž”αŸ‹αž›αŸαžαž€αžΌαžŠ αžŠαŸ„αž™αžŸαžΆαžšαž™αžΎαž„αž‚αž·αžαžαžΆαž™αžΎαž„αž˜αž·αž“αžαŸ’αžšαžΌαžœαž€αžΆαžšαžœαžΆαž‘αŸαŸ”

αžœαžΆαžαŸ’αžšαžΌαžœαž…αŸ†αžŽαžΆαž™αž–αŸαž›αž–αžΈαžšαžαŸ’αž„αŸƒαžŠαžΎαž˜αŸ’αž”αžΈαžšαŸ€αž”αž…αŸ† CI αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„ (αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž€αžΆαžšαž”αŸ‰αžΆαž“αŸ‹αžŸαŸ’αž˜αžΆαž“αž–αŸαž›αžœαŸαž›αžΆαž‚αžΊαž”αŸ’αžšαž αžΆαž€αŸ‹αž”αŸ’αžšαž αŸ‚αž› αžαŸ’αžšαžΌαžœαž€αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ’αž“αžΆαž)αŸ”

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž“αŸ„αŸ‡αž™αžΎαž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‚αž·αžαž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αž - αžαžΎαž™αžΎαž„αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž‘αŸ? αžαžΎβ€‹αž™αžΎαž„β€‹αž€αŸ†αž–αž»αž„β€‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšβ€‹αž”αž„αŸ’αž€αžΎαžβ€‹αžαžΆαž˜β€‹αžŸαŸ†αžŽαžΎβ€‹αž‘αžΆαž‰β€‹αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœβ€‹αž¬β€‹αž‘αŸ?

αž™αžΎαž„αž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŸαžΆαž„αžŸαž„αŸ‹αž›αžΎαž€αžΆαžšαž”αŸ’αžαŸαž‡αŸ’αž‰αžΆαž…αž·αžαŸ’αžαž…αž»αž„αž€αŸ’αžšαŸ„αž™αž“αŸƒαžŸαžΆαžαžΆαžŠαŸ‚αž›αžŸαŸ†αžŽαžΎαžšαž‘αžΆαž‰αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžΎαž€αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αž€αžΆαžšβ€‹αžŸαžΆαž€αž›αŸ’αž”αž„β€‹αž“αŸƒβ€‹αž€αžΆαžšβ€‹αž”αŸ’αžšαž–αŸ’αžšαžΉαžαŸ’αžβ€‹αž“αŸαŸ‡β€‹αž’αžΆαž…β€‹αž”αž„αŸ’αž αžΆαž‰β€‹αžαŸ‚β€‹αžαžΆβ€‹αž€αžΌαžŠβ€‹αžŠαŸ‚αž›β€‹αž’αŸ’αž“αž€β€‹αž’αž—αž·αžœαžŒαŸ’αžαž“αŸβ€‹αž”αžΆαž“β€‹αžŸαžšαžŸαŸαžšβ€‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšβ€‹αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αž‚αŸβ€‹αž˜αž·αž“β€‹αž”αž‰αŸ’αž‡αžΆαž€αŸ‹β€‹αžαžΆβ€‹αž‚αžΆαžαŸ‹β€‹αž˜αž·αž“β€‹αž”αžΆαž“β€‹αž”αŸ†αž”αŸ‚αž€β€‹αž’αŸ’αžœαžΈβ€‹αž“αŸ„αŸ‡β€‹αž‘αŸαŸ” αž‡αžΆαž€αžΆαžšαž–αž·αž αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž“αŸƒαžŸαžΆαžαžΆαž’αž—αž·αžœαžŒαŸ’αžαž“αŸ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž˜αž½αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αžœαžΆαŸ”

αž€αžΆαžšαžœαž·αžœαžαŸ’αžαž“αŸαž“αŸƒ CI αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ’αžšαž»αž˜αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‘αžΌαžšαžŸαŸαž–αŸ’αž‘

αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŠαžΌαž…αž“αŸαŸ‡αž™αžΎαž„αžŸαžšαžŸαŸαžšαžŸαŸ’αž‚αŸ’αžšαžΈαž” bash αžŸαžΆαž˜αž‰αŸ’αž‰ premerge.shαŸ–

#!/usr/bin/env bash

set -e

git fetch origin develop

git merge origin/develop

αž“αŸ…αž‘αžΈαž“αŸαŸ‡αžšαžΆαž›αŸ‹αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αž„αŸ’αž’αžŸαŸ‹αž–αžΈαž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‚αžΊαž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž‘αžΆαž‰αž‘αžΎαž„ αž αžΎαž™αž”αž‰αŸ’αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαžΆαžαžΆαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αŸ” αž™αžΎαž„αž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αžŸαŸ’αž‚αŸ’αžšαžΈαž” premerge.sh αž‡αžΆαž‡αŸ†αž αžΆαž“αžŠαŸ†αž”αžΌαž„αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž αžΎαž™αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž™αžΎαž„αž…αž„αŸ‹αž”αžΆαž“ αž“αŸ„αŸ‡αž‚αžΊ αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›.

αžœαžΆαž…αŸ†αžŽαžΆαž™αž–αŸαž›αž”αžΈαžαŸ’αž„αŸƒαžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αžΈαž™αž€αž˜αŸ’αž˜αž”αž‰αŸ’αž αžΆ αžŸαŸ’αžœαŸ‚αž„αžšαž€αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™ αž“αž·αž„αžŸαžšαžŸαŸαžšαžŸαŸ’αž‚αŸ’αžšαžΈαž”αž“αŸαŸ‡αŸ”

αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž”αžΆαž“αž’αž—αž·αžœαžŒαŸ’αž αž€αžΆαžšαž„αžΆαžšαž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αžšαžΎαž“αž‘αžΎαž„αŸ—αž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αžαŸ’αž›αž½αž“ αž€αŸ’αžšαž»αž˜αž€αžΆαžšαž„αžΆαžšαž”αžΆαž“αžšαžΈαž€αž…αž˜αŸ’αžšαžΎαž“ αž αžΎαž™αž–αŸαž›αžαŸ’αž›αŸ‡ premerge.sh αž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž’αŸ’αžœαžΎαž±αŸ’αž™αž™αžΎαž„αžαž€αž…αž·αžαŸ’αžαŸ” Develop αž˜αžΆαž“αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžŠαŸ‚αž›αž•αŸ’αž‘αž»αž™αž‚αŸ’αž“αžΆαžŠαŸ‚αž›αž”αŸ†αž”αŸ‚αž€αž€αžΆαžšαžŸαŸ’αžαžΆαž”αž“αžΆαŸ”

αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαžšαž”αŸ€αž”αžŠαŸ‚αž›αžœαžΆαž€αžΎαžαž‘αžΎαž„αŸ–

αž€αžΆαžšαžœαž·αžœαžαŸ’αžαž“αŸαž“αŸƒ CI αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ’αžšαž»αž˜αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‘αžΌαžšαžŸαŸαž–αŸ’αž‘

αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž–αžΈαžšαž“αžΆαž€αŸ‹αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž’αŸ’αžœαžΎαž€αžΆαžšαž›αžΎαž˜αž»αžαž„αžΆαžš A αž“αž·αž„ B αž€αŸ’αž“αž»αž„αž–αŸαž›αžŠαŸ†αžŽαžΆαž›αž‚αŸ’αž“αžΆαŸ” αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž˜αž»αžαž„αžΆαžš A αžšαž€αžƒαžΎαž‰αž˜αž»αžαž„αžΆαžšαžŠαŸ‚αž›αž˜αž·αž“αž”αŸ’αžšαžΎαž€αŸ’αž“αž»αž„αž‚αž˜αŸ’αžšαŸ„αž„ answer() αž αžΎαž™αžŠαžΌαž…αž‡αžΆαž€αžΆαž™αžšαžΉαž‘αŸ’αž’αž·αž€αŸ’αž˜αŸαž„αž›αŸ’αž’ αž™αž€αžœαžΆαž…αŸαž‰αŸ” αž€αŸ’αž“αž»αž„αž–αŸαž›αž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆαž“αŸαŸ‡ αž’αŸ’αž“αž€αž”αž„αŸ’αž€αžΎαžαž˜αž»αžαž„αžΆαžš B αž”αž“αŸ’αžαŸ‚αž˜αž€αžΆαžšαž αŸ…αžαŸ’αž˜αžΈαž‘αŸ…αž€αžΆαž“αŸ‹αž˜αž»αžαž„αžΆαžšαž“αŸαŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαžΆαžαžΆαžšαž”αžŸαŸ‹αž‚αžΆαžαŸ‹αŸ”

αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž”αž‰αŸ’αž…αž”αŸ‹αž€αžΆαžšαž„αžΆαžšαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸ αž αžΎαž™αž”αžΎαž€αžŸαŸ†αžŽαžΎαž‘αžΆαž‰αž€αŸ’αž“αž»αž„αž–αŸαž›αžαŸ‚αž˜αž½αž™αŸ” αž€αžΆαžšαžŸαŸ’αžαžΆαž”αž“αžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš premerge.sh αž–αž·αž“αž·αžαŸ’αž™αžŸαŸ†αžŽαžΎαž‘αžΆαž‰αž‘αžΆαŸ†αž„αž–αžΈαžšαž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αž„αŸ’αž’αžŸαŸ‹ - αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž˜αžΆαž“αž–αžŽαŸŒαž”αŸƒαžαž„αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž“αŸ„αŸ‡ αžŸαŸ†αžŽαžΎαž‘αžΆαž‰αž“αŸƒαž˜αž»αžαž„αžΆαžš A αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αžΌαž›αž…αžΌαž›αž‚αŸ’αž“αžΆ αžŸαŸ†αžŽαžΎαž‘αžΆαž‰αž“αŸƒαž˜αž»αžαž„αžΆαžš B αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αžΌαž›... αž”αŸŠαžΌαž˜! αž’αž—αž·αžœαžŒαŸ’αžαž€αžΆαžšαž”αŸ†αž”αŸ‚αž€αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž€αžΌαžŠαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž˜αžΆαž“αž€αžΆαžšαž αŸ…αž‘αŸ…αž€αžΆαž“αŸ‹αž˜αž»αžαž„αžΆαžšαžŠαŸ‚αž›αž˜αž·αž“αž˜αžΆαž“αŸ”

αž€αžΆαžšαžœαž·αžœαžαŸ’αžαž“αŸαž“αŸƒ CI αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ’αžšαž»αž˜αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‘αžΌαžšαžŸαŸαž–αŸ’αž‘

αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αžœαžΆαž“αžΉαž„αž˜αž·αž“αž’αž—αž·αžœαžŒαŸ’αž, αžœαžΆαž‚αžΊαž‡αžΆ αž‚αŸ’αžšαŸ„αŸ‡αž˜αž αž“αŸ’αžαžšαžΆαž™αž€αŸ’αž“αž»αž„αžŸαŸ’αžšαž»αž€. αž€αŸ’αžšαž»αž˜αž‘αžΆαŸ†αž„αž˜αžΌαž›αž˜αž·αž“αž’αžΆαž…αž”αŸ’αžšαž˜αžΌαž›αž’αŸ’αžœαžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž αžΎαž™αž”αž‰αŸ’αž‡αžΌαž“αžœαžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαŸ”

αžœαžΆαž”αžΆαž“αž€αžΎαžαž‘αžΎαž„αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹αž”αŸ†αž•αž»αžαž›αžΎαž€αž·αž…αŸ’αž…αž€αžΆαžšαž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αŸ– αž€αžΆαžšαžœαž·αž—αžΆαž‚ αž”αžŽαŸ’αžαžΆαž‰ αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” αž“αŸ„αŸ‡β€‹αž‚αžΊβ€‹αž‡αžΆβ€‹αžαŸ’αž‰αž»αŸ†β€‹αžŠαŸ‚αž›β€‹αž”αžΆαž“β€‹αžŸαžšαžŸαŸαžšβ€‹αž˜αž»αžαž„αžΆαžš αž“αž·αž„β€‹αžαŸ’αž“αžΆαž€αŸ‹β€‹αžŠαŸ‚αž›β€‹αž’αŸ’αž“αž€β€‹αž’αž—αž·αžœαžŒαŸ’αžαž“αŸβ€‹αž•αŸ’αžŸαŸαž„β€‹αž‘αŸ€αžβ€‹αž”αŸ’αžšαžΎαŸ” αžŠαŸ„αž™β€‹αžŸαžΆαžšβ€‹αžαŸ‚β€‹αžšαžΏαž„β€‹αž“αŸαŸ‡ αžαŸ’αž‰αž»αŸ†β€‹αžƒαžΎαž‰β€‹αžαŸ’αž›αž½αž“β€‹αž―αž„β€‹αžŸαŸ’αžαž·αžβ€‹αž€αŸ’αž“αž»αž„β€‹αžŸαŸ’αžαžΆαž“αž—αžΆαž–β€‹αžŸαŸ’αžšαžŠαŸ€αž„β€‹αž‚αŸ’αž“αžΆβ€‹αž‡αžΆβ€‹αž‰αžΉαž€β€‹αž‰αžΆαž”αŸ‹αŸ” αžαŸ’αž‰αž»αŸ†αžαŸ‚αž˜αž‘αžΆαŸ†αž„αž˜αžΆαž“αžšαžΌαž”αž—αžΆαž–αž“αŸαŸ‡αž–αŸ’αž™αž½αžšαž˜αž½αž™αžšαž™αŸˆαŸ”

αž€αžΆαžšαžœαž·αžœαžαŸ’αžαž“αŸαž“αŸƒ CI αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ’αžšαž»αž˜αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‘αžΌαžšαžŸαŸαž–αŸ’αž‘

αžŠαŸ„αž™αžŸαžΆαžšαžœαžΆαž˜αž·αž“αžŸαž˜αž“αžΉαž„αž™αžΎαž„ αž™αžΎαž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŸαŸ’αžœαŸ‚αž„αžšαž€αž‡αž˜αŸ’αžšαžΎαžŸαž’αŸ†αž–αžΈαžšαž”αŸ€αž”αž€αžΆαžšαž–αžΆαžšαž”αž‰αŸ’αž αžΆαž“αŸαŸ‡αŸ”

αž’αŸ’αžœαžΎβ€‹αž˜αŸ‰αŸαž…β€‹αž€αž»αŸ†β€‹αž²αŸ’αž™β€‹αžαžΌαž…β€‹αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ

αž‡αž˜αŸ’αžšαžΎαžŸαžŠαŸ†αž”αžΌαž„: αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžœαž·αž‰αž“αžΌαžœαžŸαŸ†αžŽαžΎαžšαž‘αžΆαž‰αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž–αŸαž›αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαžšαž”αžŸαŸ‹αž™αžΎαž„ αžŸαŸ†αžŽαžΎαž‘αžΆαž‰αžŠαŸ‚αž›αž˜αžΆαž“αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸ A αž‚αžΊαž‡αžΆαžŠαŸ†αž”αžΌαž„αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸ αžŸαŸ†αžŽαžΎαž‘αžΆαž‰αž“αŸƒαž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸ B αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαŸ’αžαžΆαž”αž“αžΆαž‘αžΎαž„αžœαž·αž‰ αž αžΎαž™αžαžΆαž˜αž“αŸ„αŸ‡ αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž“αžΉαž„αž”αžšαžΆαž‡αŸαž™αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž€αŸ†αž αž»αžŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαž…αž„αž€αŸ’αžšαž„αŸ”

αžŠαžΎαž˜αŸ’αž”αžΈαž™αž›αŸ‹αž–αžΈαžšαž™αŸˆαž–αŸαž›αžŠαŸ‚αž›αžœαžΆαž“αžΉαž„αž…αŸ†αžŽαžΆαž™αž–αŸαž›αž™αžΌαžš αžŸαžΌαž˜αž–αž·αž…αžΆαžšαžŽαžΆαž§αž‘αžΆαž αžšαžŽαŸαž‡αžΆαž˜αž½αž™ PRs αž–αžΈαžšαŸ” αž™αžΎαž„αž”αžΎαž€ PRs αž–αžΈαžš: αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž–αžΈαžš, αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž–αžΈαžšαŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈ PR αž‘αžΈαž˜αž½αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸ αž€αž“αŸ’αž›αŸ‚αž„αž‘αžΈαž–αžΈαžšαžαŸ’αžšαžΌαžœαžŸαžΆαž„αžŸαž„αŸ‹αž‘αžΎαž„αžœαž·αž‰αŸ” αžŸαžšαž»αž”αž˜αž€ PRs αž–αžΈαžšαžαž˜αŸ’αžšαžΌαžœαž±αŸ’αž™αž˜αžΆαž“αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž…αŸ†αž“αž½αž“αž”αžΈ: 2 + 1 = 3 αŸ”

αž‡αžΆαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαžœαžΆαž˜αž·αž“αž’αžΈαž‘αŸαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΎαž„αž”αžΆαž“αž˜αžΎαž›αžŸαŸ’αžαž·αžαž·αž αžΎαž™αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž’αž˜αŸ’αž˜αžαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ’αžšαž»αž˜αžšαž”αžŸαŸ‹αž™αžΎαž„αž‚αžΊ 10 PRs αž”αžΎαž€αž…αŸ†αž αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž…αŸ†αž“αž½αž“αž“αŸƒαž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž‚αžΊαž‡αžΆαž•αž›αž”αžΌαž€αž“αŸƒαžœαžŒαŸ’αžαž“αž—αžΆαž–: 10 + 9 + ... + 1 = 55 αŸ” αž“αŸ„αŸ‡αž‚αžΊαžŠαžΎαž˜αŸ’αž”αžΈαž‘αž‘αž½αž›αž™αž€ 10 αŸ” PRs αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžŸαžΆαž„αžŸαž„αŸ‹αž‘αžΎαž„αžœαž·αž‰ 55 αžŠαž„αŸ” αž αžΎαž™αž“αŸαŸ‡αž‚αžΊαžŸαŸ’αžαž·αžαž€αŸ’αž“αž»αž„αžŸαŸ’αžαžΆαž“αž—αžΆαž–αžŠαŸαž›αŸ’αž’αž˜αž½αž™ αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž†αŸ’αž›αž„αž€αžΆαžαŸ‹αž‡αžΆαž›αžΎαž€αžŠαŸ†αž”αžΌαž„ αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž‚αŸ’αž˜αžΆαž“αž“αžšαžŽαžΆαž˜αŸ’αž“αžΆαž€αŸ‹αž”αžΎαž€αžŸαŸ†αžŽαžΎαžšαž‘αžΆαž‰αž”αž“αŸ’αžαŸ‚αž˜ αžαžŽαŸˆαž–αŸαž›αžŠαŸ‚αž›αžšαžΆαž”αŸ‹αžŸαž·αž”αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ”

αžŸαŸ’αžšαž˜αŸƒαžαžΆαžαŸ’αž›αž½αž“αž’αŸ’αž“αž€αž‡αžΆαž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαžαŸ‚αž…αž»αž…αž›αžΎαž”αŸŠαžΌαžαž»αž„ "αž”αž‰αŸ’αž…αžΌαž›αž…αžΌαž›αž‚αŸ’αž“αžΆ" αž‡αžΆαž˜αž»αž“αžŸαž·αž“ αž–αžΈαž–αŸ’αžšαŸ„αŸ‡αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž‡αž·αžαžαžΆαž„αž’αŸ’αžœαžΎαžŠαžΌαž…αž“αŸαŸ‡ αž’αŸ’αž“αž€αž“αžΉαž„αžαŸ’αžšαžΌαžœαžšαž„αŸ‹αž…αžΆαŸ†αžšαž αžΌαžαžŠαž›αŸ‹αž€αžΆαžšαžŸαŸ’αžαžΆαž”αž“αžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž†αŸ’αž›αž„αž€αžΆαžαŸ‹αž˜αŸ’αžαž„αž‘αŸ€αž... αž‘αŸ αžœαžΆαž“αžΉαž„αž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αŸ αžœαžΆαž“αžΉαž„αž’αŸ’αžœαžΎαž±αŸ’αž™αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž™αžΊαžαž™αŸ‰αžΆαžœαž™αŸ‰αžΆαž„αž’αŸ’αž„αž“αŸ‹αž’αŸ’αž„αžšαŸ”

αžœαž·αž’αžΈαž‘αžΈαž–αžΈαžšαžŠαŸ‚αž›αž’αžΆαž…αž’αŸ’αžœαžΎαž”αžΆαž“αŸ– αž”αŸ’αžšαž˜αžΌαž›αžŸαŸ†αžŽαžΎαž‘αžΆαž‰αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž–αž·αž“αž·αžαŸ’αž™αž€αžΌαžŠαŸ” αž“αŸ„αŸ‡αž‚αžΊαž’αŸ’αž“αž€αž”αžΎαž€αžŸαŸ†αžŽαžΎαž‘αžΆαž‰αž˜αž½αž™ αž”αŸ’αžšαž˜αžΌαž›αž…αŸ†αž“αž½αž“αž€αžΆαžšαž™αž›αŸ‹αž–αŸ’αžšαž˜αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžšαž–αžΈαžŸαž αžŸαŸαžœαž·αž€ αž€αŸ‚αžαž˜αŸ’αžšαžΌαžœαž’αŸ’αžœαžΈαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžš αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž€αžΆαžšαžŸαŸ’αžαžΆαž”αž“αžΆαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž–αž½αž€αž‚αŸαž‘αž‘αž½αž›αž”αžΆαž“αž‡αŸ„αž‚αž‡αŸαž™ αžŸαŸ†αžŽαžΎαž‘αžΆαž‰αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡ αž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžŠαžΎαž˜αž‘αžΎαž„αžœαž·αž‰αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αžαž·αž€αŸ‚αž›αž˜αŸ’αž’αžαŸ’αžšαžΌαžœαž”αžΆαž“αžαž™αž…αž»αŸ‡αž™αŸ‰αžΆαž„αžαŸ’αž›αžΆαŸ†αž„αŸ” αž€αŸ’αž“αž»αž„β€‹αž“αžΆαž˜β€‹αž‡αžΆβ€‹αž’αŸ’αž“αž€β€‹αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ αž–αŸαž›β€‹αžαŸ’αž‰αž»αŸ†β€‹αž”αžΎαž€β€‹αžŸαŸ†αžŽαžΎβ€‹αž‘αžΆαž‰ αžαŸ’αž‰αž»αŸ†β€‹αž…αž„αŸ‹β€‹αžŠαžΉαž„β€‹αž—αŸ’αž›αžΆαž˜β€‹αžαžΆβ€‹αžαžΎβ€‹αžœαžΆβ€‹αž“αžΉαž„β€‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšβ€‹αž¬β€‹αž’αžαŸ‹αŸ” αž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž”αžšαžΆαž‡αŸαž™ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž‡αž½αžŸαž‡αž»αž›αžœαžΆαž±αŸ’αž™αž›αžΏαž“αŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈβ€‹αž€αžΆαžšβ€‹αžŸαžΆαž„αžŸαž„αŸ‹β€‹αž™αžΊαžαž™αŸ‰αžΆαžœ αž˜αžαž·β€‹αž€αŸ‚αž›αž˜αŸ’αž’β€‹αžαž™αž…αž»αŸ‡ αž αžΎαž™β€‹αžŠαžΌαž…αŸ’αž“αŸαŸ‡β€‹αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸβ€‹αž‘αžΆαŸ†αž„αž˜αžΌαž›αŸ” αž“αŸαŸ‡αž€αŸαž˜αž·αž“αžŸαž˜αž“αžΉαž„αž™αžΎαž„αžŠαŸ‚αžšαŸ”

αž‡αžΆαž›αž‘αŸ’αž’αž•αž›αž˜αžΆαž“αžαŸ‚αž‡αž˜αŸ’αžšαžΎαžŸαž‘αžΈαž”αžΈαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αžŠαŸ‚αž›αž“αŸ…αžŸαž›αŸ‹ - αž€αž„αŸ‹. αž€αžΌαžŠαžšαž”αžŸαŸ‹αž™αžΎαž„αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž”αŸ’αžšαž—αž–αžšαž”αžŸαŸ‹αž™αžΎαž„αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž“αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αž˜αž½αž™αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ Bitbucket αŸ” αžŠαžΌαž…αŸ’αž“αŸ„αŸ‡αž αžΎαž™ αž™αžΎαž„αžαŸ’αžšαžΌαžœαžαŸ‚αž”αž„αŸ’αž€αžΎαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Bitbucket αŸ”

αž€αžΆαžšαžœαž·αžœαžαŸ’αžαž“αŸαž“αŸƒ CI αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ’αžšαž»αž˜αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‘αžΌαžšαžŸαŸαž–αŸ’αž‘

αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž“αŸαŸ‡αž”αžŠαž·αžŸαŸαž’αž™αž“αŸ’αžαž€αžΆαžšαž“αŸƒαž€αžΆαžšαž…αŸ’αžšαž”αžΆαž…αŸ‹αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž“αŸƒαžŸαŸ†αžŽαžΎαž‘αžΆαž‰αŸ” αž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‚αžΊαž‡αžΆαžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαŸ– PR αž”αžΎαž€ αž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ αž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž€αžΌαžŠαž€αžΎαžαž‘αžΎαž„αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž€αžΌαžŠαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹ αž“αž·αž„αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž…αž»αž…αž›αžΎ "αž”αž‰αŸ’αž…αžΌαž›αž…αžΌαž›αž‚αŸ’αž“αžΆ" αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž“αžΉαž„αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαžΆαžαžΎαž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αžšαžŠαŸ’αž‹αžŽαžΆαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž€αžΆαžšαžŸαŸ’αžαžΆαž”αž“αžΆαž“αŸ„αŸ‡ αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž“αžΉαž„αž˜αž·αž“αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αžŸαŸ†αžŽαžΎαžšαž‘αžΆαž‰αž”αŸ‚αž”αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαžΆαžαžΆαž…αž˜αŸ’αž”αž„αž“αŸ„αŸ‡αž‘αŸαŸ” αžœαžΆαž“αžΉαž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‘αžΎαž„αžœαž·αž‰αž“αžΌαžœαž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž“αŸƒαž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžαŸ’αž˜αžΈαŸ—αŸ”

αž€αžΆαžšαžœαž·αžœαžαŸ’αžαž“αŸαž“αŸƒ CI αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ’αžšαž»αž˜αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‘αžΌαžšαžŸαŸαž–αŸ’αž‘

αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαžšαž”αžŸαŸ‹αž™αžΎαž„αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžŠαŸ‚αž›αž•αŸ’αž‘αž»αž™αž‚αŸ’αž“αžΆ αž€αžΆαžšαžŸαŸ’αžαžΆαž”αž“αžΆαž”αŸ‚αž”αž“αŸαŸ‡αž“αžΉαž„αž”αžšαžΆαž‡αŸαž™αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž€αŸ†αž αž»αžŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαž…αž„αž€αŸ’αžšαž„αŸ” αžŠαžΌαž…αŸ’αž“αŸ„αŸ‡αž αžΎαž™ αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž˜αž»αžαž„αžΆαžš B αž“αžΉαž„αžαŸ’αžšαžΌαžœαž€αŸ‚αž€αžΌαžŠ αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž‘αžΎαž„αžœαž·αž‰ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž“αžΉαž„αž’αž“αž»αžœαžαŸ’αžαžŸαŸ†αžŽαžΎαž‘αžΆαž‰αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αŸ”

αž˜αž»αž“αž–αŸαž›αž’αž“αž»αžœαžαŸ’αžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž“αŸαŸ‡ αž™αžΎαž„αž”αžΆαž“αžœαžΆαž™αžαž˜αŸ’αž›αŸƒαž‡αžΆαž˜αž’αŸ’αž™αž˜ 2,7 αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ’αž“αž»αž„αž˜αž½αž™αžŸαŸ†αžŽαžΎαž‘αžΆαž‰αŸ” αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž˜αžΆαž“αž€αžΆαžšαž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš 3,6 αŸ” αž“αŸαŸ‡αžŸαž˜αž“αžΉαž„αž™αžΎαž„αŸ”

αžœαžΆαž‚αž½αžšαž±αŸ’αž™αž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžαžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž“αŸαŸ‡αž˜αžΆαž“αž‚αž»αžŽαžœαž·αž”αžαŸ’αžαž·αž˜αž½αž™: αžœαžΆαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž€αžΆαžšαžŸαŸ’αžαžΆαž”αž“αžΆαž‘αžΎαž„αžœαž·αž‰αžαŸ‚αž˜αŸ’αžαž„αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” αž“αŸ„αŸ‡β€‹αž‚αžΊβ€‹αž“αŸ…β€‹αž˜αžΆαž“β€‹αž”αž„αŸ’αž’αž½αž…β€‹αžαžΌαž…β€‹αž˜αž½αž™β€‹αžŠαŸ‚αž›β€‹αž€αžΆαžšβ€‹αž•αŸ’αž›αžΆαžŸαŸ‹β€‹αž”αŸ’αžαžΌαžšβ€‹αžŠαŸ‚αž›β€‹αž˜αžΆαž“β€‹αž‡αž˜αŸ’αž›αŸ„αŸ‡β€‹αž’αžΆαž…β€‹αžˆαžΆαž“β€‹αžŠαž›αŸ‹β€‹αž€αžΆαžšβ€‹αž’αž—αž·αžœαžŒαŸ’αžαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž›αž‘αŸ’αž’αž—αžΆαž–αž“αŸƒαž€αžΆαžšαž“αŸαŸ‡αž‚αžΊαž˜αžΆαž“αž€αž˜αŸ’αžšαž·αžαž‘αžΆαž” αž αžΎαž™αž™αžΎαž„αž”αžΆαž“αž’αŸ’αžœαžΎαž€αžΆαžšαžŠαŸ„αŸ‡αžŠαžΌαžšαž“αŸαŸ‡αžšαžœαžΆαž„αž…αŸ†αž“αž½αž“αž“αŸƒαž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ αž“αž·αž„αž›αž‘αŸ’αž’αž—αžΆαž–αž“αŸƒαž€αžΆαžšαž”αžšαžΆαž‡αŸαž™αŸ” αž€αŸ’αž“αž»αž„β€‹αžšαž™αŸˆβ€‹αž–αŸαž›β€‹αž–αžΈαžšβ€‹αž†αŸ’αž“αžΆαŸ†β€‹αžœαžΆβ€‹αž”αžΆαž“β€‹αž”αžΆαž‰αŸ‹β€‹αžαŸ‚β€‹αž˜αŸ’αžαž„ αžŠαžΌαž…αŸ’αž“αŸαŸ‡β€‹αžœαžΆβ€‹αž”αŸ’αžšαž αŸ‚αž›β€‹αž‡αžΆβ€‹αž˜αž·αž“β€‹αž₯αžβ€‹αž”αŸ’αžšαž™αŸ„αž‡αž“αŸβ€‹αž‘αŸαŸ”

αž™αžΎαž„αž…αŸ†αžŽαžΆαž™αž–αŸαž›αž–αžΈαžšαžŸαž”αŸ’αžαžΆαž αŸαžŠαžΎαž˜αŸ’αž”αžΈαžŸαžšαžŸαŸαžšαž€αŸ†αžŽαŸ‚αžŠαŸ†αž”αžΌαž„αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™ Bitbucket αŸ”

αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžαŸ’αž˜αžΈαŸ”

αž‘αž“αŸ’αž‘αžΉαž˜αž“αžΉαž„αž“αŸαŸ‡ αž€αŸ’αžšαž»αž˜αžšαž”αžŸαŸ‹αž™αžΎαž„αž”αžΆαž“αž”αž“αŸ’αžαžšαžΈαž€αž…αž˜αŸ’αžšαžΎαž“αŸ” αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžαŸ’αž˜αžΈαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αŸ”

αž™αžΎαž„β€‹αž‚αž·αžβ€‹αžαžΆβ€‹αŸ– β€‹αž αŸαžαž»β€‹αž’αŸ’αžœαžΈβ€‹αž”αžΆαž“β€‹αž‡αžΆβ€‹αž’αŸ’αžœαžΎβ€‹αžαž»αžŸβ€‹αž”αŸ’αžšαžŸαž·αž“β€‹αž”αžΎβ€‹αž–αž½αž€β€‹αž‚αŸβ€‹αž’αžΆαž…β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αžšαžΆαžšαžΆαŸ†αž„? αž“αŸ„αŸ‡αž αžΎαž™αž‡αžΆαž˜αžΌαž›αž αŸαžαž»αžŠαŸ‚αž›αž–αž½αž€αž‚αŸαž’αž“αž»αžœαžαŸ’αž αž€αžΆαžšαžœαž·αž—αžΆαž‚αž€αžΌαžŠαž‹αž·αžαž·αžœαž“αŸ’αž. αž™αžΎαž„αž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‡αžΆαž˜αž½αž™ lint αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž“αŸ…αž€αŸ’αž“αž»αž„ Android SDK αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž–αŸαž›αž“αŸ„αŸ‡αž‚αžΆαžαŸ‹αž˜αž·αž“αžŠαžΉαž„αž–αžΈαžšαž”αŸ€αž”αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž€αžΌαžŠ Kotlin αž‘αžΆαž›αŸ‹αžαŸ‚αžŸαŸ„αŸ‡ αž αžΎαž™αž™αžΎαž„αž˜αžΆαž“ 75% αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž”αžΆαž“αžŸαžšαžŸαŸαžšαž“αŸ…αž€αŸ’αž“αž»αž„ Kotlin αžšαž½αž…αž αžΎαž™αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αžœαžαŸ’αžαž»αžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž€αž‡αžΆαž˜αž½αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αžˆαžΎ Android Studio αž–αž·αž“αž·αžαŸ’αž™αŸ”

αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž™αžΎαž„αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž€αžΆαžšαž”αŸ†αž”αŸ’αž›αŸ‚αž„αž‡αžΆαž…αŸ’αžšαžΎαž“αŸ– αž™αž€ Android Studio αžŠαžΆαž€αŸ‹αž€αž‰αŸ’αž…αž”αŸ‹αžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„ Docker αž αžΎαž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžœαžΆαž“αŸ…αž›αžΎ CI αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž˜αŸ‰αžΌαž“αžΈαž‘αŸαžšαž“αž·αž˜αŸ’αž˜αž·αž αžŠαžΎαž˜αŸ’αž”αžΈαž±αŸ’αž™αžœαžΆαž‚αž·αžαžαžΆαžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αžΎαž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαž™αž½αžšαžŠαŸƒαž–αž·αžαž”αŸ’αžšαžΆαž€αžŠαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ”

αžœαžΆαž€αŸαž‡αžΆαž’αŸ†αž‘αž»αž„αž–αŸαž›αž“αŸαŸ‡αžŠαŸ‚αž›αž™αžΎαž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŸαžšαžŸαŸαžšαž…αŸ’αžšαžΎαž“αŸ” αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž§αž”αž€αžšαžŽαŸ αž“αž·αž„αž”αžΆαž“αž’αž“αž»αžœαžαŸ’αž αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž’αŸαž€αŸ’αžšαž„αŸ‹. αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž–αŸαž›αžŠαŸ‚αž›αžšαžΌαž”αžαžαž’αŸαž€αŸ’αžšαž„αŸ‹αž™αŸ„αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αžαžΌαž…αž˜αž½αž™αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€ αž αžΎαž™αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαžšαž½αž˜αž˜αžΆαž“αž€αžΆαžšαžαžαž’αŸαž€αŸ’αžšαž„αŸ‹αž–αžΈαž‘αž·αžŠαŸ’αž‹αž—αžΆαž– αž αžΎαž™αž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αžœαžΆαž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αžŠαŸ„αž™αž—αžΈαž€αžŸαŸ‚αž›αžŠαŸ„αž™αž—αžΈαž€αžŸαŸ‚αž›αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αžΆαž“αž—αžΆαž–αž˜αž·αž“αžŸαŸ’αžšαž”αž‚αŸ’αž“αžΆ αžœαžΆαž˜αžΆαž“αž“αŸαž™αžαžΆαž”αŸ’αž›αž„αŸ‹αžαž»αžŸαž€αž“αŸ’αž›αŸ‚αž„αžŽαžΆαž˜αž½αž™ αž¬αž˜αžΆαž“αž’αŸ’αžœαžΈαž˜αž½αž™αžαž»αžŸαž“αŸ…αž€αŸ’αž“αž»αž„αžšαž…αž“αžΆαž”αŸαž‘αŸ’αž˜αŸ”

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž§αž”αž€αžšαžŽαŸ αž“αž·αž„αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž’αŸαž€αŸ’αžšαž„αŸ‹αžαŸ’αžšαžΌαžœαžαŸ‚αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž›αžΎαž§αž”αž€αžšαžŽαŸαŸ– αž“αŸ…αž›αžΎαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαŸ’αžšαžΆαž”αŸ‹αžαžΆαž˜ αž¬αž“αŸ…αž›αžΎαž§αž”αž€αžšαžŽαŸαž–αž·αžαŸ” αžŠαŸ„αž™αž–αž·αž…αžΆαžšαžŽαžΆαžαžΆαž˜αžΆαž“αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž‡αžΆαž…αŸ’αžšαžΎαž“ αž αžΎαž™αž–αž½αž€αž‚αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹ αž€αžŸαž·αžŠαŸ’αž‹αžΆαž“αž‘αžΆαŸ†αž„αž˜αžΌαž›αž‚αžΊαž…αžΆαŸ†αž”αžΆαž…αŸ‹αŸ” αž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž€αžŸαž·αžŠαŸ’αž‹αžΆαž“αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž‚αžΊαž–αžΉαž„αž•αŸ’αž’αŸ‚αž€αž›αžΎαž€αž˜αŸ’αž›αžΆαŸ†αž„αž–αž›αž€αž˜αŸ’αž˜αžαŸ’αž›αžΆαŸ†αž„αž–αŸαž€ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž™αžΎαž„αž”αžΆαž“αžšαž€αžƒαžΎαž‰αž‡αž˜αŸ’αžšαžΎαžŸαžŠαŸ‚αž›αžαŸ’αžšαŸ€αž˜αžšαž½αž…αž‡αžΆαžŸαŸ’αžšαŸαž… - Firebase Test Lab αŸ”

αž˜αž“αŸ’αž‘αžΈαžšαž–αž·αžŸαŸ„αž’αž“αŸ Firebase

αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ Firebase αž‚αžΊαž‡αžΆαž•αž›αž·αžαž•αž›αžšαž”αžŸαŸ‹ Google αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸαž™αžαžΆαžœαžΆαž‚αž½αžšαžαŸ‚αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“ αž“αž·αž„αž‘αŸ†αž“αž„αž‡αžΆαž˜αž·αž“αžŸαŸ’αž›αžΆαž”αŸ‹αŸ” αžαž˜αŸ’αž›αŸƒαž‚αžΊαžŸαž˜αž αŸαžαž»αž•αž›αŸ– 5 αžŠαž»αž›αŸ’αž›αžΆαžšαž€αŸ’αž“αž»αž„αž˜αž½αž™αž˜αŸ‰αŸ„αž„αž“αŸƒαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžšαž”αžŸαŸ‹αž§αž”αž€αžšαžŽαŸαž–αž·αž 1 αžŠαž»αž›αŸ’αž›αžΆαžšαž€αŸ’αž“αž»αž„αž˜αž½αž™αž˜αŸ‰αŸ„αž„αž“αŸƒαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžšαž”αžŸαŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαŸ’αžšαžΆαž”αŸ‹αžαžΆαž˜αŸ”

αžœαžΆαž…αŸ†αžŽαžΆαž™αž–αŸαž›αž”αŸ’αžšαž αŸ‚αž›αž”αžΈαžŸαž”αŸ’αžαžΆαž αŸαžŠαžΎαž˜αŸ’αž”αžΈαž’αž“αž»αžœαžαŸ’αž Firebase Test Lab αž‘αŸ…αž€αŸ’αž“αž»αž„ CI αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ”

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αŸ’αžšαž»αž˜αž“αŸαŸ‡αž”αžΆαž“αž”αž“αŸ’αžαžšαžΈαž€αž…αž˜αŸ’αžšαžΎαž“ αž αžΎαž™αž‡αžΆαž’αž€αž»αžŸαž› Firebase αž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž’αŸ’αžœαžΎαž±αŸ’αž™αž™αžΎαž„αž’αŸ’αž›αžΆαž€αŸ‹αž…αž»αŸ‡αŸ” αž“αŸ…αž–αŸαž›αž“αŸ„αŸ‡αž‚αžΆαžαŸ‹αž˜αž·αž“αž˜αžΆαž“ SLA αž‘αŸαŸ” αž–αŸαž›αžαŸ’αž›αŸ‡ Firebase αž”αžΆαž“αž’αŸ’αžœαžΎαž±αŸ’αž™αž™αžΎαž„αžšαž„αŸ‹αž…αžΆαŸ†αžšαž αžΌαžαžŠαž›αŸ‹αž…αŸ†αž“αž½αž“αž§αž”αž€αžšαžŽαŸαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžšαž‚αžΊαž₯αžαž‚αž·αžαžαŸ’αž›αŸƒαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αž αž αžΎαž™αž˜αž·αž“αž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αž½αž€αžœαžΆαž—αŸ’αž›αžΆαž˜αŸ— αžŠαžΌαž…αžŠαŸ‚αž›αž™αžΎαž„αž…αž„αŸ‹αž”αžΆαž“αž“αŸ„αŸ‡αž‘αŸαŸ” αž€αžΆαžšαžšαž„αŸ‹αž…αžΆαŸ†αž€αŸ’αž“αž»αž„αž‡αž½αžšαž…αŸ†αžŽαžΆαž™αž–αŸαž›αžŠαž›αŸ‹αž‘αŸ…αž€αž“αŸ’αž›αŸ‡αž˜αŸ‰αŸ„αž„ αžŠαŸ‚αž›αž‡αžΆαžšαž™αŸˆαž–αŸαž›αžŠαŸαž™αžΌαžšαŸ” αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž§αž”αž€αžšαžŽαŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αžΎαžšαžΆαž›αŸ‹ PR αž€αžΆαžšαž–αž“αŸ’αž™αžΆαžšαž–αŸαž›αž–αž·αžαž‡αžΆαž’αŸ’αžœαžΎαž±αŸ’αž™αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž™αžΊαžαž™αŸ‰αžΆαžœ αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžœαž·αž€αŸαž™αž”αŸαžαŸ’αžšαž”αŸ’αžšαž…αžΆαŸ†αžαŸ‚αž”αžΆαž“αž˜αž€αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž•αž›αž”αžΌαž€αž‡αž»αŸ†αŸ” αž‡αžΆαž‘αžΌαž‘αŸ… αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž”αŸ„αŸ‡αž”αž„αŸ‹αž…αŸ„αž› Firebase αž“αž·αž„αž’αŸ’αžœαžΎαž€αžΆαžšαž€αŸ’αž“αž»αž„αž•αŸ’αž‘αŸ‡ αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž€αŸ’αžšαž»αž˜αž”αžΆαž“αžšαžΈαž€αž…αž˜αŸ’αžšαžΎαž“αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αŸ”

Docker + Python + bash

αž™αžΎαž„αž”αžΆαž“αž™αž€ Docker αž”αž‰αŸ’αž…αžΌαž›αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαŸ’αžšαžΆαž”αŸ‹αžαžΆαž˜αž‘αŸ…αž€αŸ’αž“αž»αž„αžœαžΆ αžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŸαžΆαž˜αž‰αŸ’αž‰αž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„ Python αžŠαŸ‚αž›αž“αŸ…αž–αŸαž›αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž“αžΆαŸ†αž˜αž€αž“αžΌαžœαž…αŸ†αž“αž½αž“αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαŸ’αžšαžΆαž”αŸ‹αžαžΆαž˜αžŠαŸ‚αž›αž‘αžΆαž˜αž‘αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ†αžŽαŸ‚αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžš αž αžΎαž™αž”αž‰αŸ’αžˆαž”αŸ‹αžœαžΆαž“αŸ…αž–αŸαž›αž…αžΆαŸ†αž”αžΆαž…αŸ‹αŸ” αž αžΎαž™αž‡αžΆαž€αžΆαžšαž–αž·αžαžŽαžΆαžŸαŸ‹ αžŸαŸ’αž‚αŸ’αžšαžΈαž” bash αž–αžΈαžšαž”αžΈ - αžαžΎαž™αžΎαž„αž“αžΉαž„αž“αŸ…αž―αžŽαžΆαžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž–αž½αž€αžœαžΆ?

αžœαžΆαž…αŸ†αžŽαžΆαž™αž–αŸαž›αž”αŸ’αžšαžΆαŸ†αžŸαž”αŸ’αžαžΆαž αŸαžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαž”αžšαž·αž™αžΆαž€αžΆαžŸαžŸαžΆαž€αž›αŸ’αž”αž„αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ”

αž‡αžΆαž›αž‘αŸ’αž’αž•αž› αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαžΆαž›αŸ‹αž€αžΆαžšαžŸαŸ’αž“αžΎαžŸαž»αŸ†αž‘αžΆαž‰ αž˜αžΆαž“αž”αž‰αŸ’αž‡αžΈαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž™αŸ‰αžΆαž„αž‘αžΌαž›αŸ†αž‘αžΌαž›αžΆαž™αŸ–

  • αž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆ ARK;
  • αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αž Junit;
  • αž›αžΈαž„;
  • αž–αž·αž“αž·αžαŸ’αž™ Android Studio;
  • αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž§αž”αž€αžšαžŽαŸ;
  • αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαžšαžΌαž”αžαžαž’αŸαž€αŸ’αžšαž„αŸ‹αŸ”

αž“αŸαŸ‡αž”αžΆαž“αžšαžΆαžšαžΆαŸ†αž„αž€αžΆαžšαž”αŸ‚αž€αž”αžΆαž€αŸ‹αžŠαŸ‚αž›αž’αžΆαž…αž€αžΎαžαž˜αžΆαž“αž‡αžΆαž…αŸ’αžšαžΎαž“αŸ” αžαžΆαž˜αž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž”αžΆαž“αžαŸ’αž’αžΌαž‰αžαŸ’αž’αŸ‚αžšαžαžΆαž€αžΆαžšαžšαž„αŸ‹αž…αžΆαŸ†αž›αž‘αŸ’αž’αž•αž›αž‚αžΊαž™αžΌαžšαž–αŸαž€αŸ”

αžαžΎβ€‹αž™αžΌαžšβ€‹αž”αŸ‰αž»αžŽαŸ’αžŽαžΆβ€‹αž‘αŸ…? αž™αžΎαž„αž”αžΆαž“αž•αŸ’αž‘αž»αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αž–αžΈ Bitbucket αž“αž·αž„ TeamCity αž‘αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžœαž·αž—αžΆαž‚ αž αžΎαž™αž”αžΆαž“αžŠαžΉαž„αžαžΆ αž–αŸαž›αžœαŸαž›αžΆαžšαž„αŸ‹αž…αžΆαŸ†αž‡αžΆαž˜αž’αŸ’αž™αž˜ 45 αž“αžΆαž‘αžΈαŸ”. αž“αŸ„αŸ‡αž‚αžΊαž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ αž“αŸ…αž–αŸαž›αž”αžΎαž€αžŸαŸ†αžŽαžΎαž‘αžΆαž‰ αžšαž„αŸ‹αž…αžΆαŸ†αž‡αžΆαž˜αž’αŸ’αž™αž˜ 45 αž“αžΆαž‘αžΈαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž›αž‘αŸ’αž’αž•αž›αžŸαžΆαž„αžŸαž„αŸ‹αŸ” αžαžΆαž˜αž‚αŸ†αž“αž·αžαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ† αž“αŸαŸ‡αž‚αžΊαž…αŸ’αžšαžΎαž“αžŽαžΆαžŸαŸ‹ αž αžΎαž™αž’αŸ’αž“αž€αž˜αž·αž“αž’αžΆαž…αž’αŸ’αžœαžΎαž€αžΆαžšαžŠαžΌαž…αž“αŸ„αŸ‡αž‘αŸαŸ”

αž‡αžΆβ€‹αž€αžΆαžšβ€‹αž–αž·αžβ€‹αžŽαžΆαžŸαŸ‹ αž™αžΎαž„β€‹αž”αžΆαž“β€‹αžŸαž˜αŸ’αžšαŸαž…β€‹αž…αž·αžαŸ’αžβ€‹αž–αž“αŸ’αž›αžΏαž“β€‹αž€αžΆαžšβ€‹αžŸαžΆαž„β€‹αžŸαž„αŸ‹β€‹αžšαž”αžŸαŸ‹β€‹αž™αžΎαž„β€‹αž‘αžΆαŸ†αž„β€‹αž’αžŸαŸ‹αŸ”

αžαŸ„αŸ‡αž”αž„αŸ’αž€αžΎαž“αž›αŸ’αž”αžΏαž“

αžŠαŸ„αž™αžƒαžΎαž‰αžŸαŸ†αžŽαž„αŸ‹αž“αŸ„αŸ‡αž…αŸ’αžšαžΎαž“αžαŸ‚αžˆαžšαž‡αžΆαž‡αž½αžš αžšαžΏαž„αžŠαŸ†αž”αžΌαž„αžŠαŸ‚αž›αž™αžΎαž„αž’αŸ’αžœαžΎαž‚αžΊ αž”αžΆαž“αž‘αž·αž‰ Hardware αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αž - αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‘αžΌαž›αŸ†αž‘αžΌαž›αžΆαž™αž‚αžΊαžŸαžΆαž˜αž‰αŸ’αž‰αž”αŸ†αž•αž»αžαŸ” Builds αž”αžΆαž“αž”αž‰αŸ’αžˆαž”αŸ‹αž€αžΆαžšαžαž˜αŸ’αžšαž„αŸ‹αž‡αž½αžš αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž–αŸαž›αžœαŸαž›αžΆαžšαž„αŸ‹αž…αžΆαŸ†αž”αžΆαž“αžαž™αž…αž»αŸ‡αž”αž“αŸ’αžαž·αž…αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡ αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž˜αž½αž™αž…αŸ†αž“αž½αž“αžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„αž…αŸ†αžŽαžΆαž™αž–αŸαž›αž™αžΌαžšαžŽαžΆαžŸαŸ‹αŸ”

αž€αžΆαžšαžŠαž€αž˜αžΌαž›αž”αŸ’αž”αž‘αžΆαž“αž”αŸαžαŸ’αžšαžŠαŸ‚αž›αž…αŸ†αžŽαžΆαž™αž–αŸαž›αž™αžΌαžšαž–αŸαž€

αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αžšαž”αžŸαŸ‹αž™αžΎαž„αž’αžΆαž…αž…αžΆαž”αŸ‹αž™αž€αž”αŸ’αžšαž—αŸαž‘αž“αŸƒαž€αŸ†αž αž»αžŸ αž“αž·αž„αž”αž‰αŸ’αž αžΆαž‘αžΆαŸ†αž„αž“αŸαŸ‡αŸ”

  • αž˜αž·αž“αž‘αŸ…. CI αž’αžΆαž…αž…αžΆαž”αŸ‹αž€αŸ†αž αž»αžŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαž…αž„αž€αŸ’αžšαž„αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž’αŸ’αžœαžΈαž˜αž½αž™αž˜αž·αž“αž”αž„αŸ’αž€αžΎαžαžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžŠαŸ‚αž›αž•αŸ’αž‘αž»αž™αž‚αŸ’αž“αžΆαŸ” αžŠαžΌαž…αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž“αž·αž™αžΆαž™αžšαž½αž…αž˜αž€αž αžΎαž™ αž‚αŸ’αž˜αžΆαž“αž“αžšαžŽαžΆαž˜αŸ’αž“αžΆαž€αŸ‹αž’αžΆαž…αž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†αž’αŸ’αžœαžΈαž”αžΆαž“αž‘αžΎαž™ αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž€αŸαžˆαž”αŸ‹ αž αžΎαž™αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αž“αžΆαž˜αžΆαž“αž€αžΆαžšαž—αŸαž™αžαŸ’αž›αžΆαž…αŸ”
  • αž€αŸ†αž αž»αžŸαž€αŸ’αž“αž»αž„αž’αžΆαž€αž”αŸ’αž”αž€αž·αžšαž·αž™αžΆ. αž§αž‘αžΆαž αžšαžŽαŸ αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‚αžΆαŸ†αž„αž“αŸ…αž–αŸαž›αž’αŸ’αž“αž€αž…αž»αž…αž”αŸŠαžΌαžαž»αž„ αž¬αž”αŸŠαžΌαžαž»αž„αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αž»αž…αž‘αžΆαž›αŸ‹αžαŸ‚αžŸαŸ„αŸ‡αŸ” αž“αŸαŸ‡αž˜αž·αž“αž›αŸ’αž’αž‘αŸ αž–αŸ’αžšαŸ„αŸ‡αž€αŸ†αž αž»αžŸαž”αŸ‚αž”αž“αŸαŸ‡αž’αžΆαž…αž‘αŸ…αžŠαž›αŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αŸ”
  • αž€αŸ†αž αž»αžŸαž€αŸ’αž“αž»αž„αž”αŸ’αž›αž„αŸ‹. αž§αž‘αžΆαž αžšαžŽαŸ αž”αŸŠαžΌαžαž»αž„αž˜αž½αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αž»αž… αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž‘αžΈ 10 αž—αžΈαž€αžŸαŸ‚αž›αž‘αŸ…αžαžΆαž„αž†αŸ’αžœαŸαž„αŸ”
  • αž€αžΆαžšαž€αžΎαž“αž‘αžΎαž„αž“αŸƒαž”αŸ†αžŽαž»αž›αž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸ.

αž”αž“αŸ’αž‘αžΆαž”αŸ‹β€‹αž–αžΈβ€‹αž˜αžΎαž›β€‹αž”αž‰αŸ’αž‡αžΈβ€‹αž“αŸαŸ‡ αž™αžΎαž„β€‹αž”αžΆαž“β€‹αžŠαžΉαž„β€‹αžαžΆβ€‹αž˜αžΆαž“β€‹αžαŸ‚β€‹αž–αžΈαžšβ€‹αž…αŸ†αžŽαž»αž…β€‹αžŠαŸ†αž”αžΌαž„β€‹αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡β€‹αžŠαŸ‚αž›β€‹αžŸαŸ†αžαžΆαž“αŸ‹αŸ” αž™αžΎαž„αž…αž„αŸ‹αž…αžΆαž”αŸ‹αž”αž‰αŸ’αž αžΆαž”αŸ‚αž”αž“αŸαŸ‡αž‡αžΆαž˜αž»αž“αžŸαž·αž“αŸ” αž€αŸ†αž αž»αžŸαž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αž›αž„αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αžƒαžΎαž‰αž“αŸ…αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž–αž·αž“αž·αžαŸ’αž™αž€αžΆαžšαžšαž…αž“αžΆ αž αžΎαž™αž’αžΆαž…αž€αŸ‚αž”αžΆαž“αž™αŸ‰αžΆαž„αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž“αŸ…αž–αŸαž›αž“αŸ„αŸ‡αŸ” αž€αžΆαžšαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αŸ†αžŽαž»αž›αž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸαž‘αžΆαž˜αž‘αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž“αž·αž„αž•αŸ‚αž“αž€αžΆαžšαžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž™αžΎαž„αž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž˜αž·αž“αžŸαžΆαž€αž›αŸ’αž”αž„αžœαžΆαžαžΆαž˜αžŸαŸ†αžŽαžΎαžšαž‘αžΆαž‰αŸ”

αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž€αžΆαžšαž…αžΆαžαŸ‹αžαŸ’αž“αžΆαž€αŸ‹αž“αŸαŸ‡ αž™αžΎαž„αž”αžΆαž“αžšαž„αŸ’αž‚αŸ„αŸ‡αžšαž„αŸ’αž‚αžΎαž”αž‰αŸ’αž‡αžΈαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž‘αžΆαŸ†αž„αž˜αžΌαž›αŸ” αž†αŸ’αž›αž„αž€αžΆαžαŸ‹ Lint αž αžΎαž™αž”αžΆαž“αž–αž“αŸ’αž™αžΆαžšαž–αŸαž›αž€αžΆαžšαž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžšαž”αžŸαŸ‹αžαŸ’αž›αž½αž“αž–αŸαž‰αž˜αž½αž™αž™αž”αŸ‹αŸ– αžŠαžΎαž˜αŸ’αž”αžΈαž±αŸ’αž™αžœαžΆαž”αž„αŸ’αž€αžΎαžαžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαž’αŸ†αž–αžΈαž”αž‰αŸ’αž αžΆαž‡αžΆαž…αŸ’αžšαžΎαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž‚αž˜αŸ’αžšαŸ„αž„αŸ” αž™αžΎαž„αž”αžΆαž“αž™αž›αŸ‹αž–αŸ’αžšαž˜αž’αŸ’αžœαžΎαž€αžΆαžšαžŠαŸ„αž™αž‘αŸ‚αž€αž–αžΈαž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž”αŸ†αžŽαž»αž›αž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸ αž“αž·αž„ αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™ Android Studio αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ„αŸ‡αž”αž„αŸ‹αž…αŸ„αž›αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„. Android Studio αž“αŸ…αž€αŸ’αž“αž»αž„ Docker αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžŸαŸ’αžαžΆαž”αŸ‹αž‘αŸ…αž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αžŽαŸ’αžαžΆαž›αž±αŸ’αž™αž˜αžΆαž“αž”αž‰αŸ’αž αžΆαž‡αžΆαž…αŸ’αžšαžΎαž“αž€αŸ’αž“αž»αž„αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαŸ” αž€αžΆαžšαž’αžΆαž”αŸ‹αžŠαŸαžαžŽαžΆαž˜αž½αž™αž…αŸ†αž–αŸ„αŸ‡αž€αŸ†αžŽαŸ‚ Android Studio αž˜αžΆαž“αž“αŸαž™αžαžΆαž˜αžΆαž“αž€αžΆαžšαžαžŸαŸŠαžΌαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αŸ†αž αž»αžŸαžŠαŸ‚αž›αž˜αž·αž“αž’αžΆαž…αž™αž›αŸ‹αž”αžΆαž“αŸ” αžœαžΆαž€αŸαž–αž·αž”αžΆαž€αž€αŸ’αž“αž»αž„αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαžšαžΌαž”αžαžαž’αŸαž€αŸ’αžšαž„αŸ‹αž•αž„αžŠαŸ‚αžš αž–αžΈαž–αŸ’αžšαŸ„αŸ‡αž”αžŽαŸ’αžŽαžΆαž›αŸαž™αž˜αž·αž“αž˜αžΆαž“αžŸαŸ’αžαŸαžšαž—αžΆαž–αžαŸ’αž›αžΆαŸ†αž„ αž αžΎαž™αž˜αžΆαž“αž—αžΆαž–αžœαž·αž‡αŸ’αž‡αž˜αžΆαž“αž˜αž·αž“αž–αž·αžαŸ” αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαžšαžΌαž”αžαžαž’αŸαž€αŸ’αžšαž„αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαž€αž…αŸαž‰αž–αžΈαž”αž‰αŸ’αž‡αžΈαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™.

αž‡αžΆαž›αž‘αŸ’αž’αž•αž›αž™αžΎαž„αž“αŸ…αžŸαž›αŸ‹αŸ–

  • αž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆ ARK;
  • αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αž Junit;
  • αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž§αž”αž€αžšαžŽαŸαŸ”

Gradle αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αž–αžΈαž…αž˜αŸ’αž„αžΆαž™

αž”αžΎαž‚αŸ’αž˜αžΆαž“αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž’αŸ’αž„αž“αŸ‹αŸ—αž‘αŸ αž’αŸ’αžœαžΈαŸ—αž”αžΆαž“αž”αŸ’αžšαžŸαžΎαžšαž‘αžΎαž„ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‚αŸ’αž˜αžΆαž“αžŠαŸ‚αž“αž€αŸ†αžŽαžαŸ‹αž…αŸ†αž–αŸ„αŸ‡αž—αžΆαž–αž›αŸ’αž’αž₯αžαžαŸ’αž…αŸ„αŸ‡αž‘αŸ!

αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ†αž”αŸ‚αž€αž‘αŸ…αž‡αžΆαž˜αŸ‰αžΌαžŒαž»αž› gradle αž”αŸ’αžšαž αŸ‚αž› 150 αžšαž½αž…αž αžΎαž™αŸ” αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αž–αžΈαž…αž˜αŸ’αž„αžΆαž™ Gradle αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αŸ’αž’αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž™αžΎαž„αž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαžŸαžΆαž€αž›αŸ’αž”αž„αžœαžΆαŸ”

αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αž–αžΈαž…αž˜αŸ’αž„αžΆαž™ Gradle αž‚αžΊαž‡αžΆαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžŠαŸ‚αž›αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž·αž…αŸ’αž…αž€αžΆαžšαž“αžΈαž˜αž½αž™αŸ—αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αŸ‰αžΌαžŒαž»αž›αž“αžΈαž˜αž½αž™αŸ—αŸ” Gradle αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™αž€αžΆαžšαž…αž„αž€αŸ’αžšαž„αž€αžΌαžŠαž–αž·αžαž”αŸ’αžšαžΆαž€αžŠ αž”αŸ’αžšαžΎ HTTP αžŠαžΎαž˜αŸ’αž”αžΈαž‚αŸ„αŸ‡αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αž–αžΈαž…αž˜αŸ’αž„αžΆαž™ αž αžΎαž™αžŸαž½αžšαžαžΆαžαžΎαž“αžšαžŽαžΆαž˜αŸ’αž“αžΆαž€αŸ‹αž”αžΆαž“αž”αŸ†αž–αŸαž‰αž€αž·αž…αŸ’αž…αž€αžΆαžšαž“αŸαŸ‡αžšαž½αž…αž αžΎαž™αž¬αž“αŸ…αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž”αžΆαž‘/αž…αžΆαžŸ αžœαžΆαž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž‘αžΆαž‰αž™αž€αž›αž‘αŸ’αž’αž•αž›αŸ”

αž€αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αž–αžΈαž…αž˜αŸ’αž„αžΆαž™ Gradle αž‚αžΊαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž–αŸ’αžšαŸ„αŸ‡ Gradle αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαžšαžΌαž”αž—αžΆαž– Docker αŸ” αž™αžΎαž„αž’αžΆαž…αž’αŸ’αžœαžΎαžœαžΆαž”αžΆαž“αž€αŸ’αž“αž»αž„αžšαž™αŸˆαž–αŸαž›αž”αžΈαž˜αŸ‰αŸ„αž„αŸ”

αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž‚αžΊαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ Docker αž αžΎαž™αžŸαžšαžŸαŸαžšαž˜αž½αž™αž”αž“αŸ’αž‘αžΆαžαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž‚αž˜αŸ’αžšαŸ„αž„αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαžœαžΆαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž™αŸ‰αžΆαž„αž†αžΆαž”αŸ‹αžšαž αŸαžŸαž€αŸαžŠαŸ„αž™ αžœαžΆαž“αžΉαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαž–αŸαž›αžœαŸαž›αžΆαž…αŸ’αžšαžΎαž“αžŠαžΎαž˜αŸ’αž”αžΈαž±αŸ’αž™αž’αŸ’αžœαžΈαŸ—αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αžΆαž“αž›αŸ’αž’αŸ”

αžαžΆαž„αž€αŸ’αžšαŸ„αž˜β€‹αž“αŸαŸ‡β€‹αž‚αžΊβ€‹αž‡αžΆβ€‹αžƒαŸ’αž›αžΆαŸ†αž„β€‹αžŸαž˜αŸ’αž„αžΆαžαŸ‹β€‹αž“αžΉαž€β€‹αž€αŸ’αžšαžΆαž αŸ’αžœαŸ”

αž€αžΆαžšαžœαž·αžœαžαŸ’αžαž“αŸαž“αŸƒ CI αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ’αžšαž»αž˜αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‘αžΌαžšαžŸαŸαž–αŸ’αž‘

αž“αŸ…αžŠαžΎαž˜αžŠαŸ†αž”αžΌαž„ αž—αžΆαž‚αžšαž™αž“αŸƒαž€αžΆαžšαž”αžΆαžαŸ‹αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αž‚αžΊαž”αŸ’αžšαž αŸ‚αž› 65 αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž”αžΈαžŸαž”αŸ’αžαžΆαž αŸ αž™αžΎαž„αž’αžΆαž…αž”αž„αŸ’αž€αžΎαž“αžαž˜αŸ’αž›αŸƒαž“αŸαŸ‡αžŠαž›αŸ‹ 20% αŸ” αžœαžΆαž”αžΆαž“αž”αŸ’αžšαŸ‚αž€αŸ’αž›αžΆαž™αžαžΆαž—αžΆαžšαž€αž·αž…αŸ’αž…αžŠαŸ‚αž›αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Android αž”αŸ’αžšαž˜αžΌαž›αž”αžΆαž“αž˜αžΆαž“αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αž’αž“αŸ’αžαžšαž€αžΆαž›αž…αž˜αŸ’αž›αŸ‚αž€αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž€αžΆαžšαžŠαŸ‚αž› Gradle αžαž€αžαžΆαž“αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αŸ”

αžαžΆαž˜αžšαž™αŸˆαž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹ αž™αžΎαž„αž”αžΆαž“αž”αž„αŸ’αž€αžΎαž“αž›αŸ’αž”αžΏαž“αž€αžΆαžšαž€αžŸαžΆαž„αž™αŸ‰αžΆαž„αžαŸ’αž›αžΆαŸ†αž„αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αŸ’αžšαŸ…αž–αžΈαž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆ αž€αŸαž˜αžΆαž“αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž§αž”αž€αžšαžŽαŸαž•αž„αžŠαŸ‚αžš αž αžΎαž™αž–αž½αž€αž‚αŸαžαŸ’αžšαžΌαžœαž…αŸ†αžŽαžΆαž™αž–αŸαž›αž™αžΌαžšαŸ” αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž˜αž·αž“αž˜αŸ‚αž“αž‚αŸ’αžšαž”αŸ‹αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαŸ’αžšαžΌαžœαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαžΆαž›αŸ‹αž€αžΆαžšαžŸαŸ’αž“αžΎαžŸαž»αŸ†αž‘αžΆαž‰αž“αŸ„αŸ‡αž‘αŸαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαžŸαŸ’αžœαŸ‚αž„αž™αž›αŸ‹ αž™αžΎαž„αž”αŸ’αžšαžΎαž€αžΆαžšαžœαž·αž—αžΆαž‚αž•αž›αž”αŸ‰αŸ‡αž–αžΆαž›αŸ‹αŸ”

αž€αžΆαžšαžœαž·αž—αžΆαž‚αž•αž›αž”αŸ‰αŸ‡αž–αžΆαž›αŸ‹

αžαžΆαž˜αžŸαŸ†αžŽαžΎαžšαž‘αžΆαž‰ αž™αžΎαž„αž”αŸ’αžšαž˜αžΌαž› git diff αž αžΎαž™αžŸαŸ’αžœαŸ‚αž„αžšαž€αž˜αŸ‰αžΌαžŒαž»αž› Gradle αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ‚αž”αŸ’αžšαŸ‚αŸ”

αž€αžΆαžšαžœαž·αžœαžαŸ’αžαž“αŸαž“αŸƒ CI αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ’αžšαž»αž˜αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‘αžΌαžšαžŸαŸαž–αŸ’αž‘

αžœαžΆαžŸαž˜αž αŸαžαž»αž•αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαŸ‚αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž§αž”αž€αžšαžŽαŸαžŠαŸ‚αž›αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž˜αŸ‰αžΌαžŒαž»αž›αžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš αž“αž·αž„αž˜αŸ‰αžΌαžŒαž»αž›αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž–αž½αž€αž‚αŸαŸ” αž˜αž·αž“αž˜αžΆαž“αž…αŸ†αžŽαž»αž…αžŽαžΆαž˜αž½αž™αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αŸ‰αžΌαžŒαž»αž›αž‡αž·αžαžαžΆαž„αž“αŸ„αŸ‡αž‘αŸαŸ– αž›αŸαžαž€αžΌαžŠαž“αŸ…αž‘αžΈαž“αŸ„αŸ‡αž˜αž·αž“αž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αŸ αž αžΎαž™αž‚αŸ’αž˜αžΆαž“αž’αŸ’αžœαžΈαž’αžΆαž…αž”αŸ†αž”αŸ‚αž€αž”αžΆαž“αž‘αŸαŸ”

αž€αžΆαžšβ€‹αž’αŸ’αžœαžΎβ€‹αžαŸαžŸαŸ’αžβ€‹αž§αž”αž€αžšαžŽαŸβ€‹αž˜αž·αž“β€‹αžŸαžΆαž˜αž‰αŸ’αž‰β€‹αž‘αŸ αž–αŸ’αžšαŸ„αŸ‡β€‹αžœαžΆβ€‹αžαŸ’αžšαžΌαžœβ€‹αžαŸ‚β€‹αž˜αžΆαž“β€‹αž‘αžΈαžαžΆαŸ†αž„β€‹αž“αŸ…β€‹αž€αŸ’αž“αž»αž„β€‹αž˜αŸ‰αžΌαžŒαž»αž›β€‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈβ€‹αž€αž˜αŸ’αžšαž·αžβ€‹αž€αŸ†αž–αžΌαž›αŸ” αž™αžΎαž„αž”αžΆαž“αž”αŸ’αžšαžΎ heuristics αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαžœαž·αž—αžΆαž‚ bytecode αžŠαžΎαž˜αŸ’αž”αžΈαž™αž›αŸ‹αž–αžΈαž˜αŸ‰αžΌαžŒαž»αž›αž“αžΈαž˜αž½αž™αŸ—αž“αŸƒαž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž“αžΈαž˜αž½αž™αŸ—αŸ”

αž€αžΆαžšαž’αŸ’αžœαžΎαž±αŸ’αž™αž”αŸ’αžšαžŸαžΎαžšαž‘αžΎαž„αž“αžΌαžœαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž“αŸƒαž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž§αž”αž€αžšαžŽαŸαžŠαžΎαž˜αŸ’αž”αžΈαž±αŸ’αž™αž–αž½αž€αž‚αŸαžŸαžΆαž€αž›αŸ’αž”αž„αžαŸ‚αž˜αŸ‰αžΌαžŒαž»αž›αžŠαŸ‚αž›αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αž…αŸ†αžŽαžΆαž™αž–αŸαž›αž”αŸ’αžšαž αŸ‚αž›αž”αŸ’αžšαžΆαŸ†αž”αžΈαžŸαž”αŸ’αžαžΆαž αŸαŸ”

αžœαž·αž’αžΆαž“αž€αžΆαžšβ€‹αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αž–αž“αŸ’αž›αžΏαž“β€‹αž€αžΆαžšβ€‹αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™β€‹αž”αžΆαž“β€‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšβ€‹αžŠαŸ„αž™β€‹αž‡αŸ„αž‚αž‡αŸαž™αŸ” αž…αžΆαž”αŸ‹αž–αžΈ 45 αž“αžΆαž‘αžΈ αž™αžΎαž„αž‘αžΎαž„αžŠαž›αŸ‹αž”αŸ’αžšαž αŸ‚αž› 15αŸ” αžœαžΆαž‡αžΆαžšαžΏαž„αž’αž˜αŸ’αž˜αžαžΆαž‘αŸ…αž αžΎαž™αž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαž„αŸ‹αž…αžΆαŸ†αž˜αž½αž™αž—αžΆαž‚αž”αž½αž“αž“αŸƒαž˜αž½αž™αž˜αŸ‰αŸ„αž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŸαžΆαž„αžŸαž„αŸ‹αŸ”

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž₯αž‘αžΌαžœαž“αŸαŸ‡αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžαŸ’αž’αžΌαž‰αžαŸ’αž’αŸ‚αžšαžαžΆαž–αž½αž€αž‚αŸαž˜αž·αž“αž™αž›αŸ‹αžαžΆαž€αžΆαžšαžŸαŸ’αžαžΆαž”αž“αžΆαžŽαžΆαž˜αž½αž™αž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž˜αžΎαž›αž€αŸ†αžŽαžαŸ‹αž αŸαžαž» αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαž€αžΆαžšαžŸαŸ’αžαžΆαž”αž“αžΆαž‘αžΎαž„αž€αŸ’αžšαž αž˜ αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž”αžšαžΆαž‡αŸαž™αŸ”αž›αŸ”

αž€αžΆαžšαžœαž·αžœαžαŸ’αžαž“αŸαž“αŸƒ CI αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ’αžšαž»αž˜αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‘αžΌαžšαžŸαŸαž–αŸ’αž‘

αž”αž‰αŸ’αž αžΆαž‡αžΆαž˜αž½αž™αž˜αžαž·αž€αŸ‚αž›αž˜αŸ’αž’αž™αžΊαžαž™αŸ‰αžΆαžœαž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž™αžΎαž„αž”αžΆαž“αž–αŸ’αž™αžΆαž™αžΆαž˜αž•αŸ’αžαž›αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹ αž“αž·αž„αž›αž˜αŸ’αž’αž·αžαž’αŸ†αž–αžΈ PR αž“αžΈαž˜αž½αž™αŸ— αž“αž·αž„αž”αž„αŸ’αž€αžΎαžαžαžΆαž˜αžŠαŸ‚αž›αž’αžΆαž…αž’αŸ’αžœαžΎαž”αžΆαž“αŸ” αž™αžΎαž„αž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž˜αžαž·αž™αŸ„αž”αž›αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ Bitbucket αž‘αŸ…αž€αžΆαž“αŸ‹ PR αžŠαŸ„αž™αž”αž„αŸ’αž αžΆαž‰αžαžΆαž€αžΆαžšαžŸαŸ’αžαžΆαž”αž“αžΆαžŽαžΆαž˜αž½αž™αž”αžΆαž“αž”αžšαžΆαž‡αŸαž™ αž“αž·αž„αž˜αžΌαž›αž αŸαžαž»αž’αŸ’αžœαžΈ αž αžΎαž™αž”αžΆαž“αžŸαžšαžŸαŸαžšαžŸαžΆαžšαž‚αŸ„αž›αžŠαŸ…αž“αŸ…αž€αŸ’αž“αž»αž„ Slack αŸ” αž“αŸ…αž‘αžΈαž”αž‰αŸ’αž…αž”αŸ‹ αž™αžΎαž„αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž•αŸ’αž‘αžΆαŸ†αž„αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„ PR αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‘αŸ†αž–αŸαžšαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž”αž‰αŸ’αž‡αžΈαž“αŸƒαž€αžΆαžšαžŸαžΆαž„αžŸαž„αŸ‹αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž“αž·αž„αžŸαŸ’αžαžΆαž“αž—αžΆαž–αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαŸ– αžαž˜αŸ’αžšαž„αŸ‹αž‡αž½αžš αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž‚αžΆαŸ†αž„ αž¬αž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹αŸ” αž’αŸ’αž“αž€αž’αžΆαž…αž…αž»αž…αž›αžΎ build αž αžΎαž™αž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αžšαž”αžŸαŸ‹αžœαžΆαŸ”

αž€αžΆαžšαžœαž·αžœαžαŸ’αžαž“αŸαž“αŸƒ CI αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ’αžšαž»αž˜αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‘αžΌαžšαžŸαŸαž–αŸ’αž‘

αž”αŸ’αžšαžΆαŸ†αž˜αž½αž™αžŸαž”αŸ’αžαžΆαž αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αŸ†αžŽαžΆαž™αž›αžΎαž˜αžαž·αž€αŸ‚αž›αž˜αŸ’αž’αž›αž˜αŸ’αž’αž·αžαŸ”

αž•αŸ‚αž“αž€αžΆαžš

αž…αžΌαžšαž”αž“αŸ’αžαž‘αŸ…αž”αŸ’αžšαžœαžαŸ’αžαž·αžαŸ’αž˜αžΈαŸ—αŸ” αžŠαŸ„αž™αž”αžΆαž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž˜αžαž·αž€αŸ‚αž›αž˜αŸ’αž’ αž™αžΎαž„αž”αžΆαž“αžˆαžΆαž“αžŠαž›αŸ‹αž€αž˜αŸ’αžšαž·αžαžαŸ’αž˜αžΈαž˜αž½αž™ αž™αžΎαž„αž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž”αž„αŸ’αž€αžΎαžαž€αžŸαž·αžŠαŸ’αž‹αžΆαž“αžαŸ’αžšαžΆαž”αŸ‹αžαžΆαž˜αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž˜αžΆαž“αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αž αž“αž·αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαŸ’αžšαžΆαž”αŸ‹αžαžΆαž˜αž…αŸ’αžšαžΎαž“ αž–αž½αž€αž‚αŸαž–αž·αž”αžΆαž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžŽαžΆαžŸαŸ‹αŸ” αž‡αžΆαž›αž‘αŸ’αž’αž•αž› αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαŸ’αžšαžΆαž”αŸ‹αžαžΆαž˜αžšαž”αžŸαŸ‹αž™αžΎαž„αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž‘αžΈαž‘αŸ…αž…αž„αŸ’αž€αŸ„αž˜ k8s αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž’αž“αž’αžΆαž“αžŠαŸ‚αž›αž’αžΆαž…αž”αžαŸ‹αž”αŸ‚αž“αž”αžΆαž“αŸ”

αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡αž‘αŸ€αžαž˜αžΆαž“αž•αŸ‚αž“αž€αžΆαžšαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ”

  • αžαŸ’αžšαž‘αž”αŸ‹ Lint (αž“αž·αž„αž€αžΆαžšαžœαž·αž—αžΆαž‚αž‹αž·αžαž·αžœαž“αŸ’αžαž•αŸ’αžŸαŸαž„αž‘αŸ€αž) αŸ” αž™αžΎαž„αž€αŸ†αž–αž»αž„αž’αŸ’αžœαžΎαž€αžΆαžšαž€αŸ’αž“αž»αž„αž‘αž·αžŸαžŠαŸ…αž“αŸαŸ‡αžšαž½αž…αž αžΎαž™αŸ”
  • αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž“αŸ…αž›αžΎ PR blocker αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž”αž‰αŸ’αž…αž”αŸ‹ αž“αŸ…αž›αžΎαž€αŸ†αžŽαŸ‚ SDK αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ”

αžŠαžΌαž…αŸ’αž“αŸαŸ‡, αž™αžΎαž„αž”αžΆαž“αžαžΆαž˜αžŠαžΆαž“αž”αŸ’αžšαžœαžαŸ’αžαž·αžŸαžΆαžŸαŸ’αžšαŸ’αžαž“αŸƒαž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸƒαžŸαž˜αžΆαž αžšαžŽαž€αž˜αŸ’αž˜αž”αž“αŸ’αžαž“αŸ…αž€αŸ’αž“αž»αž„ Avito αŸ” αž₯αž‘αžΌαžœαž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž…αž„αŸ‹αž•αŸ’αžαž›αŸ‹αžŠαŸ†αž”αžΌαž“αŸ’αž˜αžΆαž“αžαŸ’αž›αŸ‡αž–αžΈαž‘αžŸαŸ’αžŸαž“αŸˆαžŠαŸ‚αž›αž˜αžΆαž“αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαŸ”

αž–αŸαžαŸŒαž˜αžΆαž“αž‡αŸ†αž“αž½αž™

αž”αŸ’αžšαžŸαž·αž“αž”αžΎβ€‹αžαŸ’αž‰αž»αŸ†β€‹αž’αžΆαž…β€‹αž•αŸ’αžαž›αŸ‹β€‹αžŠαŸ†αž”αžΌαž“αŸ’αž˜αžΆαž“β€‹αžαŸ‚β€‹αž˜αž½αž™β€‹αž•αŸ’αž“αŸ‚αž€β€‹αž“αŸ„αŸ‡ αžœαžΆβ€‹αž“αžΉαž„β€‹αž˜αžΆαž“β€‹αžŠαžΌαž…β€‹αž“αŸαŸ‡αŸ–

αžŸαžΌαž˜αž”αŸ’αžšαž™αŸαžαŸ’αž“αž‡αžΆαž˜αž½αž™αžŸαŸ’αž‚αŸ’αžšαžΈαž”αžŸαŸ‚αž›!

Bash αž‚αžΊαž‡αžΆαž§αž”αž€αžšαžŽαŸαžŠαŸ‚αž›αž’αžΆαž…αž”αžαŸ‹αž”αŸ‚αž“αž”αžΆαž“ αž“αž·αž„αž˜αžΆαž“αžαžΆαž˜αž–αž›αžαŸ’αž›αžΆαŸ†αž„ αžœαžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž› αž“αž·αž„αžšαž αŸαžŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαžšαžŸαŸαžšαžŸαŸ’αž‚αŸ’αžšαžΈαž”αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž’αŸ’αž“αž€αž’αžΆαž…αž’αŸ’αž›αžΆαž€αŸ‹αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αž’αž“αŸ’αž‘αžΆαž€αŸ‹αž‡αžΆαž˜αž½αž™αžœαžΆ αž αžΎαž™αž‡αžΆαž’αž€αž»αžŸαž›αž™αžΎαž„αž”αžΆαž“αž’αŸ’αž›αžΆαž€αŸ‹αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αžœαžΆαŸ”

αžœαžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαŸ’αž‚αŸ’αžšαžΈαž”αžŸαžΆαž˜αž‰αŸ’αž‰αžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž”αž„αŸ’αž€αžΎαžαžšαž”αžŸαŸ‹αž™αžΎαž„αŸ–

#!/usr/bin/env bash
./gradlew assembleDebug

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αžΆαž“αžŠαžΉαž„αž αžΎαž™αžαžΆ αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αžšαžΈαž€αž…αž˜αŸ’αžšαžΎαž“ αž“αž·αž„αž€αžΆαž“αŸ‹αžαŸ‚αžŸαŸ’αž˜αž»αž‚αŸ’αžšαžŸαŸ’αž˜αžΆαž‰αžαžΆαž˜αž–αŸαž›αžœαŸαž›αžΆ - αžαŸ„αŸ‡αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαŸ’αž‚αŸ’αžšαžΈαž”αž˜αž½αž™αž–αžΈαž˜αž½αž™αž‘αŸ€αž αžαŸ„αŸ‡αž†αŸ’αž›αž„αž€αžΆαžαŸ‹αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžαŸ’αž›αŸ‡αž“αŸ…αž‘αžΈαž“αŸ„αŸ‡ - αž“αŸ…αž‘αžΈαž”αž‰αŸ’αž…αž”αŸ‹αž™αžΎαž„αžαŸ’αžšαžΌαžœαžŸαžšαžŸαŸαžšαž˜αž»αžαž„αžΆαžšαžŠαŸ‚αž›αž€αŸ†αžŽαžαŸ‹αžαžΆαžαžΎαž™αžΎαž„αž€αŸ†αž–αž»αž„αžŸαŸ’αžαž·αžαž“αŸ…αž€αž˜αŸ’αžšαž·αžαžŽαžΆαž₯αž‘αžΌαžœαž“αŸαŸ‡αžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αž›αŸ†αžŠαŸ„αž™αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž”αž‰αŸ’αž…αžΌαž›αžŸαž˜αŸ’αžšαž„αŸ‹αž…αžΆαŸ†αž”αžΆαž…αŸ‹ αžŠαžΎαž˜αŸ’αž”αžΈαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžœαžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ”

αž€αžΆαžšαžœαž·αžœαžαŸ’αžαž“αŸαž“αŸƒ CI αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ’αžšαž»αž˜αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‘αžΌαžšαžŸαŸαž–αŸ’αž‘

αž’αŸ’αž“αž€αž’αžΆαž…αžŸαŸ’αžšαž˜αŸƒαž˜αžΎαž›αžαž˜αŸ’αž›αŸƒαž–αž›αž€αž˜αŸ’αž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžŸαŸ’αž‚αŸ’αžšαžΈαž”αž”αŸ‚αž”αž“αŸαŸ‡αŸ” αžαŸ’αž‰αž»αŸ†αžŽαŸ‚αž“αžΆαŸ†αž’αŸ’αž“αž€αž€αž»αŸ†αž±αŸ’αž™αž’αŸ’αž›αžΆαž€αŸ‹αž…αžΌαž›αž€αŸ’αž“αž»αž„αž’αž“αŸ’αž‘αžΆαž€αŸ‹αž“αŸαŸ‡αŸ”

αžαžΎαž’αŸ’αžœαžΈαž’αžΆαž…αž‡αŸ†αž“αž½αžŸαž”αžΆαž“?

  • αž—αžΆαžŸαžΆαžŸαŸ’αž‚αŸ’αžšαžΈαž”αžŽαžΆαž˜αž½αž™αŸ” αžŸαžšαžŸαŸαžšβ€‹αž‘αŸ…αž€αžΆαž“αŸ‹ Python ឬ Kotlin Script αž€αžΆαž“αŸ‹αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž–αŸ’αžšαŸ„αŸ‡αžœαžΆαž‡αžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž˜αž·αž“αž˜αŸ‚αž“αžŸαŸ’αž‚αŸ’αžšαžΈαž”αž‘αŸαŸ”
  • αž¬αž–αž·αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαžŸαŸ’αžαžΆαž”αž“αžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹ αž€αž·αž…αŸ’αž…αž€αžΆαžšβ€‹αž€αž˜αŸ’αžšαž·αžβ€‹αž•αŸ’αž‘αžΆαž›αŸ‹β€‹αžαŸ’αž›αž½αž“ αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ”

αž™αžΎαž„αž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž‡αž˜αŸ’αžšαžΎαžŸαž‘αžΈαž–αžΈαžš αž αžΎαž™αž₯αž‘αžΌαžœαž“αŸαŸ‡αž™αžΎαž„αž€αŸ†αž–αž»αž„αž›αž»αž”αž‡αžΆαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž“αžΌαžœαžŸαŸ’αž‚αŸ’αžšαžΈαž” bash αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž“αž·αž„αžŸαžšαžŸαŸαžšαž—αžΆαžšαž€αž·αž…αŸ’αž…αžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αž›αŸ†αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αž‡αžΆαž…αŸ’αžšαžΎαž“αŸ”

αž‚αž“αŸ’αž›αžΉαŸ‡αž‘αžΈ 2: αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΌαžŠαŸ”

αžœαžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž˜αž·αž“αž“αŸ…αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹ UI αžšαž”αžŸαŸ‹ Jenkins ឬ TeamCity αž‡αžΆαžŠαžΎαž˜αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‡αžΆαž‘αž˜αŸ’αžšαž„αŸ‹αž―αž€αžŸαžΆαžšαž’αžαŸ’αžαž”αž‘αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αž‚αž˜αŸ’αžšαŸ„αž„αŸ” αž“αŸαŸ‡αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαž›αž‘αŸ’αž’αž—αžΆαž–αž“αŸƒαž€αŸ†αžŽαŸ‚αŸ” αžœαžΆαž“αžΉαž„αž˜αž·αž“αž–αž·αž”αžΆαž€αž€αŸ’αž“αž»αž„αž€αžΆαžšαžœαž·αž›αžαŸ’αžšαž›αž”αŸ‹ αž¬αž”αž„αŸ’αž€αžΎαžαž€αžΌαžŠαž“αŸ…αž›αžΎαžŸαžΆαžαžΆαž•αŸ’αžŸαŸαž„αž“αŸ„αŸ‡αž‘αŸαŸ”

αžŸαŸ’αž‚αŸ’αžšαžΈαž”αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž€αŸ’αž“αž»αž„αž‚αž˜αŸ’αžšαŸ„αž„αŸ” αž’αŸ’αžœαžΈαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž‡αžΆαž˜αž½αž™αž”αžšαž·αžŸαŸ’αžαžΆαž“?

αž‚αž“αŸ’αž›αžΉαŸ‡αž‘αžΈ 3αŸ– Docker αž’αžΆαž…αž‡αž½αž™αžŠαž›αŸ‹αž”αžšαž·αžŸαŸ’αžαžΆαž“αŸ”

αžœαžΆαž–αž·αžαž‡αžΆαž“αžΉαž„αž‡αž½αž™αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš Android; iOS αž˜αž·αž“αž‘αžΆαž“αŸ‹αž˜αžΆαž“αž“αŸ…αž‘αžΎαž™αž‘αŸαŸ”

αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαž―αž€αžŸαžΆαžš docker αžŸαžΆαž˜αž‰αŸ’αž‰αžŠαŸ‚αž›αž˜αžΆαž“ jdk αž“αž·αž„ android-sdkαŸ–

FROM openjdk:8

ENV SDK_URL="https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip" 
    ANDROID_HOME="/usr/local/android-sdk" 
    ANDROID_VERSION=26 
    ANDROID_BUILD_TOOLS_VERSION=26.0.2

# Download Android SDK
RUN mkdir "$ANDROID_HOME" .android 
    && cd "$ANDROID_HOME" 
    && curl -o sdk.zip $SDK_URL 
    && unzip sdk.zip 
    && rm sdk.zip 
    && yes | $ANDROID_HOME/tools/bin/sdkmanager --licenses

# Install Android Build Tool and Libraries
RUN $ANDROID_HOME/tools/bin/sdkmanager --update
RUN $ANDROID_HOME/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" 
    "platforms;android-${ANDROID_VERSION}" 
    "platform-tools"

RUN mkdir /application
WORKDIR /application

αžŠαŸ„αž™αž”αžΆαž“αžŸαžšαžŸαŸαžšαž―αž€αžŸαžΆαžš Docker αž“αŸαŸ‡ (αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž”αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž–αžΈαž’αžΆαžαŸŒαž€αŸ†αž”αžΆαŸ†αž„αž˜αž½αž™ αž’αŸ’αž“αž€αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŸαžšαžŸαŸαžšαžœαžΆαž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž‘αžΆαž‰αžœαžΆαžšαž½αž…αžšαžΆαž›αŸ‹αžŠαŸ‚αž›αž•αž›αž·αžαž–αžΈ GitHub) αž αžΎαž™αž•αŸ’αž‚αž»αŸ†αžšαžΌαž”αž—αžΆαž–αž“αŸ„αŸ‡ αž’αŸ’αž“αž€αž“αžΉαž„αž‘αž‘αž½αž›αž”αžΆαž“αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αžαžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αžΆαž“αŸ” αž“αž·αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αž Junit αŸ”

αž˜αžΌαž›αž αŸαžαž»αžŸαŸ†αžαžΆαž“αŸ‹αž–αžΈαžšαžŠαŸ‚αž›αž’αŸ’αžœαžΎαž²αŸ’αž™αž™αž›αŸ‹αž”αžΆαž“αž‚αžΊ αž›αž‘αŸ’αž’αž—αžΆαž–αž’αŸ’αžœαžΎαž˜αžΆαžαŸ’αžšαžŠαŸ’αž‹αžΆαž“ αž“αž·αž„αž›αž‘αŸ’αž’αž—αžΆαž–αž’αŸ’αžœαžΎαž˜αŸ’αžαž„αž‘αŸ€αžαŸ” αžŠαŸ„αž™αž”αŸ’αžšαžΎ docker αž’αŸ’αž“αž€αž’αžΆαž…αž”αž„αŸ’αž€αžΎαž“αž—αŸ’αž“αžΆαž€αŸ‹αž„αžΆαžšαž”αž„αŸ’αž€αžΎαžαžšαžΆαž”αŸ‹αžŸαž·αž”αž™αŸ‰αžΆαž„αž†αžΆαž”αŸ‹αžšαž αŸαžŸαžŠαŸ‚αž›αž“αžΉαž„αž˜αžΆαž“αž”αžšαž·αž™αžΆαž€αžΆαžŸαžŠαžΌαž…αž‚αŸ’αž“αžΆαž‘αŸ…αž“αžΉαž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž˜αž»αž“αžŠαŸ‚αžšαŸ” αž“αŸαŸ‡αž’αŸ’αžœαžΎαž±αŸ’αž™αž‡αžΈαžœαž·αžαžšαž”αžŸαŸ‹αžœαž·αžŸαŸ’αžœαž€αžš CI αž€αžΆαž“αŸ‹αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž›αŸ” αžœαžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŽαžΆαžŸαŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαž»αž‰ android-sdk αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„ docker αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαŸ’αžšαžΆαž”αŸ‹αžαžΆαž˜αžœαžΆαž–αž·αž”αžΆαž€αž‡αžΆαž„αž“αŸαŸ‡αž”αž“αŸ’αžαž·αž…αŸ– αž’αŸ’αž“αž€αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΉαž„αž”αŸ’αžšαŸ‚αž„αž”αž“αŸ’αžαž·αž… (αž¬αž‘αžΆαž‰αž™αž€αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹αž–αžΈ GitHub αž˜αŸ’αžαž„αž‘αŸ€αž)αŸ”

αž‚αž“αŸ’αž›αžΉαŸ‡αž‘αžΈαŸ€αŸ– αž€αž»αŸ†αž—αŸ’αž›αŸαž…αžαžΆ αž’αž’αž·αž€αžΆαžšαž€αž·αž…αŸ’αž…αž˜αž·αž“αž˜αŸ‚αž“αž’αŸ’αžœαžΎαž‘αžΎαž„αžŠαžΎαž˜αŸ’αž”αžΈαž‡αžΆαž”αŸ’αžšαž™αŸ„αž‡αž“αŸαžŠαž›αŸ‹αž’αž’αž·αž€αžΆαžšαž€αž·αž…αŸ’αž…αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αž“αž»αžŸαŸ’αžŸαŸ”

រហ័ស αž αžΎαž™αžŸαŸ†αžαžΆαž“αŸ‹αž”αŸ†αž•αž»αž αž˜αžαž·αž€αŸ‚αž›αž˜αŸ’αž’αž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹αž‚αžΊαž˜αžΆαž“αžŸαžΆαžšαŸˆαžŸαŸ†αžαžΆαž“αŸ‹αžŽαžΆαžŸαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαŸ– αž’αŸ’αžœαžΈβ€‹αžŠαŸ‚αž›β€‹αž”αžΆαž“β€‹αž”αŸ‚αž€αž’αŸ’αž›αžΆαž™ αž€αžΆαžšβ€‹αžŸαžΆαž€αž›αŸ’αž”αž„β€‹αž’αŸ’αžœαžΈβ€‹αžŠαŸ‚αž›β€‹αž”αžΆαž“β€‹αž”αžšαžΆαž‡αŸαž™ αžαžΎαžαŸ’αž‰αž»αŸ†β€‹αž’αžΆαž…β€‹αž˜αžΎαž›β€‹αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»β€‹αžŸαžΆαž„αžŸαž„αŸ‹β€‹αž“αŸ…αž―αžŽαžΆαŸ”

αž‚αž“αŸ’αž›αžΉαŸ‡αž‘αžΈ 5: αž˜αžΆαž“αž—αžΆαž–αž”αŸ’αžšαžΆαž€αžŠαž“αž·αž™αž˜αž“αŸ…αž–αŸαž›αž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ”

αž™αž›αŸ‹αž…αŸ’αž”αžΆαžŸαŸ‹αž’αŸ†αž–αžΈαž”αŸ’αžšαž—αŸαž‘αž“αŸƒαž€αŸ†αž αž»αžŸαžŠαŸ‚αž›αž’αŸ’αž“αž€αž…αž„αŸ‹αž€αžΆαžšαž–αžΆαžš αžαžΎαž’αž“αž’αžΆαž“αž”αŸ‰αž»αž“αŸ’αž˜αžΆαž“ αž–αŸαž›αžœαŸαž›αžΆ αž“αž·αž„αž–αŸαž›αžœαŸαž›αžΆαž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαžŠαŸ‚αž›αž’αŸ’αž“αž€αžŸαž»αžαž…αž·αžαŸ’αžαž…αŸ†αžŽαžΆαž™αŸ” αž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸ αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžŠαŸ‚αž›αž…αŸ†αžŽαžΆαž™αž–αŸαž›αž™αžΌαžšαž–αŸαž€ αž’αžΆαž…αžαŸ’αžšαžΌαžœαž–αž“αŸ’αž™αžΆαžšαž–αŸαž›αž–αŸαž‰αž˜αž½αž™αž™αž”αŸ‹αŸ” αž αžΎαž™αž’αŸ’αž“αž€αžŠαŸ‚αž›αž…αžΆαž”αŸ‹αž€αŸ†αž αž»αžŸαž˜αž·αž“αžŸαŸ†αžαžΆαž“αŸ‹αž‚αž½αžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ„αŸ‡αž”αž„αŸ‹αž…αŸ„αž›αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αŸ”

αž‚αž“αŸ’αž›αžΉαŸ‡αž‘αžΈαŸ¦αŸ– αž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸαžŠαŸ‚αž›αžαŸ’αžšαŸ€αž˜αžšαž½αž…αž‡αžΆαžŸαŸ’αžšαŸαž…αŸ”

αž₯αž‘αžΌαžœαž“αŸαŸ‡αž˜αžΆαž“αž€αŸ’αžšαž»αž˜αž αŸŠαž»αž“αž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαŸ‚αž›αž•αŸ’αžαž›αŸ‹ Cloud CI αŸ”

αž€αžΆαžšαžœαž·αžœαžαŸ’αžαž“αŸαž“αŸƒ CI αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ’αžšαž»αž˜αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‘αžΌαžšαžŸαŸαž–αŸ’αž‘

αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžŠαŸαž›αŸ’αž’αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αŸ’αžšαž»αž˜αžαžΌαž…αŸ—αŸ” αž’αŸ’αž“αž€αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž‚αžΆαŸ†αž‘αŸ’αžšαž’αŸ’αžœαžΈαž“αŸ„αŸ‡αž‘αŸ αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž…αŸ†αžŽαžΆαž™αž”αŸ’αžšαžΆαž€αŸ‹αž”αž“αŸ’αžαž·αž…αž”αž“αŸ’αžαž½αž… αž”αž„αŸ’αž€αžΎαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž“αž·αž„αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž§αž”αž€αžšαžŽαŸαŸ”

αž‚αž“αŸ’αž›αžΉαŸ‡αž‘αžΈ 7: αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ’αžšαž»αž˜αž’αŸ† αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž€αŸ’αž“αž»αž„αž•αŸ’αž‘αŸ‡αž˜αžΆαž“αž•αž›αž…αŸ†αžŽαŸαž‰αž…αŸ’αžšαžΎαž“αž‡αžΆαž„αŸ”

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž·αž“αž™αžΌαžšαž˜αž·αž“αž†αžΆαž”αŸ‹ αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž€αŸ’αžšαž»αž˜αžšαžΈαž€αž…αž˜αŸ’αžšαžΎαž“ αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž€αŸ’αž“αž»αž„αž•αŸ’αž‘αŸ‡αž“αžΉαž„αž€αžΆαž“αŸ‹αžαŸ‚αž‘αž‘αž½αž›αž”αžΆαž“αž•αž›αž…αŸ†αžŽαŸαž‰αž…αŸ’αžšαžΎαž“αŸ” αž˜αžΆαž“αž”αž‰αŸ’αž αžΆαž˜αž½αž™αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž‘αžΆαŸ†αž„αž“αŸαŸ‡αŸ” αž˜αžΆαž“αž…αŸ’αž”αžΆαž”αŸ‹αž“αŸƒαž€αžΆαžšαžαž™αž…αž»αŸ‡αž”αŸ’αžšαžΆαž€αŸ‹αž…αŸ†αžŽαžΌαž›αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸαžŠαŸ’αž‹αž€αž·αž…αŸ’αž…αŸ– αž“αŸ…αž€αŸ’αž“αž»αž„αž‚αž˜αŸ’αžšαŸ„αž„αžŽαžΆαž˜αž½αž™ αž€αžΆαžšαž€αŸ‚αž›αž˜αŸ’αž’αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž“αžΈαž˜αž½αž™αŸ—αž‚αžΊαž€αžΆαž“αŸ‹αžαŸ‚αž–αž·αž”αžΆαž€ αž αžΎαž™αž‘αžΆαž˜αž‘αžΆαžšαž€αžΆαžšαžœαž·αž“αž·αž™αŸ„αž‚αž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αžšαžΎαž“αŸ”

αžŸαŸαžŠαŸ’αž‹αž€αž·αž…αŸ’αž…αž–αž·αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαž‡αžΈαžœαž·αžαž‘αžΆαŸ†αž„αž˜αžΌαž›αžšαž”αžŸαŸ‹αž™αžΎαž„ αžšαž½αž˜αž‘αžΆαŸ†αž„αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ” αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž€αžΆαž›αžœαž·αž—αžΆαž‚αž“αŸƒαžαŸ’αž›αŸƒαž–αž›αž€αž˜αŸ’αž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž“αžΈαž˜αž½αž™αŸ—αž“αŸƒαž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž“αŸƒαžŸαž˜αžΆαž αžšαžŽαž€αž˜αŸ’αž˜αž”αž“αŸ’αžαžšαž”αžŸαŸ‹αž™αžΎαž„αŸ”

αž€αžΆαžšαžœαž·αžœαžαŸ’αžαž“αŸαž“αŸƒ CI αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ’αžšαž»αž˜αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‘αžΌαžšαžŸαŸαž–αŸ’αž‘

αžœαžΆαž…αŸ’αž”αžΆαžŸαŸ‹αžŽαžΆαžŸαŸ‹αžαžΆαž€αžΆαžšαž€αŸ‚αž›αž˜αŸ’αž’αžŽαžΆαž˜αž½αž™αž€αžΆαž“αŸ‹αžαŸ‚αž–αž·αž”αžΆαž€αŸ” αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αž€αŸ’αžšαžΆαž αŸ’αžœαž“αŸαŸ‡ αž’αŸ’αž“αž€αž’αžΆαž…αž™αž›αŸ‹αž”αžΆαž“αžαžΆ αžŸαž˜αžΆαž αžšαžŽαž€αž˜αŸ’αž˜αž”αž“αŸ’αžαžαŸ’αžšαžΌαžœαžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžŸαŸ’αžšαž”αžαžΆαž˜αž€αŸ†αžŽαžΎαž“αž“αŸƒαž‘αŸ†αž αŸ†αž€αŸ’αžšαž»αž˜αŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹β€‹αž€αŸ’αžšαž»αž˜β€‹αž˜αž“αž»αžŸαŸ’αžŸβ€‹αž–αžΈαžšβ€‹αž“αžΆαž€αŸ‹ αž€αžΆαžšβ€‹αž…αŸ†αžŽαžΆαž™β€‹αž–αŸαž› 50 αžαŸ’αž„αŸƒβ€‹αž€αŸ’αž“αž»αž„β€‹αž€αžΆαžšβ€‹αž”αž„αŸ’αž€αžΎαžβ€‹αž€αžŸαž·αžŠαŸ’αž‹αžΆαž“β€‹αžαŸ’αžšαžΆαž”αŸ‹αžαžΆαž˜β€‹αžαžΆαž„αž€αŸ’αž“αž»αž„β€‹αž‚αžΊαž‡αžΆβ€‹αž‚αŸ†αž“αž·αžβ€‹αž˜αž’αŸ’αž™αž˜αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αŸ’αž“αž»αž„αž–αŸαž›αž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆαž“αŸαŸ‡ αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αŸ’αžšαž»αž˜αž’αŸ† αž€αžΆαžšαž˜αž·αž“αž’αŸ’αžœαžΎαžŸαž˜αžΆαž αžšαžŽαž€αž˜αŸ’αž˜αž”αž“αŸ’αžαž‚αŸ’αž“αžΆαž‘αžΆαž›αŸ‹αžαŸ‚αžŸαŸ„αŸ‡ αž€αŸαž‡αžΆαž‚αŸ†αž“αž·αžαž˜αž·αž“αž›αŸ’αž’αžŠαŸ‚αžš αž–αŸ’αžšαŸ„αŸ‡αž”αž‰αŸ’αž αžΆαžŸαž˜αžΆαž αžšαžŽαž€αž˜αŸ’αž˜ αž€αžΆαžšαž‡αž½αžŸαž‡αž»αž›αž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αŸ”αž›αŸ” αžœαžΆαž“αžΉαž„αž…αŸ†αžŽαžΆαž™αž–αŸαž›αž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αžšαžΎαž“αŸ”

αž™αžΎαž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž‚αŸ†αž“αž·αžαžŠαŸ‚αž›αžαžΆ αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž€αž˜αŸ’αž˜αž‚αžΊαžαŸ’αžšαžΌαžœαž€αžΆαžšαž‡αžΆαž…αžΆαŸ†αž”αžΆαž…αŸ‹ αž–αžΈαž–αŸ’αžšαŸ„αŸ‡αž˜αž“αž»αžŸαŸ’αžŸαž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαžαŸ’αž›αŸƒ αž–αž½αž€αž‚αŸαž’αŸ’αžœαžΎαžαž»αžŸ αž“αž·αž„αžαŸ’αž‡αž·αž›αž…αŸ’αžšαž’αžΌαžŸαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž“αž»αžŸαŸ’αžŸαž€αŸαžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αžŠαŸ‚αžšαŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž”αž‰αŸ’αž αžΆαžŠαžΌαž…αž‚αŸ’αž“αžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž’αž“αž»αžœαžαŸ’αžαž…αŸ†αž–αŸ„αŸ‡αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž€αž˜αŸ’αž˜αŸ”

  • αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž€αž˜αŸ’αž˜αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαžαŸ’αž›αŸƒαŸ” αž…αž„αž…αžΆαŸ†αž€αžΆαž›αžœαž·αž—αžΆαž‚αž€αžΆαžšαž„αžΆαžšαŸ”
  • αž“αŸ…αž–αŸαž›αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž€αž˜αŸ’αž˜ αž˜αž“αž»αžŸαŸ’αžŸαž’αŸ’αžœαžΎαžαž»αžŸαŸ”
  • αž–αŸαž›αžαŸ’αž›αŸ‡αžœαžΆαžαŸ’αž‡αž·αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αŸ’αžœαžΎαžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž€αž˜αŸ’αž˜ αž–αŸ’αžšαŸ„αŸ‡αž’αŸ’αžœαžΈαŸ—αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαžΌαž…αž“αŸ„αŸ‡αŸ” αž αŸαžαž»αž’αŸ’αžœαžΈβ€‹αž”αžΆαž“β€‹αž‡αžΆβ€‹αž’αŸ’αžœαžΎβ€‹αž±αŸ’αž™β€‹αž”αŸ’αžšαžŸαžΎαžšβ€‹αž‘αžΎαž„β€‹αž“αžΌαžœβ€‹αž’αŸ’αžœαžΈβ€‹αž•αŸ’αžŸαŸαž„β€‹αž‘αŸ€αž αž αŸαžαž»β€‹αž’αŸ’αžœαžΈβ€‹αž”αžΆαž“β€‹αž‡αžΆβ€‹αž€αžΆαžšβ€‹αž’αŸ’αžœαžΎβ€‹αžŸαž˜αžΆαž αžšαžŽαž€αž˜αŸ’αž˜β€‹αž”αž“αŸ’αžβ€‹αž‘αžΆαŸ†αž„β€‹αž’αžŸαŸ‹β€‹αž“αŸαŸ‡?

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαŸ’αž‰αž»αŸ†αž˜αžΆαž“αžŸαŸ’αžαž·αžαž·αŸ– αž€αŸ†αž αž»αžŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαž”αŸ‹αž”αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„ 20% αž“αŸƒαžŸαž“αŸ’αž“αž·αž”αžΆαžαŸ” αž αžΎαž™αž“αŸαŸ‡αž˜αž·αž“αž˜αŸ‚αž“αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžšαž”αžŸαŸ‹αž™αžΎαž„αžŸαžšαžŸαŸαžšαž€αžΌαžŠαž˜αž·αž“αž”αžΆαž“αž›αŸ’αž’αž“αŸ„αŸ‡αž‘αŸαŸ” αž“αŸαŸ‡αž‚αžΊαžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž˜αžΆαž“αž‘αŸ†αž“αž»αž€αž…αž·αžαŸ’αžαžαžΆαž”αŸ’αžšαžŸαž·αž“αž”αžΎαž–αž½αž€αž‚αŸαž’αŸ’αžœαžΎαžαž»αžŸαžαŸ’αž›αŸ‡ αžœαžΆαž“αžΉαž„αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž“αŸ„αŸ‡αž‘αŸ αžœαžΆαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαž”αŸ‹αžŠαŸ„αž™αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αŸ” αžŠαžΌαž…αŸ’αž“αŸ„αŸ‡αž αžΎαž™ αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž’αžΆαž…αž…αŸ†αžŽαžΆαž™αž–αŸαž›αž…αŸ’αžšαžΎαž“αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαžšαžŸαŸαžšαž€αžΌαžŠ αž“αž·αž„αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸ αž‡αžΆαž‡αžΆαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž“αž·αž„αžŸαžΆαž€αž›αŸ’αž”αž„αž’αŸ’αžœαžΈαž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αŸ”

αž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αžšαž·αžαž˜αž’αŸ’αž™αž˜αŸ”

αžŠαŸ„αž™αžœαž·αž’αžΈαž“αŸαŸ‡ Nikolai Nesterov αž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ‚αž•αŸ’αžαž›αŸ‹αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžŠαŸαž’αžŸαŸ’αž…αžΆαžšαŸ’αž™αžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αž‘αŸαžαŸ‚αž˜αž‘αžΆαŸ†αž„αž‡αžΆαžŸαž˜αžΆαž‡αž·αž€αž“αŸƒαž‚αžŽαŸˆαž€αž˜αŸ’αž˜αžΆαž’αž·αž€αžΆαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž•αž„αžŠαŸ‚αžšαŸ” AppsConf αž“αž·αž„αž‡αž½αž™αž’αŸ’αž“αž€αžŠαž‘αŸƒαžšαŸ€αž”αž…αŸ†αžŸαž»αž“αŸ’αž‘αžšαž€αžαžΆαžŠαŸαž˜αžΆαž“αž’αžαŸ’αžαž“αŸαž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αŸ” αž—αžΆαž–αž–αŸαž‰αž›αŸαž‰ αž“αž·αž„αž’αžαŸ’αžαž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŸαž“αŸ’αž“αž·αžŸαžΈαž‘αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžœαžΆαž™αžαž˜αŸ’αž›αŸƒαžŠαŸ„αž™αž”αŸ’αžšαž’αžΆαž“αž”αž‘αž“αŸ…αž€αŸ’αž“αž»αž„ αž€αžΆαž›αžœαž·αž—αžΆαž‚. αž αžΎαž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αž αžŸαžΌαž˜αž˜αž€αž€αžΆαž“αŸ‹ Infospace αž“αŸ…αžαŸ’αž„αŸƒαž‘αžΈ 22-23 αžαŸ‚αž˜αŸαžŸαžΆαŸ”

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹