इसे छोड़कर कंटेंट पर जाएं

CI/CD और गवर्नेंस

यह रिपॉज़िटरी चार GitHub Actions वर्कफ़्लो और गवर्नेंस के लिए एक केंद्रीकृत टेम्पलेट सिस्टम का उपयोग करती है।

वर्कफ़्लोफ़ाइलट्रिगरउद्देश्य
GitHub Pages Deploygithub-pages-deploy.ymlmain पर पुश (docs/**), मैनुअल डिस्पैचडॉक्यूमेंटेशन साइट को बिल्ड और GitHub Pages पर डिप्लॉय करता है
Build and Publish Docker Imagebuild-image.ymlmain पर पुश (docker/**, package*.json), दैनिक क्रॉन, repository_dispatchDocker इमेज बिल्ड करता है, GHCR पर पुश करता है, और डाउनस्ट्रीम रिपोज़ में रीबिल्ड डिस्पैच करता है
Require Linked Issuerequire-linked-issue.ymlपुल रिक्वेस्ट इवेंट्सउन PRs को ब्लॉक करता है जो किसी GitHub issue का संदर्भ नहीं देते
Enforce Repository Settingsenforce-repo-settings.ymlहर 6 घंटे, सेटिंग्स कॉन्फ़िग पर पुश, मैनुअल डिस्पैचटेम्पलेट से मानकीकृत रिपो सेटिंग्स लागू करता है
on:
push:
branches: [main]
paths:
- 'docs/**'
workflow_dispatch:

टेम्पलेट रिपॉज़िटरी में एक रीयूज़ेबल वर्कफ़्लो को डेलीगेट करता है:

jobs:
docs:
uses: f5-sales-demo/docs-control/.github/workflows/github-pages-deploy.yml@main

अनुमतियाँ: contents: read, packages: read, pages: write, id-token: write। पुरानी डिप्लॉयमेंट से बचने के लिए cancel-in-progress: true के साथ कंकरेंसी ग्रुप pages का उपयोग करता है।

केवल तब ट्रिगर होता है जब पुश पर docs/ के अंतर्गत फ़ाइलें बदलती हैं। workflow_dispatch के माध्यम से मैन्युअल रूप से भी ट्रिगर किया जा सकता है, जिस तरह build-image.yml में डिस्पैच जॉब डाउनस्ट्रीम रीबिल्ड ट्रिगर करता है।

on:
push:
branches: [main]
paths:
- 'docker/**'
- 'package.json'
- 'package-lock.json'
schedule:
- cron: '0 6 * * *'
repository_dispatch:
types: [rebuild-image]

चरण:

  1. कोड चेकआउट
  2. docker/login-action का उपयोग करके ghcr.io में लॉग इन
  3. कॉन्टेक्स्ट . और फ़ाइल docker/Dockerfile के साथ docker/build-push-action का उपयोग करके बिल्ड और पुश
  4. टैग: ghcr.io/<owner>/<repo>:latest और ghcr.io/<owner>/<repo>:<sha>

सफल बिल्ड के बाद, dispatch जॉब टेम्पलेट रिपॉज़िटरी की downstream-repos.json कॉन्फ़िग में सूचीबद्ध हर डाउनस्ट्रीम रिपो पर workflow_dispatch के माध्यम से github-pages-deploy.yml ट्रिगर करता है। यह सुनिश्चित करता है कि सभी कंटेंट रिपो अपडेटेड बिल्डर इमेज के साथ अपने डॉक्स रीबिल्ड करें।

दैनिक क्रॉन सुनिश्चित करता है कि कोड परिवर्तन के बिना भी इमेज अपडेट रहे (डिपेंडेंसी अपडेट्स उठाता है)। repository_dispatch इवेंट बाहरी सिस्टम को रीबिल्ड ट्रिगर करने की अनुमति देता है।

केवल तब ट्रिगर होता है जब पुश पर docker/ फ़ाइलें या package*.json बदलते हैं। केवल डॉक्स परिवर्तन इमेज रीबिल्ड ट्रिगर नहीं करते।

on:
pull_request_target:
types: [opened, edited, reopened, synchronize]

यह सुनिश्चित करने के लिए nearform-actions/github-action-check-linked-issues@v1 का उपयोग करता है कि हर PR एक GitHub issue का संदर्भ दे (जैसे, विवरण में Closes #42)। Dependabot PRs को इसके माध्यम से बाहर रखा जाता है:

exclude-branches: "dependabot/**"

यदि चेक विफल होता है तो एक कस्टम संदेश योगदानकर्ताओं को अपेक्षित प्रारूप बताता है। पूर्ण योगदानकर्ता वर्कफ़्लो के लिए CONTRIBUTING.md देखें।

on:
schedule:
- cron: '0 */6 * * *'
push:
branches: [main]
paths:
- '.github/config/repo-settings.json'
workflow_dispatch:

टेम्पलेट रिपॉज़िटरी में एक रीयूज़ेबल वर्कफ़्लो को डेलीगेट करता है:

jobs:
enforce:
uses: f5-sales-demo/docs-control/.github/workflows/enforce-repo-settings.yml@main
secrets:
repo-admin-token: ${{ secrets.REPO_ADMIN_TOKEN }}

हर 6 घंटे और सेटिंग्स कॉन्फ़िग फ़ाइल में परिवर्तन पर चलता है। .github/config/repo-settings.json से ब्रांच प्रोटेक्शन नियम, मर्ज सेटिंग्स, और अन्य रिपॉज़िटरी कॉन्फ़िगरेशन लागू करता है।

केंद्रीकृत टेम्पलेट

Section titled “केंद्रीकृत टेम्पलेट”

f5-sales-demo/docs-control रिपॉज़िटरी इनके लिए एकमात्र सत्य का स्रोत है:

  • रीयूज़ेबल वर्कफ़्लो परिभाषाएँ (डॉक्स डिप्लॉय, रिपो सेटिंग्स एनफोर्समेंट)
  • संगठन में सभी रिपो में सिंक की गई प्रबंधित फ़ाइलें
  • मानक कॉन्फ़िगरेशन और ब्रांच प्रोटेक्शन नियम

यह बिल्डर और सभी कंटेंट रिपो अपना CI/CD व्यवहार टेम्पलेट से इनहेरिट करते हैं।

प्रबंधित फ़ाइल सिंक

Section titled “प्रबंधित फ़ाइल सिंक”

टेम्पलेट रिपॉज़िटरी प्रबंधित फ़ाइलें (जैसे वर्कफ़्लो परिभाषाएँ और कॉन्फ़िग फ़ाइलें) डाउनस्ट्रीम रिपो में पुश कर सकती है। यह मैन्युअल अपडेट के बिना सभी रिपॉज़िटरी को संरेखित रखता है। सिंक टेम्पलेट रिपो में एक अलग वर्कफ़्लो के माध्यम से चलता है।

ब्रांच प्रोटेक्शन

Section titled “ब्रांच प्रोटेक्शन”

enforce-repo-settings वर्कफ़्लो टेम्पलेट से ब्रांच प्रोटेक्शन नियम लागू करता है, जिसमें शामिल हैं:

  • मर्ज से पहले आवश्यक स्टेटस चेक
  • आवश्यक लिंक्ड इश्यू चेक
  • स्क्वैश मर्ज प्राथमिक
  • मर्ज के बाद हेड ब्रांच की ऑटो-डिलीट
सीक्रेटस्रोतउद्देश्य
GITHUB_TOKENस्वचालित (GitHub)अधिकांश वर्कफ़्लो द्वारा चेकआउट, पैकेज पब्लिशिंग, और API कॉल के लिए उपयोग किया जाता है
REPO_ADMIN_TOKENमैनुअल (रिपॉज़िटरी सीक्रेट)ब्रांच प्रोटेक्शन, रिपो सेटिंग्स को संशोधित करने, और डाउनस्ट्रीम वर्कफ़्लो ट्रिगर करने के लिए enforce-repo-settings और dispatch जॉब द्वारा आवश्यक (admin स्कोप चाहिए)