GitHub Actions के साथ C++ के लिए CI/CD का परिचय
\nC++ में आधुनिक डेवलपमेंट बिल्ड और टेस्टिंग प्रक्रियाओं के ऑटोमेशन के बिना अधूरी है। CI/CD (Continuous Integration / Continuous Deployment) टीमों को तेजी से त्रुटियों का पता लगाने, स्वचालित रूप से बाइनरी फ़ाइलें बनाने और एप्लिकेशन को डिप्लॉय करने में सक्षम बनाता है। GitHub Actions GitHub में निर्मित एक शक्तिशाली टूल है, जो C++ प्रोजेक्ट्स के लिए आदर्श है। इस लेख में, हम C++ के लिए पूर्ण CI/CD पाइपलाइन सेटअप करने के तरीके पर चर्चा करेंगे: CMake के साथ कंपाइलेशन से लेकर तैयार आर्टिफैक्ट्स के डिप्लॉयमेंट तक।
\nहम वास्तविक कोड उदाहरण, सामान्य त्रुटियाँ और सर्वोत्तम प्रथाओं को देखेंगे। पढ़ने के बाद, आप अपने C++ प्रोजेक्ट में स्वयं CI/CD लागू करने में सक्षम होंगे।
\n\nC++ के लिए GitHub Actions की मूल बातें
\nवर्कफ़्लो फ़ाइल की संरचना
\nGitHub Actions में वर्कफ़्लो को .github/workflows/ डायरेक्टरी में YAML फ़ाइल द्वारा परिभाषित किया जाता है। C++ प्रोजेक्ट के लिए एक बुनियादी उदाहरण देखें:
name: C++ CI/CD Pipeline\n\non:\n push:\n branches: [ main, develop ]\n pull_request:\n branches: [ main ]\n\njobs:\n build:\n runs-on: ubuntu-latest\n\n steps:\n - name: Checkout repository\n uses: actions/checkout@v4\n\n - name: Install dependencies\n run: |\n sudo apt-get update\n sudo apt-get install -y cmake g++ libboost-all-dev\n\n - name: Configure with CMake\n run: mkdir build && cd build && cmake ..\n\n - name: Build project\n run: cd build && make -j$(nproc)\n\n - name: Run tests\n run: cd build && ctest --output-on-failure\nयह वर्कफ़्लो main और develop में पुश करने पर, साथ ही pull request बनाने पर चलता है। यह डिपेंडेंसी इंस्टॉल करता है, CMake के माध्यम से बिल्ड कॉन्फ़िगर करता है, प्रोजेक्ट को कंपाइल करता है और टेस्ट चलाता है।
ऑपरेटिंग सिस्टम और कंपाइलर का चयन
\nGitHub Actions Linux (ubuntu), macOS और Windows को सपोर्ट करता है। क्रॉस-प्लेटफ़ॉर्म प्रोजेक्ट्स के लिए, आप बिल्ड मैट्रिक्स का उपयोग कर सकते हैं:
\njobs:\n build:\n strategy:\n matrix:\n os: [ubuntu-latest, macos-latest, windows-latest]\n compiler: [g++, clang++]\n runs-on: ${{ matrix.os }}\n\n steps:\n - name: Set compiler\n run: |\n if [ "${{ matrix.os }}" == "windows-latest" ]; then\n echo "CXX=cl.exe" >> $GITHUB_ENV\n else\n echo "CXX=${{ matrix.compiler }}" >> $GITHUB_ENV\n fi\n shell: bash\nयह विभिन्न कंपाइलर और OS के साथ कोड की संगतता की जाँच करने की अनुमति देता है।
\n\nउन्नत सेटअप: टेस्टिंग, कैशिंग और आर्टिफैक्ट्स
\nडिपेंडेंसी कैशिंग
\nGitHub Actions में प्रत्येक बिल्ड एक साफ़ वातावरण से शुरू होता है। प्रक्रिया को गति देने के लिए, डाउनलोड किए गए पैकेज और लाइब्रेरी को कैश करें:
\n- name: Cache CMake build directory\n uses: actions/cache@v3\n with:\n path: build\n key: ${{ runner.os }}-cmake-${{ hashFiles('**/CMakeLists.txt') }}\n restore-keys: |\n ${{ runner.os }}-cmake-\n\n- name: Configure CMake\n run: cmake -B build -S . -DCMAKE_BUILD_TYPE=Release\nयदि CMakeLists.txt फ़ाइलें नहीं बदली हैं, तो कैश पुनर्स्थापित हो जाता है, जिससे बार-बार बिल्ड करने पर समय की बचत होती है।
\n\nGoogle Test के साथ यूनिट टेस्ट चलाना
\nC++ के लिए अक्सर Google Test का उपयोग किया जाता है। JUnit प्रारूप में रिपोर्ट जनरेशन के साथ टेस्टिंग चरण जोड़ें:
\n- name: Build and run tests\n run: |\n cmake --build build --target all_tests\n cd build && ctest --output-junit test-results.xml\n\n- name: Upload test results\n if: always()\n uses: actions/upload-artifact@v4\n with:\n name: test-results-${{ runner.os }}\n path: build/test-results.xml\nफ़्लैग if: always() टेस्ट फेल होने पर भी रिपोर्ट अपलोड करने की गारंटी देता है।
आर्टिफैक्ट्स बनाना और प्रकाशित करना
\nसफल बिल्ड के बाद, बाइनरी फ़ाइलों को सहेजा जा सकता है:
\n- name: Build release binary\n run: cmake --build build --config Release\n\n- name: Upload build artifacts\n uses: ac