TL;DR
assert-no-unexpected-changes는 데스크톱 앱, CLI 도구 등에서 허용 목록 밖의 예상치 못한 파일 변경이 발생하는지 검사하는 GitHub Action임.- AI가 작성한 코드를 블랙박스처럼 실행하고, 파일 삭제나 뒤에서 일어나는 재작성을 감지하려는 목적으로 제작됨.
arrange단계만 실행하는 컨테이너와arrange및act단계를 모두 실행하는 컨테이너를 준비해 두 결과를 비교함.- 두 컨테이너에서
docker diff를 실행하고 결과를allowlist와 대조하며, 허용되지 않은 변경이 있으면 단계가 오류로 실패함. - Linux 러너에서 사용하며,
arrange의 변경 사항과 지정된workdir아래의 변경 사항은 검사 대상에서 제외됨.
제작 배경
- AI가 작성한 코드가 이상한 동작을 하지 않는지 코드 자체를 들여다보지 않고 확인할 수 있도록 이 GitHub Action을 제작함.
- 데스크톱 앱을 만들었다고 소셜 미디어에 게시하려던 중, AI가 만들었다고 말하면 일부 사람들이 자신의 기기에서 이상한 동작이 일어날까 걱정할 수 있다는 생각이 듦.
- ‘이상한 동작’이 무엇일지 자문한 결과, 파일이 몰래 삭제되거나 다시 작성되는 일이 가장 먼저 떠오름.
- 이를 감지하는 도구가 보이지 않아 직접 Action을 작성함.
기능
- Docker 컨테이너 두 개를 준비함. 하나는
arrange단계만 실행하고, 다른 하나는arrange와act단계를 모두 실행함. - 지정된 이미지에서 시작하는 Dockerfile을 작성하고,
GITHUB_WORKSPACE를workdir에 복사한 뒤arrange단계를 실행해 이미지를 빌드함. - 해당 이미지로 컨테이너 두 개를 시작하고, 한 컨테이너에서만
act단계를 실행한 다음 두 컨테이너 모두에docker diff를 실행함. - 두 컨테이너 간 차이를
allowlist와 대조해 위반을 감지함. - 허용되지 않은 변경이 있으면 다음과 같은 오류와 함께 단계가 실패함.
A는 생성,C는 변경,D는 삭제를 의미함.- 예시에서는 허용 목록 밖의 변경 2건과
/unexpected추가,/expected삭제가 표시됨.
사용 방법
checkout-latest-version과this-action-latest-version을v1같은 최신 버전 번호로 바꿔 사용함.- 러너는 Linux 환경이어야 하며, 예시에서는
ubuntu-latest를 사용함. arrange는sh에서 실행되는 선택 항목이며, 의존성 설치나 빌드 등 준비 명령을 지정할 수 있고 이 단계의 변경 사항은 검사되지 않음.act는sh에서 실행되며 변경 사항을 검사함. 테스트 실행이나 빌드된 실행 파일 구동 등의 명령을 지정함.allowlist는 변경이 허용되는 절대 경로를 한 줄에 하나씩 지정하는 선택 항목이며,*는/도 일치 대상으로 포함함.workdir는 선택 항목이며 기본값은/workdir임. 이 경로 아래의 변경 사항은 검사되지 않음.image는 선택 항목이며 기본값은 Ubuntu임. 복사된 작업 공간을 변경하려면 이미지가 root 사용자로 실행되어야 함.
라이선스
- MIT 라이선스임.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요