±¾ÎÄÊÇ Nebula Graph ¹¤³ÌʦÀûÓà GitHub Action ´î½¨ CI/CD ϵͳµÄʵ¼ù£¬Ï£ÍûÄܹ»¶Ô¶ÁÕßÓÐËù°ïÖú£¬Í¬Ê±Ò²»¶Ó¶ÁÕßÁôÑÔÓë×÷Õß½øÐн»Á÷¡£
Nebula Graph ×îÔçµÄ×Ô¶¯»¯²âÊÔÊÇʹÓôÔÚ Azure É쵀 Jenkins£¬ÅäºÏ×Å GitHub µÄ Webhook ʵÏֵģ¬ÔÚÓû§Ìá½» Pull Request ʱ£¬¼Ó¸ö ready-for-testing µÄ label ÔÙÆÀÂÛÒ»¾ä Jenkins go ¾Í¿ÉÒÔ×Ô¶¯µÄÔËÐÐÏàÓ¦µÄ UT ²âÊÔ£¬Ð§¹ûÈçÏ£º
ÒòΪÊÇ×âÓÃµÄ Azure µÄÔÆÖ÷»ú£¬¼ÓÉÏ nebula µÄ±àÒëÒªÇóµÄ»úÆ÷ÅäÖýϸߣ¬¶øÇÒÈÎÎñµÄ´¥·¢Ö÷Òª¼¯ÖÐÔÚ°×Ìì¡£ËùÒÔÉÏÊöµÄ·½°¸ÐԼ۱Ƚϵͣ¬´ÓÈ¥ÄêÍŶӾÍÔÚ¿¼ÂÇÑ°ÕÒÌæ´úµÄ·½°¸£¬×¼±¸ÏÂÏß Azure ÉϵIJâÊÔ»ú£¬²¢ÇÒ»¹ÒªÄÜÌṩ¶à»·¾³µÄ²âÊÔ·½°¸¡£
µ÷ÑÐÁËһȦÏÖÓеIJúÆ·Ö÷ÒªÓУº
ËäÈ»ÉÏÃæµÄ²úÆ·¶Ô¿ªÔ´ÏîÄ¿ÓÐЩÏÞÖÆ£¬µ«ÕûÌ嶼»¹Ëã±È½ÏÓѺá£
¼øÓÚ֮ǰ GitLab CI µÄʹÓþÑ飬Ìå»áµ½Èç¹ûÄܸú GitHub Éî¶È¼¯³ÉÄǵ±È»ÊÇÊ×Ñ¡¡£Ëùν¡°Éî¶È¡±±íʾ¿ÉÒÔ¹²Ïí GitHub µÄÕû¸ö¿ªÔ´µÄÉú̬ÒÔ¼°ÍêÃÀµÄ API µ÷Ó㨺󻰣©¡£Ç¡ÇÉ 2019£¬GitHub Action 2.0 ºá¿Õ³öÊÀ£¬Nebula Graph ±ãÓ¸ҵÄÈëÁË¿Ó¡£
ÕâÀï¼òµ¥¸ÅÊöÒ»ÏÂÎÒÃÇÔÚʹÓà GitHub Action ʱÌå»áµ½µÄÓŵ㣺
ÏÂÃæÔÚ½²Êµ¼ù֮ǰ»¹ÊÇÒªÏȽ²½² Nebula Graph µÄÐèÇó£ºÊ×ҪĿ±ê±È½ÏÃ÷È·¾ÍÊÇ×Ô¶¯»¯²âÊÔ¡£
×÷ΪÊý¾Ý¿â²úÆ·£¬²âÊÔÔõôǿµ÷Ò²²»Îª¹ý¡£Nebula Graph µÄ²âÊÔÖ÷Òª·Öµ¥Ôª²âÊԺͼ¯³É²âÊÔ¡£Óà GitHub Action ÆäʵÖ÷ÒªÃé×¼µÄÊǵ¥Ôª²âÊÔ£¬È»ºóÔÙ¸ø¼¯³É²âÊÔ×öЩ׼±¸£¬±ÈÈç docker ¾µÏñ¹¹½¨ºÍ°²×°³ÌÐò´ò°ü¡£Ë³´øÔÙ½â¾öһϠPM С½ã½ãµÄ·¢²¼ÐèÇ󣬾ÍÕû¸ö¹¹½¨ÆðÀ´Á˵ÚÒ»°æµÄ CI/CD Á÷³Ì¡£
Nebula Graph ×÷ΪÍйÜÔÚ GitHub ÉϵĿªÔ´ÏîÄ¿£¬Ê×ÏÈÒª½â¾öµÄ²âÊÔÎÊÌâ¾ÍÊǵ±¹±Ï×ÕßÌá½»ÁË PR ÇëÇóºó£¬ÈçºÎ²ÅÄÜ¿ìËٵؽøÐбä¸üÑéÖ¤£¿Ö÷ÒªÓÐÒÔϼ¸¸ö·½Ãæ¡£
Ö»ÓÐÉÏÊöµÄÒªÇóÈ«²¿Âú×ã²¢ÇÒÓÐÖÁÉÙÁ½Î» reviewer µÄͬÒ⣬±ä¸ü²ÅÄܽøÈëÖ÷¸É·ÖÖ§¡£
½èÖúÓÚ cpplint »òÕß clang-format µÈ¿ªÔ´¹¤¾ß¿ÉÒԱȽϼòµ¥µØʵÏÖÒªÇó 1£¬Èç¹û´ËÒªÇóδͨ¹ýÑéÖ¤£¬ºóÃæµÄ²½Öè¾Í×Ô¶¯Ìø¹ý£¬²»ÔÙ¼ÌÐøÖ´ÐС£
¶ÔÓÚÒªÇó 2£¬ÎÒÃÇÏ£ÍûÄÜͬʱÔÚÄ¿Ç°Ö§³ÖµÄ¼¸¸öϵͳÉÏÔËÐÐ Nebula Ô´ÂëµÄ±àÒëÑéÖ¤¡£ÄÇôÏñ֮ǰÔÚÎïÀí»úÉÏÖ±½Ó¹¹½¨µÄ·½Ê½¾Í²»ÔÙ¿ÉÈ¡£¬±Ï¾¹Ò»Ì¨ÎïÀí»úµÄ¼Û¸ñÒѾ¸ß°º£¬ºÎ¿öһ̨»¹²»×ã¹»¡£ÎªÁ˱£Ö¤±àÒë»·¾³µÄÒ»ÖÂÐÔ£¬»¹Òª¾¡¿ÉÄܵļõÉÙ»úÆ÷µÄÐÔÄÜËðʧ£¬×îÖÕ²ÉÓÃÁË docker µÄÈÝÆ÷»¯¹¹½¨·½Ê½¡£ÔÙ½èÖú Action µÄ matrix ÔËÐвßÂÔ ºÍ¶Ô docker µÄÖ§³Ö£¬»¹Ëã˳ÀûµØ½«Õû¸öÁ÷³Ì×ßͨ¡£
ÔËÐеĴó¸ÅÁ÷³ÌÈçÉÏͼËùʾ£¬ÔÚ vesoft-inc/nebula-dev-docker ÏîÄ¿ÖÐά»¤ nebula ±àÒë»·¾³µÄ docker ¾µÏñ£¬µ±±àÒëÆ÷»òÕß thirdparty ÒÀÀµÉý¼¶±ä¸üʱ£¬×Ô¶¯´¥·¢ docker hub µÄ Build ÈÎÎñ£¨¼ûÏÂͼ£©¡£µ±Ð嵀 Pull Request Ìá½»ÒÔºó£¬Action ±ã»á±»´¥·¢¿ªÊ¼ÀÈ¡×îеıàÒë»·¾³¾µÏñ£¬Ö´ÐбàÒë¡£
Õë¶Ô PR µÄ workflow ÍêÕûÃèÊö¼ûÎļþ pull_request.yaml¡£Í¬Ê±£¬¿¼Âǵ½²¢²»ÊÇÿ¸öÈËÌá½»µÄ PR ¶¼ÐèÒªÁ¢¼´ÔËÐÐ CI ²âÊÔ£¬ÇÒ×Ô½¨µÄ»úÆ÷×ÊÔ´ÓÐÏÞ£¬¶Ô CI µÄ´¥·¢×öÁËÈçÏÂÏÞÖÆ£º
jobs:???lint:?????name:?cpplint?????if:?contains(join(toJson(github.event.pull_request.labels.*.name)),?'ready-for-testing')?
ÔÚ PR ÖÐÖ´ÐÐÍê³ÉºóµÄЧ¹ûÈçÏÂËùʾ£º
Code Coverage µÄ˵Ã÷¼û²©ÎÄ£ºÍ¼Êý¾Ý¿â Nebula Graph µÄ´úÂë±ä¸ü²âÊÔ¸²¸ÇÂÊʵ¼ù¡£
https://nebula-graph.io/cn/posts/integrate-codecov-test-coverage-with-nebula-graph/
ÔÚ Nebula Graph µÄ¼¯³É²âÊÔ¿ò¼ÜÖУ¬Ï£ÍûÄܹ»ÔÚÿÌìÍíÉÏ¶Ô codebase ÖеĴúÂëÈ«Á¿ÅÜÒ»±éËùÓеIJâÊÔÓÃÀý¡£Í¬Ê±ÓÐЩеÄÌØÐÔ£¬ÓÐʱҲϣÍûÄÜ¿ìËٵشò°ü½»¸øÓû§ÌåÑéʹÓá£Õâ¾ÍÐèÒª CI ϵͳÄÜÔÚÿÌì¸ø³öµ±ÈÕ´úÂëµÄ docker ¾µÏñºÍ rpm/deb °²×°°ü¡£
GitHub Action ±»´¥·¢µÄʼþÀàÐͳýÁË pull_request£¬»¹¿ÉÒÔÖ´ÐÐ schedule ÀàÐÍ¡£schedule ÀàÐ͵Äʼþ¿ÉÒÔÏñ crontab Ò»Ñù£¬ÈÃÓû§Ö¸¶¨ÈκÎÖظ´ÈÎÎñµÄ´¥·¢Ê±¼ä£¬±ÈÈçÿÌìÁ賿Á½µãÖ´ÐÐÈÎÎñÈçÏÂËùʾ£º
on:???schedule:?????-?cron:?'0?18?*?*?*'?
ÒòΪ GitHub ²ÉÓõÄÊÇ UTC ʱ¼ä£¬ËùÒÔ¶«°ËÇøµÄÁ賿 2 µã£¬¾Í¶ÔÓ¦µ½ UTC µÄÇ°ÈÕ 18 ʱ¡£
docker
ÿÈÕ¹¹½¨µÄ docker ¾µÏñÐèÒª push µ½ docker hub ÉÏ£¬²¢´òÉÏ nightly µÄ±êÇ©£¬¼¯³É²âÊ﵀ k8s ¼¯Èº£¬½« image µÄÀÈ¡²ßÂÔÉèÖÃΪ Always£¬Ã¿ÈÕ´¥·¢±ãÄܹö¶¯Éý¼¶µ½µ±ÈÕ×îнøÐвâÊÔ¡£ÒòΪµ±ÈÕµÄÎÊÌâÄ¿Ç°¶¼»á¾¡Á¿µ±ÈÕ½â¾ö£¬±ãûÓÐÔÙ¸ø nightly µÄ¾µÏñÔÙ¶îÍâ´òÒ»¸öÈÕÆÚµÄ tag¡£¶ÔÓ¦µÄ action ²¿·ÖÈçÏÂËùʾ£º
-?name:?Build?image????????env:??????????IMAGE_NAME:?${{?secrets.DOCKER_USERNAME?}}/nebula-${{?matrix.service?}}:nightly????????run:?|??????????docker?build?-t?${IMAGE_NAME}?-f?docker/Dockerfile.${{?matrix.service?}}?.??????????docker?push?${IMAGE_NAME}????????shell:?bash?
package
GitHub Action ÌṩÁË artifacts µÄ¹¦ÄÜ£¬¿ÉÒÔÈÃÓû§³Ö¾Ã»¯ workflow ÔËÐйý³ÌÖеÄÊý¾Ý£¬ÕâЩÊý¾Ý¿ÉÒÔ±£Áô 90 Ìì¡£¶ÔÓÚ nightly °æ±¾°²×°°üµÄ´æ´¢¶øÑÔ£¬ÒѾ´Â´ÂÓÐÓà¡£ÀûÓùٷ½ÌṩµÄ actions/upload-artifact@v1 ?action£¬¿ÉÒÔ·½±ãµÄ½«Ö¸¶¨Ä¿Â¼ÏµÄÎļþÉÏ´«µ½ artifacts¡£×îºó nightly °æ±¾µÄ nebula µÄ°²×°°üÈçÏÂͼËùʾ¡£
ÉÏÊöÍêÕûµÄ workflow Îļþ¼û package.yaml
https://github.com/vesoft-inc/nebula/blob/master/.github/workflows/package.yaml
ΪÁ˸üºÃµØά»¤Ã¿¸ö·¢²¼µÄ°æ±¾ºÍ½øÐÐ bugfix£¬Nebula Graph ²ÉÓ÷ÖÖ§·¢²¼µÄ·½Ê½¡£¼´Ã¿´Î·¢²¼Ö®Ç°½øÐÐ code freeze£¬²¢´´½¨Ð嵀 release ·ÖÖ§£¬ÔÚ release ·ÖÖ§ÉÏÖ»½ÓÊÜ bugfix£¬¶ø²»½øÐÐ feature µÄ¿ª·¢¡£bugfix »¹ÊÇ»áÔÚ¿ª·¢·ÖÖ§ÉÏÌá½»£¬×îºó cherrypick µ½ release ·ÖÖ§¡£
ÔÚÿ´Î release ʱ£¬³ýÁË source Í⣬ÎÒÃÇÏ£ÍûÄÜ°Ñ°²×°°üÒ²×·¼Óµ½ assets Öз½±ãÓû§Ö±½ÓÏÂÔØ¡£Èç¹ûÿ´Î¶¼ÊÖ¹¤ÉÏ´«£¬¼ÈÈÝÒ׳ö´í£¬Ò²·Ç³£ºÄʱ¡£Õâ¾Í±È½ÏÊÊºÏ Action À´×Ô¶¯»¯Õâ¿éµÄ¹¤×÷£¬¶øÇÒ£¬´ò°üºÍÉÏ´«¶¼×ß GitHub ÄÚ²¿ÍøÂ磬Ëٶȸü¿ì¡£
ÔÚ°²×°°ü±àÒëºÃºó£¬Í¨¹ý curl ÃüÁîÖ±½Óµ÷Óà GitHub µÄ API£¬¾ÍÄÜÉÏ´«µ½ assets ÖУ¬¾ßÌå½Å±¾ ÄÚÈÝÈçÏÂËùʾ£º
curl?--silent?\??????--request?POST?\??????--url?"$upload_url?name=$filename"?\??????--header?"authorization:?Bearer?$github_token"?\??????--header?"content-type:?$content_type"?\??????--data-binary?@"$filepath"?
ͬʱ£¬ÎªÁË°²È«Æð¼û£¬ÔÚÿ´ÎµÄ°²×°°ü·¢²¼Ê±£¬Ï£Íû¿ÉÒÔ¼ÆËã°²×°°üµÄ checksum Öµ£¬²¢½«ÆäһͬÉÏ´«µ½ assets ÖУ¬ÒÔ±ãÓû§ÏÂÔغó½øÐÐÍêÕûÐÔУÑé¡£¾ßÌå²½ÖèÈçÏÂËùʾ£º
jobs:???package:?????name:?package?and?upload?release?assets?????runs-on:?ubuntu-latest?????strategy:???????matrix:?????????os:???????????-?ubuntu1604???????????-?ubuntu1804???????????-?centos6???????????-?centos7?????container:???????image:?vesoft/nebula-dev:${{?matrix.os?}}?????steps:???????-?uses:?actions/checkout@v1???????-?name:?package?????????run:?./package/package.sh???????-?name:?vars?????????id:?vars?????????env:???????????CPACK_OUTPUT_DIR:?build/cpack_output???????????SHA_EXT:?sha256sum.txt?????????run:?|???????????tag=$(echo?${{?github.ref?}}?|?rev?|?cut?-d/?-f1?|?rev)???????????cd?$CPACK_OUTPUT_DIR???????????filename=$(find?.?-type?f?\(?-iname?\*.deb?-o?-iname?\*.rpm?\)?-exec?basename?{}?\;)???????????sha256sum?$filename?>?$filename.$SHA_EXT???????????echo?"::set-output?name=tag::$tag"???????????echo?"::set-output?name=filepath::$CPACK_OUTPUT_DIR/$filename"???????????echo?"::set-output?name=shafilepath::$CPACK_OUTPUT_DIR/$filename.$SHA_EXT"?????????shell:?bash???????-?name:?upload?release?asset?????????run:?|???????????./ci/scripts/upload-github-release-asset.sh?github_token=${{?secrets.GITHUB_TOKEN?}}?repo=${{?github.repository?}}?tag=${{?steps.vars.outputs.tag?}}?filepath=${{?steps.vars.outputs.filepath?}}???????????./ci/scripts/upload-github-release-asset.sh?github_token=${{?secrets.GITHUB_TOKEN?}}?repo=${{?github.repository?}}?tag=${{?steps.vars.outputs.tag?}}?filepath=${{?steps.vars.outputs.shafilepath?}}?
ÉÏÊöÍêÕûµÄ workflow Îļþ¼û release.yaml¡£
https://github.com/vesoft-inc/nebula/blob/master/.github/workflows/release.yaml
GitHub Action Ϊ workflow ÌṩÁËһЩ ÃüÁî ·½±ãÔÚ shell ÖнøÐе÷Óã¬À´¸ü¾«Ï¸µØ¿ØÖƺ͵÷ÊÔÿ¸ö²½ÖèµÄÖ´ÐС£³£ÓõÄÃüÁîÈçÏ£º
set-output
ÓÐʱÔÚ job µÄ steps Ö®¼äÐèÒª´«µÝһЩ½á¹û£¬Õâʱ¾Í¿ÉÒÔͨ¹ý echo "::set-output name=output_name::output_value" µÄÃüÁîÐÎʽ½«ÏëÒªÊä³öµÄ output_value ÖµÉèÖõ½ output_name ±äÁ¿ÖС£
ÔÚ½ÓÏÂÀ´µÄ step ÖУ¬¿ÉÒÔͨ¹ý $?{{steps.step_id.outputs.output_name}}?µÄ·½Ê½ÒýÓÃÉÏÊöµÄÊä³öÖµ¡£
ÉϽÚÖÐÉÏ´« asset µÄ job ÖоÍʹÓÃÁËÉÏÊöµÄ·½Ê½À´´«µÝÎļþÃû³Æ¡£Ò»¸ö²½Öè¿ÉÒÔͨ¹ý¶à´ÎÖ´ÐÐÉÏÊöÃüÁîÀ´ÉèÖöà¸öÊä³ö¡£
set-env
ͬ set-output Ò»Ñù£¬¿ÉÒÔΪºóÐøµÄ²½ÖèÉèÖû·¾³±äÁ¿¡£Óï·¨£ºecho "::set-env name={name}::{value}" ¡£
add-path
½«Ä³Â·¾¶¼ÓÈëµ½ PATH ±äÁ¿ÖУ¬ÎªºóÐø²½ÖèʹÓá£Óï·¨£ºecho "::add-path::{path}" ¡£
³ýÁË GitHub ¹Ù·½ÍÐ¹ÜµÄ runner Ö®Í⣬Action »¹ÔÊÐíʹÓÃÏßÏÂ×Ô¼ºµÄ»úÆ÷×÷Ϊ Runner À´ÅÜ Action µÄ job¡£ÔÚ»úÆ÷ÉÏ°²×°ºÃ Action Runner Ö®ºó£¬°´ÕÕ ½Ì³Ì£¬½«Æä×¢²áµ½ÏîÄ¿ºó£¬ÔÚ workflow ÎļþÖÐͨ¹ýÅäÖà runs-on: self-hosted ¼´¿ÉʹÓá£
self-hosted µÄ»úÆ÷¿ÉÒÔ´òÉϲ»Í¬µÄ label£¬ÕâÑù±ã¿ÉÒÔͨ¹ý ²»Í¬µÄ±êÇ© À´½«ÈÎÎñ·Ö·¢µ½Ìض¨µÄ»úÆ÷ÉÏ¡£±ÈÈçÏßϵĻúÆ÷°²×°Óв»Í¬µÄ²Ù×÷ϵͳ£¬ÄÇô job ¾Í¿ÉÒÔ¸ù¾Ý runs-on µÄ label ÔÚÌض¨µÄ»úÆ÷ ÉÏÔËÐС£self-hosted Ò²ÊÇÒ»¸öÌض¨µÄ±êÇ©¡£
°²È«
GitHub ¹Ù·½ÊDz»ÍƼö¿ªÔ´ÏîĿʹÓà Self-Hosted µÄ runner µÄ£¬ÔÒòÊÇÈκÎÈ˶¼¿ÉÒÔͨ¹ýÌá½» PR µÄ·½Ê½£¬Èà runner µÄ»úÆ÷ÔËÐÐΣÏյĴúÂë¶ÔÆäËùÔڵĻ·¾³½øÐй¥»÷¡£
µ«ÊÇ Nebula Graph µÄ±àÒëÐèÒªµÄ´æ´¢¿Õ¼ä½Ï´ó£¬ÇÒ GitHub Ö»ÄÜÌṩ 2 ºËµÄ»·¾³À´±àÒ룬²»µÃÒÑ»¹ÊÇÑ¡ÔñÁË×Ô½¨ Runner¡£¿¼Âǵ½°²È«µÄÒòËØ£¬½øÐÐÁËÈçÏ·½ÃæµÄ°²È«¼Ó¹Ì£º
ÐéÄâ»ú²¿Êð
ËùÓÐ×¢²áµ½ GitHub Action µÄ runner ¶¼ÊDzÉÓÃÐéÄâ»ú²¿Ê𣬸úËÞÖ÷»ú×öºÃµÚÒ»²ãµÄ¸ôÀ룬Ҳ¸ü·½±ã¶Ôÿ¸öÐéÄâ»ú×ö×ÊÔ´·ÖÅ䡣һ̨¸ßÅäÖõÄËÞÖ÷»ú¿ÉÒÔ·ÖÅä¶à¸öÐéÄâ»úÈà runner À´²¢ÐеØÅÜËùÓÐÊÕµ½µÄÈÎÎñ¡£
Èç¹ûÐéÄâ»ú³öÁËÎÊÌ⣬¿ÉÒÔ·½±ãµØ½øÐл·¾³¸´ÔµÄ²Ù×÷¡£
ÍøÂç¸ôÀë
½«ËùÓÐ runner ËùÔÚµÄÐéÄâ»ú¸ôÀëÔڰ칫ÍøÂçÖ®Í⣬ʹÆäÎÞ·¨Ö±½Ó·ÃÎʹ«Ë¾ÄÚ²¿×ÊÔ´¡£¼´±ãÓÐÈËͨ¹ý PR Ìá½»Á˶ñÒâ´úÂ룬ҲÈÃÆäÎÞ·¨·ÃÎʹ«Ë¾ÄÚ²¿ÍøÂ磬Ôì³É½øÒ»²½µÄ¹¥»÷¡£
Action Ñ¡Ôñ
¾¡Á¿Ñ¡Ôñ´ó³§ºÍ¹Ù·½·¢²¼µÄ action£¬Èç¹ûÊÇʹÓøöÈË¿ª·¢ÕßµÄ×÷Æ·£¬×îºÃÄܼìÊÓÒ»ÏÂÆä¾ßÌåʵÏÖ´úÂ룬ÃâµÃ³öÏÖÍøÉϱ¬³öÀ´µÄ й©Òþ˽ÃÜÔ¿ µÈÊÂÇé·¢Éú¡£
±ÈÈç GitHub ¹Ù·½Î¬»¤µÄ action ÁÐ±í£º
https://github.com/actions
˽ԿУÑé
GitHub Action »á×Ô¶¯Ð£Ñé PR ÖÐÊÇ·ñʹÓÃÁËһЩ˽Կ£¬³ýÈ´ GITHUB_TOKEN Ö®ÍâµÄÆäËû˽Կ£¨Í¨¹ý $ {{secrets.MY_TOKENS}} ÐÎʽÒýÓ㩾ùÊDz»¿ÉÒÔÔÚ PR ʼþ´¥·¢µÄÏà¹ØÈÎÎñÖÐʹÓã¬ÒÔ·ÀÓû§Í¨¹ý PR µÄ·½Ê½Ë½×Ô´òÓ¡Êä³öÇÔÈ¡ÃÜÔ¿¡£
»·¾³´î½¨ÓëÇåÀí
¶ÔÓÚ×Ô½¨µÄ runner£¬ÔÚ²»Í¬ÈÎÎñ£¨job£©Ö®¼ä×öÎļþ¹²ÏíÊÇ·½±ãµÄ£¬µ«ÊÇ×îºó²»ÒªÍü¼Çÿ´ÎÔÚÕû¸ö action Ö´ÐнáÊøºó£¬ÇåÀí²úÉúµÄÖмäÎļþ£¬²»È»ÕâЩÎļþÓпÉÄÜ»áÓ°Ïì½ÓÏÂÀ´µÄÈÎÎñÖ´ÐкͲ»¶ÏµØÕ¼ÓôÅÅ̿ռ䡣
-?name:?Cleanup????????if:?always()????????run:?rm?-rf?build?
½« step µÄÔËÐÐÌõ¼þÉèÖÃΪ always() È·±£Ã¿´ÎÈÎÎñ¶¼ÒªÖ´Ðиò½Ö裬¼´±ãÖÐ;³ö´í¡£
»ùÓÚ Docker µÄ Matrix ²¢Ðй¹½¨
ÒòΪ Nebula Graph ÐèÒªÔÚ²»Í¬µÄϵͳÉÏ×ö±àÒëÑéÖ¤£¬ÔÚ¹¹½¨·½Ê½ÉϲÉÓÃÁËÈÝÆ÷µÄ·½°¸£¬ÔÒòÊǹ¹½¨Ê±²»Í¬»·¾³µÄ¸ôÀë¼òµ¥·½±ã£¬GitHub Action ¿ÉÒÔÔÉúÖ§³Ö»ùÓÚ docker µÄÈÎÎñ¡£
Action Ö§³Ö matrix ²ßÂÔÔËÐÐÈÎÎñµÄ·½Ê½£¬ÀàËÆÓÚ TravisCI µÄ build matrix¡£Í¨¹ýÅäÖò»Í¬ÏµÍ³ºÍ±àÒëÆ÷µÄ×éºÏ£¬ÎÒÃÇ¿ÉÒÔ·½±ãµØÉèÖÃÔÚÿ¸öϵͳÏÂʹÓà gcc ºÍ clang À´Í¬Ê±±àÒë nebula µÄÔ´Â룬ÈçÏÂËùʾ£º
jobs:???build:?????name:?build?????runs-on:?ubuntu-latest?????strategy:???????fail-fast:?false???????matrix:?????????os:???????????-?centos6???????????-?centos7???????????-?ubuntu1604???????????-?ubuntu1804?????????compiler:???????????-?gcc-9.2???????????-?clang-9?????????exclude:???????????-?os:?centos7?????????????compiler:?clang-9?
ÉÏÊöµÄ strategy »áÉú³É 8 ¸ö²¢ÐеÄÈÎÎñ£¨4 os x 2 compiler£©£¬Ã¿¸öÈÎÎñ¶¼ÊÇ£¨os, compiler£©µÄÒ»¸ö×éºÏ¡£ÕâÖÖÀàËƾØÕóµÄ±í´ï·½Ê½£¬¿ÉÒÔ¼«´óµÄ¼õÉÙ²»Í¬Î³¶ÈÉϵÄÈÎÎñ×éºÏµÄ¶¨Òå¡£
Èç¹ûÏëÅųý matrix ÖеÄij¸ö×éºÏ£¬Ö»Òª½«×éºÏµÄÖµÅäÖõ½ exclude Ñ¡ÏîÏÂÃæ¼´¿É¡£Èç¹ûÏëÔÚÈÎÎñÖзÃÎÊ matrix ÖеÄÖµ£¬Ò²Ö»ÒªÍ¨¹ýÀàËÆ $ {{matrix.os}} »ñÈ¡ÉÏÏÂÎıäÁ¿ÖµµÄ·½Ê½Äõ½¡£ÕâЩ·½Ê½ÈÃÄ㶨ÖÆ×Ô¼ºµÄÈÎÎñʱ¶¼±äµÃÊ®·Ö·½±ã¡£
ÔËÐÐʱÈÝÆ÷
ÎÒÃÇ¿ÉÒÔΪÿ¸öÈÎÎñÖ¸¶¨ÔËÐÐʱµÄÒ»¸öÈÝÆ÷»·¾³£¬ÕâÑù¸ÃÈÎÎñϵÄËùÓв½Ö裨steps£©¶¼»áÔÚÈÝÆ÷µÄÄÚ²¿»·¾³ÖÐÖ´ÐС£Ïà½ÏÓÚÔÚÿ¸ö²½ÖèÖж¼Ì×Óà docker ÃüÁîÒª¼ò½àÃ÷ÁË¡£
container:??????image:?vesoft/nebula-dev:${{?matrix.os?}}??????env:????????CCACHE_DIR:?/tmp/ccache/${{?matrix.os?}}-${{?matrix.compiler?}}?
¶ÔÈÝÆ÷µÄÅäÖã¬ÏñÔÚ docker compose ÖÐÅäÖà service Ò»Ñù£¬¿ÉÒÔÖ¸¶¨ image/env/ports/volumes/options µÈµÈ ²ÎÊý¡£ÔÚ self-hosted µÄ runner ÖУ¬¿ÉÒÔ·½±ãµØ½«ËÞÖ÷»úÉϵÄĿ¼¹ÒÔص½ÈÝÆ÷ÖÐ×öÎļþµÄ¹²Ïí¡£
ÕýÊÇ»ùÓÚ Action ÉÏÃæµÄÈÝÆ÷ÌØÐÔ£¬²Å·½±ãµÄÔÚ docker ÄÚ×öºóÐø±àÒëµÄ»º´æ¼ÓËÙ¡£
Nebula Graph µÄÔ´Âë²ÉÓà C++ ±àд£¬Õû¸ö¹¹½¨¹ý³Ìʱ¼ä½Ï³¤£¬Èç¹ûÿ´Î CI ¶¼ÍêÈ«µØÖØпªÊ¼£¬»áÀË·ÑÐí¶à¼ÆËã×ÊÔ´¡£ÒòΪÿ̨ runner Åܵģ¨ÈÝÆ÷£©ÈÎÎñ²»¶¨£¬ÐèÒª¶Ôÿ¸öÔ´Îļþ¼°¶ÔÓ¦µÄ±àÒë¹ý³Ì½øÐо«×¼Åбð²ÅÄÜÈ·ÈϸÃÔ´ÎļþÊÇ·ñÕæµÄ±»Ð޸ġ£Ä¿Ç°Ê¹ÓÃ×îа汾µÄ ccache À´Íê³É»º´æµÄÈÎÎñ¡£
ËäÈ» GitHub Action ±¾ÉíÌṩ cache µÄ¹¦ÄÜ£¬ÓÉÓÚ Nebula Graph Ä¿Ç°µ¥Ôª²âÊÔµÄÓÃÀý²ÉÓþ²Ì¬Á´½Ó£¬±àÒëºóÌå»ý½Ï´ó£¬³¬³öÆä¿ÉÓõÄÅä¶î£¬ËìʹÓñ¾µØ»º´æµÄ²ßÂÔ¡£
ccache
ccache ÊǸö±àÒëÆ÷µÄ»º´æ¹¤¾ß£¬¿ÉÒÔÓÐЧµØ¼ÓËÙ±àÒëµÄ¹ý³Ì£¬Í¬Ê±Ö§³Ö gcc/clang µÈ±àÒëÆ÷¡£Nebula Graph ʹÓà C++ 14 ±ê×¼£¬µÍ°æ±¾µÄ ccache ÔÚ¼æÈÝÐÔÉÏÓÐÎÊÌ⣬ËùÒÔÔÚËùÓÐµÄ vesoft/nebula-dev ¾µÏñ Öж¼²ÉÓÃÊÖ¶¯±àÒëµÄ·½Ê½°²×°¡£
Nebula Graph ÔÚ cmake µÄÅäÖÃÖÐ×Ô¶¯Ê¶±ðÊÇ·ñ°²×°ÁË ccache£¬²¢¾ö¶¨ÊÇ·ñ¶ÔÆä´ò¿ªÆôÓá£ËùÒÔÖ»ÒªÔÚÈÝÆ÷»·¾³ÖÐ¶Ô ccache ×öЩÅäÖü´¿É£¬±ÈÈçÔÚ ?ccache.conf ?ÖÐÅäÖÃÆä×î´ó»º´æÈÝÁ¿Îª 1 G£¬³¬³öºó×Ô¶¯Ìæ»»½Ï¾É»º´æ¡£
max_size?=?1.0G?
ccache.conf ÅäÖÃÎļþ×îºÃ·ÅÖÃÔÚ»º´æĿ¼Ï£¬ÕâÑù ccache ¿É·½±ã¶ÁÈ¡ÆäÖÐÄÚÈÝ¡£
tmpfs
tmpfs ÊÇλÓÚÄÚ´æ»òÕß swap ·ÖÇøµÄÁÙʱÎļþϵͳ£¬¿ÉÒÔÓÐЧµØ»º½â´ÅÅÌ IO ´øÀ´µÄÑÓ³Ù£¬ÒòΪ self-hosted µÄÖ÷»úÄÚ´æ×ã¹»£¬ËùÒÔ½« ccache µÄĿ¼¹ÒÔØÀàÐ͸ÄΪ tmpfs£¬À´¼õÉÙ ccache ¶Áдʱ¼ä¡£ÔÚ docker ÖÐʹÓà tmpfs µÄ¹ÒÔØÀàÐÍ¿ÉÒԲο¼ ÏàÓ¦Îĵµ¡£ÏàÓ¦µÄÅäÖòÎÊýÈçÏ£º
env:??????CCACHE_DIR:?/tmp/ccache/${{?matrix.os?}}-${{?matrix.compiler?}}????options:?--mount?type=tmpfs,destination=/tmp/ccache,tmpfs-size=1073741824?-v?/tmp/ccache/${{?matrix.os?}}-${{?matrix.compiler?}}:/tmp/ccache/${{?matrix.os?}}-${{?matrix.compiler?}}?
½«ËùÓÐ ccache ²úÉúµÄ»º´æÎļþ£¬·ÅÖõ½¹ÒÔØΪ tmpfs ÀàÐ͵ÄĿ¼Ï¡£
²¢ÐбàÒë
make ±¾Éí¼´Ö§³Ö¶à¸öÔ´ÎļþµÄ²¢ÐбàÒ룬ÔÚ±àÒëʱÅäÖà -j $(nproc) ±ã¿ÉͬʱÆô¶¯ÓëºËÊýÏàͬµÄÈÎÎñÊý¡£ÔÚ action µÄ steps ÖÐÅäÖÃÈçÏ£º
-?name:?Make???????run:?cmake?--build?build/?-j?$(nproc)?
˵ÁËÄÇô¶àµÄÓŵ㣬ÄÇÓÐûÓв»×ãÄØ£¿Ê¹ÓÃÏÂÀ´Ö÷ÒªÌå»áµ½Èçϼ¸µã£º
Ö»Ö§³Ö½Ïа汾µÄϵͳ¡£ºÜ¶à Action ÊÇ»ùÓÚ½ÏÐ嵀 Nodejs °æ±¾¿ª·¢£¬Ã»·¨·½±ãµØÔÚÀàËÆ CentOS 6 µÈÀÏ°æ±¾ docker ÈÝÆ÷ÖÐÖ±½ÓʹÓ᣷ñÔò»á±¨ Nodejs ÒÀÀµµÄ¿âÎļþÕÒ²»µ½£¬´Ó¶øÎÞ·¨Õý³£Æô¶¯ action µÄÖ´ÐС£ÒòΪ Nebula Graph Ï£Íû¿ÉÒÔÖ§³Ö CentOS 6£¬ËùÒÔÔÚ¸ÃϵͳϵÄÈÎÎñ²»µÃ²»ÐèÒªÌØÊâ´¦Àí¡£
²»ÄÜ·½±ãµØ½øÐб¾µØÑéÖ¤¡£ËäÈ»ÉçÇøÓиö¿ªÔ´ÏîÄ¿ act£¬µ«Ê¹ÓÃÏÂÀ´»¹ÊÇÓÐÖî¶àÏÞÖÆ£¬ÓÐʱ²»µÃ²»Í¨¹ýÔÚ×Ô¼º²Ö¿âÖз´¸´Ìá½»ÑéÖ¤²ÅÄÜÈ·±£ action µÄÐÞ¸ÄÕýÈ·¡£
Ä¿Ç°»¹È±ÉٱȽϺõÄÖ¸µ¼¹æ·¶£¬µ±¶¨ÖƵÄÈÎÎñ½Ï¶àʱ£¬×ÜÓÐÖÖÔÚ YAML ÅäÖÃÖÐд³ÌÐòµÄ¸ÐÊÜ¡£Ä¿Ç°µÄ×ö·¨Ö÷ÒªÓÐÒÔÏÂÈýÖÖ£º
Ä¿Ç°Õë¶Ô¾¡Á¿¶àʹÓÃСÈÎÎñµÄ×éºÏ»¹ÊÇʹÓôóÈÎÎñµÄ·½Ê½£¬ÉçÇøҲûÓж¨ÂÛ¡£²»¹ýСÈÎÎñ×éºÏµÄ·½Ê½¿ÉÒÔ·½±ãµØ¶¨Î»ÈÎÎñʧ°ÜλÖÃÒÔ¼°È·¶¨Ã¿²½µÄÖ´ÐÐʱ¼ä¡£
Action µÄһЩÀúÊ·¼Ç¼ĿǰÎÞ·¨ÇåÀí£¬Èç¹ûÖÐ;¸ü¸ÄÁË workflows µÄÃû×Ö£¬ÄÇôÀ쵀 check runs ¼Ç¼»¹ÊÇ»áÒ»Ö±±£ÁôÔÚ Action Ò³Ã棬ӰÏìʹÓÃÌåÑé¡£
Ä¿Ç°»¹È±ÉÙÏñ GitLab CI ÖÐÊÖ¶¯´¥·¢ job/task ÔËÐеŦÄÜ¡£ÎÞ·¨ÔËÐÐÖмä½øÐÐÈ˹¤¸ÉÔ¤¡£
action µÄ¿ª·¢Ò²ÔÚ²»Í£µÄµü´úÖУ¬ÓÐʱÐèҪά»¤Ò»ÏÂаæµÄÉý¼¶£¬±ÈÈ磺checkout@v2
²»¹ý×ÜÌåÀ´Ëµ£¬GitHub Action ÊÇÒ»¸öÏà¶ÔÓÅÐãµÄ CI/CD ϵͳ£¬±Ï¾¹Õ¾ÔÚ GitLab CI/Travis CI µÈÇ°È˼ç°òÉϵIJúÆ·£¬»¹ÊÇÓкܶà¾Ñé¿ÉÒÔ½è¼øʹÓá£
¶¨ÖÆ Action
Ç°¶Îʱ¼ä docker ·¢²¼ÁË×Ô¼ºµÄµÚÒ»¿î Action£¬¼ò»¯Óû§Óë docker Ïà¹ØµÄÈÎÎñ¡£ºóÐø£¬Õë¶Ô Nebula Graph µÄһЩ CI/CD µÄ¸´ÔÓÐèÇó£¬ÎÒÃÇÒà»á¶¨ÖÆһЩרÊôµÄ action À´¸ø nebula µÄËùÓÐ repo ʹÓá£Í¨Óõľͻᴴ½¨¶ÀÁ¢µÄ repo£¬·¢²¼µ½ action Êг¡À±ÈÈç×·¼Ó assets µ½ release ¹¦ÄÜ¡£×¨ÊôµÄ¾Í¿ÉÒÔ·ÅÖà repo µÄ .github/actions Ŀ¼Ï¡£
ÕâÑù¾Í¿ÉÒÔ¼ò»¯ workflows ÖÐµÄ YAML ÅäÖã¬Ö»Òª use ij¸ö¶¨ÖÆ action ¼´¿É¡£Áé»îÐÔºÍÍØÕ¹ÐÔ¶¼¸üÓÅ¡£
¸ú¶¤¶¤ /slack µÈ IM ¼¯³É
ͨ¹ý GitHub µÄ SDK ¿ÉÒÔ¿ª·¢¸´Ô action Ó¦Óã¬ÔÙ½áºÏ ¶¤¶¤/slack µÈ bot µÄ¶¨ÖÆ£¬¿ÉÒÔʵÏÖÐí¶à×Ô¶¯»¯µÄÓÐÒâ˼µÄСӦÓᣱÈÈ磬µ±Ò»¸ö PR ±» 2 ¸öÒÔÉ쵀 reviewer approve ²¢ÇÒËùÓÐµÄ check runs ¶¼Í¨¹ý£¬ÄÇô¾Í¿ÉÒÔÏò¶¤¶¤ÈºÀï·¢ÏûÏ¢²¢ @ һЩÈËÈÃÆäÈ¥ merge ¸Ã PR¡£ÃâÈ¥ÁËÿ´Î¶¼È¥ PR list ÀïÃæ check ÿ¸ö PR ״̬µÄÐÁ¿à¡£
µ±È»Î§ÈÆ GitHub µÄÖܱßͨ¹ýһЩ bot »¹¿ÉÒԱŷ¢Ðí¶àÓÐÒâ˼µÄÍæ·¨¡£
ÁìȡרÊô 10ÔªÎÞÃż÷ȯ
˽Ïí×îР¼¼Êõ¸É»õ