-
lint-doc.sh
에 대한 테스트 docs-lint links
및 다른 작업의 테스트ui-docs-links lint
의 테스트- 문서 린터 설치
- 로컬에서 문서 테스트 실행
- Linter 구성 업데이트
- Linting 이미지 업데이트
- Pre-push hooks 구성
- 문서 검토에서 린팅 비활성화
- CI/CD 파이프라인에서 사용되는 도구 버전
- 지원되는 프로젝트
문서 테스트
GitLab 문서는 코드로 저장되며 코드처럼 다룹니다. 문서의 표준과 품질을 유지하기 위해 코드와 유사한 프로세스를 사용합니다.
Markdown(.md
) 파일에 변경 사항을 포함하는 병합 요청은 이러한 CI/CD 작업을 실행합니다.
-
docs-lint markdown
: 다음을 포함하는 여러 유형의 테스트 실행:- 문서 내용: Vale
- Markdown 구조: markdownlint
- 기타 테스트:
lint-docs.sh
에서mermaidlint
을 포함하여 Mermaid 차트의 유효하지 않은 내용 검사
-
docs-lint links
: 문서 스위트 내부 링크의 유효성 확인 -
ui-docs-links lint
및eslint-docs
:app/views
파일과 같은 UI 요소에서 링크가 유효한지 확인
lint-doc.sh
에 대한 테스트
/scripts/lint-doc.sh
의 테스트는 Vale 및 markdownlint로 테스트할 수 없는 페이지 내용 문제를 찾습니다.
이 lint-doc.sh
테스트 중 하나라도 실패하면 docs-lint markdown
작업이 실패합니다:
- Curl(
curl
) 명령어는-h
와 같은 짧은 옵션 대신--header
와 같은 긴 형식 옵션을 사용해야 합니다. - 문서 페이지에는 페이지 소유권을 나타내는 front matter가 있어야 합니다.
- 검색 색인 및 grepping에 불규칙함을 일으킬 수 있는 비표준 유니코드 공백 문자(NBSP, NNBSP, ZWSP)를 사용해서는 안 됩니다.
-
CHANGELOG.md
에는 중복된 버전이 포함되어서는 안 됩니다. -
doc/
디렉토리의 파일은 실행할 수 없어야 합니다. -
README.md
대신index.md
를 사용해야 합니다. - 디렉토리와 파일 이름은 하이픈 대신 언더스코어를 사용해야 합니다.
- 디렉토리와 파일 이름은 소문자여야 합니다.
- Mermaid 차트는 오류 없이 렌더링되어야 합니다.
Mermaid 차트 검사
Mermaid는 코드로부터 차트와 다이어그램을 작성합니다.
스크립트(scripts/lint/check_mermaid.mjs
)는 Markdown 파일에 변경 내용을 포함하는 모든 병합 요청에 대해 lint-doc.sh
에서 실행됩니다. 차트에 문제가 있는 경우 스크립트는 오류를 반환합니다.
Mermaid 차트를 디버그하는 데 도움이 되려면 Mermaid Live Editor를 사용하세요.
docs-lint links
및 다른 작업의 테스트
Markdown(.md
) 파일에 변경 사항을 포함하는 병합 요청은 다음과 같은 작업을 실행합니다:
-
gitlab
프로젝트에서docs-lint links
작업. 예: https://gitlab.com/gitlab-org/gitlab/-/jobs/7065686331. -
omnibus-gitlab
프로젝트에서docs-lint links
작업. 예: https://gitlab.com/gitlab-org/omnibus-gitlab/-/jobs/7065337075. -
gitlab-operator
프로젝트에서docs-lint links
작업. -
gitlab-runner
프로젝트에서의docs:lint markdown
작업은 링크 확인을 포함합니다. 예: https://gitlab.com/gitlab-org/gitlab-runner/-/jobs/7056674997. -
charts/gitlab
프로젝트에서check_docs_links
작업. 예: https://gitlab.com/gitlab-org/charts/gitlab/-/jobs/7066011619.
이러한 작업은 문제가 있는 링크, 앵커 링크를 확인하고 보고합니다. 네트워크 연결이 필요한 링크는 스킵됩니다.
ui-docs-links lint
의 테스트
ui-docs-links lint
작업은 UI 요소(app/views
파일 등)에서 모든 문서 링크가 유효한 페이지와 앵커로 연결되는지를 테스트하기 위해 haml-lint
를 사용합니다.
문서 린터 설치
문서 스타일 가이드라인을 준수하고 문서에 추가된 내용을 향상시키기 위해 문서 린터를 설치하고 코드 에디터에 통합하세요. 최소한 markdownlint 및 Vale을 설치하여 빌드 파이프라인에서 실행되는 검사와 일치시켜야 합니다. 두 도구 모두 코드 에디터와 통합할 수 있습니다.
로컬에서 문서 테스트 실행
로컬 컴퓨터에서도 변경사항을 미리보거나 문서 테스트를 실행할 수 있습니다. 이렇게 하면 다음과 같은 이점이 있습니다:
- 피드백 루프를 가속화합니다. 브랜치의 변경 사항에 문제가 있는지를 CI/CD 파이프라인을 실행하는 대기 없이 알 수 있습니다.
- 비용을 절감합니다. 로컬에서 테스트를 실행하는 것이 GitLab이 사용하는 클라우드 인프라에서 테스트를 실행하는 것보다 비용이 적습니다.
중요한 점은:
- 도구를 업데이트하고 CI/CD 파이프라인에서 사용된 버전과 일치시키세요.
- 린터, 문서 링크 테스트 및 UI 링크 테스트를 CI/CD 파이프라인에서 실행되는 방식과 동일하게 실행하세요. 도구의 기본 구성과 다를 수 있는 CI/CD 파이프라인에서 사용하는 동일한 구성을 사용하는 것이 중요합니다.
로컬에서 Vale, markdownlint 또는 링크 검사 실행
다음에서 설치 및 구성 지침을 확인할 수 있습니다:
- markdownlint.
- Vale.
- Lychee 및 UI 링크 확인 도구.
로컬에서 lint-doc.sh
실행
Rake 작업을 사용하여 로컬에서 lint-doc.sh
테스트를 실행하세요.
필수 구성 요소:
- 컴퓨터에 필요한 린트 도구가 설치되어 있거나
- 필요한 도구가 사전 설치된 이미지를 사용하기 위해 작동하는 Docker 또는
containerd
설치가 되어 있어야 합니다.
-
gitlab
디렉토리로 이동하세요. -
다음을 실행하세요:
rake lint:markdown
개별 파일이나 디렉토리에 대해 린트 검사를 실행하려면 다음을 실행하세요:
MD_DOC_PATH=path/to/my_doc.md rake lint:markdown
출력은 다음과 유사해야 합니다:
=> <user>로 경로 /path/to/gitlab의 문서 린팅 중...
=> cURL 짧은 옵션 확인 중...
=> CHANGELOG.md 중복 항목 확인 중...
=> /path/to/gitlab/doc의 실행 권한 확인 중...
=> 새로운 README.md 파일 확인 중...
=> Markdown 스타일 린팅 중...
=> 간결한 내용 린팅 중...
✔ 1개 파일의 사용 중 0개의 오류, 0개의 경고, 0개의 제안.
✔ 린팅 통과
Linter 구성 업데이트
Vale 및 markdownlint 구성은 각 프로젝트의 소스 컨트롤에 있으므로 업데이트는 각 프로젝트에 개별적으로 커밋되어야 합니다.
gitlab
프로젝트의 구성은 진실의 원천으로 취급되어야 하며, 모든 업데이트는 먼저 해당 프로젝트에서 이루어져야 합니다.
일정한 주기로 gitlab
프로젝트에서의 Vale 및 markdownlint 구성 변경 사항은 다른 프로젝트에 동기화되어야 합니다. 각 지원되는 프로젝트에서 다음을 수행하세요:
-
새 브랜치를 생성합니다. 브랜치 이름의 시작이나 끝에
docs-
를 추가합니다. 일부 프로젝트에서는 이 규칙을 통해 실행되는 작업을 제한합니다.# markdownlint 구성 파일 복사 cp ../gitlab/.markdownlint-cli2.yaml . # 기존 Vale 구성을 제거합니다. GitLab 프로젝트에서 일부 규칙이 제거된 경우를 대비하여 rm -r docs/.vale/gitlab # 'docs' 디렉토리에 문서가 저장된 프로젝트용 gitlab_base Vale 구성 파일 복사 cp -r ../gitlab/doc/.vale/gitlab_base docs/.vale
-
gitlab-runner
,gitlab-omnibus
,charts/gitlab
, 또는gitlab-operator
를 업데이트하는 경우,gitlab
프로젝트에서도gitlab-docs
Vale 구성을 복사합니다. 예를 들어, 프로젝트의 루트 디렉토리에서 다음을 실행합니다.# 'docs' 디렉토리에 문서가 저장된 프로젝트용 gitlab-docs Vale 구성 파일 복사 cp -r ../gitlab/doc/.vale/gitlab_docs docs/.vale
-
.markdownlint-cli2.yaml
에 대한 생성된 차이를 검토합니다. 예를 들어, 다음을 실행합니다.git diff .markdownlint-cli2.yaml
- 필요하지 않은 변경 사항을 제거합니다. 예를 들어,
customRules
은gitlab
프로젝트에서만 사용됩니다. -
Vale 구성에 대한 생성된 차이를 검토합니다. 예를 들어, 다음을 실행합니다.
git diff docs
-
RelativeLinks.yml
에 대한 불필요한 변경 사항을 제거합니다. 이 규칙은 각 프로젝트별로 특정합니다. -
.tmpl
파일을 제거합니다. 이러한 파일은gitlab
프로젝트에서만 사용됩니다. -
새 규칙의 위반 사항을 확인하기 위해
markdownlint-cli2
를 실행합니다. 예를 들어:markdownlint-cli2 docs/**/*.md
-
새 규칙의 위반 사항을 확인하기 위해 Vale를 실행합니다. 예를 들어:
vale --minAlertLevel error docs
-
새 브랜치에 대한 변경 사항을 커밋합니다. 일부 프로젝트는 커밋하기 전에 관행적 커밋이 필요하므로 해당 프로젝트의 기여 정보를 확인하세요.
- 검토를 위해 병합 요청을 제출합니다.
Linting 이미지 업데이트
린트 테스트는 gitlab-docs
컨테이너 레지스트리에서 이미지를 사용하여 CI/CD 파이프라인에서 실행됩니다.
의존성의 새 버전(예: Ruby의 새 버전)이 릴리스된 경우, 새 버전을 사용하도록 이미지를 업데이트해야 합니다. 그런 다음 각 문서 프로젝트의 구성 파일을 새 이미지를 가리키도록 업데이트할 수 있습니다.
린팅 이미지를 업데이트하려면:
-
gitlab-docs
에서.gitlab-ci.yml
을 업데이트하도록 하는 머지 리퀘스트를 엽니다. (예시 MR) - 머지된 후, 새로운
Build docker images manually
스케줄된 파이프라인을 시작합니다. - 시작한 파이프라인으로 이동하여 해당하는
test:image
작업이 완료될 때까지 기다립니다. 예를 들어,test:image:docs-lint-markdown
와 같이 테스트 작업:- 통과하면 해당하는
image:
작업을 시작합니다. 예를 들어,image:docs-lint-markdown
. - 실패하면 테스트 작업 로그를 검토하고 문제를 해결하도록 시작합니다. 업데이트된 의존성과 함께 작동하도록 이미지 구성을 수동으로 조정해야할 수 있습니다.
- 통과하면 해당하는
-
image:
작업이 통과한 후, 새 이미지의 이름을 확인합니다. (예시 작업 출력) - 새 이미지가 컨테이너 레지스트리에 추가되었는지 확인합니다.
- 각 구성 파일을 새 이미지를 가리키도록 업데이트하는 머지 리퀘스트를 엽니다. 각 머지 리퀘스트에 이미지를 사용하는 작업을 트리거하기 위한 작은 문서 업데이트가 포함되어야 합니다.
- https://gitlab.com/gitlab-org/gitlab/-/blob/master/.gitlab/ci/docs.gitlab-ci.yml (예시 MR)
- https://gitlab.com/gitlab-org/gitlab-runner/-/blob/main/.gitlab/ci/docs.gitlab-ci.yml (예시 MR)
- https://gitlab.com/gitlab-org/omnibus-gitlab/-/blob/master/gitlab-ci-config/gitlab-com.yml (예시 MR)
- https://gitlab.com/gitlab-org/charts/gitlab/-/blob/master/.gitlab-ci.yml (예시 MR)
- https://gitlab.com/gitlab-org/cloud-native/gitlab-operator/-/blob/master/.gitlab-ci.yml (예시 MR)
- https://gitlab.com/gitlab-org/gitlab-development-kit/-/blob/main/.gitlab/ci/test.gitlab-ci.yml (예시 MR)
- 각 머지 리퀘스트에서 해당하는 작업 출력을 확인하여 업데이트된 이미지가 테스트에 사용되었는지 확인합니다. (예시 작업 출력)
- 머지 리퀘스트를 기술 작가에게 할당하여 검토 및 머지합니다.
Pre-push hooks 구성
Git pre-push hooks를 사용하면 Git 사용자가 다음을 수행할 수 있습니다:
- 브랜치를 푸시하기 전에 테스트 또는 다른 프로세스를 실행합니다.
- 이러한 테스트에서 실패가 발생하면 브랜치를 푸시하지 않습니다.
lefthook
은 Git 후크 관리자입니다. Git 후크를 구성, 설치, 제거하기 쉽게 만듭니다. 이에 대한 구성은 gitlab
프로젝트의 lefthook.yml
파일에서 이용할 수 있습니다.
lefthook
을 문서 검토에 사용하려면 Pre-push static analysis를 참조하세요.
푸시 시 Vale 오류를 표시하려면 Show Vale warnings on push를 참조하세요.
문서 검토에서 린팅 비활성화
문서 파일에서 일부 린팅을 비활성화할 수 있지만 전체적으로 비활성화할 수는 없습니다:
- Vale 테스트를 비활성화: 파일의 일부 또는 전체에 대해 모두 비활성화할 수 있습니다.
- markdownlint 테스트를 비활성화: 파일의 일부 또는 전체에 대해 모두 비활성화할 수 있습니다.
- 문서 링크 테스트: 비활성화할 수 없습니다.
- UI 링크 테스트: 비활성화할 수 없습니다.
CI/CD 파이프라인에서 사용되는 도구 버전
린팅 규칙과 최대한 호환성을 유지하려면 CI/CD 파이프라인에서 사용하는 린터 버전을 사용해야 합니다.
GitLab 프로젝트에서 사용된 markdownlint-cli2
및 vale
의 버전을 일치시키려면 다음을 참조하세요:
-
asdf
로 관리되는 프로젝트의 경우 프로젝트의.tool-versions
파일을 참조하세요. 예를 들어,gitlab
프로젝트의.tool-versions
파일을 참조하세요. - CI/CD를 위해 이 도구를 포함하는
image:docs-lint-markdown
도커 이미지를 빌드할 때 사용된 버전(seevariables:
section)을 참조하세요.
이 두 위치에 설정된 버전은 동일해야 합니다.
도구 | 버전 | 명령 | 추가 정보 |
---|---|---|---|
markdownlint-cli2
| 최신 | yarn global add markdownlint-cli2
| 없음. |
markdownlint-cli2
| 특정 | yarn global add markdownlint-cli2@0.8.1
|
@ 은 특정 버전을 나타내며, 이 예시에서는 도구를 버전 0.8.1 로 업데이트합니다.
|
Vale (asdf 사용)
| 특정 | asdf install
| 프로젝트의 .tool-versions 파일에 설정된 Vale 버전을 설치합니다.
|
Vale (기타) | 특정 | 적용 안됨. | 바이너리를 직접 다운로드할 수 있습니다. |
Vale (brew 사용)
| 최신 | brew update && brew upgrade vale
| 이 명령은 macOS 전용입니다. |
지원되는 프로젝트
CI/CD 파이프라인에서 각 테스트 실행의 구체적인 내용에 대한 세부 정보를 알아보려면 해당 프로젝트에서 해당 테스트에 대한 구성을 참조하세요:
- https://gitlab.com/gitlab-org/gitlab/-/blob/master/.gitlab/ci/docs.gitlab-ci.yml
- https://gitlab.com/gitlab-org/gitlab-runner/-/blob/main/.gitlab/ci/docs.gitlab-ci.yml
- https://gitlab.com/gitlab-org/omnibus-gitlab/-/blob/master/gitlab-ci-config/gitlab-com.yml
- https://gitlab.com/gitlab-org/charts/gitlab/-/blob/master/.gitlab-ci.yml
- https://gitlab.com/gitlab-org/cloud-native/gitlab-operator/-/blob/master/.gitlab-ci.yml
또한 이러한 프로젝트에서 일부 문서 테스트를 실행합니다:
- GitLab CLI: https://gitlab.com/gitlab-org/cli/-/blob/main/.gitlab-ci.yml
- GitLab Development Kit: https://gitlab.com/gitlab-org/gitlab-development-kit/-/blob/main/.gitlab/ci/test.gitlab-ci.yml
- Gitaly: https://gitlab.com/gitlab-org/gitaly/-/blob/master/.gitlab-ci.yml
- GitLab JetBrains용 Duo 플러그인: https://gitlab.com/gitlab-org/editor-extensions/gitlab-jetbrains-plugin/-/blob/main/.gitlab-ci.yml
- VS Code용 GitLab Workflow 확장 기능: https://gitlab.com/gitlab-org/gitlab-vscode-extension/-/blob/main/.gitlab-ci.yml
- Neovim용 GitLab 플러그인: https://gitlab.com/gitlab-org/editor-extensions/gitlab.vim/-/blob/main/.gitlab-ci.yml
- GitLab 언어 서버: https://gitlab.com/gitlab-org/editor-extensions/gitlab-lsp/-/blob/main/.gitlab-ci.yml
- Visual Studio용 GitLab 확장 프로그램: https://gitlab.com/gitlab-org/editor-extensions/gitlab-visual-studio-extension/-/blob/main/.gitlab-ci.yml
- AI 게이트웨이: https://gitlab.com/gitlab-org/modelops/applied-ml/code-suggestions/ai-assist/-/blob/main/.gitlab/ci/lint.gitlab-ci.yml
- 프롬프트 라이브러리: https://gitlab.com/gitlab-org/modelops/ai-model-validation-and-research/ai-evaluation/prompt-library/-/blob/main/.gitlab-ci.yml