mirror of
https://github.com/zitadel/zitadel.git
synced 2025-08-12 05:17:33 +00:00

This PR modernizes the ZITADEL monorepo build system by migrating from Yarn to pnpm, introducing Turbo for improved build orchestration, and cleaning up configuration inconsistencies across all apps and packages. ### 🎯 Key Improvements #### 📦 **Package Manager Migration (Yarn → pnpm)** - **Performance**: Faster installs with pnpm's efficient symlink-based node_modules structure - **Disk space**: Significant reduction in disk usage through content-addressable storage - **Lockfile**: More reliable dependency resolution with pnpm-lock.yaml - **Workspace support**: Better monorepo dependency management #### ⚡ **Turbo Integration** - **Build orchestration**: Dependency-aware task execution across the monorepo - **Intelligent caching**: Dramatically faster builds on CI/CD and local development - **Parallel execution**: Optimal task scheduling based on dependency graphs - **Vercel optimization**: Enhanced build performance and caching on Vercel deployments #### 🧹 **Configuration Cleanup & Unification** - **Removed config packages**: Eliminated `@zitadel/*-config` packages and inlined configurations - **Simplified dependencies**: Reduced complexity in package.json files across all apps - **Consistent tooling**: Unified prettier, ESLint, and TypeScript configurations - **Standalone support**: Improved prepare-standalone.js script for subtree deployments ### 📋 Detailed Changes #### **🔧 Build System & Dependencies** - ✅ Updated all package.json scripts to use `pnpm` instead of `yarn` - ✅ Replaced `yarn.lock` with pnpm-lock.yaml and regenerated dependencies - ✅ Added Turbo configuration (turbo.json) to root and individual packages - ✅ Configured proper dependency chains: `@zitadel/proto#generate` → `@zitadel/client#build` → `console#build` - ✅ Added missing `@bufbuild/protobuf` dependency to console app for TypeScript compilation #### **🚀 CI/CD & Workflows** - ✅ Updated all GitHub Actions workflows to use `pnpm/action-setup@v4` - ✅ Migrated build processes to use Turbo with directory-based filters (`--filter=./console`) - ✅ **New**: Added `docs.yml` workflow for building documentation locally (helpful for contributors without Vercel access) - ✅ Fixed dependency resolution issues in lint workflows - ✅ Ensured proto generation always runs before builds and linting #### **📚 Documentation & Proto Generation** - ✅ **Robust plugin management**: Enhanced plugin-download.sh with retry logic and error handling - ✅ **Vercel compatibility**: Fixed protoc-gen-connect-openapi plugin availability in Vercel builds - ✅ **API docs generation**: Resolved Docusaurus build errors with OpenAPI plugin configuration - ✅ **Type safety**: Improved TypeScript type extraction patterns in Angular components #### **🛠️ Developer Experience** - ✅ Updated all README files to reference pnpm commands - ✅ Improved Makefile targets to use Turbo for consistent builds - ✅ Enhanced standalone build process for login app subtree deployments - ✅ Added debug utilities for troubleshooting build issues #### **🗂️ File Structure & Cleanup** - ✅ Removed obsolete configuration packages and their references - ✅ Cleaned up Docker files to remove non-existent package copies - ✅ Updated workspace references and import paths - ✅ Streamlined turbo.json configurations across all packages ### 🎉 Benefits 1. **⚡ Faster Builds**: Turbo's caching and parallel execution significantly reduce build times 2. **🔄 Better Caching**: Improved cache hits on Vercel and CI/CD environments 3. **🛠️ Simplified Maintenance**: Unified tooling and configuration management 4. **📈 Developer Productivity**: Faster local development with optimized dependency resolution 5. **🚀 Enhanced CI/CD**: More reliable and faster automated builds and deployments 6. **📖 Better Documentation**: Comprehensive build documentation and troubleshooting guides ### 🧪 Testing - ✅ All apps build successfully with new pnpm + Turbo setup - ✅ Proto generation works correctly across console, login, and docs - ✅ GitHub Actions workflows pass with new configuration - ✅ Vercel deployments work with enhanced plugin management - ✅ Local development workflow verified and documented This migration sets a solid foundation for future development while maintaining backward compatibility and improving the overall developer experience. --------- Co-authored-by: Elio Bischof <elio@zitadel.com>
158 lines
4.1 KiB
YAML
158 lines
4.1 KiB
YAML
name: ZITADEL CI/CD
|
|
|
|
on:
|
|
push:
|
|
tags-ignore:
|
|
- "*"
|
|
branches:
|
|
- "main"
|
|
pull_request:
|
|
workflow_dispatch:
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
permissions:
|
|
contents: write
|
|
packages: write
|
|
issues: write
|
|
pull-requests: write
|
|
actions: write
|
|
|
|
jobs:
|
|
core:
|
|
uses: ./.github/workflows/core.yml
|
|
with:
|
|
node_version: "20"
|
|
buf_version: "latest"
|
|
|
|
console:
|
|
uses: ./.github/workflows/console.yml
|
|
with:
|
|
node_version: "20"
|
|
buf_version: "latest"
|
|
|
|
docs:
|
|
uses: ./.github/workflows/docs.yml
|
|
with:
|
|
node_version: "20"
|
|
buf_version: "latest"
|
|
|
|
version:
|
|
uses: ./.github/workflows/version.yml
|
|
with:
|
|
semantic_version: "23.0.7"
|
|
dry_run: true
|
|
|
|
compile:
|
|
needs: [core, console, version]
|
|
uses: ./.github/workflows/compile.yml
|
|
with:
|
|
core_cache_key: ${{ needs.core.outputs.cache_key }}
|
|
console_cache_key: ${{ needs.console.outputs.cache_key }}
|
|
core_cache_path: ${{ needs.core.outputs.cache_path }}
|
|
console_cache_path: ${{ needs.console.outputs.cache_path }}
|
|
version: ${{ needs.version.outputs.version }}
|
|
node_version: "20"
|
|
secrets:
|
|
DEPOT_TOKEN: ${{ secrets.DEPOT_TOKEN }}
|
|
|
|
core-unit-test:
|
|
needs: core
|
|
uses: ./.github/workflows/core-unit-test.yml
|
|
with:
|
|
core_cache_key: ${{ needs.core.outputs.cache_key }}
|
|
core_cache_path: ${{ needs.core.outputs.cache_path }}
|
|
secrets:
|
|
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
|
core-integration-test:
|
|
needs: core
|
|
uses: ./.github/workflows/core-integration-test.yml
|
|
with:
|
|
core_cache_key: ${{ needs.core.outputs.cache_key }}
|
|
core_cache_path: ${{ needs.core.outputs.cache_path }}
|
|
secrets:
|
|
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
|
lint:
|
|
needs: [core, console]
|
|
uses: ./.github/workflows/lint.yml
|
|
with:
|
|
node_version: "18"
|
|
buf_version: "latest"
|
|
go_lint_version: "v1.64.8"
|
|
core_cache_key: ${{ needs.core.outputs.cache_key }}
|
|
core_cache_path: ${{ needs.core.outputs.cache_path }}
|
|
|
|
login-quality:
|
|
needs: [compile]
|
|
uses: ./.github/workflows/login-quality.yml
|
|
permissions:
|
|
actions: write
|
|
id-token: write
|
|
with:
|
|
ignore-run-cache: ${{ github.event_name == 'workflow_dispatch' || fromJSON(github.run_attempt) > 1 }}
|
|
node_version: "20"
|
|
secrets:
|
|
DEPOT_TOKEN: ${{ secrets.DEPOT_TOKEN }}
|
|
|
|
container:
|
|
needs: [compile]
|
|
uses: ./.github/workflows/container.yml
|
|
secrets: inherit
|
|
permissions:
|
|
packages: write
|
|
if: ${{ github.event_name == 'workflow_dispatch' }}
|
|
with:
|
|
build_image_name: "ghcr.io/zitadel/zitadel-build"
|
|
|
|
login-container:
|
|
uses: ./.github/workflows/login-container.yml
|
|
if: ${{ github.event_name == 'workflow_dispatch' }}
|
|
permissions:
|
|
packages: write
|
|
id-token: write
|
|
with:
|
|
login_build_image_name: "ghcr.io/zitadel/zitadel-login-build"
|
|
node_version: "20"
|
|
secrets:
|
|
DEPOT_TOKEN: ${{ secrets.DEPOT_TOKEN }}
|
|
|
|
e2e:
|
|
uses: ./.github/workflows/e2e.yml
|
|
needs: [compile]
|
|
|
|
release:
|
|
uses: ./.github/workflows/release.yml
|
|
permissions:
|
|
packages: write
|
|
contents: write
|
|
issues: write
|
|
pull-requests: write
|
|
needs:
|
|
[
|
|
version,
|
|
core-unit-test,
|
|
core-integration-test,
|
|
lint,
|
|
container,
|
|
login-container,
|
|
login-quality,
|
|
e2e,
|
|
]
|
|
if: ${{ github.event_name == 'workflow_dispatch' }}
|
|
secrets:
|
|
GCR_JSON_KEY_BASE64: ${{ secrets.GCR_JSON_KEY_BASE64 }}
|
|
APP_ID: ${{ secrets.APP_ID }}
|
|
APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }}
|
|
with:
|
|
build_image_name: ${{ needs.container.outputs.build_image }}
|
|
semantic_version: "23.0.7"
|
|
image_name: "ghcr.io/zitadel/zitadel"
|
|
google_image_name: "europe-docker.pkg.dev/zitadel-common/zitadel-repo/zitadel"
|
|
build_image_name_login: ${{ needs.login-container.outputs.login_build_image }}
|
|
image_name_login: "ghcr.io/zitadel/zitadel-login"
|
|
google_image_name_login: "europe-docker.pkg.dev/zitadel-common/zitadel-repo/zitadel-login"
|