Skip to content

feat: Add Dynamic Pages #5249

feat: Add Dynamic Pages

feat: Add Dynamic Pages #5249

Workflow file for this run

name: Pull Requests
on: [pull_request]
env:
NODE_OPTIONS: --max_old_space_size=4096
jobs:
validate-commits:
name: Validate commit messages
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: webiny/action-conventional-commits@v1.1.0
init:
name: Init
runs-on: webiny-build-packages
outputs:
jest-packages: ${{ steps.list-jest-packages.outputs.jest-packages }}
day: ${{ steps.get-day.outputs.day }}
ts: ${{ steps.get-timestamp.outputs.ts }}
is-fork-pr: ${{ steps.is-fork-pr.outputs.is-fork-pr }}
steps:
- uses: actions/setup-node@v3
with:
node-version: 16
- uses: actions/checkout@v3
- name: Get day of the month
id: get-day
run: echo "day=$(node --eval "console.log(new Date().getDate())")" >> $GITHUB_OUTPUT
- name: Get timestamp
id: get-timestamp
run: echo "ts=$(node --eval "console.log(new Date().getTime())")" >> $GITHUB_OUTPUT
- name: Is a PR from a fork
id: is-fork-pr
run: echo "is-fork-pr=${{ github.event.pull_request.head.repo.fork }}" >> $GITHUB_OUTPUT
- name: Ignored Jest packages
id: get-ignored-jest-packages
if: steps.is-fork-pr.outputs.is-fork-pr == 'true'
run: echo "ignored-jest-packages=ddb-es" >> $GITHUB_OUTPUT
- name: List packages with Jest tests
id: list-jest-packages
run: echo "jest-packages=$(node scripts/listPackagesWithTests.js --ignore-packages=${{ steps.get-ignored-jest-packages.outputs.ignored-jest-packages }})" >> $GITHUB_OUTPUT
- uses: actions/cache@v3
id: yarn-cache
with:
path: .yarn/cache
key: yarn-${{ runner.os }}-${{ hashFiles('**/yarn.lock') }}
- uses: actions/cache@v3
id: cached-packages
with:
path: .webiny/cached-packages
key: ${{ runner.os }}-${{ steps.get-day.outputs.day }}-${{ secrets.RANDOM_CACHE_KEY_SUFFIX }}
- name: Install dependencies
run: yarn --immutable
- name: Build packages
run: yarn build:quick
- uses: actions/cache@v3
id: packages-cache
with:
path: .webiny/cached-packages
key: packages-cache-${{ steps.get-timestamp.outputs.ts }}
code-analysis:
needs: init
name: Static code analysis
runs-on: ubuntu-latest
steps:
- uses: actions/setup-node@v3
with:
node-version: 16
- uses: actions/checkout@v3
- uses: actions/cache@v3
with:
path: .yarn/cache
key: yarn-${{ runner.os }}-${{ hashFiles('**/yarn.lock') }}
- uses: actions/cache@v3
with:
path: .webiny/cached-packages
key: packages-cache-${{ needs.init.outputs.ts }}
- name: Install dependencies
run: yarn --immutable
- name: Check code formatting
run: yarn prettier:check
- name: Check dependencies
run: yarn adio
- name: Check TS configs
run: yarn check-ts-configs
- name: ESLint
run: yarn eslint
code-analysis-typescript:
name: Static code analysis (TypeScript)
runs-on: webiny-build-packages
steps:
- uses: actions/setup-node@v3
with:
node-version: 16
- uses: actions/checkout@v3
- uses: actions/cache@v3
with:
path: .yarn/cache
key: yarn-${{ runner.os }}-${{ hashFiles('**/yarn.lock') }}
- name: Install dependencies
run: yarn --immutable
- name: Build packages (full)
run: yarn build
jest-tests:
needs: init
name: ${{ matrix.package.cmd }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
node: [14]
package: ${{ fromJson(needs.init.outputs.jest-packages) }}
runs-on: ${{ matrix.os }}
# PRs from repo forks won't have access to these environment variables / secrets.
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_ELASTIC_SEARCH_DOMAIN_NAME: ${{ secrets.AWS_ELASTIC_SEARCH_DOMAIN_NAME }}
ELASTIC_SEARCH_ENDPOINT: ${{ secrets.ELASTIC_SEARCH_ENDPOINT }}
ELASTIC_SEARCH_INDEX_PREFIX: ${{ matrix.package.id }}
steps:
- uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node }}
- uses: actions/checkout@v3
- uses: actions/cache@v3
with:
path: .yarn/cache
key: yarn-${{ runner.os }}-${{ hashFiles('**/yarn.lock') }}
- uses: actions/cache@v3
with:
path: .webiny/cached-packages
key: packages-cache-${{ needs.init.outputs.ts }}
- name: Install dependencies
run: yarn --immutable
- name: Build packages
run: yarn build:quick
- name: Run tests
run: yarn test ${{ matrix.package.cmd }}
verdaccio-publish:
if: needs.init.outputs.is-fork-pr != 'true' # Do not run this job if a PR has been submitted from a fork.
needs: init
name: Publish to Verdaccio
runs-on: ubuntu-latest
steps:
- uses: actions/setup-node@v3
with:
node-version: 16
- uses: actions/checkout@v3
with:
# We want to make sure all commits are present and that the next release version is calculated correctly.
fetch-depth: 0
# Fixes Lerna's detached HEAD issue (https://github.com/lerna/lerna/issues/2443).
ref: ${{ github.event.pull_request.head.ref }}
- uses: actions/cache@v3
with:
path: .yarn/cache
key: yarn-${{ runner.os }}-${{ hashFiles('**/yarn.lock') }}
- uses: actions/cache@v3
with:
path: .webiny/cached-packages
key: packages-cache-${{ needs.init.outputs.ts }}
- name: Install dependencies
run: yarn --immutable
- name: Build packages
run: yarn build:quick
- name: Start Verdaccio local server
run: npx pm2 start verdaccio -- -c .verdaccio.yaml
- name: Create ".npmrc" file in the project root, with a dummy auth token
run: echo '//localhost:4873/:_authToken="dummy-auth-token"' > .npmrc
- name: Configure NPM to use local registry
run: npm config set registry http://localhost:4873
- name: Set git email
run: git config --global user.email "webiny-bot@webiny.com"
- name: Set git username
run: git config --global user.name "webiny-bot"
- name: Version and publish to Verdaccio
run: yarn release --type=verdaccio
- name: Upload verdaccio files
uses: actions/upload-artifact@v3
with:
name: verdaccio-files
retention-days: 1
path: |
.verdaccio/
.verdaccio.yaml
test-create-webiny-project:
needs: verdaccio-publish
name: Test "create-webiny-project"
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
node: [14]
runs-on: ${{ matrix.os }}
env:
YARN_ENABLE_IMMUTABLE_INSTALLS: false
steps:
- uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node }}
- uses: actions/download-artifact@v3
with:
name: verdaccio-files
path: verdaccio-files
- name: Start Verdaccio local server
working-directory: verdaccio-files
run: yarn add pm2 verdaccio && npx pm2 start verdaccio -- -c .verdaccio.yaml
- name: Configure NPM to use local registry
run: npm config set registry http://localhost:4873
- name: Set git email (needed for create-webiny-project)
run: git config --global user.email "webiny-bot@webiny.com"
- name: Set git username (needed for create-webiny-project)
run: git config --global user.name "webiny-bot"
- name: Disable Webiny telemetry
run: >
mkdir ~/.webiny &&
echo '{ "id": "ci", "telemetry": false }' > ~/.webiny/config
- name: Create a new Webiny project
run: >
npx create-webiny-project@local-npm test-project
--tag local-npm --no-interactive
--assign-to-yarnrc '{"npmRegistryServer":"http://localhost:4873","unsafeHttpWhitelist":["localhost"]}'
--template-options '{"region":"eu-central-1"}'
- name: Build "api" app
working-directory: test-project
run: yarn webiny ws run build --folder api --env dev