1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GithubActions jobの重複部分を共通化したい

Last updated at Posted at 2024-08-13

はじめに

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のステップが増えてくると冗長化部分が増えてくるので、共通化したほうが分かりやすければ、適宜共通化していきたいです。

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?