Github Actionsでいろいろ困ったところと対応方法。主にシェルスクリプトを使うGitHub Actions
GitHub Actions
みなさん、GitHub Actionsで遊んでますか?
私も最近、GitHub Actionsで遊んでいるんですけど、
いくつか困ることもありまして、
この記事は、その時、困ったことの解決メモであります。
(雑な導入)
https://help.github.com/ja/actions/automating-your-workflow-with-github-actions
シェルスクリプト内で、privateなnpmレポジトリをnpm install
プレイベートなnpmレポジトリをnpm installするには、
.npmrc作るのが早い。
Settingsメニューから、Secrets設定を選んで、NPM_AUTH_TOKENを設定。
でもって、こんな感じ。
- run: echo "//npm.pkg.github.com/:_authToken=${{ secrets.NPM_AUTH_TOKEN }}" > ~/.npmrc
- name: npm install
run: |
npm install
シェルスクリプト内でgit clone
actionでなくて、シェルスクリプトでgitする。
ローカルで動くビルドスクリプトがあって、
それをGitHub Actionsでもそのまま使いたいケースの対応方法。
パターン1
git cloneする時、httpsでアクセスすれば、SSHの設定は要らない。
git clone git@github.com:taku-o/github-actions-workflow-demo.git
↓
git clone https://github.com/taku-o/github-actions-workflow-demo.git
パターン2
SSHのキーを設定しておけば、プライベートなGitHubレポジトリもcloneできる。
シェルスクリプトでいろいろする前に、
ssh-key-actionで、SSHの設定を入れておく。
- name: ssh key
uses: shimataro/ssh-key-action@v1
with:
private-key: ${{ secrets.SSH_KEY }}
public-key: ${{ secrets.SSH_KEY_PUBLIC }}
known-hosts: ${{ secrets.SSH_KNOWN_HOSTS }}
- name: git clone
run: |
git clone git@github.com:taku-o/github-actions-workflow-demo.git
actions/cacheのlimitが小さくて困る
actions/cacheのキャッシュのlimitが小さい。400MB。
容量足りなくて、大きなアプリだと、一切キャッシュが効かなくなる。
でも、これぐらいならすぐに修正が入るだろう。
そう思っていた私は、issueが建ってから22日経過しているのを見て、
音速でフォークするのであった。
https://github.com/taku-o/github-actions-cache
- name: cache node environment
id: cache-node
uses: taku-o/github-actions-cache@v1.0.4
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
1GBまで増やした。
ダメだわコレ。内部でtgzしてる。
よって単体でファイルサイズが400MB越えて、GitHub Actionsの制限にかかって消されちゃう(´・ω・`)
どうせやるなら、パラメータ外出しにしような
って意見もあるかもしれない。
アクションのフォーク
アクションはGitHub Actions Marketplaceに公開しなくても使える。楽でイイネ。
でも、GitHub ActionsのアクションをForkして、自分のレポジトリに持ってくると、
レポジトリの名前が大げさ(?)な感じになっちゃうね。
アクションをForkする場合は、初手名前変更安定だろうね。
actions/cache ↓ taku-o/cache ↓ taku-o/github-actions-cache (邪魔にならない感じの名前に)
actions/upload-artifact
actions/upload-artifactはzip形式でファイルをアップロードする。
でも、既にzipファイルを作ってる場合は、それをそのままアップロードして欲しいんだよ、
って少し思ったけど、
mkdir、mvすれば良かっただけだね。
これならまだ許せる。
- name: collect staging built files
run: |
mkdir built
mv release/app.zip built
- name: upload built files
uses: actions/upload-artifact@master
with:
name: built
path: built
nameは、built.zipとzip付きで指定すると、built.zip.zipが作られるぞ。
気をつけるのだ。
- name: upload built files
uses: actions/upload-artifact@master
with:
name: built.zip
path: built
gitのbranch名を取る
pushされたGitHubレポジトリのbranchの名前を取る。
GITHUB_REFの中に名前が入っている。
refs/heads/feature/window-sizeのようなフォーマット。
- name: build staging application
run: |
npx gulp build:staging --branch=${GITHUB_REF#refs/heads/}
Pull Requestされたコードを取る
Pull Requestされたコードを取る。
Pull Requestされたコードのテストなどで使う。
こちらもGITHUB_REFの中に名前が入っている。
refs/pull/9999/merge
- name: build pr application
run: |
npx gulp build:pr --pull_request=${GITHUB_REF#refs/}
実際に、Pull Requestのコードを取り込んで使うには
↓みたいなことするコードを書くことになるかな?
git clone taku-o/github-actions-workflow-demo cd github-actions-workflow-demo git pull origin pull/9999/merge
おわり
終わりなのだ。