summaryrefslogtreecommitdiff
path: root/.gitlab/ci/docs.gitlab-ci.yml
blob: b6680461da465e631ca99fbc490d444ab5a69455 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# Make sure to update all the similar conditions in other CI config files if you modify these conditions
.if-canonical-dot-com-gitlab-org-groups-merge-request: &if-canonical-dot-com-gitlab-org-groups-merge-request
  if: '$CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE =~ /^gitlab-org($|\/)/ && $CI_MERGE_REQUEST_IID'

# Make sure to update all the similar conditions in other CI config files if you modify these conditions
.if-not-ee: &if-not-ee
  if: '$CI_PROJECT_NAME !~ /^gitlab(-ee)?$/'

# Make sure to update all the similar conditions in other CI config files if you modify these conditions
.if-default-refs: &if-default-refs
  if: '$CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_REF_NAME =~ /^[\d-]+-stable(-ee)?$/ || $CI_COMMIT_REF_NAME =~ /^\d+-\d+-auto-deploy-\d+$/ || $CI_COMMIT_REF_NAME =~ /^security\// || $CI_MERGE_REQUEST_IID || $CI_COMMIT_TAG'

# Make sure to update all the similar patterns in other CI config files if you modify these patterns
.code-docs-patterns: &code-docs-patterns
  - ".gitlab/route-map.yml"
  - "doc/**/*"
  - ".markdownlint.json"

# Make sure to update all the similar patterns in other CI config files if you modify these patterns
.code-backstage-qa-patterns: &code-backstage-qa-patterns
  - ".gitlab/ci/**/*"
  - ".{eslintignore,gitattributes,nvmrc,prettierrc,stylelintrc,yamllint}"
  - ".{codeclimate,eslintrc,gitlab-ci,haml-lint,haml-lint_todo,rubocop,rubocop_todo,scss-lint}.yml"
  - ".csscomb.json"
  - "Dockerfile.assets"
  - "*_VERSION"
  - "Gemfile{,.lock}"
  - "Rakefile"
  - "{babel.config,jest.config}.js"
  - "config.ru"
  - "{package.json,yarn.lock}"
  - "{,ee/}{app,bin,config,db,haml_lint,lib,locale,public,scripts,symbol,vendor}/**/*"
  - "doc/api/graphql/reference/*" # Files in this folder are auto-generated
  # Backstage changes
  - "Dangerfile"
  - "danger/**/*"
  - "{,ee/}fixtures/**/*"
  - "{,ee/}rubocop/**/*"
  - "{,ee/}spec/**/*"
  - "doc/README.md"  # Some RSpec test rely on this file
  # QA changes
  - ".dockerignore"
  - "qa/**/*"

.review-docs:
  extends:
    - .default-tags
    - .default-retry
  rules:
    - <<: *if-canonical-dot-com-gitlab-org-groups-merge-request
      changes: *code-docs-patterns
      when: manual
  allow_failure: true
  image: ruby:2.6-alpine
  stage: review
  dependencies: []
  variables:
    # We're cloning the repo instead of downloading the script for now
    # because some repos are private and CI_JOB_TOKEN cannot access files.
    # See https://gitlab.com/gitlab-org/gitlab/issues/191273
    GIT_DEPTH: 1
  environment:
    name: review-docs/$DOCS_GITLAB_REPO_SUFFIX-$CI_MERGE_REQUEST_IID
    # DOCS_REVIEW_APPS_DOMAIN and DOCS_GITLAB_REPO_SUFFIX are CI variables
    # Discussion: https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/14236/diffs#note_40140693
    url: http://docs-preview-$DOCS_GITLAB_REPO_SUFFIX-$CI_MERGE_REQUEST_IID.$DOCS_REVIEW_APPS_DOMAIN/$DOCS_GITLAB_REPO_SUFFIX
    on_stop: review-docs-cleanup
  before_script:
    - apk add --update openssl
    - gem install httparty --no-document --version 0.17.3
    - gem install gitlab --no-document --version 4.13.0

# Always trigger a docs build in gitlab-docs only on docs-only branches.
# Useful to preview the docs changes live.
review-docs-deploy:
  extends: .review-docs
  script:
    - ./scripts/trigger-build-docs deploy

# Cleanup remote environment of gitlab-docs
review-docs-cleanup:
  extends: .review-docs
  environment:
    name: review-docs/$DOCS_GITLAB_REPO_SUFFIX-$CI_MERGE_REQUEST_IID
    action: stop
  script:
    - ./scripts/trigger-build-docs cleanup

docs lint:
  extends:
    - .default-tags
    - .default-retry
  rules:
    - <<: *if-default-refs
      changes: *code-docs-patterns
      when: on_success
  image: "registry.gitlab.com/gitlab-org/gitlab-docs:docs-lint"
  stage: test
  dependencies: []
  script:
    - scripts/lint-doc.sh
    # Lint Markdown
    - markdownlint --config .markdownlint.json 'doc/**/*.md'
    # Prepare docs for build
    - mv doc/ /tmp/gitlab-docs/content/$DOCS_GITLAB_REPO_SUFFIX
    - cd /tmp/gitlab-docs
    # Build HTML from Markdown
    - bundle exec nanoc
    # Check the internal links
    - bundle exec nanoc check internal_links
    # Check the internal anchor links
    - bundle exec nanoc check internal_anchors

graphql-reference-verify:
  extends:
    - .default-tags
    - .default-retry
    - .default-cache
    - .default-before_script
    - .use-pg9
  rules:
    - <<: *if-not-ee
      when: never
    - <<: *if-default-refs
      changes: *code-backstage-qa-patterns
      when: on_success
  stage: test
  needs: ["setup-test-env"]
  script:
    - bundle exec rake gitlab:graphql:check_docs
    - bundle exec rake gitlab:graphql:check_schema