리터럴
식의 일부로 boolean, null, number 또는 string 데이터 형식을 사용할 수 있습니다.
| 데이터 형식 | 리터럴 값 |
|---|---|
boolean |
`true` 또는 `false` |
| null | null |
| number | JSON에서 지원하는 모든 숫자 형식입니다. |
| string |
${{ 및 }}에 문자열을 묶을 필요가 없습니다. 그러나 문자열을 묶는 경우 문자열 주위에 작은따옴표(')를 사용해야 합니다. 리터럴 작은따옴표를 사용하려면 추가 작은따옴표('')를 사용하여 리터럴 작은따옴표를 이스케이프합니다. 큰따옴표(")로 래핑하면 오류가 throw됩니다. |
조건부에서 falsy 값(false, 0, -0, "", '', null은 false로 강제 변환되고 truthy 값(true 및 falsy가 아닌 기타 값)은 true로 강제 변환됩니다.
리터럴 예시
env:
myNull: ${{ null }}
myBoolean: ${{ false }}
myIntegerNumber: ${{ 711 }}
myFloatNumber: ${{ -9.2 }}
myHexNumber: ${{ 0xff }}
myExponentialNumber: ${{ -2.99e-2 }}
myString: Mona the Octocat
myStringInBraces: ${{ 'It''s open source!' }}
연산자
| 연산자 | 설명 |
|---|---|
( ) | 논리적 그룹화 |
[ ] | 인덱스 |
. | 속성 참조 해제 |
! | Not |
< | 보다 작음 |
<= | 보다 작거나 같음 |
> | 보다 큼 |
>= | 보다 크거나 같음 |
== | 같음 |
!= | 같지 않음 |
&& | And |
|| | 또는 |
참고
- GitHub는 문자열을 비교할 때 대/소문자를 무시합니다.
`steps.<step_id>.outputs.<output_name>`은 문자열로 평가됩니다. 특정 구문을 사용하여 GitHub에게 식을 문자열로 처리하는 대신 평가하도록 지시해야 합니다. 자세한 내용은 [AUTOTITLE](/actions/learn-github-actions/contexts#steps-context)을(를) 참조하세요.
- 숫자 비교의 경우
fromJSON()함수를 사용하여 문자열을 숫자로 변환할 수 있습니다.fromJSON()함수에 대한 자세한 내용은 fromJSON을 참조하세요.
GitHub는 느슨한 동등 비교를 수행합니다.
-
형식이 일치하지 않으면 GitHub은 형식을 숫자로 강제 변환합니다. GitHub는 이러한 변환을 사용하여 데이터 형식을 숫자로 캐스팅합니다.
Type 결과 null 0부울 `true`은 `1`를 반환합니다 <br /> `false`은 `0`를 반환합니다 || String | 모든 유효한 JSON 숫자 형식에서 구문 분석됩니다. 그렇지 않으면
NaN입니다.
참고: 빈 문자열이0을 반환합니다. | | Array |NaN| | Object |NaN| -
`NaN`이 관계형 비교(`>`, `<`, `>=`, `<=`)의 피연산자 중 하나인 경우 결과는 항상 `false`입니다. 자세한 내용은 [NaN Mozilla 문서](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN)를 참조하세요. -
GitHub는 문자열을 비교할 때 대/소문자를 무시합니다.
-
개체와 배열은 동일한 인스턴스일 때만 동일하게 간주됩니다.
Functions
GitHub은 식에서 사용할 수 있는 기본 제공 함수 집합을 제공합니다. 일부 함수는 값을 문자열로 캐스팅하여 비교를 수행합니다. GitHub는 이러한 변환을 사용하여 데이터 형식을 문자열로 캐스팅합니다.
| Type | 결과 |
|---|---|
| null | '' |
| 부울 |
`'true'` 또는 `'false'` |
| Number | 10진수 형식, 큰 숫자의 지수 | | Array | 배열이 문자열로 변환되지 않음 | | Object | 개체가 문자열로 변환되지 않음 |
contains
contains( search, item )
`true`이 `search`을 포함하는 경우 `item`를 반환합니다.
`search`가 배열이면 이 함수는 `true`이 배열의 요소인 경우 `item`를 반환합니다.
`search`이 문자열이면 이 함수는 `true`이 `item`의 하위 문자열인 경우 `search`를 반환합니다. 이 함수는 대/소문자를 구분하지 않습니다. 값을 문자열로 캐스팅합니다.
문자열을 사용하는 예제
`contains('Hello world', 'llo')`는 `true`를 반환합니다.
개체 필터를 사용하는 예제
`contains(github.event.issue.labels.*.name, 'bug')`는 이벤트와 관련된 문제에 "버그" 레이블이 있는 경우 `true`를 반환합니다.
자세한 내용은 개체 필터를 참조하세요.
문자열 배열과 일치하는 예제
`github.event_name == "push" || github.event_name == "pull_request"`를 쓰는 대신 `contains()`과 함께 `fromJSON()`를 사용하여 문자열 배열에 `item`이 포함되어 있는지 확인할 수 있습니다.
예를 들어 contains(fromJSON('["push", "pull_request"]'), github.event_name)은 true이 “push” 또는 “pull_request”인 경우 github.event_name를 반환합니다.
startsWith
startsWith( searchString, searchValue )
`true`이 `searchString`로 시작하면 `searchValue`를 반환합니다. 이 함수는 대/소문자를 구분하지 않습니다. 값을 문자열로 캐스팅합니다.
`startsWith`의 예
`startsWith('Hello world', 'He')`는 `true`를 반환합니다.
endsWith
endsWith( searchString, searchValue )
`true`이 `searchString`으로 끝나면 `searchValue`를 반환합니다. 이 함수는 대/소문자를 구분하지 않습니다. 값을 문자열로 캐스팅합니다.
`endsWith`의 예
`endsWith('Hello world', 'ld')`는 `true`를 반환합니다.
format
format( string, replaceValue0, replaceValue1, ..., replaceValueN)
`string`의 값을 `replaceValueN` 변수로 바꿉니다.
`string`의 변수는 `{N}` 구문을 사용하여 지정됩니다. 여기서 `N`은 정수입니다.
`replaceValue` 및 `string`을 하나 이상 지정해야 합니다. 사용할 수 있는 변수(`replaceValueN`)의 최대값은 없습니다. 이중 중괄호를 사용하여 중괄호를 이스케이프합니다.
`format`의 예
format('Hello {0} {1} {2}', 'Mona', 'the', 'Octocat')
‘Hello Mona the Octocat’을 반환합니다.
중괄호 이스케이프 예제
format('{{Hello {0} {1} {2}!}}', 'Mona', 'the', 'Octocat')
'{Hello Mona the Octocat!}'을 반환합니다.
join
join( array, optionalSeparator )
`array`의 값은 배열 또는 문자열일 수 있습니다. 모든 `array` 값이 문자열에 연결됩니다.
`optionalSeparator`를 제공하면 연결된 값 사이에 삽입됩니다. 그렇지 않으면 기본 구분 기호인 `,`가 사용됩니다. 값을 문자열로 캐스팅합니다.
`join`의 예
`join(github.event.issue.labels.*.name, ', ')`은 ‘버그, 도움 요청’을 반환할 수 있습니다.
toJSON
toJSON(value)
`value`의 자동 서식 지정 JSON 표현을 반환합니다. 이 함수를 사용하여 컨텍스트에 제공된 정보를 디버그할 수 있습니다.
`toJSON`의 예
`toJSON(job)`은 `{ "status": "success" }`를 반환할 수 있습니다.
fromJSON
fromJSON(value)
`value`에 대한 JSON 객체 또는 JSON 데이터 형식을 반환합니다. 이 함수를 사용하여 JSON 개체를 평가 식으로 제공하거나 문자열, 부울, null 값, 배열 및 개체와 같이 JSON 또는 JavaScript로 표시할 수 있는 데이터 형식을 변환할 수 있습니다.
JSON 개체를 반환하는 예제
이 워크플로는 한 작업에서 JSON 매트릭스를 설정하고 출력 및 fromJSON을 사용하여 다음 작업으로 전달합니다.
name: build
on: push
jobs:
job1:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- id: set-matrix
run: echo "matrix={\"include\":[{\"project\":\"foo\",\"config\":\"Debug\"},{\"project\":\"bar\",\"config\":\"Release\"}]}" >> $GITHUB_OUTPUT
job2:
needs: job1
runs-on: ubuntu-latest
strategy:
matrix: ${{ fromJSON(needs.job1.outputs.matrix) }}
steps:
- run: echo "Matrix - Project ${{ matrix.project }}, Config ${{ matrix.config }}"
name: build
on: push
jobs:
job1:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- id: set-matrix
run: echo "matrix={\"include\":[{\"project\":\"foo\",\"config\":\"Debug\"},{\"project\":\"bar\",\"config\":\"Release\"}]}" >> $GITHUB_OUTPUT
job2:
needs: job1
runs-on: ubuntu-latest
strategy:
matrix: ${{ fromJSON(needs.job1.outputs.matrix) }}
steps:
- run: echo "Matrix - Project ${{ matrix.project }}, Config ${{ matrix.config }}"
JSON 데이터 형식을 반환하는 예제
이 워크플로는 fromJSON을 사용하여 환경 변수를 문자열에서 부울 또는 정수로 변환합니다.
name: print
on: push
env:
continue: true
time: 3
jobs:
job1:
runs-on: ubuntu-latest
steps:
- continue-on-error: ${{ fromJSON(env.continue) }}
timeout-minutes: ${{ fromJSON(env.time) }}
run: echo ...
name: print
on: push
env:
continue: true
time: 3
jobs:
job1:
runs-on: ubuntu-latest
steps:
- continue-on-error: ${{ fromJSON(env.continue) }}
timeout-minutes: ${{ fromJSON(env.time) }}
run: echo ...
워크플로는 fromJSON() 함수를 사용하여 continue 환경 변수를 문자열에서 부울로 변환하여 오류 발생 시 계속할지 여부를 결정할 수 있습니다. 마찬가지로 time 환경 변수를 문자열에서 정수로 변환하여 작업에 대한 시간 제한을 분 단위로 설정합니다.
hashFiles
hashFiles(path)
`path` 패턴과 일치하는 파일 세트에 대한 단일 해시를 반환합니다. 쉼표로 구분된 단일 `path` 패턴 또는 여러 `path` 패턴을 제공할 수 있습니다.
`path`은 `GITHUB_WORKSPACE` 디렉터리에 상대적이며 `GITHUB_WORKSPACE` 내부의 파일만 포함할 수 있습니다. 이 함수는 일치하는 각 파일에 대한 개별 SHA-256 해시를 계산한 다음 해당 해시를 사용하여 파일 집합에 대한 최종 SHA-256 해시를 계산합니다.
`path` 패턴이 파일과 일치하지 않으면 빈 문자열을 반환합니다. SHA-256에 대한 자세한 내용은 [SHA-2](https://en.wikipedia.org/wiki/SHA-2)를 참조하세요.
패턴 일치 문자를 사용하여 파일 이름을 일치시킬 수 있습니다.
hashFiles의 패턴 일치는 glob 패턴 일치를 따르며 Windows에서는 대/소문자를 구분하지 않습니다. 지원되는 패턴 일치 문자에 대한 자세한 내용은 설명서에서 @actions/glob 섹션을 참조하세요.
단일 패턴을 사용하는 예제
리포지토리의 모든 package-lock.json 파일과 일치합니다.
hashFiles('**/package-lock.json')
루트 수준의 .js 디렉터리에 있는 모든 src 파일과 일치하지만 src의 모든 하위 디렉터리는 무시합니다.
hashFiles('/src/*.js')
루트 수준의 .rb 디렉터리에 있는 모든 lib 파일과 일치하고 lib의 모든 하위 디렉터리가 포함됩니다.
hashFiles('/lib/**/*.rb')
여러 패턴이 있는 예제
리포지토리에 있는 모든 package-lock.json 및 Gemfile.lock 파일에 대한 해시를 만듭니다.
hashFiles('**/package-lock.json', '**/Gemfile.lock')
`.rb`의 모든 하위 디렉터리를 포함하지만 `lib` 하위 디렉터리의 `lib` 파일은 제외하여 루트 수준의 `.rb` 디렉터리에 있는 모든 `foo` 파일에 대한 해시를 만듭니다.
hashFiles('/lib/**/*.rb', '!/lib/foo/*.rb')
case
case( pred1, val1, pred2, val2, ..., default )
순서대로 조건을 평가하고 true로 계산되는 첫 번째 조건에 해당하는 값을 반환합니다. 일치하는 조건자가 없으면 마지막 인수를 기본값으로 반환합니다.
단일 조건자를 사용하는 예제
env:
MY_ENV_VAR: ${{ case(github.ref == 'refs/heads/main', 'production', 'development') }}
ref가 MY_ENV_VAR일 때 production을 refs/heads/main으로 설정하고, 그렇지 않으면 development으로 설정합니다.
여러 조건자가 있는 예제
env:
MY_ENV_VAR: |-
${{ case(
github.ref == 'refs/heads/main', 'production',
github.ref == 'refs/heads/staging', 'staging',
startsWith(github.ref, 'refs/heads/feature/'), 'development',
'unknown'
) }}
브랜치에 따라 MY_ENV_VAR를 설정합니다: production의 경우 main, staging의 경우 staging, development로 시작하는 분기의 경우 feature/, 또는 다른 모든 분기의 경우 unknown합니다.
상태 검사 함수
다음 상태 검사 함수를 if 조건의 식으로 사용할 수 있습니다. 이러한 함수 중 하나를 포함하지 않는 한 success() 기본 상태 검사가 적용됩니다.
if 조건부에 대한 자세한 내용은 GitHub Actions에 대한 워크플로 구문 및 메타데이터 구문 참조 내용을 참조하세요.
`if` 조건문 외부에서 `job.status`를 사용하여 작업 상태에 액세스할 수 있습니다. 자세한 내용은 [AUTOTITLE](/actions/reference/contexts-reference#job-context)을(를) 참조하세요.
성공
이전 단계가 모두 성공한 경우 true를 반환합니다.
`success`의 예
steps:
...
- name: The job has succeeded
if: ${{ success() }}
항상
취소된 경우에도 단계가 항상 실행되고 true가 반환되도록 합니다.
always 식은 작업이 취소된 경우에도 실행할 것으로 예상되는 단계 수준 또는 작업에서 가장 잘 사용됩니다. 예를 들어 작업이 취소된 경우에도 로그를 보내는 데 always를 사용할 수 있습니다.
경고
중요한 오류가 발생할 수 있는 작업(예: 원본 가져오기)에는 always를 사용하지 않아야 합니다. 그렇지 않으면 시간 초과될 때까지 워크플로가 중단될 수 있습니다. 성공 또는 실패에 관계없이 작업 또는 단계를 실행하려면 권장되는 대안을 사용합니다. if: ${{ !cancelled() }}
`always`의 예
if: ${{ always() }}
취소됨
워크플로가 취소된 경우 true를 반환합니다.
`cancelled`의 예
if: ${{ cancelled() }}
실패
작업의 이전 단계가 실패하면 true를 반환합니다. 종속 작업 체인이 있는 경우 상위 작업이 실패하면 failure()가 true를 반환합니다.
`failure`의 예
steps:
...
- name: The job has failed
if: ${{ failure() }}
조건이 있는 오류
실패 후 실행할 단계에 대한 추가 조건을 포함할 수 있지만 상태 확인 기능이 포함되지 않은 failure() 조건에 자동으로 적용되는 success()의 기본 상태 확인을 재정의하려면 if를 계속 포함해야 합니다.
조건이 있는 failure의 예
steps:
...
- name: Failing step
id: demo
run: exit 1
- name: The demo step has failed
if: ${{ failure() && steps.demo.conclusion == 'failure' }}
개체 필터
`*` 구문을 사용하여 필터를 적용하고 컬렉션에서 일치하는 항목을 선택할 수 있습니다.
예를 들어 fruits라는 개체의 배열을 고려합니다.
[
{ "name": "apple", "quantity": 1 },
{ "name": "orange", "quantity": 2 },
{ "name": "pear", "quantity": 1 }
]
`fruits.*.name` 필터는 `[ "apple", "orange", "pear" ]` 배열을 반환합니다.
개체의 * 구문을 사용할 수도 있습니다. 예를 들어 vegetables라는 개체가 있다고 가정합니다.
{
"scallions":
{
"colors": ["green", "white", "red"],
"ediblePortions": ["roots", "stalks"],
},
"beets":
{
"colors": ["purple", "red", "gold", "white", "pink"],
"ediblePortions": ["roots", "stems", "leaves"],
},
"artichokes":
{
"colors": ["green", "purple", "red", "black"],
"ediblePortions": ["hearts", "stems", "leaves"],
},
}
`vegetables.*.ediblePortions` 필터는 다음으로 계산할 수 있습니다.
[
["roots", "stalks"],
["hearts", "stems", "leaves"],
["roots", "stems", "leaves"],
]
개체는 순서를 유지하지 않으므로 출력 순서를 보장할 수 없습니다.