はじめに
GithubActionsを使用していて、firebaseにデプロイを行っていました。ymlファイルのjobのコードで共通部分がいくつかあったため、共通化して呼び出せるようにしたいと思いました。そこで、GithubActionsのComposite action
を試してみました。
コードを共通化する
共通化前
buildとdeployそれぞれでinstallやbuild等の共通部分がありました。
main.yml
name: firebase deploy
on:
push:
branches:
- main
jobs:
build:
name: build
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Setup Node.js
uses: actions/setup-node@v2
with:
node-version: "18"
- name: Install dependencies
run: npm install
- name: Run build
run: npm run build
env:
VITE_SUPABASE_URL: ${{secrets.VITE_SUPABASE_URL}}
VITE_SUPABASE_ANON_KEY: ${{secrets.VITE_SUPABASE_ANON_KEY}}
...
deploy:
name: deploy
runs-on: ubuntu-latest
needs: build
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Setup Node.js and cache
uses: actions/setup-node@v2
with:
node-version: "18"
cache: "npm"
- name: Install firebase-tools
run: npm install --save-dev firebase-tools
- name: Run build
run: npm run build
env:
VITE_SUPABASE_URL: ${{secrets.VITE_SUPABASE_URL}}
VITE_SUPABASE_ANON_KEY: ${{secrets.VITE_SUPABASE_ANON_KEY}}
...
共通化後
.github/actions/build/action.yml
というファイルを作成します。
.github/actions/build/action.yml
inputs:
VITE_SUPABASE_URL:
description: "Supabase URL"
required: true
VITE_SUPABASE_ANON_KEY:
description: "Supabase Anon Key"
required: true
runs:
using: "Composite"
steps:
- name: Setup Node.js and cache
uses: actions/setup-node@v2
with:
node-version: "18"
cache: "npm"
- name: Install dependencies
run: npm install --save-dev firebase-tools
shell: bash
- name: Run build
run: npm run build
shell: bash
env:
VITE_SUPABASE_URL: ${{ inputs.VITE_SUPABASE_URL }}
VITE_SUPABASE_ANON_KEY: ${{ inputs.VITE_SUPABASE_ANON_KEY }}
main.yml
は以下に書き換え
uses: ./.github/actions/build
で指定して、ファイルを呼び出す。
main.yml
name: firebase deploy
on:
push:
branches:
- main
jobs:
build:
name: build
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Initialize
uses: ./.github/actions/build
with:
VITE_SUPABASE_URL: ${{ secrets.VITE_SUPABASE_URL }}
VITE_SUPABASE_ANON_KEY: ${{ secrets.VITE_SUPABASE_ANON_KEY }}
...
deploy:
name: deploy
runs-on: ubuntu-latest
needs: build
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Initialize
uses: ./.github/actions/build
with:
VITE_SUPABASE_URL: ${{ secrets.VITE_SUPABASE_URL }}
VITE_SUPABASE_ANON_KEY: ${{ secrets.VITE_SUPABASE_ANON_KEY }}
...
終わりに
jobのステップが増えてくると冗長化部分が増えてくるので、共通化したほうが分かりやすければ、適宜共通化していきたいです。
参考