Skip to content

Automated Specs Update #12729

Automated Specs Update

Automated Specs Update #12729

Workflow file for this run

name: Main workflow
# The event triggers are configured as following:
# - on branch main, trigger the workflow on every push to trigger production checks and deployment
# - on any pull request, trigger the workflow
# This is to avoid running the workflow twice on pull requests.
on:
push:
branches:
- main
merge_group:
branches: [main]
pull_request:
repository_dispatch:
types: [manual-build-and-deploy]
jobs:
build_deploy_test:
runs-on: ubuntu-latest
# https://github.com/bahmutov/cypress-gh-action-split-install/blob/ca3916d4e7240ebdc337825d2d78eb354855464b/.github/workflows/tests.yml#L8-L11
env:
# prevents extra Cypress installation progress messages (github action default is true)
CI: 1
# avoid warnings like "tput: No value for $TERM and no -T specified"
TERM: xterm
# default to being a preview deployment
DEPLOY_ENV: Preview
steps:
- name: Add comment with link to ongoing build
uses: marocchino/sticky-pull-request-comment@v2
with:
header: -build-status
append: true
message: |
---
**[🏭 A new build process was started - watch live 📺](https://github.com/commercetools/commercetools-docs-kit/actions/runs/${{ github.run_id }})**
- name: Detect Production Deploy
if: github.event_name == 'push' && github.ref_name == 'main'
run: |
echo "DEPLOY_ENV=Production" >> $GITHUB_ENV
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node (uses version in .nvmrc)
uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
# cached dependencies
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT
- uses: actions/cache@v4
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-v3-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-v3-
# cached build (separately to increase cache efficiency)
- uses: actions/cache@v4
id: build-cache
with:
path: |
.cache
public
key: ${{ runner.os }}-gatsby-monolithic-v2-${{ hashFiles('**/yarn.lock') }}
- name: Install dependencies
run: yarn install --immutable
env:
# https://github.com/bahmutov/cypress-gh-action-split-install/blob/ca3916d4e7240ebdc337825d2d78eb354855464b/.github/workflows/tests.yml#L14-L18
# https://github.com/marketplace/actions/cypress-io#custom-install
CYPRESS_INSTALL_BINARY: 0
- name: Running static type checking
run: yarn typecheck
- name: Building Websites
run: yarn build
env:
ENABLE_SEARCH: 'true'
NODE_OPTIONS: '--max-old-space-size=6144'
GATSBY_EXPERIMENTAL_QUERY_CONCURRENCY: 8 # default is 4, going too high on the 2-core github actions machines will fire back
GATSBY_CPU_COUNT: logical_cores # use hyperthreading if available to statistically better saturate the cores
- name: GitHub Slug Action
uses: rlespinasse/github-slug-action@v4
with:
slug-maxlength: 52
- name: Deploy preview to commercetools-docs-kit vercel via CLI
if: ${{ env.DEPLOY_ENV == 'Preview' }}
id: deploy-to-vercel
env:
GITHUB_COMMITMESSAGE: ${{ toJSON(github.event.head_commit.message) }} # toJSON is de facto escaping and quoting the string
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID}}
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID}}
run: |
vercel deploy --yes --token ${{ secrets.VERCEL_TOKEN }} --scope commercetools -m githubCommitSha=${{ github.sha }} -m githubCommitAuthorName=${{ github.actor }} -m githubCommitAuthorLogin=${{ github.actor }} -m githubDeployment=1 -m githubOrg=commercetools -m githubRepo=commercetools-docs-kit -m githubCommitOrg=commercetools -m githubCommitRepo=commercetools-docs-kit -m githubCommitRef=main -m githubCommitMessage="$GITHUB_COMMITMESSAGE" > deployment-url.txt
vercel alias set $(cat deployment-url.txt) docskit-sha-${{ github.sha }}.commercetools.vercel.app --token ${{ secrets.VERCEL_TOKEN }} --scope commercetools
vercel alias set $(cat deployment-url.txt) docskit-${{ env.GITHUB_REF_NAME_SLUG_URL }}.commercetools.vercel.app --token ${{ secrets.VERCEL_TOKEN }} --scope commercetools
- name: Post new build information
if: ${{ env.DEPLOY_ENV == 'Preview' }}
uses: marocchino/sticky-pull-request-comment@v2
with:
header: -build-status
message: |
**[🚚 Build Process Details](https://github.com/commercetools/commercetools-docs-kit/actions/runs/${{ github.run_id }})**
Preview URLs:
* https://docskit-${{ env.GITHUB_REF_NAME_SLUG_URL }}.commercetools.vercel.app _(permalink to the last build of this **branch**)_
* https://docskit-sha-${{ github.sha }}.commercetools.vercel.app _(this **commit**)_
- name: Running linters and tests
run: |
yarn jest --projects jest.{eslint,test}.config.js \
--maxWorkers=3 \
--reporters jest-silent-reporter
yarn percy config:validate
- name: Run Writing Style check over Websites
run: yarn lint:text
- name: Deploy production to commercetools-docs-kit vercel via CLI
if: ${{ env.DEPLOY_ENV == 'Production' }}
id: deploy-to-vercel-production
env:
GITHUB_COMMITMESSAGE: ${{ toJSON(github.event.head_commit.message) }} # toJSON is de facto escaping and quoting the string
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID}}
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID}}
run: |
vercel deploy --prod --yes --token ${{ secrets.VERCEL_TOKEN }} --scope commercetools -m githubCommitSha=${{ github.sha }} -m githubCommitAuthorName=${{ github.actor }} -m githubCommitAuthorLogin=${{ github.actor }} -m githubDeployment=1 -m githubOrg=commercetools -m githubRepo=commercetools-docs-kit -m githubCommitOrg=commercetools -m githubCommitRepo=commercetools-docs-kit -m githubCommitRef=main -m githubCommitMessage="$GITHUB_COMMITMESSAGE" > deployment-url.txt
vercel alias set $(cat deployment-url.txt) docskit-sha-${{ github.sha }}.commercetools.vercel.app --token ${{ secrets.VERCEL_TOKEN }} --scope commercetools
- name: Running Visual Regression Tests
run: yarn percy snapshot ./public
env:
PERCY_TOKEN: ${{ secrets.PERCY_TOKEN_SMOKE_TESTS }}
# https://github.com/bahmutov/cypress-gh-action-split-install/blob/ca3916d4e7240ebdc337825d2d78eb354855464b/.github/workflows/tests.yml#L23-L30
# https://github.com/marketplace/actions/cypress-io#custom-install
- name: Restoring Cypress cache
# restore / cache the binary ourselves on Linux
# see https://github.com/actions/cache
id: cache-cypress
uses: actions/cache@v4
with:
path: ~/.cache/Cypress
key: ${{ runner.os }}-cypress-${{ hashFiles('**/package.json') }}
- name: Installing Cypress binary
run: yarn cypress install && yarn cypress cache list
- name: Running End-to-End tests
run: yarn percy exec -- yarn test:e2e:docs-smoke-test --config baseUrl="https://docskit-sha-${{ github.sha }}.commercetools.vercel.app"
env:
NODE_ENV: test
PERCY_TOKEN: ${{ secrets.PERCY_TOKEN_SMOKE_TESTS_E2E }}
CYPRESS_CI: 'true'
- name: Running API End-to-End tests
run: yarn percy exec -- yarn test:e2e:api-docs-smoke-test --config baseUrl="https://docskit-sha-${{ github.sha }}.commercetools.vercel.app"
env:
NODE_ENV: test
PERCY_TOKEN: ${{ secrets.PERCY_TOKEN_API_SMOKE_TESTS_E2E }}
CYPRESS_CI: 'true'
- name: Check local links including anchors
if: ${{ env.DEPLOY_ENV == 'Preview' }}
working-directory: public
run: npx --quiet start-server-and-test 'npx --quiet http-server --silent -p 9000' http://127.0.0.1:9000 'docker run --platform linux/amd64 --network=host -v "$(pwd)/../:/repo/" tennox/linkcheck --skip-file /repo/linkcheck-local-skip-list :9000'
self_learning_test:
name: 'Self-learning e2e tests'
needs: build_deploy_test
runs-on: ubuntu-latest
concurrency: self-learning-concurrency-group
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node (uses version in .nvmrc)
uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
# cached dependencies
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT
- uses: actions/cache@v4
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-v3-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-v3-
- name: Install dependencies
run: yarn install --immutable
env:
# https://github.com/bahmutov/cypress-gh-action-split-install/blob/ca3916d4e7240ebdc337825d2d78eb354855464b/.github/workflows/tests.yml#L14-L18
# https://github.com/marketplace/actions/cypress-io#custom-install
CYPRESS_INSTALL_BINARY: 0
# https://github.com/bahmutov/cypress-gh-action-split-install/blob/ca3916d4e7240ebdc337825d2d78eb354855464b/.github/workflows/tests.yml#L23-L30
# https://github.com/marketplace/actions/cypress-io#custom-install
- name: Restoring Cypress cache
# restore / cache the binary ourselves on Linux
# see https://github.com/actions/cache
id: cache-cypress
uses: actions/cache@v4
with:
path: ~/.cache/Cypress
key: ${{ runner.os }}-cypress-${{ hashFiles('**/package.json') }}
- name: Installing Cypress binary
run: yarn cypress install && yarn cypress cache list
- name: Running Self Learning End-to-End tests
run: yarn percy exec -- yarn test:e2e:self-learning-smoke-test --config baseUrl="https://docskit-sha-${{ github.sha }}.commercetools.vercel.app"
env:
NODE_ENV: test
PERCY_TOKEN: ${{ secrets.PERCY_TOKEN_SMOKE_TESTS_SELF_LEARNING_E2E }}
CYPRESS_CI: 'true'
- name: Upload e2e artifacts
uses: actions/upload-artifact@v3-node20
if: ${{ failure() }}
with:
name: self-learning-e2e-failure-snapshots-${{ github.run_attempt }}
path: cypress/screenshots/
link-check:
name: 'Check links'
needs: build_deploy_test
if: github.event_name != 'push' && github.ref_name != 'main'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Check links
uses: JustinBeckwith/linkinator-action@v1.10.4
with:
paths: https://docskit-sha-${{ github.sha }}.commercetools.vercel.app
config: linkinator.remote.config.json
markdown: false
# the docs production domain has to be rewritten to the preview URL to allow new pages to be created without the link checker
# erroring on the canonical URL of the new page. Known compromise to not find links that point to the absolute production URL
# but the docs kit is automatically making those a relative URL in authored content so the impact is low.
urlRewriteReplace: https://docskit-sha-${{ github.sha }}.commercetools.vercel.app
urlRewriteSearch: https://docs.commercetools.com