αžŸαž€αž˜αŸ’αž˜αž—αžΆαž– GitHub αž‡αžΆ CI/CD αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Static Generator Site αž“αž·αž„ GitHub Pages

αžŸαž€αž˜αŸ’αž˜αž—αžΆαž– GitHub αž‡αžΆ CI/CD αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Static Generator Site αž“αž·αž„ GitHub Pages

αžŠαŸ„αž™αž”αžΆαž“αž˜αžΎαž›αžšαŸ†αž›αž„ Habr αž”αž“αŸ’αžαž·αž… αžαŸ’αž‰αž»αŸ†αž˜αžΆαž“αž€αžΆαžšαž—αŸ’αž‰αžΆαž€αŸ‹αž•αŸ’αž’αžΎαž›αžŠαŸ‚αž›αž’αžαŸ’αžαž”αž‘αžαž·αž…αžαž½αž…αž”αŸ†αž•αž»αžαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αž›αžΎαž”αŸ’αžšαž’αžΆαž“αž”αž‘αž“αŸƒαž˜αž»αžαž„αžΆαžš (beta) αžšαž”αžŸαŸ‹ GitHub - αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αŸ”

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

αž”αž»αžšαŸαž”αŸ’αžšαžœαžαŸ’αžαž·

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

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

αž‡αžΆαž€αžΆαžšαž–αž·αžαžŽαžΆαžŸαŸ‹ αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž‡αž˜αŸ’αžšαžΎαžŸαž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž˜αž“αž»αžŸαŸ’αžŸαž‚αŸ’αžšαž”αŸ‹αžšαžΌαž”αŸ”

αž‡αž˜αŸ’αžšαžΎαžŸαž…αž»αž„αž€αŸ’αžšαŸ„αž™αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž‚αžΊ GitHub Pages αŸ”

αž’αŸ†αž–αžΈαž‘αŸ†αž–αŸαžš

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

αžƒαŸ’αž›αžΆαŸ†αž„αž‚αž˜αŸ’αžšαŸ„αž„αž”αŸ’αžšαžΎαžŸαžΆαžαžΆαž˜αž½αž™αŸ” gh-pagesαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αŸαž αž‘αŸ†αž–αŸαžšαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ - αžƒαŸ’αž›αžΆαŸ†αž„αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡ username.github.io αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž”αŸ’αžšαž—αž–αž‚αŸαž αž‘αŸ†αž–αŸαžšαž“αŸ…αž€αŸ’αž“αž»αž„ master αžŸαžΆαžαžΆαŸ”

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

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

αž”αž‰αŸ’αž αžΆαž€αžΎαžαž‘αžΎαž„

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

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

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

αž’αŸ†αž–αžΈαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž”αž„αŸ’αž€αžΎαžαž‘αŸ†αž–αŸαžšαž‹αž·αžαž·αžœαž“αŸ’αž

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

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

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

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

__

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž”αž‰αŸ’αž αžΆ

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

αž§αž”αž€αžšαžŽαŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™

αž§αž”αž€αžšαžŽαŸαžŠαŸ‚αž›αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαŸ–

  • αžŸαž€αž˜αŸ’αž˜αž—αžΆαž– GitHub;
  • Python3.7;
  • Pelican;
  • αž αŸ’αž‚αžΈαž;
  • αž‘αŸ†αž–αŸαžš GitHub αŸ”

αž€αžΆαžšαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆ

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

αžŸαž€αž˜αŸ’αž˜αž—αžΆαž– GitHub αž‡αžΆ CI/CD αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Static Generator Site αž“αž·αž„ GitHub Pages
αž€αžΆαžšαž–αž·αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαž˜αž»αžαž„αžΆαžšαžαŸ’αž˜αžΈαžŠαŸ„αž™ Github αžαŸ’αž›αž½αž“αžœαžΆαž•αŸ’αž‘αžΆαž›αŸ‹

αž€αžΆαžšαžŸαžšαžŸαŸαžšαžŸαŸ’αž‚αŸ’αžšαžΈαž”αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ„αž™αž”αž„αŸ’αž€αžΎαžαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αž€αŸ’αž“αž»αž„αžαžαž―αž€αžŸαžΆαžš .github αž“αž·αž„αžαžαžšαž„αžšαž”αžŸαŸ‹αžœαžΆαŸ” workflows. αž“αŸαŸ‡αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαžŠαŸ„αž™αžŠαŸƒ αž¬αž–αžΈαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αž·αž–αž“αŸ’αž’αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž‘αžΆαŸ†αž„αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αž“αŸ…αž›αžΎαž‘αŸ†αž–αŸαžšαžƒαŸ’αž›αžΆαŸ†αž„αŸ”

αžŸαž€αž˜αŸ’αž˜αž—αžΆαž– GitHub αž‡αžΆ CI/CD αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Static Generator Site αž“αž·αž„ GitHub Pages
αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαž‘αž˜αŸ’αžšαž„αŸ‹αžŸαŸ’αž‚αŸ’αžšαžΈαž”αž‘αž‘αŸ

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

name: CI    # Π½Π°Π·Π²Π°Π½ΠΈΠ΅ скрипта: Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Actions

on: [push]  # дСйствиС, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ запускаСтся Π΄Π°Π½Π½Ρ‹ΠΉ скрипт

jobs:       # Ρ€ΠΎΠ±ΠΎΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ
  build:    # сборка, которая..

    runs-on: ubuntu-latest      # ..Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π° Π½Π° основС этого ΠΎΠ±Ρ€Π°Π·Π°

    steps:              # шаги ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π½Ρ‹ послС запуска ΠΎΠ±Ρ€Π°Π·Π°
    - uses: actions/checkout@v1     # ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π² ΡΠ°ΠΌΡƒΡŽ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ
    - name: Run a one-line script   # имя Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½ΠΎΠΌΠ΅Ρ€ 1
      run: echo Hello, world!       # ΡΡƒΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½ΠΎΠΌΠ΅Ρ€ 1 (bash-ΠΊΠΎΠΌΠ°Π½Π΄Π° записана Π² ΠΎΠ΄Π½Ρƒ строку)
    - name: Run a multi-line script   # имя Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½ΠΎΠΌΠ΅Ρ€ 2
      run: |                    # ΡΡƒΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½ΠΎΠΌΠ΅Ρ€ 2 (многострочная)
        echo Add other actions to build,
        echo test, and deploy your project.

αž…αžΌαžšαž™αžΎαž„αžŸαžšαžŸαŸαžšαžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž‚αŸ†αžšαžΌαŸ–

0) αž’αŸ’αž“αž€αž€αŸαž’αžΆαž…αž‘αž»αž€αžˆαŸ’αž˜αŸ„αŸ‡ "CI" αž”αžΆαž“αŸ” αžœαžΆαž‡αžΆαž”αž‰αŸ’αž αžΆαž“αŸƒαžšαžŸαž‡αžΆαžαž·αŸ”

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

on:
  push

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

  build:
    runs-on: ubuntu-latest

3) αž“αŸ…αž€αŸ’αž“αž»αž„αž‡αŸ†αž αžΆαž“αžŠαŸ†αž”αžΌαž„αž™αžΎαž„αž“αžΉαž„αžšαŸ€αž”αž…αŸ†αž”αžšαž·αžŸαŸ’αžαžΆαž“αžŠαžΎαž˜αŸ’αž”αžΈαžšαŸ€αž”αž…αŸ†αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž„αžΆαžšαžŸαŸ†αžαžΆαž“αŸ‹αŸ”

3.1) αž‘αŸ…αžŸαžΆαžαžΆαžŠαŸ‚αž›αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžš (αž‡αŸ†αž αžΆαž“αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžš checkout):

- uses: actions/checkout@v1

3.2) αžŠαŸ†αž‘αžΎαž„ PythonαŸ–

    - name: Set up Python
      uses: actions/setup-python@v1
      with:
        python-version: 3.7

3.3) αžŠαŸ†αž‘αžΎαž„αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αž“αŸƒαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž›αžΎαž„αžšαž”αžŸαŸ‹αž™αžΎαž„:

    - name: Install dependencies
      run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt

3.4) αž”αž„αŸ’αž€αžΎαžαžαžαžŠαŸ‚αž›αž‘αŸ†αž–αŸαžšαž‚αŸαž αž‘αŸ†αž–αŸαžšαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαŸ–

   - name: Make output folder
      run: mkdir output

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

   - name: Clone master branch
      run: git clone "https://${{ secrets.ACCESS_TOKEN }}@github.com/${GITHUB_ACTOR}/${GITHUB_ACTOR}.github.io.git" --branch master --single-branch ./output

αž‡αŸ†αž αžΆαž“αž“αŸαŸ‡αž αŸ…αž’αžαŸαžšαž”αŸ’αžšαž–αŸαž“αŸ’αž’αŸ–

  • ធថេរ GITHUB_ACTOR GitHub αžŠαŸ†αž‘αžΎαž„αžŠαŸ„αž™αžαŸ’αž›αž½αž“αžœαžΆ αž αžΎαž™αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžˆαŸ’αž˜αŸ„αŸ‡αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžαžΆαž˜αžšαž™αŸˆαž€αŸ†αž αž»αžŸαžŠαŸ‚αž›αžŸαŸ’αž‚αŸ’αžšαžΈαž”αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αŸ”
  • ធថេរ secrets.ACCESS_TOKEN αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαž αž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„ Githubαž™αžΎαž„αž’αžΆαž…αž†αŸ’αž›αž„αž€αžΆαžαŸ‹αžœαžΆαž‡αžΆαž’αžαŸαžšαž”αžšαž·αžŸαŸ’αžαžΆαž“αžŠαŸ„αž™αž€αŸ†αžŽαžαŸ‹αžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž‘αžΆαŸ†αž„ Secrets αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžƒαŸ’αž›αžΆαŸ†αž„αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” αžŸαžΌαž˜αž…αŸ†αžŽαžΆαŸ†αžαžΆαž€αŸ’αž“αž»αž„αž’αŸ†αž‘αž»αž„αž–αŸαž›αž‡αŸ†αž“αžΆαž“αŸ‹ αžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αž„αžΆαžαŸ‹αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž™αžΎαž„αž˜αŸ’αžαž„ αžœαžΆαž“αžΉαž„αž˜αž·αž“αž˜αžΆαž“αžŸαž·αž‘αŸ’αž’αž·αž…αžΌαž›αž”αŸ’αžšαžΎαžœαžΆαž‘αŸ€αžαž‘αŸαŸ” αž€αŸαžŠαžΌαž…αž‡αžΆαžαž˜αŸ’αž›αŸƒαž“αŸƒαž’αžΆαžαž»αžŸαž˜αŸ’αž„αžΆαžαŸ‹αŸ”

5) αž…αžΌαžšαž”αž“αŸ’αžαž‘αŸ…αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž‘αŸ†αž–αŸαžšαžšαž”αžŸαŸ‹αž™αžΎαž„αŸ–

   - name: Generate static pages
      run: pelican content -o output -s publishconf.py

αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΌαž“αž‘αŸ…αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž›αžΎαž„αž‚αžΊαž‘αž‘αž½αž›αžαž»αžŸαžαŸ’αžšαžΌαžœαž…αŸ†αž–αŸ„αŸ‡αžαžαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‰αžΎ (-o output) αž“αž·αž„αž―αž€αžŸαžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŠαŸ‚αž›αž™αžΎαž„αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž (-s publishconf.py; αž’αŸ’αž“αž€αž’αžΆαž…αž’αžΆαž“αž’αŸ†αž–αžΈαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ†αž”αŸ‚αž€αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“ αž“αž·αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αž•αŸ’αžŸαžΆαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžš Pelican).

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

6) αžαŸ„αŸ‡αžšαŸ€αž”αž…αŸ† git αž“αž·αž„αž›αž·αž”αž·αž€αŸ’αžšαž˜αž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžšαž”αžŸαŸ‹αž™αžΎαž„αŸ–

    - name: Set git config and add changes
      run: |
          git config --global user.email "${GITHUB_ACTOR}@https://users.noreply.github.com/"
          git config --global user.name "${GITHUB_ACTOR}"
          git add --all
      working-directory: ./output

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

7) αž…αžΌαžšαž”αž„αŸ’αž€αžΎαžαžŸαžΆαžšαž”αŸ’αžαŸαž‡αŸ’αž‰αžΆ αž’αŸ’αžœαžΎαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš αž“αž·αž„αžšαž»αž‰αž–αž½αž€αžœαžΆαž‘αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡β€‹αžαžΆβ€‹αž€αžΆαžšβ€‹αž”αŸ’αžŠαŸαž‡αŸ’αž‰αžΆβ€‹αž˜αž·αž“β€‹αž₯αžβ€‹αž”αŸ’αžšαž™αŸ„αž‡αž“αŸβ€‹αž‘αŸ αž αžΎαž™β€‹αžŠαžΌαž…αŸ’αž“αŸαŸ‡β€‹αž˜αž·αž“β€‹αž”αž„αŸ’αž€αžΎαžβ€‹αž€αŸ†αž αž»αžŸβ€‹αž€αŸ’αž“αž»αž„β€‹αž€αžΆαžšβ€‹αžœαžΆαž™β€‹αž”αž€ (αž›αž‘αŸ’αž’αž•αž›β€‹αž›αž‘αŸ’αž’αž•αž›β€‹αž‚αžΊβ€‹αž˜αž·αž“β€‹αž˜αŸ‚αž“ 0) - αž‡αžΆαžŠαŸ†αž”αžΌαž„ αžŸαžΌαž˜αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαžΆαžαžΎαžœαžΆαž…αžΆαŸ†αž”αžΆαž…αŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ’αžαŸαž‡αŸ’αž‰αžΆαž…αž·αžαŸ’αž αž“αž·αž„αž‡αŸ†αžšαž»αž‰αž’αŸ’αžœαžΈαž˜αž½αž™αž‘αžΆαž›αŸ‹αžαŸ‚αžŸαŸ„αŸ‡αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŠαžΌαž…αž“αŸαŸ‡αž™αžΎαž„αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ git diff-index --quiet --cached HEAD -- αžŠαŸ‚αž›αž“αžΉαž„αž”αž‰αŸ’αž…αŸαž‰αž‘αŸ…αžŸαŸ’αžαžΆαž“αžΈαž™ 0 αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αž€αŸ†αžŽαŸ‚αž˜αž»αž“αž“αŸƒαž‚αŸαž αž‘αŸ†αž–αŸαžš αž“αž·αž„ 1 αž˜αžΆαž“αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž”αŸ‚αž”αž“αŸαŸ‡αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž™αžΎαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž“αŸαŸ‡αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž“αŸ…αž€αŸ’αž“αž»αž„αž–αŸαžαŸŒαž˜αžΆαž“αž’αŸ†αž–αžΈαž€αžΆαžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž“αŸƒαžŸαŸ’αž‚αŸ’αžšαžΈαž” αž™αžΎαž„αž“αžΉαž„αž€αžαŸ‹αžαŸ’αžšαžΆαž–αŸαžαŸŒαž˜αžΆαž“αž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž’αŸ†αž–αžΈαžŸαŸ’αžαžΆαž“αž—αžΆαž–αž“αŸƒαž‚αŸαž αž‘αŸ†αž–αŸαžšαž“αŸ…αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž“αŸαŸ‡ αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™αž€αžΆαžšαž‚αžΆαŸ†αž„αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž· αž αžΎαž™αž•αŸ’αž‰αžΎαž˜αž€αž™αžΎαž„αž“αžΌαžœαžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαž’αŸ†αž–αžΈαž€αžΆαžšαž‚αžΆαŸ†αž„αžŸαŸ’αž‚αŸ’αžšαžΈαž”αŸ”

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

   - name: Push and send notification
      run: |
          COMMIT_MESSAGE="Update pages on $(date +'%Y-%m-%d %H:%M:%S')"
          git diff-index --quiet --cached HEAD -- && echo "No changes!" && exit 0 || echo $COMMIT_MESSAGE
          # Only if repo have changes
          git commit -m "${COMMIT_MESSAGE}"
          git push https://${{ secrets.ACCESS_TOKEN }}@github.com/${GITHUB_ACTOR}/${GITHUB_ACTOR}.github.io.git master
      working-directory: ./output

αž›αž‘αŸ’αž’αž•αž›

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

αž›αŸαžαž€αžΌαžŠαž–αŸαž‰

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

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

name: Push content to the user's GitHub pages repository

on:
  push

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v1
    - name: Set up Python
      uses: actions/setup-python@v1
      with:
        python-version: 3.7
    - name: Install dependencies
      run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt
    - name: Make output folder
      run: mkdir output
    - name: Clone master branch
      run: git clone "https://${{ secrets.ACCESS_TOKEN }}@github.com/${GITHUB_ACTOR}/${GITHUB_ACTOR}.github.io.git" --branch master --single-branch ./output
    - name: Generate static pages
      run: pelican content -o output -s publishconf.py
    - name: Set git config and add changes
      run: |
          git config --global user.email "${GITHUB_ACTOR}@https://users.noreply.github.com/"
          git config --global user.name "${GITHUB_ACTOR}"
          git add --all
      working-directory: ./output
    - name: Push and send notification
      run: |
          COMMIT_MESSAGE="Update pages on $(date +'%Y-%m-%d %H:%M:%S')"
          git diff-index --quiet --cached HEAD -- && echo "No changes!" && exit 0 || echo $COMMIT_MESSAGE
          git commit -m "${COMMIT_MESSAGE}"
          git push https://${{ secrets.ACCESS_TOKEN }}@github.com/${GITHUB_ACTOR}/${GITHUB_ACTOR}.github.io.git master
          curl "https://api.telegram.org/bot${{ secrets.BOT_TOKEN }}/sendMessage?text=$COMMIT_MESSAGE %0ALook at ${GITHUB_ACTOR}.github.io %0ARepository%3A github.com/${GITHUB_ACTOR}/${GITHUB_ACTOR}.github.io&chat_id=${{ secrets.ADMIN_ID }}"
      working-directory: ./output

αžšαžΌαž”αžαžαž’αŸαž€αŸ’αžšαž„αŸ‹

αžŸαž€αž˜αŸ’αž˜αž—αžΆαž– GitHub αž‡αžΆ CI/CD αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Static Generator Site αž“αž·αž„ GitHub Pages
αž›αž‘αŸ’αž’αž•αž›β€‹αž“αŸƒβ€‹αž€αžΆαžšβ€‹αžšαžαŸ‹β€‹αž˜αž½αž™β€‹αžŠαŸ‚αž›β€‹αž”αž„αŸ’αž αžΆαž‰β€‹αž€αŸ’αž“αž»αž„β€‹αž•αŸ’αž‘αžΆαŸ†αž„β€‹αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–β€‹αž“αŸƒβ€‹αžƒαŸ’αž›αžΆαŸ†αž„β€‹αž”αŸ’αžšαž—αž–

αžŸαž€αž˜αŸ’αž˜αž—αžΆαž– GitHub αž‡αžΆ CI/CD αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Static Generator Site αž“αž·αž„ GitHub Pages
αžŸαžΆαžšαž–αžΈ bot αž’αŸ†αž–αžΈαž€αžΆαžšαž”αž‰αŸ’αž…αž”αŸ‹αžŸαŸ’αž‚αŸ’αžšαžΈαž”

αžαŸ†αžŽαž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸ

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

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

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