ããã«ã¡ã¯ãAutoScale ã®å°è¥¿ã§ãã
ãã¡ã®ä¼ç¤¾ã®èªç¤¾ãµã¼ãã¹ãSocialDogãã§ã¯ãããã¾ã§ CI ãã¼ã«ã¨ãã¦ãCircleCI ã使ã£ã¦ãã¾ããã
ä»å GitHub Actions ã«ä¹ãæããã®ã§ãCircleCI 㨠GitHub Actions ã®éããè¦ã¤ã¤ãè¨å®ãã¡ã¤ã«ãæãã¦ã¿ããã¨æãã¾ãã
CI çµãã¨ãã説æèªãããããµã³ãã«ãããæ©ãã§ãããã ã¨ããããã§ãã¡ã§ä½¿ã£ã¦ãããã®ããã®ã¾ã¾æãã¦ã¿ã¾ãã
React+TypeScript ã¨ãæ¸ãããã®ã®ãã»ã¼ yarn ã®ã³ãã³ãã«éç´ããã¡ãã£ã¦ã¦ããã¾ãé¢ä¿ãªããªï½
- ä¹ãæãçç±
- ä¹ãæãæé
- ãã£ã¬ã¯ããªæ§æ
- GitHub Actions ã®è¨å®ãã¡ã¤ã«
- åä½ç¢ºèª
- GitHub Actions ã®è¨å®ãã¡ã¤ã«ã®æ¸ãæ¹
- GitHub Actions ã®ã¤ã±ã¦ãã¨ãã
- GitHub Actions ã®æ®å¿µãªã¨ãã
- ã¾ã¨ã
ä¹ãæãçç±
ããã¯åç´ã§ããã¡ã®å ´å試ç®ããããCircleCI ããã GitHub Actions ã®ã»ããæéãå®ãã£ãããã§ãã
ãã§ã« GitHub Team ã使ã£ã¦ããå ´åãæéã®é¢ã§æå©ãªå ´åã¯å¤ãããããªãããªããã²è©¦ç®ããªã¹ã¹ã¡ã
ã¾ãä»®ã«æéãã»ã¼åãã ã£ãã¨ãã¦ããæéãæ©è½ããããªã«å¤ãããªããã°ã使ããã¼ã«ã¯å°ãªãã»ããè¯ãã¨èãã¾ããã
ä¹ãæãæé
- ä¸éãããã¥ã¡ã³ããèªã
ãªãã¨æ¥æ¬èªããã¥ã¡ã³ããããã¾ãã
GitHub Actionsã使ã£ã¦ã¿ã - GitHub ãã«ã - Workflow å®ç¾©ã® yaml ãæ¸ã
.github/workflows/xxx.yaml
ã«ä¿åã㦠push ããPull Request ãä½æ((onã«pushãããã°PullRequestã®ä½æã¯å¿ é ã§ã¯ããã¾ããããgithub.head_ref
ãªã©ã¯ä¸èº«ãéãã®ã§æ³¨æã))- GitHub Actions ã®ç»é¢ã§åä½ç¢ºèªãã
ãã£ã¬ã¯ããªæ§æ
SocialDog ã®ãªãã¸ããªã¯ãâ webããã¯ã¨ã³ãã»ããã³ãã¨ã³ããâ¡ãã¤ãã£ãã¢ããªã®2ã¤ã®ãã£ã¬ã¯ããªãããªãmonorepoã¨ãªã£ã¦ãã¾ã*1ã ããããã®ãã©ã«ãã« package.json ããããJS 㯠yarn, PHP 㯠composer ã§ä¾åé¢ä¿ã管çãã¦ãã¾ãã
. âââ .github â  âââ workflows â  âââ main.yml (âä»åæ¸ãè¨å®ãã¡ã¤ã«) âââ native â  âââ [ReactNative é¢é£ã®ãã¡ã¤ã«] â  âââ package.json â  âââ yarn.lock âââ web âââ application (CodeIgniterã®ãã¡ã¤ã«) âââ build (phpunitãªã©ã®éæç©ãå ¥ããã©ã«ã) âââ composer.json âââ composer.lock âââ cypress âââ cypress.json âââ package.json âââ public âââ yarn.lock
GitHub Actions ã®è¨å®ãã¡ã¤ã«
GitHub Actions ã CircleCI ã¨åæ§ãyaml ãã¡ã¤ã«ã«è¨å®ãæ¸ãã¾ãã
ãã¡ã¤ã«ã®å ´æã¯ã .github/workflows/xxx.yaml
ã¨ãªãã¾ãã
æ¸ãæ¹ã .circle/config.yml
ã¨ããä¼¼ã¦ããã®ã§ã移è¡ã¯ãããããã§ãã
.github/workflows/xxx.yaml
name: GitHub Actions CI on: push: branches: - master pull_request: jobs: php: name: PHP (web) runs-on: ubuntu-latest services: mysql: image: mysql:5.7 env: MYSQL_ALLOW_EMPTY_PASSWORD: false MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: cheetah_test ports: - 13306:3306 options: --health-cmd="mysqladmin ping" --health-interval=30s --health-timeout=30s --health-retries=10 env: DATABASE_HOST: mysql:13306 steps: - name: Prepare / Checkout uses: actions/checkout@v2 - name: Prepare / Setup PHP uses: shivammathur/setup-php@v2 with: php-version: 7.4 extensions: mbstring, intl, pdo_mysql, mysqli coverage: xdebug ini-values: memory_limit=512M, short_open_tag=On - name: Prepare / Get composer cache directory id: composer-cache run: cd web; echo "::set-output name=dir::$(composer config cache-files-dir)" - name: Prepare / Cache composer dependencies uses: actions/cache@v1 with: path: ${{ steps.composer-cache.outputs.dir }} key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} restore-keys: ${{ runner.os }}-composer- - name: Prepare / Composer Install run: | cd web; composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader - name: Prepare / Initialize Database run: | echo "<?php define('ENVIRONMENT', 'testing');" > web/environment.php; cd web/public; php index.php cli/dev init_database_for_testing - name: PHP / PHPUnit run: | cd web/application/tests ; ../../vendor/bin/phpunit -c phpunit.CircleCI.xml - name: PHP / phpmd if: always() run: cd web; composer phpmd - name: Translation / Check if: always() run: web/dev_tools/check_translation.php - name: Save / CodeCov run: bash <(curl -s https://codecov.io/bash) -t xxxxxxxxxxxxxxxxxxxxx js: name: JS (web/native) runs-on: ubuntu-latest env: NODE_ENV: production GOOGLE_SERVER_ACCOUNT_JSON_BASE64: ${{ secrets.GOOGLE_SERVER_ACCOUNT_JSON_BASE64 }} GOOGLE_APPLICATION_CREDENTIALS: /home/runner/gcloud-service-key.json SENTRY_ORG: xxxxxxxx SENTRY_PROJECT: xxxxxxxx SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} SHA: ${{ github.sha }} steps: - name: Prepare / Checkout uses: actions/checkout@v1 - name: Prepare / Install for cypress run: sudo apt-get install -y libgtk2.0-0 libgtk-3-0 libnotify-dev libgconf-2-4 libnss3 libxss1 libasound2 libxtst6 xauth xvfb fonts-noto-cjk - name: Prepare / Cache .cache directory uses: actions/cache@v1 id: yarn-cache with: path: ~/.cache key: cache5-${{ hashFiles('web/yarn.lock') }}${{ hashFiles('native/yarn.lock') }} restore-keys: | cache5- - name: Prepare / Use Node.js v10.15.3 uses: actions/setup-node@v1 with: node-version: v10.15.3 - name: Prepare / Yarn Install web working-directory: ./web run: yarn install - name: Prepare / Yarn Install native working-directory: ./native run: yarn install --ignore-scripts && yarn patch-package - name: Web / Build JavaScript / SCSS run: cd web; yarn run build - name: Web / Prettier Check if: always() run: cd web; yarn run prettier-check - name: Web / ESlint TestCode(web) if: always() run: cd web; yarn run eslint-test-js - name: Web / Jest (JavaScript Test) if: always() run: cd web; NODE_ENV=test yarn run jest - name: Web / Stylelint if: always() run: cd web; yarn run stylelint-check - name: Web / Stylelint for Styled Components StyleSheet if: always() run: cd web; yarn run stylelint-styled - name: Web / Prettier Check if: always() run: cd web; yarn run prettier-check - name: Web / master_data Check if: always() run: | mv native/js/master_data.ts native/js/master_data_this_commit.ts cd web; yarn run build:master_data cd ..; diff -q native/js/master_data.ts native/js/master_data_this_commit.ts - name: Web / Cypress Server run: cd web; yarn run cypress_server_start & - name: Web / Cypress Run run: cd web; yarn run cypress run - name: Native / Prettier Check if: always() run: cd native; yarn run prettier-check - name: Native / ESLint if: always() run: cd native; yarn run eslint-all-js - name: Native / TypeScript Check if: always() run: cd native; yarn tsc - name: Native / Stylelint if: always() run: cd native; yarn all-stylelint - name: Prepare / GCP SDK Install if: always() uses: GoogleCloudPlatform/github-actions/setup-gcloud@master with: version: '281.0.0' - name: Save / GCP Credential if: always() run: | echo $GOOGLE_SERVER_ACCOUNT_JSON_BASE64 | base64 --decode --ignore-garbage > ${HOME}/gcloud-service-key.json sudo gcloud auth activate-service-account --key-file ${HOME}/gcloud-service-key.json sudo gcloud config set project xxxxxxxx # @see https://github.com/reg-viz/reg-suit#workaround-for-detached-head - name: Save / reg-suit if: always() run: | cd web; git checkout ${{ github.ref }} || git checkout -b ${{ github.ref }} yarn reg-suit run - name: Save / CodeCov if: always() run: bash <(curl -s https://codecov.io/bash) -t xxxxxxxxxxxxx - name: Save / Upload Static files to GCS (only master) if: github.ref == 'refs/heads/master' run: | sudo gsutil cp -r web/public/build gs://xxxxxxxxx/$SHA - name: Save / Send release to Sentry (only master) if: github.ref == 'refs/heads/master' run: | curl -sL https://sentry.io/get-cli/ | bash sentry-cli releases new $SHA sentry-cli releases set-commits "$SHA" --auto sentry-cli releases finalize "$SHA"
åä½ç¢ºèª
âä¸è¨ãä¿åãã¦PullRequestãä½æããã¨ãå®è¡ããã¾ãã
Actions
ã®ã¿ãã§åä½ããªã¢ã«ã¿ã¤ã ã«ç¢ºèªã§ãã¾ãã
Pull Request ãªã©ã®ç»é¢ã§ã¯ãããªæãã§è¡¨ç¤ºããã¾ãã大ããã¯å¤ããã¾ããï¼ä¸ã®ã¯CircleCI ããã®ãã®ã§ãï¼ã
GitHub Actions ã®è¨å®ãã¡ã¤ã«ã®æ¸ãæ¹
詳細ã¯å ¬å¼ããã¥ã¡ã³ããåç §ããªãã¨æ¥æ¬èªçãããã¾ã*2ã
GitHub Actionsã®ã¯ã¼ã¯ããã¼æ§æ - GitHub ãã«ã
ããã§ã¯ããããããªç®æãªã©ãä¸å¿ã«ã¡ã¢ãã¨ãã¾ãã
on
ãã®ã¯ã¼ã¯ããã¼ãå®è¡ããã¿ã¤ãã³ã°ãé¸ã¹ã¾ããPull Reqeust ãåºããã¨ãã ãã§ã¯ãªããPush ããã¿ã¤ãã³ã°ãã³ã¡ã³ããããã¿ã¤ãã³ã°ãªã©ãGitHub ä¸ã§ã®ã¢ã¯ã·ã§ã³ã»ã¼å ¨é¨ãèµ·ç¹ã¨ãã¦ã¯ã¼ã¯ããã¼ãå®è¡ã§ãã¾ãã
ç¹å®ã®ãã©ã³ãã®ã¿ããªã©ã®æ¡ä»¶ã CircleCI ãããæ¸ããããã§ãã
jobs
ããã«ã¸ã§ããæ¸ãã¾ããCircleCI ã§è¨ãã¨ããã®ãWorkflowãã«ããããã®ã§ãã ãã®ã¸ã§ããå®è¡ãããåä½ã«ãªãã¾ããã¸ã§ãã2ã¤ããã°åæå®è¡ã¸ã§ã2æ¶è²»ããæãã§ãã
services
DBããã£ãã·ã¥ãªã©ãä¾åãããµã¼ãã¹ãèµ·åãã¦ãããã¨ãã§ãã¾ãã
docker-compose ã¨è¨å®ãä¼¼ã¦ãã¾ãã
ports
ã§è¨å®ãããã¼ãã«ãã¤ã³ãããã¾ããä¸è¨ã® mysql
ã®è¨å®ã ã¨ãã¢ããªã®ã³ã¼ãããã¯ä»¥ä¸ã§ã¢ã¯ã»ã¹ã§ãã¾ãã
ãã¹ãå: mysql
(ãµã¼ãã¹å)
ãã¼ã: 13306
ã¦ã¼ã¶ã¼å: root
ãã¹ã¯ã¼ã: password
steps
ããããã®ã¹ããããè¨è¼ãã¾ãã
run
ã使ã£ã¦ãã·ã§ã«ã®ã³ãã³ãããã®ã¾ã¾æ¸ããã¨ãã§ãã¾ãããuses
ã使ã£ã¦ãå
人ãã¡ãä½ã£ã¦ããããã®ã使ããã¨ãã§ãã¾ãã
ãã§ãã¯ã¢ã¦ã(actions/checkout@v2)
GitHub å
¬å¼ã®ã½ã¼ã¹ã³ã¼ãã®ãã§ãã¯ã¢ã¦ãã®ã¿ã¹ã¯ actions/checkout@v2
ã¯ãå°ãåä½ã«çãããã®ã§æ³¨æãå¿
è¦ã§ãã
Pull Request ã®å ´åããããã¯ãã©ã³ãã®ã³ã¼ãã«ãã¼ã¸å
ã®ãã©ã³ããmergeããæ°ãããã©ã³ã(PR ãã¼ã¸ãã©ã³ã refs/pull/:prNumber/merge)ãèªåçã«ä½ããã¾ãã
PR#1234 ã§ãããã¯ãã©ã³ã fix1234
â master
ã¨ããPullRequest ã®å ´å*3ãfix1234
ã« master
ããã¼ã¸ããæ°ãããã©ã³ã refs/pull/1234/merge
ãä½ããã¾ãã
ä»ã®CIãã移ãéã«ç¾å¨ã®ãã©ã³ãåã«ä¾åããã³ã¼ããããã¨ããã®ããã§ã³ã±ã¾ãï¼å¾è¿°ã® reg-suitï¼ã
詳細ã¯ä»¥ä¸ã®ãã¼ã¸åç §ã
ã¯ã¼ã¯ããã¼ãããªã¬ã¼ããã¤ãã³ã - GitHub ãã«ã
è¨èªç°å¢ã®ã¤ã³ã¹ãã¼ã«ï¼actions/setup-node , shivammathur/setup-php@v2ï¼
å 人ãã¡ã®ãããã§é常ã«æ¥½ã«ã¤ã³ã¹ãã¼ã«ã§ãã¾ãã
PHPã®ã³ã¼ãã«ãã¬ãã¸ãã¼ã«ã« xdebug ã使ã£ã¦ãã¾ãããpcovã®ã»ããæ§è½ãè¯ããããã®ã§ç§»è¡ããã*4
ãã£ãã·ã¥ (actions/cache@v1)
æå®ãããã¹ããã£ãã·ã¥ã§ãã¾ããããã¯CircleCIã® restore_cache
ã¨é常ã«ããä¼¼ã¦ãã¾ãã
yarn ã®ãã£ãã·ã¥ã¯ãnode_modulesã§ã¯ãªãã~/.cache
ã§è¡ãã¾ãã
ç§å¯ã®æåå (Secrets)
Setting â Secrets ããç»é²ãã¦ãããæååã¯ã ${{ secrets.GOOGLE_SERVER_ACCOUNT_JSON_BASE64 }}
ã®ããã«ãã¦ã¢ã¯ã»ã¹ã§ãã¾ãã
GCPãSentryãªã©ã®èªè¨¼æ
å ±ãå
¥ãã¨ãã¾ãã
CircleCI ã¨éããç°å¢å¤æ°ã¨ãã¦æ¸¡ãããããã§ã¯ãªãã®ã§ãä¸è¨ã®æ¸ãæ¹ã§åå¾ããå¿
è¦ãããã¾ãã
Cypress
Cypress 㯠runs-on: ubuntu-latest
ã§ä½¿ãã¨ãã¾ãåããªãå ´åããããããã®ã§ãv3.8.3以éã«ãããã ubuntu-16.04
ã使ããããã¨ã®ãã¨ãªã®ã§ãç´ ç´ã«å¾ãã¾ãã
We are getting reports that Cypress has suddenly started crashing when running on ubuntu-latest OS. Seems, GH Actions have switched from 16.04 to 18.04 overnight, and are having a xvfb issue. Please work around this problem by using runs-on: ubuntu-16.04 image or upgrading to Cypress v3.8.3 where we explicitly set XVFB arguments. https://github.com/cypress-io/github-action#important
ããã¯ã°ã©ã¦ã³ãã¿ã¹ã¯
GitHub Actions ã«ã¯ãããã¯ã°ã©ã¦ã³ãã§åãããã¨ãããã©ã°ï¼CircleCI ã§è¨ãã¨ããã®ã background: true
ã«ããããã®ï¼ãããã¾ããã
以ä¸ã®ããã« &
ã§åããã°OKã§ãã
run: cd web; yarn run cypress_server_start &
ãã ãã®æ¹æ³ã ã¨ãã°ãè¦ãããªãã®ã§ãããã¹ããã¡ã¤ã«ã«ä¿åãã¦ãã㦠Artifacts ã«åºããªã©ã®å·¥å¤«ãå¿ è¦ããã§ãã
Artifacts (actions/upload-artifact@v1)
ãã¹ãçµæãªã©ãArtifacts ã¨ãã¦ä¿åãã¦ããä»çµã¿ãããã¾ãã 使ãæ¹ã¯CircleCI ã¨åããªã®ã§ãããã¹ãã¬ã¼ã¸æéããããã¾ãï¼ ããããããçµæ§é«ãã¦ã$0.25 / GB ãã¾ãï¼
CircleCI ã§ã¯ããã¯èª²éãããªãã£ãã®ã§ãå°å ¥ãæ¤è¨ããå ´åã¯ãããã試ç®ã«å ¥ããã®ãå¿ããªãããã«ãã¾ãã
ã¸ã§ãå®äºå¾ã« Artifacts ã¨ãã¦ãã¦ã³ãã¼ãã§ããã®ã§ãããåæã«zipã«ã¾ã¨ããããç¶æ ã§ãã¦ã³ãã¼ãããå½¢ã«ãªãã¾ãã ãã®ãã CircleCIã®ããã«ãHTMLãªã©ãç½®ãã¨ãã¦URLéãã ãã§ã«ãã¬ãã¸ã¬ãã¼ãã確èªãããã¨ãã使ãæ¹ã¯ã§ãã¾ããã
SocialDog ã§ã¯PHPUnit ã®çµæã®HTMLå½¢å¼ã®ã«ãã¬ãã¸ã¬ãã¼ããåãåºãã¦ããã®ã§ããããã®å®¹éãï¼åããã100MBã»ã©ããã¾ãããããã ã¨1æ¥30å=æ600åã ã¨$150ã¨ãããããéããã£ã¡ããã¾ãã
ãªã®ã§ããã¯ä½¿ããã«ãAWSã®S3ãGCPã®GCSã使ãã®ãå®ç³ã«ãªãããã§ã*5ãå¤æ®µã$0.03/GBã¨ãã§å§åçã«å®ããã
ã¡ãªã¿ã«ã¹ãã¬ã¼ã¸ã®å©ç¨æã¯ãOrganization settings â Billing ãã確èªã§ãã¾ãã
ã¡ãªã¿ã«ããã©ã«ãã§ã¯è¶ éæéãçºçããªãããã«ãªã£ã¦ãããã¹ãã¬ã¼ã¸ã®æéãçºçãããã«ãªãã¨ã¡ã¼ã«ãæ¥ã¾ã*6ã
reg-suit
Cypress ã§å¾ãç»åã®å·®åã reg-suit ã§GCSã«ã¢ãããã¼ããã¦ãã¾ãã
reg-suit ã§ã¯æ¯è¼å¯¾è±¡ãè¦ã¤ããããããã©ã³ãããããã¯ãã©ã³ãã«ãã¦ãããå¿
è¦ãããã®ã§ã git checkout
ãã¦ãã¾ã*7ã
if
失æããã¨å¾ç¶ã®ã¹ãããã¯å®è¡ãããªãã®ã§ãããè¤æ°ã®è½ã¡ãç®æãããã®ã«ä¸åº¦ã«æ°ã¥ãããã®ã§ã if: always()
ãå
¥ãã¾ãã£ã¦ãã¾ããCircleCI ã§è¨ãã¨ããã® when: always
ã§ãã
ã¾ããåã¹ããããã¨ã«ãå®è¡æ¡ä»¶ãæ¸ãã¾ãã
CircleCI ã ã¨ãif [[ $CIRCLE_BRANCH = master ]]; then
ã¿ããã«æ¸ãå¿
è¦ãããã¾ããããGitHub Actions ã§ã¯ if: github.ref == 'refs/heads/master'
ã®ããã«åãããããæ¸ããããã«ãªãã¾ããã
GitHub Actions ã®ã¤ã±ã¦ãã¨ãã
æéãå®ã
試ç®ããçµæãã¡ã®å ´åã¯ã¦ã¼ã¶ã¼æ°ãå¤ããã¨ããããCircleCI ãããGitHub Actions ã®ã»ããå®ããã§ããããã㧠GitHub Actions ã«ç§»è¡ãã¾ããã
CircleCI ã® Performance Plan ã§ã¯ãã¦ã¼ã¶ã¼æ°ããã15ãã«ã®èª²éãããã¾ãããã¡ã¤ã³ã¿ã¼ã³å¤ãã®ã§ã¦ã¼ã¶ã¼æ°ãã¼ã¹ã®èª²éãããã¨ã¡ãã£ã¨ä¸å©ãªã®ã§ãã
GitHub Actions ã®å ´åã¯ãCIã«ã¯ã¦ã¼ã¶ã¼æ°ãã¼ã¹ã®èª²éã¯ããã¾ãã*8ã
使ããã¼ã«ãæ¸ããã
ãã¡ã¯ã³ã¼ãã¬ãã¥ã¼ãGitHub ã§è¡ã£ã¦ããã®ã§ãGitHub ã§CIãå®çµã§ããã®ã¯å¬ããã§ãã使ããã¼ã«ãä¸ã¤æ¸ããã¾ããã
å ¬éããã¦ãã GitHub Actions Workflow ãå¤ã
å
¬å¼ã®ãã®ããããã§ãªããã®ãããã§ã«ãããã³ãã¬ãçµã¿åããã¦æ¸ããã®ã¯ä¾¿å©ã ãªã¨æãã¾ããã
CircleCI ã«ãä¼¼ããããªä»çµã¿ Orbs
ãããã¾ãããGitHub Actions ã»ã©ä½¿ããã¦ãªããããªæ°ããã¾ãã
GitHub Actions ã®æ®å¿µãªã¨ãã
UI ãã¤ã±ã¦ãªã
CircleCIã®ãã«ãã®ç¢ºèªç»é¢ã¯SPAã ã£ãã®ã§ãµã¯ãµã¯åããããã°ãå²ã¨ãªã¢ã«ã¿ã¤ã ã«åºã¦ãã¾ããã GitHub Actions ã¯ãã¡ãã¡ãã¼ã¸é·ç§»ãçºçããä¸ããã°ã®è¡¨ç¤ºãé ãã¦è¨å®ãã¡ã¤ã«ãæ¸ãã®ã¯ã¡ãã£ã¨ã ããã£ãã§ãã
Artifacts ãzip ã«ãªã£ã¦ãã¾ã
ãã¡ãã¡zip解åããã®ãé¢åã CircleCI ã¿ããã«HTMLãã¼ã¸ããã¹ãã£ã³ã°ãã¦ãããæ©è½ã»ããã£ããCircleCI ã®å ´åã¯èªè¨¼ã¾ãããé¢åè¦ã¦ãããã®ã§ããã使ãåæããã£ãã
ã¾ã¨ã
GitHub ã使ã£ã¦ããå ´åãCI ãæ¤è¨ããéã®æåãªé¸æè¢ã«ãªãããã§ãã UI ãã¹ãã¬ã¼ã¸æéã®é¢ã§èª²é¡ã¯æãã¾ãããã使ããµã¼ãã¹ãæ¸ããããã¨ããé¨åã¯å¤§ããªé åã«æãã¾ãã
ä»å¾ã® GitHub Actions ã®åãã«æå¾ ãã¦ãã¾ãï¼
*1:React Native ã®ãã¤ãã£ãã¢ããªã®ãã«ãã¯Bitriseã§ãã£ã¦ããã®ã§ä»åã®è¨äºã®ç¯å²å¤ã¨ãªãã¾ã
*2:ç®æ¬¡ã®ãã¼ã¸å ãªã³ã¯ãæ©è½ããªãã¦ä½¿ãã«ããå ´åã¯ãè±èªçããªã¹ã¹ã¡
*3:SocialDog ã§ã¯GitHub Flow ãæ¡ç¨ãã¦ãã¾ãã
*4:phpdbg ã¡ã¢ãªãªã¼ã¯ãã¦ãã¾ããªããåããªãã®ã§ãæ念ãã¦xdebugã使ã£ã¦ãã¾ãã
*5:GitHub Actions ã¯è£å´Azureã§ãããAzureã¨ããé¸æè¢ãããã¾ãã
*6:ããã®æ§ç¯ããã¦ããã¨ããArtifacts ã«ãããæéæ°ã¥ããã«ãã¡ã¼ã«æ¥ã¾ããã
*7:å ¬å¼ãµã¤ãã«ã¯ã¼ã¯ã¢ã©ã¦ã³ããªæ¹æ³ã¨ãã¦ç´¹ä»ããã¦ãã
*8:ãã§ã«GitHub Teamsã«æ¯æã£ã¦ããå ´å