8aeee3ee56
Build bootstrap container / build (push) Failing after 2m56s
build-contracts.yaml — только workflow_dispatch (ручная пересборка `dicoop/contracts:<branch>` для отладки на dev-ноде). Тэги обрабатывает release.yaml атомарно (контракты + контейнеры + webhook), отдельная сборка по push'у в ветку только давала вторую параллельную сборку. publish-docs.yaml и build-contracts-docs.yaml — на push:tags v* с gate-job'ом, пропускающим только продакшн-тэги (без -alpha/-beta/-rc/ -test) на main. Раньше docs пересобирались на каждый push в main/testnet/dev/reports/marketplace2 — впустую. Co-authored-by: coopops <coopos@coopenomics.world> Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
161 lines
6.2 KiB
YAML
161 lines
6.2 KiB
YAML
name: Publish Docs
|
||
|
||
# Публикация только по продакшн-тэгам, лежащим на main (без -alpha/-beta/-rc/-test).
|
||
# Раньше триггерилось на каждый push в main/testnet/dev/reports/marketplace2 →
|
||
# docs пересобирались по 5+ раз в день впустую. Теперь — только релиз.
|
||
on:
|
||
push:
|
||
tags: ['v*']
|
||
|
||
jobs:
|
||
gate:
|
||
runs-on: ubuntu-latest
|
||
outputs:
|
||
should_publish: ${{ steps.check.outputs.should_publish }}
|
||
steps:
|
||
- name: Checkout (для git branch --contains)
|
||
uses: actions/checkout@v4
|
||
with:
|
||
fetch-depth: 0
|
||
- name: Gate — main + non-alpha
|
||
id: check
|
||
run: |
|
||
TAG="${{ github.ref_name }}"
|
||
if [[ "$TAG" =~ -(alpha|beta|rc|test) ]]; then
|
||
echo "Тэг $TAG — pre-release, docs не публикуем"
|
||
echo "should_publish=false" >> "$GITHUB_OUTPUT"
|
||
exit 0
|
||
fi
|
||
if ! git branch -r --contains "${{ github.sha }}" | grep -qE "^[[:space:]]*origin/main$"; then
|
||
echo "Тэг $TAG не на main — docs не публикуем"
|
||
echo "should_publish=false" >> "$GITHUB_OUTPUT"
|
||
exit 0
|
||
fi
|
||
echo "Тэг $TAG — продакшн релиз на main, публикуем docs"
|
||
echo "should_publish=true" >> "$GITHUB_OUTPUT"
|
||
|
||
build-and-publish-docs:
|
||
needs: gate
|
||
if: needs.gate.outputs.should_publish == 'true'
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- name: Checkout repository
|
||
uses: actions/checkout@v3
|
||
|
||
# Версия pnpm берётся из `packageManager` корневого package.json,
|
||
# синхронно с publish-packages.yaml и Dockerfile'ами.
|
||
- name: Set up pnpm
|
||
uses: pnpm/action-setup@v4
|
||
|
||
- name: Set up Node.js
|
||
uses: actions/setup-node@v4
|
||
with:
|
||
node-version: 22
|
||
cache: pnpm
|
||
|
||
- name: Set up Python
|
||
uses: actions/setup-python@v4
|
||
with:
|
||
python-version: '3.10'
|
||
|
||
- name: Install Python requirements
|
||
run: |
|
||
python -m venv venv
|
||
source venv/bin/activate
|
||
pip install mkdocs-material mkdocs-macros-plugin mkdocs-section-index pymdown-extensions
|
||
working-directory: ./components/docs
|
||
|
||
- name: Install Node.js dependencies
|
||
run: pnpm install
|
||
working-directory: ./components/docs
|
||
|
||
- name: Patch spectaql-config.yml for CI
|
||
run: |
|
||
sed -i.bak "0,/url:.*/s|url:.*|url: 'https://testnet.coopenomics.world/backend/v1/graphql'|" spectaql-config.yml
|
||
working-directory: ./components/controller
|
||
|
||
- name: Show patched spectaql-config.yml
|
||
run: cat spectaql-config.yml
|
||
working-directory: ./components/controller
|
||
|
||
- name: Build cooptypes
|
||
run: pnpm run build
|
||
working-directory: ./components/cooptypes
|
||
|
||
- name: Generate controller docs
|
||
run: pnpm run docs
|
||
working-directory: ./components/controller
|
||
|
||
- name: Copy controller docs
|
||
run: |
|
||
mkdir -p ./components/docs/docs/graphql
|
||
cp -r ./components/controller/docs/* ./components/docs/docs/graphql/
|
||
|
||
- name: Generate sdk docs
|
||
run: pnpm run docs
|
||
working-directory: ./components/sdk
|
||
|
||
- name: Copy sdk docs
|
||
run: |
|
||
mkdir -p ./components/docs/docs/sdk
|
||
cp -r ./components/sdk/docs/* ./components/docs/docs/sdk/
|
||
|
||
- name: Generate cooptypes docs
|
||
run: pnpm run docs
|
||
working-directory: ./components/cooptypes
|
||
|
||
- name: Copy cooptypes docs
|
||
run: |
|
||
mkdir -p ./components/docs/docs/cooptypes
|
||
cp -r ./components/cooptypes/docs/* ./components/docs/docs/cooptypes/
|
||
|
||
# ── standards-site → /standards/ на docs.цифровой-кооператив.рф ──
|
||
# Отдельный Vue-сайт с BPMN-графом кооперативных стандартов,
|
||
# публикуется как поддиректория на том же домене. Vite собирает
|
||
# с base='/standards/' (см. vite.config.ts), относительные пути
|
||
# внутри dist/ и hash-router работают корректно.
|
||
# dist кладём в docs/standards/ ДО mkdocs build — так же, как
|
||
# graphql/sdk/cooptypes; mkdocs сам включит его в итоговый site/.
|
||
- name: Build standards-site
|
||
run: pnpm run build
|
||
working-directory: ./components/contracts/standards-site
|
||
|
||
- name: Copy standards-site into docs/standards
|
||
run: |
|
||
mkdir -p ./components/docs/docs/standards
|
||
cp -r ./components/contracts/standards-site/dist/* ./components/docs/docs/standards/
|
||
|
||
- name: Build docs (mkdocs)
|
||
run: |
|
||
source venv/bin/activate
|
||
mkdocs build
|
||
working-directory: ./components/docs
|
||
|
||
- name: Remove specific large file before publishing
|
||
run: |
|
||
# Удаляем конкретный большой файл sdk/typedoc.json
|
||
rm -f ./components/docs/site/sdk/typedoc.json
|
||
# Проверяем, что файл удален
|
||
if [ -f "./components/docs/site/sdk/typedoc.json" ]; then
|
||
echo "ERROR: typedoc.json still exists!"
|
||
exit 1
|
||
else
|
||
echo "SUCCESS: typedoc.json removed successfully"
|
||
fi
|
||
|
||
- name: Publish to GitHub Pages
|
||
run: npx gh-pages --nojekyll -d site --repo https://x-access-token:${GITHUB_TOKEN}@github.com/coopenomics/mono.git
|
||
working-directory: ./components/docs
|
||
env:
|
||
GIT_AUTHOR_NAME: github-actions
|
||
GIT_AUTHOR_EMAIL: github-actions@github.com
|
||
GIT_COMMITTER_NAME: github-actions
|
||
GIT_COMMITTER_EMAIL: github-actions@github.com
|
||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||
|
||
- name: Trigger docs deployment webhook
|
||
if: ${{ success() }}
|
||
run: |
|
||
curl -X POST "${{ vars.DOCS_DEPLOY_WEBHOOK_URL }}" \
|
||
-H 'Content-Type: application/json' \
|
||
-d '{"ref":"${{ github.ref }}","sha":"${{ github.sha }}","branch":"${{ github.ref_name }}"}' |