mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-04-29 06:12:43 +00:00
Compare commits
15 Commits
1.12.2
...
docs/sso-c
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
953f090b75 | ||
|
|
ff1acdbd52 | ||
|
|
d0d6f93abd | ||
|
|
c35c9e1bcd | ||
|
|
9fe0c15549 | ||
|
|
78d8ddb649 | ||
|
|
1b2062009a | ||
|
|
886aa4ba8f | ||
|
|
5bec000b21 | ||
|
|
2965384907 | ||
|
|
032ef06ef6 | ||
|
|
0ce9567cfc | ||
|
|
d7252bfee7 | ||
|
|
10fc3796bb | ||
|
|
52249683a7 |
2
.github/workflows/docs-broken-links.yml
vendored
2
.github/workflows/docs-broken-links.yml
vendored
@@ -23,7 +23,7 @@ jobs:
|
|||||||
- name: Set up Node
|
- name: Set up Node
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: "latest"
|
node-version: "22"
|
||||||
|
|
||||||
- name: Install Mintlify CLI
|
- name: Install Mintlify CLI
|
||||||
run: npm i -g mintlify
|
run: npm i -g mintlify
|
||||||
|
|||||||
@@ -4,6 +4,63 @@ description: "تحديثات المنتج والتحسينات وإصلاحات
|
|||||||
icon: "clock"
|
icon: "clock"
|
||||||
mode: "wide"
|
mode: "wide"
|
||||||
---
|
---
|
||||||
|
<Update label="27 مارس 2026">
|
||||||
|
## v1.13.0rc1
|
||||||
|
|
||||||
|
[عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.13.0rc1)
|
||||||
|
|
||||||
|
## ما الذي تغير
|
||||||
|
|
||||||
|
### الوثائق
|
||||||
|
- تحديث سجل التغييرات والإصدار لـ v1.13.0a2
|
||||||
|
|
||||||
|
## المساهمون
|
||||||
|
|
||||||
|
@greysonlalonde
|
||||||
|
|
||||||
|
</Update>
|
||||||
|
|
||||||
|
<Update label="27 مارس 2026">
|
||||||
|
## v1.13.0a2
|
||||||
|
|
||||||
|
[عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.13.0a2)
|
||||||
|
|
||||||
|
## ما الذي تغير
|
||||||
|
|
||||||
|
### الميزات
|
||||||
|
- تحديث تلقائي لمستودع اختبار النشر أثناء الإصدار
|
||||||
|
- تحسين مرونة إصدار المؤسسات وتجربة المستخدم
|
||||||
|
|
||||||
|
### الوثائق
|
||||||
|
- تحديث سجل التغييرات والإصدار للإصدار v1.13.0a1
|
||||||
|
|
||||||
|
## المساهمون
|
||||||
|
|
||||||
|
@greysonlalonde
|
||||||
|
|
||||||
|
</Update>
|
||||||
|
|
||||||
|
<Update label="27 مارس 2026">
|
||||||
|
## v1.13.0a1
|
||||||
|
|
||||||
|
[عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.13.0a1)
|
||||||
|
|
||||||
|
## ما الذي تغير
|
||||||
|
|
||||||
|
### إصلاحات الأخطاء
|
||||||
|
- إصلاح الروابط المعطلة في سير العمل الوثائقي عن طريق تثبيت Node على LTS 22
|
||||||
|
- مسح ذاكرة التخزين المؤقت لـ uv للحزم المنشورة حديثًا في الإصدار المؤسسي
|
||||||
|
|
||||||
|
### الوثائق
|
||||||
|
- إضافة مصفوفة شاملة لأذونات RBAC ودليل النشر
|
||||||
|
- تحديث سجل التغييرات والإصدار للإصدار v1.12.2
|
||||||
|
|
||||||
|
## المساهمون
|
||||||
|
|
||||||
|
@greysonlalonde, @iris-clawd, @joaomdmoura
|
||||||
|
|
||||||
|
</Update>
|
||||||
|
|
||||||
<Update label="25 مارس 2026">
|
<Update label="25 مارس 2026">
|
||||||
## v1.12.2
|
## v1.12.2
|
||||||
|
|
||||||
|
|||||||
1303
docs/docs.json
1303
docs/docs.json
File diff suppressed because it is too large
Load Diff
@@ -4,6 +4,63 @@ description: "Product updates, improvements, and bug fixes for CrewAI"
|
|||||||
icon: "clock"
|
icon: "clock"
|
||||||
mode: "wide"
|
mode: "wide"
|
||||||
---
|
---
|
||||||
|
<Update label="Mar 27, 2026">
|
||||||
|
## v1.13.0rc1
|
||||||
|
|
||||||
|
[View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.13.0rc1)
|
||||||
|
|
||||||
|
## What's Changed
|
||||||
|
|
||||||
|
### Documentation
|
||||||
|
- Update changelog and version for v1.13.0a2
|
||||||
|
|
||||||
|
## Contributors
|
||||||
|
|
||||||
|
@greysonlalonde
|
||||||
|
|
||||||
|
</Update>
|
||||||
|
|
||||||
|
<Update label="Mar 27, 2026">
|
||||||
|
## v1.13.0a2
|
||||||
|
|
||||||
|
[View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.13.0a2)
|
||||||
|
|
||||||
|
## What's Changed
|
||||||
|
|
||||||
|
### Features
|
||||||
|
- Auto-update deployment test repo during release
|
||||||
|
- Improve enterprise release resilience and UX
|
||||||
|
|
||||||
|
### Documentation
|
||||||
|
- Update changelog and version for v1.13.0a1
|
||||||
|
|
||||||
|
## Contributors
|
||||||
|
|
||||||
|
@greysonlalonde
|
||||||
|
|
||||||
|
</Update>
|
||||||
|
|
||||||
|
<Update label="Mar 27, 2026">
|
||||||
|
## v1.13.0a1
|
||||||
|
|
||||||
|
[View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.13.0a1)
|
||||||
|
|
||||||
|
## What's Changed
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
- Fix broken links in documentation workflow by pinning Node to LTS 22
|
||||||
|
- Bust the uv cache for freshly published packages in enterprise release
|
||||||
|
|
||||||
|
### Documentation
|
||||||
|
- Add comprehensive RBAC permissions matrix and deployment guide
|
||||||
|
- Update changelog and version for v1.12.2
|
||||||
|
|
||||||
|
## Contributors
|
||||||
|
|
||||||
|
@greysonlalonde, @iris-clawd, @joaomdmoura
|
||||||
|
|
||||||
|
</Update>
|
||||||
|
|
||||||
<Update label="Mar 25, 2026">
|
<Update label="Mar 25, 2026">
|
||||||
## v1.12.2
|
## v1.12.2
|
||||||
|
|
||||||
|
|||||||
@@ -7,11 +7,13 @@ mode: "wide"
|
|||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
RBAC in CrewAI AMP enables secure, scalable access management through a combination of organization‑level roles and automation‑level visibility controls.
|
RBAC in CrewAI AMP enables secure, scalable access management through two layers:
|
||||||
|
|
||||||
|
1. **Feature permissions** — control what each role can do across the platform (manage, read, or no access)
|
||||||
|
2. **Entity-level permissions** — fine-grained access on individual automations, environment variables, LLM connections, and Git repositories
|
||||||
|
|
||||||
<Frame>
|
<Frame>
|
||||||
<img src="/images/enterprise/users_and_roles.png" alt="RBAC overview in CrewAI AMP" />
|
<img src="/images/enterprise/users_and_roles.png" alt="RBAC overview in CrewAI AMP" />
|
||||||
|
|
||||||
</Frame>
|
</Frame>
|
||||||
|
|
||||||
## Users and Roles
|
## Users and Roles
|
||||||
@@ -39,6 +41,13 @@ You can configure users and roles in Settings → Roles.
|
|||||||
</Step>
|
</Step>
|
||||||
</Steps>
|
</Steps>
|
||||||
|
|
||||||
|
### Predefined Roles
|
||||||
|
|
||||||
|
| Role | Description |
|
||||||
|
| :--------- | :-------------------------------------------------------------------------- |
|
||||||
|
| **Owner** | Full access to all features and settings. Cannot be restricted. |
|
||||||
|
| **Member** | Read access to most features, manage access to Studio projects. Cannot modify organization or default settings. |
|
||||||
|
|
||||||
### Configuration summary
|
### Configuration summary
|
||||||
|
|
||||||
| Area | Where to configure | Options |
|
| Area | Where to configure | Options |
|
||||||
@@ -46,23 +55,80 @@ You can configure users and roles in Settings → Roles.
|
|||||||
| Users & Roles | Settings → Roles | Predefined: Owner, Member; Custom roles |
|
| Users & Roles | Settings → Roles | Predefined: Owner, Member; Custom roles |
|
||||||
| Automation visibility | Automation → Settings → Visibility | Private; Whitelist users/roles |
|
| Automation visibility | Automation → Settings → Visibility | Private; Whitelist users/roles |
|
||||||
|
|
||||||
## Automation‑level Access Control
|
---
|
||||||
|
|
||||||
In addition to organization‑wide roles, CrewAI Automations support fine‑grained visibility settings that let you restrict access to specific automations by user or role.
|
## Feature Permissions Matrix
|
||||||
|
|
||||||
This is useful for:
|
Every role has a permission level for each feature area. The three levels are:
|
||||||
|
|
||||||
|
- **Manage** — full read/write access (create, edit, delete)
|
||||||
|
- **Read** — view-only access
|
||||||
|
- **No access** — feature is hidden/inaccessible
|
||||||
|
|
||||||
|
| Feature | Owner | Member (default) | Description |
|
||||||
|
| :------------------------ | :------ | :--------------- | :-------------------------------------------------------------- |
|
||||||
|
| `usage_dashboards` | Manage | Read | View usage metrics and analytics |
|
||||||
|
| `crews_dashboards` | Manage | Read | View deployment dashboards, access automation details |
|
||||||
|
| `invitations` | Manage | Read | Invite new members to the organization |
|
||||||
|
| `training_ui` | Manage | Read | Access training/fine-tuning interfaces |
|
||||||
|
| `tools` | Manage | Read | Create and manage tools |
|
||||||
|
| `agents` | Manage | Read | Create and manage agents |
|
||||||
|
| `environment_variables` | Manage | Read | Create and manage environment variables |
|
||||||
|
| `llm_connections` | Manage | Read | Configure LLM provider connections |
|
||||||
|
| `default_settings` | Manage | No access | Modify organization-wide default settings |
|
||||||
|
| `organization_settings` | Manage | No access | Manage billing, plans, and organization configuration |
|
||||||
|
| `studio_projects` | Manage | Manage | Create and edit projects in Studio |
|
||||||
|
|
||||||
|
<Tip>
|
||||||
|
When creating a custom role, you can set each feature independently to **Manage**, **Read**, or **No access** to match your team's needs.
|
||||||
|
</Tip>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Deploying from GitHub or Zip
|
||||||
|
|
||||||
|
One of the most common RBAC questions is: _"What permissions does a team member need to deploy?"_
|
||||||
|
|
||||||
|
### Deploy from GitHub
|
||||||
|
|
||||||
|
To deploy an automation from a GitHub repository, a user needs:
|
||||||
|
|
||||||
|
1. **`crews_dashboards`**: at least `Read` — required to access the automations dashboard where deployments are created
|
||||||
|
2. **Git repository access** (if entity-level RBAC for Git repositories is enabled): the user's role must be granted access to the specific Git repository via entity-level permissions
|
||||||
|
3. **`studio_projects`: `Manage`** — if building the crew in Studio before deploying
|
||||||
|
|
||||||
|
### Deploy from Zip
|
||||||
|
|
||||||
|
To deploy an automation from a Zip file upload, a user needs:
|
||||||
|
|
||||||
|
1. **`crews_dashboards`**: at least `Read` — required to access the automations dashboard
|
||||||
|
2. **Zip deployments enabled**: the organization must not have disabled zip deployments in organization settings
|
||||||
|
|
||||||
|
### Quick Reference: Minimum Permissions for Deployment
|
||||||
|
|
||||||
|
| Action | Required feature permissions | Additional requirements |
|
||||||
|
| :------------------- | :------------------------------------ | :----------------------------------------------- |
|
||||||
|
| Deploy from GitHub | `crews_dashboards: Read` | Git repo entity access (if Git RBAC is enabled) |
|
||||||
|
| Deploy from Zip | `crews_dashboards: Read` | Zip deployments must be enabled at the org level |
|
||||||
|
| Build in Studio | `studio_projects: Manage` | — |
|
||||||
|
| Configure LLM keys | `llm_connections: Manage` | — |
|
||||||
|
| Set environment vars | `environment_variables: Manage` | Entity-level access (if entity RBAC is enabled) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Automation‑level Access Control (Entity Permissions)
|
||||||
|
|
||||||
|
In addition to organization‑wide roles, CrewAI supports fine‑grained entity-level permissions that restrict access to individual resources.
|
||||||
|
|
||||||
|
### Automation Visibility
|
||||||
|
|
||||||
|
Automations support visibility settings that restrict access by user or role. This is useful for:
|
||||||
|
|
||||||
- Keeping sensitive or experimental automations private
|
- Keeping sensitive or experimental automations private
|
||||||
- Managing visibility across large teams or external collaborators
|
- Managing visibility across large teams or external collaborators
|
||||||
- Testing automations in isolated contexts
|
- Testing automations in isolated contexts
|
||||||
|
|
||||||
Deployments can be configured as private, meaning only whitelisted users and roles will be able to:
|
Deployments can be configured as private, meaning only whitelisted users and roles will be able to interact with them.
|
||||||
|
|
||||||
- View the deployment
|
|
||||||
- Run it or interact with its API
|
|
||||||
- Access its logs, metrics, and settings
|
|
||||||
|
|
||||||
The organization owner always has access, regardless of visibility settings.
|
|
||||||
|
|
||||||
You can configure automation‑level access control in Automation → Settings → Visibility tab.
|
You can configure automation‑level access control in Automation → Settings → Visibility tab.
|
||||||
|
|
||||||
@@ -99,9 +165,92 @@ You can configure automation‑level access control in Automation → Settings
|
|||||||
|
|
||||||
<Frame>
|
<Frame>
|
||||||
<img src="/images/enterprise/visibility.png" alt="Automation Visibility settings in CrewAI AMP" />
|
<img src="/images/enterprise/visibility.png" alt="Automation Visibility settings in CrewAI AMP" />
|
||||||
|
|
||||||
</Frame>
|
</Frame>
|
||||||
|
|
||||||
|
### Deployment Permission Types
|
||||||
|
|
||||||
|
When granting entity-level access to a specific automation, you can assign these permission types:
|
||||||
|
|
||||||
|
| Permission | What it allows |
|
||||||
|
| :------------------- | :-------------------------------------------------- |
|
||||||
|
| `run` | Execute the automation and use its API |
|
||||||
|
| `traces` | View execution traces and logs |
|
||||||
|
| `manage_settings` | Edit, redeploy, rollback, or delete the automation |
|
||||||
|
| `human_in_the_loop` | Respond to human-in-the-loop (HITL) requests |
|
||||||
|
| `full_access` | All of the above |
|
||||||
|
|
||||||
|
### Entity-level RBAC for Other Resources
|
||||||
|
|
||||||
|
When entity-level RBAC is enabled, access to these resources can also be controlled per user or role:
|
||||||
|
|
||||||
|
| Resource | Controlled by | Description |
|
||||||
|
| :--------------------- | :------------------------------- | :---------------------------------------------------- |
|
||||||
|
| Environment variables | Entity RBAC feature flag | Restrict which roles/users can view or manage specific env vars |
|
||||||
|
| LLM connections | Entity RBAC feature flag | Restrict access to specific LLM provider configurations |
|
||||||
|
| Git repositories | Git repositories RBAC org setting | Restrict which roles/users can access specific connected repos |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Common Role Patterns
|
||||||
|
|
||||||
|
While CrewAI ships with Owner and Member roles, most teams benefit from creating custom roles. Here are common patterns:
|
||||||
|
|
||||||
|
### Developer Role
|
||||||
|
|
||||||
|
A role for team members who build and deploy automations but don't manage organization settings.
|
||||||
|
|
||||||
|
| Feature | Permission |
|
||||||
|
| :------------------------ | :--------- |
|
||||||
|
| `usage_dashboards` | Read |
|
||||||
|
| `crews_dashboards` | Manage |
|
||||||
|
| `invitations` | Read |
|
||||||
|
| `training_ui` | Read |
|
||||||
|
| `tools` | Manage |
|
||||||
|
| `agents` | Manage |
|
||||||
|
| `environment_variables` | Manage |
|
||||||
|
| `llm_connections` | Read |
|
||||||
|
| `default_settings` | No access |
|
||||||
|
| `organization_settings` | No access |
|
||||||
|
| `studio_projects` | Manage |
|
||||||
|
|
||||||
|
### Viewer / Stakeholder Role
|
||||||
|
|
||||||
|
A role for non-technical stakeholders who need to monitor automations and view results.
|
||||||
|
|
||||||
|
| Feature | Permission |
|
||||||
|
| :------------------------ | :--------- |
|
||||||
|
| `usage_dashboards` | Read |
|
||||||
|
| `crews_dashboards` | Read |
|
||||||
|
| `invitations` | No access |
|
||||||
|
| `training_ui` | Read |
|
||||||
|
| `tools` | Read |
|
||||||
|
| `agents` | Read |
|
||||||
|
| `environment_variables` | No access |
|
||||||
|
| `llm_connections` | No access |
|
||||||
|
| `default_settings` | No access |
|
||||||
|
| `organization_settings` | No access |
|
||||||
|
| `studio_projects` | Read |
|
||||||
|
|
||||||
|
### Ops / Platform Admin Role
|
||||||
|
|
||||||
|
A role for platform operators who manage infrastructure settings but may not build agents.
|
||||||
|
|
||||||
|
| Feature | Permission |
|
||||||
|
| :------------------------ | :--------- |
|
||||||
|
| `usage_dashboards` | Manage |
|
||||||
|
| `crews_dashboards` | Manage |
|
||||||
|
| `invitations` | Manage |
|
||||||
|
| `training_ui` | Read |
|
||||||
|
| `tools` | Read |
|
||||||
|
| `agents` | Read |
|
||||||
|
| `environment_variables` | Manage |
|
||||||
|
| `llm_connections` | Manage |
|
||||||
|
| `default_settings` | Manage |
|
||||||
|
| `organization_settings` | Read |
|
||||||
|
| `studio_projects` | Read |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
<Card title="Need Help?" icon="headset" href="mailto:support@crewai.com">
|
<Card title="Need Help?" icon="headset" href="mailto:support@crewai.com">
|
||||||
Contact our support team for assistance with RBAC questions.
|
Contact our support team for assistance with RBAC questions.
|
||||||
</Card>
|
</Card>
|
||||||
|
|||||||
194
docs/en/enterprise/features/sso.mdx
Normal file
194
docs/en/enterprise/features/sso.mdx
Normal file
@@ -0,0 +1,194 @@
|
|||||||
|
---
|
||||||
|
title: Single Sign-On (SSO)
|
||||||
|
icon: "key"
|
||||||
|
description: Configure enterprise SSO authentication for CrewAI Platform — SaaS and Factory
|
||||||
|
---
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
CrewAI Platform supports enterprise Single Sign-On (SSO) across both **SaaS (AMP)** and **Factory (self-hosted)** deployments. SSO enables your team to authenticate using your organization's existing identity provider, enforcing centralized access control, MFA policies, and user lifecycle management.
|
||||||
|
|
||||||
|
### Supported Providers
|
||||||
|
|
||||||
|
| Provider | SaaS | Factory | Protocol |
|
||||||
|
|---|---|---|---|
|
||||||
|
| **WorkOS** | ✅ (default) | ✅ | OAuth 2.0 / OIDC |
|
||||||
|
| **Microsoft Entra ID** (Azure AD) | ✅ (enterprise) | ✅ | OAuth 2.0 / SAML 2.0 |
|
||||||
|
| **Okta** | ✅ (enterprise) | ✅ | OAuth 2.0 / OIDC |
|
||||||
|
| **Auth0** | ✅ (enterprise) | ✅ | OAuth 2.0 / OIDC |
|
||||||
|
| **Keycloak** | — | ✅ | OAuth 2.0 / OIDC |
|
||||||
|
|
||||||
|
### Key Capabilities
|
||||||
|
|
||||||
|
- **SAML 2.0 and OAuth 2.0 / OIDC** protocol support
|
||||||
|
- **Device Authorization Grant** flow for CLI authentication
|
||||||
|
- **Role-Based Access Control (RBAC)** with custom roles and per-resource permissions
|
||||||
|
- **MFA enforcement** delegated to your identity provider
|
||||||
|
- **User provisioning** through IdP assignment (users/groups)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## SaaS SSO
|
||||||
|
|
||||||
|
### Default Authentication
|
||||||
|
|
||||||
|
CrewAI's managed SaaS platform (AMP) uses **WorkOS** as the default authentication provider. When you sign up at [app.crewai.com](https://app.crewai.com), authentication is handled through `login.crewai.com` — no additional SSO configuration is required.
|
||||||
|
|
||||||
|
### Enterprise Custom SSO
|
||||||
|
|
||||||
|
Enterprise SaaS customers can configure SSO with their own identity provider (Entra ID, Okta, Auth0). Contact your CrewAI account team to enable custom SSO for your organization. Once configured:
|
||||||
|
|
||||||
|
1. Your team members authenticate through your organization's IdP
|
||||||
|
2. Access control and MFA policies are enforced by your IdP
|
||||||
|
3. The CrewAI CLI automatically detects your SSO configuration via `crewai enterprise configure`
|
||||||
|
|
||||||
|
### CLI Defaults (SaaS)
|
||||||
|
|
||||||
|
| Setting | Default Value |
|
||||||
|
|---|---|
|
||||||
|
| `enterprise_base_url` | `https://app.crewai.com` |
|
||||||
|
| `oauth2_provider` | `workos` |
|
||||||
|
| `oauth2_domain` | `login.crewai.com` |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Factory SSO
|
||||||
|
|
||||||
|
Factory (self-hosted) deployments support SSO with the following identity providers:
|
||||||
|
|
||||||
|
- **Microsoft Entra ID** (Azure AD)
|
||||||
|
- **Okta**
|
||||||
|
- **Keycloak**
|
||||||
|
- **Auth0**
|
||||||
|
- **WorkOS**
|
||||||
|
|
||||||
|
Each provider requires registering an application in your IdP and configuring the corresponding environment variables in your Helm `values.yaml`.
|
||||||
|
|
||||||
|
<Note>
|
||||||
|
Detailed setup guides for each provider — including step-by-step IdP registration, environment variable reference, and CLI enablement — are available in your **Factory admin documentation** (shipped with your Factory installation).
|
||||||
|
</Note>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## CLI Authentication
|
||||||
|
|
||||||
|
The CrewAI CLI supports SSO authentication via the **Device Authorization Grant** flow. This allows developers to authenticate from their terminal without exposing credentials.
|
||||||
|
|
||||||
|
### Quick Setup
|
||||||
|
|
||||||
|
For Factory installations, the CLI can auto-configure all OAuth2 settings:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
crewai enterprise configure https://your-factory-url.app
|
||||||
|
```
|
||||||
|
|
||||||
|
This command fetches the SSO configuration from your Factory instance and sets all required CLI parameters automatically.
|
||||||
|
|
||||||
|
Then authenticate:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
crewai login
|
||||||
|
```
|
||||||
|
|
||||||
|
<Note>
|
||||||
|
Requires CrewAI CLI version **1.6.0** or higher for Entra ID, **0.159.0** or higher for Okta, and **1.9.0** or higher for Keycloak.
|
||||||
|
</Note>
|
||||||
|
|
||||||
|
### Manual CLI Configuration
|
||||||
|
|
||||||
|
If you need to configure the CLI manually, use `crewai config set`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Set the provider
|
||||||
|
crewai config set oauth2_provider okta
|
||||||
|
|
||||||
|
# Set provider-specific values
|
||||||
|
crewai config set oauth2_domain your-domain.okta.com
|
||||||
|
crewai config set oauth2_client_id your-client-id
|
||||||
|
crewai config set oauth2_audience api://default
|
||||||
|
|
||||||
|
# Set the enterprise base URL
|
||||||
|
crewai config set enterprise_base_url https://your-factory-url.app
|
||||||
|
```
|
||||||
|
|
||||||
|
### CLI Configuration Reference
|
||||||
|
|
||||||
|
| Setting | Description | Example |
|
||||||
|
|---|---|---|
|
||||||
|
| `enterprise_base_url` | Your CrewAI instance URL | `https://crewai.yourcompany.com` |
|
||||||
|
| `oauth2_provider` | Provider name | `workos`, `okta`, `auth0`, `entra_id`, `keycloak` |
|
||||||
|
| `oauth2_domain` | Provider domain | `your-domain.okta.com` |
|
||||||
|
| `oauth2_client_id` | OAuth2 client ID | `0oaqnwji7pGW7VT6T697` |
|
||||||
|
| `oauth2_audience` | API audience identifier | `api://default` |
|
||||||
|
|
||||||
|
View current configuration:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
crewai config list
|
||||||
|
```
|
||||||
|
|
||||||
|
### How Device Authorization Works
|
||||||
|
|
||||||
|
1. Run `crewai login` — the CLI requests a device code from your IdP
|
||||||
|
2. A verification URL and code are displayed in your terminal
|
||||||
|
3. Your browser opens to the verification URL
|
||||||
|
4. Enter the code and authenticate with your IdP credentials
|
||||||
|
5. The CLI receives an access token and stores it locally
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Role-Based Access Control (RBAC)
|
||||||
|
|
||||||
|
CrewAI Platform provides granular RBAC that integrates with your SSO provider. Permissions can be scoped to individual resources including dashboards, automations, and environment variables.
|
||||||
|
|
||||||
|
- **Predefined roles** come out of the box with standard permission sets
|
||||||
|
- **Custom roles** can be created with any combination of Read, Write, and Manage permissions
|
||||||
|
- **Per-resource assignment** — limit specific automations to individual users or roles
|
||||||
|
|
||||||
|
For detailed RBAC configuration, see the [RBAC documentation](/enterprise/features/rbac).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### CLI Login Fails (Device Authorization)
|
||||||
|
|
||||||
|
**Symptom:** `crewai login` returns an error or times out.
|
||||||
|
|
||||||
|
**Fix:**
|
||||||
|
- Verify that Device Authorization Grant is enabled in your IdP
|
||||||
|
- Check that your CLI is configured correctly: `crewai config list`
|
||||||
|
- Ensure your CrewAI CLI version meets the minimum requirements for your provider
|
||||||
|
|
||||||
|
### Token Validation Errors
|
||||||
|
|
||||||
|
**Symptom:** `Invalid token: Signature verification failed` or `401 Unauthorized` after login.
|
||||||
|
|
||||||
|
**Fix:**
|
||||||
|
- Verify that your OAuth2 audience and authorization server settings match your IdP configuration exactly
|
||||||
|
- For SaaS: contact your CrewAI account team if errors persist after verifying CLI settings
|
||||||
|
|
||||||
|
### 403 Forbidden After Login
|
||||||
|
|
||||||
|
**Symptom:** User authenticates successfully but gets 403 errors.
|
||||||
|
|
||||||
|
**Fix:**
|
||||||
|
- Check that the user is assigned to the CrewAI application in your IdP
|
||||||
|
- Verify the user has the appropriate role assignment in your IdP
|
||||||
|
|
||||||
|
### CLI Can't Reach CrewAI Instance
|
||||||
|
|
||||||
|
**Symptom:** `crewai enterprise configure` fails to connect.
|
||||||
|
|
||||||
|
**Fix:**
|
||||||
|
- Verify the instance URL is reachable from your machine
|
||||||
|
- Check that `enterprise_base_url` is set correctly: `crewai config list`
|
||||||
|
- Ensure TLS certificates are valid and trusted
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Next Steps
|
||||||
|
|
||||||
|
- [Installation Guide](/installation) — Get started with CrewAI
|
||||||
|
- [Quickstart](/quickstart) — Build your first crew
|
||||||
|
- [RBAC Setup](/enterprise/features/rbac) — Detailed role and permission management
|
||||||
@@ -4,6 +4,63 @@ description: "CrewAI의 제품 업데이트, 개선 사항 및 버그 수정"
|
|||||||
icon: "clock"
|
icon: "clock"
|
||||||
mode: "wide"
|
mode: "wide"
|
||||||
---
|
---
|
||||||
|
<Update label="2026년 3월 27일">
|
||||||
|
## v1.13.0rc1
|
||||||
|
|
||||||
|
[GitHub 릴리스 보기](https://github.com/crewAIInc/crewAI/releases/tag/1.13.0rc1)
|
||||||
|
|
||||||
|
## 변경 사항
|
||||||
|
|
||||||
|
### 문서
|
||||||
|
- v1.13.0a2의 변경 로그 및 버전 업데이트
|
||||||
|
|
||||||
|
## 기여자
|
||||||
|
|
||||||
|
@greysonlalonde
|
||||||
|
|
||||||
|
</Update>
|
||||||
|
|
||||||
|
<Update label="2026년 3월 27일">
|
||||||
|
## v1.13.0a2
|
||||||
|
|
||||||
|
[GitHub 릴리스 보기](https://github.com/crewAIInc/crewAI/releases/tag/1.13.0a2)
|
||||||
|
|
||||||
|
## 변경 사항
|
||||||
|
|
||||||
|
### 기능
|
||||||
|
- 릴리스 중 자동 업데이트 배포 테스트 리포지토리
|
||||||
|
- 기업 릴리스의 복원력 및 사용자 경험 개선
|
||||||
|
|
||||||
|
### 문서
|
||||||
|
- v1.13.0a1에 대한 변경 로그 및 버전 업데이트
|
||||||
|
|
||||||
|
## 기여자
|
||||||
|
|
||||||
|
@greysonlalonde
|
||||||
|
|
||||||
|
</Update>
|
||||||
|
|
||||||
|
<Update label="2026년 3월 27일">
|
||||||
|
## v1.13.0a1
|
||||||
|
|
||||||
|
[GitHub 릴리스 보기](https://github.com/crewAIInc/crewAI/releases/tag/1.13.0a1)
|
||||||
|
|
||||||
|
## 변경 사항
|
||||||
|
|
||||||
|
### 버그 수정
|
||||||
|
- Node를 LTS 22로 고정하여 문서 작업 흐름의 끊어진 링크 수정
|
||||||
|
- 기업 릴리스에서 새로 게시된 패키지의 uv 캐시 초기화
|
||||||
|
|
||||||
|
### 문서
|
||||||
|
- 포괄적인 RBAC 권한 매트릭스 및 배포 가이드 추가
|
||||||
|
- v1.12.2에 대한 변경 로그 및 버전 업데이트
|
||||||
|
|
||||||
|
## 기여자
|
||||||
|
|
||||||
|
@greysonlalonde, @iris-clawd, @joaomdmoura
|
||||||
|
|
||||||
|
</Update>
|
||||||
|
|
||||||
<Update label="2026년 3월 25일">
|
<Update label="2026년 3월 25일">
|
||||||
## v1.12.2
|
## v1.12.2
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,63 @@ description: "Atualizações de produto, melhorias e correções do CrewAI"
|
|||||||
icon: "clock"
|
icon: "clock"
|
||||||
mode: "wide"
|
mode: "wide"
|
||||||
---
|
---
|
||||||
|
<Update label="27 mar 2026">
|
||||||
|
## v1.13.0rc1
|
||||||
|
|
||||||
|
[Ver release no GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.13.0rc1)
|
||||||
|
|
||||||
|
## O que Mudou
|
||||||
|
|
||||||
|
### Documentação
|
||||||
|
- Atualizar changelog e versão para v1.13.0a2
|
||||||
|
|
||||||
|
## Contribuidores
|
||||||
|
|
||||||
|
@greysonlalonde
|
||||||
|
|
||||||
|
</Update>
|
||||||
|
|
||||||
|
<Update label="27 mar 2026">
|
||||||
|
## v1.13.0a2
|
||||||
|
|
||||||
|
[Ver release no GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.13.0a2)
|
||||||
|
|
||||||
|
## O que Mudou
|
||||||
|
|
||||||
|
### Recursos
|
||||||
|
- Repositório de teste de implantação de autoatualização durante o lançamento
|
||||||
|
- Melhorar a resiliência e a experiência do usuário na versão empresarial
|
||||||
|
|
||||||
|
### Documentação
|
||||||
|
- Atualizar changelog e versão para v1.13.0a1
|
||||||
|
|
||||||
|
## Contribuidores
|
||||||
|
|
||||||
|
@greysonlalonde
|
||||||
|
|
||||||
|
</Update>
|
||||||
|
|
||||||
|
<Update label="27 mar 2026">
|
||||||
|
## v1.13.0a1
|
||||||
|
|
||||||
|
[Ver release no GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.13.0a1)
|
||||||
|
|
||||||
|
## O que Mudou
|
||||||
|
|
||||||
|
### Correções de Bugs
|
||||||
|
- Corrigir links quebrados no fluxo de documentação fixando o Node na LTS 22
|
||||||
|
- Limpar o cache uv para pacotes recém-publicados na versão empresarial
|
||||||
|
|
||||||
|
### Documentação
|
||||||
|
- Adicionar uma matriz abrangente de permissões RBAC e guia de implantação
|
||||||
|
- Atualizar o changelog e a versão para v1.12.2
|
||||||
|
|
||||||
|
## Contributors
|
||||||
|
|
||||||
|
@greysonlalonde, @iris-clawd, @joaomdmoura
|
||||||
|
|
||||||
|
</Update>
|
||||||
|
|
||||||
<Update label="25 mar 2026">
|
<Update label="25 mar 2026">
|
||||||
## v1.12.2
|
## v1.12.2
|
||||||
|
|
||||||
|
|||||||
@@ -152,4 +152,4 @@ __all__ = [
|
|||||||
"wrap_file_source",
|
"wrap_file_source",
|
||||||
]
|
]
|
||||||
|
|
||||||
__version__ = "1.12.2"
|
__version__ = "1.13.0rc1"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ dependencies = [
|
|||||||
"pytube~=15.0.0",
|
"pytube~=15.0.0",
|
||||||
"requests~=2.32.5",
|
"requests~=2.32.5",
|
||||||
"docker~=7.1.0",
|
"docker~=7.1.0",
|
||||||
"crewai==1.12.2",
|
"crewai==1.13.0rc1",
|
||||||
"tiktoken~=0.8.0",
|
"tiktoken~=0.8.0",
|
||||||
"beautifulsoup4~=4.13.4",
|
"beautifulsoup4~=4.13.4",
|
||||||
"python-docx~=1.2.0",
|
"python-docx~=1.2.0",
|
||||||
|
|||||||
@@ -309,4 +309,4 @@ __all__ = [
|
|||||||
"ZapierActionTools",
|
"ZapierActionTools",
|
||||||
]
|
]
|
||||||
|
|
||||||
__version__ = "1.12.2"
|
__version__ = "1.13.0rc1"
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ Repository = "https://github.com/crewAIInc/crewAI"
|
|||||||
|
|
||||||
[project.optional-dependencies]
|
[project.optional-dependencies]
|
||||||
tools = [
|
tools = [
|
||||||
"crewai-tools==1.12.2",
|
"crewai-tools==1.13.0rc1",
|
||||||
]
|
]
|
||||||
embeddings = [
|
embeddings = [
|
||||||
"tiktoken~=0.8.0"
|
"tiktoken~=0.8.0"
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ def _suppress_pydantic_deprecation_warnings() -> None:
|
|||||||
|
|
||||||
_suppress_pydantic_deprecation_warnings()
|
_suppress_pydantic_deprecation_warnings()
|
||||||
|
|
||||||
__version__ = "1.12.2"
|
__version__ = "1.13.0rc1"
|
||||||
_telemetry_submitted = False
|
_telemetry_submitted = False
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ description = "{{name}} using crewAI"
|
|||||||
authors = [{ name = "Your Name", email = "you@example.com" }]
|
authors = [{ name = "Your Name", email = "you@example.com" }]
|
||||||
requires-python = ">=3.10,<3.14"
|
requires-python = ">=3.10,<3.14"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"crewai[tools]==1.12.2"
|
"crewai[tools]==1.13.0rc1"
|
||||||
]
|
]
|
||||||
|
|
||||||
[project.scripts]
|
[project.scripts]
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ description = "{{name}} using crewAI"
|
|||||||
authors = [{ name = "Your Name", email = "you@example.com" }]
|
authors = [{ name = "Your Name", email = "you@example.com" }]
|
||||||
requires-python = ">=3.10,<3.14"
|
requires-python = ">=3.10,<3.14"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"crewai[tools]==1.12.2"
|
"crewai[tools]==1.13.0rc1"
|
||||||
]
|
]
|
||||||
|
|
||||||
[project.scripts]
|
[project.scripts]
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ description = "Power up your crews with {{folder_name}}"
|
|||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
requires-python = ">=3.10,<3.14"
|
requires-python = ">=3.10,<3.14"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"crewai[tools]==1.12.2"
|
"crewai[tools]==1.13.0rc1"
|
||||||
]
|
]
|
||||||
|
|
||||||
[tool.crewai]
|
[tool.crewai]
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
"""CrewAI development tools."""
|
"""CrewAI development tools."""
|
||||||
|
|
||||||
__version__ = "1.12.2"
|
__version__ = "1.13.0rc1"
|
||||||
|
|||||||
@@ -156,6 +156,33 @@ def update_version_in_file(file_path: Path, new_version: str) -> bool:
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def update_pyproject_version(file_path: Path, new_version: str) -> bool:
|
||||||
|
"""Update the [project] version field in a pyproject.toml file.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
file_path: Path to pyproject.toml file.
|
||||||
|
new_version: New version string.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
True if version was updated, False otherwise.
|
||||||
|
"""
|
||||||
|
if not file_path.exists():
|
||||||
|
return False
|
||||||
|
|
||||||
|
content = file_path.read_text()
|
||||||
|
new_content = re.sub(
|
||||||
|
r'^(version\s*=\s*")[^"]+(")',
|
||||||
|
rf"\g<1>{new_version}\2",
|
||||||
|
content,
|
||||||
|
count=1,
|
||||||
|
flags=re.MULTILINE,
|
||||||
|
)
|
||||||
|
if new_content != content:
|
||||||
|
file_path.write_text(new_content)
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
_DEFAULT_WORKSPACE_PACKAGES: Final[list[str]] = [
|
_DEFAULT_WORKSPACE_PACKAGES: Final[list[str]] = [
|
||||||
"crewai",
|
"crewai",
|
||||||
"crewai-tools",
|
"crewai-tools",
|
||||||
@@ -1045,10 +1072,84 @@ def _update_enterprise_crewai_dep(pyproject_path: Path, version: str) -> bool:
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
_DEPLOYMENT_TEST_REPO: Final[str] = "crewAIInc/crew_deployment_test"
|
||||||
|
|
||||||
_PYPI_POLL_INTERVAL: Final[int] = 15
|
_PYPI_POLL_INTERVAL: Final[int] = 15
|
||||||
_PYPI_POLL_TIMEOUT: Final[int] = 600
|
_PYPI_POLL_TIMEOUT: Final[int] = 600
|
||||||
|
|
||||||
|
|
||||||
|
def _update_deployment_test_repo(version: str, is_prerelease: bool) -> None:
|
||||||
|
"""Update the deployment test repo to pin the new crewai version.
|
||||||
|
|
||||||
|
Clones the repo, updates the crewai[tools] pin in pyproject.toml,
|
||||||
|
regenerates the lockfile, commits, and pushes directly to main.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
version: New crewai version string.
|
||||||
|
is_prerelease: Whether this is a pre-release version.
|
||||||
|
"""
|
||||||
|
console.print(
|
||||||
|
f"\n[bold cyan]Updating {_DEPLOYMENT_TEST_REPO} to {version}[/bold cyan]"
|
||||||
|
)
|
||||||
|
|
||||||
|
with tempfile.TemporaryDirectory() as tmp:
|
||||||
|
repo_dir = Path(tmp) / "crew_deployment_test"
|
||||||
|
run_command(["gh", "repo", "clone", _DEPLOYMENT_TEST_REPO, str(repo_dir)])
|
||||||
|
console.print(f"[green]✓[/green] Cloned {_DEPLOYMENT_TEST_REPO}")
|
||||||
|
|
||||||
|
pyproject = repo_dir / "pyproject.toml"
|
||||||
|
content = pyproject.read_text()
|
||||||
|
new_content = re.sub(
|
||||||
|
r'"crewai\[tools\]==[^"]+"',
|
||||||
|
f'"crewai[tools]=={version}"',
|
||||||
|
content,
|
||||||
|
)
|
||||||
|
if new_content == content:
|
||||||
|
console.print(
|
||||||
|
"[yellow]Warning:[/yellow] No crewai[tools] pin found to update"
|
||||||
|
)
|
||||||
|
return
|
||||||
|
pyproject.write_text(new_content)
|
||||||
|
console.print(f"[green]✓[/green] Updated crewai[tools] pin to {version}")
|
||||||
|
|
||||||
|
lock_cmd = [
|
||||||
|
"uv",
|
||||||
|
"lock",
|
||||||
|
"--refresh-package",
|
||||||
|
"crewai",
|
||||||
|
"--refresh-package",
|
||||||
|
"crewai-tools",
|
||||||
|
]
|
||||||
|
if is_prerelease:
|
||||||
|
lock_cmd.append("--prerelease=allow")
|
||||||
|
|
||||||
|
max_retries = 10
|
||||||
|
for attempt in range(1, max_retries + 1):
|
||||||
|
try:
|
||||||
|
run_command(lock_cmd, cwd=repo_dir)
|
||||||
|
break
|
||||||
|
except subprocess.CalledProcessError:
|
||||||
|
if attempt == max_retries:
|
||||||
|
console.print(
|
||||||
|
f"[red]Error:[/red] uv lock failed after {max_retries} attempts"
|
||||||
|
)
|
||||||
|
raise
|
||||||
|
console.print(
|
||||||
|
f"[yellow]uv lock failed (attempt {attempt}/{max_retries}),"
|
||||||
|
f" retrying in {_PYPI_POLL_INTERVAL}s...[/yellow]"
|
||||||
|
)
|
||||||
|
time.sleep(_PYPI_POLL_INTERVAL)
|
||||||
|
console.print("[green]✓[/green] Lockfile updated")
|
||||||
|
|
||||||
|
run_command(["git", "add", "pyproject.toml", "uv.lock"], cwd=repo_dir)
|
||||||
|
run_command(
|
||||||
|
["git", "commit", "-m", f"chore: bump crewai to {version}"],
|
||||||
|
cwd=repo_dir,
|
||||||
|
)
|
||||||
|
run_command(["git", "push"], cwd=repo_dir)
|
||||||
|
console.print(f"[green]✓[/green] Pushed to {_DEPLOYMENT_TEST_REPO}")
|
||||||
|
|
||||||
|
|
||||||
def _wait_for_pypi(package: str, version: str) -> None:
|
def _wait_for_pypi(package: str, version: str) -> None:
|
||||||
"""Poll PyPI until a specific package version is available.
|
"""Poll PyPI until a specific package version is available.
|
||||||
|
|
||||||
@@ -1141,6 +1242,11 @@ def _release_enterprise(version: str, is_prerelease: bool, dry_run: bool) -> Non
|
|||||||
|
|
||||||
pyproject = pkg_dir / "pyproject.toml"
|
pyproject = pkg_dir / "pyproject.toml"
|
||||||
if pyproject.exists():
|
if pyproject.exists():
|
||||||
|
if update_pyproject_version(pyproject, version):
|
||||||
|
console.print(
|
||||||
|
f"[green]✓[/green] Updated version in: "
|
||||||
|
f"{pyproject.relative_to(repo_dir)}"
|
||||||
|
)
|
||||||
if update_pyproject_dependencies(
|
if update_pyproject_dependencies(
|
||||||
pyproject, version, extra_packages=list(_ENTERPRISE_EXTRA_PACKAGES)
|
pyproject, version, extra_packages=list(_ENTERPRISE_EXTRA_PACKAGES)
|
||||||
):
|
):
|
||||||
@@ -1159,7 +1265,35 @@ def _release_enterprise(version: str, is_prerelease: bool, dry_run: bool) -> Non
|
|||||||
_wait_for_pypi("crewai", version)
|
_wait_for_pypi("crewai", version)
|
||||||
|
|
||||||
console.print("\nSyncing workspace...")
|
console.print("\nSyncing workspace...")
|
||||||
run_command(["uv", "sync"], cwd=repo_dir)
|
sync_cmd = [
|
||||||
|
"uv",
|
||||||
|
"sync",
|
||||||
|
"--refresh-package",
|
||||||
|
"crewai",
|
||||||
|
"--refresh-package",
|
||||||
|
"crewai-tools",
|
||||||
|
"--refresh-package",
|
||||||
|
"crewai-files",
|
||||||
|
]
|
||||||
|
if is_prerelease:
|
||||||
|
sync_cmd.append("--prerelease=allow")
|
||||||
|
|
||||||
|
max_retries = 10
|
||||||
|
for attempt in range(1, max_retries + 1):
|
||||||
|
try:
|
||||||
|
run_command(sync_cmd, cwd=repo_dir)
|
||||||
|
break
|
||||||
|
except subprocess.CalledProcessError:
|
||||||
|
if attempt == max_retries:
|
||||||
|
console.print(
|
||||||
|
f"[red]Error:[/red] uv sync failed after {max_retries} attempts"
|
||||||
|
)
|
||||||
|
raise
|
||||||
|
console.print(
|
||||||
|
f"[yellow]uv sync failed (attempt {attempt}/{max_retries}),"
|
||||||
|
f" retrying in {_PYPI_POLL_INTERVAL}s...[/yellow]"
|
||||||
|
)
|
||||||
|
time.sleep(_PYPI_POLL_INTERVAL)
|
||||||
console.print("[green]✓[/green] Workspace synced")
|
console.print("[green]✓[/green] Workspace synced")
|
||||||
|
|
||||||
# --- branch, commit, push, PR ---
|
# --- branch, commit, push, PR ---
|
||||||
@@ -1175,7 +1309,7 @@ def _release_enterprise(version: str, is_prerelease: bool, dry_run: bool) -> Non
|
|||||||
run_command(["git", "push", "-u", "origin", branch_name], cwd=repo_dir)
|
run_command(["git", "push", "-u", "origin", branch_name], cwd=repo_dir)
|
||||||
console.print("[green]✓[/green] Branch pushed")
|
console.print("[green]✓[/green] Branch pushed")
|
||||||
|
|
||||||
run_command(
|
pr_url = run_command(
|
||||||
[
|
[
|
||||||
"gh",
|
"gh",
|
||||||
"pr",
|
"pr",
|
||||||
@@ -1192,6 +1326,7 @@ def _release_enterprise(version: str, is_prerelease: bool, dry_run: bool) -> Non
|
|||||||
cwd=repo_dir,
|
cwd=repo_dir,
|
||||||
)
|
)
|
||||||
console.print("[green]✓[/green] Enterprise bump PR created")
|
console.print("[green]✓[/green] Enterprise bump PR created")
|
||||||
|
console.print(f"[cyan]PR URL:[/cyan] {pr_url}")
|
||||||
|
|
||||||
_poll_pr_until_merged(branch_name, "enterprise bump PR", repo=enterprise_repo)
|
_poll_pr_until_merged(branch_name, "enterprise bump PR", repo=enterprise_repo)
|
||||||
|
|
||||||
@@ -1558,7 +1693,18 @@ def tag(dry_run: bool, no_edit: bool) -> None:
|
|||||||
is_flag=True,
|
is_flag=True,
|
||||||
help="Skip the enterprise release phase",
|
help="Skip the enterprise release phase",
|
||||||
)
|
)
|
||||||
def release(version: str, dry_run: bool, no_edit: bool, skip_enterprise: bool) -> None:
|
@click.option(
|
||||||
|
"--skip-to-enterprise",
|
||||||
|
is_flag=True,
|
||||||
|
help="Skip phases 1 & 2, run only the enterprise release phase",
|
||||||
|
)
|
||||||
|
def release(
|
||||||
|
version: str,
|
||||||
|
dry_run: bool,
|
||||||
|
no_edit: bool,
|
||||||
|
skip_enterprise: bool,
|
||||||
|
skip_to_enterprise: bool,
|
||||||
|
) -> None:
|
||||||
"""Full release: bump versions, tag, and publish a GitHub release.
|
"""Full release: bump versions, tag, and publish a GitHub release.
|
||||||
|
|
||||||
Combines bump and tag into a single workflow. Creates a version bump PR,
|
Combines bump and tag into a single workflow. Creates a version bump PR,
|
||||||
@@ -1571,11 +1717,19 @@ def release(version: str, dry_run: bool, no_edit: bool, skip_enterprise: bool) -
|
|||||||
dry_run: Show what would be done without making changes.
|
dry_run: Show what would be done without making changes.
|
||||||
no_edit: Skip editing release notes.
|
no_edit: Skip editing release notes.
|
||||||
skip_enterprise: Skip the enterprise release phase.
|
skip_enterprise: Skip the enterprise release phase.
|
||||||
|
skip_to_enterprise: Skip phases 1 & 2, run only the enterprise release phase.
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
check_gh_installed()
|
check_gh_installed()
|
||||||
|
|
||||||
if not skip_enterprise:
|
if skip_enterprise and skip_to_enterprise:
|
||||||
|
console.print(
|
||||||
|
"[red]Error:[/red] Cannot use both --skip-enterprise "
|
||||||
|
"and --skip-to-enterprise"
|
||||||
|
)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
if not skip_enterprise or skip_to_enterprise:
|
||||||
missing: list[str] = []
|
missing: list[str] = []
|
||||||
if not _ENTERPRISE_REPO:
|
if not _ENTERPRISE_REPO:
|
||||||
missing.append("ENTERPRISE_REPO")
|
missing.append("ENTERPRISE_REPO")
|
||||||
@@ -1594,6 +1748,15 @@ def release(version: str, dry_run: bool, no_edit: bool, skip_enterprise: bool) -
|
|||||||
cwd = Path.cwd()
|
cwd = Path.cwd()
|
||||||
lib_dir = cwd / "lib"
|
lib_dir = cwd / "lib"
|
||||||
|
|
||||||
|
is_prerelease = _is_prerelease(version)
|
||||||
|
|
||||||
|
if skip_to_enterprise:
|
||||||
|
_release_enterprise(version, is_prerelease, dry_run)
|
||||||
|
console.print(
|
||||||
|
f"\n[green]✓[/green] Enterprise release [bold]{version}[/bold] complete!"
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
if not dry_run:
|
if not dry_run:
|
||||||
console.print("Checking git status...")
|
console.print("Checking git status...")
|
||||||
check_git_clean()
|
check_git_clean()
|
||||||
@@ -1687,7 +1850,8 @@ def release(version: str, dry_run: bool, no_edit: bool, skip_enterprise: bool) -
|
|||||||
|
|
||||||
if not dry_run:
|
if not dry_run:
|
||||||
_create_tag_and_release(tag_name, release_notes, is_prerelease)
|
_create_tag_and_release(tag_name, release_notes, is_prerelease)
|
||||||
_trigger_pypi_publish(tag_name, wait=not skip_enterprise)
|
_trigger_pypi_publish(tag_name, wait=True)
|
||||||
|
_update_deployment_test_repo(version, is_prerelease)
|
||||||
|
|
||||||
if not skip_enterprise:
|
if not skip_enterprise:
|
||||||
_release_enterprise(version, is_prerelease, dry_run)
|
_release_enterprise(version, is_prerelease, dry_run)
|
||||||
|
|||||||
Reference in New Issue
Block a user