Vivasoft-logo

ā§Ŧ.ā§Ģ āĻ—āĻŋāϟāĻšāĻžāĻŦ – āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟāĻŋāĻ‚ āĻ—āĻŋāϟāĻšāĻžāĻŦ

āφāĻŽāϰāĻž GitHub-āĻāϰ āϏāĻŽāĻ¸ā§āϤ āĻĒā§āϰāϧāĻžāύ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ āĻāĻŦāĻ‚ āĻ“ā§ŸāĻžāĻ°ā§āĻ•āĻĢā§āϞ⧋ (workflows) āĻ•āĻ­āĻžāϰ āĻ•āϰ⧇āĻ›āĻŋ, āϤāĻŦ⧇ āϝ⧇ āϕ⧋āύāĻ“ āĻŦāĻĄāĻŧ āĻ—ā§āϰ⧁āĻĒ  āĻŦāĻž āĻĒā§āϰ⧋āĻœā§‡āĻ•ā§āĻŸā§‡ āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāχāĻœā§‡āĻļāύ āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇ āĻ…āĻĨāĻŦāĻž āĻāĻ•ā§āϏāϟāĻžāϰāύāĻžāϞ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āĻļāύ āĻĒā§āĻ°ā§Ÿā§‹āϜāύ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āϏ⧌āĻ­āĻžāĻ—ā§āϝāĻŦāĻļāϤ, GitHub āĻ…āύ⧇āĻ• āωāĻĒāĻžāϝāĻŧ⧇ āĻŦ⧇āĻļ āϏāĻšāĻœā§‡ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāϝ⧋āĻ—ā§āϝ (hackable) āĨ¤ āĻāχ āĻ…āĻ§ā§āϝāĻžā§Ÿā§‡ āφāĻŽāϰāĻž āĻ•āĻ­āĻžāϰ āĻ•āϰāĻŦ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻ—āĻŋāϟāĻšāĻžāĻŦ āĻšā§āĻ• (Hook) āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻāĻŦāĻ‚ āĻāϰ API āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻ—āĻŋāϟāĻšāĻžāĻŦāϕ⧇ āχāĻšā§āϛ⧇āĻŽāϤ āĻ•āĻžāĻœā§‡ āϞāĻžāĻ—āĻžāϤ⧇ āĻĒāĻžāϰāĻŋāĨ¤

āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āĻāĻŦāĻ‚ āĻšā§āĻ• (Service and Hooks)

āĻ—āĻŋāϟāĻšāĻžāĻŦ āϰāĻŋāĻĒā§‹āϜāĻŋāϟāϰāĻŋ āĻ…ā§āϝāĻžāĻĄāĻŽāĻŋāύāĻŋāĻ¸ā§āĻŸā§āϰ⧇āĻļāύ⧇āϰ āĻšā§āĻ•āϏ āĻāĻŦāĻ‚ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ⧇āϏ āĻšāϞ āĻ—āĻŋāϟāĻšāĻžāĻŦāϕ⧇ āĻāĻ•ā§āϏāϟāĻžāϰāύāĻžāϞ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āϰ āϏāĻžāĻĨ⧇ āχāĻ¨ā§āϟāĻžāϰāĻ…ā§āϝāĻžāĻ•ā§āϟ āĻ•āϰāĻžāϰ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϏāĻšāϜāϤāĻŽ āωāĻĒāĻžāϝāĻŧāĨ¤

āϏāĻžāĻ°ā§āĻ­āĻŋāϏāϏāĻŽā§‚āĻš (Services)

āĻĒā§āϰāĻĨāĻŽā§‡ āφāĻŽāϰāĻž āϏāĻžāĻ°ā§āĻ­āĻŋāϏāϗ⧁āϞ⧋ āĻĻ⧇āϖ⧇ āύ⧇āĻŦāĨ¤ āφāĻĒāύāĻžāϰ āϰāĻŋāĻĒā§‹āϜāĻŋāϟāϰāĻŋāϰ āϏ⧇āϟāĻŋāĻ‚āϏ⧇ āĻšā§āĻ• āĻāĻŦāĻ‚ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āĻļāύ āωāĻ­āϝāĻŧāχ āĻĒāĻžāĻ“āϝāĻŧāĻž āϝāĻžāĻŦ⧇, āϝ⧇āĻ–āĻžāύ⧇ āφāĻŽāϰāĻž āĻĒā§‚āĻ°ā§āĻŦ⧇ Collaborators āϝ⧋āĻ— āĻ•āϰāĻžāϰ āĻāĻŦāĻ‚ āφāĻĒāύāĻžāϰ āĻĒā§āϰ⧋āĻœā§‡āĻ•ā§āĻŸā§‡āϰ āĻĄāĻŋāĻĢāĻ˛ā§āϟ āĻŦā§āϰāĻžāĻžā§āϚ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻžāϰ āĻŦāĻŋāώāϝāĻŧ⧇ āĻĻ⧇āϖ⧇āĻ›āĻŋāĨ¤ “Webhooks and Services” āĻŸā§āϝāĻžāĻŦ⧇āϰ āĻ…āϧ⧀āύ⧇ āφāĻĒāύāĻŋ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āĻāĻŦāĻ‚ āĻšā§āĻ•āϏ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻŦāĻŋāĻ­āĻžāĻ— āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāĻŦ⧇āύāĨ¤
scripting-01-services
āϚāĻŋāĻ¤ā§āϰ 129. āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āĻāĻŦāĻ‚ āĻšā§āĻ• āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻŦāĻŋāĻ­āĻžāĻ—

āφāĻĒāύāĻŋ āĻŦ⧇āϛ⧇ āύāĻŋāϤ⧇ āĻĒāĻžāϰ⧇āύ āĻāĻŽāύ āĻĄāϜāύ āĻĄāϜāύ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āϰāϝāĻŧ⧇āϛ⧇, āϝāĻžāϰ āĻŦ⧇āĻļāĻŋāϰāĻ­āĻžāĻ—āχ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻŦāĻžāĻŖāĻŋāĻœā§āϝāĻŋāĻ• āĻāĻŦāĻ‚ āĻ“āĻĒ⧇āύ āϏ⧋āĻ°ā§āϏ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡ āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āĻļāύ āĻšāϝāĻŧ⧎ āϤāĻžāĻĻ⧇āϰ āĻŦ⧇āĻļāĻŋāϰāĻ­āĻžāĻ—āχ āĻ•āĻ¨ā§āϟāĻŋāύāĻŋāĻ‰ā§ŸāĻžāϏ āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āĻļāύ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ, āĻŦāĻžāĻ— āĻāĻŦāĻ‚ āχāĻ¸ā§āϝ⧁ āĻŸā§āĻ°ā§āϝāĻžāĻ•āĻžāϰ, āĻšā§āϝāĻžāϟ āϰ⧁āĻŽ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻāĻŦāĻ‚ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āϰ āϜāĻ¨ā§āϝāĨ¤ āφāĻŽāϰāĻž āĻāĻ•āϟāĻŋ āϖ⧁āĻŦ āϏāĻžāϧāĻžāϰāĻŖ āĻāĻ•āϟāĻŋ āχāĻŽā§‡āϞ āĻšā§āĻ• āϏ⧇āϟ āφāĻĒ āĻ•āϰāĻžāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻļ⧁āϰ⧁ āĻ•āϰāĻŦ⧎ āφāĻĒāύāĻŋ āϝāĻĻāĻŋ “Add Service” āĻĄā§āϰāĻĒāĻĄāĻžāωāύ āĻĨ⧇āϕ⧇ “email” āĻŦ⧇āĻ›ā§‡Â  āύ⧇āύ, āφāĻĒāύāĻŋ āχāĻŽā§‡āϞ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ⧇āϰ āĻŽāϤ⧋ āĻāĻ•āϟāĻŋ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻ¸ā§āĻ•ā§āϰāĻŋāύ āĻĒāĻžāĻŦ⧇āύāĨ¤

āϚāĻŋāĻ¤ā§āϰ 130. āχāĻŽā§‡āϞ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ

āĻāχ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āϝāĻĻāĻŋ āφāĻŽāϰāĻž “add service” āĻŦāĻžāϟāύāϟāĻŋ  āϚāĻžāĻĒāĻŋ, āϤāĻ–āύ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĒ⧁āĻļ⧇āϰ āϜāĻ¨ā§āϝ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āĻ āĻŋāĻ• āĻ•āϰāĻž āχāĻŽā§‡āχāϞ⧇ āĻāĻ•āϟāĻŋ āύ⧋āϟāĻŋāĻĢāĻŋāϕ⧇āĻļāύ āϝāĻžāĻŦ⧇āĨ¤ āϏāĻžāĻ°ā§āĻ­āĻŋāϏāϗ⧁āϞāĻŋ,  āĻ…āύ⧇āĻ•āϗ⧁āϞāĻŋ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āϧāϰāϪ⧇āϰ āχāϭ⧇āĻ¨ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āύ⧋āϟāĻŋāĻĢāĻŋāϕ⧇āĻļāύ āĻĒ⧇āϤ⧇ āĻĒāĻžāϰ⧇, āϤāĻŦ⧇ āĻŦ⧇āĻļāĻŋāϰāĻ­āĻžāĻ—āχ āϕ⧇āĻŦāϞ āĻĒ⧁āĻļ āχāϭ⧇āĻ¨ā§āϟāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āύ⧋āϟāĻŋāĻĢāĻŋāϕ⧇āĻļāύ āĻĒāĻžā§Ÿ āĻāĻŦāĻ‚ āϤāĻžāϰāĻĒāϰ āϏ⧇āχ āĻĄā§‡āϟāĻž āĻĻāĻŋāϝāĻŧ⧇ āĻ•āĻŋāϛ⧁ āĻ•āϰ⧇⧎

āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āϕ⧋āύ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āĻ—āĻŋāϟāĻšāĻžāĻŦ āĻāϰ āϏāĻžāĻĨ⧇ āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āϟ āĻ•āϰāϤ⧇ āϚāĻžāύ, āϤāĻŦ⧇ āĻĒā§āϰāĻĨāĻŽā§‡ āĻšā§‡āĻ• āĻ•āϰ⧁āύ āϝ⧇ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āϕ⧋āύ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āĻĻāĻŋā§Ÿā§‡ āϤāĻž āĻ•āϰāĻž āϏāĻŽā§āĻ­āĻŦ āĻ•āĻŋāύāĻžāĨ¤Â  āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āφāĻĒāύāĻžāϰ āϕ⧋āĻĄāĻŦ⧇āϏ⧇ āĻĒāϰ⧀āĻ•ā§āώāĻž āϚāĻžāϞāĻžāύ⧋āϰ āϜāĻ¨ā§āϝ āĻœā§‡āύāĻ•āĻŋāĻ¨ā§āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āύ , āφāĻĒāύāĻŋ āĻœā§‡āύāĻ•āĻŋāĻ¨ā§āϏ āĻŦāĻŋāĻ˛ā§āϟāχāύ āϏāĻžāĻ°ā§āĻ­āĻŋāĻ¸Â  āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āĻļāύ āĻāύāĻžāĻŦāĻ˛Â  āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āϝāĻžāϤ⧇ āϕ⧇āω āφāĻĒāύāĻžāϰ āϰāĻŋāĻĒā§‹āϏāĻŋāĻŸā§‹āϰāĻŋāĻ¤ā§‡Â  āĻĒ⧁āĻļ āĻ•āϰāϞ⧇āχ āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ āĻĒāϰ⧀āĻ•ā§āώāĻž āϚāĻžāϞāĻžāύ⧋ āĻļ⧁āϰ⧁ āĻšā§Ÿā§‡ āϝāĻžā§ŸāĨ¤

āĻšā§āĻ•āϏ

āφāĻĒāύāĻžāϰ āϝāĻĻāĻŋ āφāϰāĻ“ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āĻŋāϛ⧁āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāϝāĻŧ āĻŦāĻž āφāĻĒāύāĻŋ āĻāĻŽāύ āĻāĻ•āϟāĻŋ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āĻŦāĻž āϏāĻžāχāĻŸā§‡āϰ āϏāĻžāĻĨ⧇ āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āϟ āĻ•āϰāϤ⧇ āϚāĻžāύ āϝāĻž āĻāχ āϤāĻžāϞāĻŋāĻ•āĻžāϝāĻŧ āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ āύāϝāĻŧ, āφāĻĒāύāĻŋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ āφāϰāĻ“ āĻœā§‡āύ⧇āϰāĻŋāĻ• āĻšā§āĻ• āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āĻ—āĻŋāϟāĻšāĻžāĻŦ āϰāĻŋāĻĒā§‹āϜāĻŋāϟāϰāĻŋ āĻšā§āĻ•āϗ⧁āϞāĻŋ āĻŦ⧇āĻļ āϏāĻšāϜāĨ¤ āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ URL āĻ āĻŋāĻ• āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ GitHub āφāĻĒāύāĻžāϰ āĻ āĻŋāĻ• āĻ•āϰāĻžÂ  āχāϭ⧇āĻ¨ā§āĻŸā§‡ āϏ⧇āχ URL-āĻ āĻāĻ•āϟāĻŋ HTTP āĻĒ⧇āϞ⧋āĻĄ āĻĒā§‹āĻ¸ā§āϟ āĻ•āϰāĻŦ⧇āĨ¤ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻāϟāĻŋ āϝ⧇āĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇, āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ GitHub āĻšā§āĻ• āĻĒ⧇āϞ⧋āĻĄ āϞāĻŋāϏ⧇āύ⧇āϰ (listen) āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āϛ⧋āϟ āĻ“āϝāĻŧ⧇āĻŦ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āϏ⧇āϟāφāĻĒ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āĻāĻŦāĻ‚ āϤāĻžāϰāĻĒāϰ⧇ āĻāϟāĻŋāϤ⧇ āĻĒā§‹āĻ¸ā§āĻŸÂ  āĻšāϞ⧇ āϏ⧇āχ āĻĄā§‡āϟāĻž āĻĻāĻŋāϝāĻŧ⧇ āĻ•āĻŋāϛ⧁ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āĻāĻ•āϟāĻŋ āĻšā§āĻ• āĻāύāĻžāĻŦāĻ˛Â  āĻ•āϰāϤ⧇, āφāĻĒāύāĻŋ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āĻāĻŦāĻ‚ āĻšā§āĻ• āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻŦāĻŋāĻ­āĻžāϗ⧇ “add webhook” āĻŦāĻžāϟāύāϟāĻŋ  āĻ•ā§āϞāĻŋāĻ• āĻ•āϰ⧁āύ ⧎ āĻāϟāĻŋ āφāĻĒāύāĻžāϕ⧇ āĻāĻ•āϟāĻŋ āĻĒ⧇āĻœā§‡Â  āύāĻŋāϝāĻŧ⧇ āφāϏāĻŦ⧇ āϝāĻž āĻĻ⧇āĻ–āϤ⧇ āĻ“āϝāĻŧ⧇āĻŦ āĻšā§āĻ• āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ⧇āϰ āĻŽāϤ⧋ āĨ¤
āϚāĻŋāĻ¤ā§āϰ ā§§ā§Šā§§. āĻ“āϝāĻŧ⧇āĻŦ āĻšā§āĻ• āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ

āĻāĻ•āϟāĻŋ āĻ“āϝāĻŧ⧇āĻŦ āĻšā§āϕ⧇āϰ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻŦ⧇āĻļ āϏāĻšāϜāĨ¤ āĻŦ⧇āĻļāĻŋāϰāĻ­āĻžāĻ— āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āφāĻĒāύāĻŋ āϕ⧇āĻŦāϞ āĻāĻ•āϟāĻŋ URL āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āϏāĻŋāĻ•ā§āϰ⧇āϟ-āϕ⧀ āϞāĻŋāϖ⧁āύ āĻāĻŦāĻ‚ “add webhook” āϚāĻžāĻĒ⧁āύāĨ¤ āĻ•āĻŋāϛ⧁ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āϰāϝāĻŧ⧇āϛ⧇ āϝ⧇āϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āφāĻĒāύāĻŋ āϚāĻžāύ āϝ⧇ āχāϭ⧇āĻ¨ā§āϟāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ GitHub āφāĻĒāύāĻžāϕ⧇ āĻāĻ•āϟāĻŋ āĻĒ⧇āϞ⧋āĻĄ āĻĒāĻžāĻ āĻžāϤ⧇ — āĻĄāĻŋāĻĢāĻ˛ā§āϟ āĻšāϞ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ push āχāϭ⧇āĻ¨ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻĒ⧇āϞ⧋āĻĄ āĻĒāĻžāĻ“āϝāĻŧāĻž, āϝāĻ–āύ āϕ⧇āω āφāĻĒāύāĻžāϰ āϰāĻŋāĻĒā§‹āϜāĻŋāϟāϰāĻŋāϰ āϝ⧇āϕ⧋āύ⧋ āĻļāĻžāĻ–āĻžāϝāĻŧ āύāϤ⧁āύ āϕ⧋āĻĄ āĻĒ⧁āĻļ āĻ•āϰ⧇āĨ¤

āφāϏ⧁āύ āĻāĻ•āϟāĻŋ āĻ“āϝāĻŧ⧇āĻŦ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ⧇āϰ āĻāĻ•āϟāĻŋ āϛ⧋āϟ āωāĻĻāĻžāĻšāϰāĻŖ āĻĻ⧇āĻ–āĻŋ āϝāĻžāĻ¤ā§‡Â  āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ āĻ“āϝāĻŧ⧇āĻŦ āĻšā§āĻ• āϏ⧇āϟ āφāĻĒ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ⧎ āφāĻŽāϰāĻž āϰ⧁āĻŦāĻŋ āĻ“āϝāĻŧ⧇āĻŦ āĻĢā§āϰ⧇āĻŽāĻ“āϝāĻŧāĻžāĻ°ā§āĻ• āϏāĻŋāύāĻžāĻŸā§āϰāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ āϝ⧇āĻšā§‡āϤ⧁ āĻāϟāĻŋ āĻŽā§‹āϟāĻžāĻŽā§āϟāĻŋ āϏāĻ‚āĻ•ā§āώāĻŋāĻĒā§āϤ āĻāĻŦāĻ‚ āφāĻŽāϰāĻž āϕ⧀ āĻ•āϰāĻ›āĻŋ āϤāĻž āφāĻĒāύāĻŋ āϏāĻšāĻœā§‡āχ āĻĻ⧇āĻ–āϤ⧇ āϏāĻ•ā§āώāĻŽ āĻšāĻŦ⧇āύāĨ¤

āϧāϰāĻž āϝāĻžāĻ• āφāĻŽāϰāĻž āĻāĻ•āϟāĻŋ āχāĻŽā§‡āϞ āĻĒ⧇āϤ⧇ āϚāĻžāχ āϝāĻĻāĻŋ āϕ⧋āύ⧋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻŦā§āϝāĻ•ā§āϤāĻŋ āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻĢāĻžāχāϞ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āϰāĻŋāĻĒā§‹āϏāĻŋāĻŸā§‹āϰāĻŋāĻ°Â  āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻŦā§āϰāĻžāĻžā§āĻšā§‡Â  āĻĒ⧁āĻļ āĻ•āϰ⧇āĨ¤ āφāĻŽāϰāĻž āύāĻŋāĻšā§‡āϰ āϕ⧋āĻĄāϟāĻŋāϰ āĻŽāϤāύ āĻ•āĻŋāϛ⧁ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋāĨ¤

				
					require 'sinatra'
require 'json'
require 'mail'

post '/payload' do
  push = JSON.parse(request.body.read) # parse the JSON

  # gather the data we're looking for
  pusher = push["pusher"]["name"]
  branch = push["ref"]

  # get a list of all the files touched
  files = push["commits"].map do |commit|
    commit['added'] + commit['modified'] + commit['removed']
  end
  files = files.flatten.uniq

  # check for our criteria
  if pusher == 'schacon' &&
       branch == 'ref/heads/special-branch' &&
     files.include?('special-file.txt')

    Mail.deliver do
      from     'tchacon@example.com'
      to       'tchacon@example.com'
      subject  'Scott Changed the File'
      body     "ALARM"
    end
  end
end
				
			

āĻāĻ–āĻžāύ⧇ āφāĻŽāϰāĻž JSON āĻĒ⧇āϞ⧋āĻĄ āύāĻŋāĻšā§āĻ›āĻŋ āϝāĻž GitHub āĻĨ⧇āϕ⧇ āĻĒāĻžāĻ“ā§ŸāĻž āĻāĻŦāĻ‚ āϕ⧇ āĻāϟāĻŋāϕ⧇ āĻĒ⧁āĻļ āĻ•āϰ⧇āϛ⧇ , āϤāĻžāϰāĻž āϕ⧋āύ āĻŦā§āϰāĻžāĻžā§āĻšā§‡ āĻĒ⧁āĻļ āĻ•āϰ⧇āĻ›ā§‡Â  āĻāĻŦāĻ‚ āĻĒ⧁āĻļ āĻ•āϰāĻž āϏāĻŽāĻ¸ā§āϤ āĻ•āĻŽāĻŋāϟāϗ⧁āϞāĻŋāϤ⧇ āϕ⧋āύ āĻĢāĻžāχāϞāϗ⧁āϞāĻŋ āĻ¸ā§āĻĒāĻ°ā§āĻļ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇ āϤāĻž āĻĻ⧇āĻ–āĻ›āĻŋāĨ¤ āϤāĻžāϰāĻĒāϰ⧇ āφāĻŽāϰāĻž āφāĻŽāĻžāĻĻ⧇āϰ āĻ•ā§āϰāĻžāχāĻŸā§‡āϰāĻŋ⧟āĻž āĻ…āύ⧁āϝāĻžā§Ÿā§€ āϝāĻĻāĻŋ āĻŽā§‡āϞ⧇ āϤāĻŦ⧇ āĻāĻ•āϟāĻŋ āχāĻŽā§‡āϞ āĻĒāĻžāĻ āĻžāχāĨ¤

āĻāχāϰāĻ•āĻŽ āĻ•āĻŋāϛ⧁ āĻĄā§‡āϭ⧇āϞāĻĒ  āĻāĻŦāĻ‚ āĻŸā§‡āĻ¸ā§āĻŸÂ  āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, āφāĻĒāύāĻžāϰ āĻ•āĻžāϛ⧇ āĻāĻ•āχ āĻ¸ā§āĻ•ā§āϰāĻŋāύ⧇ āĻāĻ•āϟāĻŋ āĻĄā§‡āϭ⧇āϞāĻĒāĻŋāĻ‚ āĻ•āύāϏ⧋āϞ āϰāϝāĻŧ⧇āϛ⧇ āϝ⧇āĻ–āĻžāύ⧇ āφāĻĒāύāĻŋ āĻšā§āĻ• āϏ⧇āϟ āĻ•āϰ⧇āϛ⧇āύ⧎ āφāĻĒāύāĻŋ āĻļ⧇āώ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āĻĄā§‡āϞāĻŋāĻ­āĻžāϰāĻŋ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāϰ⧇āύ āϝāĻž GitHub āϏ⧇āχ āĻ“āϝāĻŧ⧇āĻŦāĻšā§āϕ⧇āϰ āϜāĻ¨ā§āϝ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰ⧇āϛ⧇āĨ¤ āĻĒā§āϰāϤāĻŋāϟāĻŋ āϏāĻĢāĻ˛Â  āĻšā§āϕ⧇āϰ āϜāĻ¨ā§āϝ āφāĻĒāύāĻŋ āĻĻ⧇āĻ–āĻ¤ā§‡Â  āĻĒāĻžāϰ⧇āύ āĻ•āĻ–āύ āĻāϟāĻŋ āĻĄā§‡āϞāĻŋāĻ­āĻžāĻ°Â  āĻ•āϰāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ, āĻāĻŦāĻ‚ āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āϟ āĻāĻŦāĻ‚ āϰ⧇āĻ¸ā§āĻĒāĻ¨ā§āĻ¸Â  āωāĻ­āϝāĻŧ⧇āϰ āĻŦāĻĄāĻŋ āĻāĻŦāĻ‚ āĻšā§‡āĻĄāĻžāϰāĨ¤ āĻāϟāĻŋ āφāĻĒāύāĻžāϰ āĻšā§āĻ•āϗ⧁āϞāĻŋ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻāĻŦāĻ‚ āĻĄāĻŋāĻŦāĻžāĻ— āĻ•āϰāĻž āĻ…āĻŦāĻŋāĻļā§āĻŦāĻžāĻ¸ā§āϝāĻ­āĻžāĻŦ⧇ āϏāĻšāϜ āĻ•āϰ⧇ āϤ⧋āϞ⧇āĨ¤

scripting-04-webhook-debug
āϚāĻŋāĻ¤ā§āϰ 132. āĻ“āϝāĻŧ⧇āĻŦ āĻšā§āĻ• āĻĄāĻŋāĻŦāĻžāĻ—āĻŋāĻ‚ āϤāĻĨā§āϝ
āĻāϟāĻŋāϰ āφāϰ⧇āĻ•āϟāĻŋ āĻĻ⧁āĻ°ā§āĻĻāĻžāĻ¨ā§āϤ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ āĻšāϞ āϝ⧇ āφāĻĒāύāĻŋ āϏāĻšāĻœā§‡āχ āφāĻĒāύāĻžāϰ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āϝ⧇ āϕ⧋āύāĻ“ āĻĒ⧇āϞ⧋āĻĄ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻĄā§‡āϞāĻŋāĻ­āĻžāϰāĻŋ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āĻ“āϝāĻŧ⧇āĻŦāĻšā§āĻ•āϗ⧁āϞāĻŋ āϕ⧀āĻ­āĻžāĻŦ⧇ āϞāĻŋāĻ–āϤ⧇ āĻšāϝāĻŧ āĻāĻŦāĻ‚ āφāĻĒāύāĻŋ āϝ⧇ āϏāĻŽāĻ¸ā§āϤ āϧāϰāϪ⧇āϰ āχāϭ⧇āĻ¨ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āĻļ⧁āύāϤ⧇ āĻĒāĻžāϰ⧇āύ āϏ⧇ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āφāϰāĻ“ āϤāĻĨā§āϝ⧇āϰ āϜāĻ¨ā§āϝ, https://developer.github.com/webhooks/- āĻ āĻ—āĻŋāϟāĻšāĻžāĻŦ āĻĄā§‡āϭ⧇āϞāĻĒāĻžāϰ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ⧇ āϝāĻžāύ āĨ¤

GitHub API

āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āĻāĻŦāĻ‚ āĻšā§āĻ•āϗ⧁āϞāĻŋ āφāĻĒāύāĻžāϕ⧇ āφāĻĒāύāĻžāϰ āϰāĻŋāĻĒā§‹āϜāĻŋāϟāϰāĻŋāϗ⧁āϞāĻŋāϤ⧇ āϘāĻŸā§‡ āϝāĻžāĻ“āϝāĻŧāĻž āχāϭ⧇āĻ¨ā§āϟāϗ⧁āϞāĻŋ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻĒ⧁āĻļ āύ⧋āϟāĻŋāĻĢāĻŋāϕ⧇āĻļāύ āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϤāĻĨā§āϝ āĻĻ⧇āϝāĻŧ , āϤāĻŦ⧇ āĻāχ āχāϭ⧇āĻ¨ā§āϟāϗ⧁āϞāĻŋ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āφāĻĒāύāĻžāϰ āφāϰāĻ“ āϤāĻĨā§āϝ⧇āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāϞ⧇ āϕ⧀ āĻšāĻŦ⧇? āϏāĻšāϝ⧋āĻ—ā§€āĻĻ⧇āϰ āϝ⧋āĻ— āĻ•āϰāĻž āĻŦāĻž āϞ⧇āĻŦ⧇āϞ āϏāĻ‚āĻ•ā§āϰāĻžāĻ¨ā§āϤ āϏāĻŽāĻ¸ā§āϝāĻžāϗ⧁āϞāĻŋāϰ āĻŽāϤ⧋ āĻ•āĻŋāϛ⧁ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰāĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāϞ⧇ āϕ⧀ āĻšāĻŦ⧇? āĻāĻ–āĻžāύ⧇āχ GitHub API āĻ•āĻžāĻœā§‡ āφāϏ⧇āĨ¤ āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāĻŸā§‡ āφāĻĒāύāĻŋ āϝāĻž āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āϤāĻžāϰ āĻĒā§āϰāĻžāϝāĻŧ āϏāĻŦ āĻ•āĻŋāϛ⧁ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ GitHub-āĻāϰ āĻĒā§āϰāϚ⧁āϰ API āĻāĻ¨ā§āĻĄāĻĒāϝāĻŧ⧇āĻ¨ā§āϟ āϰāϝāĻŧ⧇āϛ⧇āĨ¤ āĻāχ āĻŦāĻŋāĻ­āĻžāϗ⧇ āφāĻŽāϰāĻž āĻļāĻŋāĻ–āĻŦ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻ…āĻĨ⧇āĻ¨ā§āϟāĻŋāϕ⧇āϟ āĻ•āϰāĻž āϝāĻžāϝāĻŧ āĻāĻŦāĻ‚ API āĻāϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧋āĻ— āĻ•āϰāĻž āϝāĻžāϝāĻŧ, āϕ⧀āĻ­āĻžāĻŦ⧇ āĻāĻ•āϟāĻŋ āχāĻ¸ā§āϝ⧁āĻ¤ā§‡Â  āĻ•āĻŽāĻŋāϟ āĻ•āϰāϤ⧇ āĻšāϝāĻŧ āĻāĻŦāĻ‚ API-āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻāĻ•āϟāĻŋ āĻĒ⧁āϞ āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āĻŸā§‡āĻ°Â  āĻ…āĻŦāĻ¸ā§āĻĨāĻž āϕ⧀āĻ­āĻžāĻŦ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϤ⧇ āĻšāϝāĻŧāĨ¤

āĻŦ⧇āϏāĻŋāĻ•Â  āĻŦā§āϝāĻŦāĻšāĻžāϰ

āϏāĻŦāĻšā§‡ā§Ÿā§‡ āĻŦ⧇āϏāĻŋāĻ• āφāĻĒāύāĻŋ āϝāĻž āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ, āĻāĻŽāύ āĻāĻ•āϟāĻŋ GET āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āϟ āĻĒāĻžāϰāĻĢāĻ°ā§āĻŽ āĻ•āϰāĻŦ⧇āύ āϝāĻžāϰ āϜāĻ¨ā§āϝ⧇ āϕ⧋āύ āĻ…āĻĨ⧇āĻ¨ā§āϟāĻŋāϕ⧇āĻļāύ āϞāĻžāϗ⧇āύāĻžāĨ¤Â  āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻŦāĻž āĻāĻ•āϟāĻŋ āĻ“āĻĒ⧇āύ āϏ⧋āĻ°ā§āϏ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇ read -only āϤāĻĨā§āϝ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āϝāĻĻāĻŋ āφāĻŽāϰāĻž “schacon” āύāĻžāĻŽā§‡āϰ āĻāĻ•āϜāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āφāϰāĻ“ āϜāĻžāύāϤ⧇ āϚāĻžāχ, āϤāĻžāĻšāϞ⧇ āφāĻŽāϰāĻž āĻāϰāĻ•āĻŽ āĻ•āĻŋāϛ⧁ āϚāĻžāϞāĻžāϤ⧇ āĻĒāĻžāϰāĻŋ:
				
					$ curl https://api.github.com/users/schacon
{
  "login": "schacon",
  "id": 70,
  "avatar_url": "https://avatars.githubusercontent.com/u/70",
# ...
  "name": "Scott Chacon",
  "company": "GitHub",
  "following": 19,
  "created_at": "2008-01-27T17:19:28Z",
  "updated_at": "2014-06-10T02:37:23Z"
}
				
			

āĻ…āϰāĻ—āĻžāύāĻžāχāĻœā§‡āĻļāύ , āĻĒā§āϰāĻœā§‡āĻ•ā§āϟ , āχāĻ¸ā§āϝ⧁ , āĻ•āĻŽāĻŋāĻŸÂ  āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āϤāĻĨā§āϝ āĻĒāĻžāĻ“āϝāĻŧāĻžāϰ āϜāĻ¨ā§āϝ āĻāϰ āĻŽāϤ⧋ āĻ…āύ⧇āĻ•āϗ⧁āϞāĻŋ āĻāĻ¨ā§āĻĄāĻĒāϝāĻŧ⧇āĻ¨ā§āϟ āϰāϝāĻŧ⧇āϛ⧇ — āϝāĻž āφāĻĒāύāĻŋ GitHub-āĻ āĻĒāĻžāĻŦāϞāĻŋāĻ•āϞāĻŋ  āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āĻāĻŽāύāĻ•āĻŋ āφāĻĒāύāĻŋ āχāĻšā§āĻ›āĻžāĻŽāĻ¤Â  āĻŽāĻžāĻ°ā§āĻ•āĻĄāĻžāωāύ āϰ⧇āĻ¨ā§āĻĄāĻžāϰ āĻ•āϰāϤ⧇ āĻŦāĻž āĻāĻ•āϟāĻŋ .gitignore āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āϖ⧁āρāĻœā§‡ āĻĒ⧇āϤ⧇ API āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

				
					$ curl https://api.github.com/gitignore/templates/Java
{
  "name": "Java",
  "source": "*.class

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.jar
*.war
*.ear

# virtual machine crash logs, see https://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
"
}
				
			

āχāĻ¸ā§āϝ⧁āĻ¤ā§‡Â  āĻ•āĻŽāĻŋāϟ āĻ•āϰāĻž

āϝāĻžāχāĻšā§‹āĻ•, āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāĻŸā§‡ āϕ⧋āύ⧋ āĻ•āĻžāϜ āĻ•āϰāϤ⧇ āϚāĻžāύ āϝ⧇āĻŽāύ āϕ⧋āύ⧋ āχāĻ¸ā§āϝ⧁āϤ⧇ āĻ•āĻŽāĻŋāϟ āĻ•āϰāĻž āĻŦāĻž āĻĒ⧁āϞ āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āϟ āĻŦāĻž āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻŦā§āϝāĻ•ā§āϤāĻŋāĻ—āϤ āĻŦāĻŋāώāϝāĻŧāĻŦāĻ¸ā§āϤ⧁ āĻĻ⧇āĻ–āϤ⧇ āĻŦāĻž āχāĻ¨ā§āϟāĻžāϰāĻ…ā§āϝāĻžāĻ•ā§āϟ āĻ•āϰāϤ⧇ āϚāĻžāύ, āϤāĻžāĻšāϞ⧇ āφāĻĒāύāĻžāϕ⧇ āĻ…āĻĨ⧇āĻ¨ā§āϟāĻŋāϕ⧇āĻŸÂ  āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻ…āĻĨ⧇āĻ¨ā§āϟāĻŋāϕ⧇āĻļāύ⧇āϰ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āωāĻĒāĻžāϝāĻŧ āφāϛ⧇āĨ¤ āφāĻĒāύāĻŋ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āφāĻĒāύāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āύāĻžāĻŽ āĻāĻŦāĻ‚ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻĻāĻŋāϝāĻŧ⧇ āĻŦ⧇āϏāĻŋāĻ•Â  āĻ…āĻĨ⧇āύāϟāĻŋāϕ⧇āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ, āϤāĻŦ⧇ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻŦā§āϝāĻ•ā§āϤāĻŋāĻ—āϤ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻŸā§‹āϕ⧇āύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻ­āĻžāϞ. āφāĻĒāύāĻŋ āφāĻĒāύāĻžāϰ āϏ⧇āϟāĻŋāĻ‚āϏ āĻĒ⧃āĻˇā§āĻ āĻžāϰ “Applications” āĻŸā§āϝāĻžāĻŦ āĻĨ⧇āϕ⧇ āĻāϟāĻŋ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤
scripting-05-access-token
āϚāĻŋāĻ¤ā§āϰ 133. āφāĻĒāύāĻžāϰ āϏ⧇āϟāĻŋāĻ‚āϏ āĻĒ⧃āĻˇā§āĻ āĻžāϰ "āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ" āĻŸā§āϝāĻžāĻŦ āĻĨ⧇āϕ⧇ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻŸā§‹āϕ⧇āύ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ
āĻāϟāĻŋ āφāĻĒāύāĻžāϕ⧇ āϜāĻŋāĻœā§āĻžāĻžāϏāĻž āĻ•āϰāĻŦ⧇ āϝ⧇ āφāĻĒāύāĻŋ āĻāχ āĻŸā§‹āϕ⧇āύ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āĻŦāĻŋāĻŦāϰāϪ⧇āϰ āϜāĻ¨ā§āϝ āϕ⧋āύ āĻ¸ā§āϕ⧋āĻĒ āϚāĻžāύ⧎ āĻāĻ•āϟāĻŋ āĻ­āĻžāϞ āĻŦāĻŋāĻŦāϰāĻŖ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ āϝāĻžāϤ⧇ āφāĻĒāύāĻžāϰ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āĻŦāĻž āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āφāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āύāĻž āĻšāϞ⧇ āφāĻĒāύāĻŋ āĻŸā§‹āϕ⧇āύāϟāĻŋ āϏāĻšāĻœā§‡ āĻĢ⧇āϞ⧇ āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰ⧇āύ āĨ¤ GitHub āφāĻĒāύāĻžāϕ⧇ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻāĻ•āĻŦāĻžāϰ āĻŸā§‹āϕ⧇āύ āĻĻ⧇āĻ–āĻžāĻŦ⧇, āϤāĻžāχ āĻāϟāĻŋ āĻ•āĻĒāĻŋ āĻ•āϰāϤ⧇ āϭ⧁āϞāĻŦ⧇āύ āύāĻžāĨ¤ āφāĻĒāύāĻŋ āĻāĻ–āύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āύāĻžāĻŽ āĻāĻŦāĻ‚ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ āφāĻĒāύāĻžāϰ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‡ āĻ…āĻĨ⧇āĻ¨ā§āϟāĻŋāϕ⧇āϟ āĻ•āϰāϤ⧇ āĻāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āĻāϟāĻŋ āĻŦ⧇āϟāĻžāĻ°Â  āĻ•āĻžāϰāĻŖ āφāĻĒāύāĻŋ āϝāĻž āĻ•āϰāϤ⧇ āϚāĻžāύ āϤāĻžāϰ āϏ⧁āϝ⧋āĻ— āϏ⧀āĻŽāĻŋāϤ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āĻāĻŦāĻ‚ āĻŸā§‹āϕ⧇āύāϟāĻŋ āĻĒā§āϰāĻ¤ā§āϝāĻžāĻšāĻžāϰāϝ⧋āĻ—ā§āϝāĨ¤ āĻāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϞ⧇ āφāĻĒāύāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāϏ⧀āĻŽāĻžāĻ“ āĻŦāĻžā§œāĻŦā§‡Â  āϰāϝāĻŧ⧇āϛ⧇āĨ¤ āĻ…āĻĨ⧇āύāϟāĻŋāϕ⧇āĻļāύ āĻ›āĻžāĻĄāĻŧāĻž, āφāĻĒāύāĻŋ āĻĒā§āϰāϤāĻŋ āϘāĻ¨ā§āϟāĻžāϝāĻŧ 60āϟāĻŋ āĻ…āύ⧁āϰ⧋āϧ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧ āĻĨāĻžāĻ•āĻŦ⧇āύāĨ¤ āφāĻĒāύāĻŋ āĻ…āĻĨ⧇āύāϟāĻŋāϕ⧇āϟ āĻ•āϰāϞ⧇ āφāĻĒāύāĻŋ āĻĒā§āϰāϤāĻŋ āϘāĻ¨ā§āϟāĻžāϝāĻŧ 5,000āϟāĻŋ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āĻŸÂ  āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύāĨ¤ āϏ⧁āϤāϰāĻžāĻ‚ āφāϏ⧁āύ āφāĻŽāĻžāĻĻ⧇āϰ āĻāĻ•āϟāĻŋ āχāĻ¸ā§āϝ⧁āϤ⧇ āĻāĻ•āϟāĻŋ āĻ•āĻŽāĻŋāϟ āĻ•āϰāϤ⧇ āĻāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝāĻžāĻ•. āϧāϰāĻž āϝāĻžāĻ• āφāĻŽāϰāĻž āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āχāĻ¸ā§āϝ⧁āϤ⧇ āĻāĻ•āϟāĻŋ āĻ•āĻŽāĻŋāϟ āĻ•āϰāϤ⧇ āϚāĻžāχ, āχāĻ¸ā§āϝ⧁ #6⧎ āĻāϟāĻŋ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāĻĻ⧇āϰ āĻāĻ•āϟāĻŋ āĻŸā§‹āϕ⧇āύ āϏāĻš āĻāĻ•āϟāĻŋ HTTP POST āĻ…āύ⧁āϰ⧋āϧ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ repos/<user>/<repo>/issues/<num>/comments āϝāĻž āφāĻŽāϰāĻž āĻāĻ•āϟāĻŋ āĻ…āĻĨā§‹āϰāĻžāχāĻœā§‡āĻļāύ āĻšā§‡āĻĄāĻžāĻ°Â  āĻšāĻŋāϏāĻžāĻŦ⧇ āϤ⧈āϰāĻŋ āĻ•āϰ⧇āĻ›āĻŋāĨ¤
				
					$ curl -H "Content-Type: application/json" \
       -H "Authorization: token TOKEN" \
       --data '{"body":"A new comment, :+1:"}' \
       https://api.github.com/repos/schacon/blink/issues/6/comments
{
  "id": 58322100,
  "html_url": "https://github.com/schacon/blink/issues/6#issuecomment-58322100",
  ...
  "user": {
    "login": "tonychacon",
    "id": 7874698,
    "avatar_url": "https://avatars.githubusercontent.com/u/7874698?v=2",
    "type": "User",
  },
  "created_at": "2014-10-08T07:48:19Z",
  "updated_at": "2014-10-08T07:48:19Z",
  "body": "A new comment, :+1:"
}
				
			
āĻāĻ–āύ āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āϏ⧇āχ āχāĻ¸ā§āϝ⧁āϤ⧇ āϝāĻžāύ, āφāĻĒāύāĻŋ āϏ⧇āχ āĻŽāĻ¨ā§āϤāĻŦā§āϝāϟāĻŋ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāĻŦ⧇āύ āϝāĻž āφāĻŽāϰāĻž āϏāĻĢāϞāĻ­āĻžāĻŦ⧇ GitHub API āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻĒā§‹āĻ¸ā§āϟ āĻ•āϰ⧇āĻ›āĻŋ āĨ¤
scripting-06-comment
āϚāĻŋāĻ¤ā§āϰ 134. GitHub API āĻĨ⧇āϕ⧇ āĻĒā§‹āĻ¸ā§āϟ āĻ•āϰāĻž āĻāĻ•āϟāĻŋ āĻ•āĻŽāĻŋāϟ

āφāĻĒāύāĻŋ āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāĻŸā§‡ āϝāĻž āĻ•āĻŋāϛ⧁ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āϤāĻžāϰ āϜāĻ¨ā§āϝ āφāĻĒāύāĻŋ API āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ — āĻŽāĻžāχāϞāĻ¸ā§āĻŸā§‹āύ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻāĻŦāĻ‚ āϏ⧇āϟ āĻ•āϰāĻž, āχāĻ¸ā§āϝ⧁ āĻāĻŦāĻ‚ āĻĒ⧁āϞ āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āĻŸā§‡ āϞ⧋āϕ⧇āĻĻ⧇āϰ āĻāϞ⧋āϕ⧇āĻŸÂ  āĻ•āϰāĻž, āϞ⧇āĻŦ⧇āϞ āϤ⧈āϰāĻŋ āĻāĻŦāĻ‚ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻž, āĻ•āĻŽāĻŋāϟ āĻĄā§‡āϟāĻž āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰāĻž, āύāϤ⧁āύ āĻ•āĻŽāĻŋāϟ āĻāĻŦāĻ‚ āĻļāĻžāĻ–āĻž āϤ⧈āϰāĻŋ āĻ•āϰāĻž, āĻ–ā§‹āϞāĻž, āĻŦāĻ¨ā§āϧ āĻ•āϰāĻž āĻŦāĻž āĻŽāĻžāĻ°ā§āϜ āĻ•āϰāĻž āĻĒ⧁āϞ āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āϟ, āϟāĻŋāĻŽ āϤ⧈āϰāĻŋ āĻ“ āĻāĻĄāĻŋāϟ āĻ•āϰāĻž, āĻĒ⧁āϞ āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āĻŸā§‡ āϕ⧋āĻĄā§‡āϰ āϞāĻžāχāύ⧇ āĻ•āĻŽāĻŋāϟ āĻ•āϰāĻž, āϏāĻžāχāϟ āϏāĻžāĻ°ā§āϚ āĻ•āϰāĻž āĻāĻŦāĻ‚ āφāϰ⧋ āĻ…āύ⧇āĻ• āĻ•āĻžāϜ āĨ¤

āĻĒ⧁āϞ āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āĻŸā§‡āϰ āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ

āφāĻŽāϰāĻž āĻāĻ•āϟāĻŋ āĻļ⧇āĻˇÂ  āωāĻĻāĻžāĻšāϰāĻŖ āĻĻ⧇āĻ–āĻŦ āĻ•āĻžāϰāĻŖ āĻāϟāĻŋ āϏāĻ¤ā§āϝāĻŋāχ āĻĻāϰāĻ•āĻžāϰ⧀ āϝāĻĻāĻŋ āφāĻĒāύāĻŋ āĻĒ⧁āϞ āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āϟāϗ⧁āϞāĻŋāϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇āύāĨ¤ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ•āĻŽāĻŋāϟ āĻāϰ āϏāĻžāĻĨ⧇ āϝ⧁āĻ•ā§āϤ āĻāĻ• āĻŦāĻž āĻāĻ•āĻžāϧāĻŋāĻ• āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇ āĻāĻŦāĻ‚ āϏ⧇āχ āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ āϝ⧋āĻ— āĻ•āϰāϤ⧇ āĻāĻŦāĻ‚ āĻ•ā§ā§Ÿā§‡āϰāĻŋ (query) āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ API āφāϛ⧇āĨ¤

āĻŦ⧇āĻļāĻŋāϰāĻ­āĻžāĻ— āĻ•āĻ¨ā§āϟāĻŋāύāĻŋāĻ‰ā§ŸāĻžāϏ āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āĻļāύ āĻāĻŦāĻ‚ āĻŸā§‡āĻ¸ā§āϟāĻŋāĻ‚ āϏāĻžāĻ°ā§āĻ­āĻŋāϏāϗ⧁āϞāĻŋ āĻāχ API āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻĒ⧁āĻļ āĻĻ⧇āĻ“āϝāĻŧāĻž āϕ⧋āĻĄāϟāĻŋ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧇ āĻĒ⧁āĻļ⧇āϰ āĻĒā§āϰāϤāĻŋ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž āϜāĻžāύāĻžāϤ⧇ āĻāĻŦāĻ‚ āϤāĻžāϰāĻĒāϰ⧇ āϰāĻŋāĻĒā§‹āĻ°ā§āϟāϟāĻŋāϰ āϏāĻŽāĻ¸ā§āϤ āĻ•ā§āϰāĻžāχāĻŸā§‡āϰāĻŋ⧟āĻž āϝāĻĻāĻŋ āĻ āĻŋāĻ• āĻĨāĻžāϕ⧇ āϤāĻžāĻšāϞ⧇ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ āĻ•āϰ⧇⧎ āφāĻĒāύāĻŋ āĻ•āĻŽāĻŋāϟ āĻŽā§‡āϏ⧇āϜāϟāĻŋ  āϏāĻ āĻŋāĻ•āĻ­āĻžāĻŦ⧇ āĻĢāĻ°ā§āĻŽā§āϝāĻžāϟ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇ āĻ•āĻŋāύāĻž āϤāĻž āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāϤ⧇āĻ“ āĻāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤Â 

āϧāϰāĻž āϝāĻžāĻ• āφāĻĒāύāĻŋ āφāĻĒāύāĻžāϰ āϰāĻŋāĻĒā§‹āϜāĻŋāϟāϰāĻŋāϤ⧇ āĻāĻ•āϟāĻŋ āĻ“āϝāĻŧ⧇āĻŦāĻšā§āĻ• āϏ⧇āϟ āφāĻĒ āĻ•āϰ⧇āϛ⧇āύ āϝāĻž āĻāĻ•āϟāĻŋ āϛ⧋āϟ āĻ“āϝāĻŧ⧇āĻŦ āϏāĻžāĻ°ā§āĻ­āĻŋāϏāϕ⧇ āĻšāĻŋāĻŸÂ  āĻ•āϰ⧇ Signed-off-by āϝāĻž āĻ•āĻŽāĻŋāϟ āĻŽā§‡āϏ⧇āĻœā§‡ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧇āĨ¤

				
					require 'httparty'
require 'sinatra'
require 'json'

post '/payload' do
  push = JSON.parse(request.body.read) # parse the JSON
  repo_name = push['repository']['full_name']

  # look through each commit message
  push["commits"].each do |commit|

    # look for a Signed-off-by string
    if /Signed-off-by/.match commit['message']
      state = 'success'
      description = 'Successfully signed off!'
    else
      state = 'failure'
      description = 'No signoff found.'
    end

    # post status to GitHub
    sha = commit["id"]
    status_url = "https://api.github.com/repos/#{repo_name}/statuses/#{sha}"

    status = {
      "state"       => state,
      "description" => description,
      "target_url"  => "http://example.com/how-to-signoff",
      "context"     => "validate/signoff"
    }
    HTTParty.post(status_url,
      :body => status.to_json,
      :headers => {
        'Content-Type'  => 'application/json',
        'User-Agent'    => 'tonychacon/signoff',
        'Authorization' => "token #{ENV['TOKEN']}" }
    )
  end
end


				
			
āφāĻļāĻž āĻ•āϰāĻŋ āĻāϟāĻŋ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰāĻž āĻŽā§‹āϟāĻžāĻŽā§āϟāĻŋ āϏāĻšāϜāĨ¤ āĻāχ āĻ“āϝāĻŧ⧇āĻŦ āĻšā§āĻ• āĻšā§āϝāĻžāĻ¨ā§āĻĄāϞāĻžāϰ⧇ āφāĻŽāϰāĻž āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ•āĻŽāĻŋāĻŸā§‡āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻĻ⧇āĻ–āĻŋ āϝāĻž āϏāĻŦ⧇āĻŽāĻžāĻ¤ā§āϰ āĻĒ⧁āĻļ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ, āφāĻŽāϰāĻž āĻ•āĻŽāĻŋāϟ āĻŽā§‡āϏ⧇āĻœā§‡ ‘āϏāĻžāχāύ-āĻ…āĻĢ-āĻŦāĻžāχ’ āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚āϟāĻŋ āϏāĻ¨ā§āϧāĻžāύ āĻ•āϰāĻŋ āĻāĻŦāĻ‚ āĻ…āĻŦāĻļ⧇āώ⧇ āφāĻŽāϰāĻž /repos/<user>/<repo>/statuses/<commit_sha> āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ āϏāĻš HTTP āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ API āĻāĻ¨ā§āĻĄāĻĒāϝāĻŧ⧇āĻ¨ā§āĻŸā§‡ āĻĒā§‹āĻ¸ā§āϟ āĻ•āϰāĻŋāĨ¤ āĻāχ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŸā§‡āĻŸÂ  (‘success’, ‘failure’, ‘error’ ), āϕ⧀ āϘāĻŸā§‡āϛ⧇ āϤāĻžāϰ āĻāĻ•āϟāĻŋ āĻŦāĻŋāĻŦāϰāĻŖ, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āφāϰāĻ“ āϤāĻĨā§āϝ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āϟāĻžāĻ°ā§āϗ⧇āĻŸÂ  URL āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āĻāĻ•āĻ• āĻ•āĻŽāĻŋāĻŸā§‡āϰ āϜāĻ¨ā§āϝ āĻāĻ•āĻžāϧāĻŋāĻ• āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ āĻĨāĻžāĻ•āϞ⧇ āĻāĻ•āϟāĻŋ “āĻ•āύāĻŸā§‡āĻ•ā§āϏāϟ ” āĻĒāĻžāĻ āĻžāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤Â  āωāĻĻāĻžāĻšāϰāĻŖ āĻ¸ā§āĻŦāϰ⧂āĻĒ, āĻāĻ•āϟāĻŋ āĻŸā§‡āĻ¸ā§āϟāĻŋāĻ‚ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇ āĻāĻŦāĻ‚ āĻāϰ āĻŽāϤ⧋ āĻāĻ•āϟāĻŋ āĻ­ā§āϝāĻžāϞāĻŋāĻĄā§‡āĻļāύ āϏāĻžāĻ°ā§āĻ­āĻŋāϏāĻ“ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇ — “āĻ•āύāĻŸā§‡āĻ•ā§āϏāϟ” āĻĢāĻŋāĻ˛ā§āĻĄāϟāĻŋ āĻšāϞ āϤāĻžāϰāĻž āϕ⧀āĻ­āĻžāĻŦ⧇ āφāϞāĻžāĻĻāĻž āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ āϝāĻĻāĻŋ āϕ⧇āω āĻ—āĻŋāϟāĻšāĻžāĻŦ⧇ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻĒ⧁āϞ āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āϟ āĻ–ā§‹āϞ⧇ āĻāĻŦāĻ‚ āĻāχ āĻšā§āĻ• āϏ⧇āϟ āφāĻĒ āĻ•āϰāĻž āĻšāϝāĻŧ, āφāĻĒāύāĻŋ API āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻ•āĻŽāĻŋāϟ āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ⧇āϰ āĻŽāϤ⧋ āĻ•āĻŋāϛ⧁ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāϰ⧇āύ āĨ¤
scripting-07-status
āϚāĻŋāĻ¤ā§āϰ 135. āĻāĻĒāĻŋāφāχ āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻ•āĻŽāĻŋāϟ-āĻāϰ āĻ…āĻŦāĻ¸ā§āĻĨāĻž

āφāĻĒāύāĻŋ āĻāĻ–āύ āĻ•āĻŽāĻŋāĻŸā§‡āϰ āĻĒāĻžāĻļ⧇ āĻāĻ•āϟāĻŋ āϛ⧋āϟ āϏāĻŦ⧁āϜ āĻšā§‡āĻ• āϚāĻŋāĻšā§āύ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāĻŦ⧇āύ āϝ⧇āϟāĻŋāϤ⧇ āĻŦāĻžāĻ°ā§āϤāĻžāϟāĻŋāϤ⧇ āĻāĻ•āϟāĻŋ “Signed-off-by” āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āϰāϝāĻŧ⧇āϛ⧇ āĻāĻŦāĻ‚ āϝ⧇āĻ–āĻžāύ⧇ āϞ⧇āĻ–āĻ• āϏāĻžāχāύ āĻ…āĻĢ āĻ•āϰāϤ⧇ āϭ⧁āϞ⧇ āϗ⧇āϛ⧇āύ āϤāĻžāϰ āĻŽāĻ§ā§āϝ āĻĻāĻŋāϝāĻŧ⧇ āĻāĻ•āϟāĻŋ āϞāĻžāϞ āĻ•ā§āϰāϏ āϰāϝāĻŧ⧇āϛ⧇⧎ āφāĻĒāύāĻŋ āφāϰāĻ“ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāϰ⧇āύ āϝ⧇ āĻĒ⧁āϞ āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āϟ āĻļāĻžāĻ–āĻžāϝāĻŧ āĻļ⧇āώ āĻ•āĻŽāĻŋāĻŸā§‡āϰ āĻ¸ā§āĻŸā§‡āĻŸā§Â  āύ⧇āϝāĻŧ āĻāĻŦāĻ‚ āĻāϟāĻŋ āĻŦā§āϝāĻ°ā§āĻĨ āĻšāϞ⧇ āφāĻĒāύāĻžāϕ⧇ āϏāϤāĻ°ā§āĻ• āĻ•āϰ⧇āĨ¤ āĻāϟāĻŋ āϏāĻ¤ā§āϝāĻŋāχ āĻĻāϰāĻ•āĻžāϰ⧀ āϝāĻĻāĻŋ āφāĻĒāύāĻŋ āĻĒāϰ⧀āĻ•ā§āώāĻžāϰ āĻĢāϞāĻžāĻĢāϞ⧇āϰ āϜāĻ¨ā§āϝ āĻāχ API āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϛ⧇āύ āϝāĻžāϤ⧇ āφāĻĒāύāĻŋ āĻĻ⧁āĻ°ā§āϘāϟāύāĻžāĻ•ā§āϰāĻŽā§‡ āĻāĻŽāύ āĻ•āĻŋāϛ⧁ āĻŽāĻžāĻ°ā§āϜ āĻ•āϰāĻŦ⧇āύ āύāĻž āϝ⧇āĻ–āĻžāύ⧇ āĻļ⧇āώ āĻ•āĻŽāĻŋāϟ āĻŸā§‡āĻ¸ā§āϟ āĻĢ⧇āχāϞ āĻ•āϰ⧇āĨ¤

āĻ…āĻ•ā§āĻŸā§‹āĻ•āĻŋāϟ

āϝāĻĻāĻŋāĻ“ āφāĻŽāϰāĻž āĻāχ āωāĻĻāĻžāĻšāϰāĻŖāϗ⧁āϞāĻŋāϤ⧇ āĻāĻŦāĻ‚ āϏāĻžāϧāĻžāϰāĻŖ HTTP āϰāĻŋāĻ•ā§ā§Ÿā§‡āĻˇā§āϟāϗ⧁āϞāĻŋāϰ āĻĒā§āϰāĻžāϝāĻŧ āϏāĻŦāĻ•āĻŋāϛ⧁āχ curl āĻĻāĻŋā§Ÿā§‡ āĻ•āϰāĻ›āĻŋ  , āĻŦ⧇āĻļ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āĻ“āĻĒ⧇āύ-āϏ⧋āĻ°ā§āϏ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āφāϛ⧇ āϝāĻž āĻāχ API āϟāĻŋāϕ⧇ āφāϰāĻ“ āϏāĻžāĻšā§āĻ›āĻ¨ā§āĻĻ⧇ āĻŦā§āϝāĻŦāĻšāĻžāĻ°Â  āĻ•āϰ⧇āĨ¤ āĻāχ āϞ⧇āĻ–āĻž āϞ⧇āĻ–āĻžāϰ āϏāĻŽāϝāĻŧ, āϏāĻŽāĻ°ā§āĻĨāĻŋāϤ āĻ­āĻžāώāĻžāϗ⧁āϞāĻŋāϰ āĻŽāĻ§ā§āϝ⧇ āϰāϝāĻŧ⧇āϛ⧇ Go, Objective-C, Ruby āĻāĻŦāĻ‚ .NETāĨ¤ āĻāϗ⧁āϞāĻŋ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āφāϰāĻ“ āϤāĻĨā§āϝ⧇āϰ āϜāĻ¨ā§āϝ https://github.com/octokit āĻĻ⧇āϖ⧁āύ , āĻ•āĻžāϰāĻŖ āϤāĻžāϰāĻž āφāĻĒāύāĻžāϰ āϜāĻ¨ā§āϝ āĻŦ⧇āĻļāĻŋāϰāĻ­āĻžāĻ— HTTP āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰ⧇āĨ¤

āφāĻļāĻž āĻ•āϰāĻŋ āĻāχ āϟ⧁āϞāϗ⧁āϞāĻŋ āφāĻĒāύāĻžāϕ⧇ āφāĻĒāύāĻžāϰ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ“āϝāĻŧāĻžāĻ°ā§āĻ•āĻĢā§āϞ⧋āϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āφāϰāĻ“ āĻ­āĻžāϞ āĻ•āĻžāϜ āĻ•āϰāϤ⧇ āĻ—āĻŋāϟāĻšāĻžāĻŦāϕ⧇ āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāχāϜ āĻāĻŦāĻ‚ āϏāĻ‚āĻļā§‹āϧāύ āĻ•āϰāϤ⧇ āϏāĻšāĻžāϝāĻŧāϤāĻž āĻ•āϰāĻŦ⧇āĨ¤ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ API-āĻ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ⧇āϰ āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āĻ•āĻžāĻœā§‡āϰ āϜāĻ¨ā§āϝ āĻ—āĻžāχāĻĄā§‡āϰ āϜāĻ¨ā§āϝ, https://developer.github.com āĻĻ⧇āϖ⧁āύ āĨ¤