chore: 🚀 Migrate monorepo from Yarn to pnpm + Turbo integration + Configuration cleanup (#10165)

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>
This commit is contained in:
Max Peintner
2025-07-16 09:10:19 +02:00
committed by GitHub
parent 6d11145c77
commit 312b7b6010
152 changed files with 34249 additions and 37195 deletions

View File

@@ -1,64 +1,223 @@
{
"github": {
"enabled": true
},
"cleanUrls": true,
"rewrites": [
{
"source": "/docs/proxy/js/script.js",
"destination": "https://plausible.io/js/script.tagged-events.pageview-props.outbound-links.js"
},
{
"source": "/docs/proxy/api/event",
"destination": "https://plausible.io/api/event"
},
{
"source": "/docs/:match*",
"destination": "/:match*"
}
],
"redirects": [
{ "source": "/", "destination": "/docs" },
{ "source": "/docs/category/apis/:slug*", "destination": "/docs/apis/:slug*", "permanent": true },
{ "source": "/docs/apis/mgmt/:slug*", "destination": "/docs/apis/resources/mgmt/:slug*", "permanent": true },
{ "source": "/docs/apis/auth/:slug*", "destination": "/docs/apis/resources/auth/:slug*", "permanent": true },
{ "source": "/docs/apis/system/:slug*", "destination": "/docs/apis/resources/system/:slug*", "permanent": true },
{ "source": "/docs/apis/admin/:slug*", "destination": "/docs/apis/resources/admin/:slug*", "permanent": true },
{ "source": "/docs/apis/actionsv2/introduction", "destination": "/docs/apis/actions/v2/usage", "permanent": true },
{ "source": "/docs/apis/actionsv2/execution-local", "destination": "/docs/apis/actions/v2/testing-locally", "permanent": true },
{ "source": "/docs/guides/integrate/human-users", "destination": "/docs/guides/integrate/login", "permanent": true },
{ "source": "/docs/guides/solution-scenarios/device-authorization", "destination": "/docs/guides/integrate/login/oidc/device-authorization", "permanent": true },
{ "source": "/docs/guides/integrate/oauth-recommended-flows", "destination": "/docs/guides/integrate/login/oidc/oauth-recommended-flows", "permanent": true },
{ "source": "/docs/guides/integrate/login-users", "destination": "/docs/guides/integrate/login/oidc/login-users", "permanent": true },
{ "source": "/docs/guides/integrate/logout", "destination": "/docs/guides/integrate/login/oidc/logout", "permanent": true },
{ "source": "/docs/guides/solution-scenarios/onboarding", "destination": "/docs/guides/integrate/onboarding", "permanent": true },
{ "source": "/docs/guides/solution-scenarios/onboarding/b2b", "destination": "/docs/guides/integrate/onboarding/b2b", "permanent": true },
{ "source": "/docs/guides/solution-scenarios/onboarding/end-users", "destination": "/docs/guides/integrate/onboarding/end-users", "permanent": true },
{ "source": "/docs/concepts/structure/jwt_idp", "destination": "/docs/guides/integrate/identity-providers/jwt-idp", "permanent": true },
{ "source": "/docs/guides/solution-scenarios/onboarding/end-users", "destination": "/docs/guides/integrate/onboarding/end-users", "permanent": true },
{ "source": "/docs/guides/integrate/serviceusers", "destination": "/docs/guides/integrate/service-users/authenticate-service-users", "permanent": true },
{ "source": "/docs/guides/integrate/private-key-jwt", "destination": "/docs/guides/integrate/service-users/private-key-jwt", "permanent": true },
{ "source": "/docs/guides/integrate/client-credentials", "destination": "/docs/guides/integrate/service-users/client-credentials", "permanent": true },
{ "source": "/docs/guides/integrate/pat", "destination": "/docs/guides/integrate/service-users/private-access-token", "permanent": true },
{ "source": "/docs/guides/integrate/access-zitadel-apis", "destination": "/docs/guides/integrate/zitadel-apis/access-zitadel-apis", "permanent": true },
{ "source": "/docs/guides/integrate/access-zitadel-system-api", "destination": "/docs/guides/integrate/zitadel-apis/access-zitadel-system-api", "permanent": true },
{ "source": "/docs/guides/integrate/event-api", "destination": "/docs/guides/integrate/zitadel-apis/event-api", "permanent": true },
{ "source": "/docs/examples/call-zitadel-api/go", "destination": "/docs/guides/integrate/zitadel-apis/example-zitadel-api-with-go", "permanent": true },
{ "source": "/docs/examples/call-zitadel-api/dot-net", "destination": "/docs/guides/integrate/zitadel-apis/example-zitadel-api-with-dot-net", "permanent": true },
{ "source": "/docs/guides/manage/terraform/basics", "destination": "/docs/guides/manage/terraform-provider", "permanent": true },
{ "source": "/docs/guides/integrate/identity-providers", "destination": "/docs/guides/integrate/identity-providers/introduction", "permanent": true },
{ "source": "/docs/guides/integrate/login/login-users#centralized-authentication-endpoint", "destination": "/docs/guides/integrate/login/hosted-login#centralized-authentication-endpoint", "permanent": true },
{ "source": "/docs/guides/integrate/login/login-users#security-and-compliance", "destination": "/docs/guides/integrate/login/hosted-login#security-and-compliance", "permanent": true },
{ "source": "/docs/guides/integrate/login/login-users#developer-friendly-integration", "destination": "/docs/guides/integrate/login/hosted-login#developer-friendly-integration", "permanent": true },
{ "source": "/docs/guides/integrate/login/login-users#key-features-of-the-hosted-login", "destination": "/docs/guides/integrate/login/hosted-login#key-features-of-the-hosted-login", "permanent": true },
{ "source": "/docs/guides/integrate/login/login-users#flexible-usernames", "destination": "/docs/guides/integrate/login/hosted-login#flexible-usernames", "permanent": true },
{ "source": "/docs/guides/integrate/login/login-users#support-for-multiple-authentication-methods", "destination": "/docs/guides/integrate/login/hosted-login#support-for-multiple-authentication-methods", "permanent": true },
{ "source": "/docs/guides/integrate/login/login-users#enterprise-single-sign-on", "destination": "/docs/guides/integrate/login/hosted-login#enterprise-single-sign-on", "permanent": true },
{ "source": "/docs/guides/integrate/login/login-users#multi-tenancy-authentication", "destination": "/docs/guides/integrate/login/hosted-login#multi-tenancy-authentication", "permanent": true },
{ "source": "/docs/guides/integrate/login/login-users#customization-options", "destination": "/docs/guides/integrate/login/hosted-login#customization-options", "permanent": true },
{ "source": "/docs/guides/integrate/login/login-users#fast-account-switching", "destination": "/docs/guides/integrate/login/hosted-login#fast-account-switching", "permanent": true },
{ "source": "/docs/guides/integrate/login/login-users#self-service-for-users", "destination": "/docs/guides/integrate/login/hosted-login#self-service-for-users", "permanent": true },
{ "source": "/docs/guides/integrate/login/login-users#password-reset", "destination": "/docs/guides/integrate/login/hosted-login#password-reset", "permanent": true }
]
"github": {
"enabled": true
},
"cleanUrls": true,
"rewrites": [
{
"source": "/docs/proxy/js/script.js",
"destination": "https://plausible.io/js/script.tagged-events.pageview-props.outbound-links.js"
},
{
"source": "/docs/proxy/api/event",
"destination": "https://plausible.io/api/event"
},
{
"source": "/docs/:match*",
"destination": "/:match*"
}
],
"redirects": [
{ "source": "/", "destination": "/docs" },
{
"source": "/docs/category/apis/:slug*",
"destination": "/docs/apis/:slug*",
"permanent": true
},
{
"source": "/docs/apis/mgmt/:slug*",
"destination": "/docs/apis/resources/mgmt/:slug*",
"permanent": true
},
{
"source": "/docs/apis/auth/:slug*",
"destination": "/docs/apis/resources/auth/:slug*",
"permanent": true
},
{
"source": "/docs/apis/system/:slug*",
"destination": "/docs/apis/resources/system/:slug*",
"permanent": true
},
{
"source": "/docs/apis/admin/:slug*",
"destination": "/docs/apis/resources/admin/:slug*",
"permanent": true
},
{
"source": "/docs/apis/actionsv2/introduction",
"destination": "/docs/apis/actions/v2/usage",
"permanent": true
},
{
"source": "/docs/apis/actionsv2/execution-local",
"destination": "/docs/apis/actions/v2/testing-locally",
"permanent": true
},
{
"source": "/docs/guides/integrate/human-users",
"destination": "/docs/guides/integrate/login",
"permanent": true
},
{
"source": "/docs/guides/solution-scenarios/device-authorization",
"destination": "/docs/guides/integrate/login/oidc/device-authorization",
"permanent": true
},
{
"source": "/docs/guides/integrate/oauth-recommended-flows",
"destination": "/docs/guides/integrate/login/oidc/oauth-recommended-flows",
"permanent": true
},
{
"source": "/docs/guides/integrate/login-users",
"destination": "/docs/guides/integrate/login/oidc/login-users",
"permanent": true
},
{
"source": "/docs/guides/integrate/logout",
"destination": "/docs/guides/integrate/login/oidc/logout",
"permanent": true
},
{
"source": "/docs/guides/solution-scenarios/onboarding",
"destination": "/docs/guides/integrate/onboarding",
"permanent": true
},
{
"source": "/docs/guides/solution-scenarios/onboarding/b2b",
"destination": "/docs/guides/integrate/onboarding/b2b",
"permanent": true
},
{
"source": "/docs/guides/solution-scenarios/onboarding/end-users",
"destination": "/docs/guides/integrate/onboarding/end-users",
"permanent": true
},
{
"source": "/docs/concepts/structure/jwt_idp",
"destination": "/docs/guides/integrate/identity-providers/jwt-idp",
"permanent": true
},
{
"source": "/docs/guides/solution-scenarios/onboarding/end-users",
"destination": "/docs/guides/integrate/onboarding/end-users",
"permanent": true
},
{
"source": "/docs/guides/integrate/serviceusers",
"destination": "/docs/guides/integrate/service-users/authenticate-service-users",
"permanent": true
},
{
"source": "/docs/guides/integrate/private-key-jwt",
"destination": "/docs/guides/integrate/service-users/private-key-jwt",
"permanent": true
},
{
"source": "/docs/guides/integrate/client-credentials",
"destination": "/docs/guides/integrate/service-users/client-credentials",
"permanent": true
},
{
"source": "/docs/guides/integrate/pat",
"destination": "/docs/guides/integrate/service-users/private-access-token",
"permanent": true
},
{
"source": "/docs/guides/integrate/access-zitadel-apis",
"destination": "/docs/guides/integrate/zitadel-apis/access-zitadel-apis",
"permanent": true
},
{
"source": "/docs/guides/integrate/access-zitadel-system-api",
"destination": "/docs/guides/integrate/zitadel-apis/access-zitadel-system-api",
"permanent": true
},
{
"source": "/docs/guides/integrate/event-api",
"destination": "/docs/guides/integrate/zitadel-apis/event-api",
"permanent": true
},
{
"source": "/docs/examples/call-zitadel-api/go",
"destination": "/docs/guides/integrate/zitadel-apis/example-zitadel-api-with-go",
"permanent": true
},
{
"source": "/docs/examples/call-zitadel-api/dot-net",
"destination": "/docs/guides/integrate/zitadel-apis/example-zitadel-api-with-dot-net",
"permanent": true
},
{
"source": "/docs/guides/manage/terraform/basics",
"destination": "/docs/guides/manage/terraform-provider",
"permanent": true
},
{
"source": "/docs/guides/integrate/identity-providers",
"destination": "/docs/guides/integrate/identity-providers/introduction",
"permanent": true
},
{
"source": "/docs/guides/integrate/login/login-users#centralized-authentication-endpoint",
"destination": "/docs/guides/integrate/login/hosted-login#centralized-authentication-endpoint",
"permanent": true
},
{
"source": "/docs/guides/integrate/login/login-users#security-and-compliance",
"destination": "/docs/guides/integrate/login/hosted-login#security-and-compliance",
"permanent": true
},
{
"source": "/docs/guides/integrate/login/login-users#developer-friendly-integration",
"destination": "/docs/guides/integrate/login/hosted-login#developer-friendly-integration",
"permanent": true
},
{
"source": "/docs/guides/integrate/login/login-users#key-features-of-the-hosted-login",
"destination": "/docs/guides/integrate/login/hosted-login#key-features-of-the-hosted-login",
"permanent": true
},
{
"source": "/docs/guides/integrate/login/login-users#flexible-usernames",
"destination": "/docs/guides/integrate/login/hosted-login#flexible-usernames",
"permanent": true
},
{
"source": "/docs/guides/integrate/login/login-users#support-for-multiple-authentication-methods",
"destination": "/docs/guides/integrate/login/hosted-login#support-for-multiple-authentication-methods",
"permanent": true
},
{
"source": "/docs/guides/integrate/login/login-users#enterprise-single-sign-on",
"destination": "/docs/guides/integrate/login/hosted-login#enterprise-single-sign-on",
"permanent": true
},
{
"source": "/docs/guides/integrate/login/login-users#multi-tenancy-authentication",
"destination": "/docs/guides/integrate/login/hosted-login#multi-tenancy-authentication",
"permanent": true
},
{
"source": "/docs/guides/integrate/login/login-users#customization-options",
"destination": "/docs/guides/integrate/login/hosted-login#customization-options",
"permanent": true
},
{
"source": "/docs/guides/integrate/login/login-users#fast-account-switching",
"destination": "/docs/guides/integrate/login/hosted-login#fast-account-switching",
"permanent": true
},
{
"source": "/docs/guides/integrate/login/login-users#self-service-for-users",
"destination": "/docs/guides/integrate/login/hosted-login#self-service-for-users",
"permanent": true
},
{
"source": "/docs/guides/integrate/login/login-users#password-reset",
"destination": "/docs/guides/integrate/login/hosted-login#password-reset",
"permanent": true
}
]
}