Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ sidebar_position: 5
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import GlossTerm from '@site/src/components/GlossTerm';
import Partial_OpeningTheWorkspaceSettingsPage from '@site/src/partials/opening-the-workspace-settings-page.mdx';

Bitrise offers hundreds of integrations for all CI/CD purposes, allowing complex workflows. It takes time to become familiar with our <GlossTerm baseform="step">Steps</GlossTerm>, our <GlossTerm baseform="stack">stacks</GlossTerm>, or the intricacies of <GlossTerm baseform="configuration yaml">configuration YAML</GlossTerm> - time that you could spend developing your app. To speed up the process, we introduced the AI configuration assistant.

Expand All @@ -15,6 +16,31 @@ The AI config assistant is a chat-based assistant built into the Bitrise <GlossT
The assistant can also explain, in plain language, a given Workflow or Pipeline, including what each Step does. It can also suggest improvements. You can request modifications and improvements for an already existing Workflow or Pipeline even if it was created manually.


## Enabling the AI configuration assistant

The AI configuration assistant requires two separate toggles to be enabled: one at the workspace level and one at the project level.

1. <Partial_OpeningTheWorkspaceSettingsPage />
1. Select **AI settings**.
1. Enable the **Enable AI features** toggle. This turns on Bitrise AI for the workspace. Individual AI features still need to be enabled separately in each project's settings.

![Workspace settings — AI settings page with the Enable AI features toggle](/img/workflows-and-pipelines/2026-07-03-workspace-settings-ai-settings.png)

1. Open your project on the Bitrise CI page and click **Project settings**.
1. Select **Bitrise AI** in the left navigation.
1. Under **Workflows and pipelines**, enable the **Configuration generator** toggle.

![Project settings — Bitrise AI page with the Configuration generator toggle enabled](/img/workflows-and-pipelines/2026-07-03-project-settings-bitrise-ai-configuration-generator.png)

:::note[AI credits]

AI features consume monthly AI credits. The number of credits available depends on your plan. You can check your remaining credits on the **Bitrise AI** page in Project settings.

:::

Once both toggles are enabled, the AI configuration assistant is available in the Workflow Editor.


## Explaining a Workflow or a Pipeline

You can get the AI assistant to explain how any part of your Bitrise configuration works and it can suggest improvements to existing Workflows and Pipelines.
Expand All @@ -31,6 +57,13 @@ Use the Bitrise AI configuration assistant to create a fully validated, working
1. Open the Workflow Editor.
1. On the top bar, click **Ask AI**.
1. In the **Assistant** window, select **Create a new Workflow**.

:::note

You can also open the Workflow selector dropdown and click **Create Workflow with AI** at the bottom of the list.

:::

1. Add your prompt in the input field.

Use plain language to explain what you need the Workflow or Pipeline to do. You don't have to use Step names or Bitrise-specific terms. The more detailed your prompt is, the better the AI output.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ You can keep using project-level and Workflow-level [Environment Variables](/en/

**Can I rerun a failed Pipeline?**

Yes. Go to the **Pipeline details** page, and click the **Rerun** button. From there you have the option to rerun failed and subsequent Workflows or to rerun the entire Pipeline.
Yes. Go to the **Pipeline details** page, and click the **Rebuild** button. From there you have the option to rebuild unsuccessful Workflows or to rebuild the entire Pipeline. Both options are also available with remote access.

**Does the Rolling Builds feature work on Pipelines?**

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -412,7 +412,7 @@ To set up the configuration:

:::important[Value limitations]

The value has to be a fixed number. You can only use integers. The maximum accepted value is 50. You can use an Environment Variable as the value.
The value has to be a fixed number. You can only use integers. The maximum accepted value is 200. You can use an Environment Variable as the value.

You can use an Environment Variable as the value: it allows you to dynamically calculate the optimal number of parallel copies during the build.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,29 +5,31 @@ sidebar_position: 7
slug: /bitrise-ci/workflows-and-pipelines/build-pipelines/converting-a-pipeline-with-stages-into-a-graph-pipeline
---

You can convert your old, existing Pipelines that contain stages into graph Pipelines without stages. This unlocks the full benefits of using Pipelines: faster build times, more granular configuration, and a full editing capability in the GUI of the Workflow Editor.
You can convert your old, existing Pipelines that contain stages into graph Pipelines without stages. This unlocks the full benefits of using Pipelines: faster build times, more granular configuration, and a full editing capability in the Workflow Editor.

To convert a Pipeline, you need to create a new Pipeline based on an old Pipeline. The old Pipeline won't be removed and it will still work if you need it so your builds will not break. You can switch to using the new Pipeline when all your configurations are ready for it.
Pipelines with stages are read-only in the Workflow Editor. To edit them, you need to convert them first. The original Pipeline won't be removed and will still work after the conversion, so your builds won't break. You can switch to using the new Pipeline when all your configurations are ready.

:::note

Be aware that all new Pipeline features and improvements will only be available for graph Pipelines. Pipelines with stages will have no further features added.
All new Pipeline features and improvements will only be available for graph Pipelines. Pipelines with stages will have no further features added.

:::

To convert a Pipeline
To convert a Pipeline:

1. Open the Workflow Editor.
1. Open the dropdown menu at the top.
1. Click **Create Pipeline**.
1. Name your new Pipeline.
1. In the **Based on** dropdown menu, select a Pipeline that contains stages.
1. Click **Save changes**.
1. Open the Workflow Editor and select the Pipeline you want to convert.
1. Click **Convert Pipeline** in the banner at the top of the canvas.

![Convert Pipeline banner](/img/workflows-and-pipelines/2026-07-06-convert-pipeline-banner.png)

Bitrise creates a converted copy named `<original-id>_converted` and selects it automatically.

1. Review and adjust the converted Pipeline as needed.

:::important[No cycles allowed]

If your Pipeline conversion creates a cycle in the graph, you won't be able to save the Pipeline. You have to manually edit the configuration to remove the cycle, as they aren't allowed.
If your Pipeline conversion creates a cycle in the graph, you won't be able to save the Pipeline. You have to manually edit the configuration to remove the cycle.

:::

That's it: the new Pipeline will no longer have stages but will contain the same Workflows as the old one.
1. Click **Save changes** in the top right corner.
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ You can run Pipeline builds the same way you would run builds of standalone Work

- [You can start Pipeline builds manually](/en/bitrise-ci/run-and-analyze-builds/starting-builds/starting-builds-manually).
- [Schedule Pipeline builds](/en/bitrise-ci/run-and-analyze-builds/starting-builds/scheduling-builds).
- [Trigger Pipeline builds automatically](/en/bitrise-ci/run-and-analyze-builds/build-triggers/configuring-build-triggers). For now, Pipeline triggers must be configured in YAML, however: [YAML syntax for build triggers](/en/bitrise-ci/run-and-analyze-builds/build-triggers/yaml-syntax-for-build-triggers).
- [Trigger Pipeline builds automatically](/en/bitrise-ci/run-and-analyze-builds/build-triggers/configuring-build-triggers). You can configure Pipeline triggers in the Workflow Editor or in YAML: [YAML syntax for build triggers](/en/bitrise-ci/run-and-analyze-builds/build-triggers/yaml-syntax-for-build-triggers).

Pipeline builds are capable of sending build status reports: a Pipeline build will send a status report of the Pipeline itself and of any Steps that export test results: [Reporting the build status to your Git hosting provider](/en/bitrise-ci/configure-builds/configuring-build-settings/reporting-the-build-status-to-your-git-hosting-provider).

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ To test this configuration in a new Bitrise example project, do the following:
1. Enter `debug` as the specified variant.
1. Continue through the prompts as normal — no changes are needed.
1. Open the new Bitrise <GlossTerm baseform="project">project</GlossTerm>’s <GlossTerm baseform="workflow editor">Workflow Editor</GlossTerm>.
1. Go to the **<GlossTerm baseform="bitrise.yml">bitrise.yml</GlossTerm>** tab, and replace the existing yaml contents with the contents of the example `[bitrise.yml](https://github.com/bitrise-io/workflow-recipes/blob/main/recipes/android-parallel-ui-tests-on-multiple-devices.md#bitriseyml)`.
1. Switch to **YAML** at the top of the Workflow Editor, and replace the existing yaml contents with the contents of the example `[bitrise.yml](https://github.com/bitrise-io/workflow-recipes/blob/main/recipes/android-parallel-ui-tests-on-multiple-devices.md#bitriseyml)`.
1. Click the **Start/Schedule a Build** button, and select the `ui_test_on_multiple_devices` option in the **Workflow, Pipeline** dropdown menu at the bottom of the popup.

### bitrise.yml
Expand Down Expand Up @@ -68,7 +68,7 @@ This Pipeline contains one Stage — `stage_unit_and_ui_test` — that executes
1. Enter `debug` as the specified variant.
1. Continue through the prompts as normal — no changes are needed.
1. Open the new Bitrise project’s Workflow Editor.
1. Go to the **bitrise.yml** tab, and replace the existing yaml contents with the contents of the example `[bitrise.yml](https://github.com/bitrise-io/workflow-recipes/blob/main/recipes/android-parallel-unit-and-ui-tests.md#bitriseyml)`.
1. Switch to **YAML** at the top of the Workflow Editor, and replace the existing yaml contents with the contents of the example `[bitrise.yml](https://github.com/bitrise-io/workflow-recipes/blob/main/recipes/android-parallel-unit-and-ui-tests.md#bitriseyml)`.
1. Click the **Start/Schedule a Build** button, and select the `pipeline_unit_and_ui_test` option in the **Workflow, Pipeline** dropdown menu at the bottom of the popup.

### bitrise.yml
Expand Down Expand Up @@ -100,7 +100,7 @@ This Pipeline contains one Stage — stage_unit_test — that executes two Workf
1. Enter `debug` as the specified variant.
1. Continue through the prompts as normal — no changes are needed.
1. Open the new Bitrise project’s Workflow Editor.
1. Go to the **bitrise.yml** tab, and replace the existing yaml contents with the contents of the example `[bitrise.yml](https://github.com/bitrise-io/workflow-recipes/blob/main/recipes/android-parallel-testing-unit-test-shards.md#bitriseyml)`.
1. Switch to **YAML** at the top of the Workflow Editor, and replace the existing yaml contents with the contents of the example `[bitrise.yml](https://github.com/bitrise-io/workflow-recipes/blob/main/recipes/android-parallel-testing-unit-test-shards.md#bitriseyml)`.
1. Click the **Start/Schedule a Build** button, and select the `pipeline_unit_test` option in the **Workflow, Pipeline** dropdown menu at the bottom of the popup.

### bitrise.yml
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ The example Pipeline config showcases how to run all the test cases of the proje
There is no limitation on the number of files deployed to **Artifacts** per build. There is a limitation, however, on the file size which is 2GB per file.

:::
1. `run_tests_on_simulators` Stage runs three Workflows in parallel: `run_tests_iPad`, `run_tests_iPhone`, and `run_tests_iPod`. Both of these Workflows use the new `xcode-test-without-building` Step, which executes the tests based on the previous stage built test bundle. The pre-built test bundle is pulled by the `_pull_test_bundle`utility Workflow.
1. `run_tests_on_simulators` Stage runs three Workflows in parallel: `run_tests_iPad`, `run_tests_iPhone`, and `run_tests_iPod`. All three of these Workflows use the new `xcode-test-without-building` Step, which executes the tests based on the previous stage built test bundle. The pre-built test bundle is pulled by the `_pull_test_bundle`utility Workflow.

![iOS_example_modified.png](/img/_paligo/uuid-5b325bb0-a98a-bd3d-943f-c7d26897e362.png)

Expand Down Expand Up @@ -74,7 +74,7 @@ The example Pipeline config showcases how to run different test groups in parall
`run_tests_groups` Pipeline runs two Stages sequentially:

1. `build_tests` Stage that runs the `build_tests` Workflow. This Workflow git clones the sample project and runs the `xcode-build-for-test` Step to build the target and associated tests. The built test bundle is transferred to the next Stage (`run_tests_groups`) via the `deploy-to-bitrise-io` Step.
1. `run_tests_groups` Stage runs two Workflows in parallel: `run_ui_tests` and `run_unit_tests`. Both of these Workflows use the new x`code-test-without-building` Step, which executes the tests based on the previous Stage built test bundle. The pre-built test bundle is pulled by the `_pull_test_bundle` utility Workflow.
1. `run_tests_groups` Stage runs two Workflows in parallel: `run_ui_tests` and `run_unit_tests`. Both of these Workflows use the new `xcode-test-without-building` Step, which executes the tests based on the previous Stage built test bundle. The pre-built test bundle is pulled by the `_pull_test_bundle` utility Workflow.

![iOS_example_2.png](/img/_paligo/uuid-789ed335-aeab-b87c-6045-270c5e87a641.png)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ Build Steps and test Steps have specific requirements:

:::

When adding a new project on the website or initializing a project on your own machine, the [bitrise-init](https://github.com/bitrise-core/bitrise-init) tool iterates through every scanner, calls the scanner interface methods on each of them and collects their outputs. Based on these outputs, a basic configuration is generated.
When adding a new project on the website or initializing a project on your own machine, the [bitrise-init](https://github.com/bitrise-io/bitrise-init) tool iterates through every scanner, calls the scanner interface methods on each of them and collects their outputs. Based on these outputs, a basic configuration is generated.

The possible Workflows are described in a scan result model. The model consists of:

Expand All @@ -34,8 +34,8 @@ Here is the basic structure of the model, in YAML:

```yaml
options:
DETECTED_PLATFORM_1: OptionModel
DETECTED_PLATFORM_2: OptionModel
DETECTED_PLATFORM_1: OptionNode
DETECTED_PLATFORM_2: OptionNode
...

configs:
Expand Down Expand Up @@ -80,20 +80,25 @@ Selecting an option can start a chain: it can lead to different options being pr

### The option model

The `OptionModel` represents an input option. It looks like this in Go:
The `OptionNode` represents an input option. It looks like this in Go:

```go
// OptionModel ...
type OptionModel struct {
Title string
EnvKey string
// OptionNode ...
type OptionNode struct {
Title string
Summary string
EnvKey string

ChildOptionMap map[string]*OptionModel
Config string
ChildOptionMap map[string]*OptionNode

Icons []string
Components []string
Head *OptionNode
}
```

- Title: the human readable name of the input.
- Summary: a short description of the option.
- EnvKey: it represents the input’s key in the step model.
- ChildOptionMap: the map of the subsequent options if the user chooses a given value for the option.

Expand Down Expand Up @@ -167,18 +172,18 @@ An options chain’s last `options` cannot have a value_map.

## Scanners

Scanners generate the possible `options` chains and the possible workflows for the `options` per project type. The `ActiveScanner` variable holds each scanner implementation. Every specific scanner implements the `ScannerInterface`.
Scanners generate the possible `options` chains and the possible workflows for the `options` per project type. Scanners are returned by the `ProjectScanners()` and `AutomationToolScanners()` functions. Every specific scanner implements the `ScannerInterface`.

```go
// ScannerInterface ...
type ScannerInterface interface {
Name() string
DetectPlatform(string) (bool, error)

Options() (models.OptionModel, models.Warnings, error)
Configs() (models.BitriseConfigMap, error)
Options() (models.OptionNode, models.Warnings, models.Icons, error)
Configs(sshKeyActivation models.SSHKeyActivation) (models.BitriseConfigMap, error)

DefaultOptions() models.OptionModel
DefaultOptions() models.OptionNode
DefaultConfigs() (models.BitriseConfigMap, error)

ExcludedScannerNames() []string
Expand All @@ -187,9 +192,9 @@ type ScannerInterface interface {

- `Name() string`: This method is used for logging and storing the scanner output (warnings, options and configs). The scanner output is stored in `map[SCANNER_NAME]OUTPUT`. For example, the `options` for an iOS project is stored in `optionsMap[ios]options`.
- `DetectPlatform(string) (bool, error)`: This method is used to determine if the given search directory contains the project type or not.
- `Options() (models.OptionModel, models.Warnings, error)`: This method is used to generate option branches for the project. Each branch should define a complete and valid option set to build the final bitrise config model. Every option branch’s last `Options` has to store a configuration id, which will be filled with the selected options.
- `Configs() (models.BitriseConfigMap, error)`: This method is used to generate the possible configs. BitriseConfigMap’s each element is a bitrise config template which will be fulfilled with the user selected option values.
- `DefaultOptions() models.OptionModel and DefaultConfigs() (models.BitriseConfigMap, error)` : These methods are used to generate the options and configs without scanning the given project. In this case every required step input value is provided by the user. This way even if a scanner fails, the user has an option to get started.
- `Options() (models.OptionNode, models.Warnings, models.Icons, error)`: This method is used to generate option branches for the project. Each branch should define a complete and valid option set to build the final bitrise config model. Every option branch’s last `Options` has to store a configuration id, which will be filled with the selected options.
- `Configs(sshKeyActivation models.SSHKeyActivation) (models.BitriseConfigMap, error)`: This method is used to generate the possible configs. BitriseConfigMap’s each element is a bitrise config template which will be fulfilled with the user selected option values.
- `DefaultOptions() models.OptionNode` and `DefaultConfigs() (models.BitriseConfigMap, error)`: These methods are used to generate the options and configs without scanning the given project. In this case every required step input value is provided by the user. This way even if a scanner fails, the user has an option to get started.

### Testing a scanner

Expand Down
Loading
Loading