aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/pr-test.yml
blob: bc556e721f6ed7f9b1d227ffa699f87bb7f3ae4e (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
132
133
134
135
136
137
138
139
140
141
# This is more or less a copy of
# https://github.com/mdn/content/blob/main/.github/workflows/pr-test.yml
# but done in a way that it first checks out mdn/translated-content (or
# fork of) and _then_ checks out mdn/content which has the relevant
# CI related tooling.

name: PR Test

on:
  pull_request:
    branches:
      - main

jobs:
  tests:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2

      - uses: actions/checkout@v2
        with:
          repository: mdn/content
          path: mdn/content

      - name: Setup Node.js environment
        uses: actions/setup-node@v2.1.4
        with:
          node-version: "12"

      - name: Cache node_modules
        uses: actions/cache@v2.1.4
        id: cached-node_modules
        with:
          path: |
            ${{ github.workspace }}/mdn/content/node_modules
          key: ${{ runner.os }}-${{ hashFiles('**/yarn.lock') }}

      - name: Install all yarn packages
        if: steps.cached-node_modules.outputs.cache-hit != 'true'
        working-directory: ${{ github.workspace }}/mdn/content
        run: |
          yarn --frozen-lockfile

      - name: Config git core.quotePath
        run: |
          # If you don't do this, the get-diff-action won't be able to
          # notice files that contain non-ascii characters.
          # I.e.
          #
          #    ▶ git status
          #    Changes not staged for commit:
          #    ...
          #   modified:   "files/en-us/glossary/b\303\251zier_curve/index.html"
          #
          # But after you set `core.quotePath` you get:
          #
          #    ▶ git status
          #    Changes not staged for commit:
          #    ...
          #   modified:   "files/en-us/glossary/bézier_curve/index.html"
          #
          # Now, this gets used by the `git diff ...` inside get-diff-action.
          git config --global core.quotePath false

      - uses: technote-space/get-diff-action@v4.1.1
        id: git_diff_content
        with:
          PATTERNS: files/**/*.html
          SET_ENV_NAME: GIT_DIFF_CONTENT

      - name: Build changed content
        if: ${{ env.GIT_DIFF_CONTENT }}
        env:
          CONTENT_ROOT: ${{ github.workspace }}/mdn/content/files
          CONTENT_TRANSLATED_ROOT: ${{ github.workspace }}/files
        working-directory: ${{ github.workspace }}/mdn/content
        run: |
          echo ${{ env.GIT_DIFF_CONTENT }}

          # Some day, when our number of flaws have reached 0 we'll change
          # this to "*:error" which means the slightest flaw in the build
          # will break the build.
          # See https://github.com/mdn/yari/issues/715
          export BUILD_FLAW_LEVELS="unsafe_html: error, *:ignore"

          # Note, it might be interesting to explore building *some*
          # pages in a PR build if the diff doesn't have any index.html
          # files changed.
          # Instead of building the git diff, you build some known typical
          # folders that you know don't take too long and do cover a lot
          # of interesting macros etc.
          # This way, when an edit to the source code comes in, perhaps the
          # functional tests have a gap in them but actually building
          # real content exposes it.

          # Setting this to an empty string effectively means that the
          # <iframe> src will end up being the relative URL of the current
          # document as a base.
          # I.e. like this, if the current document is '/en-US/docs/Foo':
          #  <iframe src="/en-US/docs/Foo/_samples_/index.html">
          # ...for example.
          # Yes, it's potentially "insecure" because the iframe will execute
          # whatever code is inserted into the code example. But since the
          # whole (possible) domain for PR builds will never be somewhere
          # where there are interesting cookies, it's a safe choice.
          export BUILD_LIVE_SAMPLES_BASE_URL=

          # In these builds we never care for or need the ability to sign in.
          # This environment variable will disable that functionality entirely.
          export REACT_APP_DISABLE_AUTH=true

          # If we don't do this the built files will end up in
          # `node_modules/@mdn/yari/client/build/` and we don't want that
          # to get pushed into the cache.
          export BUILD_OUT_ROOT=/tmp/

          export BUILD_NO_PROGRESSBAR=true
          # The reason this script isn't in `package.json` is because
          # you don't need that script as a writer. It's only used in CI
          # and it can't use the default CONTENT_ROOT that gets set in
          # package.json.

          yarn build ${{ env.GIT_DIFF_CONTENT }}

      - uses: technote-space/get-diff-action@v4.1.1
        with:
          PATTERNS: files/**/*.+(png|jpeg|jpg|gif|svg|webp)
          ABSOLUTE: true
          SET_ENV_NAME: GIT_DIFF_FILES

      - name: Check changed files
        if: ${{ env.GIT_DIFF_FILES }}
        env:
          CONTENT_ROOT: ${{ github.workspace }}/mdn/content/files
          CONTENT_TRANSLATED_ROOT: ${{ github.workspace }}/files
        working-directory: ${{ github.workspace }}/mdn/content
        run: |
          echo ${{ env.GIT_DIFF_FILES }}

          yarn filecheck ${{ env.GIT_DIFF_FILES }}