مواد پر جائیں

GitHub App بنائیں

یہ گائیڈ بتاتی ہے کہ اپنے سرور کو اس کی اپنی GitHub شناخت کیسے دی جائے۔ اس میں تقریباً دو منٹ لگتے ہیں، یہ صرف سرور مالک کرتا ہے، اور فی سرور یہ صرف ایک بار کرنا پڑتا ہے۔

اس کے بعد اپنا اکاؤنٹ جوڑنے کے لیے، GitHub انضمام سیٹ کریں دیکھیں۔

ایک ہی رجسٹریشن سے دو مختلف کام نکلتے ہیں، اور ایپ ہی ان دونوں کو دیانتدار بناتی ہے:

کام اس کا جواب کون دیتا ہے یہ کیوں اہم ہے
کوئی شخص سائن اِن کرتا ہے ایپ کا client id، ڈیوائس فلو کے ذریعے آپ کو ایک ایسا کریڈینشل ملتا ہے جو آپ کا ہے — سرور پر، ہر ڈیوائس پر — جسے پیسٹ یا روٹیٹ کرنے والا کوئی ٹوکن نہیں
سرور خود عمل کرتا ہے ایپ کا id + پرائیویٹ کلید → انسٹالیشن ٹوکن ویب ہکس، PR پولنگ اور ٹکٹ ہم آہنگی کسی ایک انسان کے ٹوکن کے درست رہنے پر منحصر ہونا چھوڑ دیتے ہیں

غور کریں کہ اُس جدول میں کیا نہیں ہے: client secret۔ GitHub کا ڈیوائس فلو صرف client id سے تصدیق کرتا ہے — ڈیوائس کوڈ کی درخواست اور ٹوکن پول، دونوں — اس لیے سائن اِن کے لیے رکھنے کو کوئی secret نہیں ہوتا۔

اپنی ایپ کے بغیر، پہلا کام پھر بھی اُس client id کے ذریعے چلتا ہے جو بلڈ کے ساتھ آتا ہے؛ دوسرا سرور مالک کے کریڈینشل پر واپس گر جاتا ہے، چنانچہ پس منظر کا کام اُس شخص پر سوار ہوتا ہے جس نے سب سے پہلے آن بورڈنگ کی۔

  • آپ سرور مالک ہیں — providerApps.* کے آپریشنز صرف اسی کے لیے مختص ہیں، اور یہ کارڈ باقی سب کے لیے پوشیدہ ہے
  • ایک GitHub اکاؤنٹ، یا کوئی تنظیم جس میں آپ ایپس بنا سکیں
  • عوامی طور پر قابلِ رسائی کچھ بھی نہیں: سائن اِن ایک ڈیوائس فلو ہے، اس لیے سرور کو نہ کوئی اِن باؤنڈ پورٹ چاہیے، نہ ٹنل، نہ callback URL اور نہ ڈومین
  1. github.com/settings/apps/new پر جائیں (تنظیم کے لیے: Settings → Developer settings → GitHub Apps → New GitHub App)
  2. GitHub App name — کچھ بھی؛ Control Center (yourname) ٹھیک ہے۔ یہ اُن کمٹس اور تبصروں پر ظاہر ہوتا ہے جو سرور کرتا ہے
  3. Homepage URL — کچھ بھی، مثلاً https://github.com/your-name
  4. Callback URL — اسے خالی چھوڑ دیں۔ ڈیوائس فلو میں یہ ہوتا ہی نہیں
  5. Enable Device Flow کو نشان زد کریں۔ یہ وہ واحد سیٹنگ ہے جس کے بغیر سائن اِن کام نہیں کر سکتا
  6. Webhook → Active سے نشان ہٹا دیں، الا یہ کہ آپ ویب ہکس الگ سے جوڑ رہے ہوں
  7. Repository permissions میں کم از کم یہ اجازتیں دیں:
    • Contents: Read and write
    • Metadata: Read-only (لازمی)
    • Pull requests: Read and write
    • Issues: Read and write، اگر آپ ٹکٹس کے لیے GitHub Issues استعمال کرتے ہیں، اور بوٹ کی PR گفتگو میں تبصرہ تلاش کے لیے (دیکھیں GitHub PR سے Control Center سے بات کریں)
    • Checks: Read-only، PR صفحے پر CI کی حالت کے لیے
  8. Where can this GitHub App be installed? میں جو موزوں ہو وہ چنیں — ذاتی سرور کے لیے ”Only on this account“ درست ہے
  9. Create GitHub App پر کلک کریں

ایپ کے صفحے پر، اسے بنانے کے فوراً بعد:

قدر کہاں
App ID General ٹیب، اوپر کے قریب
Client ID General ٹیب، ”Client secrets“ کے نیچے
Private key Generate a private key — ایک .pem ڈاؤن لوڈ ہوتا ہے

پرائیویٹ کلید کی فائل صرف ایک بار ڈاؤن لوڈ ہوتی ہے اور GitHub اسے دوبارہ کبھی نہیں دکھاتا۔ جب تک آپ اسے پیسٹ نہ کر لیں، اسے سنبھال کر رکھیں؛ آپ ہمیشہ ایک نئی بنا سکتے ہیں۔

client secret اختیاری ہے اور ٹھیک ایک چیز دیتا ہے: اگر آپ ”Expire user authorization tokens“ کو ON رکھیں، تو یہی کسی شخص کے ٹوکن کو خاموشی سے تازہ کرتا ہے، بجائے اس کے کہ ہر آٹھ گھنٹے بعد اسے دوبارہ سائن اِن کرنے کو کہا جائے۔ سائن اِن خود اسے کبھی استعمال نہیں کرتا۔

زیادہ سادہ طریقہ یہ ہے کہ اُس میعاد کو OFF کر دیں، اور پھر کہیں کوئی secret درکار نہیں رہتا۔ اگر آپ اسے ON رکھیں تو ایک secret بنائیں اور اسے ترتیبات → سرور → سنگل سائن آن (کے فراہم کنندہ ایپس کارڈ) میں پیسٹ کریں — اس کے لیے کوئی ماحول کا ویری ایبل نہیں ہے، اور نہ ہی کوئی بلڈ میں بیک ہوتا ہے، چنانچہ یہ آپ کے سرور ہی پر رہتا ہے۔

رجسٹر شدہ مگر غیر انسٹال شدہ ایپ لوگوں کی توثیق کر سکتی ہے اور کچھ بھی نہیں پڑھ سکتی۔

  1. ایپ کے صفحے پر Install App کھولیں
  2. اسے اپنے اکاؤنٹ یا تنظیم پر انسٹال کریں
  3. All repositories چنیں، یا وہ ریپوزٹریز منتخب کریں جو اس سرور کو نظر آنی چاہئیں
  1. ترتیبات → سرور → سنگل سائن آن پر جائیں اور فراہم کنندہ ایپس کارڈ تک اسکرول کریں
  2. GitHub بلاک پر ہر فیلڈ سیٹ کریں:
    • App id — وہی عددی App ID
    • پرائیویٹ کلید — پوری .pem پیسٹ کریں، BEGIN اور END لائنیں شامل کر کے
    • Client id — اُسی صفحے سے
    • Client secret — صرف اُس صورت میں جب آپ نے ایک بنایا ہو (ٹوکن کی تازہ کاری کے لیے)
  3. ٹیسٹ پر کلک کریں

کلید محفوظ ہوتے ہی پارس ہو جاتی ہے، اس لیے کٹا ہوا یا غلط فارمیٹ میں پیسٹ کیا گیا مواد وہیں مسترد ہو جاتا ہے، بجائے اس کے کہ گھنٹوں بعد کسی پس منظر کی درخواست پر ناکام ہو۔ ٹیسٹ اس سے آگے جاتا ہے اور GitHub سے پوچھتا ہے کہ یہ ایپ کن اکاؤنٹس پر انسٹال ہے — ”محفوظ ہو گیا“ اور ”کام کرتا ہے“ دو الگ دعوے ہیں، اور صرف دوسرے کا مطلب ہے کہ کچھ چلے گا۔

چیک پوائنٹ: GitHub بلاک ”سرور خود عمل کر سکتا ہے، اور لوگ سائن اِن کر سکتے ہیں“ پڑھتا ہے، اور ترتیبات → ورک اسپیس → پروفائل اور شناخت → کوڈ ہوسٹنگ کے نیچے GitHub قطار اب GitHub سے سائن اِن کی سہولت دیتی ہے۔

اس کے بجائے ماحول کے ویری ایبلز سے کنفیگر کریں

سیکشن کا عنوان “اس کے بجائے ماحول کے ویری ایبلز سے کنفیگر کریں”

ہیڈلیس یا اسکرپٹ شدہ انسٹال کے لیے، سرور ہر فیلڈ کو پہلی بار، جب اس کے پاس کوئی محفوظ قدر نہ ہو، ماحول سے سیڈ کرتا ہے:

ٹرمنل ونڈو
GITHUB_APP_ID=123456
GITHUB_APP_PRIVATE_KEY="$(cat control-center.private-key.pem)"
GITHUB_CLIENT_ID=Iv1.0123456789abcdef

ان کے لیے کوئی کمانڈ لائن فلیگ نہیں ہیں — کمانڈ لائن پر رکھا secret میزبان کے ہر پروسیس کے لیے ps کے ذریعے پڑھا جا سکتا ہے۔ انہیں کنفیگر کرنے کی واحد جگہ ماحول ہے، اور یہ بلڈ کے ساتھ آنے والی ہر قدر پر غالب آتا ہے۔ .env.template مکمل فہرست ہے۔

مقامی ڈیویلپمنٹ کے لیے ریپو روٹ کا .env وہی قدریں رکھتا ہے اور ڈیسک ٹاپ انہیں اُس سرور تک پہنچاتا ہے جو وہ خود چلاتا ہے۔ وہاں کلید کو ایک ہی لائن میں رکھیں: .env کی قدر ایک لائن ہوتی ہے، اور ڈبل کوٹس کے اندر \n ایک نئی لائن میں ڈیکوڈ ہوتا ہے۔

GITHUB_APP_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\nMIIEow…\n-----END RSA PRIVATE KEY-----"

GITHUB_APP_ID اور GITHUB_APP_PRIVATE_KEY وہی نام ہیں جو سینڈ باکس ٹوکن بروکر پہلے ہی پڑھتا ہے، چنانچہ جس میزبان نے فائن گرینڈ ایجنٹ ٹوکن کنفیگر کیے ہوں، اسے سائن اِن کی لین مفت میں مل جاتی ہے۔ سیڈنگ فی فیلڈ ایک بار ہوتی ہے — اس کے بعد محفوظ قدر ہی جیتتی ہے، اس لیے ترتیبات میں کی گئی ترمیم اگلے ری اسٹارٹ سے کالعدم نہیں ہوتی۔

Linear میں ڈیوائس فلو نہیں ہے، اس لیے اس کا سائن اِن براؤزر کے ایک چکر سے ہوتا ہے اور اسے callback URL درکار ہوتا ہے — فراہم کنندہ ایپس کارڈ آپ کو ٹھیک وہی URL دکھاتا ہے جو رجسٹر کرنا ہے۔

  1. linear.app/settings/api/applications/new پر ایک OAuth ایپلیکیشن بنائیں
  2. Callback URL کو وہی URL رکھیں جو کارڈ دکھاتا ہے، لفظ بہ لفظ
  3. Client id اور Client secret کو Linear بلاک میں پیسٹ کریں
  4. اختیاری طور پر ورک اسپیس کا API کلید شامل کریں — یہی وہ کریڈینشل ہے جو سرور اُس وقت ٹکٹس ہم آہنگ کرنے کے لیے استعمال کرتا ہے جب کسی انسان نے نہ پوچھا ہو

سائن اِن ڈائیلاگ کہتا ہے کہ فراہم کنندہ نے کوئی ڈیوائس کوڈ واپس نہیں کیا

سیکشن کا عنوان “سائن اِن ڈائیلاگ کہتا ہے کہ فراہم کنندہ نے کوئی ڈیوائس کوڈ واپس نہیں کیا”

ایپ میں Enable Device Flow بند ہے۔ General میں اسے آن کریں اور دوبارہ کوشش کریں۔

ٹیسٹ کہتا ہے کہ کریڈینشلز کام کرتے ہیں مگر ایپ کہیں انسٹال نہیں

سیکشن کا عنوان “ٹیسٹ کہتا ہے کہ کریڈینشلز کام کرتے ہیں مگر ایپ کہیں انسٹال نہیں”

رجسٹریشن اور انسٹالیشن الگ الگ مراحل ہیں۔ ایپ کے صفحے پر Install App کھولیں اور اسے انسٹال کریں۔

ٹیسٹ کہتا ہے کہ پرائیویٹ کلید پڑھی نہیں جا سکی

سیکشن کا عنوان “ٹیسٹ کہتا ہے کہ پرائیویٹ کلید پڑھی نہیں جا سکی”

پوری .pem فائل پیسٹ کریں، -----BEGIN اور -----END لائنیں بھی شامل کر کے۔ ed25519 یا EC کلید استعمال نہیں ہو سکتی — GitHub Apps RSA سے دستخط کرتے ہیں۔

کوئی رکن سائن اِن ہو گیا مگر اسے کوئی ریپوزٹری نظر نہیں آتی

سیکشن کا عنوان “کوئی رکن سائن اِن ہو گیا مگر اسے کوئی ریپوزٹری نظر نہیں آتی”

ایپ اُس اکاؤنٹ پر انسٹال نہیں ہے جس کی وہ ریپوزٹریز ہیں، یا اس کی انسٹالیشن مختلف ریپوزٹریز منتخب کرتی ہے۔ اُس شخص کا اپنا سائن اِن صرف وہی رسائی دیتا ہے جو ایپ کو دیکھنے کی اجازت ہے۔