From 15d7cfa8d9318d5dec8cf353bf91d119d8432c4b Mon Sep 17 00:00:00 2001 From: github-ops Date: Tue, 26 May 2026 21:49:09 +0000 Subject: [PATCH] ci: migrate community workflows to gitea --- {.github => .gitea}/workflows/ci.yml | 55 +++------ {.github => .gitea}/workflows/deploy.yml | 115 +++++++----------- .gitea/workflows/release.yml | 88 ++++++++++++++ .github/workflows/release.yml | 144 ----------------------- README.md | 8 +- docs/community-release-checklist.md | 4 +- docs/deploy-and-staging-smoke.md | 2 +- docs/deployment.md | 10 +- docs/modular_decomposition.xml | 8 +- docs/runtime-config.md | 2 +- 10 files changed, 165 insertions(+), 271 deletions(-) rename {.github => .gitea}/workflows/ci.yml (68%) rename {.github => .gitea}/workflows/deploy.yml (63%) create mode 100644 .gitea/workflows/release.yml delete mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/ci.yml b/.gitea/workflows/ci.yml similarity index 68% rename from .github/workflows/ci.yml rename to .gitea/workflows/ci.yml index 342c6c9..e25a689 100644 --- a/.github/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -7,10 +7,6 @@ on: - main - "feat/**" -concurrency: - group: ci-${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - jobs: rust: name: Rust Checks @@ -36,11 +32,12 @@ jobs: - name: Checkout uses: actions/checkout@v5 - - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@master - with: - toolchain: 1.85.0 - components: rustfmt, clippy + - name: Verify runner toolchain + run: | + rustc --version + cargo --version + rustfmt --version + cargo clippy --version - name: Check formatting run: cargo fmt --all --check @@ -62,10 +59,11 @@ jobs: - name: Checkout uses: actions/checkout@v5 - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: 22 + - name: Verify runner toolchain + run: | + node --version + npm --version + docker --version - name: Install UI dependencies working-directory: apps/ui @@ -86,15 +84,12 @@ jobs: - name: Checkout uses: actions/checkout@v5 - - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@master - with: - toolchain: 1.85.0 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: 22 + - name: Verify runner toolchain + run: | + rustc --version + cargo --version + node --version + npm --version - name: Install UI dependencies working-directory: apps/ui @@ -108,22 +103,6 @@ jobs: working-directory: apps/ui run: npx playwright test - - name: Upload Playwright report - if: always() - uses: actions/upload-artifact@v4 - with: - name: playwright-report - path: apps/ui/playwright-report - if-no-files-found: ignore - - - name: Upload Playwright test results - if: always() - uses: actions/upload-artifact@v4 - with: - name: playwright-test-results - path: apps/ui/test-results - if-no-files-found: ignore - deployment: name: Deployment Manifests runs-on: [self-hosted, linux, x64] diff --git a/.github/workflows/deploy.yml b/.gitea/workflows/deploy.yml similarity index 63% rename from .github/workflows/deploy.yml rename to .gitea/workflows/deploy.yml index 844ee6c..994716a 100644 --- a/.github/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -1,36 +1,20 @@ name: Deploy on: - workflow_run: - workflows: - - CI - types: - - completed + push: + branches: + - main workflow_dispatch: -concurrency: - group: deploy-${{ github.event_name == 'workflow_run' && github.event.workflow_run.head_branch || github.ref }} - cancel-in-progress: true - -permissions: - contents: read - packages: write - env: - IMAGE_TAG: ${{ github.event_name == 'workflow_run' && github.event.workflow_run.head_sha || github.sha }} - ADMIN_API_IMAGE: ghcr.io/${{ github.repository_owner }}/crank-admin-api - MCP_SERVER_IMAGE: ghcr.io/${{ github.repository_owner }}/crank-mcp-server - UI_IMAGE: ghcr.io/${{ github.repository_owner }}/crank-ui + REGISTRY: git.itexp.me + IMAGE_TAG: ${{ gitea.sha }} + ADMIN_API_IMAGE: git.itexp.me/bsodfather/crank-community-admin-api + MCP_SERVER_IMAGE: git.itexp.me/bsodfather/crank-community-mcp-server + UI_IMAGE: git.itexp.me/bsodfather/crank-community-ui jobs: build-images: - if: > - github.event_name == 'workflow_dispatch' || - ( - github.event_name == 'workflow_run' && - github.event.workflow_run.conclusion == 'success' && - github.event.workflow_run.head_branch == 'main' - ) runs-on: [self-hosted, linux, x64] strategy: fail-fast: false @@ -38,82 +22,61 @@ jobs: include: - name: admin-api dockerfile: apps/admin-api/Dockerfile + image: git.itexp.me/bsodfather/crank-community-admin-api - name: mcp-server dockerfile: apps/mcp-server/Dockerfile + image: git.itexp.me/bsodfather/crank-community-mcp-server - name: ui dockerfile: apps/ui/Dockerfile + image: git.itexp.me/bsodfather/crank-community-ui steps: - name: Checkout uses: actions/checkout@v5 - with: - ref: ${{ github.event_name == 'workflow_run' && github.event.workflow_run.head_sha || github.sha }} - - name: Resolve image name - id: image + - name: Verify runner toolchain + run: docker --version + + - name: Login to registry run: | - case "${{ matrix.name }}" in - admin-api) echo "name=${ADMIN_API_IMAGE}" >> "$GITHUB_OUTPUT" ;; - mcp-server) echo "name=${MCP_SERVER_IMAGE}" >> "$GITHUB_OUTPUT" ;; - ui) echo "name=${UI_IMAGE}" >> "$GITHUB_OUTPUT" ;; - *) exit 1 ;; - esac - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v4 - - - name: Log in to GHCR - uses: docker/login-action@v4 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} + printf '%s' '${{ secrets.DEPLOY_REGISTRY_TOKEN }}' | \ + docker login '${{ env.REGISTRY }}' -u '${{ secrets.DEPLOY_REGISTRY_USER }}' --password-stdin - name: Build and push ${{ matrix.name }} - uses: docker/build-push-action@v7 - with: - context: . - file: ${{ matrix.dockerfile }} - push: true - tags: | - ${{ steps.image.outputs.name }}:${{ env.IMAGE_TAG }} - ${{ steps.image.outputs.name }}:main + run: | + docker build -f '${{ matrix.dockerfile }}' \ + -t '${{ matrix.image }}:${{ env.IMAGE_TAG }}' \ + -t '${{ matrix.image }}:main' \ + . + docker push '${{ matrix.image }}:${{ env.IMAGE_TAG }}' + docker push '${{ matrix.image }}:main' deploy: needs: build-images - if: > - github.event_name == 'workflow_dispatch' || - ( - github.event_name == 'workflow_run' && - github.event.workflow_run.conclusion == 'success' && - github.event.workflow_run.head_branch == 'main' - ) runs-on: [self-hosted, linux, x64] steps: - name: Checkout uses: actions/checkout@v5 - with: - ref: ${{ github.event_name == 'workflow_run' && github.event.workflow_run.head_sha || github.sha }} - name: Configure SSH key run: | mkdir -p ~/.ssh chmod 700 ~/.ssh - printf '%s\n' "${{ secrets.DEPLOY_SSH_KEY }}" > ~/.ssh/id_ed25519 + printf '%s\n' '${{ secrets.DEPLOY_SSH_KEY }}' > ~/.ssh/id_ed25519 chmod 600 ~/.ssh/id_ed25519 - name: Configure known hosts run: | - printf '%s\n' "${{ secrets.DEPLOY_KNOWN_HOSTS }}" > ~/.ssh/known_hosts + printf '%s\n' '${{ secrets.DEPLOY_KNOWN_HOSTS }}' > ~/.ssh/known_hosts chmod 644 ~/.ssh/known_hosts - name: Sync deployment files to server run: | - ssh -p "${{ secrets.DEPLOY_PORT }}" "${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }}" \ + ssh -p '${{ secrets.DEPLOY_PORT }}' '${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }}' \ "mkdir -p '${{ secrets.DEPLOY_PATH }}'" rsync -az -e "ssh -p ${{ secrets.DEPLOY_PORT }}" deploy/community/docker-compose.yml \ - "${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }}:${{ secrets.DEPLOY_PATH }}/docker-compose.yml" + '${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }}:${{ secrets.DEPLOY_PATH }}/docker-compose.yml' - name: Write environment file env: @@ -130,6 +93,9 @@ jobs: CRANK_LOG_LEVEL: ${{ secrets.CRANK_LOG_LEVEL }} CRANK_MASTER_KEY: ${{ secrets.CRANK_MASTER_KEY }} CRANK_BASE_URL: ${{ secrets.CRANK_BASE_URL }} + CRANK_CACHE_BACKEND: ${{ secrets.CRANK_CACHE_BACKEND }} + CRANK_CACHE_URL: ${{ secrets.CRANK_CACHE_URL }} + CRANK_CACHE_DEFAULT_TTL_MS: ${{ secrets.CRANK_CACHE_DEFAULT_TTL_MS }} CRANK_SESSION_SECRET: ${{ secrets.CRANK_SESSION_SECRET }} CRANK_PASSWORD_PEPPER: ${{ secrets.CRANK_PASSWORD_PEPPER }} CRANK_SESSION_TTL_HOURS: ${{ secrets.CRANK_SESSION_TTL_HOURS }} @@ -158,6 +124,9 @@ jobs: append_if_set CRANK_LOG_LEVEL "$CRANK_LOG_LEVEL" append_if_set CRANK_MASTER_KEY "$CRANK_MASTER_KEY" append_if_set CRANK_BASE_URL "$CRANK_BASE_URL" + append_if_set CRANK_CACHE_BACKEND "$CRANK_CACHE_BACKEND" + append_if_set CRANK_CACHE_URL "$CRANK_CACHE_URL" + append_if_set CRANK_CACHE_DEFAULT_TTL_MS "$CRANK_CACHE_DEFAULT_TTL_MS" append_if_set CRANK_SESSION_SECRET "$CRANK_SESSION_SECRET" append_if_set CRANK_PASSWORD_PEPPER "$CRANK_PASSWORD_PEPPER" append_if_set CRANK_SESSION_TTL_HOURS "$CRANK_SESSION_TTL_HOURS" @@ -166,17 +135,17 @@ jobs: append_if_set CRANK_BOOTSTRAP_ADMIN_DISPLAY_NAME "$CRANK_BOOTSTRAP_ADMIN_DISPLAY_NAME" append_if_set CRANK_DEMO_SEED "$CRANK_DEMO_SEED" { - printf 'CRANK_ADMIN_API_IMAGE=%s:%s\n' "${{ env.ADMIN_API_IMAGE }}" "${{ env.IMAGE_TAG }}" - printf 'CRANK_MCP_SERVER_IMAGE=%s:%s\n' "${{ env.MCP_SERVER_IMAGE }}" "${{ env.IMAGE_TAG }}" - printf 'CRANK_UI_IMAGE=%s:%s\n' "${{ env.UI_IMAGE }}" "${{ env.IMAGE_TAG }}" + printf 'CRANK_ADMIN_API_IMAGE=%s:%s\n' '${{ env.ADMIN_API_IMAGE }}' '${{ env.IMAGE_TAG }}' + printf 'CRANK_MCP_SERVER_IMAGE=%s:%s\n' '${{ env.MCP_SERVER_IMAGE }}' '${{ env.IMAGE_TAG }}' + printf 'CRANK_UI_IMAGE=%s:%s\n' '${{ env.UI_IMAGE }}' '${{ env.IMAGE_TAG }}' } >> "$tmp_env" - cat "$tmp_env" | ssh -p "${{ secrets.DEPLOY_PORT }}" "${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }}" \ + cat "$tmp_env" | ssh -p '${{ secrets.DEPLOY_PORT }}' '${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }}' \ "mkdir -p '${{ secrets.DEPLOY_PATH }}' && cat > '${{ secrets.DEPLOY_PATH }}/.env'" rm -f "$tmp_env" - name: Validate required environment variables run: | - ssh -p "${{ secrets.DEPLOY_PORT }}" "${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }}" " + ssh -p '${{ secrets.DEPLOY_PORT }}' '${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }}' " set -e cd '${{ secrets.DEPLOY_PATH }}' required_vars=' @@ -203,10 +172,10 @@ jobs: - name: Deploy with Docker Compose run: | - ssh -p "${{ secrets.DEPLOY_PORT }}" "${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }}" " + ssh -p '${{ secrets.DEPLOY_PORT }}' '${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }}' " set -e cd '${{ secrets.DEPLOY_PATH }}' - echo '${{ secrets.DEPLOY_REGISTRY_TOKEN }}' | docker login ghcr.io -u '${{ secrets.DEPLOY_REGISTRY_USER }}' --password-stdin + echo '${{ secrets.DEPLOY_REGISTRY_TOKEN }}' | docker login '${{ env.REGISTRY }}' -u '${{ secrets.DEPLOY_REGISTRY_USER }}' --password-stdin docker compose config -q docker compose pull admin-api mcp-server ui docker compose up -d --remove-orphans @@ -214,7 +183,7 @@ jobs: - name: Verify health endpoints run: | - ssh -p "${{ secrets.DEPLOY_PORT }}" "${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }}" " + ssh -p '${{ secrets.DEPLOY_PORT }}' '${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }}' " set -e cd '${{ secrets.DEPLOY_PATH }}' for attempt in \$(seq 1 30); do diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml new file mode 100644 index 0000000..8db6db7 --- /dev/null +++ b/.gitea/workflows/release.yml @@ -0,0 +1,88 @@ +name: Community Release + +on: + push: + tags: + - "v*" + workflow_dispatch: + +env: + REGISTRY: git.itexp.me + IMAGE_TAG: ${{ gitea.ref_name }} + ADMIN_API_IMAGE: git.itexp.me/bsodfather/crank-community-admin-api + MCP_SERVER_IMAGE: git.itexp.me/bsodfather/crank-community-mcp-server + UI_IMAGE: git.itexp.me/bsodfather/crank-community-ui + +jobs: + release: + runs-on: [self-hosted, linux, x64] + + steps: + - name: Checkout + uses: actions/checkout@v5 + + - name: Verify runner toolchain + run: | + rustc --version + cargo --version + node --version + npm --version + docker --version + + - name: Build release binaries + run: cargo build --release -p admin-api -p mcp-server + + - name: Install UI dependencies + working-directory: apps/ui + run: npm ci + + - name: Build UI dist + working-directory: apps/ui + run: npm run build + + - name: Package release artifacts + run: | + mkdir -p dist/release + cp target/release/admin-api dist/release/admin-api + cp target/release/mcp-server dist/release/mcp-server + tar -C dist/release -czf dist/crank-community-admin-api-${IMAGE_TAG}.tar.gz admin-api + tar -C dist/release -czf dist/crank-community-mcp-server-${IMAGE_TAG}.tar.gz mcp-server + tar -C apps/ui/dist -czf dist/crank-community-ui-${IMAGE_TAG}.tar.gz . + sha256sum \ + dist/crank-community-admin-api-${IMAGE_TAG}.tar.gz \ + dist/crank-community-mcp-server-${IMAGE_TAG}.tar.gz \ + dist/crank-community-ui-${IMAGE_TAG}.tar.gz \ + > dist/crank-community-${IMAGE_TAG}-checksums.txt + + - name: Generate SBOM + run: | + docker run --rm -v "$PWD:/workspace" anchore/syft:latest \ + dir:/workspace -o spdx-json \ + > dist/crank-community-${IMAGE_TAG}-sbom.spdx.json + + - name: Login to registry + run: | + printf '%s' '${{ secrets.DEPLOY_REGISTRY_TOKEN }}' | \ + docker login '${{ env.REGISTRY }}' -u '${{ secrets.DEPLOY_REGISTRY_USER }}' --password-stdin + + - name: Build and push release images + run: | + docker build -f apps/admin-api/Dockerfile \ + -t '${{ env.ADMIN_API_IMAGE }}:${{ env.IMAGE_TAG }}' \ + -t '${{ env.ADMIN_API_IMAGE }}:latest' . + docker build -f apps/mcp-server/Dockerfile \ + -t '${{ env.MCP_SERVER_IMAGE }}:${{ env.IMAGE_TAG }}' \ + -t '${{ env.MCP_SERVER_IMAGE }}:latest' . + docker build -f apps/ui/Dockerfile \ + -t '${{ env.UI_IMAGE }}:${{ env.IMAGE_TAG }}' \ + -t '${{ env.UI_IMAGE }}:latest' . + docker push '${{ env.ADMIN_API_IMAGE }}:${{ env.IMAGE_TAG }}' + docker push '${{ env.ADMIN_API_IMAGE }}:latest' + docker push '${{ env.MCP_SERVER_IMAGE }}:${{ env.IMAGE_TAG }}' + docker push '${{ env.MCP_SERVER_IMAGE }}:latest' + docker push '${{ env.UI_IMAGE }}:${{ env.IMAGE_TAG }}' + docker push '${{ env.UI_IMAGE }}:latest' + + - name: Show release bundle summary + run: | + ls -lh dist diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index 4d4a82d..0000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,144 +0,0 @@ -name: Community Release - -on: - push: - tags: - - "v*" - workflow_dispatch: - -concurrency: - group: release-${{ github.ref }} - cancel-in-progress: true - -permissions: - contents: write - packages: write - -env: - IMAGE_TAG: ${{ github.ref_name }} - ADMIN_API_IMAGE: ghcr.io/${{ github.repository_owner }}/crank-community-admin-api - MCP_SERVER_IMAGE: ghcr.io/${{ github.repository_owner }}/crank-community-mcp-server - UI_IMAGE: ghcr.io/${{ github.repository_owner }}/crank-community-ui - -jobs: - build-release-assets: - runs-on: [self-hosted, linux, x64] - - steps: - - name: Checkout - uses: actions/checkout@v5 - - - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@master - with: - toolchain: 1.85.0 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: 22 - - - name: Build release binaries - run: cargo build --release -p admin-api -p mcp-server - - - name: Install UI dependencies - working-directory: apps/ui - run: npm ci - - - name: Build UI dist - working-directory: apps/ui - run: npm run build - - - name: Package release artifacts - run: | - mkdir -p dist/release - cp target/release/admin-api dist/release/admin-api - cp target/release/mcp-server dist/release/mcp-server - tar -C dist/release -czf dist/crank-community-admin-api-${IMAGE_TAG}.tar.gz admin-api - tar -C dist/release -czf dist/crank-community-mcp-server-${IMAGE_TAG}.tar.gz mcp-server - tar -C apps/ui/dist -czf dist/crank-community-ui-${IMAGE_TAG}.tar.gz . - sha256sum \ - dist/crank-community-admin-api-${IMAGE_TAG}.tar.gz \ - dist/crank-community-mcp-server-${IMAGE_TAG}.tar.gz \ - dist/crank-community-ui-${IMAGE_TAG}.tar.gz \ - > dist/crank-community-${IMAGE_TAG}-checksums.txt - - - name: Generate SBOM - run: | - docker run --rm -v "$PWD:/workspace" anchore/syft:latest \ - dir:/workspace -o spdx-json \ - > dist/crank-community-${IMAGE_TAG}-sbom.spdx.json - - - name: Upload release artifacts - uses: actions/upload-artifact@v4 - with: - name: community-release-artifacts - path: | - dist/crank-community-admin-api-${{ env.IMAGE_TAG }}.tar.gz - dist/crank-community-mcp-server-${{ env.IMAGE_TAG }}.tar.gz - dist/crank-community-ui-${{ env.IMAGE_TAG }}.tar.gz - dist/crank-community-${{ env.IMAGE_TAG }}-checksums.txt - dist/crank-community-${{ env.IMAGE_TAG }}-sbom.spdx.json - - publish-images: - runs-on: [self-hosted, linux, x64] - strategy: - fail-fast: false - matrix: - include: - - name: admin-api - dockerfile: apps/admin-api/Dockerfile - image: ghcr.io/${{ github.repository_owner }}/crank-community-admin-api - - name: mcp-server - dockerfile: apps/mcp-server/Dockerfile - image: ghcr.io/${{ github.repository_owner }}/crank-community-mcp-server - - name: ui - dockerfile: apps/ui/Dockerfile - image: ghcr.io/${{ github.repository_owner }}/crank-community-ui - - steps: - - name: Checkout - uses: actions/checkout@v5 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v4 - - - name: Log in to GHCR - uses: docker/login-action@v4 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Build and push ${{ matrix.name }} - uses: docker/build-push-action@v7 - with: - context: . - file: ${{ matrix.dockerfile }} - push: true - tags: | - ${{ matrix.image }}:${{ env.IMAGE_TAG }} - ${{ matrix.image }}:latest - - github-release: - needs: - - build-release-assets - - publish-images - runs-on: [self-hosted, linux, x64] - - steps: - - name: Download release artifacts - uses: actions/download-artifact@v4 - with: - name: community-release-artifacts - path: dist - - - name: Publish GitHub Release - uses: softprops/action-gh-release@v2 - with: - files: | - dist/crank-community-admin-api-${{ env.IMAGE_TAG }}.tar.gz - dist/crank-community-mcp-server-${{ env.IMAGE_TAG }}.tar.gz - dist/crank-community-ui-${{ env.IMAGE_TAG }}.tar.gz - dist/crank-community-${{ env.IMAGE_TAG }}-checksums.txt - dist/crank-community-${{ env.IMAGE_TAG }}-sbom.spdx.json diff --git a/README.md b/README.md index ec103bb..08edd1d 100644 --- a/README.md +++ b/README.md @@ -93,13 +93,15 @@ Crank - платформа для публикации внешних API в в В репозитории настроены: - `CI` для Rust, UI и deployment manifests; -- `CD`, который после успешного `CI` на `main` собирает versioned images, пушит их в `GHCR` и деплоит Community через `deploy/community/docker-compose.yml`; +- `CD`, который на `push` в `main` собирает versioned images, пушит их в registry Gitea и деплоит Community через `deploy/community/docker-compose.yml`; +- tag-based release workflow для сборки release bundle и versioned images; - containerized Community deployment через `deploy/community/docker-compose.yml`. Важно: -- GitHub Actions в этом репозитории рассчитаны только на `self-hosted` runner; -- `ubuntu-latest`, `actions/cache` и `type=gha` intentionally не используются, чтобы не тратить платные GitHub-hosted минуты и cache quota на private repository. +- workflows лежат в `.gitea/workflows`; +- Gitea Actions в этом репозитории рассчитаны только на `self-hosted` runner; +- внешние GitHub-specific механики вроде `workflow_run`, `actions/upload-artifact`, `softprops/action-gh-release` и `ghcr.io` intentionally не используются. ## Поддерживаемые протоколы diff --git a/docs/community-release-checklist.md b/docs/community-release-checklist.md index cb6cf5f..06ccad3 100644 --- a/docs/community-release-checklist.md +++ b/docs/community-release-checklist.md @@ -16,8 +16,8 @@ - `deploy/community/docker-compose.yml` - `deploy/community/.env.example` -- `.github/workflows/ci.yml` -- `.github/workflows/deploy.yml` +- `.gitea/workflows/ci.yml` +- `.gitea/workflows/deploy.yml` - `docs/deployment.md` - `docs/deploy-and-staging-smoke.md` - `docs/authenticated-staging-pass.md` diff --git a/docs/deploy-and-staging-smoke.md b/docs/deploy-and-staging-smoke.md index 7380704..e56bc3b 100644 --- a/docs/deploy-and-staging-smoke.md +++ b/docs/deploy-and-staging-smoke.md @@ -38,7 +38,7 @@ - задеплоенный стек `ui`, `admin-api`, `mcp-server`, `postgres`; - корректный `.env` на сервере; -- валидный deploy через `.github/workflows/deploy.yml`; +- валидный deploy через `.gitea/workflows/deploy.yml`; - server deployment path, собранный из `deploy/community/docker-compose.yml`; - `CRANK_DEMO_SEED=true`, если нужен предзаполненный smoke state; - bootstrap admin credentials для входа в UI. diff --git a/docs/deployment.md b/docs/deployment.md index 8a7111f..d86be21 100644 --- a/docs/deployment.md +++ b/docs/deployment.md @@ -38,8 +38,8 @@ - `deploy/community/docker-compose.yml` как canonical Community deployment manifest; - `deploy/community/.env.example` как canonical Community runtime env template; - `docker-compose.yml` и root `.env.example` только как local development convenience layers, а не как future private delivery boundary; -- `.github/workflows/ci.yml`; -- `.github/workflows/deploy.yml`; +- `.gitea/workflows/ci.yml`; +- `.gitea/workflows/deploy.yml`; - примеры reverse proxy конфигураций. Рекомендуемое стартовое распределение портов: @@ -236,9 +236,9 @@ CD для MVP должен: Для текущего проекта базовая рекомендуемая схема: -- `GHCR` как registry; +- registry на том же Gitea instance; - versioned tags по `git sha`; -- `docker/buildx` cache в GitHub Actions; +- self-hosted Gitea Actions runner; - на сервере только `pull + restart`, без `docker compose up --build`. Для private registry на сервере нужны отдельные deployment secrets: @@ -251,7 +251,7 @@ CD для MVP должен: Монолитный `DEPLOY_ENV_FILE` больше не используется. Workflow доставляет именно `deploy/community/docker-compose.yml` как public Community deployment manifest -и собирает `.env` на сервере из отдельных GitHub secrets. Для runtime-переменных нужно +и собирает `.env` на сервере из отдельных Gitea secrets. Для runtime-переменных нужно создавать secrets с теми же именами, что и у приложений: - `POSTGRES_HOST` diff --git a/docs/modular_decomposition.xml b/docs/modular_decomposition.xml index 6ee4772..a5e7098 100644 --- a/docs/modular_decomposition.xml +++ b/docs/modular_decomposition.xml @@ -1570,22 +1570,22 @@ Community release pipeline - + Trigger: push tag v*. - Steps: build admin-api, mcp-server, UI dist; build Docker images; push to ghcr.io/<owner>/crank-community-{admin-api,mcp-server}; attach checksums + SBOM; create GitHub Release. + Steps: build admin-api, mcp-server, UI dist; build Docker images; push to the Gitea container registry; assemble checksums + SBOM on the self-hosted runner. Enterprise release pipeline - + Push tag v* triggers: fetch submodule at the pinned community tag; build enterprise-admin-api / enterprise-mcp-server / enterprise-ui-overlay; build Docker images; push to private registry; sign with cosign; produce SBOM. Cloud release pipeline + control-plane rollout - + Build cloud-admin-api / cloud-mcp-server / cloud-control-plane; push to managed registry; trigger blue/green rollout in hosted environment. diff --git a/docs/runtime-config.md b/docs/runtime-config.md index a928e3d..2f7e6aa 100644 --- a/docs/runtime-config.md +++ b/docs/runtime-config.md @@ -150,7 +150,7 @@ Demo/deployment: - стабильный `Streamable HTTP` endpoint для MCP. - containerized runtime через `Docker` и `docker-compose`. - optional shared cache layer через `Valkey/Redis`. -- registry-backed image rollout через `GHCR` или совместимый registry. +- registry-backed image rollout через Gitea Container Registry или совместимый registry. ### Cache env