yarnで管理しているpackageやgemの定期更新はPRまでは自動化!!

blog.hatappi.me

以前↑な記事を書きました。
この時は gem の update だけでよかったけど Yarn でパッケージをしているのでそっちも定期的に update していきたい

ということで Yarn で管理しているパッケージの定期更新に使ったのがこちら

github.com

自分の場合は gem と yarnで管理しているパッケージのアップデートの確認を同じタイミングでPR作成してほしかったので次のような CircleCI の設定をしました。

version: 2
jobs:
  build:
    docker:
      - image: ruby:2.5.1-alpine
    steps:
       - run: &setup_requirements
          name: Install dependencies
          command: |
            apk add --update --no-cache \
              git \
              openssh-client \
              tar \
              gzip \
              ca-certificates \
              tzdata \
              yarn \
              gcc \
              build-base \
              libxml2-dev \
              libxslt-dev
       - restore_cache: &restore_gems_cache
          name: Restore bundler cache
          keys:
            - gems-{{ .Environment.COMMON_CACHE_KEY }}-{{ checksum "Gemfile.lock" }}
            - gems-{{ .Environment.COMMON_CACHE_KEY }}-
  continuous_bundle_update:
    docker:
      - image: ruby:2.5.1-alpine
    steps:
      - run: *setup_requirements
      - checkout
      - restore_cache: *restore_gems_cache
      - run:
          name: Setup requirements for continuous bundle update
          command: gem install -N circleci-bundle-update-pr
      - deploy:
          name: Continuous bundle update
          command: circleci-bundle-update-pr hatappi hatappi@hatappi.me $CIRCLE_BRANCH
  continuous_yarn_upgrade:
    docker:
      - image: node:10-alpine
    steps:
      - run: apk add --update --no-cache git openssh-client python make g++
      - checkout
      - run: yarn global add ci-yarn-upgrade@0.7.2
      - run: yarn install
      - run: ci-yarn-upgrade --execute --verbose

workflows:
  version: 2
  build:
    jobs:
      - build
  nightly:
    triggers:
      - schedule:
          cron: "00 10 * * 5"
          filters:
            branches:
              only: master
    jobs:
      - continuous_bundle_update
      - continuous_yarn_upgrade

これで金曜日の19時になるとgem, yarnで管理しているパッケージで最新のものがあればPRを作ってくれる。

解説が必要なところはおそらく今回から使用している ci-yarn-upgrade のインストールをする時にバージョンを指定しているところかなと思う。
2019年1月18日時点で最新はv0.7.3なんだけど、これを使うとエラーになってしまう。
手元でなおったのを確認したPRは作ったのでマージされると嬉しい。

github.com

ということで今はエラーになる前のバージョンのv0.7.2を使用しています。

本当はこうしたかった

Anketでこれを導入したんだけどAnketはnodeで作られたbotRailsのアプリケーションの2つのサービスから成り立っていてそれぞれリポジトリを用意しているのでCircleCIの設定をそれぞれに行う必要がある。

GITHUB_ACCESS_TOKENとか環境変数をどちらにも設定するのが面倒だったのでプロジェクトをまたいで環境変数を使うために context を使用したかった。
ただこれ schedule で定義された context は使えないっぽい?? discuss.circleci.com

なので今回はそれぞれのリポジトリごとに環境変数を設定した。 くやしい。。。