コンテンツにスキップ

GitHub Actions のあれこれ

実行ブランチの取得とrun-name

  • workflow_dispatch の実行ブランチをgithub.ref_nameで取得できる
  • run-nameで Web 上の表示を動的にする

実行結果

input.yaml
name: foo
run-name: Deploy to ${{ inputs.application }} by @${{ github.actor }}

on:
  workflow_dispatch:
    inputs:
      application:
        type: choice
        description: Application
        options:
          - foo
          - bar

jobs:
  example:
    runs-on: ubuntu-latest
    steps:
      - name: echo branch
        run: echo ${{ github.ref_name }}

workflow_run

workflow_runは workflow が終わった後に発火するもの。キャッシュや通知、後処理に使われる。

  • workflow_run のon.workflow_run.workflowsでは workflow のnameを指定する必要がある
    • run-nameは指定できない
    • fo*のような曖昧な文字列も対応
workflow_run.yaml
name: workflow_run
on:
  workflow_run:
    workflows:
      - foo
      - fo*
    types: [completed]

jobs:
  on-requested:
    runs-on: ubuntu-20.04
    if: ${{ github.event.workflow_run.conclusion == '' }}
    steps:
      - run: echo 'requested'
  on-success:
    runs-on: ubuntu-20.04
    if: ${{ github.event.workflow_run.conclusion == 'success' }}
    steps:
      - run: echo 'success'
  on-failure:
    runs-on: ubuntu-20.04
    if: ${{ github.event.workflow_run.conclusion == 'failure' }}
    steps:
      - run: echo 'failure'

workflow_run で直前の workflow の inputs の情報を取得しようとしたができなかった話

workflow_run で直前の workflow の inputs の情報を取得しようとしたができなかった。github-acriptGitHub REST APIを見てみたがそれらしい情報はなかった。

name: workflow_run2
on:
  workflow_run:
    workflows:
      - foo
      - fo*
    types: [completed]
jobs:
  echo-workflow-info:
    name: echo-workflow-info
    runs-on: ubuntu-20.04
    steps:
      - uses: actions/github-script@v6
        with:
          script: |
            core.info(JSON.stringify(context.payload))

artifact に出力すると workflow を跨いだ変数共有ができそうだが、それやるならcomposite actionworkflow_callで明示的に値渡すのでいいなと思った。

nginx や redis, DB などのリソースを使う

GitHub Actions から DB や nginx に接続できるようになる。

services:
  nginx:
    image: nginx
    # Map port 8080 on the Docker host to port 80 on the nginx container
    ports:
      - 8080:80
  redis:
    image: redis
    # Map TCP port 6379 on Docker host to a random free port on the Redis container
    ports:
      - 6379/tcp

https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idservices