← 전체 기능

검증·리뷰v0.3.0에서 사용 가능

CI 스타터

oah ci init은 .github/workflows/oah-ci.yml을 먼저 전부 보여 주고 물은 뒤에 쓴다. 고른 운영체제에서 테스트를 돌리고 push와 pull request마다 버전을 고정한 gitleaks로 비밀을 검사하며, action은 모두 전체 커밋 SHA로 고정하고 권한은 읽기 전용이며 비밀이 없다. 검사를 필수로 만드는 일은 사용자가 GitHub에서 직접 설정한다.

필요한 상황

CI가 없거나 한 OS에서만 돌면 다른 곳에서 테스트를 깨뜨리거나 키를 흘리는 변경이 모르는 새 기본 브랜치에 들어간다.

동작 방식

  1. oah ci init을 실행하면 테스트 명령(pytest, unittest, npm test, go test, cargo test)을 찾아 그대로 쓸지 묻는다.
  2. 워크플로 전체를 출력하고 Write .github/workflows/oah-ci.yml? [y/N]라고 묻는다. y라고 답해야만 쓴다.
  3. 작업은 둘이다. 고른 OS마다 한 번씩 도는 test(macos-latest, windows-latest, ubuntu-latest)와, 받은 gitleaks를 SHA-256 지문으로 확인한 뒤 --redact --no-banner로 git 이력 전체를 검사하는 secret scan이다.
  4. 커밋하고 push한 뒤 Actions 탭이나 pull request 아래쪽에서 결과를 읽는다.
  5. 검사가 통과하기 전에는 병합하지 못하게 하려면 GitHub에 secret scan과 OS마다 test (…) 하나를 요구하는 브랜치 규칙 세트를 더한다.

예제

선택을 `.oah/config.toml`에 남긴다. 명령줄 옵션이 우선한다(CI 스타터 문서).

[ci]
os = ["macos", "windows"]
test_command = "make test"

요구 사항

  • GitHub 저장소. 규칙 세트는 공개 저장소에서는 모든 요금제에서, 비공개 저장소에서는 GitHub Pro, Team, Enterprise Cloud에서 쓸 수 있다.
  • npm ci에는 커밋된 package-lock.json이 필요하다.

한계와 복구

  • oah는 저장소 설정을 바꾸지 않는다. 필수 검사는 사용자가 더한다.
  • 기존 워크플로를 몰래 바꾸지 않는다. --yes만으로는 거절하고 --force --yes일 때만 묻지 않고 바꾼다.
  • 맞는 테스트 명령이 없으면 일부러 실패하는 **Run tests (edit me)** 단계가 들어가니 직접 바꾼다.
  • secret scan이 실패하면 먼저 발급한 곳에서 키를 바꾼다. 새 커밋으로 지워도 이력에는 남는다.

원문 문서

관련 기능