mirror of
https://github.com/webstudio-is/webstudio.git
synced 2026-10-27 07:13:11 +09:00
## Description 1. What is this PR about (link the issue and add a short description) ## Steps for reproduction 1. click button 2. expect xyz ## Code Review - [ ] hi @kof, I need you to do - conceptual review (architecture, feature-correctness) - detailed review (read every line) - test it on preview ## Before requesting a review - [ ] made a self-review - [ ] added inline comments where things may be not obvious (the "why", not "what") ## Before merging - [ ] tested locally and on preview environment (preview dev login: 0000) - [ ] updated [test cases](https://github.com/webstudio-is/webstudio/blob/main/apps/builder/docs/test-cases.md) document - [ ] added tests - [ ] if any new env variables are added, added them to `.env` file
160 lines
4.5 KiB
YAML
160 lines
4.5 KiB
YAML
name: Main workflow
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
pull_request:
|
|
pull_request_target:
|
|
types: [labeled]
|
|
|
|
# cancel in-progress runs on new commits to same PR (gitub.event.number)
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.event.number || github.sha }}
|
|
cancel-in-progress: true
|
|
|
|
permissions:
|
|
contents: read # to fetch code (actions/checkout)
|
|
|
|
jobs:
|
|
checks:
|
|
# Run on push, regular PR (for repo branches), or labeled PR with safe-to-deploy (for forks)
|
|
if: |
|
|
github.event_name == 'push' ||
|
|
github.event_name == 'pull_request' ||
|
|
(github.event_name == 'pull_request_target' && github.event.label.name == 'safe-to-deploy')
|
|
|
|
timeout-minutes: 20
|
|
|
|
strategy:
|
|
matrix:
|
|
environment:
|
|
- empty
|
|
- development
|
|
|
|
environment:
|
|
name: ${{ matrix.environment }}
|
|
|
|
env:
|
|
DATABASE_URL: postgres://
|
|
AUTH_SECRET: test
|
|
|
|
runs-on: ubuntu-24.04-arm
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
|
|
|
# Will not checkout submodules on empty environment, and will on development
|
|
- uses: ./.github/actions/submodules-checkout
|
|
with:
|
|
submodules-ssh-key: ${{ secrets.PRIVATE_GITHUB_DEPLOY_TOKEN }}
|
|
|
|
- uses: pnpm/action-setup@v4
|
|
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: 22
|
|
cache: pnpm
|
|
|
|
- name: Pnpm install
|
|
run: |
|
|
pnpm install
|
|
|
|
- uses: actions/cache@v4
|
|
with:
|
|
path: |
|
|
./node_modules/.cache/prettier/.prettier-cache
|
|
./node_modules/.cache/eslint/.eslint-cache
|
|
key: checks-${{ github.sha }}
|
|
restore-keys: checks-
|
|
|
|
- run: echo ===SHA USED=== ${{ github.event.pull_request.head.sha || github.sha }} # todo: remove after check whats happening on main
|
|
|
|
- run: |
|
|
pnpm prettier --cache --check "**/*.{js,md,ts,tsx}"
|
|
|
|
- name: Lint
|
|
run: |
|
|
pnpm lint --cache --cache-strategy=content --cache-location=node_modules/.cache/eslint/.eslint-cache
|
|
|
|
- name: Cache Playwright browsers
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: ~/.cache/ms-playwright
|
|
key: playwright-${{ runner.os }}-${{ hashFiles('**/package-lock.json') }}
|
|
restore-keys: |
|
|
playwright-${{ runner.os }}-
|
|
|
|
- name: Playwright init
|
|
run: |
|
|
pnpm playwright install
|
|
working-directory: packages/sdk-components-animation
|
|
|
|
- name: Test
|
|
run: |
|
|
pnpm -r test
|
|
|
|
- name: Typecheck
|
|
run: |
|
|
pnpm -r typecheck
|
|
|
|
check-size:
|
|
runs-on: ubuntu-24.04-arm
|
|
|
|
environment:
|
|
name: development
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
|
|
|
- uses: ./.github/actions/submodules-checkout
|
|
with:
|
|
submodules-ssh-key: ${{ secrets.PRIVATE_GITHUB_DEPLOY_TOKEN }}
|
|
|
|
- uses: ./.github/actions/ci-setup
|
|
|
|
- run: pnpm --filter "{./fixtures/*}..." build
|
|
|
|
- uses: actions/github-script@v7
|
|
with:
|
|
script: |
|
|
const assertSize = async (directory, maxSize) => {
|
|
let result = ''
|
|
await exec.exec('du', ['-sk', directory], {
|
|
silent: true,
|
|
listeners: {
|
|
stdout: (data) => {
|
|
result += data.toString()
|
|
}
|
|
}
|
|
})
|
|
const size = Number.parseInt(result, 10)
|
|
return {
|
|
passed: size <= maxSize,
|
|
size,
|
|
diff: size - maxSize,
|
|
directory,
|
|
}
|
|
}
|
|
const results = [
|
|
await assertSize('./fixtures/ssg/dist/client', 356),
|
|
await assertSize('./fixtures/react-router-netlify/build/client', 376),
|
|
await assertSize('./fixtures/webstudio-features/build/client', 3312),
|
|
]
|
|
for (const result of results) {
|
|
if (result.passed) {
|
|
console.info(`${result.directory}: ${result.size}kB (${result.diff}kB)`)
|
|
} else {
|
|
console.info('')
|
|
console.error(`${result.directory}: ${result.size}kB (+${result.diff}kB)`)
|
|
}
|
|
}
|
|
if (results.some(result => result.passed === false)) {
|
|
console.error('Some fixtures exceeded limits')
|
|
process.exit(1)
|
|
}
|