ãããããã¨
GitHub Actionsã§ãã¹ãã±ã¼ã¹ãåå²ãã¦ãè¤æ°ãã¼ãã§å®è¡ãã
CircleCIã ã¨ãã©ãããã©ã¼ã å´ã§å¯¾å¿ãã¦ããã¦ãã¾ããGH Actionsã ã¨è¦å½ãããªãã£ãã®ã§åçã®ãã¨ãããããã®è¨å®ã®ã¡ã¢ã§ãã
è¨å®ä¾
rspec: runs-on: ubuntu-latest strategy: max-parallel: 2 matrix: ci_node_total: [2] ci_node_index: [0, 1] steps: - uses: actions/checkout@v2 - uses: ruby/setup-ruby@v1 - name: Bundle install run: bundle install - name: DB setup run: bundle exec rake db:setup - name: Rspec run: | ruby -e 'Dir.glob("spec/**/*_spec.rb").each{|f| puts f}' | awk "NR%${CI_NODE_TOTAL}==${CI_NODE_INDEX} {print}" > /tmp/tests-to-run cat /tmp/tests-to-run bundle exec rspec $(cat /tmp/tests-to-run) env: CI_NODE_TOTAL: ${{ matrix.ci_node_total }} CI_NODE_INDEX: ${{ matrix.ci_node_index }}
GitHub Actionsã«ã¯Build Matrix ã¨ããæ©è½ããã£ã¦ãæ¬æ¥ã¯OSã®ãã¼ã¸ã§ã³ã¨è¨èªã®ãã¼ã¸ã§ã³ã®è¤æ°ã®ãããªã¯ã¹ãã¹ãã宿½ããããã®æ©è½ãªã®ã§ãããããã使ã£ã¦ ci_node_total
㨠ci_node_index
ã¨ãã2ã¤ã®ãã©ã¡ã¿ãç»é²ãã¾ãã
ci_node_total
: ãã¼ãã®åè¨,max-parallel
ã¨åãæ°ã«ããå¿ è¦ãããci_node_index
: ãã¼ãã®ã¤ã³ããã¯ã¹, 0å§ã¾ãã§ci_node_total-1
ã§çµããé å
ããã§ã rspec
ã®Job㯠(2, 0) 㨠(2, 1) ã¨ãã2ã¤ã®è¨å®ã§å®æ½ããããã¨ã«ãªãã¾ã
ãã¨ã¯indexæ¯ã«specé ä¸ã®ãã¡ã¤ã«ãåå²ãã¦rspecã³ãã³ãã«æ¸¡ãã ãã§ããCircleCIã ã¨sizeã®å¤§ããã¨ãåexampleã®ããã£ãæéã¨ãã§ããæãã«å¹³æºåãã¦ããã¾ãããGitHub Actionsã«ã¯ããããæ©è½ã¯ç¡ãã®ã§ãåã«specãã¡ã¤ã«ã2åå²ãã¦æ¸¡ãã®ã¿ã§ãã
ã¡ãªã¿ã«ãGoè¨èªã®å ´åã¯ãããªæãã§ãã¹ããåå²å®è¡ã§ãã¾ã
$ go test $(go list ./... | awk "NR%${CI_NODE_TOTAL}==${CI_NODE_INDEX} {print}")