GitHub Actions पर C++ परियोजनाओं के लिए उन्नत CI/CD
\n\nजब सरल पाइपलाइन "बनाया - परीक्षण चलाया - डिप्लॉय किया" पर्याप्त नहीं रह जाती, तब उन्नत तकनीकों का समय आता है। इस लेख में हम देखेंगे कि पेशेवर स्तर पर C++ परियोजनाओं के लिए GitHub Actions को कैसे कॉन्फ़िगर करें: निर्भरता कैशिंग, विभिन्न कंपाइलरों के लिए बिल्ड मैट्रिक्स, कोड का स्थैतिक विश्लेषण, आर्टिफैक्ट्स और स्मार्ट ट्रिगर। सभी उदाहरण CMake का उपयोग करके C++ में दिए गए हैं।
\n\n1. निर्भरता कैशिंग और बिल्ड को तेज़ करना
\n\nवर्कफ़्लो का प्रत्येक रन एक साफ़ वर्चुअल मशीन से शुरू होता है। कैशिंग के बिना, आप हर बार एक ही लाइब्रेरी (जैसे Boost या Google Test) को डाउनलोड और बनाएंगे। समाधान GitHub Actions की अंतर्निहित कैशिंग का उपयोग करना है।
\n\nname: C++ के लिए CI (उन्नत)\non: [push, pull_request]\n\njobs:\n build:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n\n - name: निर्भरता कैशिंग\n uses: actions/cache@v3\n with:\n path: |\n ~/.cache\n build/_deps\n key: ${{ runner.os }}-c++-${{ hashFiles('CMakeLists.txt', '**/*.cmake') }}\n restore-keys: |\n ${{ runner.os }}-c++-\n\n - name: सिस्टम निर्भरताएँ स्थापित करना\n run: sudo apt-get update && sudo apt-get install -y libboost-all-dev\n\n - name: बिल्ड\n run: |\n cmake -B build -DCMAKE_BUILD_TYPE=Release\n cmake --build build -j$(nproc)\n\nkey CMakeLists.txt के हैश के आधार पर बनता है - जब निर्भरता सूची बदलती है, तो कैश स्वचालित रूप से अमान्य हो जाता है। restore-keys पैरामीटर सटीक कुंजी न मिलने पर आंशिक रूप से कैश को पुनर्स्थापित करने की अनुमति देता है।
2. बिल्ड मैट्रिक्स: एकाधिक कंपाइलर और प्लेटफ़ॉर्म
\n\nक्रॉस-प्लेटफ़ॉर्म C++ एप्लिकेशन विकसित करते समय, विभिन्न कंपाइलरों के साथ बिल्ड की जाँच करना महत्वपूर्ण है। GitHub Actions मैट्रिक्स रणनीति (matrix strategy) का समर्थन करता है।
\n\njobs:\n build:\n strategy:\n matrix:\n os: [ubuntu-latest, windows-latest, macos-latest]\n compiler: [gcc, clang, msvc]\n exclude:\n - os: ubuntu-latest\n compiler: msvc\n - os: windows-latest\n compiler: clang\n - os: macos-latest\n compiler: msvc\n\n runs-on: ${{ matrix.os }}\n\n steps:\n - uses: actions/checkout@v4\n\n - name: कंपाइलर सेटअप (Linux)\n if: runner.os == 'Linux'\n run: |\n if [ "${{ matrix.compiler }}" == "gcc" ]; then\n echo "CC=gcc" >> $GITHUB_ENV\n echo "CXX=g++" >> $GITHUB_ENV\n elif [ "${{ matrix.compiler }}" == "clang" ]; then\n echo "CC=clang" >> $GITHUB_ENV\n echo "CXX=clang++" >> $GITHUB_ENV\n fi\n\n - name: CMake के साथ बिल्ड\n run: |\n cmake -B build -DCMAKE_BUILD_TYPE=Debug\n cmake --build build\n\nमैट्रिक्स स्वचालित रूप से 6 कार्य उत्पन्न करता है (अमान्य संयोजनों को छोड़कर 3 OS × 2 कंपाइलर)। यह किसी विशिष्ट कंपाइलर या प्लेटफ़ॉर्म के लिए विशिष्ट समस्याओं को शीघ्रता से खोजने में मदद करता है।
\n\n3. स्थैतिक विश्लेषण और लिंटर्स
\n\nC++ कोड की गुणवत्ता महत्वपूर्ण है। पाइपलाइन में Clang-Tidy, Cppcheck या SonarCloud के साथ स्थैतिक विश्लेषण शामिल करें। Clang-Tidy के साथ एक उदाहरण देखें।
\n\njobs:\n static-analysis:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n\n - name: उपकरण स्थापित करना\n run: |\n sudo apt-get install -y clang-tidy cppcheck\n pip install compiledb\n\n - name: compile_commands.json जनरेट करना\n run: |\n cmake -B build -DCMAKE_EXPORT_COMPILE_COMMANDS=ON\n compiledb -o build/compile_commands.json make -C build\n\n - name: Clang-Tidy चलाना\n run: |\n find . -name '*.cpp' -o -name '*.hpp' | xargs clang-tidy -p build --checks='*,-modernize-use