Metadata syntax
-
메타 데이터 파일은
action.yml
또는action.yaml
이라는 파일 이름을 가져야 합니다. -
메타 데이터 파일은 input, output, main entrypoint를 설정하는데 사용됩니다.
-
키워드 설명
키워드 설명 name Required action의 이름. Actions 탭에 이름을 표시하여 각 job에서 action들을 가시적으로 표시해줌 author Optional author의 이름. description Required action에 대한 짧은 설명. inputs Optional Input 파라미터는 런타임 동안 action이 사용할 데이터를 정의. Input 파라미터는 environment variables로 저장됨. Input ID는 소문자로 사용이 권고(대문자인 Input ID는 런타임동안 소문자로 변환됨)
Example:
- 이 예는 두 개의 inputnumoctocats
와octocatEyeColor
를 정의.
-numoctocats
은 항상 요구되지 않으며 기본값으로 ‘1’을 설정.
-octocatEyeColor
는 항상 요구되며 기본값이 없음.
- 워크 플로우는with
키워드를 사용해octocatEyeColor
의 input value를 지정해야 함.
<pre> inputs:
numOctocats:
description: ‘Number of Octocats’
required: false
default: ‘1’
octocatEyeColor:
description: ‘Eye color of the Octocats’
required: true</pre> - 워크플로우 파일내에 input 값을 지정하거나, default value를 지정할 때, GitHub은INPUT_<VARIABLE_NAME>
이라는 이름의 environment variable을 생성.
- composite으로 생성된 action은 자동으로INPUT_<VARIABLE_NAME>
을 자동으로 생성하지 않으며 수동으로 생성해야 함.
- Docker 컨테이너 action에서 이 environment variable에 접근하기 위해서는 메타데이터 파일에서arg
키워드를 사용해 input 값을 넘겨 줘야 함. 예를 들어, 워크플로우가numoctocats
와octocatEyeColor
의 input을 정의한다면, action은 이 값들을 각각 input의 값을INPUT_NUMOCTOCATS
과INPUT_OCTOCATEYECOLOR
environment variables로 읽어들임.outputs Optional Output 파라미터는 actions이 설정하는 데이터를 선언. 워크플로우내에 이후에 실행되는 Actions는 이전 실행되었던 actions들로 부터의 output 데이터 set을 사용할 수 있음.
- 예를들어, 두개의 input을 더하는 action이 있다면 (x + y = z), 이것의 output인 sum (z)를 다른 actions의 input으로 사용할 수 있습니다.
- Output을 선언하지 않아도, output을 워크플로우내에서 사용할 수 있습니다. Output에 대한 추가적인 정보는 “Workflow commands for GitHub Actions.”
<pre> outputs:
sum: # id of the output
description: ‘The sum of the inputs’ </pre>runs Required action의 코드와 코드를 실행하는 필요한 어플리케이션에 대한 경로 설정 branding 자신의 action을 구분할 수 있도록 특정 색깔과 Feather 아이콘을 사용해 뱃지를 생성. 뱃지는 GitHub Marketplace에서 action이름의 옆에 보여짐. -
input
key 설명 inputs.<input_id>
Required input에 대한 고유의 string
identifier.<input_id>
는 letter 또는_
로 시작해야 하며, 알파벳문자와-
,_
만 허용inputs.<input_id>.description
Required input 파라미터에 대한 string
정의inputs.<input_id>.required
Required action이 해당 input 파라미터가 요구되는지에 대한 boolean
값. 반드시 요구될 때true
로 설정inputs.<input_id>.default
Optional 사용할 기본값 설정 string
. 워크플로우에 input 파라미터가 지정되지 않았을 때 사용inputs.<input_id>.deprecationMessage
Optional warning메세지로 logging되는 string
. 이 warning메세지를 사용해 사용자에게 input이 deprecated되었고, 다른 대안들을 언급하는데 사용할 수 있음. -
output
key 설명 outputs.<output_id>
Required output에 대한 고유의 string
identifier.<output_id>
는 letter 또는_
로 시작해야 하며, 알파벳문자와-
,_
만 허용outputs.<output_id>.description
Required output 파라미터에 대한 string
정의-
Outputs
for composite run steps actionskey 설명 outputs
Optional output
은outputs.<output_id>
와outputs.<output_id>.description
과 같은 파라미터 사용하지만,value
토큰을 포함 <pre>outputs:
random-number:
description: “Random number”
value: $
runs:
using: “composite”
steps:
- id: random-number-generator
run: echo “::set-output name=random-id::$(echo $RANDOM)”
shell: bash </pre>outputs.<output_id>.value
Required action이 해당 input 파라미터가 요구되는지에 대한 boolean
값. 반드시 요구될 때true
로 설정
-
-
runs
for Javascript actionkey 설명 runs
required. composite action와 코드를 실행하는데 필요한 어플리케이션에 대한 경로설정<pre>runs:
using: ‘node12’
main: ‘main.js’</pre>runs.using
required main
에 지정된 코드를 실행할 어플리케이션runs.main
required action의 코드가 있는 파일. using
에서 지정된 어플리케이션이 이 파일을 실행.pre
Optional main:
action의 시작전에 job의 시작 단계에 실행될 스크립트. 예를 들어, 전제 조건으로 필요한 setup 스크립트를 실행.using
에서 지정된 어플리케이션이 이 파일을 실행.<pre>runs:
using: ‘node12’
pre: ‘setup.js’
main: ‘index.js’
post: ‘cleanup.js’ </pre>pre-if
Optional pre:
action 실행을 위한 조건을 설정.pre:
action은pre-if
의 조건이 부합할 때만 실행됨.
- example:cleanup.js
는 Linux-based 러너에서만 실행됨 <pre> pre: ‘cleanup.js’
pre-if: runner.os == ‘linux’</pre>post
Optional main:
action이 완료되면 job의 마지막에 실행될 스크립트. 예를 들어, 특절 프로세스를 종료하거나 불필요한 파일을 삭제.using
에서 지정된 어플리케이션이 이 파일을 실행. <pre>runs:
using: ‘node12’
main: ‘index.js’
post: ‘cleanup.js’</pre>post-if
Optional post:
action 실행을 위한 조건을 설정.post:
action은post-if
의 조건이 부합할 때만 실행됨.
- example:cleanup.js
는 Linux-based 러너에서만 실행됨 <pre> post: ‘cleanup.js’
post-if: runner.os == ‘linux’</pre> -
runs
for composite run steps actionkey 설명 runs
required. composite action와 코드를 실행하는데 필요한 어플리케이션에 대한 경로설정 runs.using
required action에서 composite run steps를 사용하려면 "composite"
으로 설정runs.steps
required action에서 실행시킬 steps runs.steps[*].run
required 실행할 커맨드. inline 또는 저장소내 스크립트 <pre>runs:
using: “composite”
steps:
- run: $/test/script.sh
shell: bash</pre> - 또는$GITHUB_ACTION_PATH
를 사용 <pre>runs:
using: “composite”
steps:
- run: $GITHUB_ACTION_PATH/script.sh
shell: bash</pre>runs.steps[*].shell
required command를 실행할 shell 지정. list중 지정 runs.steps[*].name
Optional composite run step의 이름 runs.steps[*].id
Optional step에 대한 고유의 id. id
를 사용해 Contexts에서 step을 참조할 수 있음 (“Context and expression syntax for GitHub Actions”)runs.steps[*].env
Optional 해당 step에 대한 environment variable의 map
설정. 워크플로우에 저장된 environment variable을 수정하려면, composite 실행 step에서echo "{name}={value}" >> $GITHUB_ENV
사용runs.steps[*].working-directory
Optional command가 실행되는 working 디렉토리 설정 -
runs
for Docker actionkey 설명 runs
required. Docker action이 사용할 이미지 설정
- Example using a Dockerfile in your repository <pre>runs:
using: ‘docker’
image: ‘Dockerfile’</pre>
- Example using public Docker registry container <pre>runs:
using: ‘docker’
image: ‘docker://debian:stretch-slim’runs.using
required 반드시 'docker'
로 설정pre-entrypoint
Optional entrypoint
의 action이 시작되기 전 필요한 스크립트를 실행할 수 있도록 해줌
- 예를들어, 전제조건으로 필요한 setup script을 실행
- GitHub Actions는doker run
을 사용해 이 action을 시작하고, 동일한 베이스 이미지를 사용하는 새로운 컨테이너에서 스크립트를 실행.
- 이것은 즉, runtime 상태가 mainentrypoint
컨테이너와 다르다는 것을 의미하고, 필요한 state는 workspace,HOME
또는STATE_
variable로 접근하여야 함을 의미합니다.
-pre-entrypoint:
는 항상 실행되지만,pre-if
를 사용해 덮어쓸 수 있습니다. <pre>runs:
using: ‘docker’
image: ‘Dockerfile’
args:
- ‘bzz’
pre-entrypoint: ‘setup.sh’
entrypoint: ‘main.sh’ </pre>runs.image
required action을 실행하기 위한 컨테이너로 사용할 도커이미지. 도커 베이스 이미지 이름, 또는 저장소내의 Dockerfile
, 도커 허브 또는 다른 레지스트리의 퍼블릭 이미지.
- 저장소내의Dockerfile
을 참조하기 위해서는, 파일 이름이Dockerfile
이어야 하고, 메타데이터 파일로 부터의 상대 경로를 사용해야 합니다.runs.env
Optional 컨테이너 환경내에 environment variables의 key/value map을 설정 runs.entrypoint
Optional 이 설정을 사용해 Dockerfile
내에 지정된ENTRYPOINT
를 덮어씌우거나,Dockerfile
이ENTRYPOINT
를 지정하지 않았을 때 사용.ENTRYPOINT
는 shell 또는 exec 형태.post-entrypoint
Optional runs.entrypoint
가 완료되면 cleanup 스크립트를 실행할 수 있음.
- GitHub Actions는doker run
을 사용해 이 action을 시작
- GitHub Actions는 동일한 베이스이미지를 사용하는 새로운 컨테이너에서 스크립트를 실행하므로, runtime 상태는 mainentrypoint
컨테이너와 다름.
- 필요한 state는 workspace,HOME
또는STATE_
variable로 접근가능.
-post-entrypoint:
는 항상 실행되지만,post-if
를 사용해 덮어쓸 수 있습니다.runs.args
Optional 도커 컨테이너를 위한 input을 정의. Input은 hardcode된 string을 포함할 수 있습니다. args
는 컨테이너의ENTRYPOINT
로 전달.
-args
는Dockerfile
내에CMD
대신에 사용됨.Dockerfile
내에CMD
를 사용하려면, 아래 가이드라인을 따라 사용.
1. 필요한 arguments들을 action의 README에 명시하고,CMD
instruction에서 제외시킴
2. defaults 값을 사용해args
를 지정하지 않아도 action을 사용할 수 있도록 함
3. 만약 action이--help
flag 또는 비슷한 것을 노출한다면, 자체 문서화를 위해 이것을 사용할 것을 권고