Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions .github/filters.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Основная документация: https://github.com/dorny/paths-filter (см. всё к полю `filters`)

# Пути прописываются в виде picomatch-паттернов:
# https://github.com/micromatch/picomatch#basic-globbing

# Можно использовать все фишки YAML-я:
# https://ru.wikipedia.org/wiki/YAML#%D0%A1%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%81

# Имена последних объектов (packages, lintable) лучше не менять

configs: &configs # изменения тут обязательно запускают все пайплайны
- ".github/workflows/*"
- ".github/package-filters.yml"
- "package.json"
- ".npmrc"

lintable: # запускает прогон линтера
- *configs
- "**/eslint.config.js"
- "prettier.config.js"
- "**.[jt]s"
- "**.[jt]sx"
- "**.md"

packages: # запускает деплой @xipkg/calls-* в main-ветке (только обновлённых)
- *configs
- "packages/calls/**"
- "packages/calls.*/**"
- "tsup.calls.base.ts"
25 changes: 25 additions & 0 deletions .github/package-filters.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Per-package path filters for selective npm publish (dorny/paths-filter).
# Update this file when adding a new packages/calls.* package.

calls.types:
- packages/calls.types/**
calls.config:
- packages/calls.config/**
calls.utils:
- packages/calls.utils/**
calls.store:
- packages/calls.store/**
calls.providers:
- packages/calls.providers/**
calls.hooks:
- packages/calls.hooks/**
calls.ui:
- packages/calls.ui/**
calls.risehand:
- packages/calls.risehand/**
calls.chat:
- packages/calls.chat/**
calls.compactview:
- packages/calls.compactview/**
calls:
- packages/calls/**
55 changes: 55 additions & 0 deletions .github/workflows/common-prepare.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
name: Common Preparation Steps

on:
workflow_call:
outputs:
packages:
description: Will be 'true' if any package files have changed
value: ${{ jobs.analyze_files.outputs.packages }}

jobs:
analyze_files:
runs-on: ubuntu-latest

outputs:
lintable: ${{ steps.path_filter.outputs.lintable }}
packages: ${{ steps.path_filter.outputs.packages }}

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Filter paths
uses: dorny/paths-filter@v4
id: path_filter
with:
filters: .github/filters.yml

lint_and_format:
needs: analyze_files
if: needs.analyze_files.outputs.lintable == 'true'
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: 8.15.4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22.22.1
cache: pnpm

- name: Install dependencies
run: pnpm install --frozen-lockfile --ignore-scripts

- name: Check format
run: pnpm run format-check

- name: Lint
run: pnpm run lint
20 changes: 20 additions & 0 deletions .github/workflows/front-development.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
name: Development

on:
push:
branches-ignore:
- main
workflow_dispatch:

jobs:
prepare:
uses: ./.github/workflows/common-prepare.yml

# build-frodo:
# needs: prepare
# if: needs.prepare.outputs.xi-frodo == 'true'
# uses: xi-effect/xi.actions/.github/workflows/docker-build-nocache.yml@main
# with:
# tag: frodo-${{ github.run_id }}
# arguments: "APP_NAME=xi.frodo"
# secrets: inherit
130 changes: 130 additions & 0 deletions .github/workflows/front-production.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
name: Production

on:
push:
branches:
- main
workflow_dispatch:

permissions:
contents: read
id-token: write

jobs:
prepare:
uses: ./.github/workflows/common-prepare.yml

analyze-packages:
needs: prepare
if: needs.prepare.outputs.packages == 'true'
runs-on: ubuntu-latest

outputs:
packages: ${{ steps.package_filter.outputs.changes }}

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Filter packages
uses: dorny/paths-filter@v4
id: package_filter
with:
filters: .github/package-filters.yml

deploy-packages:
needs: analyze-packages
if: needs.analyze-packages.outputs.packages != '[]'
runs-on: ubuntu-latest

permissions:
contents: read
id-token: write

environment: >-
${{ case(
contains(fromJSON('["niqzart", "unknownproperty"]'), github.triggering_actor)
&& github.ref == format('refs/heads/{0}', github.event.repository.default_branch),
'xi-production',
'xi-production-manual'
) }}

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: 8.15.4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22.22.1
registry-url: https://registry.npmjs.org
cache: pnpm

- name: Install dependencies
run: pnpm install --frozen-lockfile --ignore-scripts

- name: Upgrade npm (required for trusted publishing)
run: npm install -g npm@latest

- name: Build calls packages
run: pnpm exec turbo run build --filter='./packages/calls...'

- name: Publish calls.types
if: contains(fromJSON(needs.analyze-packages.outputs.packages), 'calls.types')
working-directory: packages/calls.types
run: npm publish --access public --provenance

- name: Publish calls.config
if: contains(fromJSON(needs.analyze-packages.outputs.packages), 'calls.config')
working-directory: packages/calls.config
run: npm publish --access public --provenance

- name: Publish calls.utils
if: contains(fromJSON(needs.analyze-packages.outputs.packages), 'calls.utils')
working-directory: packages/calls.utils
run: npm publish --access public --provenance

- name: Publish calls.store
if: contains(fromJSON(needs.analyze-packages.outputs.packages), 'calls.store')
working-directory: packages/calls.store
run: npm publish --access public --provenance

- name: Publish calls.providers
if: contains(fromJSON(needs.analyze-packages.outputs.packages), 'calls.providers')
working-directory: packages/calls.providers
run: npm publish --access public --provenance

- name: Publish calls.hooks
if: contains(fromJSON(needs.analyze-packages.outputs.packages), 'calls.hooks')
working-directory: packages/calls.hooks
run: npm publish --access public --provenance

- name: Publish calls.ui
if: contains(fromJSON(needs.analyze-packages.outputs.packages), 'calls.ui')
working-directory: packages/calls.ui
run: npm publish --access public --provenance

- name: Publish calls.risehand
if: contains(fromJSON(needs.analyze-packages.outputs.packages), 'calls.risehand')
working-directory: packages/calls.risehand
run: npm publish --access public --provenance

- name: Publish calls.chat
if: contains(fromJSON(needs.analyze-packages.outputs.packages), 'calls.chat')
working-directory: packages/calls.chat
run: npm publish --access public --provenance

- name: Publish calls.compactview
if: contains(fromJSON(needs.analyze-packages.outputs.packages), 'calls.compactview')
working-directory: packages/calls.compactview
run: npm publish --access public --provenance

- name: Publish calls
if: contains(fromJSON(needs.analyze-packages.outputs.packages), 'calls')
working-directory: packages/calls
run: npm publish --access public --provenance
4 changes: 3 additions & 1 deletion docs/migrations/calls-build.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ pnpm --filter @xipkg/calls-hooks dev

## npm publish

Перед публикацией CI (или локально) запускает `pnpm run build`. В npm уходит только `dist/` (+ CSS для ui).
CI при merge в `main` сам запускает build и публикует изменённые пакеты. В npm уходит только `dist/` (+ CSS для ui).

`publishConfig.access: public` уже прописан во всех calls-пакетах.

Expand All @@ -73,6 +73,8 @@ Trusted publishing: workflow `front-production.yml`, environment `xi-production`

Перед publish нужно **поднять version** в `package.json` — npm вернёт `409`, если версия уже есть.

При добавлении нового `packages/calls.*` обновите `.github/package-filters.yml` и шаг publish в `front-production.yml`.

## Замечания

- Зависимости (`@xipkg/*`, `livekit-client`, `react` и т.д.) **не бандлятся** — `esbuildOptions.packages = 'external'`
Expand Down
File renamed without changes.
File renamed without changes.
Loading