MxLint CLI
CI
Release
Go Report Card
License
Mendix 개발자, CICD 엔지니어 및 플랫폼 엔지니어를 위한 명령어 인터페이스(Command line interface) 도구 모음입니다.
이 프로젝트는 초기 개발 단계에 있습니다. 사용 시 주의해 주십시오. 저희는 도구를 개선하는 데 도움을 줄 기여자(contributor)를 찾고 있습니다. 변경 사항이 있으면 PR을 생성하여 제출해 주십시오. 저희는 오픈 에코시스템과 오픈 소스를 믿습니다. 여러분의 기여를 기대합니다. 여기에는 문서 개선, 버그 수정, 새로운 기능 등이 포함될 수 있습니다.
Mendix Studio Pro 확장 프로그램
MxLint를 가장 빠르게 사용해 보는 방법은 Mendix Studio pro 확장 프로그램으로 사용하는 것입니다. mxlint-extension의 지침을 따르십시오.
기본 사용법
mxlint-cli는 Mendix 프로젝트에 도움을 주는 도구 모음입니다. 따라서 여러 가지 방식으로 사용할 수 있습니다. 어떤 기능을 하는지 감을 잡으실 수 있도록 다음 예시를 시도해 보십시오:
전제 조건 (Prerequisites)
- Mendix 프로젝트 소스
- 운영 체제: Linux, MacOS, Windows
- 릴리스 페이지에서 플랫폼별 바이너리(binary)를 다운로드합니다.
- 릴리스 페이지에서 정책(policies)을 다운로드하고 디렉토리에 압축을 해제합니다.
Mendix 모델을 Yaml로 내보내기 (Export Mendix model to Yaml)
mxlint-cli를 프로젝트 디렉토리로 복사합니다.
- 터미널을 열고 프로젝트 디렉토리로 이동합니다. 이상적으로는 Windows에서는 git-bash를, MacOS/Linux에서는 Terminal을 사용하십시오.
mxlint.yaml 파일을 생성합니다 (아래 예시 참조).
./mxlint-cli export를 실행합니다.
내보내진 Mendix 모델이 Yaml 형식으로 포함된 modelsource라는 새 디렉토리가 보일 것입니다.
mxlint-cli 파일을 .gitignore 파일에 추가하는 것이 좋습니다. 이렇게 하면 실수로 레포지토리(repository)에 커밋하는 것을 방지할 수 있습니다.
Mendix Yaml 파일 린트 검사 (Lint Mendix Yaml files)
mxlint.yaml에서 규칙을 구성합니다.
./mxlint-cli lint를 실행합니다.
터미널에서 정책 평가 요약과 report.xml 파일에 보고서를 확인할 수 있습니다. 이 보고서는 xUnit 형식으로 되어 있으며, CI/CD 파이프라인에서 사용할 수 있습니다.
직접 정책을 만들고 싶으신가요? 가이드 새 정책 만들기를 참고해 주세요.
하위 명령어 참조
설정 기반 명령: 설정은 병합된 구성 파일(default.yaml + 시스템 mxlint.yaml + 프로젝트 mxlint.yaml)에서 읽어옵니다. --config <경로>를 전달하여 가장 높은 우선순위를 가진 명시적 구성 파일을 적용할 수 있습니다. 루트 명령어에 전역 --verbose를 사용하여 모든 하위 명령어의 디버그 로깅을 활성화하세요.
전역 verbose 예시:
mxlint-cli --verbose lint
mxlint-cli -v export
mxlint-cli -v serve
구성 파일 (mxlint.yaml)
mxlint-cli는 다음 순서로 구성 파일을 로드합니다:
- 기본 구성: 컴파일 시 실행 파일에 내장된
default.yaml
- 시스템 구성:
- Windows:
%USERPROFILE%/mxlint.yaml
- Unix/Linux/macOS:
~/.config/mxlint.yaml
- 선택적 재정의:
MXLINT_SYSTEM_CONFIG
$PROJECT/mxlint.yaml (현재 작업 디렉토리)
--config <경로>를 통한 선택적 명시 구성 (가장 높은 우선순위, 파일 존재 필수)
프로젝트 구성은 시스템 구성보다 우선하며, --config는 가장 높은 우선순위를 가집니다.
예시 mxlint.yaml:
rules:
path: .mendix-cache/rules
rulesets:
...
참고 사항 (Notes):
rules.path는 lint가 사용하는 로컬 규칙 디렉터리입니다.
rules.rulesets은 linting 전에 rules.path로 동기화됩니다.
lint.skip은 문서 경로(modelsource 기준 상대 경로)와 규칙 번호를 지정하여 건너뛰기를 지원합니다.
cache.enable은 lint 및 export 캐싱을 제어합니다. 둘 다 비활성화하려면 false로 설정하세요.
cache.directory는 lint 및 export 캐시 파일의 기본 디렉터리를 설정합니다.
lint.concurrency는 병렬로 평가되는 규칙의 수를 제한합니다. 값이 낮을수록 대규모 모델의 최대 메모리 사용량을 줄입니다.
lint.regoTrace는 Rego 규칙에 대한 OPA 트레이싱(tracing)을 활성화합니다. 일반 실행 시에는 메모리 오버헤드를 줄이기 위해 false로 유지하세요.
export
Mendix 모델을 yaml 파일로 내보냅니다 (Export).
사용법 (Usage):
lint
Mendix 모델을 규칙에 따라 평가합니다. 이 작업을 수행하려면 먼저 모델이 내보내져야 합니다.
사용법 (Usage):
mxlint-cli lint
mxlint-cli lint --diff
--diff는 modelsource git 저장소에서 스테이징되지 않았거나 추적되지 않은 변경 사항이 있는 모델 문서만 평가합니다. 기준선 스냅샷을 생성하려면 먼저 init 및 commit을 실행하세요. 이 과정은 Mendix 프로젝트 자체가 modelsource를 git으로 추적할 것을 요구하지 않습니다.
init
필요한 경우 modelsource 디렉터리를 생성하고, diff linting을 위한 git 저장소 루트로 초기화합니다.
사용법 (Usage):
commit
현재 modelsource 상태를 커밋하여 나중에 lint --diff 실행 시 후속 변경 사항만 lint할 수 있도록 합니다.
사용법 (Usage):
mxlint-cli commit
mxlint-cli commit -m
정의된 테스트 케이스에 대해 규칙이 예상대로 작동하는지 확인합니다. 새로운 규칙을 개발할 때 이 명령어를 사용하여 예상대로 작동하는지 확인할 수 있습니다.
**사용법:**
```bash
mxlint-cli test-rules
cache-clear
린트 결과 캐시를 지웁니다. 모든 캐시된 린트 결과를 제거합니다. 이 캐시는 규칙과 모델 파일에 변경 사항이 없을 때 반복적인 린팅 작업을 가속화하는 데 사용됩니다.
사용법:
cache-stats
캐시 통계를 보여줍니다. 엔트리 수와 총 크기를 포함하여 캐시된 린트 결과에 대한 정보를 표시합니다.
사용법:
version
CLI 버전을 보여줍니다.
사용법:
export
Mendix 모델은 .mpr 확장자를 가진 바이너리 파일로 저장됩니다. 이 프로젝트는 Mendix 모델을 Yaml과 같이 사람이 읽기 쉬운 형식으로 내보냅니다(export). 이를 통해 개발자는 Mendix 모델에 전통적인 코드 분석 도구를 사용할 수 있습니다. 린팅(linting), 코드 포맷팅 등의 품질 검사를 생각하시면 됩니다.
Mendix Model Exporter
각 Mendix 문서/객체를 출력 디렉터리에서 별도의 파일로 볼 수 있으며, 버전 관리 시스템에서 버전 간의 차이점을 확인할 수 있습니다. 여기서는 엔티티의 Documentation을 변경하고 하나의 Attribute를 가진 새로운 Entity를 추가했습니다.
파이프라인 통합 (Pipeline integration)
로컬 머신에서 모델을 Yaml로 내보내고 싶지 않다면, 파이프라인에서 수행할 수 있습니다. 여기 고수준 예시가 있습니다:
$ ./bin/mxlint-cli-darwin-arm64 --config .ci/export-v1.yaml export
INFO[0000] Exporting resources/full-app-v1.mpr to modelsource
INFO[0000] Completed resources/full-app-v1.mpr
...
lint
Mendix Lint report
Mendix Yaml 파일을 린트합니다(Lint). 이 도구는 일반적인 실수들을 확인하고 모범 사례를 강제합니다. OPA를 정책 엔진으로 사용합니다. 따라서 정책은 강력한 Rego 언어로 작성되어야 합니다. 구문과 의미론에 대한 더 많은 정보는 Rego language reference를 참조하십시오.
NOQA 지시어 사용법 (문서 또는 특정 규칙 무시)
documentation 필드에서 noqa 지시어를 사용하여 린팅(linting)을 건너뛸 수 있습니다. 지원되는 형식은 두 가지입니다.
모든 규칙 건너뛰기 (문서 레벨 noqa)
documentation 필드에 #noqa 또는 # noqa로 시작하는 줄이 있으면, 해당 문서는 모든 규칙에 대해 "건너뜀(Skipped)"으로 표시될 수 있습니다 (대소문자 구분 없음). 이 메시지는 린팅 결과의 "건너뛴 이유"로 포함됩니다.
예시:
Documentation: |
#noqa This document is excluded from all linting rules
특정 규칙 건너뛰기 (규칙 레벨 noqa)
콜론(:) 뒤에 쉼표로 구분된 규칙 번호 목록을 제공하여 특정 규칙만 건너뛸 수 있습니다. 이를 통해 어떤 규칙을 무시할지 세밀하게 제어할 수 있습니다.
예시:
Documentation: |
#noqa:001_0002,001_0003 Temporarily skipping these rules due to legacy code
이 예시에서, 문서에 대해 규칙 001_0002와 001_0003만 건너뛰어지며, 다른 모든 규칙은 여전히 평가됩니다.
구문:
#noqa 또는 # noqa: 모든 규칙 건너뛰기
#noqa:rule1,rule2,... 또는 # noqa:rule1,rule2,...: 특정 규칙 건너뛰기
- 선택적인 이유는 규칙 목록 뒤에 공백으로 구분하여 추가할 수 있습니다.
참고 사항:
noqa 지시어는 대소문자를 구분하지 않습니다 (case-insensitive).
- 여러 규칙 번호는 쉼표로 구분해야 하며(공백 없음), 쉼표 사이에 공백을 넣지 않아야 합니다.
noqa 지시어 이후의 전체 줄이 건너뛴 이유로 기록됩니다.
NOQA 지시어 무시하기 (lint.ignoreNoqa)
일부 시나리오에서는 noqa 지시어가 지정된 문서들을 포함하여 모든 문서에 대해 린팅을 실행하고 싶을 수 있습니다. lint.ignoreNoqa: true를 구성하여 noqa 기능을 일시적으로 비활성화할 수 있습니다.
사용법 (mxlint.yaml):
이 플래그가 설정되면:
- 모든
noqa 지시어(문서 레벨 및 규칙 레벨 모두)가 무시됩니다.
- 일반적으로 건너뛰어졌을 문서들이 모든 규칙에 대해 평가됩니다.
- 기본 동작은
false입니다 (즉, noqa 지시어가 존중됩니다).
예시 시나리오:
- 감사 모드 (Audit mode):
noqa로 표시된 문서에서도 모든 위반 사항을 확인하는 전체 검사를 실행합니다.
- CI/CD 유효성 검사: 특정 브랜치(예: 프로덕션)가
noqa 억제에 의존하지 않도록 강제합니다.
- 정리 (Cleanup): 근본적인 문제를 해결한 후 제거할 수 있는
noqa 마커를 식별합니다.
참고: lint.ignoreNoqa가 활성화되면, 일반 linting 동작과의 일관성을 보장하기 위해 결과가 캐시되지 않습니다.
serve
모델을 내보내고 입력 MPR 파일이 변경될 때마다 린팅하는 서버를 실행합니다. 이는 독립적으로 작동할 수도 있고 Mendix Studio Pro 확장 기능과의 통합을 통해 작동할 수도 있습니다.
./bin/mxlint-cli-darwin-arm64 --config mxlint.yaml serve
INFO[0000] Rules directory .mendix-cache/rules found
INFO[0000] Syncing 2 rulesets to .mendix-cache/rules
...
serve 명령어는 다음을 제공합니다:
test-rules
규칙은 Rego와 JavaScript 형식 모두로 작성할 수 있습니다. 규칙 개발 속도를 높이기 위해, 알려진 테스트 시나리오를 기반으로 사용자의 규칙을 빠르게 평가할 수 있는 test-rules 하위 명령어를 구현했습니다. 테스트 케이스는 yaml 형식으로 작성됩니다.
$ ./bin/mxlint-darwin-arm64 --config .ci/test-rules.yaml test-rules
INFO[0000] >> resources/rules/001_0002_demo_users_disabled.js
INFO[0000] PASS allow
...
기능 (Features)
- Mendix 모델을 Yaml로 내보내기
- 일반적인 실수에 대해 Mendix Yaml 파일을 린팅하고 모범 사례를 강제합니다.
- 변경 사항을 감지하고 자동으로 재린팅합니다.
- 다른 도구와의 통합을 위해 HTTP를 통해 린트 결과를 제공합니다.
- 마이크로플로우(Microflow) 변환을 더 읽기 쉬운 형식으로 지원합니다.
- Rego와 JavaScript 규칙 모두를 지원합니다.
- 사람이 읽기 쉬운 출력
TODO
기여 (Contribute)
변경 사항을 담아 PR(Pull Request)을 생성해 주세요. 저희가 검토하고 병합할 것입니다.
Rego 파일은 스타일 가이드를 따라야 합니다.
PR을 생성하기 전에 테스트를 실행했는지 확인하세요:
라이선스 (License)