web

GitHub Actionsで必要なファイルだけ別ブランチに書き出す

公開日:2021年12月4日
最終更新日:2021年12月4日
目次
  • もともと使っていたTravis CI
  • GitHub Actions
  • 詰まったところ
  • GitHub Token の作り方

あまり需要があるか分からないですが、タイトルの通りGitHub Actionsであるブランチの中から必要なファイルだけを、別のブランチに書き出す方法です。

どういう時に使っているかというとHugoという静的サイトジェネレーターのテーマを配布しているのですが、開発時のコードから配布用に一部のコードだけを抽出してreleaseブランチにpushということをしています。

https://github.com/mismith0227/hugothemepickles

もともと使っていたTravis CI

もともとはTravis CIを使っていましたが、ある日なぜか止まってしまったので、GitHub Actionsに切り替えてみました。Travis CIの時はtravis.ymlでシェルスクリプトを実行してビルドしてpushとかしていました。

https://github.com/mismith0227/hugothemepickles/blob/d243af0c3ab8a194d4829814636019a6eff78345/bin/deploy.sh

GitHub Actions

実行する流れはTravis CIと全く同じで、GitHub Actions用に書き換えただけです。書き換えたといってもymlファイルなのでちょっと読んだら分かると思います。

name: create new branch

on:
  push:
    branches: [master]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: checkout master
        uses: actions/checkout@v2
        with:
          ref: master

      - name: npm init
        uses: actions/setup-node@v2
        with:
          node-version: '12.x'

      - name: Create new Branch
        env:
          GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }}
        run: |
          yarn
          yarn build
          rm -rf .git
          git init
          git config --global user.email "ci@example.com"
          git config --global user.name "CI Action"
          if [[ ! -f .gitignore ]]; then
            # Make sure .gitignore exists
            touch .gitignore
          fi
          if ! grep -q .gitignore; then
            echo "src
          .editorconfig
          .gitignore
          .babelrc
          .github/
          ./images
          webpack.config.js
          bin
          gulpfile.js
          .prettierignore
          .prettierrc
          config.js
          node_modules
          content
          package.json
          svgpack
          tmp
          config.toml
          yarn.lock
          renovate.json
          !/exampleSite/config.toml
          !/exampleSite/content
          !/exampleSite/static" >> .gitignore
          fi
          git add .
          git commit -m "Deploy from Github Actions"
          git push --force --quiet "https://$GITHUB_ACTOR:${{ secrets.GITHUB_TOKEN }}@github.com/$GITHUB_REPOSITORY.git" master:release


詰まったところ

  • gitignoreにechoするところで、travisの時のままにしていると、インデントが入ってしまってignoreできなかった
  • nodeの設定かかないと、ビルド時にエラーになる


GitHub Token の作り方

GithubのSettingsで作成し、リポジトリで設定します。キャプチャめんどいので手順だけ

  1. Settings > Developer settings > Personal access tokens でtockenを生成する
  2. リポジトリのSettings > Environmentsでtockenを貼り付けて、任意の名前で設定(ACCESS_TOKEN)という名前にしたとする
  3. 使うときはsecrets.ACCESS_TOKEN


tockenを生成するときは期限を決めることができます。例えばプロジェクトの期限が決まってるときは、それに合わせて期限を設けておくとセキュリティ的にもよさそうです。
期限きれてもまた生成すればいいだけなので、適当に設定しておくといいと思います。

About the author

大阪でフロントエンドエンジニアをしています。写真を撮るのが趣味です。よかったら500pxに載せてる写真も見てください。
web上に公開しているので、正確さに可能な限り努力してますが、個人の備忘録程度に書いてるので、ご自身の判断で参考程度に読んでください。
間違いやご意見があれば、コンタクトやSNSに気軽にご連絡ください。

Read next

Category

  • web
  • 雑記