web
GitHub Actionsで必要なファイルだけ別ブランチに書き出す
公開日:2021年12月4日
最終更新日:2021年12月4日
あまり需要があるか分からないですが、タイトルの通り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で作成し、リポジトリで設定します。キャプチャめんどいので手順だけ
- Settings > Developer settings > Personal access tokens でtockenを生成する
- リポジトリのSettings > Environmentsでtockenを貼り付けて、任意の名前で設定(ACCESS_TOKEN)という名前にしたとする
- 使うときはsecrets.ACCESS_TOKEN
tockenを生成するときは期限を決めることができます。例えばプロジェクトの期限が決まってるときは、それに合わせて期限を設けておくとセキュリティ的にもよさそうです。
期限きれてもまた生成すればいいだけなので、適当に設定しておくといいと思います。
Read next
- 2021年11月27日Firebase v8→v9でFirestoreのコレクション取得やドキュメント追加などのデータ操作の書き方
- 2021年11月20日タスクランナーにgulpではなくnpm scriptsを使う
- 2021年10月17日開発環境あれこれ(gulpやwebpackなど)