😸

Shopify themeのGithub連携した際のsubtreeでの運用 2 Github Action

2022/09/21に公開

はじめに

前回subtreeを使ったshopify themeの運用を検討したところ、コマンド操作が複雑そうだなとなりました。
https://zenn.dev/sgrynd/articles/7b8b9e295c2004

なので今回Github Actionを利用して自動化したいと思います。

やりたいこと

やりたいことは前回の記事の最後で出てきた下記2つを自動化することです。

  • mainブランチの変更をdeployブランチに切り出しShopifyに反映
  • Shopify管理画面からの変更時にdeployブランチをmainブランチに取り込む

結果

さっそくですがGithub Actionはこちらです。
前回手動でやっていたことをyamlで書きました。

mainブランチの変更をdeployブランチに切り出しShopifyに反映

下記をmainブランチの .github/workflows 内へ

deployFromMain.yaml
name: deployFromMain
on:
  push:
    branches:
      - "main"
jobs:
  deploy:
    runs-on: macos-latest
    permissions:
      contents: "write"
      id-token: "write"
    steps:
      - uses: actions/checkout@v3
        with:
          ref: deploy
          fetch-depth: 0
      - uses: actions/checkout@v3
        with:
          ref: main
          fetch-depth: 0
      - name: "subtree split"
        run: "git subtree split --prefix=deploy --rejoin --onto deploy -b deploy-${{ github.run_id }}"
      - run: "git checkout deploy-${{ github.run_id }}"
      - run: "git checkout deploy"
      - run: "git branch"
      - name: "merge"
        run: "git merge deploy-${{ github.run_id }}"
      - name: push
        run: |
          git remote set-url origin https://github-actions:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}
          git config --global user.name "${GITHUB_ACTOR}"
          git config --global user.email "${GITHUB_ACTOR}@users.noreply.github.com"
          git push
      - run: "git checkout main"
      - run: "git subtree merge --prefix=deploy --squash deploy"
      - name: push
        run: |
          git remote set-url origin https://github-actions:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}
          git config --global user.name "${GITHUB_ACTOR}"
          git config --global user.email "${GITHUB_ACTOR}@users.noreply.github.com"
          git push

Shopify管理画面からの変更時にdeployブランチをmainブランチに取り込む

下記をdeployブランチの .github/workflows 内へ

subtreeMergeFromDeploy.yaml
name: subtreeMergeFromDeploy
on:
  push:
    branches:
      - "deploy"
jobs:
  deploy:
    runs-on: macos-latest
    permissions:
      contents: "write"
      id-token: "write"
    steps:
      - uses: actions/checkout@v3
        with:
          ref: main
          fetch-depth: 0
      - run: "git fetch origin deploy"
      - run: "git branch"
      - uses: actions/checkout@v3
        with:
          ref: deploy
          fetch-depth: 0
      - run: "git branch"
      - run: "git checkout main"
      - run: "git branch"
      - run: "git subtree merge --prefix=deploy --squash deploy"
      - name: push
        run: |
          git remote set-url origin https://github-actions:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}
          git config --global user.name "${GITHUB_ACTOR}"
          git config --global user.email "${GITHUB_ACTOR}@users.noreply.github.com"
          git push

補足

deploy-${{ github.run_id }}"

run: "git subtree split --prefix=deploy --rejoin --onto deploy -b deploy-${{ github.run_id }}"

subtree split する際に新たにブランチを作らないといけないので、github.run_idを使用してユニークなブランチを作成しています。

fetch-depth: 0

checkout時にデフォルトでは1つ分のコミットしか取得しないようでした。
そうすると過去にsplitしたコミットが見つからずmerge出来ないようでした(多分)
ですので、fetch-depth: 0 を指定しすべてのコミットを取得するようにしています。
履歴が長くなってくると動作が遅くなるかもです。

git push

GitHub Action内でのgit pushのやり方はこちらを参考にさせていただきました
https://zenn.dev/lollipop_onl/articles/eoz-gha-push-diffs

結局

ここまでやりましたがsubtree使わない方が運用がシンプルでいいんじゃないか?という気持ちは変わらないです。
https://zenn.dev/sgrynd/articles/16871323e959fb

Discussion