# 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 # Needed otherswise it will check out a merge commit which means # you can't get a `git diff` for this PR compared to its base. # with: # ref: ${{ github.event.pull_request.head.sha }} - 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.6 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.2 id: git_diff_content with: PATTERNS: files/**/*.+(html|md) 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 # This is so that if there's a single 'unsafe_html' flaw, it # completely fails the build. # But all other flaws should be 'warn' so that we can include # information about the flaws when we analyze the built PR. BUILD_FLAW_LEVELS: "unsafe_html: error, *:warn" # Because we build these pages in a way that you get a toolbar, # so the flaws can be displayed, but we don't want any of the # other toolbar features like "Fix fixable flaws" or "Quick-edit" # we set this to disable that stuff. REACT_APP_CRUD_MODE_READONLY: true # 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. 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. REACT_APP_DISABLE_AUTH: true # TODO: This should be implicit when `CI=true` BUILD_NO_PROGRESSBAR: 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. BUILD_OUT_ROOT: /tmp/build working-directory: ${{ github.workspace }}/mdn/content run: | mkdir -p $BUILD_OUT_ROOT # Don't use `yarn build` (from mdn/content) because that one hardcodes # the BUILD_OUT_ROOT and CONTENT_ROOT env vars. node node_modules/@mdn/yari/build/cli.js ${{ env.GIT_DIFF_CONTENT }} echo "Disk usage size of build/" du -sh $BUILD_OUT_ROOT # Save the PR number into the build echo ${{ github.event.number }} > $BUILD_OUT_ROOT/NR - name: Generate the diff file if: ${{ env.GIT_DIFF_CONTENT }} env: # This must match what we set in the "Build changed content" step above BUILD_OUT_ROOT: /tmp/build run: | # Save the raw diff blob and store that inside the ./build/ # directory. # The purpose of this is for the PR Review Companion to later # be able to use this raw diff file for the benefit of analyzing. git diff --diff-filter=ACMRT ${{ github.event.pull_request.base.sha }} ${{ github.sha }} > $BUILD_OUT_ROOT/DIFF - name: Merge static assets with built documents if: ${{ env.GIT_DIFF_CONTENT }} env: # This must match what we set in the "Build changed content" step above BUILD_OUT_ROOT: /tmp/build run: | rsync -a ${{ github.workspace }}/mdn/content/node_modules/@mdn/yari/client/build/ $BUILD_OUT_ROOT/ # Now that build/ directory contains everything you need to deploy # that as a site. HTML, static assets, images, etc. # However, that Yari static files is very heavy and it's in large # part due to the .map files. # In fact, as of March 2021, the client/build/static directory # is 2.3MB but only 864KB without all the .map files. # Let's delete those this time because this isn't the right time # to debug JS or CSS. find $BUILD_OUT_ROOT/static -type f -name "*.map" | xargs rm - uses: actions/upload-artifact@v2 if: ${{ env.GIT_DIFF_CONTENT }} env: # This must match what we set in the "Build changed content" step above BUILD_OUT_ROOT: /tmp/build with: name: build path: ${{ env.BUILD_OUT_ROOT }} - uses: technote-space/get-diff-action@v4.2 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 }}