[gnome-builder] foundry: rename IdeBuildPipeline and IdeBuildStage



commit 9d8f41a3c8a9bec0c58455a088d313971e3d8a3d
Author: Christian Hergert <chergert redhat com>
Date:   Tue Jan 15 12:53:15 2019 -0800

    foundry: rename IdeBuildPipeline and IdeBuildStage
    
    This renames IdeBuildPipeline to IdePipeline and IdeBuildStage to
    IdePipelineStage. Additionally, IdeBuildPhase is now IdePipelinePhase.
    
    This should help in contributors understanding the difference between
    the IdeBuildSystem components and the production pipeline and it's
    components.
    
    I didn't try very hard to keep whitespace nice, because we'll probably
    do a large round of that with automation tools later and I'd rather do
    that as a single pass.
    
    Also, I renamed the execute APIs to build since execute didn't really
    make sense in the concepts of a build pipeline that can
    build/rebuild/clean.
    
    I would not be surprised if there is a bit of fallout from this, so better
    to get it in now than later.

 doc/help/plugins/building/pipeline.rst             |   28 +-
 src/libide/foundry/ide-build-manager.c             |  180 +--
 src/libide/foundry/ide-build-manager.h             |   12 +-
 src/libide/foundry/ide-build-pipeline-addin.c      |  108 --
 src/libide/foundry/ide-build-pipeline.h            |  223 ----
 src/libide/foundry/ide-build-private.h             |   32 +-
 src/libide/foundry/ide-build-stage-private.h       |   41 -
 src/libide/foundry/ide-build-stage.h               |  215 ----
 src/libide/foundry/ide-build-system.c              |   20 +-
 src/libide/foundry/ide-build-system.h              |    4 +-
 src/libide/foundry/ide-deploy-strategy.c           |   18 +-
 src/libide/foundry/ide-deploy-strategy.h           |    8 +-
 src/libide/foundry/ide-device-manager.c            |   20 +-
 src/libide/foundry/ide-device-manager.h            |    2 +-
 src/libide/foundry/ide-foundry-types.h             |   16 +-
 src/libide/foundry/ide-pipeline-addin.c            |  108 ++
 ...build-pipeline-addin.h => ide-pipeline-addin.h} |   28 +-
 ...ge-launcher.c => ide-pipeline-stage-launcher.c} |  222 ++--
 ...ge-launcher.h => ide-pipeline-stage-launcher.h} |   30 +-
 ...-stage-mkdirs.c => ide-pipeline-stage-mkdirs.c} |   92 +-
 ...-stage-mkdirs.h => ide-pipeline-stage-mkdirs.h} |   24 +-
 src/libide/foundry/ide-pipeline-stage-private.h    |   41 +
 ...ge-transfer.c => ide-pipeline-stage-transfer.c} |  106 +-
 ...ge-transfer.h => ide-pipeline-stage-transfer.h} |   12 +-
 .../{ide-build-stage.c => ide-pipeline-stage.c}    |  608 ++++-----
 src/libide/foundry/ide-pipeline-stage.h            |  215 ++++
 .../{ide-build-pipeline.c => ide-pipeline.c}       | 1352 ++++++++++----------
 src/libide/foundry/ide-pipeline.h                  |  214 ++++
 src/libide/foundry/ide-run-manager.c               |    2 +-
 src/libide/foundry/ide-runtime-manager.c           |   12 +-
 src/libide/foundry/ide-runtime-private.h           |    2 +-
 src/libide/foundry/ide-runtime-provider.c          |   14 +-
 src/libide/foundry/ide-runtime-provider.h          |    4 +-
 src/libide/foundry/ide-test-manager.c              |    4 +-
 src/libide/foundry/ide-test-provider.c             |    8 +-
 src/libide/foundry/ide-test-provider.h             |    4 +-
 src/libide/foundry/ide-toolchain-manager.c         |   12 +-
 src/libide/foundry/ide-toolchain-private.h         |    2 +-
 src/libide/foundry/libide-foundry.h                |   18 +-
 src/libide/foundry/meson.build                     |   30 +-
 src/libide/terminal/ide-terminal-page.c            |   10 +-
 src/plugins/autotools/autotools-plugin.c           |    2 +-
 .../autotools/ide-autotools-autogen-stage.c        |   34 +-
 .../autotools/ide-autotools-autogen-stage.h        |    2 +-
 src/plugins/autotools/ide-autotools-build-system.c |   20 +-
 .../ide-autotools-build-target-provider.c          |    8 +-
 src/plugins/autotools/ide-autotools-make-stage.c   |   66 +-
 src/plugins/autotools/ide-autotools-make-stage.h   |    2 +-
 .../autotools/ide-autotools-makecache-stage.c      |   62 +-
 .../autotools/ide-autotools-makecache-stage.h      |    4 +-
 .../autotools/ide-autotools-pipeline-addin.c       |   98 +-
 src/plugins/buildconfig/buildconfig-plugin.c       |    2 +-
 .../buildconfig/ide-buildconfig-pipeline-addin.c   |   28 +-
 src/plugins/buildui/gbp-buildui-log-pane.c         |   24 +-
 src/plugins/buildui/gbp-buildui-log-pane.h         |    2 +-
 src/plugins/buildui/gbp-buildui-omni-bar-section.c |   18 +-
 src/plugins/buildui/gbp-buildui-pane.c             |   50 +-
 src/plugins/buildui/gbp-buildui-pane.h             |    2 +-
 src/plugins/buildui/gbp-buildui-stage-row.c        |   24 +-
 src/plugins/buildui/gbp-buildui-stage-row.h        |    4 +-
 src/plugins/buildui/gbp-buildui-tree-addin.c       |    4 +-
 src/plugins/buildui/gbp-buildui-workspace-addin.c  |    2 +-
 src/plugins/cargo/cargo_plugin.py                  |    8 +-
 src/plugins/clang/ide-clang-rename-provider.c      |    4 +-
 src/plugins/cmake/cmake-plugin.c                   |    2 +-
 .../cmake/gbp-cmake-build-stage-cross-file.c       |   40 +-
 .../cmake/gbp-cmake-build-stage-cross-file.h       |    4 +-
 src/plugins/cmake/gbp-cmake-build-system.c         |   10 +-
 src/plugins/cmake/gbp-cmake-pipeline-addin.c       |   80 +-
 .../code-index/gbp-code-index-workbench-addin.c    |   14 +-
 src/plugins/deviced/gbp-deviced-deploy-strategy.c  |   38 +-
 src/plugins/flatpak/flatpak-plugin.c               |    2 +-
 .../flatpak/gbp-flatpak-dependency-updater.c       |   12 +-
 src/plugins/flatpak/gbp-flatpak-download-stage.c   |   30 +-
 src/plugins/flatpak/gbp-flatpak-download-stage.h   |    2 +-
 src/plugins/flatpak/gbp-flatpak-pipeline-addin.c   |  166 +--
 src/plugins/flatpak/gbp-flatpak-runtime-provider.c |    8 +-
 src/plugins/flatpak/gbp-flatpak-runtime.c          |    6 +-
 src/plugins/flatpak/gbp-flatpak-util.c             |    6 +-
 src/plugins/flatpak/gbp-flatpak-util.h             |    2 +-
 src/plugins/gcc/gbp-gcc-pipeline-addin.c           |   20 +-
 src/plugins/gcc/gcc-plugin.c                       |    2 +-
 src/plugins/gdb/gbp-gdb-debugger.c                 |    4 +-
 src/plugins/git/gbp-git-dependency-updater.c       |   14 +-
 src/plugins/git/gbp-git-pipeline-addin.c           |   22 +-
 src/plugins/git/gbp-git-submodule-stage.c          |   40 +-
 src/plugins/git/gbp-git-submodule-stage.h          |    2 +-
 src/plugins/git/git-plugin.c                       |    2 +-
 src/plugins/glade/gbp-glade-workbench-addin.c      |   14 +-
 src/plugins/gradle/gradle_plugin.py                |    8 +-
 src/plugins/make/make_plugin.py                    |   14 +-
 src/plugins/maven/maven_plugin.py                  |   10 +-
 .../meson/gbp-meson-build-stage-cross-file.c       |   42 +-
 .../meson/gbp-meson-build-stage-cross-file.h       |    4 +-
 src/plugins/meson/gbp-meson-build-system.c         |   18 +-
 .../meson/gbp-meson-build-target-provider.c        |   12 +-
 src/plugins/meson/gbp-meson-pipeline-addin.c       |   94 +-
 src/plugins/meson/gbp-meson-test-provider.c        |   38 +-
 src/plugins/meson/meson-plugin.c                   |    2 +-
 src/plugins/mono/mono_plugin.py                    |    2 +-
 src/plugins/notification/ide-notification-addin.c  |   46 +-
 src/plugins/notification/notification-plugin.c     |    2 +-
 src/plugins/npm/npm_plugin.py                      |    6 +-
 src/plugins/phpize/phpize_plugin.py                |   22 +-
 .../terminal/gbp-terminal-workspace-addin.c        |    4 +-
 src/plugins/vala-pack/ide-vala-pipeline-addin.vala |    6 +-
 src/plugins/vala-pack/vala-pack-plugin.vala        |    2 +-
 107 files changed, 2689 insertions(+), 2756 deletions(-)
---
diff --git a/doc/help/plugins/building/pipeline.rst b/doc/help/plugins/building/pipeline.rst
index af70bac4e..513000662 100644
--- a/doc/help/plugins/building/pipeline.rst
+++ b/doc/help/plugins/building/pipeline.rst
@@ -5,7 +5,7 @@ Extending the Build Pipeline
 Builder uses the concept of a "Build Pipeline" to build a project. The build
 pipeline consistes of multiple "phases" and build "stages" run in a given phase.
 
-For example, in the ``Ide.BuildPhase.DOWNLAODS`` phase, you might have a stage
+For example, in the ``Ide.PipelinePhase.DOWNLAODS`` phase, you might have a stage
 that downloads and installs the dependencies for your project. The Flatpak
 extension does this when building Flatpak-based project configurations.
 
@@ -15,21 +15,21 @@ executed in exactly this sequence up to the requested phase.
 Build Phases
 ============
 
-  - ``Ide.BuildPhase.PREPARE`` is the first phase of the build pipeline. Use this to create necessary 
directories and other preparation steps.
-  - ``Ide.BuildPhase.DOWNLOADS`` should be used to download and cache any build artifacts that are needed 
during the build.
-  - ``Ide.BuildPhase.DEPENDENCIES`` should build any dependencies that are needed to successfully build the 
project.
-  - ``Ide.BuildPhase.AUTOGEN`` should generate any necessary project files. Contrast this with the 
``Ide.BuildPhase.CONFIGURE`` phase which runs the configuration scripts.
-  - ``Ide.BuildPhase.CONFIGURE`` should run configuration scripts such as ``./configure``, ``meson``, or 
``cmake``.
-  - ``Ide.BuildPhase.BUILD`` should perform the incremental build process such as ``make`` or ``ninja``.
-  - ``Ide.BuildPhase.INSTALL`` should install the project to the configured prefix.
-  - ``Ide.BuildPhase.EXPORT`` should be used to attach export hooks such as buliding a Flatpak bundle, 
Debian, or RPM package.
+  - ``Ide.PipelinePhase.PREPARE`` is the first phase of the build pipeline. Use this to create necessary 
directories and other preparation steps.
+  - ``Ide.PipelinePhase.DOWNLOADS`` should be used to download and cache any build artifacts that are needed 
during the build.
+  - ``Ide.PipelinePhase.DEPENDENCIES`` should build any dependencies that are needed to successfully build 
the project.
+  - ``Ide.PipelinePhase.AUTOGEN`` should generate any necessary project files. Contrast this with the 
``Ide.PipelinePhase.CONFIGURE`` phase which runs the configuration scripts.
+  - ``Ide.PipelinePhase.CONFIGURE`` should run configuration scripts such as ``./configure``, ``meson``, or 
``cmake``.
+  - ``Ide.PipelinePhase.BUILD`` should perform the incremental build process such as ``make`` or ``ninja``.
+  - ``Ide.PipelinePhase.INSTALL`` should install the project to the configured prefix.
+  - ``Ide.PipelinePhase.EXPORT`` should be used to attach export hooks such as buliding a Flatpak bundle, 
Debian, or RPM package.
 
 Additionally, there are phases which have special meaning.
 
-  - ``Ide.BuildPhase.BEFORE`` can be XOR'd with any previous phase to indicate it should run as part of the 
phase, but before the phase has started.
-  - ``Ide.BuildPhase.AFTER`` can be XOR'd with any previous phase to indicate it should run as part of the 
phase, but after the phase has completed.
-  - ``Ide.BuildPhase.FINISHED`` indicates that a previous build request has finished.
-  - ``Ide.BuildPhase.FAILED`` indicates that a previous build request has failed.
+  - ``Ide.PipelinePhase.BEFORE`` can be XOR'd with any previous phase to indicate it should run as part of 
the phase, but before the phase has started.
+  - ``Ide.PipelinePhase.AFTER`` can be XOR'd with any previous phase to indicate it should run as part of 
the phase, but after the phase has completed.
+  - ``Ide.PipelinePhase.FINISHED`` indicates that a previous build request has finished.
+  - ``Ide.PipelinePhase.FAILED`` indicates that a previous build request has failed.
 
 Creating a Build Stage
 ======================
@@ -104,7 +104,7 @@ loads we will register our stage in the appropriate phase.
 
        def do_load(self, pipeline):
            stage = MyBuildStage()
-           phase = Ide.BuildPhase.BUILD | Ide.BuildPhase.AFTER
+           phase = Ide.PipelinePhase.BUILD | Ide.PipelinePhase.AFTER
            stage_id = pipeline.connect(phase, 100, stage)
 
            # track() can be used to auto-unregister the phase when
diff --git a/src/libide/foundry/ide-build-manager.c b/src/libide/foundry/ide-build-manager.c
index 35ebf32e7..48044d358 100644
--- a/src/libide/foundry/ide-build-manager.c
+++ b/src/libide/foundry/ide-build-manager.c
@@ -29,7 +29,6 @@
 #include <libide-vcs.h>
 
 #include "ide-build-manager.h"
-#include "ide-build-pipeline.h"
 #include "ide-build-private.h"
 #include "ide-config-manager.h"
 #include "ide-config.h"
@@ -37,6 +36,7 @@
 #include "ide-device-manager.h"
 #include "ide-device.h"
 #include "ide-foundry-compat.h"
+#include "ide-pipeline.h"
 #include "ide-runtime-manager.h"
 #include "ide-runtime-private.h"
 #include "ide-runtime.h"
@@ -56,7 +56,7 @@
  * ide_build_manager_rebuild_async() to build, clean, and rebuild respectively
  * without needing to track the build pipeline.
  *
- * The #IdeBuildPipeline is used to specify how and when build operations
+ * The #IdePipeline is used to specify how and when build operations
  * should occur. Plugins attach build stages to the pipeline to perform
  * build actions.
  *
@@ -69,7 +69,7 @@ struct _IdeBuildManager
 
   GCancellable     *cancellable;
 
-  IdeBuildPipeline *pipeline;
+  IdePipeline *pipeline;
   GDateTime        *last_build_time;
   DzlSignalGroup   *pipeline_signals;
 
@@ -203,7 +203,7 @@ ide_build_manager_stop_timer (IdeBuildManager *self)
 static void
 ide_build_manager_handle_diagnostic (IdeBuildManager  *self,
                                      IdeDiagnostic    *diagnostic,
-                                     IdeBuildPipeline *pipeline)
+                                     IdePipeline *pipeline)
 {
   IdeDiagnosticSeverity severity;
 
@@ -211,7 +211,7 @@ ide_build_manager_handle_diagnostic (IdeBuildManager  *self,
 
   g_assert (IDE_IS_BUILD_MANAGER (self));
   g_assert (diagnostic != NULL);
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
   self->diagnostic_count++;
   if (self->diagnostic_count == 1)
@@ -244,7 +244,7 @@ ide_build_manager_update_action_enabled (IdeBuildManager *self)
 
   busy = ide_build_manager_get_busy (self);
   can_build = ide_build_manager_get_can_build (self);
-  can_export = self->pipeline ? ide_build_pipeline_get_can_export (self->pipeline) : FALSE;
+  can_export = self->pipeline ? ide_pipeline_get_can_export (self->pipeline) : FALSE;
 
   ide_build_manager_set_action_enabled (self, "build", !busy && can_build);
   ide_build_manager_set_action_enabled (self, "cancel", busy);
@@ -259,13 +259,13 @@ ide_build_manager_update_action_enabled (IdeBuildManager *self)
 static void
 ide_build_manager_notify_busy (IdeBuildManager  *self,
                                GParamSpec       *pspec,
-                               IdeBuildPipeline *pipeline)
+                               IdePipeline *pipeline)
 {
   IDE_ENTRY;
 
   g_assert (IDE_IS_BUILD_MANAGER (self));
   g_assert (G_IS_PARAM_SPEC (pspec));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
   ide_build_manager_update_action_enabled (self);
 
@@ -275,13 +275,13 @@ ide_build_manager_notify_busy (IdeBuildManager  *self,
 static void
 ide_build_manager_notify_message (IdeBuildManager  *self,
                                   GParamSpec       *pspec,
-                                  IdeBuildPipeline *pipeline)
+                                  IdePipeline *pipeline)
 {
   IDE_ENTRY;
 
   g_assert (IDE_IS_BUILD_MANAGER (self));
   g_assert (G_IS_PARAM_SPEC (pspec));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
   if (pipeline == self->pipeline)
     g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_MESSAGE]);
@@ -291,13 +291,13 @@ ide_build_manager_notify_message (IdeBuildManager  *self,
 
 static void
 ide_build_manager_pipeline_started (IdeBuildManager  *self,
-                                    IdeBuildPhase     phase,
-                                    IdeBuildPipeline *pipeline)
+                                    IdePipelinePhase     phase,
+                                    IdePipeline *pipeline)
 {
   IDE_ENTRY;
 
   g_assert (IDE_IS_BUILD_MANAGER (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
   self->building = TRUE;
 
@@ -309,12 +309,12 @@ ide_build_manager_pipeline_started (IdeBuildManager  *self,
 static void
 ide_build_manager_pipeline_finished (IdeBuildManager  *self,
                                      gboolean          failed,
-                                     IdeBuildPipeline *pipeline)
+                                     IdePipeline *pipeline)
 {
   IDE_ENTRY;
 
   g_assert (IDE_IS_BUILD_MANAGER (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
   self->building = FALSE;
 
@@ -334,7 +334,7 @@ ide_build_manager_ensure_toolchain_cb (GObject      *object,
   IdeToolchainManager *toolchain_manager = (IdeToolchainManager *)object;
   g_autoptr(GError) error = NULL;
   g_autoptr(IdeTask) task = user_data;
-  IdeBuildPipeline *pipeline;
+  IdePipeline *pipeline;
   IdeBuildManager *self;
   GCancellable *cancellable;
 
@@ -348,7 +348,7 @@ ide_build_manager_ensure_toolchain_cb (GObject      *object,
   pipeline = ide_task_get_task_data (task);
 
   g_assert (IDE_IS_BUILD_MANAGER (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
   if (!_ide_toolchain_manager_prepare_finish (toolchain_manager, result, &error))
     {
@@ -405,7 +405,7 @@ ide_build_manager_ensure_runtime_cb (GObject      *object,
   IdeRuntimeManager *runtime_manager = (IdeRuntimeManager *)object;
   g_autoptr(GError) error = NULL;
   g_autoptr(IdeTask) task = user_data;
-  IdeBuildPipeline *pipeline;
+  IdePipeline *pipeline;
   IdeBuildManager *self;
   IdeToolchainManager *toolchain_manager;
   IdeContext *context;
@@ -420,7 +420,7 @@ ide_build_manager_ensure_runtime_cb (GObject      *object,
   pipeline = ide_task_get_task_data (task);
 
   g_assert (IDE_IS_BUILD_MANAGER (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
   if (!_ide_runtime_manager_prepare_finish (runtime_manager, result, &error))
     {
@@ -474,7 +474,7 @@ ide_build_manager_device_get_info_cb (GObject      *object,
   g_autoptr(GError) error = NULL;
   g_autoptr(IdeTask) task = user_data;
   IdeRuntimeManager *runtime_manager;
-  IdeBuildPipeline *pipeline;
+  IdePipeline *pipeline;
   IdeContext *context;
 
   IDE_ENTRY;
@@ -484,7 +484,7 @@ ide_build_manager_device_get_info_cb (GObject      *object,
   g_assert (IDE_IS_TASK (task));
 
   pipeline = ide_task_get_task_data (task);
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
   if (ide_task_return_error_if_cancelled (task))
     IDE_EXIT;
@@ -508,7 +508,7 @@ ide_build_manager_device_get_info_cb (GObject      *object,
       IDE_EXIT;
     }
 
-  _ide_build_pipeline_check_toolchain (pipeline, info);
+  _ide_pipeline_check_toolchain (pipeline, info);
 
   _ide_runtime_manager_prepare_async (runtime_manager,
                                       pipeline,
@@ -583,7 +583,7 @@ ide_build_manager_invalidate_pipeline (IdeBuildManager *self)
    * runtime is available (possibly installing it).
    */
   ide_build_manager_set_can_build (self, FALSE);
-  self->pipeline = g_object_new (IDE_TYPE_BUILD_PIPELINE,
+  self->pipeline = g_object_new (IDE_TYPE_PIPELINE,
                                  "config", config,
                                  "device", device,
                                  NULL);
@@ -690,12 +690,12 @@ initable_init (GInitable     *initable,
 
 static void
 ide_build_manager_real_build_started (IdeBuildManager  *self,
-                                      IdeBuildPipeline *pipeline)
+                                      IdePipeline *pipeline)
 {
-  IdeBuildPhase phase;
+  IdePipelinePhase phase;
 
   g_assert (IDE_IS_BUILD_MANAGER (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
   ide_build_manager_start_timer (self);
 
@@ -705,11 +705,11 @@ ide_build_manager_real_build_started (IdeBuildManager  *self,
    * configure for the first time, or performing a real build.
    */
 
-  phase = ide_build_pipeline_get_requested_phase (pipeline);
-  g_assert ((phase & IDE_BUILD_PHASE_MASK) == phase);
+  phase = ide_pipeline_get_requested_phase (pipeline);
+  g_assert ((phase & IDE_PIPELINE_PHASE_MASK) == phase);
 
-  if (phase == IDE_BUILD_PHASE_BUILD ||
-      (phase == IDE_BUILD_PHASE_CONFIGURE && !self->has_configured))
+  if (phase == IDE_PIPELINE_PHASE_BUILD ||
+      (phase == IDE_PIPELINE_PHASE_CONFIGURE && !self->has_configured))
     {
       self->needs_rediagnose = TRUE;
       self->has_configured = TRUE;
@@ -718,17 +718,17 @@ ide_build_manager_real_build_started (IdeBuildManager  *self,
 
 static void
 ide_build_manager_real_build_failed (IdeBuildManager  *self,
-                                     IdeBuildPipeline *pipeline)
+                                     IdePipeline *pipeline)
 {
   g_assert (IDE_IS_BUILD_MANAGER (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
   ide_build_manager_stop_timer (self);
 }
 
 static void
 ide_build_manager_real_build_finished (IdeBuildManager  *self,
-                                       IdeBuildPipeline *pipeline)
+                                       IdePipeline *pipeline)
 {
   IdeDiagnosticsManager *diagnostics;
   IdeBufferManager *bufmgr;
@@ -736,7 +736,7 @@ ide_build_manager_real_build_finished (IdeBuildManager  *self,
   guint n_items;
 
   g_assert (IDE_IS_BUILD_MANAGER (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
   ide_build_manager_stop_timer (self);
 
@@ -956,7 +956,7 @@ ide_build_manager_class_init (IdeBuildManagerClass *klass)
     g_param_spec_object ("pipeline",
                          "Pipeline",
                          "The build pipeline",
-                         IDE_TYPE_BUILD_PIPELINE,
+                         IDE_TYPE_PIPELINE,
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
 
   /**
@@ -1002,7 +1002,7 @@ ide_build_manager_class_init (IdeBuildManagerClass *klass)
   /**
    * IdeBuildManager::build-started:
    * @self: An #IdeBuildManager
-   * @pipeline: An #IdeBuildPipeline
+   * @pipeline: An #IdePipeline
    *
    * The "build-started" signal is emitted when a new build has started.
    * The build may be an incremental build. The @pipeline instance is
@@ -1017,12 +1017,12 @@ ide_build_manager_class_init (IdeBuildManagerClass *klass)
                                 G_CALLBACK (ide_build_manager_real_build_started),
                                 NULL, NULL,
                                 NULL,
-                                G_TYPE_NONE, 1, IDE_TYPE_BUILD_PIPELINE);
+                                G_TYPE_NONE, 1, IDE_TYPE_PIPELINE);
 
   /**
    * IdeBuildManager::build-failed:
    * @self: An #IdeBuildManager
-   * @pipeline: An #IdeBuildPipeline
+   * @pipeline: An #IdePipeline
    *
    * The "build-failed" signal is emitted when a build that was previously
    * notified via #IdeBuildManager::build-started has failed to complete
@@ -1040,12 +1040,12 @@ ide_build_manager_class_init (IdeBuildManagerClass *klass)
                                 G_CALLBACK (ide_build_manager_real_build_failed),
                                 NULL, NULL,
                                 NULL,
-                                G_TYPE_NONE, 1, IDE_TYPE_BUILD_PIPELINE);
+                                G_TYPE_NONE, 1, IDE_TYPE_PIPELINE);
 
   /**
    * IdeBuildManager::build-finished:
    * @self: An #IdeBuildManager
-   * @pipeline: An #IdeBuildPipeline
+   * @pipeline: An #IdePipeline
    *
    * The "build-finished" signal is emitted when a build completed
    * successfully.
@@ -1059,7 +1059,7 @@ ide_build_manager_class_init (IdeBuildManagerClass *klass)
                                 G_CALLBACK (ide_build_manager_real_build_finished),
                                 NULL, NULL,
                                 NULL,
-                                G_TYPE_NONE, 1, IDE_TYPE_BUILD_PIPELINE);
+                                G_TYPE_NONE, 1, IDE_TYPE_PIPELINE);
 }
 
 static void
@@ -1083,7 +1083,7 @@ ide_build_manager_action_build (IdeBuildManager *self,
 
   g_assert (IDE_IS_BUILD_MANAGER (self));
 
-  ide_build_manager_execute_async (self, IDE_BUILD_PHASE_BUILD, NULL, NULL, NULL, NULL);
+  ide_build_manager_execute_async (self, IDE_PIPELINE_PHASE_BUILD, NULL, NULL, NULL, NULL);
 
   IDE_EXIT;
 }
@@ -1096,7 +1096,7 @@ ide_build_manager_action_rebuild (IdeBuildManager *self,
 
   g_assert (IDE_IS_BUILD_MANAGER (self));
 
-  ide_build_manager_rebuild_async (self, IDE_BUILD_PHASE_BUILD, NULL, NULL, NULL, NULL);
+  ide_build_manager_rebuild_async (self, IDE_PIPELINE_PHASE_BUILD, NULL, NULL, NULL, NULL);
 
   IDE_EXIT;
 }
@@ -1109,7 +1109,7 @@ ide_build_manager_action_clean (IdeBuildManager *self,
 
   g_assert (IDE_IS_BUILD_MANAGER (self));
 
-  ide_build_manager_clean_async (self, IDE_BUILD_PHASE_BUILD, NULL, NULL, NULL);
+  ide_build_manager_clean_async (self, IDE_PIPELINE_PHASE_BUILD, NULL, NULL, NULL);
 
   IDE_EXIT;
 }
@@ -1122,7 +1122,7 @@ ide_build_manager_action_install (IdeBuildManager *self,
 
   g_assert (IDE_IS_BUILD_MANAGER (self));
 
-  ide_build_manager_execute_async (self, IDE_BUILD_PHASE_INSTALL, NULL, NULL, NULL, NULL);
+  ide_build_manager_execute_async (self, IDE_PIPELINE_PHASE_INSTALL, NULL, NULL, NULL, NULL);
 
   IDE_EXIT;
 }
@@ -1135,7 +1135,7 @@ ide_build_manager_action_export (IdeBuildManager *self,
 
   g_assert (IDE_IS_BUILD_MANAGER (self));
 
-  ide_build_manager_execute_async (self, IDE_BUILD_PHASE_EXPORT, NULL, NULL, NULL, NULL);
+  ide_build_manager_execute_async (self, IDE_PIPELINE_PHASE_EXPORT, NULL, NULL, NULL, NULL);
 
   IDE_EXIT;
 }
@@ -1150,7 +1150,7 @@ ide_build_manager_init (IdeBuildManager *self)
   self->cancellable = g_cancellable_new ();
   self->needs_rediagnose = TRUE;
 
-  self->pipeline_signals = dzl_signal_group_new (IDE_TYPE_BUILD_PIPELINE);
+  self->pipeline_signals = dzl_signal_group_new (IDE_TYPE_PIPELINE);
 
   dzl_signal_group_connect_object (self->pipeline_signals,
                                    "diagnostic",
@@ -1202,7 +1202,7 @@ ide_build_manager_get_busy (IdeBuildManager *self)
   g_return_val_if_fail (IDE_IS_BUILD_MANAGER (self), FALSE);
 
   if G_LIKELY (self->pipeline != NULL)
-    return ide_build_pipeline_get_busy (self->pipeline);
+    return ide_pipeline_get_busy (self->pipeline);
 
   return FALSE;
 }
@@ -1225,7 +1225,7 @@ ide_build_manager_get_message (IdeBuildManager *self)
   g_return_val_if_fail (IDE_IS_BUILD_MANAGER (self), NULL);
 
   if G_LIKELY (self->pipeline != NULL)
-    return ide_build_pipeline_get_message (self->pipeline);
+    return ide_pipeline_get_message (self->pipeline);
 
   return NULL;
 }
@@ -1301,7 +1301,7 @@ ide_build_manager_cancel (IdeBuildManager *self)
     g_cancellable_cancel (cancellable);
 
   if (self->pipeline != NULL)
-    _ide_build_pipeline_cancel (self->pipeline);
+    _ide_pipeline_cancel (self->pipeline);
 
   IDE_EXIT;
 }
@@ -1313,11 +1313,11 @@ ide_build_manager_cancel (IdeBuildManager *self)
  * This function gets the current build pipeline. The pipeline will be
  * reloaded as build configurations change.
  *
- * Returns: (transfer none) (nullable): An #IdeBuildPipeline.
+ * Returns: (transfer none) (nullable): An #IdePipeline.
  *
  * Since: 3.32
  */
-IdeBuildPipeline *
+IdePipeline *
 ide_build_manager_get_pipeline (IdeBuildManager *self)
 {
   g_return_val_if_fail (IDE_IS_MAIN_THREAD (), NULL);
@@ -1332,14 +1332,14 @@ ide_build_manager_get_pipeline (IdeBuildManager *self)
  *
  * A thread-safe variant of ide_build_manager_get_pipeline().
  *
- * Returns: (transfer full) (nullable): an #IdeBuildPipeline or %NULL
+ * Returns: (transfer full) (nullable): an #IdePipeline or %NULL
  *
  * Since: 3.32
  */
-IdeBuildPipeline *
+IdePipeline *
 ide_build_manager_ref_pipeline (IdeBuildManager *self)
 {
-  IdeBuildPipeline *ret = NULL;
+  IdePipeline *ret = NULL;
 
   g_return_val_if_fail (IDE_IS_BUILD_MANAGER (self), NULL);
 
@@ -1351,21 +1351,21 @@ ide_build_manager_ref_pipeline (IdeBuildManager *self)
 }
 
 static void
-ide_build_manager_execute_cb (GObject      *object,
-                              GAsyncResult *result,
-                              gpointer      user_data)
+ide_build_manager_build_targets_cb (GObject      *object,
+                                    GAsyncResult *result,
+                                    gpointer      user_data)
 {
-  IdeBuildPipeline *pipeline = (IdeBuildPipeline *)object;
+  IdePipeline *pipeline = (IdePipeline *)object;
   g_autoptr(IdeTask) task = user_data;
   g_autoptr(GError) error = NULL;
 
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (G_IS_ASYNC_RESULT (result));
   g_assert (IDE_IS_TASK (task));
 
-  if (!ide_build_pipeline_execute_finish (pipeline, result, &error))
+  if (!ide_pipeline_build_targets_finish (pipeline, result, &error))
     {
       ide_object_warning (pipeline, "%s", error->message);
       ide_task_return_error (task, g_steal_pointer (&error));
@@ -1389,7 +1389,7 @@ ide_build_manager_save_all_cb (GObject      *object,
   IdeBuildManager *self;
   GCancellable *cancellable;
   GPtrArray *targets;
-  IdeBuildPhase phase;
+  IdePipelinePhase phase;
 
   IDE_ENTRY;
 
@@ -1409,13 +1409,13 @@ ide_build_manager_save_all_cb (GObject      *object,
       IDE_EXIT;
     }
 
-  phase = ide_build_pipeline_get_requested_phase (self->pipeline);
+  phase = ide_pipeline_get_requested_phase (self->pipeline);
 
-  ide_build_pipeline_build_targets_async (self->pipeline,
+  ide_pipeline_build_targets_async (self->pipeline,
                                           phase,
                                           targets,
                                           cancellable,
-                                          ide_build_manager_execute_cb,
+                                          ide_build_manager_build_targets_cb,
                                           g_steal_pointer (&task));
 
   g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_HAS_DIAGNOSTICS]);
@@ -1428,7 +1428,7 @@ ide_build_manager_save_all_cb (GObject      *object,
 /**
  * ide_build_manager_execute_async:
  * @self: An #IdeBuildManager
- * @phase: An #IdeBuildPhase or 0
+ * @phase: An #IdePipelinePhase or 0
  * @targets: (nullable) (element-type IdeBuildTarget): an array of
  *   #IdeBuildTarget to build
  * @cancellable: (nullable): a #GCancellable or %NULL
@@ -1444,7 +1444,7 @@ ide_build_manager_save_all_cb (GObject      *object,
  */
 void
 ide_build_manager_execute_async (IdeBuildManager     *self,
-                                 IdeBuildPhase        phase,
+                                 IdePipelinePhase        phase,
                                  GPtrArray           *targets,
                                  GCancellable        *cancellable,
                                  GAsyncReadyCallback  callback,
@@ -1472,7 +1472,7 @@ ide_build_manager_execute_async (IdeBuildManager     *self,
 
   if (self->pipeline == NULL ||
       self->can_build == FALSE ||
-      !ide_build_pipeline_is_ready (self->pipeline))
+      !ide_pipeline_is_ready (self->pipeline))
     {
       ide_task_return_new_error (task,
                                  G_IO_ERROR,
@@ -1481,17 +1481,17 @@ ide_build_manager_execute_async (IdeBuildManager     *self,
       IDE_EXIT;
     }
 
-  if (!ide_build_pipeline_request_phase (self->pipeline, phase))
+  if (!ide_pipeline_request_phase (self->pipeline, phase))
     {
       ide_task_return_boolean (task, TRUE);
       IDE_EXIT;
     }
 
   /*
-   * Only update our "build time" if we are advancing to IDE_BUILD_PHASE_BUILD,
+   * Only update our "build time" if we are advancing to IDE_PIPELINE_PHASE_BUILD,
    * we don't really care about "builds" for configure stages and less.
    */
-  if ((phase & IDE_BUILD_PHASE_MASK) >= IDE_BUILD_PHASE_BUILD)
+  if ((phase & IDE_PIPELINE_PHASE_MASK) >= IDE_PIPELINE_PHASE_BUILD)
     {
       g_clear_pointer (&self->last_build_time, g_date_time_unref);
       self->last_build_time = g_date_time_new_now_local ();
@@ -1506,7 +1506,7 @@ ide_build_manager_execute_async (IdeBuildManager     *self,
    * on every keypress (and execute_async() could be called on every keypress)
    * for ensuring build flags are up to date.
    */
-  if ((phase & IDE_BUILD_PHASE_MASK) >= IDE_BUILD_PHASE_BUILD)
+  if ((phase & IDE_PIPELINE_PHASE_MASK) >= IDE_PIPELINE_PHASE_BUILD)
     {
       context = ide_object_get_context (IDE_OBJECT (self));
       buffer_manager = ide_buffer_manager_from_context (context);
@@ -1517,12 +1517,12 @@ ide_build_manager_execute_async (IdeBuildManager     *self,
       IDE_EXIT;
     }
 
-  ide_build_pipeline_build_targets_async (self->pipeline,
-                                          phase,
-                                          targets,
-                                          cancellable,
-                                          ide_build_manager_execute_cb,
-                                          g_steal_pointer (&task));
+  ide_pipeline_build_targets_async (self->pipeline,
+                                    phase,
+                                    targets,
+                                    cancellable,
+                                    ide_build_manager_build_targets_cb,
+                                    g_steal_pointer (&task));
 
   g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_ERROR_COUNT]);
   g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_HAS_DIAGNOSTICS]);
@@ -1567,17 +1567,17 @@ ide_build_manager_clean_cb (GObject      *object,
                             GAsyncResult *result,
                             gpointer      user_data)
 {
-  IdeBuildPipeline *pipeline = (IdeBuildPipeline *)object;
+  IdePipeline *pipeline = (IdePipeline *)object;
   g_autoptr(IdeTask) task = user_data;
   g_autoptr(GError) error = NULL;
 
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (G_IS_ASYNC_RESULT (result));
   g_assert (IDE_IS_TASK (task));
 
-  if (!ide_build_pipeline_clean_finish (pipeline, result, &error))
+  if (!ide_pipeline_clean_finish (pipeline, result, &error))
     ide_task_return_error (task, g_steal_pointer (&error));
   else
     ide_task_return_boolean (task, TRUE);
@@ -1593,13 +1593,13 @@ ide_build_manager_clean_cb (GObject      *object,
  *
  * Asynchronously requests that the build pipeline clean up to @phase.
  *
- * See ide_build_pipeline_clean_async() for more information.
+ * See ide_pipeline_clean_async() for more information.
  *
  * Since: 3.32
  */
 void
 ide_build_manager_clean_async (IdeBuildManager     *self,
-                               IdeBuildPhase        phase,
+                               IdePipelinePhase        phase,
                                GCancellable        *cancellable,
                                GAsyncReadyCallback  callback,
                                gpointer             user_data)
@@ -1632,7 +1632,7 @@ ide_build_manager_clean_async (IdeBuildManager     *self,
   self->error_count = 0;
   self->warning_count = 0;
 
-  ide_build_pipeline_clean_async (self->pipeline,
+  ide_pipeline_clean_async (self->pipeline,
                                   phase,
                                   cancellable,
                                   ide_build_manager_clean_cb,
@@ -1679,17 +1679,17 @@ ide_build_manager_rebuild_cb (GObject      *object,
                               GAsyncResult *result,
                               gpointer      user_data)
 {
-  IdeBuildPipeline *pipeline = (IdeBuildPipeline *)object;
+  IdePipeline *pipeline = (IdePipeline *)object;
   g_autoptr(IdeTask) task = user_data;
   g_autoptr(GError) error = NULL;
 
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (G_IS_ASYNC_RESULT (result));
   g_assert (IDE_IS_TASK (task));
 
-  if (!ide_build_pipeline_rebuild_finish (pipeline, result, &error))
+  if (!ide_pipeline_rebuild_finish (pipeline, result, &error))
     ide_task_return_error (task, g_steal_pointer (&error));
   else
     ide_task_return_boolean (task, TRUE);
@@ -1711,13 +1711,13 @@ ide_build_manager_rebuild_cb (GObject      *object,
  * to the given phase. This may involve discarding previous build artifacts
  * to allow for the rebuild process.
  *
- * See ide_build_pipeline_rebuild_async() for more information.
+ * See ide_pipeline_rebuild_async() for more information.
  *
  * Since: 3.32
  */
 void
 ide_build_manager_rebuild_async (IdeBuildManager     *self,
-                                 IdeBuildPhase        phase,
+                                 IdePipelinePhase        phase,
                                  GPtrArray           *targets,
                                  GCancellable        *cancellable,
                                  GAsyncReadyCallback  callback,
@@ -1747,7 +1747,7 @@ ide_build_manager_rebuild_async (IdeBuildManager     *self,
       IDE_EXIT;
     }
 
-  ide_build_pipeline_rebuild_async (self->pipeline,
+  ide_pipeline_rebuild_async (self->pipeline,
                                     phase,
                                     targets,
                                     cancellable,
diff --git a/src/libide/foundry/ide-build-manager.h b/src/libide/foundry/ide-build-manager.h
index 32ce1fef5..9fcf02b8e 100644
--- a/src/libide/foundry/ide-build-manager.h
+++ b/src/libide/foundry/ide-build-manager.h
@@ -26,7 +26,7 @@
 
 #include <libide-core.h>
 
-#include "ide-build-pipeline.h"
+#include "ide-pipeline.h"
 
 G_BEGIN_DECLS
 
@@ -58,12 +58,12 @@ void              ide_build_manager_invalidate          (IdeBuildManager      *s
 IDE_AVAILABLE_IN_3_32
 void              ide_build_manager_cancel              (IdeBuildManager      *self);
 IDE_AVAILABLE_IN_3_32
-IdeBuildPipeline *ide_build_manager_get_pipeline        (IdeBuildManager      *self);
+IdePipeline *ide_build_manager_get_pipeline        (IdeBuildManager      *self);
 IDE_AVAILABLE_IN_3_32
-IdeBuildPipeline *ide_build_manager_ref_pipeline        (IdeBuildManager      *self);
+IdePipeline *ide_build_manager_ref_pipeline        (IdeBuildManager      *self);
 IDE_AVAILABLE_IN_3_32
 void              ide_build_manager_rebuild_async       (IdeBuildManager      *self,
-                                                         IdeBuildPhase         phase,
+                                                         IdePipelinePhase         phase,
                                                          GPtrArray            *targets,
                                                          GCancellable         *cancellable,
                                                          GAsyncReadyCallback   callback,
@@ -74,7 +74,7 @@ gboolean          ide_build_manager_rebuild_finish      (IdeBuildManager      *s
                                                          GError              **error);
 IDE_AVAILABLE_IN_3_32
 void              ide_build_manager_execute_async       (IdeBuildManager      *self,
-                                                         IdeBuildPhase         phase,
+                                                         IdePipelinePhase         phase,
                                                          GPtrArray            *targets,
                                                          GCancellable         *cancellable,
                                                          GAsyncReadyCallback   callback,
@@ -85,7 +85,7 @@ gboolean          ide_build_manager_execute_finish      (IdeBuildManager      *s
                                                          GError              **error);
 IDE_AVAILABLE_IN_3_32
 void              ide_build_manager_clean_async         (IdeBuildManager      *self,
-                                                         IdeBuildPhase         phase,
+                                                         IdePipelinePhase         phase,
                                                          GCancellable         *cancellable,
                                                          GAsyncReadyCallback   callback,
                                                          gpointer              user_data);
diff --git a/src/libide/foundry/ide-build-private.h b/src/libide/foundry/ide-build-private.h
index a9360e952..7abd11716 100644
--- a/src/libide/foundry/ide-build-private.h
+++ b/src/libide/foundry/ide-build-private.h
@@ -26,21 +26,21 @@
 
 G_BEGIN_DECLS
 
-guint8 *_ide_build_utils_filter_color_codes (const guint8 *data,
-                                             gsize         len,
-                                             gsize        *out_len);
-void _ide_build_pipeline_cancel          (IdeBuildPipeline *self);
-void _ide_build_pipeline_set_runtime     (IdeBuildPipeline *self,
-                                          IdeRuntime       *runtime);
-void _ide_build_pipeline_set_toolchain   (IdeBuildPipeline *self,
-                                          IdeToolchain     *toolchain);
-void _ide_build_pipeline_set_message     (IdeBuildPipeline *self,
-                                          const gchar      *message);
-void _ide_build_pipeline_mark_broken     (IdeBuildPipeline *self);
-void _ide_build_pipeline_check_toolchain (IdeBuildPipeline *self,
-                                          IdeDeviceInfo    *info);
-void _ide_build_pipeline_set_pty_size    (IdeBuildPipeline *self,
-                                          guint             rows,
-                                          guint             columns);
+guint8 *_ide_build_utils_filter_color_codes (const guint8     *data,
+                                             gsize             len,
+                                             gsize            *out_len);
+void    _ide_pipeline_cancel                (IdePipeline *self);
+void    _ide_pipeline_set_runtime           (IdePipeline *self,
+                                             IdeRuntime       *runtime);
+void    _ide_pipeline_set_toolchain         (IdePipeline *self,
+                                             IdeToolchain     *toolchain);
+void    _ide_pipeline_set_message           (IdePipeline *self,
+                                             const gchar      *message);
+void    _ide_pipeline_mark_broken           (IdePipeline *self);
+void    _ide_pipeline_check_toolchain       (IdePipeline *self,
+                                             IdeDeviceInfo    *info);
+void    _ide_pipeline_set_pty_size          (IdePipeline *self,
+                                             guint             rows,
+                                             guint             columns);
 
 G_END_DECLS
diff --git a/src/libide/foundry/ide-build-system.c b/src/libide/foundry/ide-build-system.c
index 940faba2e..a45a834c0 100644
--- a/src/libide/foundry/ide-build-system.c
+++ b/src/libide/foundry/ide-build-system.c
@@ -29,7 +29,7 @@
 #include <string.h>
 
 #include "ide-build-manager.h"
-#include "ide-build-pipeline.h"
+#include "ide-pipeline.h"
 #include "ide-build-system.h"
 #include "ide-config.h"
 #include "ide-device.h"
@@ -245,7 +245,7 @@ ide_build_system_default_init (IdeBuildSystemInterface *iface)
 
 static gchar *
 ide_build_system_translate (IdeBuildSystem   *self,
-                            IdeBuildPipeline *pipeline,
+                            IdePipeline *pipeline,
                             const gchar      *prefix,
                             const gchar      *path)
 {
@@ -256,16 +256,16 @@ ide_build_system_translate (IdeBuildSystem   *self,
   IdeRuntime *runtime;
 
   g_assert (IDE_IS_BUILD_SYSTEM (self));
-  g_assert (!pipeline || IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (!pipeline || IDE_IS_PIPELINE (pipeline));
   g_assert (prefix != NULL);
   g_assert (path != NULL);
 
   if (NULL == pipeline ||
-      NULL == (runtime = ide_build_pipeline_get_runtime (pipeline)))
+      NULL == (runtime = ide_pipeline_get_runtime (pipeline)))
     return g_strdup_printf ("%s%s", prefix, path);
 
   if (!g_path_is_absolute (path))
-    path = freeme = ide_build_pipeline_build_builddir_path (pipeline, path, NULL);
+    path = freeme = ide_pipeline_build_builddir_path (pipeline, path, NULL);
 
   file = g_file_new_for_path (path);
   translated = ide_runtime_translate_file (runtime, file);
@@ -278,7 +278,7 @@ static void
 ide_build_system_post_process_build_flags (IdeBuildSystem  *self,
                                            gchar          **flags)
 {
-  IdeBuildPipeline *pipeline;
+  IdePipeline *pipeline;
   IdeBuildManager *build_manager;
   IdeContext *context;
 
@@ -449,14 +449,14 @@ ide_build_system_get_build_flags_for_files_finish (IdeBuildSystem  *self,
 
 gchar *
 ide_build_system_get_builddir (IdeBuildSystem   *self,
-                               IdeBuildPipeline *pipeline)
+                               IdePipeline *pipeline)
 {
   gchar *ret = NULL;
 
   IDE_ENTRY;
 
   g_return_val_if_fail (IDE_IS_BUILD_SYSTEM (self), NULL);
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (pipeline), NULL);
+  g_return_val_if_fail (IDE_IS_PIPELINE (pipeline), NULL);
 
   if (IDE_BUILD_SYSTEM_GET_IFACE (self)->get_builddir)
     ret = IDE_BUILD_SYSTEM_GET_IFACE (self)->get_builddir (self, pipeline);
@@ -474,9 +474,9 @@ ide_build_system_get_builddir (IdeBuildSystem   *self,
 
       context = ide_object_get_context (IDE_OBJECT (self));
       vcs = ide_vcs_from_context (context);
-      config = ide_build_pipeline_get_config (pipeline);
+      config = ide_pipeline_get_config (pipeline);
       config_id = ide_config_get_id (config);
-      runtime = ide_build_pipeline_get_runtime (pipeline);
+      runtime = ide_pipeline_get_runtime (pipeline);
       runtime_id = ide_runtime_get_id (runtime);
       branch = ide_vcs_get_branch_name (vcs);
 
diff --git a/src/libide/foundry/ide-build-system.h b/src/libide/foundry/ide-build-system.h
index 4b4d6e8c3..f8354b2e8 100644
--- a/src/libide/foundry/ide-build-system.h
+++ b/src/libide/foundry/ide-build-system.h
@@ -58,7 +58,7 @@ struct _IdeBuildSystemInterface
                                                     GAsyncResult         *result,
                                                     GError              **error);
   gchar      *(*get_builddir)                      (IdeBuildSystem       *self,
-                                                    IdeBuildPipeline     *pipeline);
+                                                    IdePipeline     *pipeline);
   gchar      *(*get_id)                            (IdeBuildSystem       *self);
   gchar      *(*get_display_name)                  (IdeBuildSystem       *self);
   gboolean    (*supports_toolchain)                (IdeBuildSystem       *self,
@@ -76,7 +76,7 @@ IDE_AVAILABLE_IN_3_32
 gint             ide_build_system_get_priority                     (IdeBuildSystem       *self);
 IDE_AVAILABLE_IN_3_32
 gchar           *ide_build_system_get_builddir                     (IdeBuildSystem       *self,
-                                                                    IdeBuildPipeline     *pipeline);
+                                                                    IdePipeline     *pipeline);
 IDE_AVAILABLE_IN_3_32
 gchar           *ide_build_system_get_project_version              (IdeBuildSystem       *self);
 IDE_AVAILABLE_IN_3_32
diff --git a/src/libide/foundry/ide-deploy-strategy.c b/src/libide/foundry/ide-deploy-strategy.c
index fcfddcb40..8524cb5d8 100644
--- a/src/libide/foundry/ide-deploy-strategy.c
+++ b/src/libide/foundry/ide-deploy-strategy.c
@@ -24,14 +24,14 @@
 
 #include "ide-debug.h"
 
-#include "ide-build-pipeline.h"
+#include "ide-pipeline.h"
 #include "ide-deploy-strategy.h"
 
 G_DEFINE_ABSTRACT_TYPE (IdeDeployStrategy, ide_deploy_strategy, IDE_TYPE_OBJECT)
 
 static void
 ide_deploy_strategy_real_load_async (IdeDeployStrategy   *self,
-                                     IdeBuildPipeline    *pipeline,
+                                     IdePipeline    *pipeline,
                                      GCancellable        *cancellable,
                                      GAsyncReadyCallback  callback,
                                      gpointer             user_data)
@@ -58,7 +58,7 @@ ide_deploy_strategy_real_load_finish (IdeDeployStrategy  *self,
 
 static void
 ide_deploy_strategy_real_deploy_async (IdeDeployStrategy     *self,
-                                       IdeBuildPipeline      *pipeline,
+                                       IdePipeline      *pipeline,
                                        GFileProgressCallback  progress,
                                        gpointer               progress_data,
                                        GDestroyNotify         progress_data_destroy,
@@ -103,7 +103,7 @@ ide_deploy_strategy_init (IdeDeployStrategy *self)
 /**
  * ide_deploy_strategy_load_async:
  * @self: an #IdeDeployStrategy
- * @pipeline: an #IdeBuildPipeline
+ * @pipeline: an #IdePipeline
  * @cancellable: (nullable): a #GCancellable, or %NULL
  * @callback: a callback to execute upon completion
  * @user_data: closure data for @callback
@@ -123,7 +123,7 @@ ide_deploy_strategy_init (IdeDeployStrategy *self)
  */
 void
 ide_deploy_strategy_load_async (IdeDeployStrategy   *self,
-                                IdeBuildPipeline    *pipeline,
+                                IdePipeline    *pipeline,
                                 GCancellable        *cancellable,
                                 GAsyncReadyCallback  callback,
                                 gpointer             user_data)
@@ -131,7 +131,7 @@ ide_deploy_strategy_load_async (IdeDeployStrategy   *self,
   IDE_ENTRY;
 
   g_assert (IDE_IS_DEPLOY_STRATEGY (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
 
   IDE_DEPLOY_STRATEGY_GET_CLASS (self)->load_async (self, pipeline, cancellable, callback, user_data);
@@ -172,7 +172,7 @@ ide_deploy_strategy_load_finish (IdeDeployStrategy  *self,
 /**
  * ide_deploy_strategy_deploy_async:
  * @self: a #IdeDeployStrategy
- * @pipeline: an #IdeBuildPipeline
+ * @pipeline: an #IdePipeline
  * @progress: (nullable) (closure progress_data) (scope notified):
  *   a #GFileProgressCallback or %NULL
  * @progress_data: (nullable): closure data for @progress or %NULL
@@ -191,7 +191,7 @@ ide_deploy_strategy_load_finish (IdeDeployStrategy  *self,
  */
 void
 ide_deploy_strategy_deploy_async (IdeDeployStrategy     *self,
-                                  IdeBuildPipeline      *pipeline,
+                                  IdePipeline      *pipeline,
                                   GFileProgressCallback  progress,
                                   gpointer               progress_data,
                                   GDestroyNotify         progress_data_destroy,
@@ -202,7 +202,7 @@ ide_deploy_strategy_deploy_async (IdeDeployStrategy     *self,
   IDE_ENTRY;
 
   g_assert (IDE_IS_DEPLOY_STRATEGY (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
 
   IDE_DEPLOY_STRATEGY_GET_CLASS (self)->deploy_async (self,
diff --git a/src/libide/foundry/ide-deploy-strategy.h b/src/libide/foundry/ide-deploy-strategy.h
index 74159f93b..94796d7d4 100644
--- a/src/libide/foundry/ide-deploy-strategy.h
+++ b/src/libide/foundry/ide-deploy-strategy.h
@@ -38,7 +38,7 @@ struct _IdeDeployStrategyClass
   IdeObjectClass parent;
 
   void     (*load_async)    (IdeDeployStrategy     *self,
-                             IdeBuildPipeline      *pipeline,
+                             IdePipeline      *pipeline,
                              GCancellable          *cancellable,
                              GAsyncReadyCallback    callback,
                              gpointer               user_data);
@@ -46,7 +46,7 @@ struct _IdeDeployStrategyClass
                              GAsyncResult          *result,
                              GError               **error);
   void     (*deploy_async)  (IdeDeployStrategy     *self,
-                             IdeBuildPipeline      *pipeline,
+                             IdePipeline      *pipeline,
                              GFileProgressCallback  progress,
                              gpointer               progress_data,
                              GDestroyNotify         progress_data_destroy,
@@ -62,7 +62,7 @@ struct _IdeDeployStrategyClass
 
 IDE_AVAILABLE_IN_3_32
 void     ide_deploy_strategy_load_async    (IdeDeployStrategy      *self,
-                                            IdeBuildPipeline       *pipeline,
+                                            IdePipeline       *pipeline,
                                             GCancellable           *cancellable,
                                             GAsyncReadyCallback     callback,
                                             gpointer                user_data);
@@ -72,7 +72,7 @@ gboolean ide_deploy_strategy_load_finish   (IdeDeployStrategy      *self,
                                             GError                **error);
 IDE_AVAILABLE_IN_3_32
 void     ide_deploy_strategy_deploy_async  (IdeDeployStrategy      *self,
-                                            IdeBuildPipeline       *pipeline,
+                                            IdePipeline       *pipeline,
                                             GFileProgressCallback   progress,
                                             gpointer                progress_data,
                                             GDestroyNotify          progress_data_destroy,
diff --git a/src/libide/foundry/ide-device-manager.c b/src/libide/foundry/ide-device-manager.c
index 37cee92ea..bbe30e7e2 100644
--- a/src/libide/foundry/ide-device-manager.c
+++ b/src/libide/foundry/ide-device-manager.c
@@ -28,7 +28,7 @@
 #include <libpeas/peas.h>
 
 #include "ide-build-manager.h"
-#include "ide-build-pipeline.h"
+#include "ide-pipeline.h"
 #include "ide-deploy-strategy.h"
 #include "ide-device-manager.h"
 #include "ide-device-private.h"
@@ -78,7 +78,7 @@ struct _IdeDeviceManager
 typedef struct
 {
   IdeObjectArray   *strategies;
-  IdeBuildPipeline *pipeline;
+  IdePipeline *pipeline;
 } DeployState;
 
 typedef struct
@@ -689,7 +689,7 @@ static void
 ide_device_manager_action_deploy (IdeDeviceManager *self,
                                   GVariant         *param)
 {
-  IdeBuildPipeline *pipeline;
+  IdePipeline *pipeline;
   IdeBuildManager *build_manager;
   IdeContext *context;
 
@@ -699,7 +699,7 @@ ide_device_manager_action_deploy (IdeDeviceManager *self,
   build_manager = ide_build_manager_from_context (context);
   pipeline = ide_build_manager_get_pipeline (build_manager);
 
-  if (!ide_build_pipeline_is_ready (pipeline))
+  if (!ide_pipeline_is_ready (pipeline))
     ide_context_warning (context, _("Cannot deploy to device, build pipeline is not initialized"));
   else
     ide_device_manager_deploy_async (self, pipeline, NULL, log_deploy_error, NULL);
@@ -797,7 +797,7 @@ ide_device_manager_deploy_load_cb (GObject      *object,
   g_assert (IDE_IS_DEVICE_MANAGER (self));
   g_assert (state != NULL);
   g_assert (state->strategies != NULL);
-  g_assert (IDE_IS_BUILD_PIPELINE (state->pipeline));
+  g_assert (IDE_IS_PIPELINE (state->pipeline));
 
   ide_deploy_strategy_deploy_async (strategy,
                                     state->pipeline,
@@ -825,7 +825,7 @@ ide_device_manager_deploy_tick (IdeTask *task)
 
   g_assert (state != NULL);
   g_assert (state->strategies != NULL);
-  g_assert (IDE_IS_BUILD_PIPELINE (state->pipeline));
+  g_assert (IDE_IS_PIPELINE (state->pipeline));
 
   if (state->strategies->len == 0)
     {
@@ -867,7 +867,7 @@ ide_device_manager_deploy_completed (IdeDeviceManager *self,
 /**
  * ide_device_manager_deploy_async:
  * @self: a #IdeDeviceManager
- * @pipeline: an #IdeBuildPipeline
+ * @pipeline: an #IdePipeline
  * @cancellable: a #GCancellable, or %NULL
  * @callback: a #GAsyncReadyCallback
  * @user_data: closure data for @callback
@@ -880,7 +880,7 @@ ide_device_manager_deploy_completed (IdeDeviceManager *self,
  */
 void
 ide_device_manager_deploy_async (IdeDeviceManager    *self,
-                                 IdeBuildPipeline    *pipeline,
+                                 IdePipeline    *pipeline,
                                  GCancellable        *cancellable,
                                  GAsyncReadyCallback  callback,
                                  gpointer             user_data)
@@ -893,7 +893,7 @@ ide_device_manager_deploy_async (IdeDeviceManager    *self,
   IDE_ENTRY;
 
   g_return_if_fail (IDE_IS_DEVICE_MANAGER (self));
-  g_return_if_fail (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_return_if_fail (IDE_IS_PIPELINE (pipeline));
   g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable));
 
   self->progress = 0.0;
@@ -910,7 +910,7 @@ ide_device_manager_deploy_async (IdeDeviceManager    *self,
                            self,
                            G_CONNECT_SWAPPED);
 
-  if (!(device = ide_build_pipeline_get_device (pipeline)))
+  if (!(device = ide_pipeline_get_device (pipeline)))
     {
       ide_task_return_new_error (task,
                                  G_IO_ERROR,
diff --git a/src/libide/foundry/ide-device-manager.h b/src/libide/foundry/ide-device-manager.h
index 098e4fbae..690757a44 100644
--- a/src/libide/foundry/ide-device-manager.h
+++ b/src/libide/foundry/ide-device-manager.h
@@ -49,7 +49,7 @@ IdeDevice        *ide_device_manager_get_device_by_id (IdeDeviceManager     *sel
                                                        const gchar          *device_id);
 IDE_AVAILABLE_IN_3_32
 void              ide_device_manager_deploy_async     (IdeDeviceManager     *self,
-                                                       IdeBuildPipeline     *pipeline,
+                                                       IdePipeline     *pipeline,
                                                        GCancellable         *cancellable,
                                                        GAsyncReadyCallback   callback,
                                                        gpointer              user_data);
diff --git a/src/libide/foundry/ide-foundry-types.h b/src/libide/foundry/ide-foundry-types.h
index 4511179a9..26732be96 100644
--- a/src/libide/foundry/ide-foundry-types.h
+++ b/src/libide/foundry/ide-foundry-types.h
@@ -30,20 +30,14 @@ G_BEGIN_DECLS
 
 typedef struct _IdeBuildLog IdeBuildLog;
 typedef struct _IdeBuildManager IdeBuildManager;
-typedef struct _IdeBuildPipeline IdeBuildPipeline;
-typedef struct _IdeBuildPipelineAddin IdeBuildPipelineAddin;
-typedef struct _IdeBuildStage IdeBuildStage;
-typedef struct _IdeBuildStageLauncher IdeBuildStageLauncher;
-typedef struct _IdeBuildStageMkdirs IdeBuildStageMkdirs;
-typedef struct _IdeBuildStageTransfer IdeBuildStageTransfer;
 typedef struct _IdeBuildSystem IdeBuildSystem;
 typedef struct _IdeBuildSystemDiscovery IdeBuildSystemDiscovery;
 typedef struct _IdeBuildTarget IdeBuildTarget;
 typedef struct _IdeBuildTargetProvider IdeBuildTargetProvider;
 typedef struct _IdeCompileCommands IdeCompileCommands;
 typedef struct _IdeConfig IdeConfig;
-typedef struct _IdeConfigProvider IdeConfigProvider;
 typedef struct _IdeConfigManager IdeConfigManager;
+typedef struct _IdeConfigProvider IdeConfigProvider;
 typedef struct _IdeDependencyUpdater IdeDependencyUpdater;
 typedef struct _IdeDeployStrategy IdeDeployStrategy;
 typedef struct _IdeDevice IdeDevice;
@@ -51,6 +45,12 @@ typedef struct _IdeDeviceInfo IdeDeviceInfo;
 typedef struct _IdeDeviceManager IdeDeviceManager;
 typedef struct _IdeDeviceProvider IdeDeviceProvider;
 typedef struct _IdeLocalDevice IdeLocalDevice;
+typedef struct _IdePipeline IdePipeline;
+typedef struct _IdePipelineAddin IdePipelineAddin;
+typedef struct _IdePipelineStage IdePipelineStage;
+typedef struct _IdePipelineStageLauncher IdePipelineStageLauncher;
+typedef struct _IdePipelineStageMkdirs IdePipelineStageMkdirs;
+typedef struct _IdePipelineStageTransfer IdePipelineStageTransfer;
 typedef struct _IdeRunButton IdeRunButton;
 typedef struct _IdeRunManager IdeRunManager;
 typedef struct _IdeRunner IdeRunner;
@@ -60,12 +60,12 @@ typedef struct _IdeRuntimeManager IdeRuntimeManager;
 typedef struct _IdeRuntimeProvider IdeRuntimeProvider;
 typedef struct _IdeSimpleBuildTarget IdeSimpleBuildTarget;
 typedef struct _IdeSimpleToolchain IdeSimpleToolchain;
-typedef struct _IdeTriplet IdeTriplet;
 typedef struct _IdeTest IdeTest;
 typedef struct _IdeTestManager IdeTestManager;
 typedef struct _IdeTestProvider IdeTestProvider;
 typedef struct _IdeToolchain IdeToolchain;
 typedef struct _IdeToolchainManager IdeToolchainManager;
 typedef struct _IdeToolchainProvider IdeToolchainProvider;
+typedef struct _IdeTriplet IdeTriplet;
 
 G_END_DECLS
diff --git a/src/libide/foundry/ide-pipeline-addin.c b/src/libide/foundry/ide-pipeline-addin.c
new file mode 100644
index 000000000..ddb30331b
--- /dev/null
+++ b/src/libide/foundry/ide-pipeline-addin.c
@@ -0,0 +1,108 @@
+/* ide-pipeline-addin.c
+ *
+ * Copyright 2016-2019 Christian Hergert <chergert redhat com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+
+#define G_LOG_DOMAIN "ide-pipeline-addin"
+
+#include "config.h"
+
+#include "ide-pipeline.h"
+#include "ide-pipeline-addin.h"
+
+G_DEFINE_INTERFACE (IdePipelineAddin, ide_pipeline_addin, IDE_TYPE_OBJECT)
+
+static void
+ide_pipeline_addin_default_init (IdePipelineAddinInterface *iface)
+{
+}
+
+void
+ide_pipeline_addin_load (IdePipelineAddin *self,
+                               IdePipeline      *pipeline)
+{
+  g_return_if_fail (IDE_IS_PIPELINE_ADDIN (self));
+  g_return_if_fail (IDE_IS_PIPELINE (pipeline));
+
+  if (IDE_PIPELINE_ADDIN_GET_IFACE (self)->load)
+    IDE_PIPELINE_ADDIN_GET_IFACE (self)->load (self, pipeline);
+}
+
+void
+ide_pipeline_addin_unload (IdePipelineAddin *self,
+                                 IdePipeline      *pipeline)
+{
+  GArray *ar;
+
+  g_return_if_fail (IDE_IS_PIPELINE_ADDIN (self));
+  g_return_if_fail (IDE_IS_PIPELINE (pipeline));
+
+  if (IDE_PIPELINE_ADDIN_GET_IFACE (self)->unload)
+    IDE_PIPELINE_ADDIN_GET_IFACE (self)->unload (self, pipeline);
+
+  /* Unload any stages that are tracked by the addin */
+  ar = g_object_get_data (G_OBJECT (self), "IDE_PIPELINE_ADDIN_STAGES");
+
+  if G_LIKELY (ar != NULL)
+    {
+      for (guint i = 0; i < ar->len; i++)
+        {
+          guint stage_id = g_array_index (ar, guint, i);
+
+          ide_pipeline_detach (pipeline, stage_id);
+        }
+    }
+}
+
+/**
+ * ide_pipeline_addin_track:
+ * @self: An #IdePipelineAddin
+ * @stage_id: a stage id returned from ide_pipeline_attach()
+ *
+ * This function will track the stage_id that was returned from
+ * ide_pipeline_attach() or similar functions. Doing so results in
+ * the stage being automatically disconnected when the addin is unloaded.
+ *
+ * This means that many #IdePipelineAddin implementations do not need
+ * an unload vfunc if they track all registered stages.
+ *
+ * You should not mix this function with manual pipeline disconnections.
+ * While it should work, that is not yet guaranteed.
+ *
+ * Since: 3.32
+ */
+void
+ide_pipeline_addin_track (IdePipelineAddin *self,
+                                guint                  stage_id)
+{
+  GArray *ar;
+
+  g_return_if_fail (IDE_IS_PIPELINE_ADDIN (self));
+  g_return_if_fail (stage_id > 0);
+
+  ar = g_object_get_data (G_OBJECT (self), "IDE_PIPELINE_ADDIN_STAGES");
+
+  if (ar == NULL)
+    {
+      ar = g_array_new (FALSE, FALSE, sizeof (guint));
+      g_object_set_data_full (G_OBJECT (self), "IDE_PIPELINE_ADDIN_STAGES",
+                              ar, (GDestroyNotify)g_array_unref);
+    }
+
+  g_array_append_val (ar, stage_id);
+}
diff --git a/src/libide/foundry/ide-build-pipeline-addin.h b/src/libide/foundry/ide-pipeline-addin.h
similarity index 58%
rename from src/libide/foundry/ide-build-pipeline-addin.h
rename to src/libide/foundry/ide-pipeline-addin.h
index 6341e8cf9..8515f638f 100644
--- a/src/libide/foundry/ide-build-pipeline-addin.h
+++ b/src/libide/foundry/ide-pipeline-addin.h
@@ -1,4 +1,4 @@
-/* ide-build-pipeline-addin.h
+/* ide-pipeline-addin.h
  *
  * Copyright 2016-2019 Christian Hergert <chergert redhat com>
  *
@@ -26,33 +26,33 @@
 
 #include <libide-core.h>
 
-#include "ide-build-pipeline.h"
+#include "ide-pipeline.h"
 
 G_BEGIN_DECLS
 
-#define IDE_TYPE_BUILD_PIPELINE_ADDIN (ide_build_pipeline_addin_get_type())
+#define IDE_TYPE_PIPELINE_ADDIN (ide_pipeline_addin_get_type())
 
 IDE_AVAILABLE_IN_3_32
-G_DECLARE_INTERFACE (IdeBuildPipelineAddin, ide_build_pipeline_addin, IDE, BUILD_PIPELINE_ADDIN, IdeObject)
+G_DECLARE_INTERFACE (IdePipelineAddin, ide_pipeline_addin, IDE, PIPELINE_ADDIN, IdeObject)
 
-struct _IdeBuildPipelineAddinInterface
+struct _IdePipelineAddinInterface
 {
   GTypeInterface type_interface;
 
-  void (*load)   (IdeBuildPipelineAddin *self,
-                  IdeBuildPipeline      *pipeline);
-  void (*unload) (IdeBuildPipelineAddin *self,
-                  IdeBuildPipeline      *pipeline);
+  void (*load)   (IdePipelineAddin *self,
+                  IdePipeline      *pipeline);
+  void (*unload) (IdePipelineAddin *self,
+                  IdePipeline      *pipeline);
 };
 
 IDE_AVAILABLE_IN_3_32
-void ide_build_pipeline_addin_load   (IdeBuildPipelineAddin *self,
-                                      IdeBuildPipeline      *pipeline);
+void ide_pipeline_addin_load   (IdePipelineAddin *self,
+                                      IdePipeline      *pipeline);
 IDE_AVAILABLE_IN_3_32
-void ide_build_pipeline_addin_unload (IdeBuildPipelineAddin *self,
-                                      IdeBuildPipeline      *pipeline);
+void ide_pipeline_addin_unload (IdePipelineAddin *self,
+                                      IdePipeline      *pipeline);
 IDE_AVAILABLE_IN_3_32
-void ide_build_pipeline_addin_track  (IdeBuildPipelineAddin *self,
+void ide_pipeline_addin_track  (IdePipelineAddin *self,
                                       guint                  stage_id);
 
 G_END_DECLS
diff --git a/src/libide/foundry/ide-build-stage-launcher.c b/src/libide/foundry/ide-pipeline-stage-launcher.c
similarity index 60%
rename from src/libide/foundry/ide-build-stage-launcher.c
rename to src/libide/foundry/ide-pipeline-stage-launcher.c
index 05786617a..c89775ccd 100644
--- a/src/libide/foundry/ide-build-stage-launcher.c
+++ b/src/libide/foundry/ide-pipeline-stage-launcher.c
@@ -1,4 +1,4 @@
-/* ide-build-stage-launcher.c
+/* ide-pipeline-stage-launcher.c
  *
  * Copyright 2016-2019 Christian Hergert <chergert redhat com>
  *
@@ -18,15 +18,15 @@
  * SPDX-License-Identifier: GPL-3.0-or-later
  */
 
-#define G_LOG_DOMAIN "ide-build-stage-launcher"
+#define G_LOG_DOMAIN "ide-pipeline-stage-launcher"
 
 #include "config.h"
 
 #include <libide-threading.h>
 
 #include "ide-build-log.h"
-#include "ide-build-pipeline.h"
-#include "ide-build-stage-launcher.h"
+#include "ide-pipeline.h"
+#include "ide-pipeline-stage-launcher.h"
 
 typedef struct
 {
@@ -34,7 +34,7 @@ typedef struct
   IdeSubprocessLauncher *clean_launcher;
   guint                  ignore_exit_status : 1;
   guint                  use_pty : 1;
-} IdeBuildStageLauncherPrivate;
+} IdePipelineStageLauncherPrivate;
 
 enum {
   PROP_0,
@@ -45,7 +45,7 @@ enum {
   N_PROPS
 };
 
-G_DEFINE_TYPE_WITH_PRIVATE (IdeBuildStageLauncher, ide_build_stage_launcher, IDE_TYPE_BUILD_STAGE)
+G_DEFINE_TYPE_WITH_PRIVATE (IdePipelineStageLauncher, ide_pipeline_stage_launcher, IDE_TYPE_PIPELINE_STAGE)
 
 static GParamSpec *properties [N_PROPS];
 
@@ -104,13 +104,13 @@ pretty_print_args (IdeSubprocessLauncher *launcher)
 }
 
 static void
-ide_build_stage_launcher_wait_cb (GObject      *object,
-                                  GAsyncResult *result,
-                                  gpointer      user_data)
+ide_pipeline_stage_launcher_wait_cb (GObject      *object,
+                                     GAsyncResult *result,
+                                     gpointer      user_data)
 {
   IdeSubprocess *subprocess = (IdeSubprocess *)object;
-  IdeBuildStageLauncher *self = NULL;
-  IdeBuildStageLauncherPrivate *priv;
+  IdePipelineStageLauncher *self = NULL;
+  IdePipelineStageLauncherPrivate *priv;
   g_autoptr(IdeTask) task = user_data;
   g_autoptr(GError) error = NULL;
   gint exit_status;
@@ -122,9 +122,9 @@ ide_build_stage_launcher_wait_cb (GObject      *object,
   g_assert (IDE_IS_TASK (task));
 
   self = ide_task_get_source_object (task);
-  g_assert (IDE_IS_BUILD_STAGE_LAUNCHER (self));
+  g_assert (IDE_IS_PIPELINE_STAGE_LAUNCHER (self));
 
-  priv = ide_build_stage_launcher_get_instance_private (self);
+  priv = ide_pipeline_stage_launcher_get_instance_private (self);
 
   IDE_TRACE_MSG ("  %s.ignore_exit_status=%u",
                  G_OBJECT_TYPE_NAME (self),
@@ -164,26 +164,26 @@ ignore_exit_failures:
 }
 
 static void
-ide_build_stage_launcher_notify_completed_cb (IdeTask               *task,
+ide_pipeline_stage_launcher_notify_completed_cb (IdeTask               *task,
                                               GParamSpec            *pspec,
-                                              IdeBuildStageLauncher *launcher)
+                                              IdePipelineStageLauncher *launcher)
 {
   g_assert (IDE_IS_TASK (task));
-  g_assert (IDE_IS_BUILD_STAGE_LAUNCHER (launcher));
+  g_assert (IDE_IS_PIPELINE_STAGE_LAUNCHER (launcher));
 
-  ide_build_stage_set_active (IDE_BUILD_STAGE (launcher), FALSE);
+  ide_pipeline_stage_set_active (IDE_PIPELINE_STAGE (launcher), FALSE);
 }
 
 static void
-ide_build_stage_launcher_run (IdeBuildStage         *stage,
+ide_pipeline_stage_launcher_run (IdePipelineStage         *stage,
                               IdeSubprocessLauncher *launcher,
-                              IdeBuildPipeline      *pipeline,
+                              IdePipeline      *pipeline,
                               GCancellable          *cancellable,
                               GAsyncReadyCallback    callback,
                               gpointer               user_data)
 {
-  IdeBuildStageLauncher *self = (IdeBuildStageLauncher *)stage;
-  G_GNUC_UNUSED IdeBuildStageLauncherPrivate *priv = ide_build_stage_launcher_get_instance_private (self);
+  IdePipelineStageLauncher *self = (IdePipelineStageLauncher *)stage;
+  G_GNUC_UNUSED IdePipelineStageLauncherPrivate *priv = ide_pipeline_stage_launcher_get_instance_private 
(self);
   g_autoptr(IdeTask) task = NULL;
   g_autoptr(GError) error = NULL;
   g_autoptr(IdeSubprocess) subprocess = NULL;
@@ -191,21 +191,21 @@ ide_build_stage_launcher_run (IdeBuildStage         *stage,
 
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_STAGE_LAUNCHER (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE_STAGE_LAUNCHER (self));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (!launcher || IDE_IS_SUBPROCESS_LAUNCHER (launcher));
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
 
   task = ide_task_new (self, cancellable, callback, user_data);
-  ide_task_set_source_tag (task, ide_build_stage_launcher_run);
+  ide_task_set_source_tag (task, ide_pipeline_stage_launcher_run);
   ide_task_set_priority (task, G_PRIORITY_LOW);
 
   g_signal_connect (task,
                     "notify::completed",
-                    G_CALLBACK (ide_build_stage_launcher_notify_completed_cb),
+                    G_CALLBACK (ide_pipeline_stage_launcher_notify_completed_cb),
                     self);
 
-  ide_build_stage_set_active (IDE_BUILD_STAGE (self), TRUE);
+  ide_pipeline_stage_set_active (IDE_PIPELINE_STAGE (self), TRUE);
 
   if (launcher == NULL)
     {
@@ -215,7 +215,7 @@ ide_build_stage_launcher_run (IdeBuildStage         *stage,
 
   if (priv->use_pty)
     {
-      ide_build_pipeline_attach_pty (pipeline, launcher);
+      ide_pipeline_attach_pty (pipeline, launcher);
     }
   else
     {
@@ -245,7 +245,7 @@ ide_build_stage_launcher_run (IdeBuildStage         *stage,
       g_autofree gchar *command = pretty_print_args (launcher);
 
       if (command != NULL)
-        ide_build_stage_log (IDE_BUILD_STAGE (self), IDE_BUILD_LOG_STDOUT, command, -1);
+        ide_pipeline_stage_log (IDE_PIPELINE_STAGE (self), IDE_BUILD_LOG_STDOUT, command, -1);
     }
 
   /* Now launch the process */
@@ -259,7 +259,7 @@ ide_build_stage_launcher_run (IdeBuildStage         *stage,
     }
 
   if (!priv->use_pty)
-    ide_build_stage_log_subprocess (IDE_BUILD_STAGE (self), subprocess);
+    ide_pipeline_stage_log_subprocess (IDE_PIPELINE_STAGE (self), subprocess);
 
   IDE_TRACE_MSG ("Waiting for process %s to complete, %s exit status",
                  ide_subprocess_get_identifier (subprocess),
@@ -267,29 +267,29 @@ ide_build_stage_launcher_run (IdeBuildStage         *stage,
 
   ide_subprocess_wait_async (subprocess,
                              cancellable,
-                             ide_build_stage_launcher_wait_cb,
+                             ide_pipeline_stage_launcher_wait_cb,
                              g_steal_pointer (&task));
 
   IDE_EXIT;
 }
 
 static void
-ide_build_stage_launcher_execute_async (IdeBuildStage       *stage,
-                                        IdeBuildPipeline    *pipeline,
+ide_pipeline_stage_launcher_build_async (IdePipelineStage       *stage,
+                                        IdePipeline    *pipeline,
                                         GCancellable        *cancellable,
                                         GAsyncReadyCallback  callback,
                                         gpointer             user_data)
 {
-  IdeBuildStageLauncher *self = (IdeBuildStageLauncher *)stage;
-  IdeBuildStageLauncherPrivate *priv = ide_build_stage_launcher_get_instance_private (self);
+  IdePipelineStageLauncher *self = (IdePipelineStageLauncher *)stage;
+  IdePipelineStageLauncherPrivate *priv = ide_pipeline_stage_launcher_get_instance_private (self);
 
-  g_return_if_fail (IDE_IS_BUILD_STAGE_LAUNCHER (self));
+  g_return_if_fail (IDE_IS_PIPELINE_STAGE_LAUNCHER (self));
 
-  ide_build_stage_launcher_run (stage, priv->launcher, pipeline, cancellable, callback, user_data);
+  ide_pipeline_stage_launcher_run (stage, priv->launcher, pipeline, cancellable, callback, user_data);
 }
 
 static gboolean
-ide_build_stage_launcher_execute_finish (IdeBuildStage  *stage,
+ide_pipeline_stage_launcher_build_finish (IdePipelineStage  *stage,
                                          GAsyncResult   *result,
                                          GError        **error)
 {
@@ -297,7 +297,7 @@ ide_build_stage_launcher_execute_finish (IdeBuildStage  *stage,
 
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_STAGE_LAUNCHER (stage));
+  g_assert (IDE_IS_PIPELINE_STAGE_LAUNCHER (stage));
   g_assert (IDE_IS_TASK (result));
 
   ret = ide_task_propagate_boolean (IDE_TASK (result), error);
@@ -306,22 +306,22 @@ ide_build_stage_launcher_execute_finish (IdeBuildStage  *stage,
 }
 
 static void
-ide_build_stage_launcher_clean_async (IdeBuildStage       *stage,
-                                      IdeBuildPipeline    *pipeline,
+ide_pipeline_stage_launcher_clean_async (IdePipelineStage       *stage,
+                                      IdePipeline    *pipeline,
                                       GCancellable        *cancellable,
                                       GAsyncReadyCallback  callback,
                                       gpointer             user_data)
 {
-  IdeBuildStageLauncher *self = (IdeBuildStageLauncher *)stage;
-  IdeBuildStageLauncherPrivate *priv = ide_build_stage_launcher_get_instance_private (self);
+  IdePipelineStageLauncher *self = (IdePipelineStageLauncher *)stage;
+  IdePipelineStageLauncherPrivate *priv = ide_pipeline_stage_launcher_get_instance_private (self);
 
-  g_return_if_fail (IDE_IS_BUILD_STAGE_LAUNCHER (self));
+  g_return_if_fail (IDE_IS_PIPELINE_STAGE_LAUNCHER (self));
 
-  ide_build_stage_launcher_run (stage, priv->clean_launcher, pipeline, cancellable, callback, user_data);
+  ide_pipeline_stage_launcher_run (stage, priv->clean_launcher, pipeline, cancellable, callback, user_data);
 }
 
 static gboolean
-ide_build_stage_launcher_clean_finish (IdeBuildStage  *stage,
+ide_pipeline_stage_launcher_clean_finish (IdePipelineStage  *stage,
                                        GAsyncResult   *result,
                                        GError        **error)
 {
@@ -329,7 +329,7 @@ ide_build_stage_launcher_clean_finish (IdeBuildStage  *stage,
 
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_STAGE_LAUNCHER (stage));
+  g_assert (IDE_IS_PIPELINE_STAGE_LAUNCHER (stage));
   g_assert (IDE_IS_TASK (result));
 
   ret = ide_task_propagate_boolean (IDE_TASK (result), error);
@@ -338,41 +338,41 @@ ide_build_stage_launcher_clean_finish (IdeBuildStage  *stage,
 }
 
 static void
-ide_build_stage_launcher_finalize (GObject *object)
+ide_pipeline_stage_launcher_finalize (GObject *object)
 {
-  IdeBuildStageLauncher *self = (IdeBuildStageLauncher *)object;
-  IdeBuildStageLauncherPrivate *priv = ide_build_stage_launcher_get_instance_private (self);
+  IdePipelineStageLauncher *self = (IdePipelineStageLauncher *)object;
+  IdePipelineStageLauncherPrivate *priv = ide_pipeline_stage_launcher_get_instance_private (self);
 
   g_clear_object (&priv->launcher);
   g_clear_object (&priv->clean_launcher);
 
-  G_OBJECT_CLASS (ide_build_stage_launcher_parent_class)->finalize (object);
+  G_OBJECT_CLASS (ide_pipeline_stage_launcher_parent_class)->finalize (object);
 }
 
 static void
-ide_build_stage_launcher_get_property (GObject    *object,
+ide_pipeline_stage_launcher_get_property (GObject    *object,
                                        guint       prop_id,
                                        GValue     *value,
                                        GParamSpec *pspec)
 {
-  IdeBuildStageLauncher *self = (IdeBuildStageLauncher *)object;
+  IdePipelineStageLauncher *self = (IdePipelineStageLauncher *)object;
 
   switch (prop_id)
     {
     case PROP_CLEAN_LAUNCHER:
-      g_value_set_object (value, ide_build_stage_launcher_get_clean_launcher (self));
+      g_value_set_object (value, ide_pipeline_stage_launcher_get_clean_launcher (self));
       break;
 
     case PROP_USE_PTY:
-      g_value_set_boolean (value, ide_build_stage_launcher_get_use_pty (self));
+      g_value_set_boolean (value, ide_pipeline_stage_launcher_get_use_pty (self));
       break;
 
     case PROP_IGNORE_EXIT_STATUS:
-      g_value_set_boolean (value, ide_build_stage_launcher_get_ignore_exit_status (self));
+      g_value_set_boolean (value, ide_pipeline_stage_launcher_get_ignore_exit_status (self));
       break;
 
     case PROP_LAUNCHER:
-      g_value_set_object (value, ide_build_stage_launcher_get_launcher (self));
+      g_value_set_object (value, ide_pipeline_stage_launcher_get_launcher (self));
       break;
 
     default:
@@ -381,29 +381,29 @@ ide_build_stage_launcher_get_property (GObject    *object,
 }
 
 static void
-ide_build_stage_launcher_set_property (GObject      *object,
+ide_pipeline_stage_launcher_set_property (GObject      *object,
                                        guint         prop_id,
                                        const GValue *value,
                                        GParamSpec   *pspec)
 {
-  IdeBuildStageLauncher *self = (IdeBuildStageLauncher *)object;
+  IdePipelineStageLauncher *self = (IdePipelineStageLauncher *)object;
 
   switch (prop_id)
     {
     case PROP_CLEAN_LAUNCHER:
-      ide_build_stage_launcher_set_clean_launcher (self, g_value_get_object (value));
+      ide_pipeline_stage_launcher_set_clean_launcher (self, g_value_get_object (value));
       break;
 
     case PROP_USE_PTY:
-      ide_build_stage_launcher_set_use_pty (self, g_value_get_boolean (value));
+      ide_pipeline_stage_launcher_set_use_pty (self, g_value_get_boolean (value));
       break;
 
     case PROP_IGNORE_EXIT_STATUS:
-      ide_build_stage_launcher_set_ignore_exit_status (self, g_value_get_boolean (value));
+      ide_pipeline_stage_launcher_set_ignore_exit_status (self, g_value_get_boolean (value));
       break;
 
     case PROP_LAUNCHER:
-      ide_build_stage_launcher_set_launcher (self, g_value_get_object (value));
+      ide_pipeline_stage_launcher_set_launcher (self, g_value_get_object (value));
       break;
 
     default:
@@ -412,19 +412,19 @@ ide_build_stage_launcher_set_property (GObject      *object,
 }
 
 static void
-ide_build_stage_launcher_class_init (IdeBuildStageLauncherClass *klass)
+ide_pipeline_stage_launcher_class_init (IdePipelineStageLauncherClass *klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
-  IdeBuildStageClass *build_stage_class = IDE_BUILD_STAGE_CLASS (klass);
+  IdePipelineStageClass *build_stage_class = IDE_PIPELINE_STAGE_CLASS (klass);
 
-  object_class->finalize = ide_build_stage_launcher_finalize;
-  object_class->get_property = ide_build_stage_launcher_get_property;
-  object_class->set_property = ide_build_stage_launcher_set_property;
+  object_class->finalize = ide_pipeline_stage_launcher_finalize;
+  object_class->get_property = ide_pipeline_stage_launcher_get_property;
+  object_class->set_property = ide_pipeline_stage_launcher_set_property;
 
-  build_stage_class->execute_async = ide_build_stage_launcher_execute_async;
-  build_stage_class->execute_finish = ide_build_stage_launcher_execute_finish;
-  build_stage_class->clean_async = ide_build_stage_launcher_clean_async;
-  build_stage_class->clean_finish = ide_build_stage_launcher_clean_finish;
+  build_stage_class->build_async = ide_pipeline_stage_launcher_build_async;
+  build_stage_class->build_finish = ide_pipeline_stage_launcher_build_finish;
+  build_stage_class->clean_async = ide_pipeline_stage_launcher_clean_async;
+  build_stage_class->clean_finish = ide_pipeline_stage_launcher_clean_finish;
 
   properties [PROP_CLEAN_LAUNCHER] =
     g_param_spec_object ("clean-launcher",
@@ -450,7 +450,7 @@ ide_build_stage_launcher_class_init (IdeBuildStageLauncherClass *klass)
   properties [PROP_LAUNCHER] =
     g_param_spec_object ("launcher",
                          "Launcher",
-                         "The subprocess launcher to execute",
+                         "The subprocess launcher to build",
                          IDE_TYPE_SUBPROCESS_LAUNCHER,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
@@ -458,37 +458,37 @@ ide_build_stage_launcher_class_init (IdeBuildStageLauncherClass *klass)
 }
 
 static void
-ide_build_stage_launcher_init (IdeBuildStageLauncher *self)
+ide_pipeline_stage_launcher_init (IdePipelineStageLauncher *self)
 {
-  IdeBuildStageLauncherPrivate *priv = ide_build_stage_launcher_get_instance_private (self);
+  IdePipelineStageLauncherPrivate *priv = ide_pipeline_stage_launcher_get_instance_private (self);
 
   priv->use_pty = TRUE;
 }
 
 /**
- * ide_build_stage_launcher_get_launcher:
+ * ide_pipeline_stage_launcher_get_launcher:
  *
  * Returns: (transfer none): An #IdeSubprocessLauncher
  *
  * Since: 3.32
  */
 IdeSubprocessLauncher *
-ide_build_stage_launcher_get_launcher (IdeBuildStageLauncher *self)
+ide_pipeline_stage_launcher_get_launcher (IdePipelineStageLauncher *self)
 {
-  IdeBuildStageLauncherPrivate *priv = ide_build_stage_launcher_get_instance_private (self);
+  IdePipelineStageLauncherPrivate *priv = ide_pipeline_stage_launcher_get_instance_private (self);
 
-  g_return_val_if_fail (IDE_IS_BUILD_STAGE_LAUNCHER (self), NULL);
+  g_return_val_if_fail (IDE_IS_PIPELINE_STAGE_LAUNCHER (self), NULL);
 
   return priv->launcher;
 }
 
 void
-ide_build_stage_launcher_set_launcher (IdeBuildStageLauncher *self,
+ide_pipeline_stage_launcher_set_launcher (IdePipelineStageLauncher *self,
                                        IdeSubprocessLauncher *launcher)
 {
-  IdeBuildStageLauncherPrivate *priv = ide_build_stage_launcher_get_instance_private (self);
+  IdePipelineStageLauncherPrivate *priv = ide_pipeline_stage_launcher_get_instance_private (self);
 
-  g_return_if_fail (IDE_IS_BUILD_STAGE_LAUNCHER (self));
+  g_return_if_fail (IDE_IS_PIPELINE_STAGE_LAUNCHER (self));
   g_return_if_fail (!launcher || IDE_IS_SUBPROCESS_LAUNCHER (launcher));
 
   if (g_set_object (&priv->launcher, launcher))
@@ -496,28 +496,28 @@ ide_build_stage_launcher_set_launcher (IdeBuildStageLauncher *self,
 }
 
 /**
- * ide_build_stage_launcher_new:
+ * ide_pipeline_stage_launcher_new:
  * @context: An #IdeContext
  * @launcher: (nullable): An #IdeSubprocessLauncher or %NULL
  *
- * Creates a new #IdeBuildStageLauncher that can be attached to an
- * #IdeBuildPipeline.
+ * Creates a new #IdePipelineStageLauncher that can be attached to an
+ * #IdePipeline.
  *
- * Returns: (transfer full): An #IdeBuildStageLauncher
+ * Returns: (transfer full): An #IdePipelineStageLauncher
  *
  * Since: 3.32
  */
-IdeBuildStage *
-ide_build_stage_launcher_new (IdeContext            *context,
+IdePipelineStage *
+ide_pipeline_stage_launcher_new (IdeContext            *context,
                               IdeSubprocessLauncher *launcher)
 {
-  return g_object_new (IDE_TYPE_BUILD_STAGE_LAUNCHER,
+  return g_object_new (IDE_TYPE_PIPELINE_STAGE_LAUNCHER,
                        "launcher", launcher,
                        NULL);
 }
 
 /**
- * ide_build_stage_launcher_get_ignore_exit_status:
+ * ide_pipeline_stage_launcher_get_ignore_exit_status:
  *
  * Gets the "ignore-exit-status" property.
  *
@@ -527,17 +527,17 @@ ide_build_stage_launcher_new (IdeContext            *context,
  * Since: 3.32
  */
 gboolean
-ide_build_stage_launcher_get_ignore_exit_status (IdeBuildStageLauncher *self)
+ide_pipeline_stage_launcher_get_ignore_exit_status (IdePipelineStageLauncher *self)
 {
-  IdeBuildStageLauncherPrivate *priv = ide_build_stage_launcher_get_instance_private (self);
+  IdePipelineStageLauncherPrivate *priv = ide_pipeline_stage_launcher_get_instance_private (self);
 
-  g_return_val_if_fail (IDE_IS_BUILD_STAGE_LAUNCHER (self), FALSE);
+  g_return_val_if_fail (IDE_IS_PIPELINE_STAGE_LAUNCHER (self), FALSE);
 
   return priv->ignore_exit_status;
 }
 
 /**
- * ide_build_stage_launcher_set_ignore_exit_status:
+ * ide_pipeline_stage_launcher_set_ignore_exit_status:
  *
  * Sets the "ignore-exit-status" property.
  *
@@ -547,14 +547,14 @@ ide_build_stage_launcher_get_ignore_exit_status (IdeBuildStageLauncher *self)
  * Since: 3.32
  */
 void
-ide_build_stage_launcher_set_ignore_exit_status (IdeBuildStageLauncher *self,
+ide_pipeline_stage_launcher_set_ignore_exit_status (IdePipelineStageLauncher *self,
                                                  gboolean               ignore_exit_status)
 {
-  IdeBuildStageLauncherPrivate *priv = ide_build_stage_launcher_get_instance_private (self);
+  IdePipelineStageLauncherPrivate *priv = ide_pipeline_stage_launcher_get_instance_private (self);
 
   IDE_ENTRY;
 
-  g_return_if_fail (IDE_IS_BUILD_STAGE_LAUNCHER (self));
+  g_return_if_fail (IDE_IS_PIPELINE_STAGE_LAUNCHER (self));
 
   ignore_exit_status = !!ignore_exit_status;
 
@@ -569,12 +569,12 @@ ide_build_stage_launcher_set_ignore_exit_status (IdeBuildStageLauncher *self,
 }
 
 void
-ide_build_stage_launcher_set_clean_launcher (IdeBuildStageLauncher *self,
+ide_pipeline_stage_launcher_set_clean_launcher (IdePipelineStageLauncher *self,
                                              IdeSubprocessLauncher *clean_launcher)
 {
-  IdeBuildStageLauncherPrivate *priv = ide_build_stage_launcher_get_instance_private (self);
+  IdePipelineStageLauncherPrivate *priv = ide_pipeline_stage_launcher_get_instance_private (self);
 
-  g_return_if_fail (IDE_IS_BUILD_STAGE_LAUNCHER (self));
+  g_return_if_fail (IDE_IS_PIPELINE_STAGE_LAUNCHER (self));
   g_return_if_fail (IDE_IS_SUBPROCESS_LAUNCHER (clean_launcher));
 
   if (g_set_object (&priv->clean_launcher, clean_launcher))
@@ -582,35 +582,35 @@ ide_build_stage_launcher_set_clean_launcher (IdeBuildStageLauncher *self,
 }
 
 /**
- * ide_build_stage_launcher_get_clean_launcher:
+ * ide_pipeline_stage_launcher_get_clean_launcher:
  *
  * Returns: (nullable) (transfer none): An #IdeSubprocessLauncher or %NULL.
  *
  * Since: 3.32
  */
 IdeSubprocessLauncher *
-ide_build_stage_launcher_get_clean_launcher (IdeBuildStageLauncher *self)
+ide_pipeline_stage_launcher_get_clean_launcher (IdePipelineStageLauncher *self)
 {
-  IdeBuildStageLauncherPrivate *priv = ide_build_stage_launcher_get_instance_private (self);
+  IdePipelineStageLauncherPrivate *priv = ide_pipeline_stage_launcher_get_instance_private (self);
 
-  g_return_val_if_fail (IDE_IS_BUILD_STAGE_LAUNCHER (self), NULL);
+  g_return_val_if_fail (IDE_IS_PIPELINE_STAGE_LAUNCHER (self), NULL);
 
   return priv->clean_launcher;
 }
 
 gboolean
-ide_build_stage_launcher_get_use_pty (IdeBuildStageLauncher *self)
+ide_pipeline_stage_launcher_get_use_pty (IdePipelineStageLauncher *self)
 {
-  IdeBuildStageLauncherPrivate *priv = ide_build_stage_launcher_get_instance_private (self);
+  IdePipelineStageLauncherPrivate *priv = ide_pipeline_stage_launcher_get_instance_private (self);
 
-  g_return_val_if_fail (IDE_IS_BUILD_STAGE_LAUNCHER (self), FALSE);
+  g_return_val_if_fail (IDE_IS_PIPELINE_STAGE_LAUNCHER (self), FALSE);
 
   return priv->use_pty;
 }
 
 /**
- * ide_build_stage_launcher_set_use_pty:
- * @self: a #IdeBuildStageLauncher
+ * ide_pipeline_stage_launcher_set_use_pty:
+ * @self: a #IdePipelineStageLauncher
  * @use_pty: If a Pty should be used
  *
  * If @use_pty is set to %TRUE, a Pty will be attached to the process.
@@ -618,12 +618,12 @@ ide_build_stage_launcher_get_use_pty (IdeBuildStageLauncher *self)
  * Since: 3.32
  */
 void
-ide_build_stage_launcher_set_use_pty (IdeBuildStageLauncher *self,
+ide_pipeline_stage_launcher_set_use_pty (IdePipelineStageLauncher *self,
                                       gboolean               use_pty)
 {
-  IdeBuildStageLauncherPrivate *priv = ide_build_stage_launcher_get_instance_private (self);
+  IdePipelineStageLauncherPrivate *priv = ide_pipeline_stage_launcher_get_instance_private (self);
 
-  g_return_if_fail (IDE_IS_BUILD_STAGE_LAUNCHER (self));
+  g_return_if_fail (IDE_IS_PIPELINE_STAGE_LAUNCHER (self));
 
   use_pty = !!use_pty;
 
diff --git a/src/libide/foundry/ide-build-stage-launcher.h b/src/libide/foundry/ide-pipeline-stage-launcher.h
similarity index 57%
rename from src/libide/foundry/ide-build-stage-launcher.h
rename to src/libide/foundry/ide-pipeline-stage-launcher.h
index e454343e7..7ab552d05 100644
--- a/src/libide/foundry/ide-build-stage-launcher.h
+++ b/src/libide/foundry/ide-pipeline-stage-launcher.h
@@ -1,4 +1,4 @@
-/* ide-build-stage-launcher.h
+/* ide-pipeline-stage-launcher.h
  *
  * Copyright 2016-2019 Christian Hergert <chergert redhat com>
  *
@@ -27,45 +27,45 @@
 #include <libide-core.h>
 #include <libide-threading.h>
 
-#include "ide-build-stage.h"
+#include "ide-pipeline-stage.h"
 
 G_BEGIN_DECLS
 
-#define IDE_TYPE_BUILD_STAGE_LAUNCHER (ide_build_stage_launcher_get_type())
+#define IDE_TYPE_PIPELINE_STAGE_LAUNCHER (ide_pipeline_stage_launcher_get_type())
 
 IDE_AVAILABLE_IN_3_32
-G_DECLARE_DERIVABLE_TYPE (IdeBuildStageLauncher, ide_build_stage_launcher, IDE, BUILD_STAGE_LAUNCHER, 
IdeBuildStage)
+G_DECLARE_DERIVABLE_TYPE (IdePipelineStageLauncher, ide_pipeline_stage_launcher, IDE, 
PIPELINE_STAGE_LAUNCHER, IdePipelineStage)
 
-struct _IdeBuildStageLauncherClass
+struct _IdePipelineStageLauncherClass
 {
-  IdeBuildStageClass parent_class;
+  IdePipelineStageClass parent_class;
 
   /*< private >*/
   gpointer _reserved[8];
 };
 
 IDE_AVAILABLE_IN_3_32
-IdeBuildStage         *ide_build_stage_launcher_new                    (IdeContext            *context,
+IdePipelineStage         *ide_pipeline_stage_launcher_new                    (IdeContext            *context,
                                                                         IdeSubprocessLauncher *launcher);
 IDE_AVAILABLE_IN_3_32
-IdeSubprocessLauncher *ide_build_stage_launcher_get_launcher           (IdeBuildStageLauncher *self);
+IdeSubprocessLauncher *ide_pipeline_stage_launcher_get_launcher           (IdePipelineStageLauncher *self);
 IDE_AVAILABLE_IN_3_32
-void                   ide_build_stage_launcher_set_launcher           (IdeBuildStageLauncher *self,
+void                   ide_pipeline_stage_launcher_set_launcher           (IdePipelineStageLauncher *self,
                                                                         IdeSubprocessLauncher *launcher);
 IDE_AVAILABLE_IN_3_32
-IdeSubprocessLauncher *ide_build_stage_launcher_get_clean_launcher     (IdeBuildStageLauncher *self);
+IdeSubprocessLauncher *ide_pipeline_stage_launcher_get_clean_launcher     (IdePipelineStageLauncher *self);
 IDE_AVAILABLE_IN_3_32
-void                   ide_build_stage_launcher_set_clean_launcher     (IdeBuildStageLauncher *self,
+void                   ide_pipeline_stage_launcher_set_clean_launcher     (IdePipelineStageLauncher *self,
                                                                         IdeSubprocessLauncher 
*clean_launcher);
 IDE_AVAILABLE_IN_3_32
-gboolean               ide_build_stage_launcher_get_ignore_exit_status (IdeBuildStageLauncher *self);
+gboolean               ide_pipeline_stage_launcher_get_ignore_exit_status (IdePipelineStageLauncher *self);
 IDE_AVAILABLE_IN_3_32
-void                   ide_build_stage_launcher_set_ignore_exit_status (IdeBuildStageLauncher *self,
+void                   ide_pipeline_stage_launcher_set_ignore_exit_status (IdePipelineStageLauncher *self,
                                                                         gboolean               
ignore_exit_status);
 IDE_AVAILABLE_IN_3_32
-gboolean               ide_build_stage_launcher_get_use_pty            (IdeBuildStageLauncher *self);
+gboolean               ide_pipeline_stage_launcher_get_use_pty            (IdePipelineStageLauncher *self);
 IDE_AVAILABLE_IN_3_32
-void                   ide_build_stage_launcher_set_use_pty            (IdeBuildStageLauncher *self,
+void                   ide_pipeline_stage_launcher_set_use_pty            (IdePipelineStageLauncher *self,
                                                                         gboolean               use_pty);
 
 G_END_DECLS
diff --git a/src/libide/foundry/ide-build-stage-mkdirs.c b/src/libide/foundry/ide-pipeline-stage-mkdirs.c
similarity index 57%
rename from src/libide/foundry/ide-build-stage-mkdirs.c
rename to src/libide/foundry/ide-pipeline-stage-mkdirs.c
index 900300c7b..a3be032ae 100644
--- a/src/libide/foundry/ide-build-stage-mkdirs.c
+++ b/src/libide/foundry/ide-pipeline-stage-mkdirs.c
@@ -1,4 +1,4 @@
-/* ide-build-stage-mkdirs.c
+/* ide-pipeline-stage-mkdirs.c
  *
  * Copyright 2016-2019 Christian Hergert <chergert redhat com>
  *
@@ -18,7 +18,7 @@
  * SPDX-License-Identifier: GPL-3.0-or-later
  */
 
-#define G_LOG_DOMAIN "ide-build-stage-mkdirs"
+#define G_LOG_DOMAIN "ide-pipeline-stage-mkdirs"
 
 #include "config.h"
 
@@ -29,8 +29,8 @@
 #include <sys/stat.h>
 #include <sys/types.h>
 
-#include "ide-build-pipeline.h"
-#include "ide-build-stage-mkdirs.h"
+#include "ide-pipeline.h"
+#include "ide-pipeline-stage-mkdirs.h"
 
 typedef struct
 {
@@ -43,9 +43,9 @@ typedef struct
 typedef struct
 {
   GArray *paths;
-} IdeBuildStageMkdirsPrivate;
+} IdePipelineStageMkdirsPrivate;
 
-G_DEFINE_TYPE_WITH_PRIVATE (IdeBuildStageMkdirs, ide_build_stage_mkdirs, IDE_TYPE_BUILD_STAGE)
+G_DEFINE_TYPE_WITH_PRIVATE (IdePipelineStageMkdirs, ide_pipeline_stage_mkdirs, IDE_TYPE_PIPELINE_STAGE)
 
 static void
 clear_path (gpointer data)
@@ -56,18 +56,18 @@ clear_path (gpointer data)
 }
 
 static void
-ide_build_stage_mkdirs_query (IdeBuildStage    *stage,
-                              IdeBuildPipeline *pipeline,
+ide_pipeline_stage_mkdirs_query (IdePipelineStage    *stage,
+                              IdePipeline *pipeline,
                               GPtrArray        *targets,
                               GCancellable     *cancellable)
 {
-  IdeBuildStageMkdirs *self = (IdeBuildStageMkdirs *)stage;
-  IdeBuildStageMkdirsPrivate *priv = ide_build_stage_mkdirs_get_instance_private (self);
+  IdePipelineStageMkdirs *self = (IdePipelineStageMkdirs *)stage;
+  IdePipelineStageMkdirsPrivate *priv = ide_pipeline_stage_mkdirs_get_instance_private (self);
 
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_STAGE_MKDIRS (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE_STAGE_MKDIRS (self));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
 
   for (guint i = 0; i < priv->paths->len; i++)
@@ -76,31 +76,31 @@ ide_build_stage_mkdirs_query (IdeBuildStage    *stage,
 
       if (!g_file_test (path->path, G_FILE_TEST_EXISTS))
         {
-          ide_build_stage_set_completed (stage, FALSE);
+          ide_pipeline_stage_set_completed (stage, FALSE);
           IDE_EXIT;
         }
     }
 
-  ide_build_stage_set_completed (stage, TRUE);
+  ide_pipeline_stage_set_completed (stage, TRUE);
 
   IDE_EXIT;
 }
 
 static gboolean
-ide_build_stage_mkdirs_execute (IdeBuildStage     *stage,
-                                IdeBuildPipeline  *pipeline,
+ide_pipeline_stage_mkdirs_build (IdePipelineStage     *stage,
+                                IdePipeline  *pipeline,
                                 GCancellable      *cancellable,
                                 GError           **error)
 {
-  IdeBuildStageMkdirs *self = (IdeBuildStageMkdirs *)stage;
-  IdeBuildStageMkdirsPrivate *priv = ide_build_stage_mkdirs_get_instance_private (self);
+  IdePipelineStageMkdirs *self = (IdePipelineStageMkdirs *)stage;
+  IdePipelineStageMkdirsPrivate *priv = ide_pipeline_stage_mkdirs_get_instance_private (self);
 
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_STAGE_MKDIRS (self));
+  g_assert (IDE_IS_PIPELINE_STAGE_MKDIRS (self));
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
 
-  ide_build_stage_set_active (stage, TRUE);
+  ide_pipeline_stage_set_active (stage, TRUE);
 
   for (guint i = 0; i < priv->paths->len; i++)
     {
@@ -112,7 +112,7 @@ ide_build_stage_mkdirs_execute (IdeBuildStage     *stage,
         continue;
 
       message = g_strdup_printf ("Creating directory “%s”", path->path);
-      ide_build_stage_log (IDE_BUILD_STAGE (stage), IDE_BUILD_LOG_STDOUT, message, -1);
+      ide_pipeline_stage_log (IDE_PIPELINE_STAGE (stage), IDE_BUILD_LOG_STDOUT, message, -1);
 
       if (path->with_parents)
         r = g_mkdir_with_parents (path->path, path->mode);
@@ -129,22 +129,22 @@ ide_build_stage_mkdirs_execute (IdeBuildStage     *stage,
         }
     }
 
-  ide_build_stage_set_active (stage, FALSE);
+  ide_pipeline_stage_set_active (stage, FALSE);
 
   IDE_RETURN (TRUE);
 }
 
 static void
-ide_build_stage_mkdirs_reap (IdeBuildStage      *stage,
+ide_pipeline_stage_mkdirs_reap (IdePipelineStage      *stage,
                              DzlDirectoryReaper *reaper)
 {
-  IdeBuildStageMkdirs *self = (IdeBuildStageMkdirs *)stage;
-  IdeBuildStageMkdirsPrivate *priv = ide_build_stage_mkdirs_get_instance_private (self);
+  IdePipelineStageMkdirs *self = (IdePipelineStageMkdirs *)stage;
+  IdePipelineStageMkdirsPrivate *priv = ide_pipeline_stage_mkdirs_get_instance_private (self);
 
-  g_assert (IDE_IS_BUILD_STAGE_MKDIRS (self));
+  g_assert (IDE_IS_PIPELINE_STAGE_MKDIRS (self));
   g_assert (DZL_IS_DIRECTORY_REAPER (reaper));
 
-  ide_build_stage_set_active (stage, TRUE);
+  ide_pipeline_stage_set_active (stage, TRUE);
 
   for (guint i = 0; i < priv->paths->len; i++)
     {
@@ -157,60 +157,60 @@ ide_build_stage_mkdirs_reap (IdeBuildStage      *stage,
         }
     }
 
-  ide_build_stage_set_active (stage, FALSE);
+  ide_pipeline_stage_set_active (stage, FALSE);
 }
 
 static void
-ide_build_stage_mkdirs_finalize (GObject *object)
+ide_pipeline_stage_mkdirs_finalize (GObject *object)
 {
-  IdeBuildStageMkdirs *self = (IdeBuildStageMkdirs *)object;
-  IdeBuildStageMkdirsPrivate *priv = ide_build_stage_mkdirs_get_instance_private (self);
+  IdePipelineStageMkdirs *self = (IdePipelineStageMkdirs *)object;
+  IdePipelineStageMkdirsPrivate *priv = ide_pipeline_stage_mkdirs_get_instance_private (self);
 
   g_clear_pointer (&priv->paths, g_array_unref);
 
-  G_OBJECT_CLASS (ide_build_stage_mkdirs_parent_class)->finalize (object);
+  G_OBJECT_CLASS (ide_pipeline_stage_mkdirs_parent_class)->finalize (object);
 }
 
 static void
-ide_build_stage_mkdirs_class_init (IdeBuildStageMkdirsClass *klass)
+ide_pipeline_stage_mkdirs_class_init (IdePipelineStageMkdirsClass *klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
-  IdeBuildStageClass *stage_class = IDE_BUILD_STAGE_CLASS (klass);
+  IdePipelineStageClass *stage_class = IDE_PIPELINE_STAGE_CLASS (klass);
 
-  object_class->finalize = ide_build_stage_mkdirs_finalize;
+  object_class->finalize = ide_pipeline_stage_mkdirs_finalize;
 
-  stage_class->execute = ide_build_stage_mkdirs_execute;
-  stage_class->query = ide_build_stage_mkdirs_query;
-  stage_class->reap = ide_build_stage_mkdirs_reap;
+  stage_class->build = ide_pipeline_stage_mkdirs_build;
+  stage_class->query = ide_pipeline_stage_mkdirs_query;
+  stage_class->reap = ide_pipeline_stage_mkdirs_reap;
 }
 
 static void
-ide_build_stage_mkdirs_init (IdeBuildStageMkdirs *self)
+ide_pipeline_stage_mkdirs_init (IdePipelineStageMkdirs *self)
 {
-  IdeBuildStageMkdirsPrivate *priv = ide_build_stage_mkdirs_get_instance_private (self);
+  IdePipelineStageMkdirsPrivate *priv = ide_pipeline_stage_mkdirs_get_instance_private (self);
 
   priv->paths = g_array_new (FALSE, FALSE, sizeof (Path));
   g_array_set_clear_func (priv->paths, clear_path);
 }
 
-IdeBuildStage *
-ide_build_stage_mkdirs_new (IdeContext *context)
+IdePipelineStage *
+ide_pipeline_stage_mkdirs_new (IdeContext *context)
 {
-  return g_object_new (IDE_TYPE_BUILD_STAGE_MKDIRS,
+  return g_object_new (IDE_TYPE_PIPELINE_STAGE_MKDIRS,
                        NULL);
 }
 
 void
-ide_build_stage_mkdirs_add_path (IdeBuildStageMkdirs *self,
+ide_pipeline_stage_mkdirs_add_path (IdePipelineStageMkdirs *self,
                                  const gchar         *path,
                                  gboolean             with_parents,
                                  gint                 mode,
                                  gboolean             remove_on_rebuild)
 {
-  IdeBuildStageMkdirsPrivate *priv = ide_build_stage_mkdirs_get_instance_private (self);
+  IdePipelineStageMkdirsPrivate *priv = ide_pipeline_stage_mkdirs_get_instance_private (self);
   Path ele = { 0 };
 
-  g_return_if_fail (IDE_IS_BUILD_STAGE_MKDIRS (self));
+  g_return_if_fail (IDE_IS_PIPELINE_STAGE_MKDIRS (self));
   g_return_if_fail (path != NULL);
 
   ele.path = g_strdup (path);
diff --git a/src/libide/foundry/ide-build-stage-mkdirs.h b/src/libide/foundry/ide-pipeline-stage-mkdirs.h
similarity index 55%
rename from src/libide/foundry/ide-build-stage-mkdirs.h
rename to src/libide/foundry/ide-pipeline-stage-mkdirs.h
index c8bb3d6f4..3acd2ccdb 100644
--- a/src/libide/foundry/ide-build-stage-mkdirs.h
+++ b/src/libide/foundry/ide-pipeline-stage-mkdirs.h
@@ -1,4 +1,4 @@
-/* ide-build-stage-mkdirs.h
+/* ide-pipeline-stage-mkdirs.h
  *
  * Copyright 2016-2019 Christian Hergert <chergert redhat com>
  *
@@ -26,30 +26,30 @@
 
 #include <libide-core.h>
 
-#include "ide-build-stage.h"
+#include "ide-pipeline-stage.h"
 
 G_BEGIN_DECLS
 
-#define IDE_TYPE_BUILD_STAGE_MKDIRS (ide_build_stage_mkdirs_get_type())
+#define IDE_TYPE_PIPELINE_STAGE_MKDIRS (ide_pipeline_stage_mkdirs_get_type())
 
 IDE_AVAILABLE_IN_3_32
-G_DECLARE_DERIVABLE_TYPE (IdeBuildStageMkdirs, ide_build_stage_mkdirs, IDE, BUILD_STAGE_MKDIRS, 
IdeBuildStage)
+G_DECLARE_DERIVABLE_TYPE (IdePipelineStageMkdirs, ide_pipeline_stage_mkdirs, IDE, PIPELINE_STAGE_MKDIRS, 
IdePipelineStage)
 
-struct _IdeBuildStageMkdirsClass
+struct _IdePipelineStageMkdirsClass
 {
-  IdeBuildStageClass parent_class;
+  IdePipelineStageClass parent_class;
 
   /*< private >*/
   gpointer _reserved[8];
 };
 
 IDE_AVAILABLE_IN_3_32
-IdeBuildStage *ide_build_stage_mkdirs_new      (IdeContext          *context);
+IdePipelineStage *ide_pipeline_stage_mkdirs_new      (IdeContext             *context);
 IDE_AVAILABLE_IN_3_32
-void           ide_build_stage_mkdirs_add_path (IdeBuildStageMkdirs *self,
-                                                const gchar         *path,
-                                                gboolean             with_parents,
-                                                gint                 mode,
-                                                gboolean             remove_on_rebuild);
+void              ide_pipeline_stage_mkdirs_add_path (IdePipelineStageMkdirs *self,
+                                                      const gchar            *path,
+                                                      gboolean                with_parents,
+                                                      gint                    mode,
+                                                      gboolean                remove_on_rebuild);
 
 G_END_DECLS
diff --git a/src/libide/foundry/ide-pipeline-stage-private.h b/src/libide/foundry/ide-pipeline-stage-private.h
new file mode 100644
index 000000000..6f9f1b615
--- /dev/null
+++ b/src/libide/foundry/ide-pipeline-stage-private.h
@@ -0,0 +1,41 @@
+/* ide-pipeline-stage-private.h
+ *
+ * Copyright 2016-2019 Christian Hergert <chergert redhat com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+
+#pragma once
+
+#include "ide-foundry-types.h"
+
+G_BEGIN_DECLS
+
+gboolean      _ide_pipeline_stage_has_query               (IdePipelineStage     *self);
+IdePipelinePhase _ide_pipeline_stage_get_phase               (IdePipelineStage     *self);
+void          _ide_pipeline_stage_set_phase               (IdePipelineStage     *self,
+                                                           IdePipelinePhase         phase);
+void          _ide_pipeline_stage_build_with_query_async  (IdePipelineStage     *self,
+                                                           IdePipeline          *pipeline,
+                                                           GPtrArray            *targets,
+                                                           GCancellable         *cancellable,
+                                                           GAsyncReadyCallback   callback,
+                                                           gpointer              user_data);
+gboolean      _ide_pipeline_stage_build_with_query_finish (IdePipelineStage     *self,
+                                                           GAsyncResult         *result,
+                                                           GError              **error);
+
+G_END_DECLS
diff --git a/src/libide/foundry/ide-build-stage-transfer.c b/src/libide/foundry/ide-pipeline-stage-transfer.c
similarity index 62%
rename from src/libide/foundry/ide-build-stage-transfer.c
rename to src/libide/foundry/ide-pipeline-stage-transfer.c
index c27e46b24..203a0ce8b 100644
--- a/src/libide/foundry/ide-build-stage-transfer.c
+++ b/src/libide/foundry/ide-pipeline-stage-transfer.c
@@ -1,4 +1,4 @@
-/* ide-build-stage-transfer.c
+/* ide-pipeline-stage-transfer.c
  *
  * Copyright 2016-2019 Christian Hergert <chergert redhat com>
  *
@@ -18,20 +18,20 @@
  * SPDX-License-Identifier: GPL-3.0-or-later
  */
 
-#define G_LOG_DOMAIN "ide-build-stage-transfer"
+#define G_LOG_DOMAIN "ide-pipeline-stage-transfer"
 
 #include "config.h"
 
 #include <libide-threading.h>
 #include <glib/gi18n.h>
 
-#include "ide-build-stage-transfer.h"
-#include "ide-build-pipeline.h"
+#include "ide-pipeline-stage-transfer.h"
+#include "ide-pipeline.h"
 #include "ide-transfer.h"
 
-struct _IdeBuildStageTransfer
+struct _IdePipelineStageTransfer
 {
-  IdeBuildStage  parent_instance;
+  IdePipelineStage  parent_instance;
   IdeTransfer   *transfer;
   guint          disable_when_metered : 1;
 };
@@ -43,14 +43,14 @@ enum {
   N_PROPS
 };
 
-G_DEFINE_TYPE (IdeBuildStageTransfer, ide_build_stage_transfer, IDE_TYPE_BUILD_STAGE)
+G_DEFINE_TYPE (IdePipelineStageTransfer, ide_pipeline_stage_transfer, IDE_TYPE_PIPELINE_STAGE)
 
 static GParamSpec *properties [N_PROPS];
 
 static void
-ide_build_stage_transfer_execute_cb (GObject      *object,
-                                     GAsyncResult *result,
-                                     gpointer      user_data)
+ide_pipeline_stage_transfer_execute_cb (GObject      *object,
+                                        GAsyncResult *result,
+                                        gpointer      user_data)
 {
   IdeTransferManager *transfer_manager = (IdeTransferManager *)object;
   g_autoptr(IdeTask) task = user_data;
@@ -73,24 +73,24 @@ ide_build_stage_transfer_execute_cb (GObject      *object,
 }
 
 static void
-ide_build_stage_transfer_notify_completed_cb (IdeTask               *task,
-                                              GParamSpec            *pspec,
-                                              IdeBuildStageTransfer *transfer)
+ide_pipeline_stage_transfer_notify_completed_cb (IdeTask                  *task,
+                                                 GParamSpec               *pspec,
+                                                 IdePipelineStageTransfer *transfer)
 {
   g_assert (IDE_IS_TASK (task));
-  g_assert (IDE_IS_BUILD_STAGE_TRANSFER (transfer));
+  g_assert (IDE_IS_PIPELINE_STAGE_TRANSFER (transfer));
 
-  ide_build_stage_set_active (IDE_BUILD_STAGE (transfer), FALSE);
+  ide_pipeline_stage_set_active (IDE_PIPELINE_STAGE (transfer), FALSE);
 }
 
 static void
-ide_build_stage_transfer_execute_async (IdeBuildStage       *stage,
-                                        IdeBuildPipeline    *pipeline,
-                                        GCancellable        *cancellable,
-                                        GAsyncReadyCallback  callback,
-                                        gpointer             user_data)
+ide_pipeline_stage_transfer_build_async (IdePipelineStage    *stage,
+                                         IdePipeline         *pipeline,
+                                         GCancellable        *cancellable,
+                                         GAsyncReadyCallback  callback,
+                                         gpointer             user_data)
 {
-  IdeBuildStageTransfer *self = (IdeBuildStageTransfer *)stage;
+  IdePipelineStageTransfer *self = (IdePipelineStageTransfer *)stage;
   g_autoptr(IdeNotification) notif = NULL;
   g_autoptr(IdeNotifications) notifs = NULL;
   g_autoptr(IdeTask) task = NULL;
@@ -99,20 +99,20 @@ ide_build_stage_transfer_execute_async (IdeBuildStage       *stage,
 
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_STAGE_TRANSFER (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE_STAGE_TRANSFER (self));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
 
   task = ide_task_new (self, cancellable, callback, user_data);
-  ide_task_set_source_tag (task, ide_build_stage_transfer_execute_async);
+  ide_task_set_source_tag (task, ide_pipeline_stage_transfer_build_async);
   ide_task_set_priority (task, G_PRIORITY_LOW);
 
   g_signal_connect (task,
                     "notify::completed",
-                    G_CALLBACK (ide_build_stage_transfer_notify_completed_cb),
+                    G_CALLBACK (ide_pipeline_stage_transfer_notify_completed_cb),
                     self);
 
-  ide_build_stage_set_active (stage, TRUE);
+  ide_pipeline_stage_set_active (stage, TRUE);
 
   if (ide_transfer_get_completed (self->transfer))
     {
@@ -133,7 +133,7 @@ ide_build_stage_transfer_execute_async (IdeBuildStage       *stage,
               ide_task_return_new_error (task,
                                          IDE_TRANSFER_ERROR,
                                          IDE_TRANSFER_ERROR_CONNECTION_IS_METERED,
-                                         _("Cannot execute transfer while on metered connection"));
+                                         _("Cannot build transfer while on metered connection"));
               IDE_EXIT;
             }
         }
@@ -160,40 +160,40 @@ ide_build_stage_transfer_execute_async (IdeBuildStage       *stage,
   ide_transfer_manager_execute_async (NULL,
                                       self->transfer,
                                       cancellable,
-                                      ide_build_stage_transfer_execute_cb,
+                                      ide_pipeline_stage_transfer_execute_cb,
                                       g_steal_pointer (&task));
 
   IDE_EXIT;
 }
 
 static gboolean
-ide_build_stage_transfer_execute_finish (IdeBuildStage  *stage,
-                                         GAsyncResult   *result,
-                                         GError        **error)
+ide_pipeline_stage_transfer_build_finish (IdePipelineStage  *stage,
+                                          GAsyncResult      *result,
+                                          GError           **error)
 {
-  g_assert (IDE_IS_BUILD_STAGE_TRANSFER (stage));
+  g_assert (IDE_IS_PIPELINE_STAGE_TRANSFER (stage));
   g_assert (IDE_IS_TASK (result));
 
   return ide_task_propagate_boolean (IDE_TASK (result), error);
 }
 
 static void
-ide_build_stage_transfer_finalize (GObject *object)
+ide_pipeline_stage_transfer_finalize (GObject *object)
 {
-  IdeBuildStageTransfer *self = (IdeBuildStageTransfer *)object;
+  IdePipelineStageTransfer *self = (IdePipelineStageTransfer *)object;
 
   g_clear_object (&self->transfer);
 
-  G_OBJECT_CLASS (ide_build_stage_transfer_parent_class)->finalize (object);
+  G_OBJECT_CLASS (ide_pipeline_stage_transfer_parent_class)->finalize (object);
 }
 
 static void
-ide_build_stage_transfer_get_property (GObject    *object,
-                                       guint       prop_id,
-                                       GValue     *value,
-                                       GParamSpec *pspec)
+ide_pipeline_stage_transfer_get_property (GObject    *object,
+                                          guint       prop_id,
+                                          GValue     *value,
+                                          GParamSpec *pspec)
 {
-  IdeBuildStageTransfer *self = (IdeBuildStageTransfer *)object;
+  IdePipelineStageTransfer *self = (IdePipelineStageTransfer *)object;
 
   switch (prop_id)
     {
@@ -211,12 +211,12 @@ ide_build_stage_transfer_get_property (GObject    *object,
 }
 
 static void
-ide_build_stage_transfer_set_property (GObject      *object,
-                                       guint         prop_id,
-                                       const GValue *value,
-                                       GParamSpec   *pspec)
+ide_pipeline_stage_transfer_set_property (GObject      *object,
+                                          guint         prop_id,
+                                          const GValue *value,
+                                          GParamSpec   *pspec)
 {
-  IdeBuildStageTransfer *self = (IdeBuildStageTransfer *)object;
+  IdePipelineStageTransfer *self = (IdePipelineStageTransfer *)object;
 
   switch (prop_id)
     {
@@ -234,17 +234,17 @@ ide_build_stage_transfer_set_property (GObject      *object,
 }
 
 static void
-ide_build_stage_transfer_class_init (IdeBuildStageTransferClass *klass)
+ide_pipeline_stage_transfer_class_init (IdePipelineStageTransferClass *klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
-  IdeBuildStageClass *build_stage_class = IDE_BUILD_STAGE_CLASS (klass);
+  IdePipelineStageClass *build_stage_class = IDE_PIPELINE_STAGE_CLASS (klass);
 
-  object_class->finalize = ide_build_stage_transfer_finalize;
-  object_class->get_property = ide_build_stage_transfer_get_property;
-  object_class->set_property = ide_build_stage_transfer_set_property;
+  object_class->finalize = ide_pipeline_stage_transfer_finalize;
+  object_class->get_property = ide_pipeline_stage_transfer_get_property;
+  object_class->set_property = ide_pipeline_stage_transfer_set_property;
 
-  build_stage_class->execute_async = ide_build_stage_transfer_execute_async;
-  build_stage_class->execute_finish = ide_build_stage_transfer_execute_finish;
+  build_stage_class->build_async = ide_pipeline_stage_transfer_build_async;
+  build_stage_class->build_finish = ide_pipeline_stage_transfer_build_finish;
 
   properties [PROP_DISABLE_WHEN_METERED] =
     g_param_spec_boolean ("disable-when-metered",
@@ -264,7 +264,7 @@ ide_build_stage_transfer_class_init (IdeBuildStageTransferClass *klass)
 }
 
 static void
-ide_build_stage_transfer_init (IdeBuildStageTransfer *self)
+ide_pipeline_stage_transfer_init (IdePipelineStageTransfer *self)
 {
   self->disable_when_metered = TRUE;
 }
diff --git a/src/libide/foundry/ide-build-stage-transfer.h b/src/libide/foundry/ide-pipeline-stage-transfer.h
similarity index 70%
rename from src/libide/foundry/ide-build-stage-transfer.h
rename to src/libide/foundry/ide-pipeline-stage-transfer.h
index bb6ee2304..4e3252740 100644
--- a/src/libide/foundry/ide-build-stage-transfer.h
+++ b/src/libide/foundry/ide-pipeline-stage-transfer.h
@@ -1,4 +1,4 @@
-/* ide-build-stage-transfer.h
+/* ide-pipeline-stage-transfer.h
  *
  * Copyright 2016-2019 Christian Hergert <chergert redhat com>
  *
@@ -26,17 +26,17 @@
 
 #include <libide-core.h>
 
-#include "ide-build-stage.h"
+#include "ide-pipeline-stage.h"
 
 G_BEGIN_DECLS
 
-#define IDE_TYPE_BUILD_STAGE_TRANSFER (ide_build_stage_transfer_get_type())
+#define IDE_TYPE_PIPELINE_STAGE_TRANSFER (ide_pipeline_stage_transfer_get_type())
 
 IDE_AVAILABLE_IN_3_32
-G_DECLARE_FINAL_TYPE (IdeBuildStageTransfer, ide_build_stage_transfer, IDE, BUILD_STAGE_TRANSFER, 
IdeBuildStage)
+G_DECLARE_FINAL_TYPE (IdePipelineStageTransfer, ide_pipeline_stage_transfer, IDE, PIPELINE_STAGE_TRANSFER, 
IdePipelineStage)
 
 IDE_AVAILABLE_IN_3_32
-IdeBuildStageTransfer *ide_build_stage_transfer_new (IdeContext  *context,
-                                                     IdeTransfer *transfer);
+IdePipelineStageTransfer *ide_pipeline_stage_transfer_new (IdeContext  *context,
+                                                           IdeTransfer *transfer);
 
 G_END_DECLS
diff --git a/src/libide/foundry/ide-build-stage.c b/src/libide/foundry/ide-pipeline-stage.c
similarity index 53%
rename from src/libide/foundry/ide-build-stage.c
rename to src/libide/foundry/ide-pipeline-stage.c
index 872ca4c74..811499f56 100644
--- a/src/libide/foundry/ide-build-stage.c
+++ b/src/libide/foundry/ide-pipeline-stage.c
@@ -1,4 +1,4 @@
-/* ide-build-stage.c
+/* ide-pipeline-stage.c
  *
  * Copyright 2016-2019 Christian Hergert <chergert redhat com>
  *
@@ -18,16 +18,16 @@
  * SPDX-License-Identifier: GPL-3.0-or-later
  */
 
-#define G_LOG_DOMAIN "ide-build-stage"
+#define G_LOG_DOMAIN "ide-pipeline-stage"
 
 #include "config.h"
 
 #include <libide-threading.h>
 #include <string.h>
 
-#include "ide-build-pipeline.h"
-#include "ide-build-stage.h"
-#include "ide-build-stage-private.h"
+#include "ide-pipeline.h"
+#include "ide-pipeline-stage.h"
+#include "ide-pipeline-stage-private.h"
 
 typedef struct
 {
@@ -35,19 +35,19 @@ typedef struct
   IdeBuildLogObserver  observer;
   gpointer             observer_data;
   GDestroyNotify       observer_data_destroy;
-  IdeTask             *queued_execute;
+  IdeTask             *queued_build;
   gchar               *stdout_path;
   GOutputStream       *stdout_stream;
   gint                 n_pause;
-  IdeBuildPhase        phase;
+  IdePipelinePhase        phase;
   guint                completed : 1;
   guint                disabled : 1;
   guint                transient : 1;
   guint                check_stdout : 1;
   guint                active : 1;
-} IdeBuildStagePrivate;
+} IdePipelineStagePrivate;
 
-G_DEFINE_TYPE_WITH_PRIVATE (IdeBuildStage, ide_build_stage, IDE_TYPE_OBJECT)
+G_DEFINE_TYPE_WITH_PRIVATE (IdePipelineStage, ide_pipeline_stage, IDE_TYPE_OBJECT)
 
 enum {
   PROP_0,
@@ -73,19 +73,19 @@ static guint signals [N_SIGNALS];
 
 typedef struct
 {
-  IdeBuildStage     *self;
+  IdePipelineStage     *self;
   GOutputStream     *stream;
   IdeBuildLogStream  stream_type;
 } Tail;
 
 static Tail *
-tail_new (IdeBuildStage     *self,
+tail_new (IdePipelineStage     *self,
           GOutputStream     *stream,
           IdeBuildLogStream  stream_type)
 {
   Tail *tail;
 
-  g_assert (IDE_IS_BUILD_STAGE (self));
+  g_assert (IDE_IS_PIPELINE_STAGE (self));
   g_assert (!stream || G_IS_OUTPUT_STREAM (stream));
   g_assert (stream_type == IDE_BUILD_LOG_STDOUT || stream_type == IDE_BUILD_LOG_STDERR);
 
@@ -110,9 +110,9 @@ tail_free (Tail *tail)
 }
 
 static void
-ide_build_stage_clear_observer (IdeBuildStage *self)
+ide_pipeline_stage_clear_observer (IdePipelineStage *self)
 {
-  IdeBuildStagePrivate *priv = ide_build_stage_get_instance_private (self);
+  IdePipelineStagePrivate *priv = ide_pipeline_stage_get_instance_private (self);
   GDestroyNotify notify = priv->observer_data_destroy;
   gpointer data = priv->observer_data;
 
@@ -125,85 +125,85 @@ ide_build_stage_clear_observer (IdeBuildStage *self)
 }
 
 static gboolean
-ide_build_stage_real_execute (IdeBuildStage     *self,
-                              IdeBuildPipeline  *pipeline,
-                              GCancellable      *cancellable,
-                              GError           **error)
+ide_pipeline_stage_real_build (IdePipelineStage  *self,
+                               IdePipeline       *pipeline,
+                               GCancellable      *cancellable,
+                               GError           **error)
 {
-  g_assert (IDE_IS_BUILD_STAGE (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE_STAGE (self));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
 
   return TRUE;
 }
 
 static void
-ide_build_stage_real_execute_worker (IdeTask      *task,
-                                     gpointer      source_object,
-                                     gpointer      task_data,
-                                     GCancellable *cancellable)
+ide_pipeline_stage_real_build_worker (IdeTask      *task,
+                                      gpointer      source_object,
+                                      gpointer      task_data,
+                                      GCancellable *cancellable)
 {
-  IdeBuildStage *self = source_object;
-  IdeBuildPipeline *pipeline = task_data;
+  IdePipelineStage *self = source_object;
+  IdePipeline *pipeline = task_data;
   g_autoptr(GError) error = NULL;
 
   g_assert (IDE_IS_TASK (task));
-  g_assert (IDE_IS_BUILD_STAGE (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE_STAGE (self));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
-  if (IDE_BUILD_STAGE_GET_CLASS (self)->execute (self, pipeline, cancellable, &error))
+  if (IDE_PIPELINE_STAGE_GET_CLASS (self)->build (self, pipeline, cancellable, &error))
     ide_task_return_boolean (task, TRUE);
   else
     ide_task_return_error (task, g_steal_pointer (&error));
 }
 
 static void
-ide_build_stage_real_execute_async (IdeBuildStage       *self,
-                                    IdeBuildPipeline    *pipeline,
-                                    GCancellable        *cancellable,
-                                    GAsyncReadyCallback  callback,
-                                    gpointer             user_data)
+ide_pipeline_stage_real_build_async (IdePipelineStage    *self,
+                                     IdePipeline         *pipeline,
+                                     GCancellable        *cancellable,
+                                     GAsyncReadyCallback  callback,
+                                     gpointer             user_data)
 {
   g_autoptr(IdeTask) task = NULL;
 
-  g_assert (IDE_IS_BUILD_STAGE (self));
+  g_assert (IDE_IS_PIPELINE_STAGE (self));
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
   task = ide_task_new (self, cancellable, callback, user_data);
-  ide_task_set_source_tag (task, ide_build_stage_real_execute_async);
+  ide_task_set_source_tag (task, ide_pipeline_stage_real_build_async);
   ide_task_set_task_data (task, g_object_ref (pipeline), g_object_unref);
-  ide_task_run_in_thread (task, ide_build_stage_real_execute_worker);
+  ide_task_run_in_thread (task, ide_pipeline_stage_real_build_worker);
 }
 
 static gboolean
-ide_build_stage_real_execute_finish (IdeBuildStage  *self,
-                                     GAsyncResult   *result,
-                                     GError        **error)
+ide_pipeline_stage_real_build_finish (IdePipelineStage  *self,
+                                      GAsyncResult      *result,
+                                      GError           **error)
 {
-  g_assert (IDE_IS_BUILD_STAGE (self));
+  g_assert (IDE_IS_PIPELINE_STAGE (self));
   g_assert (IDE_IS_TASK (result));
 
   return ide_task_propagate_boolean (IDE_TASK (result), error);
 }
 
 const gchar *
-ide_build_stage_get_name (IdeBuildStage *self)
+ide_pipeline_stage_get_name (IdePipelineStage *self)
 {
-  IdeBuildStagePrivate *priv = ide_build_stage_get_instance_private (self);
+  IdePipelineStagePrivate *priv = ide_pipeline_stage_get_instance_private (self);
 
-  g_return_val_if_fail (IDE_IS_BUILD_STAGE (self), NULL);
+  g_return_val_if_fail (IDE_IS_PIPELINE_STAGE (self), NULL);
 
   return priv->name;
 }
 
 void
-ide_build_stage_set_name (IdeBuildStage *self,
-                          const gchar   *name)
+ide_pipeline_stage_set_name (IdePipelineStage *self,
+                             const gchar      *name)
 {
-  IdeBuildStagePrivate *priv = ide_build_stage_get_instance_private (self);
+  IdePipelineStagePrivate *priv = ide_pipeline_stage_get_instance_private (self);
 
-  g_return_if_fail (IDE_IS_BUILD_STAGE (self));
+  g_return_if_fail (IDE_IS_PIPELINE_STAGE (self));
 
   if (g_strcmp0 (name, priv->name) != 0)
     {
@@ -214,89 +214,89 @@ ide_build_stage_set_name (IdeBuildStage *self,
 }
 
 static void
-ide_build_stage_real_clean_async (IdeBuildStage       *self,
-                                  IdeBuildPipeline    *pipeline,
-                                  GCancellable        *cancellable,
-                                  GAsyncReadyCallback  callback,
-                                  gpointer             user_data)
+ide_pipeline_stage_real_clean_async (IdePipelineStage    *self,
+                                     IdePipeline         *pipeline,
+                                     GCancellable        *cancellable,
+                                     GAsyncReadyCallback  callback,
+                                     gpointer             user_data)
 {
   g_autoptr(IdeTask) task = NULL;
 
-  g_assert (IDE_IS_BUILD_STAGE (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE_STAGE (self));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
 
   task = ide_task_new (self, cancellable, callback, user_data);
-  ide_task_set_source_tag (task, ide_build_stage_real_clean_async);
+  ide_task_set_source_tag (task, ide_pipeline_stage_real_clean_async);
 
-  ide_build_stage_set_completed (self, FALSE);
+  ide_pipeline_stage_set_completed (self, FALSE);
 
   ide_task_return_boolean (task, TRUE);
 }
 
 static gboolean
-ide_build_stage_real_clean_finish (IdeBuildStage  *self,
-                                   GAsyncResult   *result,
-                                   GError        **error)
+ide_pipeline_stage_real_clean_finish (IdePipelineStage  *self,
+                                      GAsyncResult      *result,
+                                      GError           **error)
 {
   return ide_task_propagate_boolean (IDE_TASK (result), error);
 }
 
 static gboolean
-ide_build_stage_real_chain (IdeBuildStage *self,
-                            IdeBuildStage *next)
+ide_pipeline_stage_real_chain (IdePipelineStage *self,
+                               IdePipelineStage *next)
 {
   return FALSE;
 }
 
 static void
-ide_build_stage_finalize (GObject *object)
+ide_pipeline_stage_finalize (GObject *object)
 {
-  IdeBuildStage *self = (IdeBuildStage *)object;
-  IdeBuildStagePrivate *priv = ide_build_stage_get_instance_private (self);
+  IdePipelineStage *self = (IdePipelineStage *)object;
+  IdePipelineStagePrivate *priv = ide_pipeline_stage_get_instance_private (self);
 
-  ide_build_stage_clear_observer (self);
+  ide_pipeline_stage_clear_observer (self);
 
   g_clear_pointer (&priv->name, g_free);
   g_clear_pointer (&priv->stdout_path, g_free);
-  g_clear_object (&priv->queued_execute);
+  g_clear_object (&priv->queued_build);
   g_clear_object (&priv->stdout_stream);
 
-  G_OBJECT_CLASS (ide_build_stage_parent_class)->finalize (object);
+  G_OBJECT_CLASS (ide_pipeline_stage_parent_class)->finalize (object);
 }
 
 static void
-ide_build_stage_get_property (GObject    *object,
-                              guint       prop_id,
-                              GValue     *value,
-                              GParamSpec *pspec)
+ide_pipeline_stage_get_property (GObject    *object,
+                                 guint       prop_id,
+                                 GValue     *value,
+                                 GParamSpec *pspec)
 {
-  IdeBuildStage *self = IDE_BUILD_STAGE (object);
+  IdePipelineStage *self = IDE_PIPELINE_STAGE (object);
 
   switch (prop_id)
     {
     case PROP_ACTIVE:
-      g_value_set_boolean (value, ide_build_stage_get_active (self));
+      g_value_set_boolean (value, ide_pipeline_stage_get_active (self));
       break;
 
     case PROP_CHECK_STDOUT:
-      g_value_set_boolean (value, ide_build_stage_get_check_stdout (self));
+      g_value_set_boolean (value, ide_pipeline_stage_get_check_stdout (self));
       break;
 
     case PROP_COMPLETED:
-      g_value_set_boolean (value, ide_build_stage_get_completed (self));
+      g_value_set_boolean (value, ide_pipeline_stage_get_completed (self));
       break;
 
     case PROP_DISABLED:
-      g_value_set_boolean (value, ide_build_stage_get_disabled (self));
+      g_value_set_boolean (value, ide_pipeline_stage_get_disabled (self));
       break;
 
     case PROP_NAME:
-      g_value_set_string (value, ide_build_stage_get_name (self));
+      g_value_set_string (value, ide_pipeline_stage_get_name (self));
       break;
 
     case PROP_STDOUT_PATH:
-      g_value_set_string (value, ide_build_stage_get_stdout_path (self));
+      g_value_set_string (value, ide_pipeline_stage_get_stdout_path (self));
       break;
 
     default:
@@ -305,37 +305,37 @@ ide_build_stage_get_property (GObject    *object,
 }
 
 static void
-ide_build_stage_set_property (GObject      *object,
-                              guint         prop_id,
-                              const GValue *value,
-                              GParamSpec   *pspec)
+ide_pipeline_stage_set_property (GObject      *object,
+                                 guint         prop_id,
+                                 const GValue *value,
+                                 GParamSpec   *pspec)
 {
-  IdeBuildStage *self = IDE_BUILD_STAGE (object);
+  IdePipelineStage *self = IDE_PIPELINE_STAGE (object);
 
   switch (prop_id)
     {
     case PROP_ACTIVE:
-      ide_build_stage_set_active (self, g_value_get_boolean (value));
+      ide_pipeline_stage_set_active (self, g_value_get_boolean (value));
       break;
 
     case PROP_CHECK_STDOUT:
-      ide_build_stage_set_check_stdout (self, g_value_get_boolean (value));
+      ide_pipeline_stage_set_check_stdout (self, g_value_get_boolean (value));
       break;
 
     case PROP_COMPLETED:
-      ide_build_stage_set_completed (self, g_value_get_boolean (value));
+      ide_pipeline_stage_set_completed (self, g_value_get_boolean (value));
       break;
 
     case PROP_DISABLED:
-      ide_build_stage_set_disabled (self, g_value_get_boolean (value));
+      ide_pipeline_stage_set_disabled (self, g_value_get_boolean (value));
       break;
 
     case PROP_NAME:
-      ide_build_stage_set_name (self, g_value_get_string (value));
+      ide_pipeline_stage_set_name (self, g_value_get_string (value));
       break;
 
     case PROP_STDOUT_PATH:
-      ide_build_stage_set_stdout_path (self, g_value_get_string (value));
+      ide_pipeline_stage_set_stdout_path (self, g_value_get_string (value));
       break;
 
     default:
@@ -344,23 +344,23 @@ ide_build_stage_set_property (GObject      *object,
 }
 
 static void
-ide_build_stage_class_init (IdeBuildStageClass *klass)
+ide_pipeline_stage_class_init (IdePipelineStageClass *klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-  object_class->finalize = ide_build_stage_finalize;
-  object_class->get_property = ide_build_stage_get_property;
-  object_class->set_property = ide_build_stage_set_property;
+  object_class->finalize = ide_pipeline_stage_finalize;
+  object_class->get_property = ide_pipeline_stage_get_property;
+  object_class->set_property = ide_pipeline_stage_set_property;
 
-  klass->execute = ide_build_stage_real_execute;
-  klass->execute_async = ide_build_stage_real_execute_async;
-  klass->execute_finish = ide_build_stage_real_execute_finish;
-  klass->clean_async = ide_build_stage_real_clean_async;
-  klass->clean_finish = ide_build_stage_real_clean_finish;
-  klass->chain = ide_build_stage_real_chain;
+  klass->build = ide_pipeline_stage_real_build;
+  klass->build_async = ide_pipeline_stage_real_build_async;
+  klass->build_finish = ide_pipeline_stage_real_build_finish;
+  klass->clean_async = ide_pipeline_stage_real_clean_async;
+  klass->clean_finish = ide_pipeline_stage_real_clean_finish;
+  klass->chain = ide_pipeline_stage_real_chain;
 
   /**
-   * IdeBuildStage:active:
+   * IdePipelineStage:active:
    *
    * This property is set to %TRUE when the build stage is actively
    * running or cleaning.
@@ -375,7 +375,7 @@ ide_build_stage_class_init (IdeBuildStageClass *klass)
                           G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
 
   /**
-   * IdeBuildStage:check-stdout:
+   * IdePipelineStage:check-stdout:
    *
    * Most build systems will preserve stderr for the processes they call, such
    * as gcc, clang, and others. However, if your build system redirects all
@@ -394,7 +394,7 @@ ide_build_stage_class_init (IdeBuildStageClass *klass)
                          (G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS));
 
   /**
-   * IdeBuildStage:completed:
+   * IdePipelineStage:completed:
    *
    * The "completed" property is set to %TRUE after the pipeline has
    * completed processing the stage. When the pipeline invalidates
@@ -410,12 +410,12 @@ ide_build_stage_class_init (IdeBuildStageClass *klass)
                           (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
   /**
-   * IdeBuildStage:disabled:
+   * IdePipelineStage:disabled:
    *
    * If the build stage is disabled. This allows you to have a stage that is
    * attached but will not be activated during execution.
    *
-   * You may enable it later and then re-execute the pipeline.
+   * You may enable it later and then re-build the pipeline.
    *
    * If the stage is both transient and disabled, it will not be removed during
    * the transient cleanup phase.
@@ -430,7 +430,7 @@ ide_build_stage_class_init (IdeBuildStageClass *klass)
                           (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
   /**
-   * IdeBuildStage:name:
+   * IdePipelineStage:name:
    *
    * The name of the build stage. This is only used by UI to view
    * the build pipeline.
@@ -445,7 +445,7 @@ ide_build_stage_class_init (IdeBuildStageClass *klass)
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
   /**
-   * IdeBuildStage:stdout-path:
+   * IdePipelineStage:stdout-path:
    *
    * The "stdout-path" property allows a build stage to redirect its log
    * messages to a stdout file. Instead of passing stdout along to the
@@ -465,12 +465,12 @@ ide_build_stage_class_init (IdeBuildStageClass *klass)
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
   /**
-   * IdeBuildStage:transient:
+   * IdePipelineStage:transient:
    *
    * If the build stage is transient.
    *
    * A transient build stage is removed after the completion of
-   * ide_build_pipeline_execute_async(). This can be a convenient
+   * ide_pipeline_build_async(). This can be a convenient
    * way to add a temporary item to a build pipeline that should
    * be immediately discarded.
    *
@@ -486,7 +486,7 @@ ide_build_stage_class_init (IdeBuildStageClass *klass)
   g_object_class_install_properties (object_class, N_PROPS, properties);
 
   /**
-   * IdeBuildStage:chain:
+   * IdePipelineStage:chain:
    *
    * We might want to be able to "chain" multiple stages into a single stage
    * so that we can avoid duplicate work. For example, if we have a "make"
@@ -502,21 +502,21 @@ ide_build_stage_class_init (IdeBuildStageClass *klass)
     g_signal_new ("chain",
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST,
-                  G_STRUCT_OFFSET (IdeBuildStageClass, chain),
+                  G_STRUCT_OFFSET (IdePipelineStageClass, chain),
                   g_signal_accumulator_true_handled,
                   NULL,
                   NULL,
-                  G_TYPE_BOOLEAN, 1, IDE_TYPE_BUILD_STAGE);
+                  G_TYPE_BOOLEAN, 1, IDE_TYPE_PIPELINE_STAGE);
 
   /**
-   * IdeBuildStage::query:
-   * @self: An #IdeBuildStage
-   * @pipeline: An #IdeBuildPipeline
+   * IdePipelineStage::query:
+   * @self: An #IdePipelineStage
+   * @pipeline: An #IdePipeline
    * @targets: (element-type IdeBuildTarget) (nullable): an array
    *   of #IdeBuildTarget or %NULL
    * @cancellable: (nullable): a #GCancellable or %NULL
    *
-   * The #IdeBuildStage::query signal is emitted to request that the
+   * The #IdePipelineStage::query signal is emitted to request that the
    * build stage update its completed stage from any external resources.
    *
    * This can be useful if you want to use an existing build stage instances
@@ -524,12 +524,12 @@ ide_build_stage_class_init (IdeBuildStageClass *klass)
    * has been checked.
    *
    * The targets that the user would like to ensure are built are provided
-   * as @targets. Some #IdeBuildStage may use this to reduce the amount
+   * as @targets. Some #IdePipelineStage may use this to reduce the amount
    * of work they perform
    *
-   * For example, in a signal handler, you may call ide_build_stage_pause()
+   * For example, in a signal handler, you may call ide_pipeline_stage_pause()
    * and perform an external operation. Forward progress of the stage will
-   * be paused until a matching number of ide_build_stage_unpause() calls
+   * be paused until a matching number of ide_pipeline_stage_unpause() calls
    * have been made.
    *
    * Since: 3.32
@@ -538,23 +538,23 @@ ide_build_stage_class_init (IdeBuildStageClass *klass)
     g_signal_new ("query",
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST,
-                  G_STRUCT_OFFSET (IdeBuildStageClass, query),
+                  G_STRUCT_OFFSET (IdePipelineStageClass, query),
                   NULL, NULL, NULL,
                   G_TYPE_NONE,
                   3,
-                  IDE_TYPE_BUILD_PIPELINE,
+                  IDE_TYPE_PIPELINE,
                   G_TYPE_PTR_ARRAY,
                   G_TYPE_CANCELLABLE);
 
   /**
-   * IdeBuildStage::reap:
-   * @self: An #IdeBuildStage
+   * IdePipelineStage::reap:
+   * @self: An #IdePipelineStage
    * @reaper: An #DzlDirectoryReaper
    *
    * This signal is emitted when a request to rebuild the project has
    * occurred. This allows build stages to ensure that certain files are
    * removed from the system. For example, an autotools build stage might
-   * request that "configure" is removed so that autogen.sh will be executed
+   * request that "configure" is removed so that autogen.sh will be Executed
    * as part of the next build.
    *
    * Since: 3.32
@@ -563,27 +563,27 @@ ide_build_stage_class_init (IdeBuildStageClass *klass)
     g_signal_new ("reap",
                   G_TYPE_FROM_CLASS (klass),
                   G_SIGNAL_RUN_LAST,
-                  G_STRUCT_OFFSET (IdeBuildStageClass, reap),
+                  G_STRUCT_OFFSET (IdePipelineStageClass, reap),
                   NULL, NULL, NULL,
                   G_TYPE_NONE, 1, DZL_TYPE_DIRECTORY_REAPER);
 }
 
 static void
-ide_build_stage_init (IdeBuildStage *self)
+ide_pipeline_stage_init (IdePipelineStage *self)
 {
 }
 
 void
-ide_build_stage_execute_async (IdeBuildStage       *self,
-                               IdeBuildPipeline    *pipeline,
-                               GCancellable        *cancellable,
-                               GAsyncReadyCallback  callback,
-                               gpointer             user_data)
+ide_pipeline_stage_build_async (IdePipelineStage    *self,
+                                  IdePipeline         *pipeline,
+                                  GCancellable        *cancellable,
+                                  GAsyncReadyCallback  callback,
+                                  gpointer             user_data)
 {
-  IdeBuildStagePrivate *priv = ide_build_stage_get_instance_private (self);
+  IdePipelineStagePrivate *priv = ide_pipeline_stage_get_instance_private (self);
 
-  g_return_if_fail (IDE_IS_BUILD_STAGE (self));
-  g_return_if_fail (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_return_if_fail (IDE_IS_PIPELINE_STAGE (self));
+  g_return_if_fail (IDE_IS_PIPELINE (pipeline));
   g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable));
 
   if G_UNLIKELY (priv->stdout_path != NULL)
@@ -598,7 +598,7 @@ ide_build_stage_execute_async (IdeBuildStage       *self,
       if (stream == NULL)
         {
           g_task_report_error (self, callback, user_data,
-                               ide_build_stage_execute_async,
+                               ide_pipeline_stage_build_async,
                                g_steal_pointer (&error));
           return;
         }
@@ -608,39 +608,39 @@ ide_build_stage_execute_async (IdeBuildStage       *self,
       priv->stdout_stream = G_OUTPUT_STREAM (g_steal_pointer (&stream));
     }
 
-  IDE_BUILD_STAGE_GET_CLASS (self)->execute_async (self, pipeline, cancellable, callback, user_data);
+  IDE_PIPELINE_STAGE_GET_CLASS (self)->build_async (self, pipeline, cancellable, callback, user_data);
 }
 
 gboolean
-ide_build_stage_execute_finish (IdeBuildStage  *self,
-                                GAsyncResult   *result,
-                                GError        **error)
+ide_pipeline_stage_build_finish (IdePipelineStage  *self,
+                                   GAsyncResult      *result,
+                                   GError           **error)
 {
-  IdeBuildStagePrivate *priv = ide_build_stage_get_instance_private (self);
+  IdePipelineStagePrivate *priv = ide_pipeline_stage_get_instance_private (self);
 
-  g_return_val_if_fail (IDE_IS_BUILD_STAGE (self), FALSE);
+  g_return_val_if_fail (IDE_IS_PIPELINE_STAGE (self), FALSE);
   g_return_val_if_fail (G_IS_ASYNC_RESULT (result), FALSE);
 
   /*
-   * If for some reason execute_finish() is not called (likely due to use of
+   * If for some reason build_finish() is not called (likely due to use of
    * the build stage without a pipeline, so sort of a programming error) then
    * we won't clean up the stdout stream. But it gets cleaned up in finalize
    * anyway, so its safe (if only delayed rename()).
    *
    * We can just unref the stream, and the close will happen silently. We need
    * to do this as some async reads to be proxied to the stream may occur after
-   * the execute_finish() completes.
+   * the build_finish() completes.
    *
    * The Tail structure has it's own reference to stdout_stream.
    */
   g_clear_object (&priv->stdout_stream);
 
-  return IDE_BUILD_STAGE_GET_CLASS (self)->execute_finish (self, result, error);
+  return IDE_PIPELINE_STAGE_GET_CLASS (self)->build_finish (self, result, error);
 }
 
 /**
- * ide_build_stage_set_log_observer:
- * @self: An #IdeBuildStage
+ * ide_pipeline_stage_set_log_observer:
+ * @self: An #IdePipelineStage
  * @observer: (scope async): The observer for the log entries
  * @observer_data: data for @observer
  * @observer_data_destroy: destroy callback for @observer_data
@@ -656,16 +656,16 @@ ide_build_stage_execute_finish (IdeBuildStage  *self,
  * Since: 3.32
  */
 void
-ide_build_stage_set_log_observer (IdeBuildStage       *self,
-                                  IdeBuildLogObserver  observer,
-                                  gpointer             observer_data,
-                                  GDestroyNotify       observer_data_destroy)
+ide_pipeline_stage_set_log_observer (IdePipelineStage    *self,
+                                     IdeBuildLogObserver  observer,
+                                     gpointer             observer_data,
+                                     GDestroyNotify       observer_data_destroy)
 {
-  IdeBuildStagePrivate *priv = ide_build_stage_get_instance_private (self);
+  IdePipelineStagePrivate *priv = ide_pipeline_stage_get_instance_private (self);
 
-  g_return_if_fail (IDE_IS_BUILD_STAGE (self));
+  g_return_if_fail (IDE_IS_PIPELINE_STAGE (self));
 
-  ide_build_stage_clear_observer (self);
+  ide_pipeline_stage_clear_observer (self);
 
   priv->observer = observer;
   priv->observer_data = observer_data;
@@ -673,13 +673,13 @@ ide_build_stage_set_log_observer (IdeBuildStage       *self,
 }
 
 static void
-ide_build_stage_log_internal (IdeBuildStage     *self,
-                              IdeBuildLogStream  stream_type,
-                              GOutputStream     *stream,
-                              const gchar       *message,
-                              gssize             message_len)
+ide_pipeline_stage_log_internal (IdePipelineStage  *self,
+                                 IdeBuildLogStream  stream_type,
+                                 GOutputStream     *stream,
+                                 const gchar       *message,
+                                 gssize             message_len)
 {
-  IdeBuildStagePrivate *priv = ide_build_stage_get_instance_private (self);
+  IdePipelineStagePrivate *priv = ide_pipeline_stage_get_instance_private (self);
 
   /*
    * If we are logging to a file instead of the build pipeline, handle that
@@ -703,36 +703,36 @@ ide_build_stage_log_internal (IdeBuildStage     *self,
 }
 
 void
-ide_build_stage_log (IdeBuildStage     *self,
-                     IdeBuildLogStream  stream_type,
-                     const gchar       *message,
-                     gssize             message_len)
+ide_pipeline_stage_log (IdePipelineStage  *self,
+                        IdeBuildLogStream  stream_type,
+                        const gchar       *message,
+                        gssize             message_len)
 {
-  IdeBuildStagePrivate *priv = ide_build_stage_get_instance_private (self);
+  IdePipelineStagePrivate *priv = ide_pipeline_stage_get_instance_private (self);
 
   if (stream_type == IDE_BUILD_LOG_STDOUT)
-    ide_build_stage_log_internal (self, stream_type, priv->stdout_stream, message, message_len);
+    ide_pipeline_stage_log_internal (self, stream_type, priv->stdout_stream, message, message_len);
   else
-    ide_build_stage_log_internal (self, stream_type, NULL, message, message_len);
+    ide_pipeline_stage_log_internal (self, stream_type, NULL, message, message_len);
 }
 
 gboolean
-ide_build_stage_get_completed (IdeBuildStage *self)
+ide_pipeline_stage_get_completed (IdePipelineStage *self)
 {
-  IdeBuildStagePrivate *priv = ide_build_stage_get_instance_private (self);
+  IdePipelineStagePrivate *priv = ide_pipeline_stage_get_instance_private (self);
 
-  g_return_val_if_fail (IDE_IS_BUILD_STAGE (self), FALSE);
+  g_return_val_if_fail (IDE_IS_PIPELINE_STAGE (self), FALSE);
 
   return priv->completed;
 }
 
 void
-ide_build_stage_set_completed (IdeBuildStage *self,
-                               gboolean       completed)
+ide_pipeline_stage_set_completed (IdePipelineStage *self,
+                                  gboolean          completed)
 {
-  IdeBuildStagePrivate *priv = ide_build_stage_get_instance_private (self);
+  IdePipelineStagePrivate *priv = ide_pipeline_stage_get_instance_private (self);
 
-  g_return_if_fail (IDE_IS_BUILD_STAGE (self));
+  g_return_if_fail (IDE_IS_PIPELINE_STAGE (self));
 
   completed = !!completed;
 
@@ -744,12 +744,12 @@ ide_build_stage_set_completed (IdeBuildStage *self,
 }
 
 void
-ide_build_stage_set_transient (IdeBuildStage *self,
-                               gboolean       transient)
+ide_pipeline_stage_set_transient (IdePipelineStage *self,
+                                  gboolean          transient)
 {
-  IdeBuildStagePrivate *priv = ide_build_stage_get_instance_private (self);
+  IdePipelineStagePrivate *priv = ide_pipeline_stage_get_instance_private (self);
 
-  g_return_if_fail (IDE_IS_BUILD_STAGE (self));
+  g_return_if_fail (IDE_IS_PIPELINE_STAGE (self));
 
   transient = !!transient;
 
@@ -761,19 +761,19 @@ ide_build_stage_set_transient (IdeBuildStage *self,
 }
 
 gboolean
-ide_build_stage_get_transient (IdeBuildStage *self)
+ide_pipeline_stage_get_transient (IdePipelineStage *self)
 {
-  IdeBuildStagePrivate *priv = ide_build_stage_get_instance_private (self);
+  IdePipelineStagePrivate *priv = ide_pipeline_stage_get_instance_private (self);
 
-  g_return_val_if_fail (IDE_IS_BUILD_STAGE (self), FALSE);
+  g_return_val_if_fail (IDE_IS_PIPELINE_STAGE (self), FALSE);
 
   return priv->transient;
 }
 
 static void
-ide_build_stage_observe_stream_cb (GObject      *object,
-                                   GAsyncResult *result,
-                                   gpointer      user_data)
+ide_pipeline_stage_observe_stream_cb (GObject      *object,
+                                      GAsyncResult *result,
+                                      gpointer      user_data)
 {
   GDataInputStream *stream = (GDataInputStream *)object;
   g_autofree gchar *line = NULL;
@@ -792,7 +792,7 @@ ide_build_stage_observe_stream_cb (GObject      *object,
       if (line == NULL)
         goto cleanup;
 
-      ide_build_stage_log_internal (tail->self, tail->stream_type, tail->stream, line, (gssize)n_read);
+      ide_pipeline_stage_log_internal (tail->self, tail->stream_type, tail->stream, line, (gssize)n_read);
 
       if G_UNLIKELY (g_input_stream_is_closed (G_INPUT_STREAM (stream)))
         goto cleanup;
@@ -800,7 +800,7 @@ ide_build_stage_observe_stream_cb (GObject      *object,
       g_data_input_stream_read_line_async (stream,
                                            G_PRIORITY_DEFAULT,
                                            NULL,
-                                           ide_build_stage_observe_stream_cb,
+                                           ide_pipeline_stage_observe_stream_cb,
                                            tail);
 
       return;
@@ -814,15 +814,15 @@ cleanup:
 
 
 static void
-ide_build_stage_observe_stream (IdeBuildStage     *self,
-                                IdeBuildLogStream  stream_type,
-                                GInputStream      *stream)
+ide_pipeline_stage_observe_stream (IdePipelineStage  *self,
+                                   IdeBuildLogStream  stream_type,
+                                   GInputStream      *stream)
 {
-  IdeBuildStagePrivate *priv = ide_build_stage_get_instance_private (self);
+  IdePipelineStagePrivate *priv = ide_pipeline_stage_get_instance_private (self);
   g_autoptr(GDataInputStream) data_stream = NULL;
   Tail *tail;
 
-  g_assert (IDE_IS_BUILD_STAGE (self));
+  g_assert (IDE_IS_PIPELINE_STAGE (self));
   g_assert (stream_type == IDE_BUILD_LOG_STDOUT || stream_type == IDE_BUILD_LOG_STDERR);
   g_assert (G_IS_INPUT_STREAM (stream));
 
@@ -843,13 +843,13 @@ ide_build_stage_observe_stream (IdeBuildStage     *self,
   g_data_input_stream_read_line_async (data_stream,
                                        G_PRIORITY_DEFAULT,
                                        NULL,
-                                       ide_build_stage_observe_stream_cb,
+                                       ide_pipeline_stage_observe_stream_cb,
                                        tail);
 }
 
 /**
- * ide_build_stage_log_subprocess:
- * @self: An #IdeBuildStage
+ * ide_pipeline_stage_log_subprocess:
+ * @self: An #IdePipelineStage
  * @subprocess: An #IdeSubprocess
  *
  * This function will begin logging @subprocess by reading from the
@@ -860,74 +860,74 @@ ide_build_stage_observe_stream (IdeBuildStage     *self,
  * Since: 3.32
  */
 void
-ide_build_stage_log_subprocess (IdeBuildStage *self,
-                                IdeSubprocess *subprocess)
+ide_pipeline_stage_log_subprocess (IdePipelineStage *self,
+                                   IdeSubprocess    *subprocess)
 {
   GInputStream *stdout_stream;
   GInputStream *stderr_stream;
 
   IDE_ENTRY;
 
-  g_return_if_fail (IDE_IS_BUILD_STAGE (self));
+  g_return_if_fail (IDE_IS_PIPELINE_STAGE (self));
   g_return_if_fail (IDE_IS_SUBPROCESS (subprocess));
 
   stderr_stream = ide_subprocess_get_stderr_pipe (subprocess);
   stdout_stream = ide_subprocess_get_stdout_pipe (subprocess);
 
   if (stderr_stream != NULL)
-    ide_build_stage_observe_stream (self, IDE_BUILD_LOG_STDERR, stderr_stream);
+    ide_pipeline_stage_observe_stream (self, IDE_BUILD_LOG_STDERR, stderr_stream);
 
   if (stdout_stream != NULL)
-    ide_build_stage_observe_stream (self, IDE_BUILD_LOG_STDOUT, stdout_stream);
+    ide_pipeline_stage_observe_stream (self, IDE_BUILD_LOG_STDOUT, stdout_stream);
 
   IDE_EXIT;
 }
 
 void
-ide_build_stage_pause (IdeBuildStage *self)
+ide_pipeline_stage_pause (IdePipelineStage *self)
 {
-  IdeBuildStagePrivate *priv = ide_build_stage_get_instance_private (self);
+  IdePipelineStagePrivate *priv = ide_pipeline_stage_get_instance_private (self);
 
-  g_return_if_fail (IDE_IS_BUILD_STAGE (self));
+  g_return_if_fail (IDE_IS_PIPELINE_STAGE (self));
 
   g_atomic_int_inc (&priv->n_pause);
 }
 
 static void
-ide_build_stage_unpause_execute_cb (GObject      *object,
-                                    GAsyncResult *result,
-                                    gpointer      user_data)
+ide_pipeline_stage_unpause_build_cb (GObject      *object,
+                                     GAsyncResult *result,
+                                     gpointer      user_data)
 {
-  IdeBuildStage *self = (IdeBuildStage *)object;
+  IdePipelineStage *self = (IdePipelineStage *)object;
   g_autoptr(IdeTask) task = user_data;
   g_autoptr(GError) error = NULL;
 
-  g_assert (IDE_IS_BUILD_STAGE (self));
+  g_assert (IDE_IS_PIPELINE_STAGE (self));
   g_assert (IDE_IS_TASK (task));
 
-  if (!ide_build_stage_execute_finish (self, result, &error))
+  if (!ide_pipeline_stage_build_finish (self, result, &error))
     ide_task_return_error (task, g_steal_pointer (&error));
   else
     ide_task_return_boolean (task, TRUE);
 }
 
 void
-ide_build_stage_unpause (IdeBuildStage *self)
+ide_pipeline_stage_unpause (IdePipelineStage *self)
 {
-  IdeBuildStagePrivate *priv = ide_build_stage_get_instance_private (self);
+  IdePipelineStagePrivate *priv = ide_pipeline_stage_get_instance_private (self);
 
-  g_return_if_fail (IDE_IS_BUILD_STAGE (self));
+  g_return_if_fail (IDE_IS_PIPELINE_STAGE (self));
   g_return_if_fail (priv->n_pause > 0);
 
-  if (g_atomic_int_dec_and_test (&priv->n_pause) && priv->queued_execute != NULL)
+  if (g_atomic_int_dec_and_test (&priv->n_pause) && priv->queued_build != NULL)
     {
-      g_autoptr(IdeTask) task = g_steal_pointer (&priv->queued_execute);
+      g_autoptr(IdeTask) task = g_steal_pointer (&priv->queued_build);
       GCancellable *cancellable = ide_task_get_cancellable (task);
-      IdeBuildPipeline *pipeline = ide_task_get_task_data (task);
+      IdePipeline *pipeline = ide_task_get_task_data (task);
 
       g_assert (IDE_IS_TASK (task));
       g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
-      g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+      g_assert (IDE_IS_PIPELINE (pipeline));
 
       if (priv->completed)
         {
@@ -935,48 +935,48 @@ ide_build_stage_unpause (IdeBuildStage *self)
           return;
         }
 
-      ide_build_stage_execute_async (self,
-                                     pipeline,
-                                     cancellable,
-                                     ide_build_stage_unpause_execute_cb,
-                                     g_steal_pointer (&task));
+      ide_pipeline_stage_build_async (self,
+                                      pipeline,
+                                      cancellable,
+                                      ide_pipeline_stage_unpause_build_cb,
+                                      g_steal_pointer (&task));
     }
 }
 
 /**
- * _ide_build_stage_execute_with_query_async: (skip)
+ * _ide_pipeline_stage_build_with_query_async: (skip)
  *
- * This function is used to execute the build stage after emitting the
- * query signal. If the stage is paused after the query, execute will
- * be delayed until the correct number of ide_build_stage_unpause() calls
+ * This function is used to build the build stage after emitting the
+ * query signal. If the stage is paused after the query, build will
+ * be delayed until the correct number of ide_pipeline_stage_unpause() calls
  * have occurred.
  *
  * Since: 3.32
  */
 void
-_ide_build_stage_execute_with_query_async (IdeBuildStage       *self,
-                                           IdeBuildPipeline    *pipeline,
-                                           GPtrArray           *targets,
-                                           GCancellable        *cancellable,
-                                           GAsyncReadyCallback  callback,
-                                           gpointer             user_data)
+_ide_pipeline_stage_build_with_query_async (IdePipelineStage    *self,
+                                            IdePipeline         *pipeline,
+                                            GPtrArray           *targets,
+                                            GCancellable        *cancellable,
+                                            GAsyncReadyCallback  callback,
+                                            gpointer             user_data)
 {
-  IdeBuildStagePrivate *priv = ide_build_stage_get_instance_private (self);
+  IdePipelineStagePrivate *priv = ide_pipeline_stage_get_instance_private (self);
   g_autoptr(GPtrArray) local_targets = NULL;
   g_autoptr(IdeTask) task = NULL;
 
-  g_return_if_fail (IDE_IS_BUILD_STAGE (self));
-  g_return_if_fail (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_return_if_fail (IDE_IS_PIPELINE_STAGE (self));
+  g_return_if_fail (IDE_IS_PIPELINE (pipeline));
   g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable));
 
   task = ide_task_new (self, cancellable, callback, user_data);
-  ide_task_set_source_tag (task, _ide_build_stage_execute_with_query_async);
+  ide_task_set_source_tag (task, _ide_pipeline_stage_build_with_query_async);
   ide_task_set_task_data (task, g_object_ref (pipeline), g_object_unref);
 
   if (targets == NULL)
     targets = local_targets = g_ptr_array_new_with_free_func (g_object_unref);
 
-  if (priv->queued_execute != NULL)
+  if (priv->queued_build != NULL)
     {
       ide_task_return_new_error (task,
                                  G_IO_ERROR,
@@ -985,36 +985,36 @@ _ide_build_stage_execute_with_query_async (IdeBuildStage       *self,
       return;
     }
 
-  priv->queued_execute = g_steal_pointer (&task);
+  priv->queued_build = g_steal_pointer (&task);
 
   /*
    * Pause the pipeline around our query call so that any call to
    * pause/unpause does not cause the stage to make progress. This allows
    * us to share the code-path to make progress on the build stage.
    */
-  ide_build_stage_pause (self);
+  ide_pipeline_stage_pause (self);
   g_signal_emit (self, signals [QUERY], 0, pipeline, targets, cancellable);
-  ide_build_stage_unpause (self);
+  ide_pipeline_stage_unpause (self);
 }
 
 gboolean
-_ide_build_stage_execute_with_query_finish (IdeBuildStage  *self,
-                                            GAsyncResult   *result,
-                                            GError        **error)
+_ide_pipeline_stage_build_with_query_finish (IdePipelineStage  *self,
+                                             GAsyncResult      *result,
+                                             GError           **error)
 {
-  g_return_val_if_fail (IDE_IS_BUILD_STAGE (self), FALSE);
+  g_return_val_if_fail (IDE_IS_PIPELINE_STAGE (self), FALSE);
   g_return_val_if_fail (IDE_IS_TASK (result), FALSE);
 
   return ide_task_propagate_boolean (IDE_TASK (result), error);
 }
 
 void
-ide_build_stage_set_stdout_path (IdeBuildStage *self,
-                                 const gchar   *stdout_path)
+ide_pipeline_stage_set_stdout_path (IdePipelineStage *self,
+                                    const gchar      *stdout_path)
 {
-  IdeBuildStagePrivate *priv = ide_build_stage_get_instance_private (self);
+  IdePipelineStagePrivate *priv = ide_pipeline_stage_get_instance_private (self);
 
-  g_return_if_fail (IDE_IS_BUILD_STAGE (self));
+  g_return_if_fail (IDE_IS_PIPELINE_STAGE (self));
 
   if (g_strcmp0 (stdout_path, priv->stdout_path) != 0)
     {
@@ -1025,63 +1025,63 @@ ide_build_stage_set_stdout_path (IdeBuildStage *self,
 }
 
 const gchar *
-ide_build_stage_get_stdout_path (IdeBuildStage *self)
+ide_pipeline_stage_get_stdout_path (IdePipelineStage *self)
 {
-  IdeBuildStagePrivate *priv = ide_build_stage_get_instance_private (self);
+  IdePipelineStagePrivate *priv = ide_pipeline_stage_get_instance_private (self);
 
-  g_return_val_if_fail (IDE_IS_BUILD_STAGE (self), NULL);
+  g_return_val_if_fail (IDE_IS_PIPELINE_STAGE (self), NULL);
 
   return priv->stdout_path;
 }
 
 gboolean
-_ide_build_stage_has_query (IdeBuildStage *self)
+_ide_pipeline_stage_has_query (IdePipelineStage *self)
 {
   IDE_ENTRY;
 
-  g_return_val_if_fail (IDE_IS_BUILD_STAGE (self), FALSE);
+  g_return_val_if_fail (IDE_IS_PIPELINE_STAGE (self), FALSE);
 
   if (g_signal_has_handler_pending (self, signals [QUERY], 0, FALSE))
     IDE_RETURN (TRUE);
 
-  if (IDE_BUILD_STAGE_GET_CLASS (self)->query)
+  if (IDE_PIPELINE_STAGE_GET_CLASS (self)->query)
     IDE_RETURN (TRUE);
 
   IDE_RETURN (FALSE);
 }
 
 void
-ide_build_stage_clean_async (IdeBuildStage       *self,
-                             IdeBuildPipeline    *pipeline,
-                             GCancellable        *cancellable,
-                             GAsyncReadyCallback  callback,
-                             gpointer             user_data)
+ide_pipeline_stage_clean_async (IdePipelineStage    *self,
+                                IdePipeline         *pipeline,
+                                GCancellable        *cancellable,
+                                GAsyncReadyCallback  callback,
+                                gpointer             user_data)
 {
-  g_return_if_fail (IDE_IS_BUILD_STAGE (self));
-  g_return_if_fail (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_return_if_fail (IDE_IS_PIPELINE_STAGE (self));
+  g_return_if_fail (IDE_IS_PIPELINE (pipeline));
   g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable));
 
-  IDE_BUILD_STAGE_GET_CLASS (self)->clean_async (self, pipeline, cancellable, callback, user_data);
+  IDE_PIPELINE_STAGE_GET_CLASS (self)->clean_async (self, pipeline, cancellable, callback, user_data);
 }
 
 gboolean
-ide_build_stage_clean_finish (IdeBuildStage  *self,
-                              GAsyncResult   *result,
-                              GError        **error)
+ide_pipeline_stage_clean_finish (IdePipelineStage  *self,
+                                 GAsyncResult      *result,
+                                 GError           **error)
 {
-  g_return_val_if_fail (IDE_IS_BUILD_STAGE (self), FALSE);
+  g_return_val_if_fail (IDE_IS_PIPELINE_STAGE (self), FALSE);
   g_return_val_if_fail (IDE_IS_TASK (result), FALSE);
 
-  return IDE_BUILD_STAGE_GET_CLASS (self)->clean_finish (self, result, error);
+  return IDE_PIPELINE_STAGE_GET_CLASS (self)->clean_finish (self, result, error);
 }
 
 void
-ide_build_stage_emit_reap (IdeBuildStage      *self,
-                           DzlDirectoryReaper *reaper)
+ide_pipeline_stage_emit_reap (IdePipelineStage   *self,
+                              DzlDirectoryReaper *reaper)
 {
   IDE_ENTRY;
 
-  g_return_if_fail (IDE_IS_BUILD_STAGE (self));
+  g_return_if_fail (IDE_IS_PIPELINE_STAGE (self));
   g_return_if_fail (DZL_IS_DIRECTORY_REAPER (reaper));
 
   g_signal_emit (self, signals [REAP], 0, reaper);
@@ -1090,15 +1090,15 @@ ide_build_stage_emit_reap (IdeBuildStage      *self,
 }
 
 gboolean
-ide_build_stage_chain (IdeBuildStage *self,
-                       IdeBuildStage *next)
+ide_pipeline_stage_chain (IdePipelineStage *self,
+                          IdePipelineStage *next)
 {
   gboolean ret = FALSE;
 
-  g_return_val_if_fail (IDE_IS_BUILD_STAGE (self), FALSE);
-  g_return_val_if_fail (IDE_IS_BUILD_STAGE (next), FALSE);
+  g_return_val_if_fail (IDE_IS_PIPELINE_STAGE (self), FALSE);
+  g_return_val_if_fail (IDE_IS_PIPELINE_STAGE (next), FALSE);
 
-  if (ide_build_stage_get_disabled (next))
+  if (ide_pipeline_stage_get_disabled (next))
     return FALSE;
 
   g_signal_emit (self, signals[CHAIN], 0, next, &ret);
@@ -1107,22 +1107,22 @@ ide_build_stage_chain (IdeBuildStage *self,
 }
 
 gboolean
-ide_build_stage_get_disabled (IdeBuildStage *self)
+ide_pipeline_stage_get_disabled (IdePipelineStage *self)
 {
-  IdeBuildStagePrivate *priv = ide_build_stage_get_instance_private (self);
+  IdePipelineStagePrivate *priv = ide_pipeline_stage_get_instance_private (self);
 
-  g_return_val_if_fail (IDE_IS_BUILD_STAGE (self), FALSE);
+  g_return_val_if_fail (IDE_IS_PIPELINE_STAGE (self), FALSE);
 
   return priv->disabled;
 }
 
 void
-ide_build_stage_set_disabled (IdeBuildStage *self,
-                              gboolean       disabled)
+ide_pipeline_stage_set_disabled (IdePipelineStage *self,
+                                 gboolean          disabled)
 {
-  IdeBuildStagePrivate *priv = ide_build_stage_get_instance_private (self);
+  IdePipelineStagePrivate *priv = ide_pipeline_stage_get_instance_private (self);
 
-  g_return_if_fail (IDE_IS_BUILD_STAGE (self));
+  g_return_if_fail (IDE_IS_PIPELINE_STAGE (self));
 
   disabled = !!disabled;
 
@@ -1134,22 +1134,22 @@ ide_build_stage_set_disabled (IdeBuildStage *self,
 }
 
 gboolean
-ide_build_stage_get_check_stdout (IdeBuildStage *self)
+ide_pipeline_stage_get_check_stdout (IdePipelineStage *self)
 {
-  IdeBuildStagePrivate *priv = ide_build_stage_get_instance_private (self);
+  IdePipelineStagePrivate *priv = ide_pipeline_stage_get_instance_private (self);
 
-  g_return_val_if_fail (IDE_IS_BUILD_STAGE (self), FALSE);
+  g_return_val_if_fail (IDE_IS_PIPELINE_STAGE (self), FALSE);
 
   return priv->check_stdout;
 }
 
 void
-ide_build_stage_set_check_stdout (IdeBuildStage *self,
-                                  gboolean       check_stdout)
+ide_pipeline_stage_set_check_stdout (IdePipelineStage *self,
+                                     gboolean          check_stdout)
 {
-  IdeBuildStagePrivate *priv = ide_build_stage_get_instance_private (self);
+  IdePipelineStagePrivate *priv = ide_pipeline_stage_get_instance_private (self);
 
-  g_return_if_fail (IDE_IS_BUILD_STAGE (self));
+  g_return_if_fail (IDE_IS_PIPELINE_STAGE (self));
 
   check_stdout = !!check_stdout;
 
@@ -1161,8 +1161,8 @@ ide_build_stage_set_check_stdout (IdeBuildStage *self,
 }
 
 /**
- * ide_build_stage_get_active:
- * @self: a #IdeBuildStage
+ * ide_pipeline_stage_get_active:
+ * @self: a #IdePipelineStage
  *
  * Gets the "active" property, which is set to %TRUE when the
  * build stage is actively executing or cleaning.
@@ -1172,22 +1172,22 @@ ide_build_stage_set_check_stdout (IdeBuildStage *self,
  * Since: 3.32
  */
 gboolean
-ide_build_stage_get_active (IdeBuildStage *self)
+ide_pipeline_stage_get_active (IdePipelineStage *self)
 {
-  IdeBuildStagePrivate *priv = ide_build_stage_get_instance_private (self);
+  IdePipelineStagePrivate *priv = ide_pipeline_stage_get_instance_private (self);
 
-  g_return_val_if_fail (IDE_IS_BUILD_STAGE (self), FALSE);
+  g_return_val_if_fail (IDE_IS_PIPELINE_STAGE (self), FALSE);
 
   return priv->active;
 }
 
 void
-ide_build_stage_set_active (IdeBuildStage *self,
-                            gboolean       active)
+ide_pipeline_stage_set_active (IdePipelineStage *self,
+                               gboolean          active)
 {
-  IdeBuildStagePrivate *priv = ide_build_stage_get_instance_private (self);
+  IdePipelineStagePrivate *priv = ide_pipeline_stage_get_instance_private (self);
 
-  g_return_if_fail (IDE_IS_BUILD_STAGE (self));
+  g_return_if_fail (IDE_IS_PIPELINE_STAGE (self));
 
   active = !!active;
 
@@ -1198,23 +1198,23 @@ ide_build_stage_set_active (IdeBuildStage *self,
     }
 }
 
-IdeBuildPhase
-_ide_build_stage_get_phase (IdeBuildStage *self)
+IdePipelinePhase
+_ide_pipeline_stage_get_phase (IdePipelineStage *self)
 {
-  IdeBuildStagePrivate *priv = ide_build_stage_get_instance_private (self);
+  IdePipelineStagePrivate *priv = ide_pipeline_stage_get_instance_private (self);
 
-  g_return_val_if_fail (IDE_IS_BUILD_STAGE (self), 0);
+  g_return_val_if_fail (IDE_IS_PIPELINE_STAGE (self), 0);
 
   return priv->phase;
 }
 
 void
-_ide_build_stage_set_phase (IdeBuildStage *self,
-                            IdeBuildPhase  phase)
+_ide_pipeline_stage_set_phase (IdePipelineStage *self,
+                               IdePipelinePhase     phase)
 {
-  IdeBuildStagePrivate *priv = ide_build_stage_get_instance_private (self);
+  IdePipelineStagePrivate *priv = ide_pipeline_stage_get_instance_private (self);
 
-  g_return_if_fail (IDE_IS_BUILD_STAGE (self));
+  g_return_if_fail (IDE_IS_PIPELINE_STAGE (self));
 
   priv->phase = phase;
 }
diff --git a/src/libide/foundry/ide-pipeline-stage.h b/src/libide/foundry/ide-pipeline-stage.h
new file mode 100644
index 000000000..fe6c248f7
--- /dev/null
+++ b/src/libide/foundry/ide-pipeline-stage.h
@@ -0,0 +1,215 @@
+/* ide-pipeline-stage.h
+ *
+ * Copyright 2016-2019 Christian Hergert <chergert redhat com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+
+#pragma once
+
+#if !defined (IDE_FOUNDRY_INSIDE) && !defined (IDE_FOUNDRY_COMPILATION)
+# error "Only <libide-foundry.h> can be included directly."
+#endif
+
+#include <dazzle.h>
+#include <libide-core.h>
+
+#include "ide-build-log.h"
+#include "ide-foundry-types.h"
+
+G_BEGIN_DECLS
+
+#define IDE_TYPE_PIPELINE_STAGE (ide_pipeline_stage_get_type())
+
+IDE_AVAILABLE_IN_3_32
+G_DECLARE_DERIVABLE_TYPE (IdePipelineStage, ide_pipeline_stage, IDE, PIPELINE_STAGE, IdeObject)
+
+struct _IdePipelineStageClass
+{
+  IdeObjectClass parent_class;
+
+  /**
+   * IdePipelineStage::build:
+   *
+   * This vfunc will be run in a thread by the default
+   * IdePipelineStage::build_async() and IdePipelineStage::build_finish()
+   * vfuncs.
+   *
+   * Only use thread-safe API from this function.
+   *
+   * Since: 3.32
+   */
+  gboolean (*build)          (IdePipelineStage     *self,
+                              IdePipeline          *pipeline,
+                              GCancellable         *cancellable,
+                              GError              **error);
+
+  /**
+   * IdePipelineStage::build_async:
+   *
+   * Asynchronous version of the #IdePipelineStage API. This is the preferred
+   * way to subclass #IdePipelineStage.
+   *
+   * Since: 3.32
+   */
+  void     (*build_async)    (IdePipelineStage     *self,
+                              IdePipeline          *pipeline,
+                              GCancellable         *cancellable,
+                              GAsyncReadyCallback   callback,
+                              gpointer              user_data);
+
+  /**
+   * IdePipelineStage::build_finish:
+   *
+   * Completes an asynchronous call to ide_pipeline_stage_build_async().
+   *
+   * Returns: %TRUE if successful; otherwise %FALSE and @error is set.
+   *   Upon failure, the pipeline will be stopped.
+   *
+   * Since: 3.32
+   */
+  gboolean (*build_finish)   (IdePipelineStage     *self,
+                              GAsyncResult         *result,
+                              GError              **error);
+
+  /**
+   * IdePipelineStage::clean_async:
+   * @self: an #IdePipelineStage
+   * @pipeline: An #IdePipeline
+   * @cancellable: (nullable): a #GCancellable or %NULL
+   * @callback: An async callback
+   * @user_data: user data for @callback
+   *
+   * This function will perform the clean operation.
+   *
+   * Since: 3.32
+   */
+  void     (*clean_async)    (IdePipelineStage     *self,
+                              IdePipeline          *pipeline,
+                              GCancellable         *cancellable,
+                              GAsyncReadyCallback   callback,
+                              gpointer              user_data);
+
+  /**
+   * IdePipelineStage::clean_finish:
+   * @self: an #IdePipelineStage
+   * @result: a #GErrorResult
+   * @error: A location for a #GError or %NULL.
+   *
+   * Completes an async operation to ide_pipeline_stage_clean_async().
+   *
+   * Returns: %TRUE if successful; otherwise %FALSE and @error is set.
+   *
+   * Since: 3.32
+   */
+  gboolean (*clean_finish)   (IdePipelineStage     *self,
+                              GAsyncResult         *result,
+                              GError              **error);
+
+  /* Signals */
+  void     (*query)          (IdePipelineStage     *self,
+                              IdePipeline          *pipeline,
+                              GPtrArray            *targets,
+                              GCancellable         *cancellable);
+  void     (*reap)           (IdePipelineStage     *self,
+                              DzlDirectoryReaper   *reaper);
+  gboolean (*chain)          (IdePipelineStage     *self,
+                              IdePipelineStage     *next);
+
+  /*< private >*/
+  gpointer _reserved[16];
+};
+
+IDE_AVAILABLE_IN_3_32
+gboolean     ide_pipeline_stage_get_active       (IdePipelineStage     *self);
+IDE_AVAILABLE_IN_3_32
+void         ide_pipeline_stage_set_active       (IdePipelineStage     *self,
+                                                  gboolean              active);
+IDE_AVAILABLE_IN_3_32
+const gchar *ide_pipeline_stage_get_name         (IdePipelineStage     *self);
+IDE_AVAILABLE_IN_3_32
+void         ide_pipeline_stage_set_name         (IdePipelineStage     *self,
+                                                  const gchar          *name);
+IDE_AVAILABLE_IN_3_32
+void         ide_pipeline_stage_log              (IdePipelineStage     *self,
+                                                  IdeBuildLogStream     stream,
+                                                  const gchar          *message,
+                                                  gssize                message_len);
+IDE_AVAILABLE_IN_3_32
+void         ide_pipeline_stage_log_subprocess   (IdePipelineStage     *self,
+                                                  IdeSubprocess        *subprocess);
+IDE_AVAILABLE_IN_3_32
+void         ide_pipeline_stage_set_log_observer (IdePipelineStage     *self,
+                                                  IdeBuildLogObserver   observer,
+                                                  gpointer              observer_data,
+                                                  GDestroyNotify        observer_data_destroy);
+IDE_AVAILABLE_IN_3_32
+void         ide_pipeline_stage_set_stdout_path  (IdePipelineStage     *self,
+                                                  const gchar          *path);
+IDE_AVAILABLE_IN_3_32
+const gchar *ide_pipeline_stage_get_stdout_path  (IdePipelineStage     *self);
+IDE_AVAILABLE_IN_3_32
+gboolean     ide_pipeline_stage_get_completed    (IdePipelineStage     *self);
+IDE_AVAILABLE_IN_3_32
+void         ide_pipeline_stage_set_completed    (IdePipelineStage     *self,
+                                                  gboolean              completed);
+IDE_AVAILABLE_IN_3_32
+gboolean     ide_pipeline_stage_get_disabled     (IdePipelineStage     *self);
+IDE_AVAILABLE_IN_3_32
+void         ide_pipeline_stage_set_disabled     (IdePipelineStage     *self,
+                                                  gboolean              disabled);
+IDE_AVAILABLE_IN_3_32
+gboolean     ide_pipeline_stage_get_check_stdout (IdePipelineStage     *self);
+IDE_AVAILABLE_IN_3_32
+void         ide_pipeline_stage_set_check_stdout (IdePipelineStage     *self,
+                                                  gboolean              check_stdout);
+IDE_AVAILABLE_IN_3_32
+gboolean     ide_pipeline_stage_get_transient    (IdePipelineStage     *self);
+IDE_AVAILABLE_IN_3_32
+void         ide_pipeline_stage_set_transient    (IdePipelineStage     *self,
+                                                  gboolean              transient);
+IDE_AVAILABLE_IN_3_32
+void         ide_pipeline_stage_build_async      (IdePipelineStage     *self,
+                                                  IdePipeline          *pipeline,
+                                                  GCancellable         *cancellable,
+                                                  GAsyncReadyCallback   callback,
+                                                  gpointer              user_data);
+IDE_AVAILABLE_IN_3_32
+gboolean     ide_pipeline_stage_build_finish     (IdePipelineStage     *self,
+                                                  GAsyncResult         *result,
+                                                  GError              **error);
+IDE_AVAILABLE_IN_3_32
+void         ide_pipeline_stage_clean_async      (IdePipelineStage     *self,
+                                                  IdePipeline          *pipeline,
+                                                  GCancellable         *cancellable,
+                                                  GAsyncReadyCallback   callback,
+                                                  gpointer              user_data);
+IDE_AVAILABLE_IN_3_32
+gboolean     ide_pipeline_stage_clean_finish     (IdePipelineStage     *self,
+                                                  GAsyncResult         *result,
+                                                  GError              **error);
+IDE_AVAILABLE_IN_3_32
+gboolean     ide_pipeline_stage_chain            (IdePipelineStage     *self,
+                                                  IdePipelineStage     *next);
+IDE_AVAILABLE_IN_3_32
+void         ide_pipeline_stage_pause            (IdePipelineStage     *self);
+IDE_AVAILABLE_IN_3_32
+void         ide_pipeline_stage_unpause          (IdePipelineStage     *self);
+IDE_AVAILABLE_IN_3_32
+void         ide_pipeline_stage_emit_reap        (IdePipelineStage     *self,
+                                                  DzlDirectoryReaper   *reaper);
+
+G_END_DECLS
diff --git a/src/libide/foundry/ide-build-pipeline.c b/src/libide/foundry/ide-pipeline.c
similarity index 69%
rename from src/libide/foundry/ide-build-pipeline.c
rename to src/libide/foundry/ide-pipeline.c
index 79d904b7e..9bffb53b1 100644
--- a/src/libide/foundry/ide-build-pipeline.c
+++ b/src/libide/foundry/ide-pipeline.c
@@ -1,4 +1,4 @@
-/* ide-build-pipeline.c
+/* ide-pipeline.c
  *
  * Copyright 2016-2019 Christian Hergert <chergert redhat com>
  *
@@ -18,7 +18,7 @@
  * SPDX-License-Identifier: GPL-3.0-or-later
  */
 
-#define G_LOG_DOMAIN "ide-build-pipeline"
+#define G_LOG_DOMAIN "ide-pipeline"
 
 #include "config.h"
 
@@ -38,12 +38,12 @@
 
 #include "ide-build-log-private.h"
 #include "ide-build-log.h"
-#include "ide-build-pipeline-addin.h"
-#include "ide-build-pipeline.h"
+#include "ide-pipeline-addin.h"
+#include "ide-pipeline.h"
 #include "ide-build-private.h"
-#include "ide-build-stage-launcher.h"
-#include "ide-build-stage-private.h"
-#include "ide-build-stage.h"
+#include "ide-pipeline-stage-launcher.h"
+#include "ide-pipeline-stage-private.h"
+#include "ide-pipeline-stage.h"
 #include "ide-build-system.h"
 #include "ide-device-info.h"
 #include "ide-device.h"
@@ -58,40 +58,40 @@ G_DEFINE_QUARK (ide_build_error, ide_build_error)
 
 /**
  * SECTION:idebuildpipeline
- * @title: IdeBuildPipeline
+ * @title: IdePipeline
  * @short_description: Pluggable build pipeline
  * @include: ide.h
  *
- * The #IdeBuildPipeline is responsible for managing the build process
- * for Builder. It consists of multiple build "phases" (see #IdeBuildPhase
- * for the individual phases). An #IdeBuildStage can be attached with
+ * The #IdePipeline is responsible for managing the build process
+ * for Builder. It consists of multiple build "phases" (see #IdePipelinePhase
+ * for the individual phases). An #IdePipelineStage can be attached with
  * a priority to each phase and is the primary mechanism that plugins
  * use to perform their operations in the proper ordering.
  *
  * For example, the flatpak plugin provides its download stage as part of the
- * %IDE_BUILD_PHASE_DOWNLOAD phase. The autotools plugin provides stages to
- * phases such as %IDE_BUILD_PHASE_AUTOGEN, %IDE_BUILD_PHASE_CONFIGURE,
- * %IDE_BUILD_PHASE_BUILD, and %IDE_BUILD_PHASE_INSTALL.
+ * %IDE_PIPELINE_PHASE_DOWNLOAD phase. The autotools plugin provides stages to
+ * phases such as %IDE_PIPELINE_PHASE_AUTOGEN, %IDE_PIPELINE_PHASE_CONFIGURE,
+ * %IDE_PIPELINE_PHASE_BUILD, and %IDE_PIPELINE_PHASE_INSTALL.
  *
  * If you want ensure a particular phase is performed as part of a build,
- * then fall ide_build_pipeline_request_phase() with the phase you are
+ * then fall ide_pipeline_request_phase() with the phase you are
  * interested in seeing complete successfully.
  *
  * If your plugin has discovered that something has changed that invalidates a
- * given phase, use ide_build_pipeline_invalidate_phase() to ensure that the
- * phase is re-executed the next time a requested phase of higher precidence
+ * given phase, use ide_pipeline_invalidate_phase() to ensure that the
+ * phase is re-buildd the next time a requested phase of higher precidence
  * is requested.
  *
  * It can be useful to perform operations before or after a given stage (but
- * still be executed as part of that stage) so the %IDE_BUILD_PHASE_BEFORE and
- * %IDE_BUILD_PHASE_AFTER flags may be xor'd with the requested phase.  If more
+ * still be buildd as part of that stage) so the %IDE_PIPELINE_PHASE_BEFORE and
+ * %IDE_PIPELINE_PHASE_AFTER flags may be xor'd with the requested phase.  If more
  * precise ordering is required, you may use the priority parameter to order
  * the operation with regards to other stages in that phase.
  *
  * Transient stages may be added to the pipeline and they will be removed after
- * the ide_build_pipeline_execute_async() operation has completed successfully
+ * the ide_pipeline_build_async() operation has completed successfully
  * or has failed. You can mark a stage as trandient with
- * ide_build_stage_set_transient(). This may be useful to perform operations
+ * ide_pipeline_stage_set_transient(). This may be useful to perform operations
  * such as an "export tarball" stage which should only run once as determined
  * by the user requesting a "make dist" style operation.
  *
@@ -101,14 +101,14 @@ G_DEFINE_QUARK (ide_build_error, ide_build_error)
 typedef struct
 {
   guint          id;
-  IdeBuildPhase  phase;
+  IdePipelinePhase  phase;
   gint           priority;
-  IdeBuildStage *stage;
+  IdePipelineStage *stage;
 } PipelineEntry;
 
 typedef struct
 {
-  IdeBuildPipeline *self;
+  IdePipeline *self;
   GPtrArray        *addins;
 } IdleLoadState;
 
@@ -118,13 +118,13 @@ typedef struct
   GRegex *regex;
 } ErrorFormat;
 
-struct _IdeBuildPipeline
+struct _IdePipeline
 {
   IdeObject parent_instance;
 
   /*
    * A cancellable we can use to chain to all incoming requests so that
-   * all tasks may be cancelled at once when _ide_build_pipeline_cancel()
+   * all tasks may be cancelled at once when _ide_pipeline_cancel()
    * is called.
    */
   GCancellable *cancellable;
@@ -235,7 +235,7 @@ struct _IdeBuildPipeline
    * No reference to the current stage. It is only available during
    * the asynchronous execution of the stage.
    */
-  IdeBuildStage *current_stage;
+  IdePipelineStage *current_stage;
 
   /*
    * The index of our current PipelineEntry. This should start at -1
@@ -245,10 +245,10 @@ struct _IdeBuildPipeline
 
   /*
    * This is the requested mask to be built. It should be reset after
-   * performing a build so that a followup execute_async() would be
+   * performing a build so that a followup build_async() would be
    * innocuous.
    */
-  IdeBuildPhase requested_mask;
+  IdePipelinePhase requested_mask;
 
   /*
    * We queue incoming tasks in case we need for a finish task to
@@ -333,7 +333,7 @@ typedef struct
   /*
    * The phase that should be met for the given pipeline operation.
    */
-  IdeBuildPhase phase;
+  IdePipelinePhase phase;
 
   union {
     struct {
@@ -348,17 +348,17 @@ typedef struct
   };
 } TaskData;
 
-static void ide_build_pipeline_queue_flush  (IdeBuildPipeline    *self);
-static void ide_build_pipeline_tick_execute (IdeBuildPipeline    *self,
-                                             IdeTask             *task);
-static void ide_build_pipeline_tick_clean   (IdeBuildPipeline    *self,
-                                             IdeTask             *task);
-static void ide_build_pipeline_tick_rebuild (IdeBuildPipeline    *self,
-                                             IdeTask             *task);
-static void initable_iface_init             (GInitableIface      *iface);
-static void list_model_iface_init           (GListModelInterface *iface);
-
-G_DEFINE_TYPE_WITH_CODE (IdeBuildPipeline, ide_build_pipeline, IDE_TYPE_OBJECT,
+static void ide_pipeline_queue_flush  (IdePipeline         *self);
+static void ide_pipeline_tick_build   (IdePipeline         *self,
+                                       IdeTask             *task);
+static void ide_pipeline_tick_clean   (IdePipeline         *self,
+                                       IdeTask             *task);
+static void ide_pipeline_tick_rebuild (IdePipeline         *self,
+                                       IdeTask             *task);
+static void initable_iface_init       (GInitableIface      *iface);
+static void list_model_iface_init     (GListModelInterface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (IdePipeline, ide_pipeline, IDE_TYPE_OBJECT,
                          G_IMPLEMENT_INTERFACE (G_TYPE_LIST_MODEL, list_model_iface_init)
                          G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, initable_iface_init))
 
@@ -454,14 +454,14 @@ clear_error_format (gpointer data)
 }
 
 static inline const gchar *
-build_phase_nick (IdeBuildPhase phase)
+build_phase_nick (IdePipelinePhase phase)
 {
-  GFlagsClass *klass = g_type_class_peek (IDE_TYPE_BUILD_PHASE);
+  GFlagsClass *klass = g_type_class_peek (IDE_TYPE_PIPELINE_PHASE);
   GFlagsValue *value;
 
   g_assert (klass != NULL);
 
-  phase &= IDE_BUILD_PHASE_MASK;
+  phase &= IDE_PIPELINE_PHASE_MASK;
   value = g_flags_get_first_value (klass, phase);
 
   if (value != NULL)
@@ -502,8 +502,8 @@ parse_severity (const gchar *str)
 }
 
 static IdeDiagnostic *
-create_diagnostic (IdeBuildPipeline *self,
-                   GMatchInfo       *match_info)
+create_diagnostic (IdePipeline *self,
+                   GMatchInfo  *match_info)
 {
   g_autofree gchar *filename = NULL;
   g_autofree gchar *line = NULL;
@@ -519,7 +519,7 @@ create_diagnostic (IdeBuildPipeline *self,
     IdeDiagnosticSeverity severity;
   } parsed = { 0 };
 
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE (self));
   g_assert (match_info != NULL);
 
   message = g_match_info_fetch_named (match_info, "message");
@@ -605,14 +605,14 @@ create_diagnostic (IdeBuildPipeline *self,
 }
 
 static gboolean
-extract_directory_change (IdeBuildPipeline *self,
-                          const guint8     *data,
-                          gsize             len)
+extract_directory_change (IdePipeline  *self,
+                          const guint8 *data,
+                          gsize         len)
 {
   g_autofree gchar *dir = NULL;
   const guint8 *begin;
 
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE (self));
 
   if (len == 0)
     return FALSE;
@@ -654,16 +654,16 @@ extract_directory_change (IdeBuildPipeline *self,
 }
 
 static void
-extract_diagnostics (IdeBuildPipeline *self,
-                     const guint8     *data,
-                     gsize             len)
+extract_diagnostics (IdePipeline  *self,
+                     const guint8 *data,
+                     gsize         len)
 {
   g_autofree guint8 *unescaped = NULL;
   IdeLineReader reader;
   gchar *line;
   gsize line_len;
 
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE (self));
   g_assert (data != NULL);
 
   if (len == 0 || self->errfmts->len == 0)
@@ -700,7 +700,7 @@ extract_diagnostics (IdeBuildPipeline *self,
 
               if (diagnostic != NULL)
                 {
-                  ide_build_pipeline_emit_diagnostic (self, diagnostic);
+                  ide_pipeline_emit_diagnostic (self, diagnostic);
                   break;
                 }
             }
@@ -709,15 +709,15 @@ extract_diagnostics (IdeBuildPipeline *self,
 }
 
 static void
-ide_build_pipeline_log_observer (IdeBuildLogStream  stream,
-                                 const gchar       *message,
-                                 gssize             message_len,
-                                 gpointer           user_data)
+ide_pipeline_log_observer (IdeBuildLogStream  stream,
+                           const gchar       *message,
+                           gssize             message_len,
+                           gpointer           user_data)
 {
-  IdeBuildPipeline *self = user_data;
+  IdePipeline *self = user_data;
 
   g_assert (stream == IDE_BUILD_LOG_STDOUT || stream == IDE_BUILD_LOG_STDERR);
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE (self));
   g_assert (message != NULL);
 
   if (message_len < 0)
@@ -730,38 +730,38 @@ ide_build_pipeline_log_observer (IdeBuildLogStream  stream,
 }
 
 static void
-ide_build_pipeline_intercept_pty_master_cb (const IdePtyIntercept     *intercept,
-                                            const IdePtyInterceptSide *side,
-                                            const guint8              *data,
-                                            gsize                      len,
-                                            gpointer                   user_data)
+ide_pipeline_intercept_pty_master_cb (const IdePtyIntercept     *intercept,
+                                      const IdePtyInterceptSide *side,
+                                      const guint8              *data,
+                                      gsize                      len,
+                                      gpointer                   user_data)
 {
-  IdeBuildPipeline *self = user_data;
+  IdePipeline *self = user_data;
 
   g_assert (intercept != NULL);
   g_assert (side != NULL);
   g_assert (data != NULL);
   g_assert (len > 0);
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE (self));
 
   extract_diagnostics (self, data, len);
 }
 
 static void
-ide_build_pipeline_release_transients (IdeBuildPipeline *self)
+ide_pipeline_release_transients (IdePipeline *self)
 {
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE (self));
   g_assert (self->pipeline != NULL);
 
   for (guint i = self->pipeline->len; i > 0; i--)
     {
       const PipelineEntry *entry = &g_array_index (self->pipeline, PipelineEntry, i - 1);
 
-      g_assert (IDE_IS_BUILD_STAGE (entry->stage));
+      g_assert (IDE_IS_PIPELINE_STAGE (entry->stage));
 
-      if (ide_build_stage_get_transient (entry->stage))
+      if (ide_pipeline_stage_get_transient (entry->stage))
         {
           IDE_TRACE_MSG ("Releasing transient stage %s at index %u",
                          G_OBJECT_TYPE_NAME (entry->stage),
@@ -774,10 +774,10 @@ ide_build_pipeline_release_transients (IdeBuildPipeline *self)
 }
 
 static gboolean
-ide_build_pipeline_check_ready (IdeBuildPipeline *self,
-                                IdeTask          *task)
+ide_pipeline_check_ready (IdePipeline *self,
+                          IdeTask     *task)
 {
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE (self));
   g_assert (IDE_IS_TASK (task));
 
   if (self->broken)
@@ -803,30 +803,30 @@ ide_build_pipeline_check_ready (IdeBuildPipeline *self,
 }
 
 /**
- * ide_build_pipeline_get_phase:
+ * ide_pipeline_get_phase:
  *
  * Gets the current phase that is executing. This is only useful during
  * execution of the pipeline.
  *
  * Since: 3.32
  */
-IdeBuildPhase
-ide_build_pipeline_get_phase (IdeBuildPipeline *self)
+IdePipelinePhase
+ide_pipeline_get_phase (IdePipeline *self)
 {
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (self), 0);
+  g_return_val_if_fail (IDE_IS_PIPELINE (self), 0);
 
   if (self->position < 0)
-    return IDE_BUILD_PHASE_NONE;
+    return IDE_PIPELINE_PHASE_NONE;
   else if (self->failed)
-    return IDE_BUILD_PHASE_FAILED;
+    return IDE_PIPELINE_PHASE_FAILED;
   else if ((guint)self->position < self->pipeline->len)
-    return g_array_index (self->pipeline, PipelineEntry, self->position).phase & IDE_BUILD_PHASE_MASK;
+    return g_array_index (self->pipeline, PipelineEntry, self->position).phase & IDE_PIPELINE_PHASE_MASK;
   else
-    return IDE_BUILD_PHASE_FINISHED;
+    return IDE_PIPELINE_PHASE_FINISHED;
 }
 
 /**
- * ide_build_pipeline_get_config:
+ * ide_pipeline_get_config:
  *
  * Gets the #IdeConfig to use for the pipeline.
  *
@@ -835,9 +835,9 @@ ide_build_pipeline_get_phase (IdeBuildPipeline *self)
  * Since: 3.32
  */
 IdeConfig *
-ide_build_pipeline_get_config (IdeBuildPipeline *self)
+ide_pipeline_get_config (IdePipeline *self)
 {
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (self), NULL);
+  g_return_val_if_fail (IDE_IS_PIPELINE (self), NULL);
 
   return self->config;
 }
@@ -849,7 +849,7 @@ clear_pipeline_entry (gpointer data)
 
   if (entry->stage != NULL)
     {
-      ide_build_stage_set_log_observer (entry->stage, NULL, NULL, NULL);
+      ide_pipeline_stage_set_log_observer (entry->stage, NULL, NULL, NULL);
       g_clear_object (&entry->stage);
     }
 }
@@ -862,20 +862,20 @@ pipeline_entry_compare (gconstpointer a,
   const PipelineEntry *entry_b = b;
   gint ret;
 
-  ret = (gint)(entry_a->phase & IDE_BUILD_PHASE_MASK)
-      - (gint)(entry_b->phase & IDE_BUILD_PHASE_MASK);
+  ret = (gint)(entry_a->phase & IDE_PIPELINE_PHASE_MASK)
+      - (gint)(entry_b->phase & IDE_PIPELINE_PHASE_MASK);
 
   if (ret == 0)
     {
-      gint whence_a = (entry_a->phase & IDE_BUILD_PHASE_WHENCE_MASK);
-      gint whence_b = (entry_b->phase & IDE_BUILD_PHASE_WHENCE_MASK);
+      gint whence_a = (entry_a->phase & IDE_PIPELINE_PHASE_WHENCE_MASK);
+      gint whence_b = (entry_b->phase & IDE_PIPELINE_PHASE_WHENCE_MASK);
 
       if (whence_a != whence_b)
         {
-          if (whence_a == IDE_BUILD_PHASE_BEFORE)
+          if (whence_a == IDE_PIPELINE_PHASE_BEFORE)
             return -1;
 
-          if (whence_b == IDE_BUILD_PHASE_BEFORE)
+          if (whence_b == IDE_PIPELINE_PHASE_BEFORE)
             return 1;
 
           if (whence_a == 0)
@@ -895,11 +895,11 @@ pipeline_entry_compare (gconstpointer a,
 }
 
 static void
-ide_build_pipeline_real_started (IdeBuildPipeline *self)
+ide_pipeline_real_started (IdePipeline *self)
 {
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE (self));
 
   self->errors_on_stdout = FALSE;
 
@@ -907,7 +907,7 @@ ide_build_pipeline_real_started (IdeBuildPipeline *self)
     {
       PipelineEntry *entry = &g_array_index (self->pipeline, PipelineEntry, i);
 
-      if (ide_build_stage_get_check_stdout (entry->stage))
+      if (ide_pipeline_stage_get_check_stdout (entry->stage))
         {
           self->errors_on_stdout = TRUE;
           break;
@@ -918,93 +918,93 @@ ide_build_pipeline_real_started (IdeBuildPipeline *self)
 }
 
 static void
-ide_build_pipeline_real_finished (IdeBuildPipeline *self,
-                                  gboolean          failed)
+ide_pipeline_real_finished (IdePipeline *self,
+                            gboolean     failed)
 {
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE (self));
 
   IDE_EXIT;
 }
 
 static void
-ide_build_pipeline_extension_added (IdeExtensionSetAdapter *set,
-                                    PeasPluginInfo         *plugin_info,
-                                    PeasExtension          *exten,
-                                    gpointer                user_data)
+ide_pipeline_extension_added (IdeExtensionSetAdapter *set,
+                              PeasPluginInfo         *plugin_info,
+                              PeasExtension          *exten,
+                              gpointer                user_data)
 {
-  IdeBuildPipeline *self = user_data;
-  IdeBuildPipelineAddin *addin = (IdeBuildPipelineAddin *)exten;
+  IdePipeline *self = user_data;
+  IdePipelineAddin *addin = (IdePipelineAddin *)exten;
 
   IDE_ENTRY;
 
   g_assert (IDE_IS_EXTENSION_SET_ADAPTER (set));
   g_assert (plugin_info != NULL);
-  g_assert (IDE_IS_BUILD_PIPELINE_ADDIN (addin));
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE_ADDIN (addin));
+  g_assert (IDE_IS_PIPELINE (self));
 
   /* Mark that we loaded this addin, so we don't unload it if it
    * was never loaded (during async loading).
    */
   g_object_set_data (G_OBJECT (addin), "HAS_LOADED", GINT_TO_POINTER (1));
 
-  ide_build_pipeline_addin_load (addin, self);
+  ide_pipeline_addin_load (addin, self);
 
   IDE_EXIT;
 }
 
 static void
-ide_build_pipeline_extension_removed (IdeExtensionSetAdapter *set,
-                                      PeasPluginInfo         *plugin_info,
-                                      PeasExtension          *exten,
-                                      gpointer                user_data)
+ide_pipeline_extension_removed (IdeExtensionSetAdapter *set,
+                                PeasPluginInfo         *plugin_info,
+                                PeasExtension          *exten,
+                                gpointer                user_data)
 {
-  IdeBuildPipeline *self = user_data;
-  IdeBuildPipelineAddin *addin = (IdeBuildPipelineAddin *)exten;
+  IdePipeline *self = user_data;
+  IdePipelineAddin *addin = (IdePipelineAddin *)exten;
 
   IDE_ENTRY;
 
   g_assert (IDE_IS_EXTENSION_SET_ADAPTER (set));
   g_assert (plugin_info != NULL);
-  g_assert (IDE_IS_BUILD_PIPELINE_ADDIN (addin));
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE_ADDIN (addin));
+  g_assert (IDE_IS_PIPELINE (self));
 
   if (g_object_get_data (G_OBJECT (addin), "HAS_LOADED"))
-    ide_build_pipeline_addin_unload (addin, self);
+    ide_pipeline_addin_unload (addin, self);
 
   IDE_EXIT;
 }
 
 static void
-build_command_query_cb (IdeBuildStage    *stage,
-                        IdeBuildPipeline *pipeline,
+build_command_query_cb (IdePipelineStage *stage,
+                        IdePipeline      *pipeline,
                         GPtrArray        *targets,
                         GCancellable     *cancellable,
                         gpointer          user_data)
 {
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_STAGE_LAUNCHER (stage));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE_STAGE_LAUNCHER (stage));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
   g_assert (user_data == NULL);
 
-  ide_build_stage_set_completed (stage, FALSE);
+  ide_pipeline_stage_set_completed (stage, FALSE);
 
   IDE_EXIT;
 }
 
 static void
-register_build_commands_stage (IdeBuildPipeline *self,
-                               IdeContext       *context)
+register_build_commands_stage (IdePipeline *self,
+                               IdeContext  *context)
 {
   g_autoptr(GError) error = NULL;
   const gchar * const *build_commands;
   g_autofree gchar *rundir_path = NULL;
   GFile *rundir;
 
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE (self));
   g_assert (IDE_IS_CONTEXT (context));
   g_assert (IDE_IS_CONFIG (self->config));
 
@@ -1017,9 +1017,9 @@ register_build_commands_stage (IdeBuildPipeline *self,
   for (guint i = 0; build_commands[i]; i++)
     {
       g_autoptr(IdeSubprocessLauncher) launcher = NULL;
-      g_autoptr(IdeBuildStage) stage = NULL;
+      g_autoptr(IdePipelineStage) stage = NULL;
 
-      if (NULL == (launcher = ide_build_pipeline_create_launcher (self, &error)))
+      if (NULL == (launcher = ide_pipeline_create_launcher (self, &error)))
         {
           g_warning ("%s", error->message);
           return;
@@ -1035,27 +1035,27 @@ register_build_commands_stage (IdeBuildPipeline *self,
       if (rundir_path != NULL)
         ide_subprocess_launcher_set_cwd (launcher, rundir_path);
 
-      stage = g_object_new (IDE_TYPE_BUILD_STAGE_LAUNCHER,
+      stage = g_object_new (IDE_TYPE_PIPELINE_STAGE_LAUNCHER,
                             "launcher", launcher,
                             NULL);
 
       g_signal_connect (stage, "query", G_CALLBACK (build_command_query_cb), NULL);
 
-      ide_build_pipeline_attach (self,
-                                  IDE_BUILD_PHASE_BUILD | IDE_BUILD_PHASE_AFTER,
+      ide_pipeline_attach (self,
+                                  IDE_PIPELINE_PHASE_BUILD | IDE_PIPELINE_PHASE_AFTER,
                                   i,
                                   stage);
     }
 }
 
 static void
-register_post_install_commands_stage (IdeBuildPipeline *self,
+register_post_install_commands_stage (IdePipeline *self,
                                       IdeContext       *context)
 {
   g_autoptr(GError) error = NULL;
   const gchar * const *post_install_commands;
 
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE (self));
   g_assert (IDE_IS_CONTEXT (context));
   g_assert (IDE_IS_CONFIG (self->config));
 
@@ -1065,9 +1065,9 @@ register_post_install_commands_stage (IdeBuildPipeline *self,
   for (guint i = 0; post_install_commands[i]; i++)
     {
       g_autoptr(IdeSubprocessLauncher) launcher = NULL;
-      g_autoptr(IdeBuildStage) stage = NULL;
+      g_autoptr(IdePipelineStage) stage = NULL;
 
-      if (NULL == (launcher = ide_build_pipeline_create_launcher (self, &error)))
+      if (NULL == (launcher = ide_pipeline_create_launcher (self, &error)))
         {
           ide_object_warning (self, "%s", error->message);
           return;
@@ -1077,12 +1077,12 @@ register_post_install_commands_stage (IdeBuildPipeline *self,
       ide_subprocess_launcher_push_argv (launcher, "-c");
       ide_subprocess_launcher_push_argv (launcher, post_install_commands[i]);
 
-      stage = g_object_new (IDE_TYPE_BUILD_STAGE_LAUNCHER,
+      stage = g_object_new (IDE_TYPE_PIPELINE_STAGE_LAUNCHER,
                             "launcher", launcher,
                             NULL);
 
-      ide_build_pipeline_attach (self,
-                                  IDE_BUILD_PHASE_INSTALL | IDE_BUILD_PHASE_AFTER,
+      ide_pipeline_attach (self,
+                                  IDE_PIPELINE_PHASE_INSTALL | IDE_PIPELINE_PHASE_AFTER,
                                   i,
                                   stage);
     }
@@ -1098,17 +1098,17 @@ collect_pipeline_addins (IdeExtensionSetAdapter *set,
 
   g_assert (IDE_IS_EXTENSION_SET_ADAPTER (set));
   g_assert (plugin_info != NULL);
-  g_assert (IDE_IS_BUILD_PIPELINE_ADDIN (exten));
+  g_assert (IDE_IS_PIPELINE_ADDIN (exten));
   g_assert (addins != NULL);
 
   g_ptr_array_add (addins, g_object_ref (exten));
 }
 
 static gboolean
-ide_build_pipeline_load_cb (IdleLoadState *state)
+ide_pipeline_load_cb (IdleLoadState *state)
 {
   g_assert (state != NULL);
-  g_assert (IDE_IS_BUILD_PIPELINE (state->self));
+  g_assert (IDE_IS_PIPELINE (state->self));
   g_assert (state->addins != NULL);
 
   /*
@@ -1119,11 +1119,11 @@ ide_build_pipeline_load_cb (IdleLoadState *state)
 
   if (state->addins->len > 0)
     {
-      IdeBuildPipelineAddin *addin = g_ptr_array_index (state->addins, state->addins->len - 1);
+      IdePipelineAddin *addin = g_ptr_array_index (state->addins, state->addins->len - 1);
       gint64 begin, end;
 
       begin = g_get_monotonic_time ();
-      ide_build_pipeline_addin_load (addin, state->self);
+      ide_pipeline_addin_load (addin, state->self);
       end = g_get_monotonic_time ();
 
       g_debug ("%s loaded in %lf seconds",
@@ -1143,7 +1143,7 @@ ide_build_pipeline_load_cb (IdleLoadState *state)
 }
 
 /**
- * ide_build_pipeline_load:
+ * ide_pipeline_load:
  *
  * This manages the loading of addins which will register their necessary build
  * stages.  We do this separately from ::constructed so that we can
@@ -1154,7 +1154,7 @@ ide_build_pipeline_load_cb (IdleLoadState *state)
  * Since: 3.32
  */
 static void
-ide_build_pipeline_load (IdeBuildPipeline *self)
+ide_pipeline_load (IdePipeline *self)
 {
   g_autoptr(GPtrArray) addins = NULL;
   IdleLoadState *state;
@@ -1162,7 +1162,7 @@ ide_build_pipeline_load (IdeBuildPipeline *self)
 
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE (self));
   g_assert (self->addins == NULL);
 
   /* We might have already disposed if our pipeline got discarded */
@@ -1174,17 +1174,17 @@ ide_build_pipeline_load (IdeBuildPipeline *self)
 
   self->addins = ide_extension_set_adapter_new (IDE_OBJECT (self),
                                                 peas_engine_get_default (),
-                                                IDE_TYPE_BUILD_PIPELINE_ADDIN,
+                                                IDE_TYPE_PIPELINE_ADDIN,
                                                 NULL, NULL);
 
   g_signal_connect (self->addins,
                     "extension-added",
-                    G_CALLBACK (ide_build_pipeline_extension_added),
+                    G_CALLBACK (ide_pipeline_extension_added),
                     self);
 
   g_signal_connect (self->addins,
                     "extension-removed",
-                    G_CALLBACK (ide_build_pipeline_extension_removed),
+                    G_CALLBACK (ide_pipeline_extension_removed),
                     self);
 
   /* Collect our addins so we can incrementally load them in an
@@ -1201,7 +1201,7 @@ ide_build_pipeline_load (IdeBuildPipeline *self)
 
   self->idle_addins_load_source =
     g_idle_add_full (G_PRIORITY_LOW,
-                     (GSourceFunc) ide_build_pipeline_load_cb,
+                     (GSourceFunc) ide_pipeline_load_cb,
                      state,
                      idle_load_state_free);
 
@@ -1209,12 +1209,12 @@ ide_build_pipeline_load (IdeBuildPipeline *self)
 }
 
 static void
-ide_build_pipeline_load_get_info_cb (GObject      *object,
-                                     GAsyncResult *result,
-                                     gpointer      user_data)
+ide_pipeline_load_get_info_cb (GObject      *object,
+                               GAsyncResult *result,
+                               gpointer      user_data)
 {
   IdeDevice *device = (IdeDevice *)object;
-  g_autoptr(IdeBuildPipeline) self = user_data;
+  g_autoptr(IdePipeline) self = user_data;
   g_autoptr(IdeDeviceInfo) info = NULL;
   g_autoptr(GError) error = NULL;
 
@@ -1222,7 +1222,7 @@ ide_build_pipeline_load_get_info_cb (GObject      *object,
 
   g_assert (IDE_IS_DEVICE (device));
   g_assert (G_IS_ASYNC_RESULT (result));
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE (self));
 
   if (!(info = ide_device_get_info_finish (device, result, &error)))
     {
@@ -1233,17 +1233,17 @@ ide_build_pipeline_load_get_info_cb (GObject      *object,
   if (g_cancellable_is_cancelled (self->cancellable))
     IDE_EXIT;
 
-  _ide_build_pipeline_check_toolchain (self, info);
+  _ide_pipeline_check_toolchain (self, info);
 
-  ide_build_pipeline_load (self);
+  ide_pipeline_load (self);
 }
 
 static void
-ide_build_pipeline_begin_load (IdeBuildPipeline *self)
+ide_pipeline_begin_load (IdePipeline *self)
 {
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE (self));
   g_assert (IDE_IS_DEVICE (self->device));
 
   /*
@@ -1259,17 +1259,17 @@ ide_build_pipeline_begin_load (IdeBuildPipeline *self)
 
   ide_device_get_info_async (self->device,
                              self->cancellable,
-                             ide_build_pipeline_load_get_info_cb,
+                             ide_pipeline_load_get_info_cb,
                              g_object_ref (self));
 
   IDE_EXIT;
 }
 
 /**
- * ide_build_pipeline_unload:
- * @self: an #IdeBuildPipeline
+ * ide_pipeline_unload:
+ * @self: an #IdePipeline
  *
- * This clears things up that were initialized in ide_build_pipeline_load().
+ * This clears things up that were initialized in ide_pipeline_load().
  * This function is safe to run even if load has not been called. We will not
  * clean things up if the pipeline is currently executing (we can wait until
  * its finished or dispose/finalize to cleanup up further.
@@ -1277,11 +1277,11 @@ ide_build_pipeline_begin_load (IdeBuildPipeline *self)
  * Since: 3.32
  */
 static void
-ide_build_pipeline_unload (IdeBuildPipeline *self)
+ide_pipeline_unload (IdePipeline *self)
 {
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE (self));
 
   g_clear_object (&self->addins);
 
@@ -1289,13 +1289,13 @@ ide_build_pipeline_unload (IdeBuildPipeline *self)
 }
 
 static void
-ide_build_pipeline_notify_ready (IdeBuildPipeline *self,
-                                 GParamSpec       *pspec,
-                                 IdeConfig *configuration)
+ide_pipeline_notify_ready (IdePipeline *self,
+                           GParamSpec  *pspec,
+                           IdeConfig   *configuration)
 {
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE (self));
   g_assert (IDE_IS_CONFIG (configuration));
 
   /*
@@ -1308,9 +1308,9 @@ ide_build_pipeline_notify_ready (IdeBuildPipeline *self,
   if (ide_config_get_ready (configuration))
     {
       g_signal_handlers_disconnect_by_func (configuration,
-                                            G_CALLBACK (ide_build_pipeline_notify_ready),
+                                            G_CALLBACK (ide_pipeline_notify_ready),
                                             self);
-      ide_build_pipeline_begin_load (self);
+      ide_pipeline_begin_load (self);
     }
   else
     g_debug ("Configuration not yet ready, delaying pipeline setup");
@@ -1319,9 +1319,9 @@ ide_build_pipeline_notify_ready (IdeBuildPipeline *self,
 }
 
 static void
-ide_build_pipeline_finalize (GObject *object)
+ide_pipeline_finalize (GObject *object)
 {
-  IdeBuildPipeline *self = (IdeBuildPipeline *)object;
+  IdePipeline *self = (IdePipeline *)object;
 
   IDE_ENTRY;
 
@@ -1343,7 +1343,7 @@ ide_build_pipeline_finalize (GObject *object)
   g_clear_pointer (&self->chained_bindings, g_ptr_array_unref);
   g_clear_pointer (&self->host_triplet, ide_triplet_unref);
 
-  G_OBJECT_CLASS (ide_build_pipeline_parent_class)->finalize (object);
+  G_OBJECT_CLASS (ide_pipeline_parent_class)->finalize (object);
 
   DZL_COUNTER_DEC (Instances);
 
@@ -1351,18 +1351,18 @@ ide_build_pipeline_finalize (GObject *object)
 }
 
 static void
-ide_build_pipeline_destroy (IdeObject *object)
+ide_pipeline_destroy (IdeObject *object)
 {
-  IdeBuildPipeline *self = IDE_BUILD_PIPELINE (object);
+  IdePipeline *self = IDE_PIPELINE (object);
   g_auto(IdePtyFd) fd = IDE_PTY_FD_INVALID;
 
   IDE_ENTRY;
 
   g_clear_handle_id (&self->idle_addins_load_source, g_source_remove);
 
-  _ide_build_pipeline_cancel (self);
+  _ide_pipeline_cancel (self);
 
-  ide_build_pipeline_unload (self);
+  ide_pipeline_unload (self);
 
   g_clear_pointer (&self->message, g_free);
 
@@ -1372,22 +1372,22 @@ ide_build_pipeline_destroy (IdeObject *object)
   if (IDE_IS_PTY_INTERCEPT (&self->intercept))
     ide_pty_intercept_clear (&self->intercept);
 
-  IDE_OBJECT_CLASS (ide_build_pipeline_parent_class)->destroy (object);
+  IDE_OBJECT_CLASS (ide_pipeline_parent_class)->destroy (object);
 
   IDE_EXIT;
 }
 
 static gboolean
-ide_build_pipeline_initable_init (GInitable     *initable,
-                                  GCancellable  *cancellable,
-                                  GError       **error)
+ide_pipeline_initable_init (GInitable     *initable,
+                            GCancellable  *cancellable,
+                            GError       **error)
 {
-  IdeBuildPipeline *self = (IdeBuildPipeline *)initable;
+  IdePipeline *self = (IdePipeline *)initable;
   IdePtyFd master_fd;
 
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE (self));
   g_assert (IDE_IS_CONFIG (self->config));
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
 
@@ -1426,16 +1426,16 @@ ide_build_pipeline_initable_init (GInitable     *initable,
 
   ide_pty_intercept_set_callback (&self->intercept,
                               &self->intercept.master,
-                              ide_build_pipeline_intercept_pty_master_cb,
+                              ide_pipeline_intercept_pty_master_cb,
                               self);
 
   g_signal_connect_object (self->config,
                            "notify::ready",
-                           G_CALLBACK (ide_build_pipeline_notify_ready),
+                           G_CALLBACK (ide_pipeline_notify_ready),
                            self,
                            G_CONNECT_SWAPPED);
 
-  ide_build_pipeline_notify_ready (self, NULL, self->config);
+  ide_pipeline_notify_ready (self, NULL, self->config);
 
   g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_PTY]);
 
@@ -1445,21 +1445,21 @@ ide_build_pipeline_initable_init (GInitable     *initable,
 static void
 initable_iface_init (GInitableIface *iface)
 {
-  iface->init = ide_build_pipeline_initable_init;
+  iface->init = ide_pipeline_initable_init;
 }
 
 static void
-ide_build_pipeline_parent_set (IdeObject *object,
-                               IdeObject *parent)
+ide_pipeline_parent_set (IdeObject *object,
+                         IdeObject *parent)
 {
-  IdeBuildPipeline *self = IDE_BUILD_PIPELINE (object);
+  IdePipeline *self = IDE_PIPELINE (object);
   IdeToolchainManager *toolchain_manager;
   g_autoptr(IdeContext) context = NULL;
   g_autoptr(GFile) workdir = NULL;
 
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE (self));
   g_assert (!parent || IDE_IS_OBJECT (parent));
   g_assert (IDE_IS_CONFIG (self->config));
 
@@ -1478,12 +1478,12 @@ ide_build_pipeline_parent_set (IdeObject *object,
 }
 
 static void
-ide_build_pipeline_get_property (GObject    *object,
-                                 guint       prop_id,
-                                 GValue     *value,
-                                 GParamSpec *pspec)
+ide_pipeline_get_property (GObject    *object,
+                           guint       prop_id,
+                           GValue     *value,
+                           GParamSpec *pspec)
 {
-  IdeBuildPipeline *self = IDE_BUILD_PIPELINE (object);
+  IdePipeline *self = IDE_PIPELINE (object);
 
   switch (prop_id)
     {
@@ -1492,19 +1492,19 @@ ide_build_pipeline_get_property (GObject    *object,
       break;
 
     case PROP_CONFIG:
-      g_value_set_object (value, ide_build_pipeline_get_config (self));
+      g_value_set_object (value, ide_pipeline_get_config (self));
       break;
 
     case PROP_MESSAGE:
-      g_value_set_string (value, ide_build_pipeline_get_message (self));
+      g_value_set_string (value, ide_pipeline_get_message (self));
       break;
 
     case PROP_PHASE:
-      g_value_set_flags (value, ide_build_pipeline_get_phase (self));
+      g_value_set_flags (value, ide_pipeline_get_phase (self));
       break;
 
     case PROP_PTY:
-      g_value_set_object (value, ide_build_pipeline_get_pty (self));
+      g_value_set_object (value, ide_pipeline_get_pty (self));
       break;
 
     default:
@@ -1513,12 +1513,12 @@ ide_build_pipeline_get_property (GObject    *object,
 }
 
 static void
-ide_build_pipeline_set_property (GObject      *object,
-                                 guint         prop_id,
-                                 const GValue *value,
-                                 GParamSpec   *pspec)
+ide_pipeline_set_property (GObject      *object,
+                           guint         prop_id,
+                           const GValue *value,
+                           GParamSpec   *pspec)
 {
-  IdeBuildPipeline *self = IDE_BUILD_PIPELINE (object);
+  IdePipeline *self = IDE_PIPELINE (object);
 
   switch (prop_id)
     {
@@ -1536,20 +1536,20 @@ ide_build_pipeline_set_property (GObject      *object,
 }
 
 static void
-ide_build_pipeline_class_init (IdeBuildPipelineClass *klass)
+ide_pipeline_class_init (IdePipelineClass *klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
   IdeObjectClass *i_object_class = IDE_OBJECT_CLASS (klass);
 
-  object_class->finalize = ide_build_pipeline_finalize;
-  object_class->get_property = ide_build_pipeline_get_property;
-  object_class->set_property = ide_build_pipeline_set_property;
+  object_class->finalize = ide_pipeline_finalize;
+  object_class->get_property = ide_pipeline_get_property;
+  object_class->set_property = ide_pipeline_set_property;
 
-  i_object_class->destroy = ide_build_pipeline_destroy;
-  i_object_class->parent_set = ide_build_pipeline_parent_set;
+  i_object_class->destroy = ide_pipeline_destroy;
+  i_object_class->parent_set = ide_pipeline_parent_set;
 
   /**
-   * IdeBuildPipeline:busy:
+   * IdePipeline:busy:
    *
    * Gets the "busy" property. If %TRUE, the pipeline is busy executing.
    *
@@ -1563,7 +1563,7 @@ ide_build_pipeline_class_init (IdeBuildPipelineClass *klass)
                           (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
   /**
-   * IdeBuildPipeline:configuration:
+   * IdePipeline:configuration:
    *
    * The configuration to use for the build pipeline.
    *
@@ -1577,7 +1577,7 @@ ide_build_pipeline_class_init (IdeBuildPipelineClass *klass)
                          (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
 
   /**
-   * IdeBuildPipeline:device:
+   * IdePipeline:device:
    *
    * The "device" property is the device we are compiling for.
    *
@@ -1591,7 +1591,7 @@ ide_build_pipeline_class_init (IdeBuildPipelineClass *klass)
                          G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
 
   /**
-   * IdeBuildPipeline:message:
+   * IdePipeline:message:
    *
    * The "message" property is descriptive text about what the the
    * pipeline is doing or it's readiness status.
@@ -1606,7 +1606,7 @@ ide_build_pipeline_class_init (IdeBuildPipelineClass *klass)
                          (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
 
   /**
-   * IdeBuildPipeline:phase:
+   * IdePipeline:phase:
    *
    * The current build phase during execution of the pipeline.
    *
@@ -1615,16 +1615,16 @@ ide_build_pipeline_class_init (IdeBuildPipelineClass *klass)
   properties [PROP_PHASE] =
     g_param_spec_flags ("phase",
                         "Phase",
-                        "The phase that is being executed",
-                        IDE_TYPE_BUILD_PHASE,
-                        IDE_BUILD_PHASE_NONE,
+                        "The phase that is being buildd",
+                        IDE_TYPE_PIPELINE_PHASE,
+                        IDE_PIPELINE_PHASE_NONE,
                         (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
 
   /**
-   * IdeBuildPipeline:pty:
+   * IdePipeline:pty:
    *
    * The "pty" property is the #VtePty that is used by build stages that
-   * execute subprocesses with a pseudo terminal.
+   * build subprocesses with a pseudo terminal.
    *
    * Since: 3.32
    */
@@ -1638,8 +1638,8 @@ ide_build_pipeline_class_init (IdeBuildPipelineClass *klass)
   g_object_class_install_properties (object_class, N_PROPS, properties);
 
   /**
-   * IdeBuildPipeline::diagnostic:
-   * @self: An #IdeBuildPipeline
+   * IdePipeline::diagnostic:
+   * @self: An #IdePipeline
    * @diagnostic: The newly created diagnostic
    *
    * This signal is emitted when a plugin has detected a diagnostic while
@@ -1655,12 +1655,12 @@ ide_build_pipeline_class_init (IdeBuildPipelineClass *klass)
                                 G_TYPE_NONE, 1, IDE_TYPE_DIAGNOSTIC);
 
   /**
-   * IdeBuildPipeline::started:
-   * @self: An #IdeBuildPipeline
-   * @phase: the #IdeBuildPhase for which we are advancing
+   * IdePipeline::started:
+   * @self: An #IdePipeline
+   * @phase: the #IdePipelinePhase for which we are advancing
    *
    * This signal is emitted when the pipeline has started executing in
-   * response to ide_build_pipeline_execute_async() being called.
+   * response to ide_pipeline_build_async() being called.
    *
    * Since: 3.32
    */
@@ -1668,13 +1668,13 @@ ide_build_pipeline_class_init (IdeBuildPipelineClass *klass)
     g_signal_new_class_handler ("started",
                                 G_TYPE_FROM_CLASS (klass),
                                 G_SIGNAL_RUN_LAST,
-                                G_CALLBACK (ide_build_pipeline_real_started),
+                                G_CALLBACK (ide_pipeline_real_started),
                                 NULL, NULL, NULL,
-                                G_TYPE_NONE, 1, IDE_TYPE_BUILD_PHASE);
+                                G_TYPE_NONE, 1, IDE_TYPE_PIPELINE_PHASE);
 
   /**
-   * IdeBuildPipeline::finished:
-   * @self: An #IdeBuildPipeline
+   * IdePipeline::finished:
+   * @self: An #IdePipeline
    * @failed: If the build was a failure
    *
    * This signal is emitted when the build process has finished executing.
@@ -1687,13 +1687,13 @@ ide_build_pipeline_class_init (IdeBuildPipelineClass *klass)
     g_signal_new_class_handler ("finished",
                                 G_TYPE_FROM_CLASS (klass),
                                 G_SIGNAL_RUN_LAST,
-                                G_CALLBACK (ide_build_pipeline_real_finished),
+                                G_CALLBACK (ide_pipeline_real_finished),
                                 NULL, NULL, NULL,
                                 G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
 }
 
 static void
-ide_build_pipeline_init (IdeBuildPipeline *self)
+ide_pipeline_init (IdePipeline *self)
 {
   DZL_COUNTER_INC (Instances);
 
@@ -1714,25 +1714,25 @@ ide_build_pipeline_init (IdeBuildPipeline *self)
 }
 
 static void
-ide_build_pipeline_stage_execute_cb (GObject      *object,
+ide_pipeline_stage_build_cb (GObject      *object,
                                      GAsyncResult *result,
                                      gpointer      user_data)
 {
-  IdeBuildStage *stage = (IdeBuildStage *)object;
-  IdeBuildPipeline *self;
+  IdePipelineStage *stage = (IdePipelineStage *)object;
+  IdePipeline *self;
   g_autoptr(IdeTask) task = user_data;
   g_autoptr(GError) error = NULL;
 
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_STAGE (stage));
+  g_assert (IDE_IS_PIPELINE_STAGE (stage));
   g_assert (G_IS_ASYNC_RESULT (result));
   g_assert (IDE_IS_TASK (task));
 
   self = ide_task_get_source_object (task);
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE (self));
 
-  if (!_ide_build_stage_execute_with_query_finish (stage, result, &error))
+  if (!_ide_pipeline_stage_build_with_query_finish (stage, result, &error))
     {
       g_debug ("stage of type %s failed: %s",
                G_OBJECT_TYPE_NAME (stage),
@@ -1741,24 +1741,24 @@ ide_build_pipeline_stage_execute_cb (GObject      *object,
       ide_task_return_error (task, g_steal_pointer (&error));
     }
 
-  ide_build_stage_set_completed (stage, !self->failed);
+  ide_pipeline_stage_set_completed (stage, !self->failed);
 
   g_clear_pointer (&self->chained_bindings, g_ptr_array_unref);
   self->chained_bindings = g_ptr_array_new_with_free_func (g_object_unref);
 
   if (self->failed == FALSE)
-    ide_build_pipeline_tick_execute (self, task);
+    ide_pipeline_tick_build (self, task);
 
   IDE_EXIT;
 }
 
 static void
-ide_build_pipeline_try_chain (IdeBuildPipeline *self,
-                              IdeBuildStage    *stage,
-                              guint             position)
+ide_pipeline_try_chain (IdePipeline      *self,
+                        IdePipelineStage *stage,
+                        guint             position)
 {
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
-  g_assert (IDE_IS_BUILD_STAGE (stage));
+  g_assert (IDE_IS_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE_STAGE (stage));
 
   for (; position < self->pipeline->len; position++)
     {
@@ -1770,14 +1770,14 @@ ide_build_pipeline_try_chain (IdeBuildPipeline *self,
        * Ignore all future stages if they were not requested by the current
        * pipeline execution.
        */
-      if (((entry->phase & IDE_BUILD_PHASE_MASK) & self->requested_mask) == 0)
+      if (((entry->phase & IDE_PIPELINE_PHASE_MASK) & self->requested_mask) == 0)
         return;
 
       /* Skip past the stage if it is disabled. */
-      if (ide_build_stage_get_disabled (entry->stage))
+      if (ide_pipeline_stage_get_disabled (entry->stage))
         continue;
 
-      chained = ide_build_stage_chain (stage, entry->stage);
+      chained = ide_pipeline_stage_chain (stage, entry->stage);
 
       IDE_TRACE_MSG ("Checking if %s chains to stage[%d] (%s) = %s",
                      G_OBJECT_TYPE_NAME (stage),
@@ -1796,12 +1796,12 @@ ide_build_pipeline_try_chain (IdeBuildPipeline *self,
 }
 
 static void
-complete_queued_before_phase (IdeBuildPipeline *self,
-                              IdeBuildPhase     phase)
+complete_queued_before_phase (IdePipeline      *self,
+                              IdePipelinePhase  phase)
 {
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE (self));
 
-  phase = phase & IDE_BUILD_PHASE_MASK;
+  phase = phase & IDE_PIPELINE_PHASE_MASK;
 
   for (GList *iter = self->task_queue.head; iter; iter = iter->next)
     {
@@ -1837,15 +1837,15 @@ complete_queued_before_phase (IdeBuildPipeline *self,
 }
 
 static void
-ide_build_pipeline_tick_execute (IdeBuildPipeline *self,
-                                 IdeTask          *task)
+ide_pipeline_tick_build (IdePipeline *self,
+                         IdeTask     *task)
 {
   GCancellable *cancellable;
   TaskData *td;
 
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE (self));
   g_assert (IDE_IS_TASK (task));
 
   self->current_stage = NULL;
@@ -1856,11 +1856,11 @@ ide_build_pipeline_tick_execute (IdeBuildPipeline *self,
   g_assert (td != NULL);
   g_assert (td->type == TASK_BUILD || td->type == TASK_REBUILD);
   g_assert (td->task == task);
-  g_assert (td->phase != IDE_BUILD_PHASE_NONE);
+  g_assert (td->phase != IDE_PIPELINE_PHASE_NONE);
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
 
   /* Clear any message from the previous stage */
-  _ide_build_pipeline_set_message (self, NULL);
+  _ide_pipeline_set_message (self, NULL);
 
   /* Clear cached directory enter/leave tracking */
   g_clear_pointer (&self->errfmt_current_dir, g_free);
@@ -1871,7 +1871,7 @@ ide_build_pipeline_tick_execute (IdeBuildPipeline *self,
     IDE_EXIT;
 
   /* If we can skip walking the pipeline, go ahead and do so now. */
-  if (!ide_build_pipeline_request_phase (self, td->phase))
+  if (!ide_pipeline_request_phase (self, td->phase))
     {
       ide_task_return_boolean (task, TRUE);
       IDE_EXIT;
@@ -1879,9 +1879,9 @@ ide_build_pipeline_tick_execute (IdeBuildPipeline *self,
 
   /*
    * Walk forward to the next stage requiring execution and asynchronously
-   * execute it. The stage may also need to perform an async ::query signal
-   * delaying pipeline execution. _ide_build_stage_execute_with_query_async()
-   * will handle all of that for us, in cause they call ide_build_stage_pause()
+   * build it. The stage may also need to perform an async ::query signal
+   * delaying pipeline execution. _ide_pipeline_stage_build_with_query_async()
+   * will handle all of that for us, in cause they call ide_pipeline_stage_pause()
    * during the ::query callback.
    */
   for (self->position++; (guint)self->position < self->pipeline->len; self->position++)
@@ -1889,16 +1889,16 @@ ide_build_pipeline_tick_execute (IdeBuildPipeline *self,
       const PipelineEntry *entry = &g_array_index (self->pipeline, PipelineEntry, self->position);
 
       g_assert (entry->stage != NULL);
-      g_assert (IDE_IS_BUILD_STAGE (entry->stage));
+      g_assert (IDE_IS_PIPELINE_STAGE (entry->stage));
 
       /* Complete any tasks that are waiting for this to complete */
       complete_queued_before_phase (self, entry->phase);
 
       /* Ignore the stage if it is disabled */
-      if (ide_build_stage_get_disabled (entry->stage))
+      if (ide_pipeline_stage_get_disabled (entry->stage))
         continue;
 
-      if ((entry->phase & IDE_BUILD_PHASE_MASK) & self->requested_mask)
+      if ((entry->phase & IDE_PIPELINE_PHASE_MASK) & self->requested_mask)
         {
           GPtrArray *targets = NULL;
 
@@ -1914,13 +1914,13 @@ ide_build_pipeline_tick_execute (IdeBuildPipeline *self,
            * duplicate work. This will also advance self->position based on
            * how many stages were chained.
            */
-          ide_build_pipeline_try_chain (self, entry->stage, self->position + 1);
+          ide_pipeline_try_chain (self, entry->stage, self->position + 1);
 
-          _ide_build_stage_execute_with_query_async (entry->stage,
+          _ide_pipeline_stage_build_with_query_async (entry->stage,
                                                      self,
                                                      targets,
                                                      cancellable,
-                                                     ide_build_pipeline_stage_execute_cb,
+                                                     ide_pipeline_stage_build_cb,
                                                      g_object_ref (task));
 
           g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_MESSAGE]);
@@ -1936,13 +1936,13 @@ ide_build_pipeline_tick_execute (IdeBuildPipeline *self,
 }
 
 static void
-ide_build_pipeline_task_notify_completed (IdeBuildPipeline *self,
-                                          GParamSpec       *pspec,
-                                          IdeTask          *task)
+ide_pipeline_task_notify_completed (IdePipeline *self,
+                                    GParamSpec  *pspec,
+                                    IdeTask     *task)
 {
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE (self));
   g_assert (IDE_IS_TASK (task));
 
   IDE_TRACE_MSG ("Clearing busy bit for pipeline");
@@ -1956,11 +1956,11 @@ ide_build_pipeline_task_notify_completed (IdeBuildPipeline *self,
   g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_MESSAGE]);
 
   /*
-   * XXX: How do we ensure transients are executed with the part of the
+   * XXX: How do we ensure transients are buildd with the part of the
    *      pipeline we care about? We might just need to ensure that :busy is
    *      FALSE before adding transients.
    */
-  ide_build_pipeline_release_transients (self);
+  ide_pipeline_release_transients (self);
 
   g_signal_emit (self, signals [FINISHED], 0, self->failed);
 
@@ -1973,64 +1973,64 @@ ide_build_pipeline_task_notify_completed (IdeBuildPipeline *self,
    * go ahead and unload the pipeline.
    */
   if (!ide_config_get_ready (self->config))
-    ide_build_pipeline_unload (self);
+    ide_pipeline_unload (self);
   else
-    ide_build_pipeline_queue_flush (self);
+    ide_pipeline_queue_flush (self);
 
   IDE_EXIT;
 }
 
 /**
- * ide_build_pipeline_build_targets_async:
- * @self: A @IdeBuildPipeline
+ * ide_pipeline_build_targets_async:
+ * @self: A @IdePipeline
  * @phase: the requested build phase
  * @targets: (nullable) (element-type IdeBuildTarget): an optional array of
  *   #IdeBuildTarget for the pipeline to build.
  * @cancellable: (nullable): a #GCancellable or %NULL
- * @callback: a callback to execute upon completion
+ * @callback: a callback to build upon completion
  * @user_data: data for @callback
  *
  * Asynchronously starts the build pipeline.
  *
- * The @phase parameter should contain the #IdeBuildPhase that is
+ * The @phase parameter should contain the #IdePipelinePhase that is
  * necessary to complete. If you simply want to trigger a generic
- * build, you probably want %IDE_BUILD_PHASE_BUILD. If you only
+ * build, you probably want %IDE_PIPELINE_PHASE_BUILD. If you only
  * need to configure the project (and necessarily the dependencies
- * up to that phase) you might want %IDE_BUILD_PHASE_CONFIGURE.
+ * up to that phase) you might want %IDE_PIPELINE_PHASE_CONFIGURE.
  *
- * You may not specify %IDE_BUILD_PHASE_AFTER or
- * %IDE_BUILD_PHASE_BEFORE flags as those must always be processed
+ * You may not specify %IDE_PIPELINE_PHASE_AFTER or
+ * %IDE_PIPELINE_PHASE_BEFORE flags as those must always be processed
  * with the underlying phase they are attached to.
  *
- * Upon completion, @callback will be executed and should call
- * ide_build_pipeline_execute_finish() to get the status of the
+ * Upon completion, @callback will be buildd and should call
+ * ide_pipeline_build_finish() to get the status of the
  * operation.
  *
  * Since: 3.32
  */
 void
-ide_build_pipeline_build_targets_async (IdeBuildPipeline    *self,
-                                        IdeBuildPhase        phase,
-                                        GPtrArray           *targets,
-                                        GCancellable        *cancellable,
-                                        GAsyncReadyCallback  callback,
-                                        gpointer             user_data)
+ide_pipeline_build_targets_async (IdePipeline         *self,
+                                  IdePipelinePhase        phase,
+                                  GPtrArray           *targets,
+                                  GCancellable        *cancellable,
+                                  GAsyncReadyCallback  callback,
+                                  gpointer             user_data)
 {
   g_autoptr(IdeTask) task = NULL;
   TaskData *task_data;
 
   IDE_ENTRY;
 
-  g_return_if_fail (IDE_IS_BUILD_PIPELINE (self));
+  g_return_if_fail (IDE_IS_PIPELINE (self));
   g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable));
 
   cancellable = dzl_cancellable_chain (cancellable, self->cancellable);
 
   task = ide_task_new (self, cancellable, callback, user_data);
-  ide_task_set_source_tag (task, ide_build_pipeline_build_async);
+  ide_task_set_source_tag (task, ide_pipeline_build_targets_async);
   ide_task_set_priority (task, G_PRIORITY_LOW);
 
-  if (!ide_build_pipeline_check_ready (self, task))
+  if (!ide_pipeline_check_ready (self, task))
     return;
 
   /*
@@ -2067,7 +2067,7 @@ ide_build_pipeline_build_targets_async (IdeBuildPipeline    *self,
 
   g_queue_push_tail (&self->task_queue, g_steal_pointer (&task));
 
-  ide_build_pipeline_queue_flush (self);
+  ide_pipeline_queue_flush (self);
 
   IDE_EXIT;
 
@@ -2077,30 +2077,30 @@ short_circuit:
 }
 
 /**
- * ide_build_pipeline_build_targets_finish:
- * @self: An #IdeBuildPipeline
+ * ide_pipeline_build_targets_finish:
+ * @self: An #IdePipeline
  * @result: a #GAsyncResult provided to callback
  * @error: A location for a #GError, or %NULL
  *
  * This function completes the asynchronous request to build
  * up to a particular phase and targets of the build pipeline.
  *
- * Returns: %TRUE if the build stages were executed successfully
+ * Returns: %TRUE if the build stages were buildd successfully
  *   up to the requested build phase provided to
- *   ide_build_pipeline_build_targets_async().
+ *   ide_pipeline_build_targets_async().
  *
  * Since: 3.32
  */
 gboolean
-ide_build_pipeline_build_targets_finish (IdeBuildPipeline  *self,
-                                         GAsyncResult      *result,
-                                         GError           **error)
+ide_pipeline_build_targets_finish (IdePipeline   *self,
+                                   GAsyncResult  *result,
+                                   GError       **error)
 {
   gboolean ret;
 
   IDE_ENTRY;
 
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (self), FALSE);
+  g_return_val_if_fail (IDE_IS_PIPELINE (self), FALSE);
   g_return_val_if_fail (IDE_IS_TASK (result), FALSE);
 
   ret = ide_task_propagate_boolean (IDE_TASK (result), error);
@@ -2109,66 +2109,66 @@ ide_build_pipeline_build_targets_finish (IdeBuildPipeline  *self,
 }
 
 /**
- * ide_build_pipeline_build_async:
- * @self: A @IdeBuildPipeline
+ * ide_pipeline_build_async:
+ * @self: A @IdePipeline
  * @phase: the requested build phase
  * @cancellable: (nullable): a #GCancellable or %NULL
- * @callback: a callback to execute upon completion
+ * @callback: a callback to build upon completion
  * @user_data: data for @callback
  *
  * Asynchronously starts the build pipeline.
  *
- * The @phase parameter should contain the #IdeBuildPhase that is
+ * The @phase parameter should contain the #IdePipelinePhase that is
  * necessary to complete. If you simply want to trigger a generic
- * build, you probably want %IDE_BUILD_PHASE_BUILD. If you only
+ * build, you probably want %IDE_PIPELINE_PHASE_BUILD. If you only
  * need to configure the project (and necessarily the dependencies
- * up to that phase) you might want %IDE_BUILD_PHASE_CONFIGURE.
+ * up to that phase) you might want %IDE_PIPELINE_PHASE_CONFIGURE.
  *
- * You may not specify %IDE_BUILD_PHASE_AFTER or
- * %IDE_BUILD_PHASE_BEFORE flags as those must always be processed
+ * You may not specify %IDE_PIPELINE_PHASE_AFTER or
+ * %IDE_PIPELINE_PHASE_BEFORE flags as those must always be processed
  * with the underlying phase they are attached to.
  *
- * Upon completion, @callback will be executed and should call
- * ide_build_pipeline_execute_finish() to get the status of the
+ * Upon completion, @callback will be buildd and should call
+ * ide_pipeline_build_finish() to get the status of the
  * operation.
  *
  * Since: 3.32
  */
 void
-ide_build_pipeline_build_async (IdeBuildPipeline    *self,
-                                IdeBuildPhase        phase,
-                                GCancellable        *cancellable,
-                                GAsyncReadyCallback  callback,
-                                gpointer             user_data)
+ide_pipeline_build_async (IdePipeline         *self,
+                          IdePipelinePhase        phase,
+                          GCancellable        *cancellable,
+                          GAsyncReadyCallback  callback,
+                          gpointer             user_data)
 {
-  ide_build_pipeline_build_targets_async (self, phase, NULL, cancellable, callback, user_data);
+  ide_pipeline_build_targets_async (self, phase, NULL, cancellable, callback, user_data);
 }
 
 /**
- * ide_build_pipeline_build_finish:
- * @self: An #IdeBuildPipeline
+ * ide_pipeline_build_finish:
+ * @self: An #IdePipeline
  * @result: a #GAsyncResult provided to callback
  * @error: A location for a #GError, or %NULL
  *
  * This function completes the asynchronous request to build
  * up to a particular phase of the build pipeline.
  *
- * Returns: %TRUE if the build stages were executed successfully
+ * Returns: %TRUE if the build stages were buildd successfully
  *   up to the requested build phase provided to
- *   ide_build_pipeline_build_async().
+ *   ide_pipeline_build_async().
  *
  * Since: 3.32
  */
 gboolean
-ide_build_pipeline_build_finish (IdeBuildPipeline  *self,
-                                 GAsyncResult      *result,
-                                 GError           **error)
+ide_pipeline_build_finish (IdePipeline   *self,
+                           GAsyncResult  *result,
+                           GError       **error)
 {
   gboolean ret;
 
   IDE_ENTRY;
 
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (self), FALSE);
+  g_return_val_if_fail (IDE_IS_PIPELINE (self), FALSE);
   g_return_val_if_fail (IDE_IS_TASK (result), FALSE);
 
   ret = ide_task_propagate_boolean (IDE_TASK (result), error);
@@ -2176,44 +2176,10 @@ ide_build_pipeline_build_finish (IdeBuildPipeline  *self,
   IDE_RETURN (ret);
 }
 
-/**
- * ide_build_pipeline_execute_async:
- * @self: A @IdeBuildPipeline
- * @cancellable: (nullable): a #GCancellable or %NULL
- * @callback: a callback to execute upon completion
- * @user_data: data for @callback
- *
- * Asynchronously starts the build pipeline.
- *
- * Any phase that has been invalidated up to the requested phase
- * will be executed until a stage has failed.
- *
- * Upon completion, @callback will be executed and should call
- * ide_build_pipeline_execute_finish() to get the status of the
- * operation.
- *
- * Since: 3.32
- */
-void
-ide_build_pipeline_execute_async (IdeBuildPipeline    *self,
-                                  GCancellable        *cancellable,
-                                  GAsyncReadyCallback  callback,
-                                  gpointer             user_data)
-{
-  IDE_ENTRY;
-
-  g_return_if_fail (IDE_IS_BUILD_PIPELINE (self));
-  g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable));
-
-  ide_build_pipeline_build_async (self, self->requested_mask, cancellable, callback, user_data);
-
-  IDE_EXIT;
-}
-
 static gboolean
-ide_build_pipeline_do_flush (gpointer data)
+ide_pipeline_do_flush (gpointer data)
 {
-  IdeBuildPipeline *self = data;
+  IdePipeline *self = data;
   g_autoptr(IdeTask) task = NULL;
   g_autoptr(GFile) builddir = NULL;
   g_autoptr(GError) error = NULL;
@@ -2221,7 +2187,7 @@ ide_build_pipeline_do_flush (gpointer data)
 
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE (self));
 
   /*
    * If the busy bit is set, there is nothing to do right now.
@@ -2269,7 +2235,7 @@ ide_build_pipeline_do_flush (gpointer data)
    */
   g_signal_connect_object (task,
                            "notify::completed",
-                           G_CALLBACK (ide_build_pipeline_task_notify_completed),
+                           G_CALLBACK (ide_pipeline_task_notify_completed),
                            self,
                            G_CONNECT_SWAPPED);
 
@@ -2288,7 +2254,7 @@ ide_build_pipeline_do_flush (gpointer data)
    */
   if (self->failed &&
       task_data->type == TASK_BUILD &&
-      task_data->phase <= IDE_BUILD_PHASE_CONFIGURE)
+      task_data->phase <= IDE_PIPELINE_PHASE_CONFIGURE)
     {
       ide_task_return_new_error (task,
                                  IDE_BUILD_ERROR,
@@ -2317,9 +2283,9 @@ ide_build_pipeline_do_flush (gpointer data)
   {
     g_autoptr(GString) str = g_string_new (NULL);
     GFlagsClass *klass;
-    IdeBuildPhase phase = self->requested_mask;
+    IdePipelinePhase phase = self->requested_mask;
 
-    klass = g_type_class_peek (IDE_TYPE_BUILD_PHASE);
+    klass = g_type_class_peek (IDE_TYPE_PIPELINE_PHASE);
 
     for (guint i = 0; i < klass->n_values; i++)
       {
@@ -2346,7 +2312,7 @@ ide_build_pipeline_do_flush (gpointer data)
                  i,
                  build_phase_nick (entry->phase),
                  G_OBJECT_TYPE_NAME (entry->stage),
-                 ide_build_stage_get_completed (entry->stage) ? "completed" : "pending");
+                 ide_pipeline_stage_get_completed (entry->stage) ? "completed" : "pending");
       }
   }
 
@@ -2356,15 +2322,15 @@ ide_build_pipeline_do_flush (gpointer data)
   switch (task_data->type)
     {
     case TASK_BUILD:
-      ide_build_pipeline_tick_execute (self, task);
+      ide_pipeline_tick_build (self, task);
       break;
 
     case TASK_CLEAN:
-      ide_build_pipeline_tick_clean (self, task);
+      ide_pipeline_tick_clean (self, task);
       break;
 
     case TASK_REBUILD:
-      ide_build_pipeline_tick_rebuild (self, task);
+      ide_pipeline_tick_rebuild (self, task);
       break;
 
     default:
@@ -2378,14 +2344,14 @@ ide_build_pipeline_do_flush (gpointer data)
 }
 
 static void
-ide_build_pipeline_queue_flush (IdeBuildPipeline *self)
+ide_pipeline_queue_flush (IdePipeline *self)
 {
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE (self));
 
   gdk_threads_add_idle_full (G_PRIORITY_LOW,
-                             ide_build_pipeline_do_flush,
+                             ide_pipeline_do_flush,
                              g_object_ref (self),
                              g_object_unref);
 
@@ -2393,75 +2359,51 @@ ide_build_pipeline_queue_flush (IdeBuildPipeline *self)
 }
 
 /**
- * ide_build_pipeline_execute_finish:
- *
- * Returns: %TRUE if successful; otherwise %FALSE and @error is set.
- *
- * Since: 3.32
- */
-gboolean
-ide_build_pipeline_execute_finish (IdeBuildPipeline  *self,
-                                   GAsyncResult      *result,
-                                   GError           **error)
-{
-  gboolean ret;
-
-  IDE_ENTRY;
-
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (self), FALSE);
-  g_return_val_if_fail (IDE_IS_TASK (result), FALSE);
-
-  ret = ide_task_propagate_boolean (IDE_TASK (result), error);
-
-  IDE_RETURN (ret);
-}
-
-/**
- * ide_build_pipeline_attach:
- * @self: an #IdeBuildPipeline
- * @phase: An #IdeBuildPhase
+ * ide_pipeline_attach:
+ * @self: an #IdePipeline
+ * @phase: An #IdePipelinePhase
  * @priority: an optional priority for sorting within the phase
- * @stage: An #IdeBuildStage
+ * @stage: An #IdePipelineStage
  *
  * Insert @stage into the pipeline as part of the phase denoted by @phase.
  *
  * If priority is non-zero, it will be used to sort the stage among other
  * stages that are part of the same phase.
  *
- * Returns: A stage_id that may be passed to ide_build_pipeline_detach().
+ * Returns: A stage_id that may be passed to ide_pipeline_detach().
  *
  * Since: 3.32
  */
 guint
-ide_build_pipeline_attach (IdeBuildPipeline *self,
-                            IdeBuildPhase     phase,
-                            gint              priority,
-                            IdeBuildStage    *stage)
+ide_pipeline_attach (IdePipeline      *self,
+                     IdePipelinePhase  phase,
+                     gint              priority,
+                     IdePipelineStage *stage)
 {
   GFlagsClass *klass, *unref_class = NULL;
   guint ret = 0;
 
   IDE_ENTRY;
 
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (self), 0);
-  g_return_val_if_fail (IDE_IS_BUILD_STAGE (stage), 0);
-  g_return_val_if_fail ((phase & IDE_BUILD_PHASE_MASK) != IDE_BUILD_PHASE_NONE, 0);
-  g_return_val_if_fail ((phase & IDE_BUILD_PHASE_WHENCE_MASK) == 0 ||
-                        (phase & IDE_BUILD_PHASE_WHENCE_MASK) == IDE_BUILD_PHASE_BEFORE ||
-                        (phase & IDE_BUILD_PHASE_WHENCE_MASK) == IDE_BUILD_PHASE_AFTER, 0);
+  g_return_val_if_fail (IDE_IS_PIPELINE (self), 0);
+  g_return_val_if_fail (IDE_IS_PIPELINE_STAGE (stage), 0);
+  g_return_val_if_fail ((phase & IDE_PIPELINE_PHASE_MASK) != IDE_PIPELINE_PHASE_NONE, 0);
+  g_return_val_if_fail ((phase & IDE_PIPELINE_PHASE_WHENCE_MASK) == 0 ||
+                        (phase & IDE_PIPELINE_PHASE_WHENCE_MASK) == IDE_PIPELINE_PHASE_BEFORE ||
+                        (phase & IDE_PIPELINE_PHASE_WHENCE_MASK) == IDE_PIPELINE_PHASE_AFTER, 0);
 
-  if (!(klass = g_type_class_peek (IDE_TYPE_BUILD_PHASE)))
-    klass = unref_class = g_type_class_ref (IDE_TYPE_BUILD_PHASE);
+  if (!(klass = g_type_class_peek (IDE_TYPE_PIPELINE_PHASE)))
+    klass = unref_class = g_type_class_ref (IDE_TYPE_PIPELINE_PHASE);
 
   for (guint i = 0; i < klass->n_values; i++)
     {
       const GFlagsValue *value = &klass->values[i];
 
-      if ((phase & IDE_BUILD_PHASE_MASK) == value->value)
+      if ((phase & IDE_PIPELINE_PHASE_MASK) == value->value)
         {
           PipelineEntry entry = { 0 };
 
-          _ide_build_stage_set_phase (stage, phase);
+          _ide_pipeline_stage_set_phase (stage, phase);
 
           IDE_TRACE_MSG ("Adding stage to pipeline with phase %s and priority %d",
                          value->value_nick, priority);
@@ -2476,8 +2418,8 @@ ide_build_pipeline_attach (IdeBuildPipeline *self,
 
           ret = entry.id;
 
-          ide_build_stage_set_log_observer (stage,
-                                            ide_build_pipeline_log_observer,
+          ide_pipeline_stage_set_log_observer (stage,
+                                            ide_pipeline_log_observer,
                                             self,
                                             NULL);
 
@@ -2514,9 +2456,9 @@ cleanup:
 }
 
 /**
- * ide_build_pipeline_attach_launcher:
- * @self: an #IdeBuildPipeline
- * @phase: An #IdeBuildPhase
+ * ide_pipeline_attach_launcher:
+ * @self: an #IdePipeline
+ * @phase: An #IdePipelinePhase
  * @priority: an optional priority for sorting within the phase
  * @launcher: An #IdeSubprocessLauncher
  *
@@ -2526,35 +2468,35 @@ cleanup:
  * It is a programmer error to modify @launcher after passing it to this
  * function.
  *
- * Returns: A stage_id that may be passed to ide_build_pipeline_remove().
+ * Returns: A stage_id that may be passed to ide_pipeline_remove().
  *
  * Since: 3.32
  */
 guint
-ide_build_pipeline_attach_launcher (IdeBuildPipeline      *self,
-                                     IdeBuildPhase          phase,
-                                     gint                   priority,
-                                     IdeSubprocessLauncher *launcher)
+ide_pipeline_attach_launcher (IdePipeline           *self,
+                              IdePipelinePhase       phase,
+                              gint                   priority,
+                              IdeSubprocessLauncher *launcher)
 {
-  g_autoptr(IdeBuildStage) stage = NULL;
+  g_autoptr(IdePipelineStage) stage = NULL;
   IdeContext *context;
 
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (self), 0);
-  g_return_val_if_fail ((phase & IDE_BUILD_PHASE_MASK) != IDE_BUILD_PHASE_NONE, 0);
-  g_return_val_if_fail ((phase & IDE_BUILD_PHASE_WHENCE_MASK) == 0 ||
-                        (phase & IDE_BUILD_PHASE_WHENCE_MASK) == IDE_BUILD_PHASE_BEFORE ||
-                        (phase & IDE_BUILD_PHASE_WHENCE_MASK) == IDE_BUILD_PHASE_AFTER, 0);
+  g_return_val_if_fail (IDE_IS_PIPELINE (self), 0);
+  g_return_val_if_fail ((phase & IDE_PIPELINE_PHASE_MASK) != IDE_PIPELINE_PHASE_NONE, 0);
+  g_return_val_if_fail ((phase & IDE_PIPELINE_PHASE_WHENCE_MASK) == 0 ||
+                        (phase & IDE_PIPELINE_PHASE_WHENCE_MASK) == IDE_PIPELINE_PHASE_BEFORE ||
+                        (phase & IDE_PIPELINE_PHASE_WHENCE_MASK) == IDE_PIPELINE_PHASE_AFTER, 0);
 
   context = ide_object_get_context (IDE_OBJECT (self));
-  stage = ide_build_stage_launcher_new (context, launcher);
+  stage = ide_pipeline_stage_launcher_new (context, launcher);
 
-  return ide_build_pipeline_attach (self, phase, priority, stage);
+  return ide_pipeline_attach (self, phase, priority, stage);
 }
 
 /**
- * ide_build_pipeline_request_phase:
- * @self: An #IdeBuildPipeline
- * @phase: An #IdeBuildPhase
+ * ide_pipeline_request_phase:
+ * @self: An #IdePipeline
+ * @phase: An #IdePipelinePhase
  *
  * Requests that the next execution of the pipeline will build up to @phase
  * including all stages that were previously invalidated.
@@ -2564,25 +2506,25 @@ ide_build_pipeline_attach_launcher (IdeBuildPipeline      *self,
  * Since: 3.32
  */
 gboolean
-ide_build_pipeline_request_phase (IdeBuildPipeline *self,
-                                  IdeBuildPhase     phase)
+ide_pipeline_request_phase (IdePipeline      *self,
+                            IdePipelinePhase  phase)
 {
   GFlagsClass *klass, *unref_class = NULL;
   gboolean ret = FALSE;
 
   IDE_ENTRY;
 
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (self), FALSE);
-  g_return_val_if_fail ((phase & IDE_BUILD_PHASE_MASK) != IDE_BUILD_PHASE_NONE, FALSE);
+  g_return_val_if_fail (IDE_IS_PIPELINE (self), FALSE);
+  g_return_val_if_fail ((phase & IDE_PIPELINE_PHASE_MASK) != IDE_PIPELINE_PHASE_NONE, FALSE);
 
   /*
    * You can only request basic phases. That does not include modifiers
    * like BEFORE, AFTER, FAILED, FINISHED.
    */
-  phase &= IDE_BUILD_PHASE_MASK;
+  phase &= IDE_PIPELINE_PHASE_MASK;
 
-  if (!(klass = g_type_class_peek (IDE_TYPE_BUILD_PHASE)))
-    klass = unref_class = g_type_class_ref (IDE_TYPE_BUILD_PHASE);
+  if (!(klass = g_type_class_peek (IDE_TYPE_PIPELINE_PHASE)))
+    klass = unref_class = g_type_class_ref (IDE_TYPE_PIPELINE_PHASE);
 
   for (guint i = 0; i < klass->n_values; i++)
     {
@@ -2606,9 +2548,9 @@ cleanup:
 
   /*
    * If we have a stage in one of the requested phases, then we can let the
-   * caller know that they need to run execute_async() to be up to date. This
+   * caller know that they need to run build_async() to be up to date. This
    * is useful for situations where you might want to avoid calling
-   * execute_async() altogether. Additionally, we want to know if there are
+   * build_async() altogether. Additionally, we want to know if there are
    * any connections to the "query" which could cause the completed state
    * to be invalidated.
    */
@@ -2619,8 +2561,8 @@ cleanup:
       if (!(entry->phase & self->requested_mask))
         continue;
 
-      if (!ide_build_stage_get_completed (entry->stage) ||
-          _ide_build_stage_has_query (entry->stage))
+      if (!ide_pipeline_stage_get_completed (entry->stage) ||
+          _ide_pipeline_stage_has_query (entry->stage))
         {
           ret = TRUE;
           break;
@@ -2634,8 +2576,8 @@ cleanup:
 }
 
 /**
- * ide_build_pipeline_get_builddir:
- * @self: An #IdeBuildPipeline
+ * ide_pipeline_get_builddir:
+ * @self: An #IdePipeline
  *
  * Gets the "builddir" to be used for the build process. This is generally
  * the location that build systems will use for out-of-tree builds.
@@ -2645,16 +2587,16 @@ cleanup:
  * Since: 3.32
  */
 const gchar *
-ide_build_pipeline_get_builddir (IdeBuildPipeline *self)
+ide_pipeline_get_builddir (IdePipeline *self)
 {
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (self), NULL);
+  g_return_val_if_fail (IDE_IS_PIPELINE (self), NULL);
 
   return self->builddir;
 }
 
 /**
- * ide_build_pipeline_get_srcdir:
- * @self: An #IdeBuildPipeline
+ * ide_pipeline_get_srcdir:
+ * @self: An #IdePipeline
  *
  * Gets the "srcdir" of the project. This is equivalent to the
  * IdeVcs:working-directory property as a string.
@@ -2664,17 +2606,17 @@ ide_build_pipeline_get_builddir (IdeBuildPipeline *self)
  * Since: 3.32
  */
 const gchar *
-ide_build_pipeline_get_srcdir (IdeBuildPipeline *self)
+ide_pipeline_get_srcdir (IdePipeline *self)
 {
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (self), NULL);
+  g_return_val_if_fail (IDE_IS_PIPELINE (self), NULL);
 
   return self->srcdir;
 }
 
 static gchar *
-ide_build_pipeline_build_path_va_list (const gchar *prefix,
-                                       const gchar *first_part,
-                                       va_list      args)
+ide_pipeline_build_path_va_list (const gchar *prefix,
+                                 const gchar *first_part,
+                                 va_list      args)
 {
   g_autoptr(GPtrArray) ar = NULL;
 
@@ -2692,7 +2634,7 @@ ide_build_pipeline_build_path_va_list (const gchar *prefix,
 }
 
 /**
- * ide_build_pipeline_build_srcdir_path:
+ * ide_pipeline_build_srcdir_path:
  *
  * This is a convenience function to create a new path that starts with
  * the source directory of the project.
@@ -2705,64 +2647,64 @@ ide_build_pipeline_build_path_va_list (const gchar *prefix,
  * Since: 3.32
  */
 gchar *
-ide_build_pipeline_build_srcdir_path (IdeBuildPipeline *self,
-                                      const gchar      *first_part,
-                                      ...)
+ide_pipeline_build_srcdir_path (IdePipeline *self,
+                                const gchar *first_part,
+                                ...)
 {
   gchar *ret;
   va_list args;
 
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (self), NULL);
+  g_return_val_if_fail (IDE_IS_PIPELINE (self), NULL);
   g_return_val_if_fail (self->srcdir != NULL, NULL);
   g_return_val_if_fail (first_part != NULL, NULL);
 
   va_start (args, first_part);
-  ret = ide_build_pipeline_build_path_va_list (self->srcdir, first_part, args);
+  ret = ide_pipeline_build_path_va_list (self->srcdir, first_part, args);
   va_end (args);
 
   return ret;
 }
 
 /**
- * ide_build_pipeline_build_builddir_path:
+ * ide_pipeline_build_builddir_path:
  *
  * This is a convenience function to create a new path that starts with
  * the build directory for this build configuration.
  *
  * This is functionally equivalent to calling g_build_filename() with the
- * result of ide_build_pipeline_get_builddir() as the first parameter.
+ * result of ide_pipeline_get_builddir() as the first parameter.
  *
  * Returns: (transfer full): A newly allocated string.
  *
  * Since: 3.32
  */
 gchar *
-ide_build_pipeline_build_builddir_path (IdeBuildPipeline *self,
-                                        const gchar      *first_part,
-                                        ...)
+ide_pipeline_build_builddir_path (IdePipeline *self,
+                                  const gchar *first_part,
+                                  ...)
 {
   gchar *ret;
   va_list args;
 
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (self), NULL);
+  g_return_val_if_fail (IDE_IS_PIPELINE (self), NULL);
   g_return_val_if_fail (self->builddir != NULL, NULL);
   g_return_val_if_fail (first_part != NULL, NULL);
 
   va_start (args, first_part);
-  ret = ide_build_pipeline_build_path_va_list (self->builddir, first_part, args);
+  ret = ide_pipeline_build_path_va_list (self->builddir, first_part, args);
   va_end (args);
 
   return ret;
 }
 
 /**
- * ide_build_pipeline_detach:
- * @self: An #IdeBuildPipeline
+ * ide_pipeline_detach:
+ * @self: An #IdePipeline
  * @stage_id: An identifier returned from adding a stage
  *
  * This removes the stage matching @stage_id. You are returned a @stage_id when
- * inserting a stage with functions such as ide_build_pipeline_attach()
- * or ide_build_pipeline_attach_launcher().
+ * inserting a stage with functions such as ide_pipeline_attach()
+ * or ide_pipeline_attach_launcher().
  *
  * Plugins should use this function to remove their stages when the plugin
  * is unloading.
@@ -2770,10 +2712,10 @@ ide_build_pipeline_build_builddir_path (IdeBuildPipeline *self,
  * Since: 3.32
  */
 void
-ide_build_pipeline_detach (IdeBuildPipeline *self,
-                               guint             stage_id)
+ide_pipeline_detach (IdePipeline *self,
+                     guint        stage_id)
 {
-  g_return_if_fail (IDE_IS_BUILD_PIPELINE (self));
+  g_return_if_fail (IDE_IS_PIPELINE (self));
   g_return_if_fail (self->pipeline != NULL);
   g_return_if_fail (stage_id != 0);
 
@@ -2792,55 +2734,55 @@ ide_build_pipeline_detach (IdeBuildPipeline *self,
 }
 
 /**
- * ide_build_pipeline_invalidate_phase:
- * @self: An #IdeBuildPipeline
+ * ide_pipeline_invalidate_phase:
+ * @self: An #IdePipeline
  * @phases: The phases to invalidate
  *
  * Invalidates the phases matching @phases flags.
  *
  * If the requested phases include the phases invalidated here, the next
- * execution of the pipeline will execute thse phases.
+ * execution of the pipeline will build thse phases.
  *
- * This should be used by plugins to ensure a particular phase is re-executed
+ * This should be used by plugins to ensure a particular phase is re-buildd
  * upon discovering its state is no longer valid. Such an example might be
- * invalidating the %IDE_BUILD_PHASE_AUTOGEN phase when the an autotools
+ * invalidating the %IDE_PIPELINE_PHASE_AUTOGEN phase when the an autotools
  * projects autogen.sh file has been changed.
  *
  * Since: 3.32
  */
 void
-ide_build_pipeline_invalidate_phase (IdeBuildPipeline *self,
-                                     IdeBuildPhase     phases)
+ide_pipeline_invalidate_phase (IdePipeline *self,
+                                     IdePipelinePhase     phases)
 {
-  g_return_if_fail (IDE_IS_BUILD_PIPELINE (self));
+  g_return_if_fail (IDE_IS_PIPELINE (self));
 
   for (guint i = 0; i < self->pipeline->len; i++)
     {
       const PipelineEntry *entry = &g_array_index (self->pipeline, PipelineEntry, i);
 
-      if ((entry->phase & IDE_BUILD_PHASE_MASK) & phases)
-        ide_build_stage_set_completed (entry->stage, FALSE);
+      if ((entry->phase & IDE_PIPELINE_PHASE_MASK) & phases)
+        ide_pipeline_stage_set_completed (entry->stage, FALSE);
     }
 }
 
 /**
- * ide_build_pipeline_get_stage_by_id:
- * @self: An #IdeBuildPipeline
+ * ide_pipeline_get_stage_by_id:
+ * @self: An #IdePipeline
  * @stage_id: the identfier of the stage
  *
  * Gets the stage matching the identifier @stage_id as returned from
- * ide_build_pipeline_attach().
+ * ide_pipeline_attach().
  *
- * Returns: (transfer none) (nullable): An #IdeBuildStage or %NULL if the
+ * Returns: (transfer none) (nullable): An #IdePipelineStage or %NULL if the
  *   stage could not be found.
  *
  * Since: 3.32
  */
-IdeBuildStage *
-ide_build_pipeline_get_stage_by_id (IdeBuildPipeline *self,
-                                    guint             stage_id)
+IdePipelineStage *
+ide_pipeline_get_stage_by_id (IdePipeline *self,
+                              guint        stage_id)
 {
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (self), NULL);
+  g_return_val_if_fail (IDE_IS_PIPELINE (self), NULL);
 
   for (guint i = 0; i < self->pipeline->len; i++)
     {
@@ -2854,8 +2796,8 @@ ide_build_pipeline_get_stage_by_id (IdeBuildPipeline *self,
 }
 
 /**
- * ide_build_pipeline_get_runtime:
- * @self: An #IdeBuildPipeline
+ * ide_pipeline_get_runtime:
+ * @self: An #IdePipeline
  *
  * A convenience function to get the runtime for a build pipeline.
  *
@@ -2864,16 +2806,16 @@ ide_build_pipeline_get_stage_by_id (IdeBuildPipeline *self,
  * Since: 3.32
  */
 IdeRuntime *
-ide_build_pipeline_get_runtime (IdeBuildPipeline *self)
+ide_pipeline_get_runtime (IdePipeline *self)
 {
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (self), NULL);
+  g_return_val_if_fail (IDE_IS_PIPELINE (self), NULL);
 
   return self->runtime;
 }
 
 /**
- * ide_build_pipeline_get_toolchain:
- * @self: An #IdeBuildPipeline
+ * ide_pipeline_get_toolchain:
+ * @self: An #IdePipeline
  *
  * A convenience function to get the toolchain for a build pipeline.
  *
@@ -2882,16 +2824,16 @@ ide_build_pipeline_get_runtime (IdeBuildPipeline *self)
  * Since: 3.32
  */
 IdeToolchain *
-ide_build_pipeline_get_toolchain (IdeBuildPipeline *self)
+ide_pipeline_get_toolchain (IdePipeline *self)
 {
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (self), NULL);
+  g_return_val_if_fail (IDE_IS_PIPELINE (self), NULL);
 
   return self->toolchain;
 }
 
 /**
- * ide_build_pipeline_create_launcher:
- * @self: An #IdeBuildPipeline
+ * ide_pipeline_create_launcher:
+ * @self: An #IdePipeline
  *
  * This is a convenience function to create a new #IdeSubprocessLauncher
  * using the configuration and runtime associated with the pipeline.
@@ -2901,13 +2843,13 @@ ide_build_pipeline_get_toolchain (IdeBuildPipeline *self)
  * Since: 3.32
  */
 IdeSubprocessLauncher *
-ide_build_pipeline_create_launcher (IdeBuildPipeline  *self,
+ide_pipeline_create_launcher (IdePipeline  *self,
                                     GError           **error)
 {
   g_autoptr(IdeSubprocessLauncher) ret = NULL;
   IdeRuntime *runtime;
 
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (self), NULL);
+  g_return_val_if_fail (IDE_IS_PIPELINE (self), NULL);
 
   runtime = ide_config_get_runtime (self->config);
 
@@ -2931,7 +2873,7 @@ ide_build_pipeline_create_launcher (IdeBuildPipeline  *self,
       ide_subprocess_launcher_overlay_environment (ret, env);
       /* Always ignore V=1 from configurations */
       ide_subprocess_launcher_setenv (ret, "V", "0", TRUE);
-      ide_subprocess_launcher_set_cwd (ret, ide_build_pipeline_get_builddir (self));
+      ide_subprocess_launcher_set_cwd (ret, ide_pipeline_get_builddir (self));
       ide_subprocess_launcher_set_flags (ret,
                                          (G_SUBPROCESS_FLAGS_STDERR_PIPE |
                                           G_SUBPROCESS_FLAGS_STDOUT_PIPE));
@@ -2942,8 +2884,8 @@ ide_build_pipeline_create_launcher (IdeBuildPipeline  *self,
 }
 
 /**
- * ide_build_pipeline_attach_pty:
- * @self: an #IdeBuildPipeline
+ * ide_pipeline_attach_pty:
+ * @self: an #IdePipeline
  * @launcher: an #IdeSubprocessLauncher
  *
  * Attaches a PTY to stdin/stdout/stderr of the #IdeSubprocessLauncher.
@@ -2953,12 +2895,12 @@ ide_build_pipeline_create_launcher (IdeBuildPipeline  *self,
  * Since: 3.32
  */
 void
-ide_build_pipeline_attach_pty (IdeBuildPipeline      *self,
+ide_pipeline_attach_pty (IdePipeline      *self,
                                IdeSubprocessLauncher *launcher)
 {
   GSubprocessFlags flags;
 
-  g_return_if_fail (IDE_IS_BUILD_PIPELINE (self));
+  g_return_if_fail (IDE_IS_PIPELINE (self));
   g_return_if_fail (IDE_IS_SUBPROCESS_LAUNCHER (launcher));
 
   if (self->pty_slave == -1)
@@ -2990,8 +2932,8 @@ ide_build_pipeline_attach_pty (IdeBuildPipeline      *self,
 }
 
 /**
- * ide_build_pipeline_get_pty:
- * @self: a #IdeBuildPipeline
+ * ide_pipeline_get_pty:
+ * @self: a #IdePipeline
  *
  * Gets the #VtePty for the pipeline, if set.
  *
@@ -3003,20 +2945,20 @@ ide_build_pipeline_attach_pty (IdeBuildPipeline      *self,
  * Since: 3.32
  */
 VtePty *
-ide_build_pipeline_get_pty (IdeBuildPipeline *self)
+ide_pipeline_get_pty (IdePipeline *self)
 {
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (self), NULL);
+  g_return_val_if_fail (IDE_IS_PIPELINE (self), NULL);
 
   return self->pty;
 }
 
 guint
-ide_build_pipeline_add_log_observer (IdeBuildPipeline    *self,
-                                     IdeBuildLogObserver  observer,
-                                     gpointer             observer_data,
-                                     GDestroyNotify       observer_data_destroy)
+ide_pipeline_add_log_observer (IdePipeline         *self,
+                               IdeBuildLogObserver  observer,
+                               gpointer             observer_data,
+                               GDestroyNotify       observer_data_destroy)
 {
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (self), 0);
+  g_return_val_if_fail (IDE_IS_PIPELINE (self), 0);
   g_return_val_if_fail (observer != NULL, 0);
 
   return ide_build_log_add_observer (self->log, observer, observer_data, observer_data_destroy);
@@ -3024,20 +2966,20 @@ ide_build_pipeline_add_log_observer (IdeBuildPipeline    *self,
 }
 
 gboolean
-ide_build_pipeline_remove_log_observer (IdeBuildPipeline *self,
-                                        guint             observer_id)
+ide_pipeline_remove_log_observer (IdePipeline *self,
+                                  guint        observer_id)
 {
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (self), FALSE);
+  g_return_val_if_fail (IDE_IS_PIPELINE (self), FALSE);
   g_return_val_if_fail (observer_id > 0, FALSE);
 
   return ide_build_log_remove_observer (self->log, observer_id);
 }
 
 void
-ide_build_pipeline_emit_diagnostic (IdeBuildPipeline *self,
-                                    IdeDiagnostic    *diagnostic)
+ide_pipeline_emit_diagnostic (IdePipeline   *self,
+                              IdeDiagnostic *diagnostic)
 {
-  g_return_if_fail (IDE_IS_BUILD_PIPELINE (self));
+  g_return_if_fail (IDE_IS_PIPELINE (self));
   g_return_if_fail (diagnostic != NULL);
   g_return_if_fail (IDE_IS_MAIN_THREAD ());
 
@@ -3045,8 +2987,8 @@ ide_build_pipeline_emit_diagnostic (IdeBuildPipeline *self,
 }
 
 /**
- * ide_build_pipeline_add_error_format:
- * @self: an #IdeBuildPipeline
+ * ide_pipeline_add_error_format:
+ * @self: an #IdePipeline
  * @regex: A regex to be compiled
  *
  * This can be used to add a regex that will extract errors from
@@ -3073,25 +3015,25 @@ ide_build_pipeline_emit_diagnostic (IdeBuildPipeline *self,
  *   "(?&lt;level&gt;[\\w\\s]+): "
  *   "(?&lt;message&gt;.*)"
  *
- * To remove the regex, use the ide_build_pipeline_remove_error_format()
+ * To remove the regex, use the ide_pipeline_remove_error_format()
  * function with the resulting format id returned from this function.
  *
  * The resulting format id will be &gt; 0 if successful.
  *
  * Returns: an error format id that may be passed to
- *   ide_build_pipeline_remove_error_format().
+ *   ide_pipeline_remove_error_format().
  *
  * Since: 3.32
  */
 guint
-ide_build_pipeline_add_error_format (IdeBuildPipeline   *self,
-                                     const gchar        *regex,
-                                     GRegexCompileFlags  flags)
+ide_pipeline_add_error_format (IdePipeline        *self,
+                               const gchar        *regex,
+                               GRegexCompileFlags  flags)
 {
   ErrorFormat errfmt = { 0 };
   g_autoptr(GError) error = NULL;
 
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (self), 0);
+  g_return_val_if_fail (IDE_IS_PIPELINE (self), 0);
 
   errfmt.regex = g_regex_new (regex, G_REGEX_OPTIMIZE | flags, 0, &error);
 
@@ -3109,22 +3051,22 @@ ide_build_pipeline_add_error_format (IdeBuildPipeline   *self,
 }
 
 /**
- * ide_build_pipeline_remove_error_format:
- * @self: An #IdeBuildPipeline
+ * ide_pipeline_remove_error_format:
+ * @self: An #IdePipeline
  * @error_format_id: an identifier for the error format.
  *
  * Removes an error format that was registered with
- * ide_build_pipeline_add_error_format().
+ * ide_pipeline_add_error_format().
  *
  * Returns: %TRUE if the error format was removed.
  *
  * Since: 3.32
  */
 gboolean
-ide_build_pipeline_remove_error_format (IdeBuildPipeline *self,
-                                        guint             error_format_id)
+ide_pipeline_remove_error_format (IdePipeline *self,
+                                  guint        error_format_id)
 {
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (self), FALSE);
+  g_return_val_if_fail (IDE_IS_PIPELINE (self), FALSE);
   g_return_val_if_fail (error_format_id > 0, FALSE);
 
   for (guint i = 0; i < self->errfmts->len; i++)
@@ -3142,16 +3084,16 @@ ide_build_pipeline_remove_error_format (IdeBuildPipeline *self,
 }
 
 gboolean
-ide_build_pipeline_get_busy (IdeBuildPipeline *self)
+ide_pipeline_get_busy (IdePipeline *self)
 {
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (self), FALSE);
+  g_return_val_if_fail (IDE_IS_PIPELINE (self), FALSE);
 
   return self->busy;
 }
 
 /**
- * ide_build_pipeline_get_message:
- * @self: An #IdeBuildPipeline
+ * ide_pipeline_get_message:
+ * @self: An #IdePipeline
  *
  * Gets the current message for the build pipeline. This can be
  * shown to users in UI elements to signify progress in the
@@ -3163,12 +3105,12 @@ ide_build_pipeline_get_busy (IdeBuildPipeline *self)
  * Since: 3.32
  */
 gchar *
-ide_build_pipeline_get_message (IdeBuildPipeline *self)
+ide_pipeline_get_message (IdePipeline *self)
 {
-  IdeBuildPhase phase;
+  IdePipelinePhase phase;
   const gchar *ret = NULL;
 
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (self), NULL);
+  g_return_val_if_fail (IDE_IS_PIPELINE (self), NULL);
 
   /* Use any message the Pty has given us while building. */
   if (self->busy && self->message != NULL)
@@ -3185,70 +3127,70 @@ ide_build_pipeline_get_message (IdeBuildPipeline *self)
 
   if (self->current_stage != NULL)
     {
-      const gchar *name = ide_build_stage_get_name (self->current_stage);
+      const gchar *name = ide_pipeline_stage_get_name (self->current_stage);
 
       if (!ide_str_empty0 (name))
         return g_strdup (name);
     }
 
-  phase = ide_build_pipeline_get_phase (self);
+  phase = ide_pipeline_get_phase (self);
 
   switch (phase)
     {
-    case IDE_BUILD_PHASE_DOWNLOADS:
+    case IDE_PIPELINE_PHASE_DOWNLOADS:
       ret = _("Downloading…");
       break;
 
-    case IDE_BUILD_PHASE_DEPENDENCIES:
+    case IDE_PIPELINE_PHASE_DEPENDENCIES:
       ret = _("Building dependencies…");
       break;
 
-    case IDE_BUILD_PHASE_AUTOGEN:
+    case IDE_PIPELINE_PHASE_AUTOGEN:
       ret = _("Bootstrapping…");
       break;
 
-    case IDE_BUILD_PHASE_CONFIGURE:
+    case IDE_PIPELINE_PHASE_CONFIGURE:
       ret = _("Configuring…");
       break;
 
-    case IDE_BUILD_PHASE_BUILD:
+    case IDE_PIPELINE_PHASE_BUILD:
       ret = _("Building…");
       break;
 
-    case IDE_BUILD_PHASE_INSTALL:
+    case IDE_PIPELINE_PHASE_INSTALL:
       ret = _("Installing…");
       break;
 
-    case IDE_BUILD_PHASE_COMMIT:
+    case IDE_PIPELINE_PHASE_COMMIT:
       ret = _("Committing…");
       break;
 
-    case IDE_BUILD_PHASE_EXPORT:
+    case IDE_PIPELINE_PHASE_EXPORT:
       ret = _("Exporting…");
       break;
 
-    case IDE_BUILD_PHASE_FINAL:
+    case IDE_PIPELINE_PHASE_FINAL:
       ret = _("Success");
       break;
 
-    case IDE_BUILD_PHASE_FINISHED:
+    case IDE_PIPELINE_PHASE_FINISHED:
       ret = _("Success");
       break;
 
-    case IDE_BUILD_PHASE_FAILED:
+    case IDE_PIPELINE_PHASE_FAILED:
       ret = _("Failed");
       break;
 
-    case IDE_BUILD_PHASE_PREPARE:
+    case IDE_PIPELINE_PHASE_PREPARE:
       ret = _("Preparing…");
       break;
 
-    case IDE_BUILD_PHASE_NONE:
+    case IDE_PIPELINE_PHASE_NONE:
       ret = _("Ready");
       break;
 
-    case IDE_BUILD_PHASE_AFTER:
-    case IDE_BUILD_PHASE_BEFORE:
+    case IDE_PIPELINE_PHASE_AFTER:
+    case IDE_PIPELINE_PHASE_BEFORE:
     default:
       g_assert_not_reached ();
     }
@@ -3257,22 +3199,22 @@ ide_build_pipeline_get_message (IdeBuildPipeline *self)
 }
 
 /**
- * ide_build_pipeline_foreach_stage:
- * @self: An #IdeBuildPipeline
+ * ide_pipeline_foreach_stage:
+ * @self: An #IdePipeline
  * @stage_callback: (scope call): A callback for each #IdePipelineStage
  * @user_data: user data for @stage_callback
  *
- * This function will call @stage_callback for every #IdeBuildStage registered
+ * This function will call @stage_callback for every #IdePipelineStage registered
  * in the pipeline.
  *
  * Since: 3.32
  */
 void
-ide_build_pipeline_foreach_stage (IdeBuildPipeline *self,
-                                  GFunc             stage_callback,
-                                  gpointer          user_data)
+ide_pipeline_foreach_stage (IdePipeline *self,
+                            GFunc        stage_callback,
+                            gpointer     user_data)
 {
-  g_return_if_fail (IDE_IS_BUILD_PIPELINE (self));
+  g_return_if_fail (IDE_IS_PIPELINE (self));
   g_return_if_fail (stage_callback != NULL);
 
   for (guint i = 0; i < self->pipeline->len; i++)
@@ -3284,26 +3226,26 @@ ide_build_pipeline_foreach_stage (IdeBuildPipeline *self,
 }
 
 static void
-ide_build_pipeline_clean_cb (GObject      *object,
-                             GAsyncResult *result,
-                             gpointer      user_data)
+ide_pipeline_clean_cb (GObject      *object,
+                       GAsyncResult *result,
+                       gpointer      user_data)
 {
-  IdeBuildStage *stage = (IdeBuildStage *)object;
+  IdePipelineStage *stage = (IdePipelineStage *)object;
   g_autoptr(IdeTask) task = user_data;
   g_autoptr(GError) error = NULL;
-  IdeBuildPipeline *self;
+  IdePipeline *self;
   GPtrArray *stages;
   TaskData *td;
 
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_STAGE (stage));
+  g_assert (IDE_IS_PIPELINE_STAGE (stage));
   g_assert (IDE_IS_TASK (task));
 
   self = ide_task_get_source_object (task);
   td = ide_task_get_task_data (task);
 
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE (self));
   g_assert (td != NULL);
   g_assert (td->type == TASK_CLEAN);
   g_assert (td->task == task);
@@ -3315,7 +3257,7 @@ ide_build_pipeline_clean_cb (GObject      *object,
   g_assert (stages->len > 0);
   g_assert (g_ptr_array_index (stages, stages->len - 1) == stage);
 
-  if (!ide_build_stage_clean_finish (stage, result, &error))
+  if (!ide_pipeline_stage_clean_finish (stage, result, &error))
     {
       ide_task_return_error (task, g_steal_pointer (&error));
       IDE_EXIT;
@@ -3323,14 +3265,14 @@ ide_build_pipeline_clean_cb (GObject      *object,
 
   g_ptr_array_remove_index (stages, stages->len - 1);
 
-  ide_build_pipeline_tick_clean (self, task);
+  ide_pipeline_tick_clean (self, task);
 
   IDE_EXIT;
 }
 
 static void
-ide_build_pipeline_tick_clean (IdeBuildPipeline *self,
-                               IdeTask          *task)
+ide_pipeline_tick_clean (IdePipeline *self,
+                         IdeTask     *task)
 {
   GCancellable *cancellable;
   GPtrArray *stages;
@@ -3338,7 +3280,7 @@ ide_build_pipeline_tick_clean (IdeBuildPipeline *self,
 
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE (self));
   g_assert (IDE_IS_TASK (task));
 
   td = ide_task_get_task_data (task);
@@ -3354,14 +3296,14 @@ ide_build_pipeline_tick_clean (IdeBuildPipeline *self,
 
   if (stages->len != 0)
     {
-      IdeBuildStage *stage = g_ptr_array_index (stages, stages->len - 1);
+      IdePipelineStage *stage = g_ptr_array_index (stages, stages->len - 1);
 
       self->current_stage = stage;
 
-      ide_build_stage_clean_async (stage,
+      ide_pipeline_stage_clean_async (stage,
                                    self,
                                    cancellable,
-                                   ide_build_pipeline_clean_cb,
+                                   ide_pipeline_clean_cb,
                                    g_object_ref (task));
 
       IDE_GOTO (notify);
@@ -3377,23 +3319,23 @@ notify:
 }
 
 void
-ide_build_pipeline_clean_async (IdeBuildPipeline    *self,
-                                IdeBuildPhase        phase,
-                                GCancellable        *cancellable,
-                                GAsyncReadyCallback  callback,
-                                gpointer             user_data)
+ide_pipeline_clean_async (IdePipeline         *self,
+                          IdePipelinePhase     phase,
+                          GCancellable        *cancellable,
+                          GAsyncReadyCallback  callback,
+                          gpointer             user_data)
 {
   g_autoptr(IdeTask) task = NULL;
   g_autoptr(GCancellable) local_cancellable = NULL;
   g_autoptr(GPtrArray) stages = NULL;
-  IdeBuildPhase min_phase = IDE_BUILD_PHASE_FINAL;
-  IdeBuildPhase phase_mask;
+  IdePipelinePhase min_phase = IDE_PIPELINE_PHASE_FINAL;
+  IdePipelinePhase phase_mask;
   GFlagsClass *phase_class;
   TaskData *td;
 
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE (self));
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
 
   if (cancellable == NULL)
@@ -3401,9 +3343,9 @@ ide_build_pipeline_clean_async (IdeBuildPipeline    *self,
 
   task = ide_task_new (self, cancellable, callback, user_data);
   ide_task_set_priority (task, G_PRIORITY_LOW);
-  ide_task_set_source_tag (task, ide_build_pipeline_clean_async);
+  ide_task_set_source_tag (task, ide_pipeline_clean_async);
 
-  if (!ide_build_pipeline_check_ready (self, task))
+  if (!ide_pipeline_check_ready (self, task))
     return;
 
   dzl_cancellable_chain (cancellable, self->cancellable);
@@ -3415,7 +3357,7 @@ ide_build_pipeline_clean_async (IdeBuildPipeline    *self,
   /*
    * To clean the project, we go through each stage and call it's clean async
    * vfunc pairs if they have been set. Afterwards, we ensure their
-   * IdeBuildStage:completed bit is cleared so they will run as part of the
+   * IdePipelineStage:completed bit is cleared so they will run as part of the
    * next build operation.
    *
    * Also, when performing a clean we walk backwards from the last stage to the
@@ -3433,7 +3375,7 @@ ide_build_pipeline_clean_async (IdeBuildPipeline    *self,
    * mask (so only our min and higher stages are cleaned).
    */
 
-  phase_class = g_type_class_peek (IDE_TYPE_BUILD_PHASE);
+  phase_class = g_type_class_peek (IDE_TYPE_PIPELINE_PHASE);
 
   for (guint i = 0; i < phase_class->n_values; i++)
     {
@@ -3454,7 +3396,7 @@ ide_build_pipeline_clean_async (IdeBuildPipeline    *self,
     {
       const PipelineEntry *entry = &g_array_index (self->pipeline, PipelineEntry, i);
 
-      if ((entry->phase & IDE_BUILD_PHASE_MASK) & phase_mask)
+      if ((entry->phase & IDE_PIPELINE_PHASE_MASK) & phase_mask)
         g_ptr_array_add (stages, g_object_ref (entry->stage));
     }
 
@@ -3471,21 +3413,21 @@ ide_build_pipeline_clean_async (IdeBuildPipeline    *self,
 
   g_queue_push_tail (&self->task_queue, g_steal_pointer (&task));
 
-  ide_build_pipeline_queue_flush (self);
+  ide_pipeline_queue_flush (self);
 
   IDE_EXIT;
 }
 
 gboolean
-ide_build_pipeline_clean_finish (IdeBuildPipeline  *self,
-                                 GAsyncResult      *result,
-                                 GError           **error)
+ide_pipeline_clean_finish (IdePipeline   *self,
+                           GAsyncResult  *result,
+                           GError       **error)
 {
   gboolean ret;
 
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE (self));
   g_assert (IDE_IS_TASK (result));
 
   ret = ide_task_propagate_boolean (IDE_TASK (result), error);
@@ -3494,14 +3436,14 @@ ide_build_pipeline_clean_finish (IdeBuildPipeline  *self,
 }
 
 static gboolean
-can_remove_builddir (IdeBuildPipeline *self)
+can_remove_builddir (IdePipeline *self)
 {
   g_autofree gchar *_build = NULL;
   g_autoptr(GFile) builddir = NULL;
   g_autoptr(GFile) cache = NULL;
   IdeContext *context;
 
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE (self));
 
   /*
    * Only remove builddir if it is in ~/.cache/ or our XDG data dirs
@@ -3533,12 +3475,12 @@ can_remove_builddir (IdeBuildPipeline *self)
 }
 
 static void
-ide_build_pipeline_reaper_cb (GObject      *object,
-                              GAsyncResult *result,
-                              gpointer      user_data)
+ide_pipeline_reaper_cb (GObject      *object,
+                        GAsyncResult *result,
+                        gpointer      user_data)
 {
   DzlDirectoryReaper *reaper = (DzlDirectoryReaper *)object;
-  IdeBuildPipeline *self;
+  IdePipeline *self;
   g_autoptr(IdeTask) task = user_data;
   g_autoptr(GError) error = NULL;
   TaskData *td;
@@ -3556,7 +3498,7 @@ ide_build_pipeline_reaper_cb (GObject      *object,
   g_assert (td->type == TASK_REBUILD);
 
   self = ide_task_get_source_object (task);
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE (self));
 
   /* Make sure our reaper completed or else we bail */
   if (!dzl_directory_reaper_execute_finish (reaper, result, &error))
@@ -3565,20 +3507,20 @@ ide_build_pipeline_reaper_cb (GObject      *object,
       IDE_EXIT;
     }
 
-  if (td->phase == IDE_BUILD_PHASE_NONE)
+  if (td->phase == IDE_PIPELINE_PHASE_NONE)
     {
       ide_task_return_boolean (task, TRUE);
       IDE_EXIT;
     }
 
   /* Perform a build using the same task and skipping the build queue. */
-  ide_build_pipeline_tick_execute (self, task);
+  ide_pipeline_tick_build (self, task);
 
   IDE_EXIT;
 }
 
 static void
-ide_build_pipeline_tick_rebuild (IdeBuildPipeline *self,
+ide_pipeline_tick_rebuild (IdePipeline *self,
                                  IdeTask          *task)
 {
   g_autoptr(DzlDirectoryReaper) reaper = NULL;
@@ -3586,7 +3528,7 @@ ide_build_pipeline_tick_rebuild (IdeBuildPipeline *self,
 
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE (self));
   g_assert (IDE_IS_TASK (task));
 
 #ifndef G_DISABLE_ASSERT
@@ -3620,30 +3562,30 @@ ide_build_pipeline_tick_rebuild (IdeBuildPipeline *self,
     {
       const PipelineEntry *entry = &g_array_index (self->pipeline, PipelineEntry, i);
 
-      ide_build_stage_emit_reap (entry->stage, reaper);
-      ide_build_stage_set_completed (entry->stage, FALSE);
+      ide_pipeline_stage_emit_reap (entry->stage, reaper);
+      ide_pipeline_stage_set_completed (entry->stage, FALSE);
     }
 
   cancellable = ide_task_get_cancellable (task);
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
 
-  /* Now execute the reaper to clean up the build files. */
+  /* Now build the reaper to clean up the build files. */
   dzl_directory_reaper_execute_async (reaper,
                                       cancellable,
-                                      ide_build_pipeline_reaper_cb,
+                                      ide_pipeline_reaper_cb,
                                       g_object_ref (task));
 
   IDE_EXIT;
 }
 
 /**
- * ide_build_pipeline_rebuild_async:
- * @self: A @IdeBuildPipeline
+ * ide_pipeline_rebuild_async:
+ * @self: A @IdePipeline
  * @phase: the requested build phase
  * @targets: (element-type IdeBuildTarget) (nullable): an array of
  *   #IdeBuildTarget or %NULL
  * @cancellable: (nullable): a #GCancellable or %NULL
- * @callback: a callback to execute upon completion
+ * @callback: a callback to build upon completion
  * @user_data: data for @callback
  *
  * Asynchronously starts the build pipeline after cleaning any
@@ -3652,8 +3594,8 @@ ide_build_pipeline_tick_rebuild (IdeBuildPipeline *self,
  * Since: 3.32
  */
 void
-ide_build_pipeline_rebuild_async (IdeBuildPipeline    *self,
-                                  IdeBuildPhase        phase,
+ide_pipeline_rebuild_async (IdePipeline    *self,
+                                  IdePipelinePhase        phase,
                                   GPtrArray           *targets,
                                   GCancellable        *cancellable,
                                   GAsyncReadyCallback  callback,
@@ -3664,17 +3606,17 @@ ide_build_pipeline_rebuild_async (IdeBuildPipeline    *self,
 
   IDE_ENTRY;
 
-  g_return_if_fail (IDE_IS_BUILD_PIPELINE (self));
+  g_return_if_fail (IDE_IS_PIPELINE (self));
   g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable));
-  g_return_if_fail ((phase & ~IDE_BUILD_PHASE_MASK) == 0);
+  g_return_if_fail ((phase & ~IDE_PIPELINE_PHASE_MASK) == 0);
 
   cancellable = dzl_cancellable_chain (cancellable, self->cancellable);
 
   task = ide_task_new (self, cancellable, callback, user_data);
   ide_task_set_priority (task, G_PRIORITY_LOW);
-  ide_task_set_source_tag (task, ide_build_pipeline_rebuild_async);
+  ide_task_set_source_tag (task, ide_pipeline_rebuild_async);
 
-  if (!ide_build_pipeline_check_ready (self, task))
+  if (!ide_pipeline_check_ready (self, task))
     return;
 
   td = task_data_new (task, TASK_REBUILD);
@@ -3684,13 +3626,13 @@ ide_build_pipeline_rebuild_async (IdeBuildPipeline    *self,
 
   g_queue_push_tail (&self->task_queue, g_steal_pointer (&task));
 
-  ide_build_pipeline_queue_flush (self);
+  ide_pipeline_queue_flush (self);
 
   IDE_EXIT;
 }
 
 gboolean
-ide_build_pipeline_rebuild_finish (IdeBuildPipeline  *self,
+ide_pipeline_rebuild_finish (IdePipeline  *self,
                                    GAsyncResult      *result,
                                    GError           **error)
 {
@@ -3698,7 +3640,7 @@ ide_build_pipeline_rebuild_finish (IdeBuildPipeline  *self,
 
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE (self));
   g_assert (IDE_IS_TASK (result));
 
   ret = ide_task_propagate_boolean (IDE_TASK (result), error);
@@ -3707,8 +3649,8 @@ ide_build_pipeline_rebuild_finish (IdeBuildPipeline  *self,
 }
 
 /**
- * ide_build_pipeline_get_can_export:
- * @self: a #IdeBuildPipeline
+ * ide_pipeline_get_can_export:
+ * @self: a #IdePipeline
  *
  * This function is useful to discover if there are any pipeline addins
  * which implement the export phase. UI or GAction implementations may
@@ -3720,9 +3662,9 @@ ide_build_pipeline_rebuild_finish (IdeBuildPipeline  *self,
  * Since: 3.32
  */
 gboolean
-ide_build_pipeline_get_can_export (IdeBuildPipeline *self)
+ide_pipeline_get_can_export (IdePipeline *self)
 {
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (self), FALSE);
+  g_return_val_if_fail (IDE_IS_PIPELINE (self), FALSE);
 
   if (self->broken)
     return FALSE;
@@ -3731,7 +3673,7 @@ ide_build_pipeline_get_can_export (IdeBuildPipeline *self)
     {
       const PipelineEntry *entry = &g_array_index (self->pipeline, PipelineEntry, i);
 
-      if ((entry->phase & IDE_BUILD_PHASE_EXPORT) != 0)
+      if ((entry->phase & IDE_PIPELINE_PHASE_EXPORT) != 0)
         return TRUE;
     }
 
@@ -3739,10 +3681,10 @@ ide_build_pipeline_get_can_export (IdeBuildPipeline *self)
 }
 
 void
-_ide_build_pipeline_set_message (IdeBuildPipeline *self,
+_ide_pipeline_set_message (IdePipeline *self,
                                  const gchar      *message)
 {
-  g_return_if_fail (IDE_IS_BUILD_PIPELINE (self));
+  g_return_if_fail (IDE_IS_PIPELINE (self));
 
   if (message != NULL)
     {
@@ -3767,11 +3709,11 @@ _ide_build_pipeline_set_message (IdeBuildPipeline *self,
 }
 
 void
-_ide_build_pipeline_cancel (IdeBuildPipeline *self)
+_ide_pipeline_cancel (IdePipeline *self)
 {
   g_autoptr(GCancellable) cancellable = NULL;
 
-  g_return_if_fail (IDE_IS_BUILD_PIPELINE (self));
+  g_return_if_fail (IDE_IS_PIPELINE (self));
 
   cancellable = g_steal_pointer (&self->cancellable);
   self->cancellable = g_cancellable_new ();
@@ -3779,20 +3721,20 @@ _ide_build_pipeline_cancel (IdeBuildPipeline *self)
 }
 
 /**
- * ide_build_pipeline_has_configured:
- * @self: a #IdeBuildPipeline
+ * ide_pipeline_has_configured:
+ * @self: a #IdePipeline
  *
  * Checks to see if the pipeline has advanced far enough to ensure that
  * the configure stage has been reached.
  *
- * Returns: %TRUE if %IDE_BUILD_PHASE_CONFIGURE has been reached.
+ * Returns: %TRUE if %IDE_PIPELINE_PHASE_CONFIGURE has been reached.
  *
  * Since: 3.32
  */
 gboolean
-ide_build_pipeline_has_configured (IdeBuildPipeline *self)
+ide_pipeline_has_configured (IdePipeline *self)
 {
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (self), FALSE);
+  g_return_val_if_fail (IDE_IS_PIPELINE (self), FALSE);
 
   if (self->broken)
     return FALSE;
@@ -3812,16 +3754,16 @@ ide_build_pipeline_has_configured (IdeBuildPipeline *self)
     {
       const PipelineEntry *entry = &g_array_index (self->pipeline, PipelineEntry, i);
 
-      if ((entry->phase & IDE_BUILD_PHASE_MASK) < IDE_BUILD_PHASE_CONFIGURE)
+      if ((entry->phase & IDE_PIPELINE_PHASE_MASK) < IDE_PIPELINE_PHASE_CONFIGURE)
         continue;
 
-      if (entry->phase & IDE_BUILD_PHASE_CONFIGURE)
+      if (entry->phase & IDE_PIPELINE_PHASE_CONFIGURE)
         {
           /*
            * This is a configure phase, ensure that it has been
            * completed, or we have not really configured.
            */
-          if (!ide_build_stage_get_completed (entry->stage))
+          if (!ide_pipeline_stage_get_completed (entry->stage))
             return FALSE;
 
           /*
@@ -3850,37 +3792,37 @@ ide_build_pipeline_has_configured (IdeBuildPipeline *self)
 }
 
 void
-_ide_build_pipeline_mark_broken (IdeBuildPipeline *self)
+_ide_pipeline_mark_broken (IdePipeline *self)
 {
-  g_return_if_fail (IDE_IS_BUILD_PIPELINE (self));
+  g_return_if_fail (IDE_IS_PIPELINE (self));
 
   self->broken = TRUE;
 }
 
 static GType
-ide_build_pipeline_get_item_type (GListModel *model)
+ide_pipeline_get_item_type (GListModel *model)
 {
-  return IDE_TYPE_BUILD_STAGE;
+  return IDE_TYPE_PIPELINE_STAGE;
 }
 
 static guint
-ide_build_pipeline_get_n_items (GListModel *model)
+ide_pipeline_get_n_items (GListModel *model)
 {
-  IdeBuildPipeline *self = (IdeBuildPipeline *)model;
+  IdePipeline *self = (IdePipeline *)model;
 
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE (self));
 
   return self->pipeline != NULL ? self->pipeline->len : 0;
 }
 
 static gpointer
-ide_build_pipeline_get_item (GListModel *model,
+ide_pipeline_get_item (GListModel *model,
                              guint       position)
 {
-  IdeBuildPipeline *self = (IdeBuildPipeline *)model;
+  IdePipeline *self = (IdePipeline *)model;
   const PipelineEntry *entry;
 
-  g_assert (IDE_IS_BUILD_PIPELINE (self));
+  g_assert (IDE_IS_PIPELINE (self));
   g_assert (self->pipeline != NULL);
   g_assert (position < self->pipeline->len);
 
@@ -3892,46 +3834,46 @@ ide_build_pipeline_get_item (GListModel *model,
 static void
 list_model_iface_init (GListModelInterface *iface)
 {
-  iface->get_item = ide_build_pipeline_get_item;
-  iface->get_item_type = ide_build_pipeline_get_item_type;
-  iface->get_n_items = ide_build_pipeline_get_n_items;
+  iface->get_item = ide_pipeline_get_item;
+  iface->get_item_type = ide_pipeline_get_item_type;
+  iface->get_n_items = ide_pipeline_get_n_items;
 }
 
 /**
- * ide_build_pipeline_get_requested_phase:
- * @self: a #IdeBuildPipeline
+ * ide_pipeline_get_requested_phase:
+ * @self: a #IdePipeline
  *
  * Gets the phase that has been requested. This can be useful when you want to
  * get an idea of where the build pipeline will attempt to advance.
  *
- * Returns: an #IdeBuildPhase
+ * Returns: an #IdePipelinePhase
  *
  * Since: 3.32
  */
-IdeBuildPhase
-ide_build_pipeline_get_requested_phase (IdeBuildPipeline *self)
+IdePipelinePhase
+ide_pipeline_get_requested_phase (IdePipeline *self)
 {
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (self), 0);
+  g_return_val_if_fail (IDE_IS_PIPELINE (self), 0);
 
-  return self->requested_mask & IDE_BUILD_PHASE_MASK;
+  return self->requested_mask & IDE_PIPELINE_PHASE_MASK;
 }
 
 void
-_ide_build_pipeline_set_pty_size (IdeBuildPipeline *self,
+_ide_pipeline_set_pty_size (IdePipeline *self,
                                   guint             rows,
                                   guint             columns)
 {
-  g_return_if_fail (IDE_IS_BUILD_PIPELINE (self));
+  g_return_if_fail (IDE_IS_PIPELINE (self));
 
   if (self->pty_slave != IDE_PTY_FD_INVALID)
     ide_pty_intercept_set_size (&self->intercept, rows, columns);
 }
 
 void
-_ide_build_pipeline_set_runtime (IdeBuildPipeline *self,
+_ide_pipeline_set_runtime (IdePipeline *self,
                                  IdeRuntime       *runtime)
 {
-  g_return_if_fail (IDE_IS_BUILD_PIPELINE (self));
+  g_return_if_fail (IDE_IS_PIPELINE (self));
   g_return_if_fail (!runtime || IDE_IS_RUNTIME (runtime));
 
   if (g_set_object (&self->runtime, runtime))
@@ -3948,10 +3890,10 @@ _ide_build_pipeline_set_runtime (IdeBuildPipeline *self,
 }
 
 void
-_ide_build_pipeline_set_toolchain (IdeBuildPipeline *self,
+_ide_pipeline_set_toolchain (IdePipeline *self,
                                    IdeToolchain     *toolchain)
 {
-  g_return_if_fail (IDE_IS_BUILD_PIPELINE (self));
+  g_return_if_fail (IDE_IS_PIPELINE (self));
   g_return_if_fail (!toolchain || IDE_IS_TOOLCHAIN (toolchain));
 
   ide_object_lock (IDE_OBJECT (self));
@@ -3961,21 +3903,21 @@ _ide_build_pipeline_set_toolchain (IdeBuildPipeline *self,
 }
 
 /**
- * ide_build_pipeline_ref_toolchain:
- * @self: a #IdeBuildPipeline
+ * ide_pipeline_ref_toolchain:
+ * @self: a #IdePipeline
  *
- * Thread-safe variant of ide_build_pipeline_get_toolchain().
+ * Thread-safe variant of ide_pipeline_get_toolchain().
  *
  * Returns: (transfer full) (nullable): an #IdeToolchain or %NULL
  *
  * Since: 3.32
  */
 IdeToolchain *
-ide_build_pipeline_ref_toolchain (IdeBuildPipeline *self)
+ide_pipeline_ref_toolchain (IdePipeline *self)
 {
   IdeToolchain *ret = NULL;
 
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (self), NULL);
+  g_return_val_if_fail (IDE_IS_PIPELINE (self), NULL);
 
   ide_object_lock (IDE_OBJECT (self));
   g_set_object (&ret, self->toolchain);
@@ -3985,7 +3927,7 @@ ide_build_pipeline_ref_toolchain (IdeBuildPipeline *self)
 }
 
 void
-_ide_build_pipeline_check_toolchain (IdeBuildPipeline *self,
+_ide_pipeline_check_toolchain (IdePipeline *self,
                                      IdeDeviceInfo     *info)
 {
   g_autoptr(IdeToolchain) toolchain = NULL;
@@ -3997,7 +3939,7 @@ _ide_build_pipeline_check_toolchain (IdeBuildPipeline *self,
 
   IDE_ENTRY;
 
-  g_return_if_fail (IDE_IS_BUILD_PIPELINE (self));
+  g_return_if_fail (IDE_IS_PIPELINE (self));
   g_return_if_fail (IDE_IS_DEVICE_INFO (info));
 
   context = ide_object_get_context (IDE_OBJECT (self));
@@ -4031,15 +3973,15 @@ _ide_build_pipeline_check_toolchain (IdeBuildPipeline *self,
       g_autoptr(IdeToolchain) default_toolchain = NULL;
 
       default_toolchain = ide_toolchain_manager_get_toolchain (manager, "default");
-      _ide_build_pipeline_set_toolchain (self, default_toolchain);
+      _ide_pipeline_set_toolchain (self, default_toolchain);
     }
 
   IDE_EXIT;
 }
 
 /**
- * ide_build_pipeline_get_device:
- * @self: a #IdeBuildPipeline
+ * ide_pipeline_get_device:
+ * @self: a #IdePipeline
  *
  * Gets the device that the pipeline is building for.
  *
@@ -4048,16 +3990,16 @@ _ide_build_pipeline_check_toolchain (IdeBuildPipeline *self,
  * Since: 3.32
  */
 IdeDevice *
-ide_build_pipeline_get_device (IdeBuildPipeline *self)
+ide_pipeline_get_device (IdePipeline *self)
 {
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (self), NULL);
+  g_return_val_if_fail (IDE_IS_PIPELINE (self), NULL);
 
   return self->device;
 }
 
 /**
- * ide_build_pipeline_is_ready:
- * @self: a #IdeBuildPipeline
+ * ide_pipeline_is_ready:
+ * @self: a #IdePipeline
  *
  * Checks to see if the pipeline has been loaded. Loading may be delayed
  * due to various initialization routines that need to complete.
@@ -4067,16 +4009,16 @@ ide_build_pipeline_get_device (IdeBuildPipeline *self)
  * Since: 3.32
  */
 gboolean
-ide_build_pipeline_is_ready (IdeBuildPipeline *self)
+ide_pipeline_is_ready (IdePipeline *self)
 {
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (self), FALSE);
+  g_return_val_if_fail (IDE_IS_PIPELINE (self), FALSE);
 
   return self->loaded;
 }
 
 /**
- * ide_build_pipeline_get_host_triplet:
- * @self: a #IdeBuildPipeline
+ * ide_pipeline_get_host_triplet:
+ * @self: a #IdePipeline
  *
  * Gets the "host" triplet which specifies where the build results will run.
  *
@@ -4088,16 +4030,16 @@ ide_build_pipeline_is_ready (IdeBuildPipeline *self)
  * Since: 3.32
  */
 IdeTriplet *
-ide_build_pipeline_get_host_triplet (IdeBuildPipeline *self)
+ide_pipeline_get_host_triplet (IdePipeline *self)
 {
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (self), NULL);
+  g_return_val_if_fail (IDE_IS_PIPELINE (self), NULL);
 
   return self->host_triplet;
 }
 
 /**
- * ide_build_pipeline_is_native:
- * @self: a #IdeBuildPipeline
+ * ide_pipeline_is_native:
+ * @self: a #IdePipeline
  *
  * This is a helper to check if the triplet that we are compiling
  * for matches the host system. That allows some plugins to do less
@@ -4108,9 +4050,9 @@ ide_build_pipeline_get_host_triplet (IdeBuildPipeline *self)
  * Since: 3.32
  */
 gboolean
-ide_build_pipeline_is_native (IdeBuildPipeline *self)
+ide_pipeline_is_native (IdePipeline *self)
 {
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (self), FALSE);
+  g_return_val_if_fail (IDE_IS_PIPELINE (self), FALSE);
 
   if (self->host_triplet != NULL)
     return ide_triplet_is_system (self->host_triplet);
diff --git a/src/libide/foundry/ide-pipeline.h b/src/libide/foundry/ide-pipeline.h
new file mode 100644
index 000000000..98081e555
--- /dev/null
+++ b/src/libide/foundry/ide-pipeline.h
@@ -0,0 +1,214 @@
+/* ide-pipeline.h
+ *
+ * Copyright 2016-2019 Christian Hergert <chergert redhat com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+
+#pragma once
+
+#if !defined (IDE_FOUNDRY_INSIDE) && !defined (IDE_FOUNDRY_COMPILATION)
+# error "Only <libide-foundry.h> can be included directly."
+#endif
+
+#include <libide-core.h>
+#include <libide-code.h>
+#include <libide-threading.h>
+#include <vte/vte.h>
+
+#include "ide-foundry-types.h"
+
+#include "ide-build-log.h"
+#include "ide-config.h"
+#include "ide-pipeline-stage.h"
+#include "ide-runtime.h"
+#include "ide-triplet.h"
+
+G_BEGIN_DECLS
+
+#define IDE_TYPE_PIPELINE              (ide_pipeline_get_type())
+#define IDE_PIPELINE_PHASE_MASK        (0xFFFFFF)
+#define IDE_PIPELINE_PHASE_WHENCE_MASK (IDE_PIPELINE_PHASE_BEFORE | IDE_PIPELINE_PHASE_AFTER)
+#define IDE_BUILD_ERROR                (ide_build_error_quark())
+
+typedef enum
+{
+  IDE_PIPELINE_PHASE_NONE         = 0,
+  IDE_PIPELINE_PHASE_PREPARE      = 1 << 0,
+  IDE_PIPELINE_PHASE_DOWNLOADS    = 1 << 1,
+  IDE_PIPELINE_PHASE_DEPENDENCIES = 1 << 2,
+  IDE_PIPELINE_PHASE_AUTOGEN      = 1 << 3,
+  IDE_PIPELINE_PHASE_CONFIGURE    = 1 << 4,
+  IDE_PIPELINE_PHASE_BUILD        = 1 << 6,
+  IDE_PIPELINE_PHASE_INSTALL      = 1 << 7,
+  IDE_PIPELINE_PHASE_COMMIT       = 1 << 8,
+  IDE_PIPELINE_PHASE_EXPORT       = 1 << 9,
+  IDE_PIPELINE_PHASE_FINAL        = 1 << 10,
+  IDE_PIPELINE_PHASE_BEFORE       = 1 << 28,
+  IDE_PIPELINE_PHASE_AFTER        = 1 << 29,
+  IDE_PIPELINE_PHASE_FINISHED     = 1 << 30,
+  IDE_PIPELINE_PHASE_FAILED       = 1 << 31,
+} IdePipelinePhase;
+
+typedef enum
+{
+  IDE_BUILD_ERROR_UNKNOWN = 0,
+  IDE_BUILD_ERROR_BROKEN,
+  IDE_BUILD_ERROR_NOT_LOADED,
+  IDE_BUILD_ERROR_NEEDS_REBUILD,
+} IdeBuildError;
+
+IDE_AVAILABLE_IN_3_32
+G_DECLARE_FINAL_TYPE (IdePipeline, ide_pipeline, IDE, PIPELINE, IdeObject)
+
+IDE_AVAILABLE_IN_3_32
+GQuark                 ide_build_error_quark             (void) G_GNUC_CONST;
+IDE_AVAILABLE_IN_3_32
+gboolean               ide_pipeline_is_native            (IdePipeline            *self);
+IDE_AVAILABLE_IN_3_32
+gboolean               ide_pipeline_is_ready             (IdePipeline            *self);
+IDE_AVAILABLE_IN_3_32
+gboolean               ide_pipeline_get_busy             (IdePipeline            *self);
+IDE_AVAILABLE_IN_3_32
+IdeConfig             *ide_pipeline_get_config           (IdePipeline            *self);
+IDE_AVAILABLE_IN_3_32
+IdeDevice             *ide_pipeline_get_device           (IdePipeline            *self);
+IDE_AVAILABLE_IN_3_32
+IdeTriplet            *ide_pipeline_get_host_triplet     (IdePipeline            *self);
+IDE_AVAILABLE_IN_3_32
+IdeRuntime            *ide_pipeline_get_runtime          (IdePipeline            *self);
+IDE_AVAILABLE_IN_3_32
+IdeToolchain          *ide_pipeline_get_toolchain        (IdePipeline            *self);
+IDE_AVAILABLE_IN_3_32
+IdeToolchain          *ide_pipeline_ref_toolchain        (IdePipeline            *self);
+IDE_AVAILABLE_IN_3_32
+const gchar           *ide_pipeline_get_builddir         (IdePipeline            *self);
+IDE_AVAILABLE_IN_3_32
+const gchar           *ide_pipeline_get_srcdir           (IdePipeline            *self);
+IDE_AVAILABLE_IN_3_32
+gchar                 *ide_pipeline_get_message          (IdePipeline            *self);
+IDE_AVAILABLE_IN_3_32
+IdePipelinePhase       ide_pipeline_get_phase            (IdePipeline            *self);
+IDE_AVAILABLE_IN_3_32
+gboolean               ide_pipeline_get_can_export       (IdePipeline            *self);
+IDE_AVAILABLE_IN_3_32
+VtePty                *ide_pipeline_get_pty              (IdePipeline            *self);
+IDE_AVAILABLE_IN_3_32
+IdeSubprocessLauncher *ide_pipeline_create_launcher      (IdePipeline            *self,
+                                                          GError                **error);
+IDE_AVAILABLE_IN_3_32
+gchar                 *ide_pipeline_build_srcdir_path    (IdePipeline            *self,
+                                                          const gchar            *first_part,
+                                                          ...) G_GNUC_NULL_TERMINATED;
+IDE_AVAILABLE_IN_3_32
+gchar                 *ide_pipeline_build_builddir_path  (IdePipeline            *self,
+                                                          const gchar            *first_part,
+                                                          ...) G_GNUC_NULL_TERMINATED;
+IDE_AVAILABLE_IN_3_32
+void                   ide_pipeline_invalidate_phase     (IdePipeline            *self,
+                                                          IdePipelinePhase        phases);
+IDE_AVAILABLE_IN_3_32
+gboolean               ide_pipeline_request_phase        (IdePipeline            *self,
+                                                          IdePipelinePhase        phase);
+IDE_AVAILABLE_IN_3_32
+guint                  ide_pipeline_attach               (IdePipeline            *self,
+                                                          IdePipelinePhase        phase,
+                                                          gint                    priority,
+                                                          IdePipelineStage          *stage);
+IDE_AVAILABLE_IN_3_32
+guint                  ide_pipeline_attach_launcher      (IdePipeline            *self,
+                                                          IdePipelinePhase        phase,
+                                                          gint                    priority,
+                                                          IdeSubprocessLauncher  *launcher);
+IDE_AVAILABLE_IN_3_32
+void                   ide_pipeline_detach               (IdePipeline            *self,
+                                                          guint                   stage_id);
+IDE_AVAILABLE_IN_3_32
+IdePipelineStage         *ide_pipeline_get_stage_by_id      (IdePipeline            *self,
+                                                          guint                   stage_id);
+IDE_AVAILABLE_IN_3_32
+guint                  ide_pipeline_add_log_observer     (IdePipeline            *self,
+                                                          IdeBuildLogObserver     observer,
+                                                          gpointer                observer_data,
+                                                          GDestroyNotify          observer_data_destroy);
+IDE_AVAILABLE_IN_3_32
+gboolean               ide_pipeline_remove_log_observer  (IdePipeline            *self,
+                                                          guint                   observer_id);
+IDE_AVAILABLE_IN_3_32
+void                   ide_pipeline_emit_diagnostic      (IdePipeline            *self,
+                                                          IdeDiagnostic          *diagnostic);
+IDE_AVAILABLE_IN_3_32
+guint                  ide_pipeline_add_error_format     (IdePipeline            *self,
+                                                          const gchar            *regex,
+                                                          GRegexCompileFlags      flags);
+IDE_AVAILABLE_IN_3_32
+gboolean               ide_pipeline_remove_error_format  (IdePipeline            *self,
+                                                          guint                   error_format_id);
+IDE_AVAILABLE_IN_3_32
+void                   ide_pipeline_build_async          (IdePipeline            *self,
+                                                          IdePipelinePhase        phase,
+                                                          GCancellable           *cancellable,
+                                                          GAsyncReadyCallback     callback,
+                                                          gpointer                user_data);
+IDE_AVAILABLE_IN_3_32
+gboolean               ide_pipeline_build_finish         (IdePipeline            *self,
+                                                          GAsyncResult           *result,
+                                                          GError                **error);
+IDE_AVAILABLE_IN_3_32
+void                   ide_pipeline_build_targets_async  (IdePipeline            *self,
+                                                          IdePipelinePhase        phase,
+                                                          GPtrArray              *targets,
+                                                          GCancellable           *cancellable,
+                                                          GAsyncReadyCallback     callback,
+                                                          gpointer                user_data);
+IDE_AVAILABLE_IN_3_32
+gboolean               ide_pipeline_build_targets_finish (IdePipeline            *self,
+                                                          GAsyncResult           *result,
+                                                          GError                **error);
+IDE_AVAILABLE_IN_3_32
+void                   ide_pipeline_foreach_stage        (IdePipeline            *self,
+                                                          GFunc                   stage_callback,
+                                                          gpointer                user_data);
+IDE_AVAILABLE_IN_3_32
+void                   ide_pipeline_clean_async          (IdePipeline            *self,
+                                                          IdePipelinePhase        phase,
+                                                          GCancellable           *cancellable,
+                                                          GAsyncReadyCallback     callback,
+                                                          gpointer                user_data);
+IDE_AVAILABLE_IN_3_32
+gboolean               ide_pipeline_clean_finish         (IdePipeline            *self,
+                                                          GAsyncResult           *result,
+                                                          GError                **error);
+IDE_AVAILABLE_IN_3_32
+void                   ide_pipeline_rebuild_async        (IdePipeline            *self,
+                                                          IdePipelinePhase        phase,
+                                                          GPtrArray              *targets,
+                                                          GCancellable           *cancellable,
+                                                          GAsyncReadyCallback     callback,
+                                                          gpointer                user_data);
+IDE_AVAILABLE_IN_3_32
+gboolean               ide_pipeline_rebuild_finish       (IdePipeline            *self,
+                                                          GAsyncResult           *result,
+                                                          GError                **error);
+IDE_AVAILABLE_IN_3_32
+void                   ide_pipeline_attach_pty           (IdePipeline            *self,
+                                                          IdeSubprocessLauncher  *launcher);
+IDE_AVAILABLE_IN_3_32
+gboolean               ide_pipeline_has_configured       (IdePipeline            *self);
+IDE_AVAILABLE_IN_3_32
+IdePipelinePhase       ide_pipeline_get_requested_phase  (IdePipeline            *self);
+
+G_END_DECLS
diff --git a/src/libide/foundry/ide-run-manager.c b/src/libide/foundry/ide-run-manager.c
index cdc754b96..f6c4baac9 100644
--- a/src/libide/foundry/ide-run-manager.c
+++ b/src/libide/foundry/ide-run-manager.c
@@ -654,7 +654,7 @@ ide_run_manager_do_install_before_run (IdeRunManager *self,
                            G_CONNECT_SWAPPED);
 
   ide_build_manager_execute_async (build_manager,
-                                   IDE_BUILD_PHASE_INSTALL,
+                                   IDE_PIPELINE_PHASE_INSTALL,
                                    NULL,
                                    ide_task_get_cancellable (task),
                                    ide_run_manager_install_cb,
diff --git a/src/libide/foundry/ide-runtime-manager.c b/src/libide/foundry/ide-runtime-manager.c
index 0a59717ec..ba9298668 100644
--- a/src/libide/foundry/ide-runtime-manager.c
+++ b/src/libide/foundry/ide-runtime-manager.c
@@ -27,7 +27,7 @@
 #include <libide-threading.h>
 #include <libpeas/peas.h>
 
-#include "ide-build-pipeline.h"
+#include "ide-pipeline.h"
 #include "ide-build-private.h"
 #include "ide-config.h"
 #include "ide-device.h"
@@ -52,7 +52,7 @@ typedef struct
 
 typedef struct
 {
-  IdeBuildPipeline *pipeline;
+  IdePipeline *pipeline;
   gchar            *runtime_id;
 } PrepareState;
 
@@ -334,7 +334,7 @@ ide_runtime_manager_prepare_cb (GObject      *object,
 
 void
 _ide_runtime_manager_prepare_async (IdeRuntimeManager   *self,
-                                    IdeBuildPipeline    *pipeline,
+                                    IdePipeline    *pipeline,
                                     GCancellable        *cancellable,
                                     GAsyncReadyCallback  callback,
                                     gpointer             user_data)
@@ -348,10 +348,10 @@ _ide_runtime_manager_prepare_async (IdeRuntimeManager   *self,
   IDE_ENTRY;
 
   g_return_if_fail (IDE_IS_RUNTIME_MANAGER (self));
-  g_return_if_fail (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_return_if_fail (IDE_IS_PIPELINE (pipeline));
   g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable));
 
-  config = ide_build_pipeline_get_config (pipeline);
+  config = ide_pipeline_get_config (pipeline);
   runtime_id = ide_config_get_runtime_id (config);
 
   task = ide_task_new (self, cancellable, callback, user_data);
@@ -436,7 +436,7 @@ _ide_runtime_manager_prepare_finish (IdeRuntimeManager  *self,
   g_return_val_if_fail (!ret || IDE_IS_RUNTIME (ret), FALSE);
 
   if (IDE_IS_RUNTIME (ret))
-    _ide_build_pipeline_set_runtime (state->pipeline, ret);
+    _ide_pipeline_set_runtime (state->pipeline, ret);
 
   IDE_RETURN (ret != NULL);
 }
diff --git a/src/libide/foundry/ide-runtime-private.h b/src/libide/foundry/ide-runtime-private.h
index 3809c5bad..a50903f65 100644
--- a/src/libide/foundry/ide-runtime-private.h
+++ b/src/libide/foundry/ide-runtime-private.h
@@ -26,7 +26,7 @@ G_BEGIN_DECLS
 
 void     _ide_runtime_manager_unload         (IdeRuntimeManager    *self);
 void     _ide_runtime_manager_prepare_async  (IdeRuntimeManager    *self,
-                                              IdeBuildPipeline     *pipeline,
+                                              IdePipeline     *pipeline,
                                               GCancellable         *cancellable,
                                               GAsyncReadyCallback   callback,
                                               gpointer              user_data);
diff --git a/src/libide/foundry/ide-runtime-provider.c b/src/libide/foundry/ide-runtime-provider.c
index 3530f20dc..b5fbb8409 100644
--- a/src/libide/foundry/ide-runtime-provider.c
+++ b/src/libide/foundry/ide-runtime-provider.c
@@ -24,7 +24,7 @@
 
 #include <libide-threading.h>
 
-#include "ide-build-pipeline.h"
+#include "ide-pipeline.h"
 #include "ide-config.h"
 #include "ide-foundry-compat.h"
 #include "ide-runtime.h"
@@ -115,7 +115,7 @@ ide_runtime_provider_real_bootstrap_cb (GObject      *object,
 
 static void
 ide_runtime_provider_real_bootstrap_async (IdeRuntimeProvider  *self,
-                                           IdeBuildPipeline    *pipeline,
+                                           IdePipeline    *pipeline,
                                            GCancellable        *cancellable,
                                            GAsyncReadyCallback  callback,
                                            gpointer             user_data)
@@ -127,14 +127,14 @@ ide_runtime_provider_real_bootstrap_async (IdeRuntimeProvider  *self,
   IDE_ENTRY;
 
   g_assert (IDE_IS_RUNTIME_PROVIDER (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
 
   task = ide_task_new (self, cancellable, callback, user_data);
   ide_task_set_source_tag (task, ide_runtime_provider_real_bootstrap_async);
   ide_task_set_priority (task, G_PRIORITY_LOW);
 
-  config = ide_build_pipeline_get_config (pipeline);
+  config = ide_pipeline_get_config (pipeline);
   runtime_id = ide_config_get_runtime_id (config);
   ide_task_set_task_data (task, g_strdup (runtime_id), g_free);
 
@@ -233,7 +233,7 @@ ide_runtime_provider_install_finish (IdeRuntimeProvider  *self,
 /**
  * ide_runtime_provider_bootstrap_async:
  * @self: a #IdeRuntimeProvider
- * @pipeline: an #IdeBuildPipeline
+ * @pipeline: an #IdePipeline
  * @cancellable: (nullable): a #GCancellable or %NULL
  * @callback: a #GAsyncReadyCallback or %NULL
  * @user_data: closure data for @callback
@@ -253,13 +253,13 @@ ide_runtime_provider_install_finish (IdeRuntimeProvider  *self,
  */
 void
 ide_runtime_provider_bootstrap_async (IdeRuntimeProvider  *self,
-                                      IdeBuildPipeline    *pipeline,
+                                      IdePipeline    *pipeline,
                                       GCancellable        *cancellable,
                                       GAsyncReadyCallback  callback,
                                       gpointer             user_data)
 {
   g_return_if_fail (IDE_IS_RUNTIME_PROVIDER (self));
-  g_return_if_fail (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_return_if_fail (IDE_IS_PIPELINE (pipeline));
   g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable));
 
   IDE_RUNTIME_PROVIDER_GET_IFACE (self)->bootstrap_async (self, pipeline, cancellable, callback, user_data);
diff --git a/src/libide/foundry/ide-runtime-provider.h b/src/libide/foundry/ide-runtime-provider.h
index a249d4280..9e7b441a9 100644
--- a/src/libide/foundry/ide-runtime-provider.h
+++ b/src/libide/foundry/ide-runtime-provider.h
@@ -54,7 +54,7 @@ struct _IdeRuntimeProviderInterface
                                    GAsyncResult         *result,
                                    GError              **error);
   void        (*bootstrap_async)  (IdeRuntimeProvider   *self,
-                                   IdeBuildPipeline     *pipeline,
+                                   IdePipeline     *pipeline,
                                    GCancellable         *cancellable,
                                    GAsyncReadyCallback   callback,
                                    gpointer              user_data);
@@ -84,7 +84,7 @@ gboolean    ide_runtime_provider_install_finish   (IdeRuntimeProvider   *self,
                                                    GError              **error);
 IDE_AVAILABLE_IN_3_32
 void        ide_runtime_provider_bootstrap_async  (IdeRuntimeProvider   *self,
-                                                   IdeBuildPipeline     *pipeline,
+                                                   IdePipeline     *pipeline,
                                                    GCancellable         *cancellable,
                                                    GAsyncReadyCallback   callback,
                                                    gpointer              user_data);
diff --git a/src/libide/foundry/ide-test-manager.c b/src/libide/foundry/ide-test-manager.c
index acd79b155..2b8fb31e6 100644
--- a/src/libide/foundry/ide-test-manager.c
+++ b/src/libide/foundry/ide-test-manager.c
@@ -27,7 +27,7 @@
 #include <libpeas/peas.h>
 
 #include "ide-build-manager.h"
-#include "ide-build-pipeline.h"
+#include "ide-pipeline.h"
 #include "ide-foundry-compat.h"
 #include "ide-test-manager.h"
 #include "ide-test-private.h"
@@ -701,7 +701,7 @@ ide_test_manager_run_async (IdeTestManager      *self,
                             gpointer             user_data)
 {
   g_autoptr(GTask) task = NULL;
-  IdeBuildPipeline *pipeline;
+  IdePipeline *pipeline;
   IdeTestProvider *provider;
   IdeBuildManager *build_manager;
   IdeContext *context;
diff --git a/src/libide/foundry/ide-test-provider.c b/src/libide/foundry/ide-test-provider.c
index 0fe462c00..2887dbaf3 100644
--- a/src/libide/foundry/ide-test-provider.c
+++ b/src/libide/foundry/ide-test-provider.c
@@ -22,7 +22,7 @@
 
 #include "config.h"
 
-#include "ide-build-pipeline.h"
+#include "ide-pipeline.h"
 #include "ide-test-provider.h"
 #include "ide-test-private.h"
 
@@ -49,7 +49,7 @@ static GParamSpec *properties [N_PROPS];
 static void
 ide_test_provider_real_run_async (IdeTestProvider     *self,
                                   IdeTest             *test,
-                                  IdeBuildPipeline    *pipeline,
+                                  IdePipeline    *pipeline,
                                   GCancellable        *cancellable,
                                   GAsyncReadyCallback  callback,
                                   gpointer             user_data)
@@ -266,14 +266,14 @@ ide_test_provider_clear (IdeTestProvider *self)
 void
 ide_test_provider_run_async (IdeTestProvider     *self,
                              IdeTest             *test,
-                             IdeBuildPipeline    *pipeline,
+                             IdePipeline    *pipeline,
                              GCancellable        *cancellable,
                              GAsyncReadyCallback  callback,
                              gpointer             user_data)
 {
   g_return_if_fail (IDE_IS_TEST_PROVIDER (self));
   g_return_if_fail (IDE_IS_TEST (test));
-  g_return_if_fail (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_return_if_fail (IDE_IS_PIPELINE (pipeline));
   g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable));
 
   IDE_TEST_PROVIDER_GET_CLASS (self)->run_async (self,
diff --git a/src/libide/foundry/ide-test-provider.h b/src/libide/foundry/ide-test-provider.h
index cec3eba1f..e31ef2410 100644
--- a/src/libide/foundry/ide-test-provider.h
+++ b/src/libide/foundry/ide-test-provider.h
@@ -41,7 +41,7 @@ struct _IdeTestProviderClass
 
   void     (*run_async)  (IdeTestProvider      *self,
                           IdeTest              *test,
-                          IdeBuildPipeline     *pipeline,
+                          IdePipeline     *pipeline,
                           GCancellable         *cancellable,
                           GAsyncReadyCallback   callback,
                           gpointer              user_data);
@@ -70,7 +70,7 @@ void     ide_test_provider_remove      (IdeTestProvider      *self,
 IDE_AVAILABLE_IN_3_32
 void     ide_test_provider_run_async   (IdeTestProvider      *self,
                                         IdeTest              *test,
-                                        IdeBuildPipeline     *pipeline,
+                                        IdePipeline     *pipeline,
                                         GCancellable         *cancellable,
                                         GAsyncReadyCallback   callback,
                                         gpointer              user_data);
diff --git a/src/libide/foundry/ide-toolchain-manager.c b/src/libide/foundry/ide-toolchain-manager.c
index aa06ecece..93351e9f8 100644
--- a/src/libide/foundry/ide-toolchain-manager.c
+++ b/src/libide/foundry/ide-toolchain-manager.c
@@ -29,7 +29,7 @@
 #include <libpeas/peas.h>
 
 #include "ide-build-private.h"
-#include "ide-build-pipeline.h"
+#include "ide-pipeline.h"
 #include "ide-config.h"
 #include "ide-device.h"
 #include "ide-simple-toolchain.h"
@@ -50,7 +50,7 @@ struct _IdeToolchainManager
 
 typedef struct
 {
-  IdeBuildPipeline *pipeline;
+  IdePipeline *pipeline;
   gchar            *toolchain_id;
 } PrepareState;
 
@@ -497,7 +497,7 @@ ide_toolchain_manager_is_loaded (IdeToolchainManager  *self)
 
 void
 _ide_toolchain_manager_prepare_async (IdeToolchainManager  *self,
-                                      IdeBuildPipeline     *pipeline,
+                                      IdePipeline     *pipeline,
                                       GCancellable         *cancellable,
                                       GAsyncReadyCallback   callback,
                                       gpointer              user_data)
@@ -511,10 +511,10 @@ _ide_toolchain_manager_prepare_async (IdeToolchainManager  *self,
   IDE_ENTRY;
 
   g_return_if_fail (IDE_IS_TOOLCHAIN_MANAGER (self));
-  g_return_if_fail (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_return_if_fail (IDE_IS_PIPELINE (pipeline));
   g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable));
 
-  config = ide_build_pipeline_get_config (pipeline);
+  config = ide_pipeline_get_config (pipeline);
   toolchain_id = ide_config_get_toolchain_id (config);
 
   task = g_task_new (self, cancellable, callback, user_data);
@@ -584,7 +584,7 @@ _ide_toolchain_manager_prepare_finish (IdeToolchainManager  *self,
   g_return_val_if_fail (!ret || IDE_IS_TOOLCHAIN (ret), FALSE);
 
   if (IDE_IS_TOOLCHAIN (ret))
-    _ide_build_pipeline_set_toolchain (state->pipeline, ret);
+    _ide_pipeline_set_toolchain (state->pipeline, ret);
 
   IDE_RETURN (ret != NULL);
 }
diff --git a/src/libide/foundry/ide-toolchain-private.h b/src/libide/foundry/ide-toolchain-private.h
index be819f89e..adfafd3f8 100644
--- a/src/libide/foundry/ide-toolchain-private.h
+++ b/src/libide/foundry/ide-toolchain-private.h
@@ -27,7 +27,7 @@
 G_BEGIN_DECLS
 
 void     _ide_toolchain_manager_prepare_async  (IdeToolchainManager  *self,
-                                                IdeBuildPipeline     *pipeline,
+                                                IdePipeline     *pipeline,
                                                 GCancellable         *cancellable,
                                                 GAsyncReadyCallback   callback,
                                                 gpointer              user_data);
diff --git a/src/libide/foundry/libide-foundry.h b/src/libide/foundry/libide-foundry.h
index 477b2148b..bbbff8a6f 100644
--- a/src/libide/foundry/libide-foundry.h
+++ b/src/libide/foundry/libide-foundry.h
@@ -30,20 +30,14 @@ G_BEGIN_DECLS
 
 #include "ide-build-log.h"
 #include "ide-build-manager.h"
-#include "ide-build-pipeline-addin.h"
-#include "ide-build-pipeline.h"
-#include "ide-build-stage-launcher.h"
-#include "ide-build-stage-mkdirs.h"
-#include "ide-build-stage-transfer.h"
-#include "ide-build-stage.h"
 #include "ide-build-system-discovery.h"
 #include "ide-build-system.h"
 #include "ide-build-target-provider.h"
 #include "ide-build-target.h"
-#include "ide-config.h"
+#include "ide-compile-commands.h"
 #include "ide-config-manager.h"
 #include "ide-config-provider.h"
-#include "ide-compile-commands.h"
+#include "ide-config.h"
 #include "ide-dependency-updater.h"
 #include "ide-deploy-strategy.h"
 #include "ide-device-info.h"
@@ -53,6 +47,12 @@ G_BEGIN_DECLS
 #include "ide-fallback-build-system.h"
 #include "ide-foundry-compat.h"
 #include "ide-local-device.h"
+#include "ide-pipeline-addin.h"
+#include "ide-pipeline-stage-launcher.h"
+#include "ide-pipeline-stage-mkdirs.h"
+#include "ide-pipeline-stage-transfer.h"
+#include "ide-pipeline-stage.h"
+#include "ide-pipeline.h"
 #include "ide-run-manager.h"
 #include "ide-runner-addin.h"
 #include "ide-runner.h"
@@ -62,9 +62,9 @@ G_BEGIN_DECLS
 #include "ide-simple-build-system-discovery.h"
 #include "ide-simple-build-target.h"
 #include "ide-simple-toolchain.h"
-#include "ide-test.h"
 #include "ide-test-manager.h"
 #include "ide-test-provider.h"
+#include "ide-test.h"
 #include "ide-toolchain-manager.h"
 #include "ide-toolchain-provider.h"
 #include "ide-toolchain.h"
diff --git a/src/libide/foundry/meson.build b/src/libide/foundry/meson.build
index d63e2ab21..226397c15 100644
--- a/src/libide/foundry/meson.build
+++ b/src/libide/foundry/meson.build
@@ -13,12 +13,6 @@ libide_foundry_generated_headers = []
 libide_foundry_public_headers = [
   'ide-build-log.h',
   'ide-build-manager.h',
-  'ide-build-pipeline-addin.h',
-  'ide-build-pipeline.h',
-  'ide-build-stage-launcher.h',
-  'ide-build-stage-mkdirs.h',
-  'ide-build-stage-transfer.h',
-  'ide-build-stage.h',
   'ide-build-system-discovery.h',
   'ide-build-system.h',
   'ide-build-target-provider.h',
@@ -36,6 +30,12 @@ libide_foundry_public_headers = [
   'ide-fallback-build-system.h',
   'ide-foundry-types.h',
   'ide-local-device.h',
+  'ide-pipeline-addin.h',
+  'ide-pipeline-stage-launcher.h',
+  'ide-pipeline-stage-mkdirs.h',
+  'ide-pipeline-stage-transfer.h',
+  'ide-pipeline-stage.h',
+  'ide-pipeline.h',
   'ide-run-manager.h',
   'ide-runner-addin.h',
   'ide-runner.h',
@@ -55,7 +55,7 @@ libide_foundry_public_headers = [
 libide_foundry_private_headers = [
   'ide-build-log-private.h',
   'ide-build-private.h',
-  'ide-build-stage-private.h',
+  'ide-pipeline-stage-private.h',
   'ide-config-private.h',
   'ide-device-private.h',
   'ide-foundry-init.h',
@@ -66,10 +66,10 @@ libide_foundry_private_headers = [
 
 libide_foundry_enum_headers = [
   'ide-build-log.h',
-  'ide-build-pipeline.h',
   'ide-config.h',
   'ide-device.h',
   'ide-device-info.h',
+  'ide-pipeline.h',
   'ide-runtime.h',
   'ide-test.h',
 ]
@@ -82,12 +82,6 @@ install_headers(libide_foundry_public_headers, subdir: libide_foundry_header_sub
 
 libide_foundry_public_sources = [
   'ide-build-manager.c',
-  'ide-build-pipeline-addin.c',
-  'ide-build-pipeline.c',
-  'ide-build-stage-launcher.c',
-  'ide-build-stage-mkdirs.c',
-  'ide-build-stage-transfer.c',
-  'ide-build-stage.c',
   'ide-build-system-discovery.c',
   'ide-build-system.c',
   'ide-build-target-provider.c',
@@ -105,6 +99,12 @@ libide_foundry_public_sources = [
   'ide-fallback-build-system.c',
   'ide-foundry-compat.c',
   'ide-local-device.c',
+  'ide-pipeline-addin.c',
+  'ide-pipeline-stage-launcher.c',
+  'ide-pipeline-stage-mkdirs.c',
+  'ide-pipeline-stage-transfer.c',
+  'ide-pipeline-stage.c',
+  'ide-pipeline.c',
   'ide-run-manager.c',
   'ide-runner-addin.c',
   'ide-runner.c',
@@ -114,9 +114,9 @@ libide_foundry_public_sources = [
   'ide-simple-build-system-discovery.c',
   'ide-simple-build-target.c',
   'ide-simple-toolchain.c',
-  'ide-test.c',
   'ide-test-manager.c',
   'ide-test-provider.c',
+  'ide-test.c',
   'ide-toolchain-manager.c',
   'ide-toolchain-provider.c',
   'ide-toolchain.c',
diff --git a/src/libide/terminal/ide-terminal-page.c b/src/libide/terminal/ide-terminal-page.c
index 27ba33298..504810647 100644
--- a/src/libide/terminal/ide-terminal-page.c
+++ b/src/libide/terminal/ide-terminal-page.c
@@ -183,7 +183,7 @@ gbp_terminal_respawn (IdeTerminalPage *self,
   g_autoptr(GError) error = NULL;
   g_autofree gchar *workpath = NULL;
   g_autofree gchar *shell = NULL;
-  IdeBuildPipeline *pipeline = NULL;
+  IdePipeline *pipeline = NULL;
   IdeWorkbench *workbench;
   IdeContext *context;
   VtePty *pty = NULL;
@@ -269,8 +269,8 @@ gbp_terminal_respawn (IdeTerminalPage *self,
 
           if (pipeline != NULL)
             {
-              ide_environment_setenv (env, "BUILDDIR", ide_build_pipeline_get_builddir (pipeline));
-              ide_environment_setenv (env, "SRCDIR", ide_build_pipeline_get_srcdir (pipeline));
+              ide_environment_setenv (env, "BUILDDIR", ide_pipeline_get_builddir (pipeline));
+              ide_environment_setenv (env, "SRCDIR", ide_pipeline_get_srcdir (pipeline));
             }
 
           ide_runner_run_async (runner,
@@ -311,8 +311,8 @@ gbp_terminal_respawn (IdeTerminalPage *self,
 
   if (pipeline != NULL)
     {
-      ide_subprocess_launcher_setenv (launcher, "BUILDDIR", ide_build_pipeline_get_builddir (pipeline), 
TRUE);
-      ide_subprocess_launcher_setenv (launcher, "SRCDIR", ide_build_pipeline_get_srcdir (pipeline), TRUE);
+      ide_subprocess_launcher_setenv (launcher, "BUILDDIR", ide_pipeline_get_builddir (pipeline), TRUE);
+      ide_subprocess_launcher_setenv (launcher, "SRCDIR", ide_pipeline_get_srcdir (pipeline), TRUE);
     }
 
   tty_fd = -1;
diff --git a/src/plugins/autotools/autotools-plugin.c b/src/plugins/autotools/autotools-plugin.c
index e75a1ca9a..21f45d9c2 100644
--- a/src/plugins/autotools/autotools-plugin.c
+++ b/src/plugins/autotools/autotools-plugin.c
@@ -32,7 +32,7 @@ _IDE_EXTERN void
 _ide_autotools_register_types (PeasObjectModule *module)
 {
   peas_object_module_register_extension_type (module,
-                                              IDE_TYPE_BUILD_PIPELINE_ADDIN,
+                                              IDE_TYPE_PIPELINE_ADDIN,
                                               IDE_TYPE_AUTOTOOLS_PIPELINE_ADDIN);
   peas_object_module_register_extension_type (module,
                                               IDE_TYPE_BUILD_SYSTEM,
diff --git a/src/plugins/autotools/ide-autotools-autogen-stage.c 
b/src/plugins/autotools/ide-autotools-autogen-stage.c
index ed3bceaa1..fea972823 100644
--- a/src/plugins/autotools/ide-autotools-autogen-stage.c
+++ b/src/plugins/autotools/ide-autotools-autogen-stage.c
@@ -24,12 +24,12 @@
 
 struct _IdeAutotoolsAutogenStage
 {
-  IdeBuildStage parent_instance;
+  IdePipelineStage parent_instance;
 
   gchar *srcdir;
 };
 
-G_DEFINE_TYPE (IdeAutotoolsAutogenStage, ide_autotools_autogen_stage, IDE_TYPE_BUILD_STAGE)
+G_DEFINE_TYPE (IdeAutotoolsAutogenStage, ide_autotools_autogen_stage, IDE_TYPE_PIPELINE_STAGE)
 
 enum {
   PROP_0,
@@ -58,11 +58,11 @@ ide_autotools_autogen_stage_wait_check_cb (GObject      *object,
 }
 
 static void
-ide_autotools_autogen_stage_execute_async (IdeBuildStage       *stage,
-                                           IdeBuildPipeline    *pipeline,
-                                           GCancellable        *cancellable,
-                                           GAsyncReadyCallback  callback,
-                                           gpointer             user_data)
+ide_autotools_autogen_stage_build_async (IdePipelineStage    *stage,
+                                         IdePipeline         *pipeline,
+                                         GCancellable        *cancellable,
+                                         GAsyncReadyCallback  callback,
+                                         gpointer             user_data)
 {
   IdeAutotoolsAutogenStage *self = (IdeAutotoolsAutogenStage *)stage;
   g_autofree gchar *autogen_path = NULL;
@@ -75,11 +75,11 @@ ide_autotools_autogen_stage_execute_async (IdeBuildStage       *stage,
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
 
   task = ide_task_new (self, cancellable, callback, user_data);
-  ide_task_set_source_tag (task, ide_autotools_autogen_stage_execute_async);
+  ide_task_set_source_tag (task, ide_autotools_autogen_stage_build_async);
 
   autogen_path = g_build_filename (self->srcdir, "autogen.sh", NULL);
 
-  launcher = ide_build_pipeline_create_launcher (pipeline, &error);
+  launcher = ide_pipeline_create_launcher (pipeline, &error);
 
   if (launcher == NULL)
     {
@@ -108,7 +108,7 @@ ide_autotools_autogen_stage_execute_async (IdeBuildStage       *stage,
       return;
     }
 
-  ide_build_stage_log_subprocess (stage, subprocess);
+  ide_pipeline_stage_log_subprocess (stage, subprocess);
 
   ide_subprocess_wait_check_async (subprocess,
                                    cancellable,
@@ -117,9 +117,9 @@ ide_autotools_autogen_stage_execute_async (IdeBuildStage       *stage,
 }
 
 static gboolean
-ide_autotools_autogen_stage_execute_finish (IdeBuildStage  *stage,
-                                            GAsyncResult   *result,
-                                            GError        **error)
+ide_autotools_autogen_stage_build_finish (IdePipelineStage  *stage,
+                                          GAsyncResult      *result,
+                                          GError           **error)
 {
   g_assert (IDE_IS_AUTOTOOLS_AUTOGEN_STAGE (stage));
   g_assert (IDE_IS_TASK (result));
@@ -160,18 +160,18 @@ static void
 ide_autotools_autogen_stage_class_init (IdeAutotoolsAutogenStageClass *klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
-  IdeBuildStageClass *stage_class = IDE_BUILD_STAGE_CLASS (klass);
+  IdePipelineStageClass *stage_class = IDE_PIPELINE_STAGE_CLASS (klass);
 
   object_class->finalize = ide_autotools_autogen_stage_finalize;
   object_class->set_property = ide_autotools_autogen_stage_set_property;
 
-  stage_class->execute_async = ide_autotools_autogen_stage_execute_async;
-  stage_class->execute_finish = ide_autotools_autogen_stage_execute_finish;
+  stage_class->build_async = ide_autotools_autogen_stage_build_async;
+  stage_class->build_finish = ide_autotools_autogen_stage_build_finish;
 
   properties [PROP_SRCDIR] =
     g_param_spec_string ("srcdir", NULL, NULL, NULL,
                          G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
-  
+
   g_object_class_install_properties (object_class, N_PROPS, properties);
 }
 
diff --git a/src/plugins/autotools/ide-autotools-autogen-stage.h 
b/src/plugins/autotools/ide-autotools-autogen-stage.h
index b3ef5d8c0..b878730d1 100644
--- a/src/plugins/autotools/ide-autotools-autogen-stage.h
+++ b/src/plugins/autotools/ide-autotools-autogen-stage.h
@@ -26,6 +26,6 @@ G_BEGIN_DECLS
 
 #define IDE_TYPE_AUTOTOOLS_AUTOGEN_STAGE (ide_autotools_autogen_stage_get_type())
 
-G_DECLARE_FINAL_TYPE (IdeAutotoolsAutogenStage, ide_autotools_autogen_stage, IDE, AUTOTOOLS_AUTOGEN_STAGE, 
IdeBuildStage)
+G_DECLARE_FINAL_TYPE (IdeAutotoolsAutogenStage, ide_autotools_autogen_stage, IDE, AUTOTOOLS_AUTOGEN_STAGE, 
IdePipelineStage)
 
 G_END_DECLS
diff --git a/src/plugins/autotools/ide-autotools-build-system.c 
b/src/plugins/autotools/ide-autotools-build-system.c
index 360d6134e..81b125cd8 100644
--- a/src/plugins/autotools/ide-autotools-build-system.c
+++ b/src/plugins/autotools/ide-autotools-build-system.c
@@ -196,19 +196,19 @@ static void
 invalidate_makecache_stage (gpointer data,
                             gpointer user_data)
 {
-  IdeBuildStage *stage = data;
+  IdePipelineStage *stage = data;
 
   if (IDE_IS_AUTOTOOLS_MAKECACHE_STAGE (stage))
-    ide_build_stage_set_completed (stage, FALSE);
+    ide_pipeline_stage_set_completed (stage, FALSE);
 }
 
 static void
 evict_makecache (IdeContext *context)
 {
   IdeBuildManager *build_manager = ide_build_manager_from_context (context);
-  IdeBuildPipeline *pipeline = ide_build_manager_get_pipeline (build_manager);
+  IdePipeline *pipeline = ide_build_manager_get_pipeline (build_manager);
 
-  ide_build_pipeline_foreach_stage (pipeline, invalidate_makecache_stage, NULL);
+  ide_pipeline_foreach_stage (pipeline, invalidate_makecache_stage, NULL);
 }
 
 static gboolean
@@ -332,7 +332,7 @@ find_makecache_stage (gpointer data,
                       gpointer user_data)
 {
   IdeMakecache **makecache = user_data;
-  IdeBuildStage *stage = data;
+  IdePipelineStage *stage = data;
 
   if (*makecache != NULL)
     return;
@@ -376,7 +376,7 @@ ide_autotools_build_system_get_build_flags_execute_cb (GObject      *object,
   g_autoptr(IdeTask) task = user_data;
   g_autoptr(GError) error = NULL;
   IdeMakecache *makecache = NULL;
-  IdeBuildPipeline *pipeline;
+  IdePipeline *pipeline;
   GCancellable *cancellable;
   GFile *file;
 
@@ -407,7 +407,7 @@ ide_autotools_build_system_get_build_flags_execute_cb (GObject      *object,
    * into the appropriate build target).
    */
 
-  ide_build_pipeline_foreach_stage (pipeline, find_makecache_stage, &makecache);
+  ide_pipeline_foreach_stage (pipeline, find_makecache_stage, &makecache);
 
   if (makecache != NULL)
     {
@@ -463,7 +463,7 @@ ide_autotools_build_system_get_build_flags_async (IdeBuildSystem      *build_sys
   build_manager = ide_build_manager_from_context (context);
 
   ide_build_manager_execute_async (build_manager,
-                                   IDE_BUILD_PHASE_CONFIGURE,
+                                   IDE_PIPELINE_PHASE_CONFIGURE,
                                    NULL,
                                    cancellable,
                                    ide_autotools_build_system_get_build_flags_execute_cb,
@@ -485,7 +485,7 @@ ide_autotools_build_system_get_build_flags_finish (IdeBuildSystem  *build_system
 
 static gchar *
 ide_autotools_build_system_get_builddir (IdeBuildSystem   *build_system,
-                                         IdeBuildPipeline *pipeline)
+                                         IdePipeline *pipeline)
 {
   IdeAutotoolsBuildSystem *self = (IdeAutotoolsBuildSystem *)build_system;
   g_autoptr(GFile) makefile = NULL;
@@ -494,7 +494,7 @@ ide_autotools_build_system_get_builddir (IdeBuildSystem   *build_system,
   GFile *workdir;
 
   g_assert (IDE_IS_AUTOTOOLS_BUILD_SYSTEM (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
   /*
    * If there is a Makefile in the build directory, then the project has been
diff --git a/src/plugins/autotools/ide-autotools-build-target-provider.c 
b/src/plugins/autotools/ide-autotools-build-target-provider.c
index 422dd13dd..a1d673f91 100644
--- a/src/plugins/autotools/ide-autotools-build-target-provider.c
+++ b/src/plugins/autotools/ide-autotools-build-target-provider.c
@@ -35,7 +35,7 @@ find_makecache_from_stage (gpointer data,
                            gpointer user_data)
 {
   IdeMakecache **makecache = user_data;
-  IdeBuildStage *stage = data;
+  IdePipelineStage *stage = data;
 
   if (*makecache != NULL)
     return;
@@ -79,7 +79,7 @@ ide_autotools_build_target_provider_get_targets_async (IdeBuildTargetProvider *p
   IdeAutotoolsBuildTargetProvider *self = (IdeAutotoolsBuildTargetProvider *)provider;
   g_autoptr(IdeTask) task = NULL;
   g_autoptr(GFile) builddir_file = NULL;
-  IdeBuildPipeline *pipeline;
+  IdePipeline *pipeline;
   IdeBuildManager *build_manager;
   IdeBuildSystem *build_system;
   IdeMakecache *makecache = NULL;
@@ -109,7 +109,7 @@ ide_autotools_build_target_provider_get_targets_async (IdeBuildTargetProvider *p
 
   build_manager = ide_build_manager_from_context (context);
   pipeline = ide_build_manager_get_pipeline (build_manager);
-  builddir = ide_build_pipeline_get_builddir (pipeline);
+  builddir = ide_pipeline_get_builddir (pipeline);
   builddir_file = g_file_new_for_path (builddir);
 
   /*
@@ -119,7 +119,7 @@ ide_autotools_build_target_provider_get_targets_async (IdeBuildTargetProvider *p
    * into the appropriate build target).
    */
 
-  ide_build_pipeline_foreach_stage (pipeline, find_makecache_from_stage, &makecache);
+  ide_pipeline_foreach_stage (pipeline, find_makecache_from_stage, &makecache);
 
   if (makecache == NULL)
     {
diff --git a/src/plugins/autotools/ide-autotools-make-stage.c 
b/src/plugins/autotools/ide-autotools-make-stage.c
index 7e0e09ad9..56788f8f8 100644
--- a/src/plugins/autotools/ide-autotools-make-stage.c
+++ b/src/plugins/autotools/ide-autotools-make-stage.c
@@ -24,7 +24,7 @@
 
 struct _IdeAutotoolsMakeStage
 {
-  IdeBuildStage  parent;
+  IdePipelineStage  parent;
 
   /*
    * If we discover "gmake", then this will be "gmake". If it is NULL then we
@@ -39,14 +39,14 @@ struct _IdeAutotoolsMakeStage
 
   /*
    * This is our primary build target. It will be run during the normal
-   * execute_async()/execute_finish() pair.
+   * build_async()/build_finish() pair.
    */
   gchar *target;
 
   /*
    * This is our chained build target. It is set if we found that we could
    * coallesce with the next build stage during pipeline execution.  It is
-   * cleared during execute_async() so that supplimental executions are
+   * cleared during build_async() so that supplimental executions are
    * unaffected.
    */
   gchar *chained_target;
@@ -72,13 +72,13 @@ enum {
   N_PROPS
 };
 
-G_DEFINE_TYPE (IdeAutotoolsMakeStage, ide_autotools_make_stage, IDE_TYPE_BUILD_STAGE)
+G_DEFINE_TYPE (IdeAutotoolsMakeStage, ide_autotools_make_stage, IDE_TYPE_PIPELINE_STAGE)
 
 static GParamSpec *properties [N_PROPS];
 
 static IdeSubprocessLauncher *
 create_launcher (IdeAutotoolsMakeStage  *self,
-                 IdeBuildPipeline       *pipeline,
+                 IdePipeline       *pipeline,
                  GCancellable           *cancellable,
                  const gchar            *make_target,
                  GError                **error)
@@ -86,13 +86,13 @@ create_launcher (IdeAutotoolsMakeStage  *self,
   g_autoptr(IdeSubprocessLauncher) launcher = NULL;
 
   g_assert (IDE_IS_AUTOTOOLS_MAKE_STAGE (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
   g_assert (make_target != NULL);
 
   if (self->make == NULL)
     {
-      IdeConfig *config = ide_build_pipeline_get_config (pipeline);
+      IdeConfig *config = ide_pipeline_get_config (pipeline);
       IdeRuntime *runtime = ide_config_get_runtime (config);
 
       if (ide_runtime_contains_program_in_path (runtime, "gmake", cancellable))
@@ -101,7 +101,7 @@ create_launcher (IdeAutotoolsMakeStage  *self,
         self->make = "make";
     }
 
-  if (NULL == (launcher = ide_build_pipeline_create_launcher (pipeline, error)))
+  if (NULL == (launcher = ide_pipeline_create_launcher (pipeline, error)))
     return NULL;
 
   ide_subprocess_launcher_set_flags (launcher,
@@ -171,8 +171,8 @@ ide_autotools_make_stage_wait_cb (GObject      *object,
 }
 
 static void
-ide_autotools_make_stage_execute_async (IdeBuildStage       *stage,
-                                        IdeBuildPipeline    *pipeline,
+ide_autotools_make_stage_build_async (IdePipelineStage       *stage,
+                                        IdePipeline    *pipeline,
                                         GCancellable        *cancellable,
                                         GAsyncReadyCallback  callback,
                                         gpointer             user_data)
@@ -189,11 +189,11 @@ ide_autotools_make_stage_execute_async (IdeBuildStage       *stage,
   IDE_ENTRY;
 
   g_assert (IDE_IS_AUTOTOOLS_MAKE_STAGE (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
 
   task = ide_task_new (self, cancellable, callback, user_data);
-  ide_task_set_source_tag (task, ide_autotools_make_stage_execute_async);
+  ide_task_set_source_tag (task, ide_autotools_make_stage_build_async);
 
   /* If we have a chained target, we just execute that instead */
   if (self->chained_target)
@@ -222,7 +222,7 @@ ide_autotools_make_stage_execute_async (IdeBuildStage       *stage,
   /* Log the process arguments to stdout */
   argv = ide_subprocess_launcher_get_argv (launcher);
   message = g_strjoinv (" ", (gchar **)argv);
-  ide_build_stage_log (stage, IDE_BUILD_LOG_STDOUT, message, -1);
+  ide_pipeline_stage_log (stage, IDE_BUILD_LOG_STDOUT, message, -1);
 
   subprocess = ide_subprocess_launcher_spawn (launcher, cancellable, &error);
 
@@ -232,7 +232,7 @@ ide_autotools_make_stage_execute_async (IdeBuildStage       *stage,
       IDE_EXIT;
     }
 
-  ide_build_stage_log_subprocess (stage, subprocess);
+  ide_pipeline_stage_log_subprocess (stage, subprocess);
 
   ide_subprocess_wait_check_async (subprocess,
                                    cancellable,
@@ -243,7 +243,7 @@ ide_autotools_make_stage_execute_async (IdeBuildStage       *stage,
 }
 
 static gboolean
-ide_autotools_make_stage_execute_finish (IdeBuildStage  *stage,
+ide_autotools_make_stage_build_finish (IdePipelineStage  *stage,
                                          GAsyncResult   *result,
                                          GError        **error)
 {
@@ -251,7 +251,7 @@ ide_autotools_make_stage_execute_finish (IdeBuildStage  *stage,
 
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_STAGE (stage));
+  g_assert (IDE_IS_PIPELINE_STAGE (stage));
   g_assert (IDE_IS_TASK (result));
 
   ret = ide_task_propagate_boolean (IDE_TASK (result), error);
@@ -260,8 +260,8 @@ ide_autotools_make_stage_execute_finish (IdeBuildStage  *stage,
 }
 
 static void
-ide_autotools_make_stage_clean_async (IdeBuildStage       *stage,
-                                      IdeBuildPipeline    *pipeline,
+ide_autotools_make_stage_clean_async (IdePipelineStage       *stage,
+                                      IdePipeline    *pipeline,
                                       GCancellable        *cancellable,
                                       GAsyncReadyCallback  callback,
                                       gpointer             user_data)
@@ -277,7 +277,7 @@ ide_autotools_make_stage_clean_async (IdeBuildStage       *stage,
   IDE_ENTRY;
 
   g_assert (IDE_IS_AUTOTOOLS_MAKE_STAGE (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
 
   task = ide_task_new (self, cancellable, callback, user_data);
@@ -300,7 +300,7 @@ ide_autotools_make_stage_clean_async (IdeBuildStage       *stage,
   /* Log the process arguments to stdout */
   argv = ide_subprocess_launcher_get_argv (launcher);
   message = g_strjoinv (" ", (gchar **)argv);
-  ide_build_stage_log (stage, IDE_BUILD_LOG_STDOUT, message, -1);
+  ide_pipeline_stage_log (stage, IDE_BUILD_LOG_STDOUT, message, -1);
 
   subprocess = ide_subprocess_launcher_spawn (launcher, cancellable, &error);
 
@@ -310,7 +310,7 @@ ide_autotools_make_stage_clean_async (IdeBuildStage       *stage,
       IDE_EXIT;
     }
 
-  ide_build_stage_log_subprocess (stage, subprocess);
+  ide_pipeline_stage_log_subprocess (stage, subprocess);
 
   ide_subprocess_wait_check_async (subprocess,
                                    cancellable,
@@ -321,7 +321,7 @@ ide_autotools_make_stage_clean_async (IdeBuildStage       *stage,
 }
 
 static gboolean
-ide_autotools_make_stage_clean_finish (IdeBuildStage  *stage,
+ide_autotools_make_stage_clean_finish (IdePipelineStage  *stage,
                                        GAsyncResult   *result,
                                        GError        **error)
 {
@@ -329,7 +329,7 @@ ide_autotools_make_stage_clean_finish (IdeBuildStage  *stage,
 
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_STAGE (stage));
+  g_assert (IDE_IS_PIPELINE_STAGE (stage));
   g_assert (IDE_IS_TASK (result));
 
   ret = ide_task_propagate_boolean (IDE_TASK (result), error);
@@ -338,31 +338,31 @@ ide_autotools_make_stage_clean_finish (IdeBuildStage  *stage,
 }
 
 static void
-ide_autotools_make_stage_query (IdeBuildStage    *stage,
-                                IdeBuildPipeline *pipeline,
+ide_autotools_make_stage_query (IdePipelineStage    *stage,
+                                IdePipeline *pipeline,
                                 GPtrArray        *targets,
                                 GCancellable     *cancellable)
 {
   IDE_ENTRY;
 
   g_return_if_fail (IDE_IS_AUTOTOOLS_MAKE_STAGE (stage));
-  g_return_if_fail (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_return_if_fail (IDE_IS_PIPELINE (pipeline));
   g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable));
 
   /* We always defer to make for completed state */
-  ide_build_stage_set_completed (stage, FALSE);
+  ide_pipeline_stage_set_completed (stage, FALSE);
 
   IDE_EXIT;
 }
 
 static gboolean
-ide_autotools_make_stage_chain (IdeBuildStage *stage,
-                                IdeBuildStage *next)
+ide_autotools_make_stage_chain (IdePipelineStage *stage,
+                                IdePipelineStage *next)
 {
   IdeAutotoolsMakeStage *self = (IdeAutotoolsMakeStage *)stage;
 
   g_assert (IDE_IS_AUTOTOOLS_MAKE_STAGE (self));
-  g_assert (IDE_IS_BUILD_STAGE (next));
+  g_assert (IDE_IS_PIPELINE_STAGE (next));
 
   if (IDE_IS_AUTOTOOLS_MAKE_STAGE (next))
     {
@@ -453,14 +453,14 @@ static void
 ide_autotools_make_stage_class_init (IdeAutotoolsMakeStageClass *klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
-  IdeBuildStageClass *build_stage_class = IDE_BUILD_STAGE_CLASS (klass);
+  IdePipelineStageClass *build_stage_class = IDE_PIPELINE_STAGE_CLASS (klass);
 
   object_class->finalize = ide_autotools_make_stage_finalize;
   object_class->get_property = ide_autotools_make_stage_get_property;
   object_class->set_property = ide_autotools_make_stage_set_property;
 
-  build_stage_class->execute_async = ide_autotools_make_stage_execute_async;
-  build_stage_class->execute_finish = ide_autotools_make_stage_execute_finish;
+  build_stage_class->build_async = ide_autotools_make_stage_build_async;
+  build_stage_class->build_finish = ide_autotools_make_stage_build_finish;
   build_stage_class->clean_async = ide_autotools_make_stage_clean_async;
   build_stage_class->clean_finish = ide_autotools_make_stage_clean_finish;
   build_stage_class->query = ide_autotools_make_stage_query;
diff --git a/src/plugins/autotools/ide-autotools-make-stage.h 
b/src/plugins/autotools/ide-autotools-make-stage.h
index fca10a50d..5d5ff0f97 100644
--- a/src/plugins/autotools/ide-autotools-make-stage.h
+++ b/src/plugins/autotools/ide-autotools-make-stage.h
@@ -26,6 +26,6 @@ G_BEGIN_DECLS
 
 #define IDE_TYPE_AUTOTOOLS_MAKE_STAGE (ide_autotools_make_stage_get_type())
 
-G_DECLARE_FINAL_TYPE (IdeAutotoolsMakeStage, ide_autotools_make_stage, IDE, AUTOTOOLS_MAKE_STAGE, 
IdeBuildStage)
+G_DECLARE_FINAL_TYPE (IdeAutotoolsMakeStage, ide_autotools_make_stage, IDE, AUTOTOOLS_MAKE_STAGE, 
IdePipelineStage)
 
 G_END_DECLS
diff --git a/src/plugins/autotools/ide-autotools-makecache-stage.c 
b/src/plugins/autotools/ide-autotools-makecache-stage.c
index 67da87413..0f367e745 100644
--- a/src/plugins/autotools/ide-autotools-makecache-stage.c
+++ b/src/plugins/autotools/ide-autotools-makecache-stage.c
@@ -26,14 +26,14 @@
 
 struct _IdeAutotoolsMakecacheStage
 {
-  IdeBuildStageLauncher  parent_instance;
+  IdePipelineStageLauncher  parent_instance;
 
   IdeMakecache          *makecache;
   IdeRuntime            *runtime;
   GFile                 *cache_file;
 };
 
-G_DEFINE_TYPE (IdeAutotoolsMakecacheStage, ide_autotools_makecache_stage, IDE_TYPE_BUILD_STAGE_LAUNCHER)
+G_DEFINE_TYPE (IdeAutotoolsMakecacheStage, ide_autotools_makecache_stage, IDE_TYPE_PIPELINE_STAGE_LAUNCHER)
 
 static void
 ide_autotools_makecache_stage_makecache_cb (GObject      *object,
@@ -72,12 +72,12 @@ ide_autotools_makecache_stage_makecache_cb (GObject      *object,
 }
 
 static void
-ide_autotools_makecache_stage_execute_cb (GObject      *object,
+ide_autotools_makecache_stage_build_cb (GObject      *object,
                                           GAsyncResult *result,
                                           gpointer      user_data)
 {
   IdeAutotoolsMakecacheStage *self = (IdeAutotoolsMakecacheStage *)object;
-  IdeBuildStage *stage = (IdeBuildStage *)object;
+  IdePipelineStage *stage = (IdePipelineStage *)object;
   g_autoptr(IdeTask) task = user_data;
   g_autoptr(GError) error = NULL;
   GCancellable *cancellable;
@@ -89,7 +89,7 @@ ide_autotools_makecache_stage_execute_cb (GObject      *object,
   g_assert (G_IS_ASYNC_RESULT (result));
   g_assert (IDE_IS_TASK (task));
 
-  if (!IDE_BUILD_STAGE_CLASS (ide_autotools_makecache_stage_parent_class)->execute_finish (stage, result, 
&error))
+  if (!IDE_PIPELINE_STAGE_CLASS (ide_autotools_makecache_stage_parent_class)->build_finish (stage, result, 
&error))
     {
       g_warning ("%s", error->message);
       ide_task_return_error (task, g_steal_pointer (&error));
@@ -114,8 +114,8 @@ ide_autotools_makecache_stage_execute_cb (GObject      *object,
 }
 
 static void
-ide_autotools_makecache_stage_execute_async (IdeBuildStage       *stage,
-                                             IdeBuildPipeline    *pipeline,
+ide_autotools_makecache_stage_build_async (IdePipelineStage       *stage,
+                                             IdePipeline    *pipeline,
                                              GCancellable        *cancellable,
                                              GAsyncReadyCallback  callback,
                                              gpointer             user_data)
@@ -126,29 +126,29 @@ ide_autotools_makecache_stage_execute_async (IdeBuildStage       *stage,
   IDE_ENTRY;
 
   g_assert (IDE_IS_AUTOTOOLS_MAKECACHE_STAGE (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
 
   task = ide_task_new (self, cancellable, callback, user_data);
-  ide_task_set_source_tag (task, ide_autotools_makecache_stage_execute_async);
+  ide_task_set_source_tag (task, ide_autotools_makecache_stage_build_async);
 
   /*
-   * First we need to execute our launcher (performed by our parent class).
+   * First we need to build our launcher (performed by our parent class).
    * Only after that has succeeded to we move on to loading the makecache file
    * by mmap()'ing the generated make output.
    */
 
-  IDE_BUILD_STAGE_CLASS (ide_autotools_makecache_stage_parent_class)->execute_async (stage,
-                                                                                     pipeline,
-                                                                                     cancellable,
-                                                                                     
ide_autotools_makecache_stage_execute_cb,
-                                                                                     g_steal_pointer 
(&task));
+  IDE_PIPELINE_STAGE_CLASS (ide_autotools_makecache_stage_parent_class)->build_async (stage,
+                                                                                        pipeline,
+                                                                                        cancellable,
+                                                                                        
ide_autotools_makecache_stage_build_cb,
+                                                                                        g_steal_pointer 
(&task));
 
   IDE_EXIT;
 }
 
 static gboolean
-ide_autotools_makecache_stage_execute_finish (IdeBuildStage  *stage,
+ide_autotools_makecache_stage_build_finish (IdePipelineStage  *stage,
                                               GAsyncResult   *result,
                                               GError        **error)
 {
@@ -184,24 +184,24 @@ static void
 ide_autotools_makecache_stage_class_init (IdeAutotoolsMakecacheStageClass *klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
-  IdeBuildStageClass *build_stage_class = IDE_BUILD_STAGE_CLASS (klass);
+  IdePipelineStageClass *build_stage_class = IDE_PIPELINE_STAGE_CLASS (klass);
 
   object_class->finalize = ide_autotools_makecache_stage_finalize;
 
-  build_stage_class->execute_async = ide_autotools_makecache_stage_execute_async;
-  build_stage_class->execute_finish = ide_autotools_makecache_stage_execute_finish;
+  build_stage_class->build_async = ide_autotools_makecache_stage_build_async;
+  build_stage_class->build_finish = ide_autotools_makecache_stage_build_finish;
 }
 
 static void
 ide_autotools_makecache_stage_init (IdeAutotoolsMakecacheStage *self)
 {
-  ide_build_stage_set_name (IDE_BUILD_STAGE (self), _("Building cache…"));
-  ide_build_stage_launcher_set_use_pty (IDE_BUILD_STAGE_LAUNCHER (self), FALSE);
+  ide_pipeline_stage_set_name (IDE_PIPELINE_STAGE (self), _("Building cache…"));
+  ide_pipeline_stage_launcher_set_use_pty (IDE_PIPELINE_STAGE_LAUNCHER (self), FALSE);
 }
 
-IdeBuildStage *
-ide_autotools_makecache_stage_new_for_pipeline (IdeBuildPipeline  *pipeline,
-                                                GError           **error)
+IdePipelineStage *
+ide_autotools_makecache_stage_new_for_pipeline (IdePipeline  *pipeline,
+                                                GError      **error)
 {
   g_autoptr(IdeAutotoolsMakecacheStage) stage = NULL;
   g_autoptr(IdeSubprocessLauncher) launcher = NULL;
@@ -212,17 +212,17 @@ ide_autotools_makecache_stage_new_for_pipeline (IdeBuildPipeline  *pipeline,
 
   IDE_ENTRY;
 
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (pipeline), NULL);
+  g_return_val_if_fail (IDE_IS_PIPELINE (pipeline), NULL);
 
-  config = ide_build_pipeline_get_config (pipeline);
+  config = ide_pipeline_get_config (pipeline);
   runtime = ide_config_get_runtime (config);
 
-  cache_path = ide_build_pipeline_build_builddir_path (pipeline, "Makecache", NULL);
+  cache_path = ide_pipeline_build_builddir_path (pipeline, "Makecache", NULL);
 
   if (ide_runtime_contains_program_in_path (runtime, "gmake", NULL))
     make = "gmake";
 
-  if (NULL == (launcher = ide_build_pipeline_create_launcher (pipeline, error)))
+  if (NULL == (launcher = ide_pipeline_create_launcher (pipeline, error)))
     IDE_RETURN (NULL);
 
   ide_subprocess_launcher_push_argv (launcher, make);
@@ -235,14 +235,14 @@ ide_autotools_makecache_stage_new_for_pipeline (IdeBuildPipeline  *pipeline,
                         "ignore-exit-status", TRUE,
                         NULL);
 
-  ide_build_stage_set_stdout_path (IDE_BUILD_STAGE (stage), cache_path);
+  ide_pipeline_stage_set_stdout_path (IDE_PIPELINE_STAGE (stage), cache_path);
 
-  g_assert_cmpint (ide_build_stage_launcher_get_ignore_exit_status (IDE_BUILD_STAGE_LAUNCHER (stage)), ==, 
TRUE);
+  g_assert_cmpint (ide_pipeline_stage_launcher_get_ignore_exit_status (IDE_PIPELINE_STAGE_LAUNCHER (stage)), 
==, TRUE);
 
   stage->runtime = g_object_ref (runtime);
   stage->cache_file = g_file_new_for_path (cache_path);
 
-  return IDE_BUILD_STAGE (g_steal_pointer (&stage));
+  return IDE_PIPELINE_STAGE (g_steal_pointer (&stage));
 }
 
 IdeMakecache *
diff --git a/src/plugins/autotools/ide-autotools-makecache-stage.h 
b/src/plugins/autotools/ide-autotools-makecache-stage.h
index 98b6a1d55..b4d1c2b5f 100644
--- a/src/plugins/autotools/ide-autotools-makecache-stage.h
+++ b/src/plugins/autotools/ide-autotools-makecache-stage.h
@@ -28,9 +28,9 @@ G_BEGIN_DECLS
 
 #define IDE_TYPE_AUTOTOOLS_MAKECACHE_STAGE (ide_autotools_makecache_stage_get_type())
 
-G_DECLARE_FINAL_TYPE (IdeAutotoolsMakecacheStage, ide_autotools_makecache_stage, IDE, 
AUTOTOOLS_MAKECACHE_STAGE, IdeBuildStageLauncher)
+G_DECLARE_FINAL_TYPE (IdeAutotoolsMakecacheStage, ide_autotools_makecache_stage, IDE, 
AUTOTOOLS_MAKECACHE_STAGE, IdePipelineStageLauncher)
 
-IdeBuildStage *ide_autotools_makecache_stage_new_for_pipeline (IdeBuildPipeline            *pipeline,
+IdePipelineStage *ide_autotools_makecache_stage_new_for_pipeline (IdePipeline            *pipeline,
                                                                GError                     **error);
 IdeMakecache  *ide_autotools_makecache_stage_get_makecache    (IdeAutotoolsMakecacheStage  *self);
 
diff --git a/src/plugins/autotools/ide-autotools-pipeline-addin.c 
b/src/plugins/autotools/ide-autotools-pipeline-addin.c
index 538df81ee..cf0325637 100644
--- a/src/plugins/autotools/ide-autotools-pipeline-addin.c
+++ b/src/plugins/autotools/ide-autotools-pipeline-addin.c
@@ -30,21 +30,21 @@
 
 static gboolean
 register_autoreconf_stage (IdeAutotoolsPipelineAddin  *self,
-                           IdeBuildPipeline           *pipeline,
+                           IdePipeline           *pipeline,
                            GError                    **error)
 {
   g_autofree gchar *configure_path = NULL;
-  g_autoptr(IdeBuildStage) stage = NULL;
+  g_autoptr(IdePipelineStage) stage = NULL;
   const gchar *srcdir;
   gboolean completed;
   guint stage_id;
 
   g_assert (IDE_IS_AUTOTOOLS_PIPELINE_ADDIN (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
-  configure_path = ide_build_pipeline_build_srcdir_path (pipeline, "configure", NULL);
+  configure_path = ide_pipeline_build_srcdir_path (pipeline, "configure", NULL);
   completed = g_file_test (configure_path, G_FILE_TEST_IS_REGULAR);
-  srcdir = ide_build_pipeline_get_srcdir (pipeline);
+  srcdir = ide_pipeline_get_srcdir (pipeline);
 
   stage = g_object_new (IDE_TYPE_AUTOTOOLS_AUTOGEN_STAGE,
                         "name", _("Bootstrapping build system"),
@@ -52,9 +52,9 @@ register_autoreconf_stage (IdeAutotoolsPipelineAddin  *self,
                         "srcdir", srcdir,
                         NULL);
 
-  stage_id = ide_build_pipeline_attach (pipeline, IDE_BUILD_PHASE_AUTOGEN, 0, stage);
+  stage_id = ide_pipeline_attach (pipeline, IDE_PIPELINE_PHASE_AUTOGEN, 0, stage);
 
-  ide_build_pipeline_addin_track (IDE_BUILD_PIPELINE_ADDIN (self), stage_id);
+  ide_pipeline_addin_track (IDE_PIPELINE_ADDIN (self), stage_id);
 
   return TRUE;
 }
@@ -93,10 +93,10 @@ compare_mtime (const gchar *path_a,
 
 static void
 check_configure_status (IdeAutotoolsPipelineAddin *self,
-                        IdeBuildPipeline          *pipeline,
+                        IdePipeline          *pipeline,
                         GPtrArray                 *targets,
                         GCancellable              *cancellable,
-                        IdeBuildStage             *stage)
+                        IdePipelineStage             *stage)
 {
   g_autofree gchar *configure_ac = NULL;
   g_autofree gchar *configure = NULL;
@@ -106,14 +106,14 @@ check_configure_status (IdeAutotoolsPipelineAddin *self,
   IDE_ENTRY;
 
   g_assert (IDE_IS_AUTOTOOLS_PIPELINE_ADDIN (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
-  g_assert (IDE_IS_BUILD_STAGE (stage));
+  g_assert (IDE_IS_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE_STAGE (stage));
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
 
-  configure = ide_build_pipeline_build_srcdir_path (pipeline, "configure", NULL);
-  configure_ac = ide_build_pipeline_build_srcdir_path (pipeline, "configure.ac", NULL);
-  config_status = ide_build_pipeline_build_builddir_path (pipeline, "config.status", NULL);
-  makefile = ide_build_pipeline_build_builddir_path (pipeline, "Makefile", NULL);
+  configure = ide_pipeline_build_srcdir_path (pipeline, "configure", NULL);
+  configure_ac = ide_pipeline_build_srcdir_path (pipeline, "configure.ac", NULL);
+  config_status = ide_pipeline_build_builddir_path (pipeline, "config.status", NULL);
+  makefile = ide_pipeline_build_builddir_path (pipeline, "Makefile", NULL);
 
   IDE_TRACE_MSG (" configure.ac is at %s", configure_ac);
   IDE_TRACE_MSG (" configure is at %s", configure);
@@ -132,7 +132,7 @@ check_configure_status (IdeAutotoolsPipelineAddin *self,
       !g_file_test (config_status, G_FILE_TEST_IS_REGULAR) ||
       !g_file_test (makefile, G_FILE_TEST_IS_REGULAR))
     {
-      ide_build_stage_set_completed (stage, FALSE);
+      ide_pipeline_stage_set_completed (stage, FALSE);
       IDE_EXIT;
     }
 
@@ -149,11 +149,11 @@ check_configure_status (IdeAutotoolsPipelineAddin *self,
        * if the configure args match what we expect. But this is a bit more
        * complicated than simply a string comparison.
        */
-      ide_build_stage_set_completed (stage, TRUE);
+      ide_pipeline_stage_set_completed (stage, TRUE);
       IDE_EXIT;
     }
 
-  ide_build_stage_set_completed (stage, FALSE);
+  ide_pipeline_stage_set_completed (stage, FALSE);
 
   IDE_EXIT;
 }
@@ -197,11 +197,11 @@ add_compiler_env_variables (gpointer key,
 
 static gboolean
 register_configure_stage (IdeAutotoolsPipelineAddin  *self,
-                          IdeBuildPipeline           *pipeline,
+                          IdePipeline           *pipeline,
                           GError                    **error)
 {
   g_autoptr(IdeSubprocessLauncher) launcher = NULL;
-  g_autoptr(IdeBuildStage) stage = NULL;
+  g_autoptr(IdePipelineStage) stage = NULL;
   IdeConfig *configuration;
   IdeToolchain *toolchain;
   g_autofree gchar *configure_path = NULL;
@@ -212,9 +212,9 @@ register_configure_stage (IdeAutotoolsPipelineAddin  *self,
   guint stage_id;
 
   g_assert (IDE_IS_AUTOTOOLS_PIPELINE_ADDIN (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
-  if (NULL == (launcher = ide_build_pipeline_create_launcher (pipeline, error)))
+  if (NULL == (launcher = ide_pipeline_create_launcher (pipeline, error)))
     return FALSE;
 
   ide_subprocess_launcher_set_flags (launcher,
@@ -222,12 +222,12 @@ register_configure_stage (IdeAutotoolsPipelineAddin  *self,
                                      G_SUBPROCESS_FLAGS_STDOUT_PIPE |
                                      G_SUBPROCESS_FLAGS_STDERR_PIPE);
 
-  configure_path = ide_build_pipeline_build_srcdir_path (pipeline, "configure", NULL);
+  configure_path = ide_pipeline_build_srcdir_path (pipeline, "configure", NULL);
   ide_subprocess_launcher_push_argv (launcher, configure_path);
 
   /* --host=triplet */
-  configuration = ide_build_pipeline_get_config (pipeline);
-  toolchain = ide_build_pipeline_get_toolchain (pipeline);
+  configuration = ide_pipeline_get_config (pipeline);
+  toolchain = ide_pipeline_get_toolchain (pipeline);
   triplet = ide_toolchain_get_host_triplet (toolchain);
   host_arg = g_strdup_printf ("--host=%s", ide_triplet_get_full_name (triplet));
   ide_subprocess_launcher_push_argv (launcher, host_arg);
@@ -285,7 +285,7 @@ register_configure_stage (IdeAutotoolsPipelineAddin  *self,
         ide_subprocess_launcher_push_argv (launcher, argv[i]);
     }
 
-  stage = g_object_new (IDE_TYPE_BUILD_STAGE_LAUNCHER,
+  stage = g_object_new (IDE_TYPE_PIPELINE_STAGE_LAUNCHER,
                         "name", _("Configuring project"),
                         "launcher", launcher,
                         NULL);
@@ -309,30 +309,30 @@ register_configure_stage (IdeAutotoolsPipelineAddin  *self,
                            self,
                            G_CONNECT_SWAPPED);
 
-  stage_id = ide_build_pipeline_attach (pipeline, IDE_BUILD_PHASE_CONFIGURE, 0, stage);
+  stage_id = ide_pipeline_attach (pipeline, IDE_PIPELINE_PHASE_CONFIGURE, 0, stage);
 
-  ide_build_pipeline_addin_track (IDE_BUILD_PIPELINE_ADDIN (self), stage_id);
+  ide_pipeline_addin_track (IDE_PIPELINE_ADDIN (self), stage_id);
 
   return TRUE;
 }
 
 static gboolean
 register_make_stage (IdeAutotoolsPipelineAddin  *self,
-                     IdeBuildPipeline           *pipeline,
-                     IdeBuildPhase               phase,
+                     IdePipeline           *pipeline,
+                     IdePipelinePhase               phase,
                      GError                    **error,
                      const gchar                *target,
                      const gchar                *clean_target)
 {
-  g_autoptr(IdeBuildStage) stage = NULL;
+  g_autoptr(IdePipelineStage) stage = NULL;
   IdeConfig *config;
   guint stage_id;
   gint parallel;
 
   g_assert (IDE_IS_AUTOTOOLS_PIPELINE_ADDIN (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
-  config = ide_build_pipeline_get_config (pipeline);
+  config = ide_pipeline_get_config (pipeline);
   parallel = ide_config_get_parallelism (config);
 
   stage = g_object_new (IDE_TYPE_AUTOTOOLS_MAKE_STAGE,
@@ -342,40 +342,40 @@ register_make_stage (IdeAutotoolsPipelineAddin  *self,
                         "target", target,
                         NULL);
 
-  stage_id = ide_build_pipeline_attach (pipeline, phase, 0, stage);
-  ide_build_pipeline_addin_track (IDE_BUILD_PIPELINE_ADDIN (self), stage_id);
+  stage_id = ide_pipeline_attach (pipeline, phase, 0, stage);
+  ide_pipeline_addin_track (IDE_PIPELINE_ADDIN (self), stage_id);
 
   return TRUE;
 }
 
 static gboolean
 register_makecache_stage (IdeAutotoolsPipelineAddin  *self,
-                          IdeBuildPipeline           *pipeline,
+                          IdePipeline           *pipeline,
                           GError                    **error)
 {
-  g_autoptr(IdeBuildStage) stage = NULL;
+  g_autoptr(IdePipelineStage) stage = NULL;
   guint stage_id;
 
   g_assert (IDE_IS_AUTOTOOLS_PIPELINE_ADDIN (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
   if (NULL == (stage = ide_autotools_makecache_stage_new_for_pipeline (pipeline, error)))
     return FALSE;
 
-  ide_build_stage_set_name (stage, _("Caching build commands"));
+  ide_pipeline_stage_set_name (stage, _("Caching build commands"));
 
-  stage_id = ide_build_pipeline_attach (pipeline,
-                                        IDE_BUILD_PHASE_CONFIGURE | IDE_BUILD_PHASE_AFTER,
+  stage_id = ide_pipeline_attach (pipeline,
+                                        IDE_PIPELINE_PHASE_CONFIGURE | IDE_PIPELINE_PHASE_AFTER,
                                         0,
                                         stage);
-  ide_build_pipeline_addin_track (IDE_BUILD_PIPELINE_ADDIN (self), stage_id);
+  ide_pipeline_addin_track (IDE_PIPELINE_ADDIN (self), stage_id);
 
   return TRUE;
 }
 
 static void
-ide_autotools_pipeline_addin_load (IdeBuildPipelineAddin *addin,
-                                   IdeBuildPipeline      *pipeline)
+ide_autotools_pipeline_addin_load (IdePipelineAddin *addin,
+                                   IdePipeline      *pipeline)
 {
   IdeAutotoolsPipelineAddin *self = (IdeAutotoolsPipelineAddin *)addin;
   g_autoptr(GError) error = NULL;
@@ -383,7 +383,7 @@ ide_autotools_pipeline_addin_load (IdeBuildPipelineAddin *addin,
   IdeContext *context;
 
   g_assert (IDE_IS_AUTOTOOLS_PIPELINE_ADDIN (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
   context = ide_object_get_context (IDE_OBJECT (addin));
   build_system = ide_build_system_from_context (context);
@@ -394,8 +394,8 @@ ide_autotools_pipeline_addin_load (IdeBuildPipelineAddin *addin,
   if (!register_autoreconf_stage (self, pipeline, &error) ||
       !register_configure_stage (self, pipeline, &error) ||
       !register_makecache_stage (self, pipeline, &error) ||
-      !register_make_stage (self, pipeline, IDE_BUILD_PHASE_BUILD, &error, "all", "clean") ||
-      !register_make_stage (self, pipeline, IDE_BUILD_PHASE_INSTALL, &error, "install", NULL))
+      !register_make_stage (self, pipeline, IDE_PIPELINE_PHASE_BUILD, &error, "all", "clean") ||
+      !register_make_stage (self, pipeline, IDE_PIPELINE_PHASE_INSTALL, &error, "install", NULL))
     {
       g_assert (error != NULL);
       g_warning ("Failed to create autotools launcher: %s", error->message);
@@ -406,7 +406,7 @@ ide_autotools_pipeline_addin_load (IdeBuildPipelineAddin *addin,
 /* GObject Boilerplate */
 
 static void
-addin_iface_init (IdeBuildPipelineAddinInterface *iface)
+addin_iface_init (IdePipelineAddinInterface *iface)
 {
   iface->load = ide_autotools_pipeline_addin_load;
 }
@@ -414,7 +414,7 @@ addin_iface_init (IdeBuildPipelineAddinInterface *iface)
 struct _IdeAutotoolsPipelineAddin { IdeObject parent; };
 
 G_DEFINE_TYPE_WITH_CODE (IdeAutotoolsPipelineAddin, ide_autotools_pipeline_addin, IDE_TYPE_OBJECT,
-                         G_IMPLEMENT_INTERFACE (IDE_TYPE_BUILD_PIPELINE_ADDIN, addin_iface_init))
+                         G_IMPLEMENT_INTERFACE (IDE_TYPE_PIPELINE_ADDIN, addin_iface_init))
 
 static void
 ide_autotools_pipeline_addin_class_init (IdeAutotoolsPipelineAddinClass *klass)
diff --git a/src/plugins/buildconfig/buildconfig-plugin.c b/src/plugins/buildconfig/buildconfig-plugin.c
index 11bbba0c8..19dcf8e67 100644
--- a/src/plugins/buildconfig/buildconfig-plugin.c
+++ b/src/plugins/buildconfig/buildconfig-plugin.c
@@ -35,6 +35,6 @@ _gbp_buildconfig_register_types (PeasObjectModule *module)
                                               IDE_TYPE_CONFIG_PROVIDER,
                                               IDE_TYPE_BUILDCONFIG_CONFIG_PROVIDER);
   peas_object_module_register_extension_type (module,
-                                              IDE_TYPE_BUILD_PIPELINE_ADDIN,
+                                              IDE_TYPE_PIPELINE_ADDIN,
                                               IDE_TYPE_BUILDCONFIG_PIPELINE_ADDIN);
 }
diff --git a/src/plugins/buildconfig/ide-buildconfig-pipeline-addin.c 
b/src/plugins/buildconfig/ide-buildconfig-pipeline-addin.c
index 31c88a1b7..99d8e98cb 100644
--- a/src/plugins/buildconfig/ide-buildconfig-pipeline-addin.c
+++ b/src/plugins/buildconfig/ide-buildconfig-pipeline-addin.c
@@ -29,9 +29,9 @@
 #include "ide-buildconfig-pipeline-addin.h"
 
 static void
-add_command (IdeBuildPipelineAddin  *addin,
-             IdeBuildPipeline       *pipeline,
-             IdeBuildPhase           phase,
+add_command (IdePipelineAddin  *addin,
+             IdePipeline       *pipeline,
+             IdePipelinePhase           phase,
              gint                    priority,
              const gchar            *command_text,
              gchar                 **env)
@@ -48,7 +48,7 @@ add_command (IdeBuildPipelineAddin  *addin,
       return;
     }
 
-  launcher = ide_build_pipeline_create_launcher (pipeline, NULL);
+  launcher = ide_pipeline_create_launcher (pipeline, NULL);
 
   if (launcher == NULL)
     {
@@ -61,13 +61,13 @@ add_command (IdeBuildPipelineAddin  *addin,
 
   ide_subprocess_launcher_set_environ (launcher, (const gchar * const *)env);
 
-  stage_id = ide_build_pipeline_attach_launcher (pipeline, phase, priority, launcher);
-  ide_build_pipeline_addin_track (addin, stage_id);
+  stage_id = ide_pipeline_attach_launcher (pipeline, phase, priority, launcher);
+  ide_pipeline_addin_track (addin, stage_id);
 }
 
 static void
-ide_buildconfig_pipeline_addin_load (IdeBuildPipelineAddin *addin,
-                                     IdeBuildPipeline      *pipeline)
+ide_buildconfig_pipeline_addin_load (IdePipelineAddin *addin,
+                                     IdePipeline      *pipeline)
 {
   const gchar * const *prebuild;
   const gchar * const *postbuild;
@@ -77,9 +77,9 @@ ide_buildconfig_pipeline_addin_load (IdeBuildPipelineAddin *addin,
   IDE_ENTRY;
 
   g_assert (IDE_IS_BUILDCONFIG_PIPELINE_ADDIN (addin));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
-  config = ide_build_pipeline_get_config (pipeline);
+  config = ide_pipeline_get_config (pipeline);
 
   if (!IDE_IS_BUILDCONFIG_CONFIG (config))
     return;
@@ -92,26 +92,26 @@ ide_buildconfig_pipeline_addin_load (IdeBuildPipelineAddin *addin,
   if (prebuild != NULL)
     {
       for (guint i = 0; prebuild[i]; i++)
-        add_command (addin, pipeline, IDE_BUILD_PHASE_BUILD|IDE_BUILD_PHASE_BEFORE, i, prebuild[i], env);
+        add_command (addin, pipeline, IDE_PIPELINE_PHASE_BUILD|IDE_PIPELINE_PHASE_BEFORE, i, prebuild[i], 
env);
     }
 
   if (postbuild != NULL)
     {
       for (guint i = 0; postbuild[i]; i++)
-        add_command (addin, pipeline, IDE_BUILD_PHASE_BUILD|IDE_BUILD_PHASE_AFTER, i, postbuild[i], env);
+        add_command (addin, pipeline, IDE_PIPELINE_PHASE_BUILD|IDE_PIPELINE_PHASE_AFTER, i, postbuild[i], 
env);
     }
 
   IDE_EXIT;
 }
 
 static void
-pipeline_addin_init (IdeBuildPipelineAddinInterface *iface)
+pipeline_addin_init (IdePipelineAddinInterface *iface)
 {
   iface->load = ide_buildconfig_pipeline_addin_load;
 }
 
 struct _IdeBuildconfigPipelineAddin { IdeObject parent_instance; };
 G_DEFINE_TYPE_EXTENDED (IdeBuildconfigPipelineAddin, ide_buildconfig_pipeline_addin, IDE_TYPE_OBJECT, 0,
-                        G_IMPLEMENT_INTERFACE (IDE_TYPE_BUILD_PIPELINE_ADDIN, pipeline_addin_init))
+                        G_IMPLEMENT_INTERFACE (IDE_TYPE_PIPELINE_ADDIN, pipeline_addin_init))
 static void ide_buildconfig_pipeline_addin_class_init (IdeBuildconfigPipelineAddinClass *klass) { }
 static void ide_buildconfig_pipeline_addin_init (IdeBuildconfigPipelineAddin *self) { }
diff --git a/src/plugins/buildui/gbp-buildui-log-pane.c b/src/plugins/buildui/gbp-buildui-log-pane.c
index 7bdab1908..d378e102b 100644
--- a/src/plugins/buildui/gbp-buildui-log-pane.c
+++ b/src/plugins/buildui/gbp-buildui-log-pane.c
@@ -33,7 +33,7 @@ struct _GbpBuilduiLogPane
 {
   IdePane            parent_instance;
 
-  IdeBuildPipeline  *pipeline;
+  IdePipeline  *pipeline;
 
   GtkScrollbar      *scrollbar;
   IdeTerminal       *terminal;
@@ -79,21 +79,21 @@ gbp_buildui_log_pane_log_observer (IdeBuildLogStream  stream,
 static void
 gbp_buildui_log_pane_notify_pty (GbpBuilduiLogPane *self,
                                  GParamSpec        *pspec,
-                                 IdeBuildPipeline  *pipeline)
+                                 IdePipeline  *pipeline)
 {
   g_assert (GBP_IS_BUILDUI_LOG_PANE (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
   vte_terminal_set_pty (VTE_TERMINAL (self->terminal),
-                        ide_build_pipeline_get_pty (pipeline));
+                        ide_pipeline_get_pty (pipeline));
 }
 
 void
 gbp_buildui_log_pane_set_pipeline (GbpBuilduiLogPane *self,
-                                   IdeBuildPipeline  *pipeline)
+                                   IdePipeline  *pipeline)
 {
   g_return_if_fail (GBP_IS_BUILDUI_LOG_PANE (self));
-  g_return_if_fail (!pipeline || IDE_IS_BUILD_PIPELINE (pipeline));
+  g_return_if_fail (!pipeline || IDE_IS_PIPELINE (pipeline));
 
   if (pipeline != self->pipeline)
     {
@@ -102,7 +102,7 @@ gbp_buildui_log_pane_set_pipeline (GbpBuilduiLogPane *self,
           g_signal_handlers_disconnect_by_func (self->pipeline,
                                                 G_CALLBACK (gbp_buildui_log_pane_notify_pty),
                                                 self);
-          ide_build_pipeline_remove_log_observer (self->pipeline, self->log_observer);
+          ide_pipeline_remove_log_observer (self->pipeline, self->log_observer);
           self->log_observer = 0;
           g_clear_object (&self->pipeline);
           vte_terminal_set_pty (VTE_TERMINAL (self->terminal), NULL);
@@ -112,13 +112,13 @@ gbp_buildui_log_pane_set_pipeline (GbpBuilduiLogPane *self,
         {
           self->pipeline = g_object_ref (pipeline);
           self->log_observer =
-            ide_build_pipeline_add_log_observer (self->pipeline,
+            ide_pipeline_add_log_observer (self->pipeline,
                                                  gbp_buildui_log_pane_log_observer,
                                                  self,
                                                  NULL);
           vte_terminal_reset (VTE_TERMINAL (self->terminal), TRUE, TRUE);
           vte_terminal_set_pty (VTE_TERMINAL (self->terminal),
-                                ide_build_pipeline_get_pty (pipeline));
+                                ide_pipeline_get_pty (pipeline));
           g_signal_connect_object (pipeline,
                                    "notify::pty",
                                    G_CALLBACK (gbp_buildui_log_pane_notify_pty),
@@ -140,7 +140,7 @@ gbp_buildui_log_pane_window_title_changed (GbpBuilduiLogPane *self,
       const gchar *title;
 
       title = vte_terminal_get_window_title (VTE_TERMINAL (terminal));
-      _ide_build_pipeline_set_message (self->pipeline, title);
+      _ide_pipeline_set_message (self->pipeline, title);
     }
 }
 
@@ -235,7 +235,7 @@ gbp_buildui_log_pane_class_init (GbpBuilduiLogPaneClass *klass)
     g_param_spec_object ("pipeline",
                          "Result",
                          "Result",
-                         IDE_TYPE_BUILD_PIPELINE,
+                         IDE_TYPE_PIPELINE,
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
   g_object_class_install_properties (object_class, N_PROPS, properties);
@@ -332,7 +332,7 @@ terminal_size_allocate (GbpBuilduiLogPane *self,
   if (self->pipeline != NULL && pty != NULL)
     {
       if (vte_pty_get_size (pty, &rows, &columns, NULL))
-        _ide_build_pipeline_set_pty_size (self->pipeline, rows, columns);
+        _ide_pipeline_set_pty_size (self->pipeline, rows, columns);
     }
 }
 
diff --git a/src/plugins/buildui/gbp-buildui-log-pane.h b/src/plugins/buildui/gbp-buildui-log-pane.h
index 31f1ff628..23b84d903 100644
--- a/src/plugins/buildui/gbp-buildui-log-pane.h
+++ b/src/plugins/buildui/gbp-buildui-log-pane.h
@@ -31,6 +31,6 @@ G_BEGIN_DECLS
 G_DECLARE_FINAL_TYPE (GbpBuilduiLogPane, gbp_buildui_log_pane, GBP, BUILDUI_LOG_PANE, IdePane)
 
 void gbp_buildui_log_pane_set_pipeline (GbpBuilduiLogPane *self,
-                                        IdeBuildPipeline  *pipeline);
+                                        IdePipeline  *pipeline);
 
 G_END_DECLS
diff --git a/src/plugins/buildui/gbp-buildui-omni-bar-section.c 
b/src/plugins/buildui/gbp-buildui-omni-bar-section.c
index 9c01842ed..356d0eb0e 100644
--- a/src/plugins/buildui/gbp-buildui-omni-bar-section.c
+++ b/src/plugins/buildui/gbp-buildui-omni-bar-section.c
@@ -75,7 +75,7 @@ gbp_buildui_omni_bar_section_notify_pipeline (GbpBuilduiOmniBarSection *self,
                                               GParamSpec               *pspec,
                                               IdeBuildManager          *build_manager)
 {
-  IdeBuildPipeline *pipeline;
+  IdePipeline *pipeline;
   const gchar *device_name = NULL;
   const gchar *runtime_name = NULL;
   const gchar *config_id = "";
@@ -87,9 +87,9 @@ gbp_buildui_omni_bar_section_notify_pipeline (GbpBuilduiOmniBarSection *self,
 
   if ((pipeline = ide_build_manager_get_pipeline (build_manager)))
     {
-      IdeConfig *config = ide_build_pipeline_get_config (pipeline);
+      IdeConfig *config = ide_pipeline_get_config (pipeline);
       IdeRuntime *runtime = ide_config_get_runtime (config);
-      IdeDevice *device = ide_build_pipeline_get_device (pipeline);
+      IdeDevice *device = ide_pipeline_get_device (pipeline);
 
       config_id = ide_config_get_id (config);
       display_name = ide_config_get_display_name (config);
@@ -179,14 +179,14 @@ gbp_buildui_omni_bar_section_notify_message (GbpBuilduiOmniBarSection *self,
 
 static void
 gbp_buildui_omni_bar_section_build_started (GbpBuilduiOmniBarSection *self,
-                                            IdeBuildPipeline         *pipeline,
+                                            IdePipeline         *pipeline,
                                             IdeBuildManager          *build_manager)
 {
   IDE_ENTRY;
 
   g_assert (IDE_IS_MAIN_THREAD ());
   g_assert (GBP_IS_BUILDUI_OMNI_BAR_SECTION (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (IDE_IS_BUILD_MANAGER (build_manager));
 
   gtk_revealer_set_reveal_child (self->popover_details_revealer, TRUE);
@@ -199,14 +199,14 @@ gbp_buildui_omni_bar_section_build_started (GbpBuilduiOmniBarSection *self,
 
 static void
 gbp_buildui_omni_bar_section_build_failed (GbpBuilduiOmniBarSection *self,
-                                           IdeBuildPipeline         *pipeline,
+                                           IdePipeline         *pipeline,
                                            IdeBuildManager          *build_manager)
 {
   IDE_ENTRY;
 
   g_assert (IDE_IS_MAIN_THREAD ());
   g_assert (GBP_IS_BUILDUI_OMNI_BAR_SECTION (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (IDE_IS_BUILD_MANAGER (build_manager));
 
   gtk_label_set_label (self->popover_build_result_label, _("Failed"));
@@ -217,14 +217,14 @@ gbp_buildui_omni_bar_section_build_failed (GbpBuilduiOmniBarSection *self,
 
 static void
 gbp_buildui_omni_bar_section_build_finished (GbpBuilduiOmniBarSection *self,
-                                             IdeBuildPipeline         *pipeline,
+                                             IdePipeline         *pipeline,
                                              IdeBuildManager          *build_manager)
 {
   IDE_ENTRY;
 
   g_assert (IDE_IS_MAIN_THREAD ());
   g_assert (GBP_IS_BUILDUI_OMNI_BAR_SECTION (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (IDE_IS_BUILD_MANAGER (build_manager));
 
   gtk_label_set_label (self->popover_build_result_label, _("Success"));
diff --git a/src/plugins/buildui/gbp-buildui-pane.c b/src/plugins/buildui/gbp-buildui-pane.c
index f2d43a880..cca38ec21 100644
--- a/src/plugins/buildui/gbp-buildui-pane.c
+++ b/src/plugins/buildui/gbp-buildui-pane.c
@@ -26,7 +26,7 @@
 #include <libide-editor.h>
 #include <libide-foundry.h>
 
-#include "ide-build-stage-private.h"
+#include "ide-pipeline-stage-private.h"
 
 #include "gbp-buildui-pane.h"
 #include "gbp-buildui-stage-row.h"
@@ -37,7 +37,7 @@ struct _GbpBuilduiPane
 
   /* Owned references */
   GHashTable          *diags_hash;
-  IdeBuildPipeline    *pipeline;
+  IdePipeline    *pipeline;
   DzlSignalGroup      *pipeline_signals;
 
   /* Template widgets */
@@ -91,7 +91,7 @@ set_errors_label (GbpBuilduiPane *self,
 static void
 gbp_buildui_pane_diagnostic (GbpBuilduiPane   *self,
                              IdeDiagnostic    *diagnostic,
-                             IdeBuildPipeline *pipeline)
+                             IdePipeline *pipeline)
 {
   IdeDiagnosticSeverity severity;
   guint hash;
@@ -100,7 +100,7 @@ gbp_buildui_pane_diagnostic (GbpBuilduiPane   *self,
 
   g_assert (GBP_IS_BUILDUI_PANE (self));
   g_assert (diagnostic != NULL);
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
   severity = ide_diagnostic_get_severity (diagnostic);
 
@@ -173,15 +173,15 @@ gbp_buildui_pane_update_running_time (GbpBuilduiPane *self)
 
 static void
 gbp_buildui_pane_started (GbpBuilduiPane   *self,
-                          IdeBuildPhase     phase,
-                          IdeBuildPipeline *pipeline)
+                          IdePipelinePhase     phase,
+                          IdePipeline *pipeline)
 {
   IDE_ENTRY;
 
   g_assert (GBP_IS_BUILDUI_PANE (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
-  if (phase >= IDE_BUILD_PHASE_BUILD)
+  if (phase >= IDE_PIPELINE_PHASE_BUILD)
     {
       self->error_count = 0;
       self->warning_count = 0;
@@ -200,9 +200,9 @@ static GtkWidget *
 gbp_buildui_pane_create_stage_row_cb (gpointer data,
                                      gpointer user_data)
 {
-  IdeBuildStage *stage = data;
+  IdePipelineStage *stage = data;
 
-  g_assert (IDE_IS_BUILD_STAGE (stage));
+  g_assert (IDE_IS_PIPELINE_STAGE (stage));
   g_assert (GBP_IS_BUILDUI_PANE (user_data));
 
   return gbp_buildui_stage_row_new (stage);
@@ -210,11 +210,11 @@ gbp_buildui_pane_create_stage_row_cb (gpointer data,
 
 static void
 gbp_buildui_pane_bind_pipeline (GbpBuilduiPane   *self,
-                                IdeBuildPipeline *pipeline,
+                                IdePipeline *pipeline,
                                 DzlSignalGroup   *signals)
 {
   g_assert (GBP_IS_BUILDUI_PANE (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (G_IS_LIST_MODEL (pipeline));
   g_assert (self->pipeline == NULL);
   g_assert (DZL_IS_SIGNAL_GROUP (signals));
@@ -242,7 +242,7 @@ gbp_buildui_pane_unbind_pipeline (GbpBuilduiPane *self,
                                   DzlSignalGroup *signals)
 {
   g_return_if_fail (GBP_IS_BUILDUI_PANE (self));
-  g_return_if_fail (!self->pipeline || IDE_IS_BUILD_PIPELINE (self->pipeline));
+  g_return_if_fail (!self->pipeline || IDE_IS_PIPELINE (self->pipeline));
 
   g_clear_object (&self->pipeline);
 
@@ -259,10 +259,10 @@ gbp_buildui_pane_unbind_pipeline (GbpBuilduiPane *self,
 
 void
 gbp_buildui_pane_set_pipeline (GbpBuilduiPane   *self,
-                               IdeBuildPipeline *pipeline)
+                               IdePipeline *pipeline)
 {
   g_return_if_fail (GBP_IS_BUILDUI_PANE (self));
-  g_return_if_fail (!pipeline || IDE_IS_BUILD_PIPELINE (pipeline));
+  g_return_if_fail (!pipeline || IDE_IS_PIPELINE (pipeline));
 
   if (self->pipeline_signals != NULL)
     dzl_signal_group_set_target (self->pipeline_signals, pipeline);
@@ -361,7 +361,7 @@ gbp_buildui_pane_notify_message (GbpBuilduiPane  *self,
                                  IdeBuildManager *build_manager)
 {
   g_autofree gchar *message = NULL;
-  IdeBuildPipeline *pipeline;
+  IdePipeline *pipeline;
   GtkStyleContext *style;
 
   g_assert (GBP_IS_BUILDUI_PANE (self));
@@ -374,7 +374,7 @@ gbp_buildui_pane_notify_message (GbpBuilduiPane  *self,
 
   style = gtk_widget_get_style_context (GTK_WIDGET (self->build_status_label));
 
-  if (ide_build_pipeline_get_phase (pipeline) == IDE_BUILD_PHASE_FAILED)
+  if (ide_pipeline_get_phase (pipeline) == IDE_PIPELINE_PHASE_FAILED)
     gtk_style_context_add_class (style, GTK_STYLE_CLASS_ERROR);
   else
     gtk_style_context_remove_class (style, GTK_STYLE_CLASS_ERROR);
@@ -507,8 +507,8 @@ gbp_buildui_pane_stage_row_activated (GbpBuilduiPane     *self,
                                       GbpBuilduiStageRow *row,
                                       GtkListBox         *list_box)
 {
-  IdeBuildStage *stage;
-  IdeBuildPhase phase;
+  IdePipelineStage *stage;
+  IdePipelinePhase phase;
 
   g_assert (GBP_IS_BUILDUI_PANE (self));
   g_assert (GBP_IS_BUILDUI_STAGE_ROW (row));
@@ -518,12 +518,12 @@ gbp_buildui_pane_stage_row_activated (GbpBuilduiPane     *self,
     return;
 
   stage = gbp_buildui_stage_row_get_stage (row);
-  g_assert (IDE_IS_BUILD_STAGE (stage));
+  g_assert (IDE_IS_PIPELINE_STAGE (stage));
 
-  phase = _ide_build_stage_get_phase (stage);
+  phase = _ide_pipeline_stage_get_phase (stage);
 
-  ide_build_pipeline_build_async (self->pipeline,
-                                  phase & IDE_BUILD_PHASE_MASK,
+  ide_pipeline_build_async (self->pipeline,
+                                  phase & IDE_PIPELINE_PHASE_MASK,
                                   NULL, NULL, NULL);
 }
 
@@ -596,7 +596,7 @@ gbp_buildui_pane_class_init (GbpBuilduiPaneClass *klass)
     g_param_spec_object ("pipeline",
                          NULL,
                          NULL,
-                         IDE_TYPE_BUILD_PIPELINE,
+                         IDE_TYPE_PIPELINE,
                          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
 
   g_object_class_install_properties (object_class, N_PROPS, properties);
@@ -625,7 +625,7 @@ gbp_buildui_pane_init (GbpBuilduiPane *self)
 
   gtk_widget_init_template (GTK_WIDGET (self));
 
-  self->pipeline_signals = dzl_signal_group_new (IDE_TYPE_BUILD_PIPELINE);
+  self->pipeline_signals = dzl_signal_group_new (IDE_TYPE_PIPELINE);
 
   g_signal_connect_object (self->pipeline_signals,
                            "bind",
diff --git a/src/plugins/buildui/gbp-buildui-pane.h b/src/plugins/buildui/gbp-buildui-pane.h
index f7c1efcc8..0db43563b 100644
--- a/src/plugins/buildui/gbp-buildui-pane.h
+++ b/src/plugins/buildui/gbp-buildui-pane.h
@@ -30,6 +30,6 @@ G_BEGIN_DECLS
 G_DECLARE_FINAL_TYPE (GbpBuilduiPane, gbp_buildui_pane, GBP, BUILDUI_PANE, IdePane)
 
 void gbp_buildui_pane_set_pipeline (GbpBuilduiPane   *self,
-                                    IdeBuildPipeline *pipeline);
+                                    IdePipeline *pipeline);
 
 G_END_DECLS
diff --git a/src/plugins/buildui/gbp-buildui-stage-row.c b/src/plugins/buildui/gbp-buildui-stage-row.c
index 6cfdc9f3d..ed2f0e75f 100644
--- a/src/plugins/buildui/gbp-buildui-stage-row.c
+++ b/src/plugins/buildui/gbp-buildui-stage-row.c
@@ -30,7 +30,7 @@ struct _GbpBuilduiStageRow
 {
   GtkListBoxRow    parent_instance;
 
-  IdeBuildStage   *stage;
+  IdePipelineStage   *stage;
 
   DzlBoldingLabel *label;
 };
@@ -48,12 +48,12 @@ static GParamSpec *properties [N_PROPS];
 static void
 gbp_buildui_stage_row_notify_completed (GbpBuilduiStageRow *row,
                                       GParamSpec       *pspec,
-                                      IdeBuildStage    *stage)
+                                      IdePipelineStage    *stage)
 {
   g_assert (GBP_IS_BUILDUI_STAGE_ROW (row));
-  g_assert (IDE_IS_BUILD_STAGE (stage));
+  g_assert (IDE_IS_PIPELINE_STAGE (stage));
 
-  if (ide_build_stage_get_completed (stage))
+  if (ide_pipeline_stage_get_completed (stage))
     dzl_gtk_widget_add_style_class (GTK_WIDGET (row->label), "dim-label");
   else
     dzl_gtk_widget_remove_style_class (GTK_WIDGET (row->label), "dim-label");
@@ -61,16 +61,16 @@ gbp_buildui_stage_row_notify_completed (GbpBuilduiStageRow *row,
 
 static void
 gbp_buildui_stage_row_set_stage (GbpBuilduiStageRow *self,
-                               IdeBuildStage    *stage)
+                               IdePipelineStage    *stage)
 {
   const gchar *name;
 
   g_return_if_fail (GBP_IS_BUILDUI_STAGE_ROW (self));
-  g_return_if_fail (IDE_IS_BUILD_STAGE (stage));
+  g_return_if_fail (IDE_IS_PIPELINE_STAGE (stage));
 
   g_set_object (&self->stage, stage);
 
-  name = ide_build_stage_get_name (stage);
+  name = ide_pipeline_stage_get_name (stage);
 
   if (name == NULL)
     name = G_OBJECT_TYPE_NAME (stage);
@@ -152,7 +152,7 @@ gbp_buildui_stage_row_class_init (GbpBuilduiStageRowClass *klass)
     g_param_spec_object ("stage",
                          "Stage",
                          "The stage for the row",
-                         IDE_TYPE_BUILD_STAGE,
+                         IDE_TYPE_PIPELINE_STAGE,
                          G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
 
   g_object_class_install_properties (object_class, N_PROPS, properties);
@@ -169,9 +169,9 @@ gbp_buildui_stage_row_init (GbpBuilduiStageRow *self)
 }
 
 GtkWidget *
-gbp_buildui_stage_row_new (IdeBuildStage *stage)
+gbp_buildui_stage_row_new (IdePipelineStage *stage)
 {
-  g_return_val_if_fail (IDE_IS_BUILD_STAGE (stage), NULL);
+  g_return_val_if_fail (IDE_IS_PIPELINE_STAGE (stage), NULL);
 
   return g_object_new (GBP_TYPE_BUILDUI_STAGE_ROW,
                        "stage", stage,
@@ -185,11 +185,11 @@ gbp_buildui_stage_row_new (IdeBuildStage *stage)
  *
  * Gets the stage for the row.
  *
- * Returns: (transfer none): an #IdeBuildStage
+ * Returns: (transfer none): an #IdePipelineStage
  *
  * Since: 3.32
  */
-IdeBuildStage *
+IdePipelineStage *
 gbp_buildui_stage_row_get_stage (GbpBuilduiStageRow *self)
 {
   g_return_val_if_fail (GBP_IS_BUILDUI_STAGE_ROW (self), NULL);
diff --git a/src/plugins/buildui/gbp-buildui-stage-row.h b/src/plugins/buildui/gbp-buildui-stage-row.h
index d5bca66ad..4fb16cd1c 100644
--- a/src/plugins/buildui/gbp-buildui-stage-row.h
+++ b/src/plugins/buildui/gbp-buildui-stage-row.h
@@ -29,7 +29,7 @@ G_BEGIN_DECLS
 
 G_DECLARE_FINAL_TYPE (GbpBuilduiStageRow, gbp_buildui_stage_row, GBP, BUILDUI_STAGE_ROW, GtkListBoxRow)
 
-GtkWidget     *gbp_buildui_stage_row_new       (IdeBuildStage    *stage);
-IdeBuildStage *gbp_buildui_stage_row_get_stage (GbpBuilduiStageRow *self);
+GtkWidget     *gbp_buildui_stage_row_new       (IdePipelineStage    *stage);
+IdePipelineStage *gbp_buildui_stage_row_get_stage (GbpBuilduiStageRow *self);
 
 G_END_DECLS
diff --git a/src/plugins/buildui/gbp-buildui-tree-addin.c b/src/plugins/buildui/gbp-buildui-tree-addin.c
index 6c8c337df..a4ca6281f 100644
--- a/src/plugins/buildui/gbp-buildui-tree-addin.c
+++ b/src/plugins/buildui/gbp-buildui-tree-addin.c
@@ -210,7 +210,7 @@ gbp_buildui_tree_addin_action_build (GSimpleAction *action,
   targets = g_ptr_array_new_full (1, g_object_unref);
   g_ptr_array_add (targets, g_object_ref (target));
 
-  ide_build_manager_execute_async (build_manager, IDE_BUILD_PHASE_BUILD, targets, NULL, NULL, NULL);
+  ide_build_manager_execute_async (build_manager, IDE_PIPELINE_PHASE_BUILD, targets, NULL, NULL, NULL);
 }
 
 static void
@@ -239,7 +239,7 @@ gbp_buildui_tree_addin_action_rebuild (GSimpleAction *action,
   targets = g_ptr_array_new_full (1, g_object_unref);
   g_ptr_array_add (targets, g_object_ref (target));
 
-  ide_build_manager_rebuild_async (build_manager, IDE_BUILD_PHASE_BUILD, targets, NULL, NULL, NULL);
+  ide_build_manager_rebuild_async (build_manager, IDE_PIPELINE_PHASE_BUILD, targets, NULL, NULL, NULL);
 }
 
 static void
diff --git a/src/plugins/buildui/gbp-buildui-workspace-addin.c 
b/src/plugins/buildui/gbp-buildui-workspace-addin.c
index e8225beec..fd98d0309 100644
--- a/src/plugins/buildui/gbp-buildui-workspace-addin.c
+++ b/src/plugins/buildui/gbp-buildui-workspace-addin.c
@@ -113,7 +113,7 @@ gbp_buildui_workspace_addin_notify_pipeline (GbpBuilduiWorkspaceAddin *self,
                                              GParamSpec               *pspec,
                                              IdeBuildManager          *build_manager)
 {
-  IdeBuildPipeline *pipeline;
+  IdePipeline *pipeline;
 
   g_assert (IDE_IS_MAIN_THREAD ());
   g_assert (GBP_IS_BUILDUI_WORKSPACE_ADDIN (self));
diff --git a/src/plugins/cargo/cargo_plugin.py b/src/plugins/cargo/cargo_plugin.py
index c26aba2f6..29edab457 100644
--- a/src/plugins/cargo/cargo_plugin.py
+++ b/src/plugins/cargo/cargo_plugin.py
@@ -69,7 +69,7 @@ def locate_cargo_from_config(config):
 
     return cargo
 
-class CargoPipelineAddin(Ide.Object, Ide.BuildPipelineAddin):
+class CargoPipelineAddin(Ide.Object, Ide.PipelineAddin):
     """
     The CargoPipelineAddin is responsible for creating the necessary build
     stages and attaching them to phases of the build pipeline.
@@ -104,7 +104,7 @@ class CargoPipelineAddin(Ide.Object, Ide.BuildPipelineAddin):
         fetch_launcher.push_argv('fetch')
         fetch_launcher.push_argv('--manifest-path')
         fetch_launcher.push_argv(cargo_toml)
-        self.track(pipeline.attach_launcher(Ide.BuildPhase.DOWNLOADS, 0, fetch_launcher))
+        self.track(pipeline.attach_launcher(Ide.PipelinePhase.DOWNLOADS, 0, fetch_launcher))
 
         # Now create our launcher to build the project
         build_launcher = pipeline.create_launcher()
@@ -139,11 +139,11 @@ class CargoPipelineAddin(Ide.Object, Ide.BuildPipelineAddin):
         clean_launcher.push_argv('--manifest-path')
         clean_launcher.push_argv(cargo_toml)
 
-        build_stage = Ide.BuildStageLauncher.new(context, build_launcher)
+        build_stage = Ide.PipelineStageLauncher.new(context, build_launcher)
         build_stage.set_name(_("Building project"))
         build_stage.set_clean_launcher(clean_launcher)
         build_stage.connect('query', self._query)
-        self.track(pipeline.attach(Ide.BuildPhase.BUILD, 0, build_stage))
+        self.track(pipeline.attach(Ide.PipelinePhase.BUILD, 0, build_stage))
 
     def do_unload(self, pipeline):
         if self.error_format_id:
diff --git a/src/plugins/clang/ide-clang-rename-provider.c b/src/plugins/clang/ide-clang-rename-provider.c
index 7ccc7cb58..f57aa963d 100644
--- a/src/plugins/clang/ide-clang-rename-provider.c
+++ b/src/plugins/clang/ide-clang-rename-provider.c
@@ -136,7 +136,7 @@ ide_clang_rename_provider_rename_async (IdeRenameProvider   *provider,
   g_autofree gchar *new_name_arg = NULL;
   g_autofree gchar *position_arg = NULL;
   g_autofree gchar *path = NULL;
-  IdeBuildPipeline *pipeline;
+  IdePipeline *pipeline;
   IdeBuildManager *build_manager;
   const gchar *builddir = NULL;
   IdeContext *context;
@@ -163,7 +163,7 @@ ide_clang_rename_provider_rename_async (IdeRenameProvider   *provider,
   context = ide_object_get_context (IDE_OBJECT (self));
   build_manager = ide_build_manager_from_context (context);
   if ((pipeline = ide_build_manager_get_pipeline (build_manager)))
-    builddir = ide_build_pipeline_get_builddir (pipeline);
+    builddir = ide_pipeline_get_builddir (pipeline);
 
   file = ide_location_get_file (location);
   path = g_file_get_path (file);
diff --git a/src/plugins/cmake/cmake-plugin.c b/src/plugins/cmake/cmake-plugin.c
index f59624847..de605456c 100644
--- a/src/plugins/cmake/cmake-plugin.c
+++ b/src/plugins/cmake/cmake-plugin.c
@@ -32,7 +32,7 @@ _IDE_EXTERN void
 _gbp_cmake_register_types (PeasObjectModule *module)
 {
   peas_object_module_register_extension_type (module,
-                                              IDE_TYPE_BUILD_PIPELINE_ADDIN,
+                                              IDE_TYPE_PIPELINE_ADDIN,
                                               GBP_TYPE_CMAKE_PIPELINE_ADDIN);
   peas_object_module_register_extension_type (module,
                                               IDE_TYPE_BUILD_SYSTEM,
diff --git a/src/plugins/cmake/gbp-cmake-build-stage-cross-file.c 
b/src/plugins/cmake/gbp-cmake-build-stage-cross-file.c
index e5b84a4ec..e2fdd33aa 100644
--- a/src/plugins/cmake/gbp-cmake-build-stage-cross-file.c
+++ b/src/plugins/cmake/gbp-cmake-build-stage-cross-file.c
@@ -28,11 +28,11 @@
 
 struct _GbpCMakeBuildStageCrossFile
 {
-  IdeBuildStage parent_instance;
+  IdePipelineStage parent_instance;
   IdeToolchain *toolchain;
 };
 
-G_DEFINE_TYPE (GbpCMakeBuildStageCrossFile, gbp_cmake_build_stage_cross_file, IDE_TYPE_BUILD_STAGE)
+G_DEFINE_TYPE (GbpCMakeBuildStageCrossFile, gbp_cmake_build_stage_cross_file, IDE_TYPE_PIPELINE_STAGE)
 
 static void
 _gbp_cmake_file_set (gchar       **content,
@@ -63,8 +63,8 @@ _gbp_cmake_file_set_quoted (gchar       **content,
 }
 
 static void
-gbp_cmake_build_stage_cross_file_query (IdeBuildStage    *stage,
-                                        IdeBuildPipeline *pipeline,
+gbp_cmake_build_stage_cross_file_query (IdePipelineStage    *stage,
+                                        IdePipeline *pipeline,
                                         GPtrArray        *targets,
                                         GCancellable     *cancellable)
 {
@@ -74,17 +74,17 @@ gbp_cmake_build_stage_cross_file_query (IdeBuildStage    *stage,
   IDE_ENTRY;
 
   g_assert (GBP_IS_CMAKE_BUILD_STAGE_CROSS_FILE (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
 
   crossbuild_file = gbp_cmake_build_stage_cross_file_get_path (self, pipeline);
   if (!g_file_test (crossbuild_file, G_FILE_TEST_EXISTS))
     {
-      ide_build_stage_set_completed (stage, FALSE);
+      ide_pipeline_stage_set_completed (stage, FALSE);
       IDE_EXIT;
     }
 
-  ide_build_stage_set_completed (stage, TRUE);
+  ide_pipeline_stage_set_completed (stage, TRUE);
 
   IDE_EXIT;
 }
@@ -107,10 +107,10 @@ add_lang_executable (const gchar *lang,
 }
 
 static gboolean
-gbp_cmake_build_stage_cross_file_execute (IdeBuildStage     *stage,
-                                          IdeBuildPipeline  *pipeline,
-                                          GCancellable      *cancellable,
-                                          GError           **error)
+gbp_cmake_build_stage_cross_file_build (IdePipelineStage  *stage,
+                                        IdePipeline       *pipeline,
+                                        GCancellable      *cancellable,
+                                        GError           **error)
 {
   GbpCMakeBuildStageCrossFile *self = (GbpCMakeBuildStageCrossFile *)stage;
   g_autoptr(IdeTriplet) triplet = NULL;
@@ -126,7 +126,7 @@ gbp_cmake_build_stage_cross_file_execute (IdeBuildStage     *stage,
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
   g_assert (IDE_IS_TOOLCHAIN (self->toolchain));
 
-  ide_build_stage_set_active (stage, TRUE);
+  ide_pipeline_stage_set_active (stage, TRUE);
 
   triplet = ide_toolchain_get_host_triplet (self->toolchain);
 
@@ -165,13 +165,13 @@ gbp_cmake_build_stage_cross_file_execute (IdeBuildStage     *stage,
   if (!g_file_set_contents (crossbuild_path, crossbuild_content, -1, error))
     IDE_RETURN (FALSE);
 
-  ide_build_stage_set_active (stage, FALSE);
+  ide_pipeline_stage_set_active (stage, FALSE);
 
   IDE_RETURN (TRUE);
 }
 
 static void
-ide_build_stage_mkdirs_finalize (GObject *object)
+ide_pipeline_stage_mkdirs_finalize (GObject *object)
 {
   GbpCMakeBuildStageCrossFile *self = (GbpCMakeBuildStageCrossFile *)object;
 
@@ -184,11 +184,11 @@ static void
 gbp_cmake_build_stage_cross_file_class_init (GbpCMakeBuildStageCrossFileClass *klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
-  IdeBuildStageClass *stage_class = IDE_BUILD_STAGE_CLASS (klass);
+  IdePipelineStageClass *stage_class = IDE_PIPELINE_STAGE_CLASS (klass);
 
-  object_class->finalize = ide_build_stage_mkdirs_finalize;
+  object_class->finalize = ide_pipeline_stage_mkdirs_finalize;
 
-  stage_class->execute = gbp_cmake_build_stage_cross_file_execute;
+  stage_class->build = gbp_cmake_build_stage_cross_file_build;
   stage_class->query = gbp_cmake_build_stage_cross_file_query;
 }
 
@@ -210,10 +210,10 @@ gbp_cmake_build_stage_cross_file_new (IdeContext    *context,
 
 gchar *
 gbp_cmake_build_stage_cross_file_get_path (GbpCMakeBuildStageCrossFile *stage,
-                                           IdeBuildPipeline            *pipeline)
+                                           IdePipeline            *pipeline)
 {
   g_return_val_if_fail (GBP_IS_CMAKE_BUILD_STAGE_CROSS_FILE (stage), NULL);
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (pipeline), NULL);
+  g_return_val_if_fail (IDE_IS_PIPELINE (pipeline), NULL);
 
-  return ide_build_pipeline_build_builddir_path (pipeline, "gnome-builder-crossfile.cmake", NULL);
+  return ide_pipeline_build_builddir_path (pipeline, "gnome-builder-crossfile.cmake", NULL);
 }
diff --git a/src/plugins/cmake/gbp-cmake-build-stage-cross-file.h 
b/src/plugins/cmake/gbp-cmake-build-stage-cross-file.h
index 2256848e0..307dc34cc 100644
--- a/src/plugins/cmake/gbp-cmake-build-stage-cross-file.h
+++ b/src/plugins/cmake/gbp-cmake-build-stage-cross-file.h
@@ -28,11 +28,11 @@ G_BEGIN_DECLS
 
 #define GBP_TYPE_CMAKE_BUILD_STAGE_CROSS_FILE (gbp_cmake_build_stage_cross_file_get_type())
 
-G_DECLARE_FINAL_TYPE (GbpCMakeBuildStageCrossFile, gbp_cmake_build_stage_cross_file, GBP, 
CMAKE_BUILD_STAGE_CROSS_FILE, IdeBuildStage)
+G_DECLARE_FINAL_TYPE (GbpCMakeBuildStageCrossFile, gbp_cmake_build_stage_cross_file, GBP, 
CMAKE_BUILD_STAGE_CROSS_FILE, IdePipelineStage)
 
 GbpCMakeBuildStageCrossFile *gbp_cmake_build_stage_cross_file_new      (IdeContext                  *context,
                                                                         IdeToolchain                
*toolchain);
 gchar                       *gbp_cmake_build_stage_cross_file_get_path (GbpCMakeBuildStageCrossFile *stage,
-                                                                        IdeBuildPipeline            
*pipeline);
+                                                                        IdePipeline            *pipeline);
 
 G_END_DECLS
diff --git a/src/plugins/cmake/gbp-cmake-build-system.c b/src/plugins/cmake/gbp-cmake-build-system.c
index 3be56c4b9..7df45c78f 100644
--- a/src/plugins/cmake/gbp-cmake-build-system.c
+++ b/src/plugins/cmake/gbp-cmake-build-system.c
@@ -135,7 +135,7 @@ gbp_cmake_build_system_ensure_config_async (GbpCMakeBuildSystem *self,
   build_manager = ide_build_manager_from_context (context);
 
   ide_build_manager_execute_async (build_manager,
-                                   IDE_BUILD_PHASE_CONFIGURE,
+                                   IDE_PIPELINE_PHASE_CONFIGURE,
                                    NULL,
                                    cancellable,
                                    gbp_cmake_build_system_ensure_config_cb,
@@ -193,7 +193,7 @@ gbp_cmake_build_system_load_commands_config_cb (GObject      *object,
   g_autoptr(GFile) file = NULL;
   g_autofree gchar *path = NULL;
   IdeBuildManager *build_manager;
-  IdeBuildPipeline *pipeline;
+  IdePipeline *pipeline;
   GCancellable *cancellable;
   IdeContext *context;
 
@@ -221,7 +221,7 @@ gbp_cmake_build_system_load_commands_config_cb (GObject      *object,
       return;
     }
 
-  path = ide_build_pipeline_build_builddir_path (pipeline, "compile_commands.json", NULL);
+  path = ide_pipeline_build_builddir_path (pipeline, "compile_commands.json", NULL);
 
   if (!g_file_test (path, G_FILE_TEST_IS_REGULAR))
     {
@@ -254,7 +254,7 @@ gbp_cmake_build_system_load_commands_async (GbpCMakeBuildSystem *self,
 {
   g_autoptr(IdeTask) task = NULL;
   IdeBuildManager *build_manager;
-  IdeBuildPipeline *pipeline;
+  IdePipeline *pipeline;
   IdeContext *context;
 
   g_assert (GBP_IS_CMAKE_BUILD_SYSTEM (self));
@@ -292,7 +292,7 @@ gbp_cmake_build_system_load_commands_async (GbpCMakeBuildSystem *self,
     {
       g_autofree gchar *path = NULL;
 
-      path = ide_build_pipeline_build_builddir_path (pipeline, "compile_commands.json", NULL);
+      path = ide_pipeline_build_builddir_path (pipeline, "compile_commands.json", NULL);
 
       if (g_file_test (path, G_FILE_TEST_IS_REGULAR))
         {
diff --git a/src/plugins/cmake/gbp-cmake-pipeline-addin.c b/src/plugins/cmake/gbp-cmake-pipeline-addin.c
index 7725b3b40..447b9b007 100644
--- a/src/plugins/cmake/gbp-cmake-pipeline-addin.c
+++ b/src/plugins/cmake/gbp-cmake-pipeline-addin.c
@@ -35,10 +35,10 @@ struct _GbpCMakePipelineAddin
 
 static const gchar *ninja_names[] = { "ninja-build", "ninja" };
 
-static void build_pipeline_addin_iface_init (IdeBuildPipelineAddinInterface *iface);
+static void pipeline_addin_iface_init (IdePipelineAddinInterface *iface);
 
 G_DEFINE_TYPE_WITH_CODE (GbpCMakePipelineAddin, gbp_cmake_pipeline_addin, IDE_TYPE_OBJECT,
-                         G_IMPLEMENT_INTERFACE (IDE_TYPE_BUILD_PIPELINE_ADDIN, 
build_pipeline_addin_iface_init))
+                         G_IMPLEMENT_INTERFACE (IDE_TYPE_PIPELINE_ADDIN, pipeline_addin_iface_init))
 
 static void
 gbp_cmake_pipeline_addin_class_init (GbpCMakePipelineAddinClass *klass)
@@ -51,31 +51,31 @@ gbp_cmake_pipeline_addin_init (GbpCMakePipelineAddin *self)
 }
 
 static void
-gbp_cmake_pipeline_addin_stage_query_cb (IdeBuildStage    *stage,
-                                         IdeBuildPipeline *pipeline,
+gbp_cmake_pipeline_addin_stage_query_cb (IdePipelineStage    *stage,
+                                         IdePipeline *pipeline,
                                          GPtrArray        *targets,
                                          GCancellable     *cancellable)
 {
-  g_assert (IDE_IS_BUILD_STAGE (stage));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE_STAGE (stage));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
 
   /* Defer to ninja to determine completed status */
-  ide_build_stage_set_completed (stage, FALSE);
+  ide_pipeline_stage_set_completed (stage, FALSE);
 }
 
 static void
-gbp_cmake_pipeline_addin_load (IdeBuildPipelineAddin *addin,
-                               IdeBuildPipeline      *pipeline)
+gbp_cmake_pipeline_addin_load (IdePipelineAddin *addin,
+                               IdePipeline      *pipeline)
 {
   GbpCMakePipelineAddin *self = (GbpCMakePipelineAddin *)addin;
   g_autoptr(IdeSubprocessLauncher) configure_launcher = NULL;
   g_autoptr(IdeSubprocessLauncher) build_launcher = NULL;
   g_autoptr(IdeSubprocessLauncher) install_launcher = NULL;
   g_autoptr(IdeSubprocessLauncher) clean_launcher = NULL;
-  g_autoptr(IdeBuildStage) configure_stage = NULL;
-  g_autoptr(IdeBuildStage) build_stage = NULL;
-  g_autoptr(IdeBuildStage) install_stage = NULL;
+  g_autoptr(IdePipelineStage) configure_stage = NULL;
+  g_autoptr(IdePipelineStage) build_stage = NULL;
+  g_autoptr(IdePipelineStage) install_stage = NULL;
   g_autoptr(GError) error = NULL;
   g_autofree gchar *prefix_option = NULL;
   g_autofree gchar *build_ninja = NULL;
@@ -98,7 +98,7 @@ gbp_cmake_pipeline_addin_load (IdeBuildPipelineAddin *addin,
   IDE_ENTRY;
 
   g_assert (GBP_IS_CMAKE_PIPELINE_ADDIN (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
   context = ide_object_get_context (IDE_OBJECT (self));
 
@@ -109,14 +109,14 @@ gbp_cmake_pipeline_addin_load (IdeBuildPipelineAddin *addin,
   g_object_get (build_system, "project-file", &project_file, NULL);
   project_file_name = g_file_get_basename (project_file);
 
-  configuration = ide_build_pipeline_get_config (pipeline);
-  runtime = ide_build_pipeline_get_runtime (pipeline);
-  toolchain = ide_build_pipeline_get_toolchain (pipeline);
+  configuration = ide_pipeline_get_config (pipeline);
+  runtime = ide_pipeline_get_runtime (pipeline);
+  toolchain = ide_pipeline_get_toolchain (pipeline);
 
   if (g_strcmp0 (project_file_name, "CMakeLists.txt") == 0)
     srcdir = g_dirname (g_file_peek_path (project_file));
   else
-    srcdir = g_strdup (ide_build_pipeline_get_srcdir (pipeline));
+    srcdir = g_strdup (ide_pipeline_get_srcdir (pipeline));
 
   g_assert (IDE_IS_CONFIG (configuration));
   g_assert (IDE_IS_RUNTIME (runtime));
@@ -140,10 +140,10 @@ gbp_cmake_pipeline_addin_load (IdeBuildPipelineAddin *addin,
       IDE_EXIT;
     }
 
-  if (NULL == (configure_launcher = ide_build_pipeline_create_launcher (pipeline, &error)) ||
-      NULL == (build_launcher = ide_build_pipeline_create_launcher (pipeline, &error)) ||
-      NULL == (clean_launcher = ide_build_pipeline_create_launcher (pipeline, &error)) ||
-      NULL == (install_launcher = ide_build_pipeline_create_launcher (pipeline, &error)))
+  if (NULL == (configure_launcher = ide_pipeline_create_launcher (pipeline, &error)) ||
+      NULL == (build_launcher = ide_pipeline_create_launcher (pipeline, &error)) ||
+      NULL == (clean_launcher = ide_pipeline_create_launcher (pipeline, &error)) ||
+      NULL == (install_launcher = ide_pipeline_create_launcher (pipeline, &error)))
     IDE_GOTO (failure);
 
   prefix = ide_config_get_prefix (configuration);
@@ -159,8 +159,8 @@ gbp_cmake_pipeline_addin_load (IdeBuildPipelineAddin *addin,
       cross_file_stage = gbp_cmake_build_stage_cross_file_new (context, toolchain);
       crossbuild_file = gbp_cmake_build_stage_cross_file_get_path (cross_file_stage, pipeline);
 
-      id = ide_build_pipeline_attach (pipeline, IDE_BUILD_PHASE_PREPARE, 0, IDE_BUILD_STAGE 
(cross_file_stage));
-      ide_build_pipeline_addin_track (addin, id);
+      id = ide_pipeline_attach (pipeline, IDE_PIPELINE_PHASE_PREPARE, 0, IDE_PIPELINE_STAGE 
(cross_file_stage));
+      ide_pipeline_addin_track (addin, id);
     }
 
   /* Setup our configure stage. */
@@ -193,15 +193,15 @@ gbp_cmake_pipeline_addin_load (IdeBuildPipelineAddin *addin,
       ide_subprocess_launcher_push_args (configure_launcher, (const gchar * const *)argv);
     }
 
-  configure_stage = ide_build_stage_launcher_new (context, configure_launcher);
-  ide_build_stage_set_name (configure_stage, _("Configure project"));
+  configure_stage = ide_pipeline_stage_launcher_new (context, configure_launcher);
+  ide_pipeline_stage_set_name (configure_stage, _("Configure project"));
 
-  build_ninja = ide_build_pipeline_build_builddir_path (pipeline, "build.ninja", NULL);
+  build_ninja = ide_pipeline_build_builddir_path (pipeline, "build.ninja", NULL);
   if (g_file_test (build_ninja, G_FILE_TEST_IS_REGULAR))
-    ide_build_stage_set_completed (configure_stage, TRUE);
+    ide_pipeline_stage_set_completed (configure_stage, TRUE);
 
-  id = ide_build_pipeline_attach (pipeline, IDE_BUILD_PHASE_CONFIGURE, 0, configure_stage);
-  ide_build_pipeline_addin_track (addin, id);
+  id = ide_pipeline_attach (pipeline, IDE_PIPELINE_PHASE_CONFIGURE, 0, configure_stage);
+  ide_pipeline_addin_track (addin, id);
 
   /* Setup our build stage */
 
@@ -218,35 +218,35 @@ gbp_cmake_pipeline_addin_load (IdeBuildPipelineAddin *addin,
 
   ide_subprocess_launcher_push_argv (clean_launcher, "clean");
 
-  build_stage = ide_build_stage_launcher_new (context, build_launcher);
-  ide_build_stage_set_name (build_stage, _("Building project"));
+  build_stage = ide_pipeline_stage_launcher_new (context, build_launcher);
+  ide_pipeline_stage_set_name (build_stage, _("Building project"));
 
-  ide_build_stage_launcher_set_clean_launcher (IDE_BUILD_STAGE_LAUNCHER (build_stage), clean_launcher);
-  ide_build_stage_set_check_stdout (build_stage, TRUE);
+  ide_pipeline_stage_launcher_set_clean_launcher (IDE_PIPELINE_STAGE_LAUNCHER (build_stage), clean_launcher);
+  ide_pipeline_stage_set_check_stdout (build_stage, TRUE);
 
   g_signal_connect (build_stage,
                     "query",
                     G_CALLBACK (gbp_cmake_pipeline_addin_stage_query_cb),
                     NULL);
 
-  id = ide_build_pipeline_attach (pipeline, IDE_BUILD_PHASE_BUILD, 0, build_stage);
-  ide_build_pipeline_addin_track (addin, id);
+  id = ide_pipeline_attach (pipeline, IDE_PIPELINE_PHASE_BUILD, 0, build_stage);
+  ide_pipeline_addin_track (addin, id);
 
   /* Setup our install stage */
 
   ide_subprocess_launcher_push_argv (install_launcher, ninja);
   ide_subprocess_launcher_push_argv (install_launcher, "install");
 
-  install_stage = ide_build_stage_launcher_new (context, install_launcher);
-  ide_build_stage_set_name (install_stage, _("Installing project"));
+  install_stage = ide_pipeline_stage_launcher_new (context, install_launcher);
+  ide_pipeline_stage_set_name (install_stage, _("Installing project"));
 
   g_signal_connect (install_stage,
                     "query",
                     G_CALLBACK (gbp_cmake_pipeline_addin_stage_query_cb),
                     NULL);
 
-  id = ide_build_pipeline_attach (pipeline, IDE_BUILD_PHASE_INSTALL, 0, install_stage);
-  ide_build_pipeline_addin_track (addin, id);
+  id = ide_pipeline_attach (pipeline, IDE_PIPELINE_PHASE_INSTALL, 0, install_stage);
+  ide_pipeline_addin_track (addin, id);
 
   IDE_EXIT;
 
@@ -256,7 +256,7 @@ failure:
 }
 
 static void
-build_pipeline_addin_iface_init (IdeBuildPipelineAddinInterface *iface)
+pipeline_addin_iface_init (IdePipelineAddinInterface *iface)
 {
   iface->load = gbp_cmake_pipeline_addin_load;
 }
diff --git a/src/plugins/code-index/gbp-code-index-workbench-addin.c 
b/src/plugins/code-index/gbp-code-index-workbench-addin.c
index 5fdd3f646..346c7352a 100644
--- a/src/plugins/code-index/gbp-code-index-workbench-addin.c
+++ b/src/plugins/code-index/gbp-code-index-workbench-addin.c
@@ -151,7 +151,7 @@ unregister_notification (GbpCodeIndexWorkbenchAddin *self)
 static gboolean
 delay_until_build_completes (GbpCodeIndexWorkbenchAddin *self)
 {
-  IdeBuildPipeline *pipeline;
+  IdePipeline *pipeline;
   IdeBuildManager *build_manager;
   IdeContext *context;
 
@@ -168,9 +168,9 @@ delay_until_build_completes (GbpCodeIndexWorkbenchAddin *self)
   g_assert (IDE_IS_BUILD_MANAGER (build_manager));
 
   pipeline = ide_build_manager_get_pipeline (build_manager);
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
-  if (pipeline == NULL || !ide_build_pipeline_has_configured (pipeline))
+  if (pipeline == NULL || !ide_pipeline_has_configured (pipeline))
     {
       self->delayed_build_reqeusted = TRUE;
       return TRUE;
@@ -295,7 +295,7 @@ gbp_code_index_workbench_addin_build (GbpCodeIndexWorkbenchAddin *self,
   /*
    * If the build system is currently failed, then don't try to
    * do any indexing now. We'll wait for a successful build that
-   * at least reaches IDE_BUILD_PHASE_CONFIGURE and then trigger
+   * at least reaches IDE_PIPELINE_PHASE_CONFIGURE and then trigger
    * after that.
    */
   if (delay_until_build_completes (self))
@@ -425,16 +425,16 @@ gbp_code_index_workbench_addin_file_renamed (GbpCodeIndexWorkbenchAddin *self,
 
 static void
 gbp_code_index_workbench_addin_build_finished (GbpCodeIndexWorkbenchAddin *self,
-                                               IdeBuildPipeline           *pipeline,
+                                               IdePipeline           *pipeline,
                                                IdeBuildManager            *build_manager)
 {
   g_assert (IDE_IS_MAIN_THREAD ());
   g_assert (GBP_IS_CODE_INDEX_WORKBENCH_ADDIN (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (IDE_IS_BUILD_MANAGER (build_manager));
 
   if (self->delayed_build_reqeusted &&
-      ide_build_pipeline_has_configured (pipeline))
+      ide_pipeline_has_configured (pipeline))
     {
       g_autoptr(GFile) workdir = NULL;
       IdeContext *context;
diff --git a/src/plugins/deviced/gbp-deviced-deploy-strategy.c 
b/src/plugins/deviced/gbp-deviced-deploy-strategy.c
index e3eed3567..81cefc48f 100644
--- a/src/plugins/deviced/gbp-deviced-deploy-strategy.c
+++ b/src/plugins/deviced/gbp-deviced-deploy-strategy.c
@@ -33,7 +33,7 @@ struct _GbpDevicedDeployStrategy
 
 typedef struct
 {
-  IdeBuildPipeline      *pipeline;
+  IdePipeline      *pipeline;
   GbpDevicedDevice      *device;
   gchar                 *app_id;
   gchar                 *flatpak_path;
@@ -58,7 +58,7 @@ deploy_state_free (DeployState *state)
 
 static void
 gbp_deviced_deploy_strategy_load_async (IdeDeployStrategy   *strategy,
-                                        IdeBuildPipeline    *pipeline,
+                                        IdePipeline    *pipeline,
                                         GCancellable        *cancellable,
                                         GAsyncReadyCallback  callback,
                                         gpointer             user_data)
@@ -71,15 +71,15 @@ gbp_deviced_deploy_strategy_load_async (IdeDeployStrategy   *strategy,
   IDE_ENTRY;
 
   g_assert (GBP_IS_DEVICED_DEPLOY_STRATEGY (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
 
   task = ide_task_new (self, cancellable, callback, user_data);
   ide_task_set_source_tag (task, gbp_deviced_deploy_strategy_load_async);
 
-  config = ide_build_pipeline_get_config (pipeline);
+  config = ide_pipeline_get_config (pipeline);
 
-  if (!(device = ide_build_pipeline_get_device (pipeline)) ||
+  if (!(device = ide_pipeline_get_device (pipeline)) ||
       !GBP_IS_DEVICED_DEVICE (device) ||
       !GBP_IS_FLATPAK_MANIFEST (config))
     {
@@ -196,13 +196,13 @@ deploy_get_commit_cb (GObject      *object,
 
   state = ide_task_get_task_data (task);
   g_assert (state != NULL);
-  g_assert (IDE_IS_BUILD_PIPELINE (state->pipeline));
+  g_assert (IDE_IS_PIPELINE (state->pipeline));
 
   commit_id = gbp_deviced_device_get_commit_finish (device, result, NULL);
 
   context = ide_object_get_context (IDE_OBJECT (state->pipeline));
-  config = ide_build_pipeline_get_config (state->pipeline);
-  toolchain = ide_build_pipeline_get_toolchain (state->pipeline);
+  config = ide_pipeline_get_config (state->pipeline);
+  toolchain = ide_pipeline_get_toolchain (state->pipeline);
   triplet = ide_toolchain_get_host_triplet (toolchain);
   arch = ide_triplet_get_arch (triplet);
   staging_dir = gbp_flatpak_get_staging_dir (state->pipeline);
@@ -244,7 +244,7 @@ deploy_get_commit_cb (GObject      *object,
     }
 #endif
 
-  ide_build_pipeline_attach_pty (state->pipeline, launcher);
+  ide_pipeline_attach_pty (state->pipeline, launcher);
 
   if (!(subprocess = ide_subprocess_launcher_spawn (launcher, NULL, &error)))
     ide_task_return_error (task, g_steal_pointer (&error));
@@ -262,7 +262,7 @@ deploy_commit_cb (GObject      *object,
                   GAsyncResult *result,
                   gpointer      user_data)
 {
-  IdeBuildPipeline *pipeline = (IdeBuildPipeline *)object;
+  IdePipeline *pipeline = (IdePipeline *)object;
   g_autoptr(GError) error = NULL;
   g_autoptr(IdeTask) task = user_data;
   GCancellable *cancellable;
@@ -270,7 +270,7 @@ deploy_commit_cb (GObject      *object,
 
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (G_IS_ASYNC_RESULT (result));
   g_assert (IDE_IS_TASK (task));
 
@@ -283,7 +283,7 @@ deploy_commit_cb (GObject      *object,
   cancellable = ide_task_get_cancellable (task);
   state = ide_task_get_task_data (task);
 
-  if (!ide_build_pipeline_build_finish (pipeline, result, &error))
+  if (!ide_pipeline_build_finish (pipeline, result, &error))
     ide_task_return_error (task, g_steal_pointer (&error));
   else
     gbp_deviced_device_get_commit_async (state->device,
@@ -297,7 +297,7 @@ deploy_commit_cb (GObject      *object,
 
 static void
 gbp_deviced_deploy_strategy_deploy_async (IdeDeployStrategy     *strategy,
-                                          IdeBuildPipeline      *pipeline,
+                                          IdePipeline      *pipeline,
                                           GFileProgressCallback  progress,
                                           gpointer               progress_data,
                                           GDestroyNotify         progress_data_destroy,
@@ -318,15 +318,15 @@ gbp_deviced_deploy_strategy_deploy_async (IdeDeployStrategy     *strategy,
   IDE_ENTRY;
 
   g_assert (GBP_IS_DEVICED_DEPLOY_STRATEGY (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
 
   task = ide_task_new (self, cancellable, callback, user_data);
   ide_task_set_source_tag (task, gbp_deviced_deploy_strategy_deploy_async);
 
-  config = ide_build_pipeline_get_config (pipeline);
-  device = ide_build_pipeline_get_device (pipeline);
-  toolchain = ide_build_pipeline_get_toolchain (pipeline);
+  config = ide_pipeline_get_config (pipeline);
+  device = ide_pipeline_get_device (pipeline);
+  toolchain = ide_pipeline_get_toolchain (pipeline);
   triplet = ide_toolchain_get_host_triplet (toolchain);
   arch = ide_triplet_get_arch (triplet);
   app_id = ide_config_get_app_id (config);
@@ -348,8 +348,8 @@ gbp_deviced_deploy_strategy_deploy_async (IdeDeployStrategy     *strategy,
    * build-finish/build-export in the flatpak plugin.
    */
 
-  ide_build_pipeline_build_async (pipeline,
-                                  IDE_BUILD_PHASE_COMMIT,
+  ide_pipeline_build_async (pipeline,
+                                  IDE_PIPELINE_PHASE_COMMIT,
                                   cancellable,
                                   deploy_commit_cb,
                                   g_steal_pointer (&task));
diff --git a/src/plugins/flatpak/flatpak-plugin.c b/src/plugins/flatpak/flatpak-plugin.c
index 6c85527c1..4f5a47163 100644
--- a/src/plugins/flatpak/flatpak-plugin.c
+++ b/src/plugins/flatpak/flatpak-plugin.c
@@ -61,7 +61,7 @@ _gbp_flatpak_register_types (PeasObjectModule *module)
                                               IDE_TYPE_APPLICATION_ADDIN,
                                               GBP_TYPE_FLATPAK_APPLICATION_ADDIN);
   peas_object_module_register_extension_type (module,
-                                              IDE_TYPE_BUILD_PIPELINE_ADDIN,
+                                              IDE_TYPE_PIPELINE_ADDIN,
                                               GBP_TYPE_FLATPAK_PIPELINE_ADDIN);
   peas_object_module_register_extension_type (module,
                                               IDE_TYPE_PREFERENCES_ADDIN,
diff --git a/src/plugins/flatpak/gbp-flatpak-dependency-updater.c 
b/src/plugins/flatpak/gbp-flatpak-dependency-updater.c
index a427250c4..40c05859a 100644
--- a/src/plugins/flatpak/gbp-flatpak-dependency-updater.c
+++ b/src/plugins/flatpak/gbp-flatpak-dependency-updater.c
@@ -34,7 +34,7 @@ find_download_stage_cb (gpointer data,
 {
   GbpFlatpakDownloadStage **stage = user_data;
 
-  g_assert (IDE_IS_BUILD_STAGE (data));
+  g_assert (IDE_IS_PIPELINE_STAGE (data));
   g_assert (stage != NULL);
 
   if (GBP_IS_FLATPAK_DOWNLOAD_STAGE (data))
@@ -69,7 +69,7 @@ gbp_flatpak_dependency_updater_update_async (IdeDependencyUpdater *updater,
   GbpFlatpakDependencyUpdater *self = (GbpFlatpakDependencyUpdater *)updater;
   GbpFlatpakDownloadStage *stage = NULL;
   g_autoptr(IdeTask) task = NULL;
-  IdeBuildPipeline *pipeline;
+  IdePipeline *pipeline;
   IdeBuildManager *manager;
   IdeContext *context;
 
@@ -87,7 +87,7 @@ gbp_flatpak_dependency_updater_update_async (IdeDependencyUpdater *updater,
   g_assert (IDE_IS_BUILD_MANAGER (manager));
 
   pipeline = ide_build_manager_get_pipeline (manager);
-  g_assert (!pipeline || IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (!pipeline || IDE_IS_PIPELINE (pipeline));
 
   if (pipeline == NULL)
     {
@@ -99,7 +99,7 @@ gbp_flatpak_dependency_updater_update_async (IdeDependencyUpdater *updater,
     }
 
   /* Find the downloads stage and tell it to download updates one time */
-  ide_build_pipeline_foreach_stage (pipeline, find_download_stage_cb, &stage);
+  ide_pipeline_foreach_stage (pipeline, find_download_stage_cb, &stage);
 
   if (stage == NULL)
     {
@@ -111,13 +111,13 @@ gbp_flatpak_dependency_updater_update_async (IdeDependencyUpdater *updater,
   gbp_flatpak_download_stage_force_update (stage);
 
   /* Ensure downloads and everything past it is invalidated */
-  ide_build_pipeline_invalidate_phase (pipeline, IDE_BUILD_PHASE_DOWNLOADS);
+  ide_pipeline_invalidate_phase (pipeline, IDE_PIPELINE_PHASE_DOWNLOADS);
 
   /* Start building all the way up to the project configure so that
    * the user knows if the updates broke their configuration or anything.
    */
   ide_build_manager_rebuild_async (manager,
-                                   IDE_BUILD_PHASE_CONFIGURE,
+                                   IDE_PIPELINE_PHASE_CONFIGURE,
                                    NULL,
                                    NULL,
                                    gbp_flatpak_dependency_updater_update_cb,
diff --git a/src/plugins/flatpak/gbp-flatpak-download-stage.c 
b/src/plugins/flatpak/gbp-flatpak-download-stage.c
index 9fdd19e8d..746b2a417 100644
--- a/src/plugins/flatpak/gbp-flatpak-download-stage.c
+++ b/src/plugins/flatpak/gbp-flatpak-download-stage.c
@@ -29,7 +29,7 @@
 
 struct _GbpFlatpakDownloadStage
 {
-  IdeBuildStageLauncher parent_instance;
+  IdePipelineStageLauncher parent_instance;
 
   gchar *state_dir;
 
@@ -37,7 +37,7 @@ struct _GbpFlatpakDownloadStage
   guint force_update : 1;
 };
 
-G_DEFINE_TYPE (GbpFlatpakDownloadStage, gbp_flatpak_download_stage, IDE_TYPE_BUILD_STAGE_LAUNCHER)
+G_DEFINE_TYPE (GbpFlatpakDownloadStage, gbp_flatpak_download_stage, IDE_TYPE_PIPELINE_STAGE_LAUNCHER)
 
 enum {
   PROP_0,
@@ -48,8 +48,8 @@ enum {
 static GParamSpec *properties [N_PROPS];
 
 static void
-gbp_flatpak_download_stage_query (IdeBuildStage    *stage,
-                                  IdeBuildPipeline *pipeline,
+gbp_flatpak_download_stage_query (IdePipelineStage    *stage,
+                                  IdePipeline *pipeline,
                                   GPtrArray        *targets,
                                   GCancellable     *cancellable)
 {
@@ -62,26 +62,26 @@ gbp_flatpak_download_stage_query (IdeBuildStage    *stage,
   const gchar *primary_module;
 
   g_assert (GBP_IS_FLATPAK_DOWNLOAD_STAGE (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
 
   /* Ignore downloads if there is no connection */
   if (!ide_application_has_network (IDE_APPLICATION_DEFAULT))
     {
-      ide_build_stage_log (stage,
+      ide_pipeline_stage_log (stage,
                            IDE_BUILD_LOG_STDERR,
                            _("Network is not available, skipping downloads"),
                            -1);
-      ide_build_stage_set_completed (stage, TRUE);
+      ide_pipeline_stage_set_completed (stage, TRUE);
       return;
     }
 
-  config = ide_build_pipeline_get_config (pipeline);
+  config = ide_pipeline_get_config (pipeline);
   g_assert (!config || IDE_IS_CONFIG (config));
 
   if (!GBP_IS_FLATPAK_MANIFEST (config))
     {
-      ide_build_stage_set_completed (stage, TRUE);
+      ide_pipeline_stage_set_completed (stage, TRUE);
       return;
     }
 
@@ -95,7 +95,7 @@ gbp_flatpak_download_stage_query (IdeBuildStage    *stage,
       primary_module = gbp_flatpak_manifest_get_primary_module (GBP_FLATPAK_MANIFEST (config));
       manifest_path = gbp_flatpak_manifest_get_path (GBP_FLATPAK_MANIFEST (config));
       staging_dir = gbp_flatpak_get_staging_dir (pipeline);
-      src_dir = ide_build_pipeline_get_srcdir (pipeline);
+      src_dir = ide_pipeline_get_srcdir (pipeline);
 
       launcher = ide_subprocess_launcher_new (G_SUBPROCESS_FLAGS_STDOUT_PIPE |
                                               G_SUBPROCESS_FLAGS_STDERR_PIPE);
@@ -112,7 +112,7 @@ gbp_flatpak_download_stage_query (IdeBuildStage    *stage,
           ide_subprocess_launcher_setenv (launcher, "XDG_RUNTIME_DIR", g_get_user_runtime_dir (), TRUE);
         }
 
-      runtime = ide_build_pipeline_get_runtime (pipeline);
+      runtime = ide_pipeline_get_runtime (pipeline);
       arch = ide_runtime_get_arch (runtime);
       arch_param = g_strdup_printf ("--arch=%s", arch);
 
@@ -138,8 +138,8 @@ gbp_flatpak_download_stage_query (IdeBuildStage    *stage,
       ide_subprocess_launcher_push_argv (launcher, staging_dir);
       ide_subprocess_launcher_push_argv (launcher, manifest_path);
 
-      ide_build_stage_launcher_set_launcher (IDE_BUILD_STAGE_LAUNCHER (self), launcher);
-      ide_build_stage_set_completed (stage, FALSE);
+      ide_pipeline_stage_launcher_set_launcher (IDE_PIPELINE_STAGE_LAUNCHER (self), launcher);
+      ide_pipeline_stage_set_completed (stage, FALSE);
 
       self->invalid = FALSE;
       self->force_update = FALSE;
@@ -181,7 +181,7 @@ static void
 gbp_flatpak_download_stage_class_init (GbpFlatpakDownloadStageClass *klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
-  IdeBuildStageClass *stage_class = IDE_BUILD_STAGE_CLASS (klass);
+  IdePipelineStageClass *stage_class = IDE_PIPELINE_STAGE_CLASS (klass);
 
   object_class->finalize = gbp_flatpak_download_stage_finalize;
   object_class->set_property = gbp_flatpak_download_stage_set_property;
@@ -212,7 +212,7 @@ gbp_flatpak_download_stage_init (GbpFlatpakDownloadStage *self)
   self->invalid = TRUE;
 
   /* Allow downloads to fail in case we can still make progress */
-  ide_build_stage_launcher_set_ignore_exit_status (IDE_BUILD_STAGE_LAUNCHER (self), TRUE);
+  ide_pipeline_stage_launcher_set_ignore_exit_status (IDE_PIPELINE_STAGE_LAUNCHER (self), TRUE);
 }
 
 void
diff --git a/src/plugins/flatpak/gbp-flatpak-download-stage.h 
b/src/plugins/flatpak/gbp-flatpak-download-stage.h
index 3dff748e8..9ef6adf12 100644
--- a/src/plugins/flatpak/gbp-flatpak-download-stage.h
+++ b/src/plugins/flatpak/gbp-flatpak-download-stage.h
@@ -26,7 +26,7 @@ G_BEGIN_DECLS
 
 #define GBP_TYPE_FLATPAK_DOWNLOAD_STAGE (gbp_flatpak_download_stage_get_type())
 
-G_DECLARE_FINAL_TYPE (GbpFlatpakDownloadStage, gbp_flatpak_download_stage, GBP, FLATPAK_DOWNLOAD_STAGE, 
IdeBuildStageLauncher)
+G_DECLARE_FINAL_TYPE (GbpFlatpakDownloadStage, gbp_flatpak_download_stage, GBP, FLATPAK_DOWNLOAD_STAGE, 
IdePipelineStageLauncher)
 
 void gbp_flatpak_download_stage_force_update (GbpFlatpakDownloadStage *self);
 
diff --git a/src/plugins/flatpak/gbp-flatpak-pipeline-addin.c 
b/src/plugins/flatpak/gbp-flatpak-pipeline-addin.c
index 2e6d07cb1..01e8b5577 100644
--- a/src/plugins/flatpak/gbp-flatpak-pipeline-addin.c
+++ b/src/plugins/flatpak/gbp-flatpak-pipeline-addin.c
@@ -64,14 +64,14 @@ enum {
 };
 
 static gchar *
-get_arch_option (IdeBuildPipeline *pipeline)
+get_arch_option (IdePipeline *pipeline)
 {
   g_autofree gchar *arch = NULL;
   IdeRuntime *runtime;
 
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
-  runtime = ide_build_pipeline_get_runtime (pipeline);
+  runtime = ide_pipeline_get_runtime (pipeline);
   arch = ide_runtime_get_arch (runtime);
 
   return g_strdup_printf ("--arch=%s", arch);
@@ -111,18 +111,18 @@ sniff_flatpak_builder_version (GbpFlatpakPipelineAddin *self)
 }
 
 static void
-always_run_query_handler (IdeBuildStage    *stage,
+always_run_query_handler (IdePipelineStage    *stage,
                           GPtrArray        *targets,
-                          IdeBuildPipeline *pipeline,
+                          IdePipeline *pipeline,
                           GCancellable     *cancellable,
                           gpointer          user_data)
 {
   g_assert (IDE_IS_MAIN_THREAD ());
-  g_assert (IDE_IS_BUILD_STAGE (stage));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE_STAGE (stage));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
 
-  ide_build_stage_set_completed (stage, FALSE);
+  ide_pipeline_stage_set_completed (stage, FALSE);
 }
 
 static IdeSubprocessLauncher *
@@ -140,31 +140,31 @@ create_subprocess_launcher (void)
 
 static gboolean
 register_mkdirs_stage (GbpFlatpakPipelineAddin  *self,
-                       IdeBuildPipeline         *pipeline,
+                       IdePipeline         *pipeline,
                        IdeContext               *context,
                        GError                  **error)
 {
-  g_autoptr(IdeBuildStage) mkdirs = NULL;
+  g_autoptr(IdePipelineStage) mkdirs = NULL;
   g_autofree gchar *repo_dir = NULL;
   g_autofree gchar *staging_dir = NULL;
   guint stage_id;
 
   g_assert (GBP_IS_FLATPAK_PIPELINE_ADDIN (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (IDE_IS_CONTEXT (context));
 
-  mkdirs = ide_build_stage_mkdirs_new (context);
-  ide_build_stage_set_name (mkdirs, _("Creating flatpak workspace"));
+  mkdirs = ide_pipeline_stage_mkdirs_new (context);
+  ide_pipeline_stage_set_name (mkdirs, _("Creating flatpak workspace"));
 
   repo_dir = gbp_flatpak_get_repo_dir (context);
   staging_dir = gbp_flatpak_get_staging_dir (pipeline);
 
-  ide_build_stage_mkdirs_add_path (IDE_BUILD_STAGE_MKDIRS (mkdirs), repo_dir, TRUE, 0750, FALSE);
-  ide_build_stage_mkdirs_add_path (IDE_BUILD_STAGE_MKDIRS (mkdirs), staging_dir, TRUE, 0750, TRUE);
+  ide_pipeline_stage_mkdirs_add_path (IDE_PIPELINE_STAGE_MKDIRS (mkdirs), repo_dir, TRUE, 0750, FALSE);
+  ide_pipeline_stage_mkdirs_add_path (IDE_PIPELINE_STAGE_MKDIRS (mkdirs), staging_dir, TRUE, 0750, TRUE);
 
-  stage_id = ide_build_pipeline_attach (pipeline, IDE_BUILD_PHASE_PREPARE, PREPARE_MKDIRS, mkdirs);
+  stage_id = ide_pipeline_attach (pipeline, IDE_PIPELINE_PHASE_PREPARE, PREPARE_MKDIRS, mkdirs);
 
-  ide_build_pipeline_addin_track (IDE_BUILD_PIPELINE_ADDIN (self), stage_id);
+  ide_pipeline_addin_track (IDE_PIPELINE_ADDIN (self), stage_id);
 
   return TRUE;
 }
@@ -175,28 +175,28 @@ reap_staging_dir_cb (GObject      *object,
                      gpointer      user_data)
 {
   DzlDirectoryReaper *reaper = (DzlDirectoryReaper *)object;
-  g_autoptr(IdeBuildStage) stage = user_data;
+  g_autoptr(IdePipelineStage) stage = user_data;
   g_autoptr(GError) error = NULL;
 
   IDE_ENTRY;
 
   g_assert (DZL_IS_DIRECTORY_REAPER (reaper));
   g_assert (G_IS_ASYNC_RESULT (result));
-  g_assert (IDE_IS_BUILD_STAGE (stage));
+  g_assert (IDE_IS_PIPELINE_STAGE (stage));
 
   if (!dzl_directory_reaper_execute_finish (reaper, result, &error))
     ide_object_warning (stage,
                         "Failed to reap staging directory: %s",
                         error->message);
 
-  ide_build_stage_unpause (stage);
+  ide_pipeline_stage_unpause (stage);
 
   IDE_EXIT;
 }
 
 static void
-check_for_build_init_files (IdeBuildStage    *stage,
-                            IdeBuildPipeline *pipeline,
+check_for_build_init_files (IdePipelineStage    *stage,
+                            IdePipeline *pipeline,
                             GPtrArray        *targets,
                             GCancellable     *cancellable,
                             const gchar      *staging_dir)
@@ -208,7 +208,7 @@ check_for_build_init_files (IdeBuildStage    *stage,
   gboolean parent_exists;
 
   g_assert (IDE_IS_MAIN_THREAD ());
-  g_assert (IDE_IS_BUILD_STAGE (stage));
+  g_assert (IDE_IS_PIPELINE_STAGE (stage));
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
   g_assert (staging_dir != NULL);
 
@@ -227,14 +227,14 @@ check_for_build_init_files (IdeBuildStage    *stage,
   IDE_TRACE_MSG ("Checking for previous build-init in %s: %s",
                  staging_dir, completed ? "yes" : "no");
 
-  ide_build_stage_set_completed (stage, completed);
+  ide_pipeline_stage_set_completed (stage, completed);
 
   if (!completed && parent_exists)
     {
       g_autoptr(DzlDirectoryReaper) reaper = NULL;
       g_autoptr(GFile) staging = g_file_new_for_path (staging_dir);
 
-      ide_build_stage_pause (stage);
+      ide_pipeline_stage_pause (stage);
 
       reaper = dzl_directory_reaper_new ();
       dzl_directory_reaper_add_directory (reaper, staging, 0);
@@ -246,13 +246,13 @@ check_for_build_init_files (IdeBuildStage    *stage,
 }
 
 static void
-reap_staging_dir (IdeBuildStage      *stage,
+reap_staging_dir (IdePipelineStage      *stage,
                   DzlDirectoryReaper *reaper,
                   const gchar        *staging_dir)
 {
   g_autoptr(GFile) dir = NULL;
 
-  g_assert (IDE_IS_BUILD_STAGE (stage));
+  g_assert (IDE_IS_PIPELINE_STAGE (stage));
   g_assert (DZL_IS_DIRECTORY_REAPER (reaper));
   g_assert (staging_dir != NULL);
 
@@ -262,12 +262,12 @@ reap_staging_dir (IdeBuildStage      *stage,
 
 static gboolean
 register_build_init_stage (GbpFlatpakPipelineAddin  *self,
-                           IdeBuildPipeline         *pipeline,
+                           IdePipeline         *pipeline,
                            IdeContext               *context,
                            GError                  **error)
 {
   g_autoptr(IdeSubprocessLauncher) launcher = NULL;
-  g_autoptr(IdeBuildStage) stage = NULL;
+  g_autoptr(IdePipelineStage) stage = NULL;
   g_autofree gchar *staging_dir = NULL;
   g_autofree gchar *sdk = NULL;
   g_autofree gchar *arch = NULL;
@@ -279,13 +279,13 @@ register_build_init_stage (GbpFlatpakPipelineAddin  *self,
   guint stage_id;
 
   g_assert (GBP_IS_FLATPAK_PIPELINE_ADDIN (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (IDE_IS_CONTEXT (context));
 
   launcher = create_subprocess_launcher ();
 
-  config = ide_build_pipeline_get_config (pipeline);
-  runtime = ide_build_pipeline_get_runtime (pipeline);
+  config = ide_pipeline_get_config (pipeline);
+  runtime = ide_pipeline_get_runtime (pipeline);
 
   if (!GBP_IS_FLATPAK_RUNTIME (runtime))
     {
@@ -334,7 +334,7 @@ register_build_init_stage (GbpFlatpakPipelineAddin  *self,
   ide_subprocess_launcher_push_argv (launcher, platform);
   ide_subprocess_launcher_push_argv (launcher, branch);
 
-  stage = g_object_new (IDE_TYPE_BUILD_STAGE_LAUNCHER,
+  stage = g_object_new (IDE_TYPE_PIPELINE_STAGE_LAUNCHER,
                         "name", _("Preparing build directory"),
                         "launcher", launcher,
                         NULL);
@@ -362,45 +362,45 @@ register_build_init_stage (GbpFlatpakPipelineAddin  *self,
                          (GClosureNotify)g_free,
                          0);
 
-  stage_id = ide_build_pipeline_attach (pipeline,
-                                         IDE_BUILD_PHASE_PREPARE,
+  stage_id = ide_pipeline_attach (pipeline,
+                                         IDE_PIPELINE_PHASE_PREPARE,
                                          PREPARE_BUILD_INIT,
                                          stage);
-  ide_build_pipeline_addin_track (IDE_BUILD_PIPELINE_ADDIN (self), stage_id);
+  ide_pipeline_addin_track (IDE_PIPELINE_ADDIN (self), stage_id);
 
   return TRUE;
 }
 
 static gboolean
 register_downloads_stage (GbpFlatpakPipelineAddin  *self,
-                          IdeBuildPipeline         *pipeline,
+                          IdePipeline         *pipeline,
                           IdeContext               *context,
                           GError                  **error)
 {
-  g_autoptr(IdeBuildStage) stage = NULL;
+  g_autoptr(IdePipelineStage) stage = NULL;
   guint stage_id;
 
   g_assert (GBP_IS_FLATPAK_PIPELINE_ADDIN (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (IDE_IS_CONTEXT (context));
 
   stage = g_object_new (GBP_TYPE_FLATPAK_DOWNLOAD_STAGE,
                         "name", _("Downloading dependencies"),
                         "state-dir", self->state_dir,
                         NULL);
-  stage_id = ide_build_pipeline_attach (pipeline, IDE_BUILD_PHASE_DOWNLOADS, 0, stage);
-  ide_build_pipeline_addin_track (IDE_BUILD_PIPELINE_ADDIN (self), stage_id);
+  stage_id = ide_pipeline_attach (pipeline, IDE_PIPELINE_PHASE_DOWNLOADS, 0, stage);
+  ide_pipeline_addin_track (IDE_PIPELINE_ADDIN (self), stage_id);
 
   return TRUE;
 }
 
 static gboolean
 register_dependencies_stage (GbpFlatpakPipelineAddin  *self,
-                             IdeBuildPipeline         *pipeline,
+                             IdePipeline         *pipeline,
                              IdeContext               *context,
                              GError                  **error)
 {
-  g_autoptr(IdeBuildStage) stage = NULL;
+  g_autoptr(IdePipelineStage) stage = NULL;
   g_autoptr(IdeSubprocessLauncher) launcher = NULL;
   g_autofree gchar *arch = NULL;
   g_autofree gchar *manifest_path = NULL;
@@ -412,10 +412,10 @@ register_dependencies_stage (GbpFlatpakPipelineAddin  *self,
   guint stage_id;
 
   g_assert (GBP_IS_FLATPAK_PIPELINE_ADDIN (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (IDE_IS_CONTEXT (context));
 
-  config = ide_build_pipeline_get_config (pipeline);
+  config = ide_pipeline_get_config (pipeline);
 
   /* If there is no manifest, then there are no dependencies
    * to build for this configuration.
@@ -428,7 +428,7 @@ register_dependencies_stage (GbpFlatpakPipelineAddin  *self,
   manifest_path = gbp_flatpak_manifest_get_path (GBP_FLATPAK_MANIFEST (config));
 
   staging_dir = gbp_flatpak_get_staging_dir (pipeline);
-  src_dir = ide_build_pipeline_get_srcdir (pipeline);
+  src_dir = ide_pipeline_get_srcdir (pipeline);
 
   launcher = create_subprocess_launcher ();
 
@@ -463,25 +463,25 @@ register_dependencies_stage (GbpFlatpakPipelineAddin  *self,
   ide_subprocess_launcher_push_argv (launcher, staging_dir);
   ide_subprocess_launcher_push_argv (launcher, manifest_path);
 
-  stage = g_object_new (IDE_TYPE_BUILD_STAGE_LAUNCHER,
+  stage = g_object_new (IDE_TYPE_PIPELINE_STAGE_LAUNCHER,
                         "name", _("Building dependencies"),
                         "launcher", launcher,
                         NULL);
 
-  stage_id = ide_build_pipeline_attach (pipeline, IDE_BUILD_PHASE_DEPENDENCIES, 0, stage);
-  ide_build_pipeline_addin_track (IDE_BUILD_PIPELINE_ADDIN (self), stage_id);
+  stage_id = ide_pipeline_attach (pipeline, IDE_PIPELINE_PHASE_DEPENDENCIES, 0, stage);
+  ide_pipeline_addin_track (IDE_PIPELINE_ADDIN (self), stage_id);
 
   return TRUE;
 }
 
 static gboolean
 register_build_finish_stage (GbpFlatpakPipelineAddin  *self,
-                             IdeBuildPipeline         *pipeline,
+                             IdePipeline         *pipeline,
                              IdeContext               *context,
                              GError                  **error)
 {
   g_autoptr(IdeSubprocessLauncher) launcher = NULL;
-  g_autoptr(IdeBuildStage) stage = NULL;
+  g_autoptr(IdePipelineStage) stage = NULL;
   g_autofree gchar *staging_dir = NULL;
   const gchar * const *finish_args;
   const gchar *command;
@@ -489,10 +489,10 @@ register_build_finish_stage (GbpFlatpakPipelineAddin  *self,
   guint stage_id;
 
   g_assert (GBP_IS_FLATPAK_PIPELINE_ADDIN (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (IDE_IS_CONTEXT (context));
 
-  config = ide_build_pipeline_get_config (pipeline);
+  config = ide_pipeline_get_config (pipeline);
   if (!GBP_IS_FLATPAK_MANIFEST (config))
     return TRUE;
 
@@ -514,25 +514,25 @@ register_build_finish_stage (GbpFlatpakPipelineAddin  *self,
   ide_subprocess_launcher_push_args (launcher, finish_args);
   ide_subprocess_launcher_push_argv (launcher, staging_dir);
 
-  stage = g_object_new (IDE_TYPE_BUILD_STAGE_LAUNCHER,
+  stage = g_object_new (IDE_TYPE_PIPELINE_STAGE_LAUNCHER,
                         "name", _("Finalizing flatpak build"),
                         "launcher", launcher,
                         NULL);
 
-  stage_id = ide_build_pipeline_attach (pipeline, IDE_BUILD_PHASE_COMMIT, COMMIT_BUILD_FINISH, stage);
-  ide_build_pipeline_addin_track (IDE_BUILD_PIPELINE_ADDIN (self), stage_id);
+  stage_id = ide_pipeline_attach (pipeline, IDE_PIPELINE_PHASE_COMMIT, COMMIT_BUILD_FINISH, stage);
+  ide_pipeline_addin_track (IDE_PIPELINE_ADDIN (self), stage_id);
 
   return TRUE;
 }
 
 static gboolean
 register_build_export_stage (GbpFlatpakPipelineAddin  *self,
-                             IdeBuildPipeline         *pipeline,
+                             IdePipeline         *pipeline,
                              IdeContext               *context,
                              GError                  **error)
 {
   g_autoptr(IdeSubprocessLauncher) launcher = NULL;
-  g_autoptr(IdeBuildStage) stage = NULL;
+  g_autoptr(IdePipelineStage) stage = NULL;
   g_autofree gchar *arch = NULL;
   g_autofree gchar *repo_dir = NULL;
   g_autofree gchar *staging_dir = NULL;
@@ -540,10 +540,10 @@ register_build_export_stage (GbpFlatpakPipelineAddin  *self,
   guint stage_id;
 
   g_assert (GBP_IS_FLATPAK_PIPELINE_ADDIN (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (IDE_IS_CONTEXT (context));
 
-  config = ide_build_pipeline_get_config (pipeline);
+  config = ide_pipeline_get_config (pipeline);
   if (!GBP_IS_FLATPAK_MANIFEST (config))
     return TRUE;
 
@@ -559,7 +559,7 @@ register_build_export_stage (GbpFlatpakPipelineAddin  *self,
   ide_subprocess_launcher_push_argv (launcher, repo_dir);
   ide_subprocess_launcher_push_argv (launcher, staging_dir);
 
-  stage = g_object_new (IDE_TYPE_BUILD_STAGE_LAUNCHER,
+  stage = g_object_new (IDE_TYPE_PIPELINE_STAGE_LAUNCHER,
                         "name", _("Exporting staging directory"),
                         "launcher", launcher,
                         NULL);
@@ -569,18 +569,18 @@ register_build_export_stage (GbpFlatpakPipelineAddin  *self,
                     G_CALLBACK (always_run_query_handler),
                     NULL);
 
-  stage_id = ide_build_pipeline_attach (pipeline, IDE_BUILD_PHASE_COMMIT, COMMIT_BUILD_EXPORT, stage);
-  ide_build_pipeline_addin_track (IDE_BUILD_PIPELINE_ADDIN (self), stage_id);
+  stage_id = ide_pipeline_attach (pipeline, IDE_PIPELINE_PHASE_COMMIT, COMMIT_BUILD_EXPORT, stage);
+  ide_pipeline_addin_track (IDE_PIPELINE_ADDIN (self), stage_id);
 
   return TRUE;
 }
 
 static void
-build_bundle_notify_completed (IdeBuildStage *stage,
+build_bundle_notify_completed (IdePipelineStage *stage,
                                GParamSpec    *pspec,
                                const gchar   *dest_path)
 {
-  g_assert (IDE_IS_BUILD_STAGE (stage));
+  g_assert (IDE_IS_PIPELINE_STAGE (stage));
   g_assert (dest_path != NULL);
 
   /*
@@ -588,7 +588,7 @@ build_bundle_notify_completed (IdeBuildStage *stage,
    * to the user so they can copy/paste/share/etc.
    */
 
-  if (ide_build_stage_get_completed (stage))
+  if (ide_pipeline_stage_get_completed (stage))
     {
       g_autoptr(GFile) file = g_file_new_for_path (dest_path);
       dzl_file_manager_show (file, NULL);
@@ -597,11 +597,11 @@ build_bundle_notify_completed (IdeBuildStage *stage,
 
 static gboolean
 register_build_bundle_stage (GbpFlatpakPipelineAddin  *self,
-                             IdeBuildPipeline         *pipeline,
+                             IdePipeline         *pipeline,
                              IdeContext               *context,
                              GError                  **error)
 {
-  g_autoptr(IdeBuildStage) stage = NULL;
+  g_autoptr(IdePipelineStage) stage = NULL;
   g_autoptr(IdeSubprocessLauncher) launcher = NULL;
   g_autofree gchar *staging_dir = NULL;
   g_autofree gchar *repo_dir = NULL;
@@ -613,10 +613,10 @@ register_build_bundle_stage (GbpFlatpakPipelineAddin  *self,
   guint stage_id;
 
   g_assert (GBP_IS_FLATPAK_PIPELINE_ADDIN (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (IDE_IS_CONTEXT (context));
 
-  config = ide_build_pipeline_get_config (pipeline);
+  config = ide_pipeline_get_config (pipeline);
   if (!GBP_IS_FLATPAK_MANIFEST (config))
     return TRUE;
 
@@ -644,7 +644,7 @@ register_build_bundle_stage (GbpFlatpakPipelineAddin  *self,
    */
   ide_subprocess_launcher_push_argv (launcher, "master");
 
-  stage = g_object_new (IDE_TYPE_BUILD_STAGE_LAUNCHER,
+  stage = g_object_new (IDE_TYPE_PIPELINE_STAGE_LAUNCHER,
                         "name", _("Creating flatpak bundle"),
                         "launcher", launcher,
                         NULL);
@@ -661,15 +661,15 @@ register_build_bundle_stage (GbpFlatpakPipelineAddin  *self,
                          (GClosureNotify)g_free,
                          0);
 
-  stage_id = ide_build_pipeline_attach (pipeline, IDE_BUILD_PHASE_EXPORT, EXPORT_BUILD_BUNDLE, stage);
-  ide_build_pipeline_addin_track (IDE_BUILD_PIPELINE_ADDIN (self), stage_id);
+  stage_id = ide_pipeline_attach (pipeline, IDE_PIPELINE_PHASE_EXPORT, EXPORT_BUILD_BUNDLE, stage);
+  ide_pipeline_addin_track (IDE_PIPELINE_ADDIN (self), stage_id);
 
   return TRUE;
 }
 
 static void
-gbp_flatpak_pipeline_addin_load (IdeBuildPipelineAddin *addin,
-                                 IdeBuildPipeline      *pipeline)
+gbp_flatpak_pipeline_addin_load (IdePipelineAddin *addin,
+                                 IdePipeline      *pipeline)
 {
   GbpFlatpakPipelineAddin *self = (GbpFlatpakPipelineAddin *)addin;
   g_autoptr(GError) error = NULL;
@@ -677,9 +677,9 @@ gbp_flatpak_pipeline_addin_load (IdeBuildPipelineAddin *addin,
   IdeContext *context;
 
   g_assert (GBP_IS_FLATPAK_PIPELINE_ADDIN (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
-  config = ide_build_pipeline_get_config (pipeline);
+  config = ide_pipeline_get_config (pipeline);
 
   if (!GBP_IS_FLATPAK_MANIFEST (config))
     {
@@ -726,13 +726,13 @@ gbp_flatpak_pipeline_addin_load (IdeBuildPipelineAddin *addin,
 }
 
 static void
-gbp_flatpak_pipeline_addin_unload (IdeBuildPipelineAddin *addin,
-                                   IdeBuildPipeline      *pipeline)
+gbp_flatpak_pipeline_addin_unload (IdePipelineAddin *addin,
+                                   IdePipeline      *pipeline)
 {
   GbpFlatpakPipelineAddin *self = (GbpFlatpakPipelineAddin *)addin;
 
   g_assert (GBP_IS_FLATPAK_PIPELINE_ADDIN (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
   g_clear_pointer (&self->state_dir, g_free);
 }
@@ -740,15 +740,15 @@ gbp_flatpak_pipeline_addin_unload (IdeBuildPipelineAddin *addin,
 /* GObject boilerplate */
 
 static void
-build_pipeline_addin_iface_init (IdeBuildPipelineAddinInterface *iface)
+pipeline_addin_iface_init (IdePipelineAddinInterface *iface)
 {
   iface->load = gbp_flatpak_pipeline_addin_load;
   iface->unload = gbp_flatpak_pipeline_addin_unload;
 }
 
 G_DEFINE_TYPE_WITH_CODE (GbpFlatpakPipelineAddin, gbp_flatpak_pipeline_addin, IDE_TYPE_OBJECT,
-                         G_IMPLEMENT_INTERFACE (IDE_TYPE_BUILD_PIPELINE_ADDIN,
-                                                build_pipeline_addin_iface_init))
+                         G_IMPLEMENT_INTERFACE (IDE_TYPE_PIPELINE_ADDIN,
+                                                pipeline_addin_iface_init))
 
 static void
 gbp_flatpak_pipeline_addin_class_init (GbpFlatpakPipelineAddinClass *klass)
diff --git a/src/plugins/flatpak/gbp-flatpak-runtime-provider.c 
b/src/plugins/flatpak/gbp-flatpak-runtime-provider.c
index 16931512a..02a7047fe 100644
--- a/src/plugins/flatpak/gbp-flatpak-runtime-provider.c
+++ b/src/plugins/flatpak/gbp-flatpak-runtime-provider.c
@@ -621,7 +621,7 @@ gbp_flatpak_runtime_provider_bootstrap_cb (GObject      *object,
 
 static void
 gbp_flatpak_runtime_provider_bootstrap_async (IdeRuntimeProvider  *provider,
-                                              IdeBuildPipeline    *pipeline,
+                                              IdePipeline    *pipeline,
                                               GCancellable        *cancellable,
                                               GAsyncReadyCallback  callback,
                                               gpointer             user_data)
@@ -641,17 +641,17 @@ gbp_flatpak_runtime_provider_bootstrap_async (IdeRuntimeProvider  *provider,
   IDE_ENTRY;
 
   g_assert (GBP_IS_FLATPAK_RUNTIME_PROVIDER (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
 
   task = ide_task_new (self, cancellable, callback, user_data);
   ide_task_set_source_tag (task, gbp_flatpak_runtime_provider_bootstrap_async);
   ide_task_set_priority (task, G_PRIORITY_LOW);
 
-  toolchain = ide_build_pipeline_get_toolchain (pipeline);
+  toolchain = ide_pipeline_get_toolchain (pipeline);
   triplet = ide_toolchain_get_host_triplet (toolchain);
   build_arch = ide_triplet_get_arch (triplet);
-  config = ide_build_pipeline_get_config (pipeline);
+  config = ide_pipeline_get_config (pipeline);
   runtime_id = ide_config_get_runtime_id (config);
 
   if (runtime_id == NULL ||
diff --git a/src/plugins/flatpak/gbp-flatpak-runtime.c b/src/plugins/flatpak/gbp-flatpak-runtime.c
index b0c285753..ab5ca1253 100644
--- a/src/plugins/flatpak/gbp-flatpak-runtime.c
+++ b/src/plugins/flatpak/gbp-flatpak-runtime.c
@@ -71,9 +71,9 @@ get_builddir (GbpFlatpakRuntime *self)
 {
   g_autoptr(IdeContext) context = ide_object_ref_context (IDE_OBJECT (self));
   g_autoptr(IdeBuildManager) build_manager = ide_build_manager_ref_from_context (context);
-  g_autoptr(IdeBuildPipeline) pipeline = ide_build_manager_ref_pipeline (build_manager);
+  g_autoptr(IdePipeline) pipeline = ide_build_manager_ref_pipeline (build_manager);
 
-  return ide_build_pipeline_get_builddir (pipeline);
+  return ide_pipeline_get_builddir (pipeline);
 }
 
 static gchar *
@@ -81,7 +81,7 @@ get_staging_directory (GbpFlatpakRuntime *self)
 {
   g_autoptr(IdeContext) context = ide_object_ref_context (IDE_OBJECT (self));
   g_autoptr(IdeBuildManager) build_manager = ide_build_manager_ref_from_context (context);
-  g_autoptr(IdeBuildPipeline) pipeline = ide_build_manager_ref_pipeline (build_manager);
+  g_autoptr(IdePipeline) pipeline = ide_build_manager_ref_pipeline (build_manager);
 
   return gbp_flatpak_get_staging_dir (pipeline);
 }
diff --git a/src/plugins/flatpak/gbp-flatpak-util.c b/src/plugins/flatpak/gbp-flatpak-util.c
index 2bf9cd5db..0e030dbfe 100644
--- a/src/plugins/flatpak/gbp-flatpak-util.c
+++ b/src/plugins/flatpak/gbp-flatpak-util.c
@@ -34,7 +34,7 @@ gbp_flatpak_get_repo_dir (IdeContext *context)
 }
 
 gchar *
-gbp_flatpak_get_staging_dir (IdeBuildPipeline *pipeline)
+gbp_flatpak_get_staging_dir (IdePipeline *pipeline)
 {
   g_autofree gchar *branch = NULL;
   g_autofree gchar *name = NULL;
@@ -43,12 +43,12 @@ gbp_flatpak_get_staging_dir (IdeBuildPipeline *pipeline)
   g_autoptr(IdeVcs) vcs = NULL;
   g_autoptr(IdeToolchain) toolchain = NULL;
 
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
   context = ide_object_ref_context (IDE_OBJECT (pipeline));
   vcs = ide_vcs_ref_from_context (context);
   branch = ide_vcs_get_branch_name (vcs);
-  toolchain = ide_build_pipeline_ref_toolchain (pipeline);
+  toolchain = ide_pipeline_ref_toolchain (pipeline);
   triplet = ide_toolchain_get_host_triplet (toolchain);
   name = g_strdup_printf ("%s-%s", ide_triplet_get_arch (triplet), branch);
 
diff --git a/src/plugins/flatpak/gbp-flatpak-util.h b/src/plugins/flatpak/gbp-flatpak-util.h
index eb599badd..8cbfab717 100644
--- a/src/plugins/flatpak/gbp-flatpak-util.h
+++ b/src/plugins/flatpak/gbp-flatpak-util.h
@@ -26,7 +26,7 @@ G_BEGIN_DECLS
 
 gboolean  gbp_flatpak_is_ignored      (const gchar       *name);
 gchar    *gbp_flatpak_get_repo_dir    (IdeContext        *context);
-gchar    *gbp_flatpak_get_staging_dir (IdeBuildPipeline  *pipeline);
+gchar    *gbp_flatpak_get_staging_dir (IdePipeline  *pipeline);
 gboolean  gbp_flatpak_split_id        (const gchar       *str,
                                        gchar            **id,
                                        gchar            **arch,
diff --git a/src/plugins/gcc/gbp-gcc-pipeline-addin.c b/src/plugins/gcc/gbp-gcc-pipeline-addin.c
index 65766f0d3..5e4b8fb9d 100644
--- a/src/plugins/gcc/gbp-gcc-pipeline-addin.c
+++ b/src/plugins/gcc/gbp-gcc-pipeline-addin.c
@@ -40,41 +40,41 @@ struct _GbpGccPipelineAddin
 };
 
 static void
-gbp_gcc_pipeline_addin_load (IdeBuildPipelineAddin *addin,
-                             IdeBuildPipeline      *pipeline)
+gbp_gcc_pipeline_addin_load (IdePipelineAddin *addin,
+                             IdePipeline      *pipeline)
 {
   GbpGccPipelineAddin *self = (GbpGccPipelineAddin *)addin;
 
   g_assert (GBP_IS_GCC_PIPELINE_ADDIN (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
-  self->error_format_id = ide_build_pipeline_add_error_format (pipeline,
+  self->error_format_id = ide_pipeline_add_error_format (pipeline,
                                                                ERROR_FORMAT_REGEX,
                                                                G_REGEX_CASELESS);
 }
 
 static void
-gbp_gcc_pipeline_addin_unload (IdeBuildPipelineAddin *addin,
-                               IdeBuildPipeline      *pipeline)
+gbp_gcc_pipeline_addin_unload (IdePipelineAddin *addin,
+                               IdePipeline      *pipeline)
 {
   GbpGccPipelineAddin *self = (GbpGccPipelineAddin *)addin;
 
   g_assert (GBP_IS_GCC_PIPELINE_ADDIN (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
-  ide_build_pipeline_remove_error_format (pipeline, self->error_format_id);
+  ide_pipeline_remove_error_format (pipeline, self->error_format_id);
   self->error_format_id = 0;
 }
 
 static void
-addin_iface_init (IdeBuildPipelineAddinInterface *iface)
+addin_iface_init (IdePipelineAddinInterface *iface)
 {
   iface->load = gbp_gcc_pipeline_addin_load;
   iface->unload = gbp_gcc_pipeline_addin_unload;
 }
 
 G_DEFINE_TYPE_WITH_CODE (GbpGccPipelineAddin, gbp_gcc_pipeline_addin, IDE_TYPE_OBJECT,
-                         G_IMPLEMENT_INTERFACE (IDE_TYPE_BUILD_PIPELINE_ADDIN, addin_iface_init))
+                         G_IMPLEMENT_INTERFACE (IDE_TYPE_PIPELINE_ADDIN, addin_iface_init))
 
 static void gbp_gcc_pipeline_addin_class_init (GbpGccPipelineAddinClass *klass) { }
 static void gbp_gcc_pipeline_addin_init (GbpGccPipelineAddin *self) { }
diff --git a/src/plugins/gcc/gcc-plugin.c b/src/plugins/gcc/gcc-plugin.c
index 87deae432..d2364640f 100644
--- a/src/plugins/gcc/gcc-plugin.c
+++ b/src/plugins/gcc/gcc-plugin.c
@@ -30,7 +30,7 @@ _IDE_EXTERN void
 _gbp_gcc_register_types (PeasObjectModule *module)
 {
   peas_object_module_register_extension_type (module,
-                                              IDE_TYPE_BUILD_PIPELINE_ADDIN,
+                                              IDE_TYPE_PIPELINE_ADDIN,
                                               GBP_TYPE_GCC_PIPELINE_ADDIN);
   peas_object_module_register_extension_type (module,
                                               IDE_TYPE_TOOLCHAIN_PROVIDER,
diff --git a/src/plugins/gdb/gbp-gdb-debugger.c b/src/plugins/gdb/gbp-gdb-debugger.c
index 1a873101c..45a842cd5 100644
--- a/src/plugins/gdb/gbp-gdb-debugger.c
+++ b/src/plugins/gdb/gbp-gdb-debugger.c
@@ -84,7 +84,7 @@ gbp_gdb_debugger_parent_set (IdeObject *object,
 {
   GbpGdbDebugger *self = (GbpGdbDebugger *)object;
   IdeBuildManager *build_manager;
-  IdeBuildPipeline *pipeline;
+  IdePipeline *pipeline;
   const gchar *builddir;
   IdeContext *context;
 
@@ -104,7 +104,7 @@ gbp_gdb_debugger_parent_set (IdeObject *object,
 
   build_manager = ide_build_manager_from_context (context);
   pipeline = ide_build_manager_get_pipeline (build_manager);
-  builddir = ide_build_pipeline_get_builddir (pipeline);
+  builddir = ide_pipeline_get_builddir (pipeline);
 
   g_clear_object (&self->builddir);
   self->builddir = g_file_new_for_path (builddir);
diff --git a/src/plugins/git/gbp-git-dependency-updater.c b/src/plugins/git/gbp-git-dependency-updater.c
index 33ccecd02..6c75bd34d 100644
--- a/src/plugins/git/gbp-git-dependency-updater.c
+++ b/src/plugins/git/gbp-git-dependency-updater.c
@@ -36,9 +36,9 @@ find_submodule_stage_cb (gpointer data,
 {
   GbpGitSubmoduleStage **stage = user_data;
 
-  g_assert (IDE_IS_BUILD_STAGE (data));
+  g_assert (IDE_IS_PIPELINE_STAGE (data));
   g_assert (stage != NULL);
-  g_assert (*stage == NULL || IDE_IS_BUILD_STAGE (*stage));
+  g_assert (*stage == NULL || IDE_IS_PIPELINE_STAGE (*stage));
 
   if (GBP_IS_GIT_SUBMODULE_STAGE (data))
     *stage = GBP_GIT_SUBMODULE_STAGE (data);
@@ -75,7 +75,7 @@ gbp_git_dependency_updater_update_async (IdeDependencyUpdater *self,
 {
   g_autoptr(IdeTask) task = NULL;
   GbpGitSubmoduleStage *stage = NULL;
-  IdeBuildPipeline *pipeline;
+  IdePipeline *pipeline;
   IdeBuildManager *manager;
   IdeContext *context;
 
@@ -92,7 +92,7 @@ gbp_git_dependency_updater_update_async (IdeDependencyUpdater *self,
   manager = ide_build_manager_from_context (context);
   pipeline = ide_build_manager_get_pipeline (manager);
 
-  g_assert (!pipeline || IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (!pipeline || IDE_IS_PIPELINE (pipeline));
 
   if (pipeline == NULL)
     {
@@ -104,7 +104,7 @@ gbp_git_dependency_updater_update_async (IdeDependencyUpdater *self,
     }
 
   /* Find the submodule stage and tell it to download updates one time */
-  ide_build_pipeline_foreach_stage (pipeline, find_submodule_stage_cb, &stage);
+  ide_pipeline_foreach_stage (pipeline, find_submodule_stage_cb, &stage);
 
   if (stage == NULL)
     {
@@ -116,7 +116,7 @@ gbp_git_dependency_updater_update_async (IdeDependencyUpdater *self,
   gbp_git_submodule_stage_force_update (stage);
 
   /* Ensure downloads and everything past it is invalidated */
-  ide_build_pipeline_invalidate_phase (pipeline, IDE_BUILD_PHASE_DOWNLOADS);
+  ide_pipeline_invalidate_phase (pipeline, IDE_PIPELINE_PHASE_DOWNLOADS);
 
   /* Start building all the way up to the project configure so that
    * the user knows if the updates broke their configuration or anything.
@@ -125,7 +125,7 @@ gbp_git_dependency_updater_update_async (IdeDependencyUpdater *self,
    *       race with other updaters.
    */
   ide_build_manager_rebuild_async (manager,
-                                   IDE_BUILD_PHASE_CONFIGURE,
+                                   IDE_PIPELINE_PHASE_CONFIGURE,
                                    NULL,
                                    NULL,
                                    gbp_git_dependency_updater_update_cb,
diff --git a/src/plugins/git/gbp-git-pipeline-addin.c b/src/plugins/git/gbp-git-pipeline-addin.c
index 0e2e683b0..a44ddf1ae 100644
--- a/src/plugins/git/gbp-git-pipeline-addin.c
+++ b/src/plugins/git/gbp-git-pipeline-addin.c
@@ -35,8 +35,8 @@ struct _GbpGitPipelineAddin
 };
 
 static void
-gbp_git_pipeline_addin_load (IdeBuildPipelineAddin *addin,
-                             IdeBuildPipeline      *pipeline)
+gbp_git_pipeline_addin_load (IdePipelineAddin *addin,
+                             IdePipeline      *pipeline)
 {
   g_autoptr(GbpGitSubmoduleStage) submodule = NULL;
   IdeContext *context;
@@ -44,7 +44,7 @@ gbp_git_pipeline_addin_load (IdeBuildPipelineAddin *addin,
   guint stage_id;
 
   g_assert (GBP_IS_GIT_PIPELINE_ADDIN (addin));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
   context = ide_object_get_context (IDE_OBJECT (addin));
   vcs = ide_vcs_from_context (context);
@@ -54,22 +54,22 @@ gbp_git_pipeline_addin_load (IdeBuildPipelineAddin *addin,
     return;
 
   submodule = gbp_git_submodule_stage_new (context);
-  stage_id = ide_build_pipeline_attach (pipeline,
-                                        IDE_BUILD_PHASE_DOWNLOADS,
-                                        100,
-                                        IDE_BUILD_STAGE (submodule));
-  ide_build_pipeline_addin_track (addin, stage_id);
+  stage_id = ide_pipeline_attach (pipeline,
+                                  IDE_PIPELINE_PHASE_DOWNLOADS,
+                                  100,
+                                  IDE_PIPELINE_STAGE (submodule));
+  ide_pipeline_addin_track (addin, stage_id);
 }
 
 static void
-build_pipeline_addin_iface_init (IdeBuildPipelineAddinInterface *iface)
+pipeline_addin_iface_init (IdePipelineAddinInterface *iface)
 {
   iface->load = gbp_git_pipeline_addin_load;
 }
 
 G_DEFINE_TYPE_WITH_CODE (GbpGitPipelineAddin, gbp_git_pipeline_addin, IDE_TYPE_OBJECT,
-                         G_IMPLEMENT_INTERFACE (IDE_TYPE_BUILD_PIPELINE_ADDIN,
-                                                build_pipeline_addin_iface_init))
+                         G_IMPLEMENT_INTERFACE (IDE_TYPE_PIPELINE_ADDIN,
+                                                pipeline_addin_iface_init))
 
 static void
 gbp_git_pipeline_addin_class_init (GbpGitPipelineAddinClass *klass)
diff --git a/src/plugins/git/gbp-git-submodule-stage.c b/src/plugins/git/gbp-git-submodule-stage.c
index e8dc4ae90..98ccd347e 100644
--- a/src/plugins/git/gbp-git-submodule-stage.c
+++ b/src/plugins/git/gbp-git-submodule-stage.c
@@ -31,13 +31,13 @@
 
 struct _GbpGitSubmoduleStage
 {
-  IdeBuildStageLauncher parent_instance;
+  IdePipelineStageLauncher parent_instance;
 
   guint has_run : 1;
   guint force_update : 1;
 };
 
-G_DEFINE_TYPE (GbpGitSubmoduleStage, gbp_git_submodule_stage, IDE_TYPE_BUILD_STAGE_LAUNCHER)
+G_DEFINE_TYPE (GbpGitSubmoduleStage, gbp_git_submodule_stage, IDE_TYPE_PIPELINE_STAGE_LAUNCHER)
 
 GbpGitSubmoduleStage *
 gbp_git_submodule_stage_new (IdeContext *context)
@@ -59,7 +59,7 @@ gbp_git_submodule_stage_new (IdeContext *context)
   ide_subprocess_launcher_push_argv (launcher, "-c");
   ide_subprocess_launcher_push_argv (launcher, "git submodule init && git submodule update");
 
-  ide_build_stage_launcher_set_launcher (IDE_BUILD_STAGE_LAUNCHER (self), launcher);
+  ide_pipeline_stage_launcher_set_launcher (IDE_PIPELINE_STAGE_LAUNCHER (self), launcher);
 
   return g_steal_pointer (&self);
 }
@@ -83,7 +83,7 @@ gbp_git_submodule_stage_query_cb (GObject      *object,
 
   if (!ide_subprocess_communicate_utf8_finish (subprocess, result, &stdout_buf, NULL, &error))
     {
-      ide_build_stage_log (IDE_BUILD_STAGE (self),
+      ide_pipeline_stage_log (IDE_PIPELINE_STAGE (self),
                            IDE_BUILD_LOG_STDERR,
                            error->message,
                            -1);
@@ -98,21 +98,21 @@ gbp_git_submodule_stage_query_cb (GObject      *object,
        */
       if (stdout_buf[0] == '-')
         {
-          ide_build_stage_set_completed (IDE_BUILD_STAGE (self), FALSE);
+          ide_pipeline_stage_set_completed (IDE_PIPELINE_STAGE (self), FALSE);
           goto unpause;
         }
     }
 
 failure:
-  ide_build_stage_set_completed (IDE_BUILD_STAGE (self), TRUE);
+  ide_pipeline_stage_set_completed (IDE_PIPELINE_STAGE (self), TRUE);
 
 unpause:
-  ide_build_stage_unpause (IDE_BUILD_STAGE (self));
+  ide_pipeline_stage_unpause (IDE_PIPELINE_STAGE (self));
 }
 
 static void
-gbp_git_submodule_stage_query (IdeBuildStage    *stage,
-                               IdeBuildPipeline *pipeline,
+gbp_git_submodule_stage_query (IdePipelineStage    *stage,
+                               IdePipeline *pipeline,
                                GPtrArray        *targets,
                                GCancellable     *cancellable)
 {
@@ -126,16 +126,16 @@ gbp_git_submodule_stage_query (IdeBuildStage    *stage,
   IDE_ENTRY;
 
   g_assert (GBP_IS_GIT_SUBMODULE_STAGE (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
 
   if (!ide_application_has_network (IDE_APPLICATION_DEFAULT))
     {
-      ide_build_stage_log (stage,
+      ide_pipeline_stage_log (stage,
                            IDE_BUILD_LOG_STDERR,
                            _("Network is not available, skipping submodule update"),
                            -1);
-      ide_build_stage_set_completed (stage, TRUE);
+      ide_pipeline_stage_set_completed (stage, TRUE);
       IDE_EXIT;
     }
 
@@ -143,13 +143,13 @@ gbp_git_submodule_stage_query (IdeBuildStage    *stage,
     {
       self->force_update = FALSE;
       self->has_run = TRUE;
-      ide_build_stage_set_completed (stage, FALSE);
+      ide_pipeline_stage_set_completed (stage, FALSE);
       IDE_EXIT;
     }
 
   if (self->has_run)
     {
-      ide_build_stage_set_completed (stage, TRUE);
+      ide_pipeline_stage_set_completed (stage, TRUE);
       IDE_EXIT;
     }
 
@@ -175,15 +175,15 @@ gbp_git_submodule_stage_query (IdeBuildStage    *stage,
 
   if (!(subprocess = ide_subprocess_launcher_spawn (launcher, cancellable, &error)))
     {
-      ide_build_stage_log (IDE_BUILD_STAGE (stage),
+      ide_pipeline_stage_log (IDE_PIPELINE_STAGE (stage),
                            IDE_BUILD_LOG_STDERR,
                            error->message,
                            -1);
-      ide_build_stage_set_completed (IDE_BUILD_STAGE (stage), TRUE);
+      ide_pipeline_stage_set_completed (IDE_PIPELINE_STAGE (stage), TRUE);
       IDE_EXIT;
     }
 
-  ide_build_stage_pause (IDE_BUILD_STAGE (stage));
+  ide_pipeline_stage_pause (IDE_PIPELINE_STAGE (stage));
 
   ide_subprocess_communicate_utf8_async (subprocess,
                                          NULL,
@@ -197,7 +197,7 @@ gbp_git_submodule_stage_query (IdeBuildStage    *stage,
 static void
 gbp_git_submodule_stage_class_init (GbpGitSubmoduleStageClass *klass)
 {
-  IdeBuildStageClass *stage_class = IDE_BUILD_STAGE_CLASS (klass);
+  IdePipelineStageClass *stage_class = IDE_PIPELINE_STAGE_CLASS (klass);
 
   stage_class->query = gbp_git_submodule_stage_query;
 }
@@ -205,8 +205,8 @@ gbp_git_submodule_stage_class_init (GbpGitSubmoduleStageClass *klass)
 static void
 gbp_git_submodule_stage_init (GbpGitSubmoduleStage *self)
 {
-  ide_build_stage_set_name (IDE_BUILD_STAGE (self), _("Initialize git submodules"));
-  ide_build_stage_launcher_set_ignore_exit_status (IDE_BUILD_STAGE_LAUNCHER (self), TRUE);
+  ide_pipeline_stage_set_name (IDE_PIPELINE_STAGE (self), _("Initialize git submodules"));
+  ide_pipeline_stage_launcher_set_ignore_exit_status (IDE_PIPELINE_STAGE_LAUNCHER (self), TRUE);
 }
 
 void
diff --git a/src/plugins/git/gbp-git-submodule-stage.h b/src/plugins/git/gbp-git-submodule-stage.h
index 3b23c033c..f90652d51 100644
--- a/src/plugins/git/gbp-git-submodule-stage.h
+++ b/src/plugins/git/gbp-git-submodule-stage.h
@@ -26,7 +26,7 @@ G_BEGIN_DECLS
 
 #define GBP_TYPE_GIT_SUBMODULE_STAGE (gbp_git_submodule_stage_get_type())
 
-G_DECLARE_FINAL_TYPE (GbpGitSubmoduleStage, gbp_git_submodule_stage, GBP, GIT_SUBMODULE_STAGE, 
IdeBuildStageLauncher)
+G_DECLARE_FINAL_TYPE (GbpGitSubmoduleStage, gbp_git_submodule_stage, GBP, GIT_SUBMODULE_STAGE, 
IdePipelineStageLauncher)
 
 GbpGitSubmoduleStage *gbp_git_submodule_stage_new          (IdeContext           *context);
 void                  gbp_git_submodule_stage_force_update (GbpGitSubmoduleStage *self);
diff --git a/src/plugins/git/git-plugin.c b/src/plugins/git/git-plugin.c
index 4d4d016cc..85ae8d074 100644
--- a/src/plugins/git/git-plugin.c
+++ b/src/plugins/git/git-plugin.c
@@ -73,7 +73,7 @@ _gbp_git_register_types (PeasObjectModule *module)
                                                   IDE_TYPE_BUFFER_ADDIN,
                                                   GBP_TYPE_GIT_BUFFER_ADDIN);
       peas_object_module_register_extension_type (module,
-                                                  IDE_TYPE_BUILD_PIPELINE_ADDIN,
+                                                  IDE_TYPE_PIPELINE_ADDIN,
                                                   GBP_TYPE_GIT_PIPELINE_ADDIN);
       peas_object_module_register_extension_type (module,
                                                   IDE_TYPE_DEPENDENCY_UPDATER,
diff --git a/src/plugins/glade/gbp-glade-workbench-addin.c b/src/plugins/glade/gbp-glade-workbench-addin.c
index 77aa47593..7cc795dee 100644
--- a/src/plugins/glade/gbp-glade-workbench-addin.c
+++ b/src/plugins/glade/gbp-glade-workbench-addin.c
@@ -223,11 +223,11 @@ gbp_glade_workbench_addin_open_finish (IdeWorkbenchAddin  *addin,
 }
 
 static void
-on_build_pipeline_changed_cb (GbpGladeWorkbenchAddin *self,
+on_pipeline_changed_cb (GbpGladeWorkbenchAddin *self,
                               GParamSpec             *pspec,
                               IdeBuildManager        *build_manager)
 {
-  IdeBuildPipeline *pipeline;
+  IdePipeline *pipeline;
   GHashTableIter iter;
   const gchar *key;
 
@@ -248,8 +248,8 @@ on_build_pipeline_changed_cb (GbpGladeWorkbenchAddin *self,
 
   if (pipeline != NULL)
     {
-      IdeConfig *config = ide_build_pipeline_get_config (pipeline);
-      IdeRuntime *runtime = ide_build_pipeline_get_runtime (pipeline);
+      IdeConfig *config = ide_pipeline_get_config (pipeline);
+      IdeRuntime *runtime = ide_pipeline_get_runtime (pipeline);
       g_autoptr(GFile) translated = NULL;
       g_autoptr(GFile) catalog_file = NULL;
 
@@ -335,12 +335,12 @@ gbp_glade_workbench_addin_project_loaded (IdeWorkbenchAddin *addin,
   self->build_manager = g_object_ref (build_manager);
   g_signal_connect_object (self->build_manager,
                            "notify::pipeline",
-                           G_CALLBACK (on_build_pipeline_changed_cb),
+                           G_CALLBACK (on_pipeline_changed_cb),
                            self,
                            G_CONNECT_SWAPPED);
 
   /* Update catalogs */
-  on_build_pipeline_changed_cb (self, NULL, build_manager);
+  on_pipeline_changed_cb (self, NULL, build_manager);
 }
 
 static void
@@ -357,7 +357,7 @@ gbp_glade_workbench_addin_unload (IdeWorkbenchAddin *addin,
   if (self->build_manager != NULL)
     {
       g_signal_handlers_disconnect_by_func (self->build_manager,
-                                            G_CALLBACK (on_build_pipeline_changed_cb),
+                                            G_CALLBACK (on_pipeline_changed_cb),
                                             self);
       g_clear_object (&self->build_manager);
     }
diff --git a/src/plugins/gradle/gradle_plugin.py b/src/plugins/gradle/gradle_plugin.py
index 4eea2fb77..b3a30dc68 100755
--- a/src/plugins/gradle/gradle_plugin.py
+++ b/src/plugins/gradle/gradle_plugin.py
@@ -55,7 +55,7 @@ class GradleBuildSystem(Ide.Object, Ide.BuildSystem, Gio.AsyncInitable):
     def do_get_priority(self):
         return 2000
 
-class GradlePipelineAddin(Ide.Object, Ide.BuildPipelineAddin):
+class GradlePipelineAddin(Ide.Object, Ide.PipelineAddin):
     """
     The GradlePipelineAddin is responsible for creating the necessary build
     stages and attaching them to phases of the build pipeline.
@@ -80,7 +80,7 @@ class GradlePipelineAddin(Ide.Object, Ide.BuildPipelineAddin):
         wrapper_launcher.set_cwd(srcdir)
         wrapper_launcher.push_argv("gradle")
         wrapper_launcher.push_argv('wrapper')
-        self.track(pipeline.connect_launcher(Ide.BuildPhase.AUTOGEN, 0, wrapper_launcher))
+        self.track(pipeline.connect_launcher(Ide.PipelinePhase.AUTOGEN, 0, wrapper_launcher))
 
         build_launcher = pipeline.create_launcher()
         build_launcher.set_cwd(srcdir)
@@ -92,11 +92,11 @@ class GradlePipelineAddin(Ide.Object, Ide.BuildPipelineAddin):
         clean_launcher.push_argv("./gradlew")
         clean_launcher.push_argv('clean')
 
-        build_stage = Ide.BuildStageLauncher.new(context, build_launcher)
+        build_stage = Ide.PipelineStageLauncher.new(context, build_launcher)
         build_stage.set_name(_("Building project"))
         build_stage.set_clean_launcher(clean_launcher)
         build_stage.connect('query', self._query)
-        self.track(pipeline.connect(Ide.BuildPhase.BUILD, 0, build_stage))
+        self.track(pipeline.connect(Ide.PipelinePhase.BUILD, 0, build_stage))
 
     def _query(self, stage, pipeline, cancellable):
         stage.set_completed(False)
diff --git a/src/plugins/make/make_plugin.py b/src/plugins/make/make_plugin.py
index ce598de78..e3cef10dc 100644
--- a/src/plugins/make/make_plugin.py
+++ b/src/plugins/make/make_plugin.py
@@ -69,7 +69,7 @@ class MakeBuildSystem(Ide.Object, Ide.BuildSystem):
     def get_make_dir(self):
         return self.make_dir
 
-class MakePipelineAddin(Ide.Object, Ide.BuildPipelineAddin):
+class MakePipelineAddin(Ide.Object, Ide.PipelineAddin):
     """
     The MakePipelineAddin registers stages to be executed when various
     phases of the build pipeline are requested.
@@ -93,7 +93,7 @@ class MakePipelineAddin(Ide.Object, Ide.BuildPipelineAddin):
         builddir = pipeline.get_builddir()
 
         # Register the build launcher which will perform the incremental
-        # build of the project when the Ide.BuildPhase.BUILD phase is
+        # build of the project when the Ide.PipelinePhase.BUILD phase is
         # requested of the pipeline.
         build_launcher = pipeline.create_launcher()
         build_launcher.set_cwd(build_system.get_make_dir().get_path())
@@ -106,23 +106,23 @@ class MakePipelineAddin(Ide.Object, Ide.BuildPipelineAddin):
         clean_launcher.push_argv(make)
         clean_launcher.push_argv('clean')
 
-        build_stage = Ide.BuildStageLauncher.new(context, build_launcher)
+        build_stage = Ide.PipelineStageLauncher.new(context, build_launcher)
         build_stage.set_name(_("Build project"))
         build_stage.set_clean_launcher(clean_launcher)
         build_stage.connect('query', self._query)
-        self.track(pipeline.attach(Ide.BuildPhase.BUILD, 0, build_stage))
+        self.track(pipeline.attach(Ide.PipelinePhase.BUILD, 0, build_stage))
 
         # Register the install launcher which will perform our
-        # "make install" when the Ide.BuildPhase.INSTALL phase
+        # "make install" when the Ide.PipelinePhase.INSTALL phase
         # is requested of the pipeline.
         install_launcher = pipeline.create_launcher()
         install_launcher.set_cwd(build_system.get_make_dir().get_path())
         install_launcher.push_argv(make)
         install_launcher.push_argv('install')
 
-        install_stage = Ide.BuildStageLauncher.new(context, install_launcher)
+        install_stage = Ide.PipelineStageLauncher.new(context, install_launcher)
         install_stage.set_name(_("Install project"))
-        self.track(pipeline.attach(Ide.BuildPhase.INSTALL, 0, install_stage))
+        self.track(pipeline.attach(Ide.PipelinePhase.INSTALL, 0, install_stage))
 
         # Determine what it will take to "make run" for this pipeline
         # and stash it on the build_system for use by the build target.
diff --git a/src/plugins/maven/maven_plugin.py b/src/plugins/maven/maven_plugin.py
index 1032bccb9..fda913272 100755
--- a/src/plugins/maven/maven_plugin.py
+++ b/src/plugins/maven/maven_plugin.py
@@ -54,7 +54,7 @@ class MavenBuildSystem(Ide.Object, Ide.BuildSystem):
     def do_get_priority(self):
         return 2000
 
-class MavenPipelineAddin(Ide.Object, Ide.BuildPipelineAddin):
+class MavenPipelineAddin(Ide.Object, Ide.PipelineAddin):
     """
     The MavenPipelineAddin is responsible for creating the necessary build
     stages and attaching them to phases of the build pipeline.
@@ -85,20 +85,20 @@ class MavenPipelineAddin(Ide.Object, Ide.BuildPipelineAddin):
         clean_launcher.push_argv("mvn")
         clean_launcher.push_argv('clean')
 
-        build_stage = Ide.BuildStageLauncher.new(context, build_launcher)
+        build_stage = Ide.PipelineStageLauncher.new(context, build_launcher)
         build_stage.set_name(_("Building project"))
         build_stage.set_clean_launcher(clean_launcher)
         build_stage.connect('query', self._query)
-        self.track(pipeline.connect(Ide.BuildPhase.BUILD, 0, build_stage))
+        self.track(pipeline.connect(Ide.PipelinePhase.BUILD, 0, build_stage))
 
         install_launcher = pipeline.create_launcher()
         install_launcher.set_cwd(srcdir)
         install_launcher.push_argv('mvn')
         install_launcher.push_argv('install')
         install_launcher.push_argv('-Dmaven.test.skip=true')
-        install_stage = Ide.BuildStageLauncher.new(context, install_launcher)
+        install_stage = Ide.PipelineStageLauncher.new(context, install_launcher)
         install_stage.set_name(_("Installing project"))
-        self.track(pipeline.connect(Ide.BuildPhase.INSTALL, 0, install_stage))
+        self.track(pipeline.connect(Ide.PipelinePhase.INSTALL, 0, install_stage))
 
     def _query(self, stage, pipeline, cancellable):
         stage.set_completed(False)
diff --git a/src/plugins/meson/gbp-meson-build-stage-cross-file.c 
b/src/plugins/meson/gbp-meson-build-stage-cross-file.c
index 491e62b6e..34b1aefbb 100644
--- a/src/plugins/meson/gbp-meson-build-stage-cross-file.c
+++ b/src/plugins/meson/gbp-meson-build-stage-cross-file.c
@@ -29,11 +29,11 @@
 
 struct _GbpMesonBuildStageCrossFile
 {
-  IdeBuildStage parent_instance;
+  IdePipelineStage parent_instance;
   IdeToolchain *toolchain;
 };
 
-G_DEFINE_TYPE (GbpMesonBuildStageCrossFile, gbp_meson_build_stage_cross_file, IDE_TYPE_BUILD_STAGE)
+G_DEFINE_TYPE (GbpMesonBuildStageCrossFile, gbp_meson_build_stage_cross_file, IDE_TYPE_PIPELINE_STAGE)
 
 static void
 add_lang_executable (const gchar *lang,
@@ -47,8 +47,8 @@ add_lang_executable (const gchar *lang,
 }
 
 static void
-gbp_meson_build_stage_cross_file_query (IdeBuildStage    *stage,
-                                        IdeBuildPipeline *pipeline,
+gbp_meson_build_stage_cross_file_query (IdePipelineStage    *stage,
+                                        IdePipeline *pipeline,
                                         GPtrArray        *targets,
                                         GCancellable     *cancellable)
 {
@@ -58,26 +58,26 @@ gbp_meson_build_stage_cross_file_query (IdeBuildStage    *stage,
   IDE_ENTRY;
 
   g_assert (GBP_IS_MESON_BUILD_STAGE_CROSS_FILE (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
 
   crossbuild_file = gbp_meson_build_stage_cross_file_get_path (self, pipeline);
   if (!g_file_test (crossbuild_file, G_FILE_TEST_EXISTS))
     {
-      ide_build_stage_set_completed (stage, FALSE);
+      ide_pipeline_stage_set_completed (stage, FALSE);
       IDE_EXIT;
     }
 
-  ide_build_stage_set_completed (stage, TRUE);
+  ide_pipeline_stage_set_completed (stage, TRUE);
 
   IDE_EXIT;
 }
 
 static gboolean
-gbp_meson_build_stage_cross_file_execute (IdeBuildStage     *stage,
-                                          IdeBuildPipeline  *pipeline,
-                                          GCancellable      *cancellable,
-                                          GError           **error)
+gbp_meson_build_stage_cross_file_build (IdePipelineStage  *stage,
+                                        IdePipeline       *pipeline,
+                                        GCancellable      *cancellable,
+                                        GError           **error)
 {
   GbpMesonBuildStageCrossFile *self = (GbpMesonBuildStageCrossFile *)stage;
   g_autoptr(GKeyFile) crossbuild_keyfile = NULL;
@@ -94,7 +94,7 @@ gbp_meson_build_stage_cross_file_execute (IdeBuildStage     *stage,
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
   g_assert (IDE_IS_TOOLCHAIN (self->toolchain));
 
-  ide_build_stage_set_active (stage, TRUE);
+  ide_pipeline_stage_set_active (stage, TRUE);
 
   crossbuild_keyfile = g_key_file_new ();
   triplet = ide_toolchain_get_host_triplet (self->toolchain);
@@ -136,7 +136,7 @@ gbp_meson_build_stage_cross_file_execute (IdeBuildStage     *stage,
   gbp_meson_key_file_set_string_quoted (crossbuild_keyfile, "host_machine", "cpu", binary_path);
   gbp_meson_key_file_set_string_quoted (crossbuild_keyfile, "host_machine", "endian", "little");
 
-  env_launcher = ide_build_pipeline_create_launcher (pipeline, error);
+  env_launcher = ide_pipeline_create_launcher (pipeline, error);
   flags = ide_subprocess_launcher_getenv (env_launcher, "CFLAGS");
   if (flags != NULL)
     gbp_meson_key_file_set_string_array_quoted (crossbuild_keyfile, "properties", "c_args", flags);
@@ -149,13 +149,13 @@ gbp_meson_build_stage_cross_file_execute (IdeBuildStage     *stage,
   if (!g_key_file_save_to_file (crossbuild_keyfile, crossbuild_file, error))
     IDE_RETURN (FALSE);
 
-  ide_build_stage_set_active (stage, FALSE);
+  ide_pipeline_stage_set_active (stage, FALSE);
 
   IDE_RETURN (TRUE);
 }
 
 static void
-ide_build_stage_mkdirs_finalize (GObject *object)
+ide_pipeline_stage_mkdirs_finalize (GObject *object)
 {
   GbpMesonBuildStageCrossFile *self = (GbpMesonBuildStageCrossFile *)object;
 
@@ -168,11 +168,11 @@ static void
 gbp_meson_build_stage_cross_file_class_init (GbpMesonBuildStageCrossFileClass *klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
-  IdeBuildStageClass *stage_class = IDE_BUILD_STAGE_CLASS (klass);
+  IdePipelineStageClass *stage_class = IDE_PIPELINE_STAGE_CLASS (klass);
 
-  object_class->finalize = ide_build_stage_mkdirs_finalize;
+  object_class->finalize = ide_pipeline_stage_mkdirs_finalize;
 
-  stage_class->execute = gbp_meson_build_stage_cross_file_execute;
+  stage_class->build = gbp_meson_build_stage_cross_file_build;
   stage_class->query = gbp_meson_build_stage_cross_file_query;
 }
 
@@ -194,10 +194,10 @@ gbp_meson_build_stage_cross_file_new (IdeContext    *context,
 
 gchar *
 gbp_meson_build_stage_cross_file_get_path (GbpMesonBuildStageCrossFile *stage,
-                                           IdeBuildPipeline            *pipeline)
+                                           IdePipeline            *pipeline)
 {
   g_return_val_if_fail (GBP_IS_MESON_BUILD_STAGE_CROSS_FILE (stage), NULL);
-  g_return_val_if_fail (IDE_IS_BUILD_PIPELINE (pipeline), NULL);
+  g_return_val_if_fail (IDE_IS_PIPELINE (pipeline), NULL);
 
-  return ide_build_pipeline_build_builddir_path (pipeline, "gnome-builder-meson.crossfile", NULL);
+  return ide_pipeline_build_builddir_path (pipeline, "gnome-builder-meson.crossfile", NULL);
 }
diff --git a/src/plugins/meson/gbp-meson-build-stage-cross-file.h 
b/src/plugins/meson/gbp-meson-build-stage-cross-file.h
index 4873772c2..436c50f2e 100644
--- a/src/plugins/meson/gbp-meson-build-stage-cross-file.h
+++ b/src/plugins/meson/gbp-meson-build-stage-cross-file.h
@@ -28,11 +28,11 @@ G_BEGIN_DECLS
 
 #define GBP_TYPE_MESON_BUILD_STAGE_CROSS_FILE (gbp_meson_build_stage_cross_file_get_type())
 
-G_DECLARE_FINAL_TYPE (GbpMesonBuildStageCrossFile, gbp_meson_build_stage_cross_file, GBP, 
MESON_BUILD_STAGE_CROSS_FILE, IdeBuildStage)
+G_DECLARE_FINAL_TYPE (GbpMesonBuildStageCrossFile, gbp_meson_build_stage_cross_file, GBP, 
MESON_BUILD_STAGE_CROSS_FILE, IdePipelineStage)
 
 GbpMesonBuildStageCrossFile *gbp_meson_build_stage_cross_file_new      (IdeContext                  *context,
                                                                         IdeToolchain                
*toolchain);
 gchar                       *gbp_meson_build_stage_cross_file_get_path (GbpMesonBuildStageCrossFile *stage,
-                                                                        IdeBuildPipeline            
*pipeline);
+                                                                        IdePipeline            *pipeline);
 
 G_END_DECLS
diff --git a/src/plugins/meson/gbp-meson-build-system.c b/src/plugins/meson/gbp-meson-build-system.c
index 8e74998a1..ba785c7f9 100644
--- a/src/plugins/meson/gbp-meson-build-system.c
+++ b/src/plugins/meson/gbp-meson-build-system.c
@@ -91,7 +91,7 @@ gbp_meson_build_system_ensure_config_async (GbpMesonBuildSystem *self,
   build_manager = ide_build_manager_from_context (context);
 
   ide_build_manager_execute_async (build_manager,
-                                   IDE_BUILD_PHASE_CONFIGURE,
+                                   IDE_PIPELINE_PHASE_CONFIGURE,
                                    NULL,
                                    cancellable,
                                    gbp_meson_build_system_ensure_config_cb,
@@ -192,7 +192,7 @@ gbp_meson_build_system_load_commands_config_cb (GObject      *object,
   g_autoptr(GFile) file = NULL;
   g_autofree gchar *path = NULL;
   IdeBuildManager *build_manager;
-  IdeBuildPipeline *pipeline;
+  IdePipeline *pipeline;
   GCancellable *cancellable;
   IdeContext *context;
 
@@ -220,7 +220,7 @@ gbp_meson_build_system_load_commands_config_cb (GObject      *object,
       return;
     }
 
-  path = ide_build_pipeline_build_builddir_path (pipeline, "compile_commands.json", NULL);
+  path = ide_pipeline_build_builddir_path (pipeline, "compile_commands.json", NULL);
 
   if (!g_file_test (path, G_FILE_TEST_IS_REGULAR))
     {
@@ -254,7 +254,7 @@ gbp_meson_build_system_load_commands_async (GbpMesonBuildSystem *self,
   g_autoptr(IdeTask) task = NULL;
   g_autofree gchar *path = NULL;
   IdeBuildManager *build_manager;
-  IdeBuildPipeline *pipeline;
+  IdePipeline *pipeline;
   IdeContext *context;
 
   g_assert (GBP_IS_MESON_BUILD_SYSTEM (self));
@@ -293,7 +293,7 @@ gbp_meson_build_system_load_commands_async (GbpMesonBuildSystem *self,
    * here about whether or not it is setup fully. It may be delayed due
    * to device initialization.
    */
-  if (pipeline == NULL || !ide_build_pipeline_is_ready (pipeline))
+  if (pipeline == NULL || !ide_pipeline_is_ready (pipeline))
     {
       ide_task_return_new_error (task,
                                  G_IO_ERROR,
@@ -302,7 +302,7 @@ gbp_meson_build_system_load_commands_async (GbpMesonBuildSystem *self,
       return;
     }
 
-  path = ide_build_pipeline_build_builddir_path (pipeline, "compile_commands.json", NULL);
+  path = ide_pipeline_build_builddir_path (pipeline, "compile_commands.json", NULL);
 
   if (g_file_test (path, G_FILE_TEST_IS_REGULAR))
     {
@@ -653,21 +653,21 @@ gbp_meson_build_system_get_build_flags_for_files_finish (IdeBuildSystem  *build_
 
 static gchar *
 gbp_meson_build_system_get_builddir (IdeBuildSystem   *build_system,
-                                     IdeBuildPipeline *pipeline)
+                                     IdePipeline *pipeline)
 {
   GbpMesonBuildSystem *self = (GbpMesonBuildSystem *)build_system;
   IdeConfig *config;
   IdeBuildLocality locality;
 
   g_assert (GBP_IS_MESON_BUILD_SYSTEM (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
   /*
    * If the build configuration requires that we do an in tree build (yuck),
    * then use "_build" as our build directory to build in-tree.
    */
 
-  config = ide_build_pipeline_get_config (pipeline);
+  config = ide_pipeline_get_config (pipeline);
   locality = ide_config_get_locality (config);
 
   if ((locality & IDE_BUILD_LOCALITY_OUT_OF_TREE) == 0)
diff --git a/src/plugins/meson/gbp-meson-build-target-provider.c 
b/src/plugins/meson/gbp-meson-build-target-provider.c
index 434a16718..409fce010 100644
--- a/src/plugins/meson/gbp-meson-build-target-provider.c
+++ b/src/plugins/meson/gbp-meson-build-target-provider.c
@@ -35,7 +35,7 @@ static IdeSubprocessLauncher *
 create_launcher (IdeContext  *context,
                  GError     **error)
 {
-  IdeBuildPipeline *pipeline;
+  IdePipeline *pipeline;
   IdeBuildManager *build_manager;
 
   g_assert (IDE_IS_CONTEXT (context));
@@ -53,7 +53,7 @@ create_launcher (IdeContext  *context,
       return NULL;
     }
 
-  return ide_build_pipeline_create_launcher (pipeline, error);
+  return ide_pipeline_create_launcher (pipeline, error);
 }
 
 static void
@@ -162,7 +162,7 @@ gbp_meson_build_target_provider_communicate_cb (GObject      *object,
   g_autoptr(IdeSubprocess) all_subprocess = NULL;
   g_autoptr(GError) error = NULL;
   g_autoptr(GPtrArray) ret = NULL;
-  IdeBuildPipeline *pipeline;
+  IdePipeline *pipeline;
   IdeBuildManager *build_manager;
   GCancellable *cancellable;
   IdeContext *context;
@@ -304,7 +304,7 @@ gbp_meson_build_target_provider_communicate_cb (GObject      *object,
   ide_subprocess_launcher_push_argv (launcher, "meson");
   ide_subprocess_launcher_push_argv (launcher, "introspect");
   ide_subprocess_launcher_push_argv (launcher, "--installed");
-  ide_subprocess_launcher_push_argv (launcher, ide_build_pipeline_get_builddir (pipeline));
+  ide_subprocess_launcher_push_argv (launcher, ide_pipeline_get_builddir (pipeline));
 
   all_subprocess = ide_subprocess_launcher_spawn (launcher, cancellable, &error);
 
@@ -332,7 +332,7 @@ gbp_meson_build_target_provider_get_targets_async (IdeBuildTargetProvider *provi
   g_autoptr(IdeSubprocess) subprocess = NULL;
   g_autoptr(GError) error = NULL;
   g_autoptr(IdeTask) task = NULL;
-  IdeBuildPipeline *pipeline;
+  IdePipeline *pipeline;
   IdeBuildManager *build_manager;
   IdeBuildSystem *build_system;
   IdeContext *context;
@@ -381,7 +381,7 @@ gbp_meson_build_target_provider_get_targets_async (IdeBuildTargetProvider *provi
   ide_subprocess_launcher_push_argv (launcher, "meson");
   ide_subprocess_launcher_push_argv (launcher, "introspect");
   ide_subprocess_launcher_push_argv (launcher, "--targets");
-  ide_subprocess_launcher_push_argv (launcher, ide_build_pipeline_get_builddir (pipeline));
+  ide_subprocess_launcher_push_argv (launcher, ide_pipeline_get_builddir (pipeline));
 
   subprocess = ide_subprocess_launcher_spawn (launcher, cancellable, &error);
 
diff --git a/src/plugins/meson/gbp-meson-pipeline-addin.c b/src/plugins/meson/gbp-meson-pipeline-addin.c
index 6562f27fb..26ad0c154 100644
--- a/src/plugins/meson/gbp-meson-pipeline-addin.c
+++ b/src/plugins/meson/gbp-meson-pipeline-addin.c
@@ -36,8 +36,8 @@ struct _GbpMesonPipelineAddin
 static const gchar *ninja_names[] = { "ninja", "ninja-build" };
 
 static void
-on_build_stage_query (IdeBuildStage    *stage,
-                      IdeBuildPipeline *pipeline,
+on_build_stage_query (IdePipelineStage    *stage,
+                      IdePipeline *pipeline,
                       GPtrArray        *targets,
                       GCancellable     *cancellable)
 {
@@ -45,15 +45,15 @@ on_build_stage_query (IdeBuildStage    *stage,
   g_autoptr(GPtrArray) replace = NULL;
   const gchar * const *argv;
 
-  g_assert (IDE_IS_BUILD_STAGE (stage));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE_STAGE (stage));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
 
   /* Defer to ninja to determine completed status */
-  ide_build_stage_set_completed (stage, FALSE);
+  ide_pipeline_stage_set_completed (stage, FALSE);
 
   /* Clear any previous argv items from a possible previous build */
-  launcher = ide_build_stage_launcher_get_launcher (IDE_BUILD_STAGE_LAUNCHER (stage));
+  launcher = ide_pipeline_stage_launcher_get_launcher (IDE_PIPELINE_STAGE_LAUNCHER (stage));
   argv = ide_subprocess_launcher_get_argv (launcher);
   replace = g_ptr_array_new_with_free_func (g_free);
   for (guint i = 0; argv[i]; i++)
@@ -86,31 +86,31 @@ on_build_stage_query (IdeBuildStage    *stage,
 }
 
 static void
-on_install_stage_query (IdeBuildStage    *stage,
-                        IdeBuildPipeline *pipeline,
+on_install_stage_query (IdePipelineStage    *stage,
+                        IdePipeline *pipeline,
                         GPtrArray        *targets,
                         GCancellable     *cancellable)
 {
-  g_assert (IDE_IS_BUILD_STAGE (stage));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE_STAGE (stage));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
 
   /* Defer to ninja to determine completed status */
-  ide_build_stage_set_completed (stage, FALSE);
+  ide_pipeline_stage_set_completed (stage, FALSE);
 }
 
 static void
-gbp_meson_pipeline_addin_load (IdeBuildPipelineAddin *addin,
-                               IdeBuildPipeline      *pipeline)
+gbp_meson_pipeline_addin_load (IdePipelineAddin *addin,
+                               IdePipeline      *pipeline)
 {
   GbpMesonPipelineAddin *self = (GbpMesonPipelineAddin *)addin;
   g_autoptr(IdeSubprocessLauncher) config_launcher = NULL;
   g_autoptr(IdeSubprocessLauncher) build_launcher = NULL;
   g_autoptr(IdeSubprocessLauncher) clean_launcher = NULL;
   g_autoptr(IdeSubprocessLauncher) install_launcher = NULL;
-  g_autoptr(IdeBuildStage) build_stage = NULL;
-  g_autoptr(IdeBuildStage) config_stage = NULL;
-  g_autoptr(IdeBuildStage) install_stage = NULL;
+  g_autoptr(IdePipelineStage) build_stage = NULL;
+  g_autoptr(IdePipelineStage) config_stage = NULL;
+  g_autoptr(IdePipelineStage) install_stage = NULL;
   g_autoptr(GError) error = NULL;
   g_autofree gchar *build_ninja = NULL;
   g_autofree gchar *crossbuild_file = NULL;
@@ -130,7 +130,7 @@ gbp_meson_pipeline_addin_load (IdeBuildPipelineAddin *addin,
   IDE_ENTRY;
 
   g_assert (GBP_IS_MESON_PIPELINE_ADDIN (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
   context = ide_object_get_context (IDE_OBJECT (self));
 
@@ -138,10 +138,10 @@ gbp_meson_pipeline_addin_load (IdeBuildPipelineAddin *addin,
   if (!GBP_IS_MESON_BUILD_SYSTEM (build_system))
     IDE_GOTO (failure);
 
-  config = ide_build_pipeline_get_config (pipeline);
-  runtime = ide_build_pipeline_get_runtime (pipeline);
-  toolchain = ide_build_pipeline_get_toolchain (pipeline);
-  srcdir = ide_build_pipeline_get_srcdir (pipeline);
+  config = ide_pipeline_get_config (pipeline);
+  runtime = ide_pipeline_get_runtime (pipeline);
+  toolchain = ide_pipeline_get_toolchain (pipeline);
+  srcdir = ide_pipeline_get_srcdir (pipeline);
 
   g_assert (IDE_IS_CONFIG (config));
   g_assert (IDE_IS_RUNTIME (runtime));
@@ -167,10 +167,10 @@ gbp_meson_pipeline_addin_load (IdeBuildPipelineAddin *addin,
     }
 
   /* Create all our launchers up front */
-  if (NULL == (config_launcher = ide_build_pipeline_create_launcher (pipeline, &error)) ||
-      NULL == (build_launcher = ide_build_pipeline_create_launcher (pipeline, &error)) ||
-      NULL == (clean_launcher = ide_build_pipeline_create_launcher (pipeline, &error)) ||
-      NULL == (install_launcher = ide_build_pipeline_create_launcher (pipeline, &error)))
+  if (NULL == (config_launcher = ide_pipeline_create_launcher (pipeline, &error)) ||
+      NULL == (build_launcher = ide_pipeline_create_launcher (pipeline, &error)) ||
+      NULL == (clean_launcher = ide_pipeline_create_launcher (pipeline, &error)) ||
+      NULL == (install_launcher = ide_pipeline_create_launcher (pipeline, &error)))
     IDE_GOTO (failure);
 
   prefix = ide_config_get_prefix (config);
@@ -193,8 +193,8 @@ gbp_meson_pipeline_addin_load (IdeBuildPipelineAddin *addin,
       cross_file_stage = gbp_meson_build_stage_cross_file_new (context, toolchain);
       crossbuild_file = gbp_meson_build_stage_cross_file_get_path (cross_file_stage, pipeline);
 
-      id = ide_build_pipeline_attach (pipeline, IDE_BUILD_PHASE_PREPARE, 0, IDE_BUILD_STAGE 
(cross_file_stage));
-      ide_build_pipeline_addin_track (addin, id);
+      id = ide_pipeline_attach (pipeline, IDE_PIPELINE_PHASE_PREPARE, 0, IDE_PIPELINE_STAGE 
(cross_file_stage));
+      ide_pipeline_addin_track (addin, id);
     }
 
   /* Setup our meson configure stage. */
@@ -221,18 +221,18 @@ gbp_meson_pipeline_addin_load (IdeBuildPipelineAddin *addin,
       ide_subprocess_launcher_push_args (config_launcher, (const gchar * const *)argv);
     }
 
-  config_stage = ide_build_stage_launcher_new (context, config_launcher);
-  ide_build_stage_set_name (config_stage, _("Configuring project"));
-  build_ninja = ide_build_pipeline_build_builddir_path (pipeline, "build.ninja", NULL);
+  config_stage = ide_pipeline_stage_launcher_new (context, config_launcher);
+  ide_pipeline_stage_set_name (config_stage, _("Configuring project"));
+  build_ninja = ide_pipeline_build_builddir_path (pipeline, "build.ninja", NULL);
   if (g_file_test (build_ninja, G_FILE_TEST_IS_REGULAR))
-    ide_build_stage_set_completed (config_stage, TRUE);
+    ide_pipeline_stage_set_completed (config_stage, TRUE);
 
-  id = ide_build_pipeline_attach (pipeline, IDE_BUILD_PHASE_CONFIGURE, 0, config_stage);
-  ide_build_pipeline_addin_track (addin, id);
+  id = ide_pipeline_attach (pipeline, IDE_PIPELINE_PHASE_CONFIGURE, 0, config_stage);
+  ide_pipeline_addin_track (addin, id);
 
   /*
    * Register the build launcher which will perform the incremental
-   * build of the project when the IDE_BUILD_PHASE_BUILD phase is
+   * build of the project when the IDE_PIPELINE_PHASE_BUILD phase is
    * requested of the pipeline.
    */
   ide_subprocess_launcher_push_argv (build_launcher, ninja);
@@ -248,23 +248,23 @@ gbp_meson_pipeline_addin_load (IdeBuildPipelineAddin *addin,
 
   ide_subprocess_launcher_push_argv (clean_launcher, "clean");
 
-  build_stage = ide_build_stage_launcher_new (context, build_launcher);
-  ide_build_stage_launcher_set_clean_launcher (IDE_BUILD_STAGE_LAUNCHER (build_stage), clean_launcher);
-  ide_build_stage_set_check_stdout (build_stage, TRUE);
-  ide_build_stage_set_name (build_stage, _("Building project"));
+  build_stage = ide_pipeline_stage_launcher_new (context, build_launcher);
+  ide_pipeline_stage_launcher_set_clean_launcher (IDE_PIPELINE_STAGE_LAUNCHER (build_stage), clean_launcher);
+  ide_pipeline_stage_set_check_stdout (build_stage, TRUE);
+  ide_pipeline_stage_set_name (build_stage, _("Building project"));
   g_signal_connect (build_stage, "query", G_CALLBACK (on_build_stage_query), NULL);
 
-  id = ide_build_pipeline_attach (pipeline, IDE_BUILD_PHASE_BUILD, 0, build_stage);
-  ide_build_pipeline_addin_track (addin, id);
+  id = ide_pipeline_attach (pipeline, IDE_PIPELINE_PHASE_BUILD, 0, build_stage);
+  ide_pipeline_addin_track (addin, id);
 
   /* Setup our install stage */
   ide_subprocess_launcher_push_argv (install_launcher, ninja);
   ide_subprocess_launcher_push_argv (install_launcher, "install");
-  install_stage = ide_build_stage_launcher_new (context, install_launcher);
-  ide_build_stage_set_name (install_stage, _("Installing project"));
+  install_stage = ide_pipeline_stage_launcher_new (context, install_launcher);
+  ide_pipeline_stage_set_name (install_stage, _("Installing project"));
   g_signal_connect (install_stage, "query", G_CALLBACK (on_install_stage_query), NULL);
-  id = ide_build_pipeline_attach (pipeline, IDE_BUILD_PHASE_INSTALL, 0, install_stage);
-  ide_build_pipeline_addin_track (addin, id);
+  id = ide_pipeline_attach (pipeline, IDE_PIPELINE_PHASE_INSTALL, 0, install_stage);
+  ide_pipeline_addin_track (addin, id);
 
   IDE_EXIT;
 
@@ -274,14 +274,14 @@ failure:
 }
 
 static void
-build_pipeline_addin_iface_init (IdeBuildPipelineAddinInterface *iface)
+pipeline_addin_iface_init (IdePipelineAddinInterface *iface)
 {
   iface->load = gbp_meson_pipeline_addin_load;
 }
 
 G_DEFINE_TYPE_WITH_CODE (GbpMesonPipelineAddin, gbp_meson_pipeline_addin, IDE_TYPE_OBJECT,
-                         G_IMPLEMENT_INTERFACE (IDE_TYPE_BUILD_PIPELINE_ADDIN,
-                                                build_pipeline_addin_iface_init))
+                         G_IMPLEMENT_INTERFACE (IDE_TYPE_PIPELINE_ADDIN,
+                                                pipeline_addin_iface_init))
 
 static void
 gbp_meson_pipeline_addin_class_init (GbpMesonPipelineAddinClass *klass)
diff --git a/src/plugins/meson/gbp-meson-test-provider.c b/src/plugins/meson/gbp-meson-test-provider.c
index 509fcd4a7..5d9af0f9b 100644
--- a/src/plugins/meson/gbp-meson-test-provider.c
+++ b/src/plugins/meson/gbp-meson-test-provider.c
@@ -191,7 +191,7 @@ failure:
 
 static void
 gbp_meson_test_provider_do_reload (GbpMesonTestProvider *self,
-                                   IdeBuildPipeline     *pipeline)
+                                   IdePipeline     *pipeline)
 {
   g_autoptr(IdeSubprocessLauncher) launcher = NULL;
   g_autoptr(IdeSubprocess) subprocess = NULL;
@@ -201,16 +201,16 @@ gbp_meson_test_provider_do_reload (GbpMesonTestProvider *self,
   IDE_ENTRY;
 
   g_assert (GBP_IS_MESON_TEST_PROVIDER (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
   ide_test_provider_clear (IDE_TEST_PROVIDER (self));
 
-  if (NULL == (launcher = ide_build_pipeline_create_launcher (pipeline, &error)))
+  if (NULL == (launcher = ide_pipeline_create_launcher (pipeline, &error)))
     IDE_GOTO (failure);
 
   ide_subprocess_launcher_set_flags (launcher, G_SUBPROCESS_FLAGS_STDOUT_PIPE);
 
-  builddir = ide_build_pipeline_get_builddir (pipeline);
+  builddir = ide_pipeline_get_builddir (pipeline);
   ide_subprocess_launcher_set_cwd (launcher, builddir);
 
   ide_subprocess_launcher_push_argv (launcher, "meson");
@@ -243,17 +243,17 @@ gbp_meson_test_provider_build_cb (GObject      *object,
                                   GAsyncResult *result,
                                   gpointer      user_data)
 {
-  IdeBuildPipeline *pipeline = (IdeBuildPipeline *)object;
+  IdePipeline *pipeline = (IdePipeline *)object;
   g_autoptr(GbpMesonTestProvider) self = user_data;
   g_autoptr(GError) error = NULL;
 
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (G_IS_ASYNC_RESULT (result));
   g_assert (GBP_IS_MESON_TEST_PROVIDER (self));
 
-  if (!ide_build_pipeline_build_finish (pipeline, result, &error))
+  if (!ide_pipeline_build_finish (pipeline, result, &error))
     {
       g_message ("%s", error->message);
       ide_test_provider_set_loading (IDE_TEST_PROVIDER (self), FALSE);
@@ -269,7 +269,7 @@ static gboolean
 gbp_meson_test_provider_reload (gpointer user_data)
 {
   GbpMesonTestProvider *self = user_data;
-  IdeBuildPipeline *pipeline;
+  IdePipeline *pipeline;
   IdeBuildManager *build_manager;
   IdeBuildSystem *build_system;
   IdeContext *context;
@@ -317,8 +317,8 @@ gbp_meson_test_provider_reload (gpointer user_data)
    * But to do that well, we need to coordinate with the panel to
    * be lazy about fetching unit tests until the panel is displayed.
    */
-  ide_build_pipeline_build_async (pipeline,
-                                  IDE_BUILD_PHASE_CONFIGURE,
+  ide_pipeline_build_async (pipeline,
+                                  IDE_PIPELINE_PHASE_CONFIGURE,
                                   self->build_cancellable,
                                   gbp_meson_test_provider_build_cb,
                                   g_object_ref (self));
@@ -387,7 +387,7 @@ gbp_meson_test_provider_run_build_cb (GObject      *object,
                                       GAsyncResult *result,
                                       gpointer      user_data)
 {
-  IdeBuildPipeline *pipeline = (IdeBuildPipeline *)object;
+  IdePipeline *pipeline = (IdePipeline *)object;
   g_autoptr(IdeRunner) runner = NULL;
   g_autoptr(IdeTask) task = user_data;
   g_autoptr(GError) error = NULL;
@@ -401,18 +401,18 @@ gbp_meson_test_provider_run_build_cb (GObject      *object,
 
   IDE_ENTRY;
 
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (G_IS_ASYNC_RESULT (result));
   g_assert (IDE_IS_TASK (task));
 
-  if (!ide_build_pipeline_build_finish (pipeline, result, &error))
+  if (!ide_pipeline_build_finish (pipeline, result, &error))
     {
       ide_task_return_error (task, g_steal_pointer (&error));
       IDE_EXIT;
     }
 
   /* Create a runner to execute the test within */
-  runtime = ide_build_pipeline_get_runtime (pipeline);
+  runtime = ide_pipeline_get_runtime (pipeline);
   runner = ide_runtime_create_runner (runtime, NULL);
 
   if (runner == NULL)
@@ -435,7 +435,7 @@ gbp_meson_test_provider_run_build_cb (GObject      *object,
                          G_SUBPROCESS_FLAGS_STDERR_PIPE));
 
   /* Default to running from builddir */
-  builddir = ide_build_pipeline_get_builddir (pipeline);
+  builddir = ide_pipeline_get_builddir (pipeline);
   ide_runner_set_cwd (runner, builddir);
 
   /* And override of the test requires it */
@@ -478,7 +478,7 @@ gbp_meson_test_provider_run_build_cb (GObject      *object,
 static void
 gbp_meson_test_provider_run_async (IdeTestProvider     *provider,
                                    IdeTest             *test,
-                                   IdeBuildPipeline    *pipeline,
+                                   IdePipeline    *pipeline,
                                    GCancellable        *cancellable,
                                    GAsyncReadyCallback  callback,
                                    gpointer             user_data)
@@ -490,7 +490,7 @@ gbp_meson_test_provider_run_async (IdeTestProvider     *provider,
 
   g_assert (GBP_IS_MESON_TEST_PROVIDER (self));
   g_assert (GBP_IS_MESON_TEST (test));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
 
   task = ide_task_new (self, cancellable, callback, user_data);
@@ -503,8 +503,8 @@ gbp_meson_test_provider_run_async (IdeTestProvider     *provider,
    * the entire project up to the build phase.
    */
 
-  ide_build_pipeline_build_async (pipeline,
-                                  IDE_BUILD_PHASE_BUILD,
+  ide_pipeline_build_async (pipeline,
+                                  IDE_PIPELINE_PHASE_BUILD,
                                   cancellable,
                                   gbp_meson_test_provider_run_build_cb,
                                   g_steal_pointer (&task));
diff --git a/src/plugins/meson/meson-plugin.c b/src/plugins/meson/meson-plugin.c
index b19008e34..cea513d08 100644
--- a/src/plugins/meson/meson-plugin.c
+++ b/src/plugins/meson/meson-plugin.c
@@ -34,7 +34,7 @@ _IDE_EXTERN void
 _gbp_meson_register_types (PeasObjectModule *module)
 {
   peas_object_module_register_extension_type (module,
-                                              IDE_TYPE_BUILD_PIPELINE_ADDIN,
+                                              IDE_TYPE_PIPELINE_ADDIN,
                                               GBP_TYPE_MESON_PIPELINE_ADDIN);
   peas_object_module_register_extension_type (module,
                                               IDE_TYPE_BUILD_SYSTEM,
diff --git a/src/plugins/mono/mono_plugin.py b/src/plugins/mono/mono_plugin.py
index 1b9843db3..9dad9ce5e 100644
--- a/src/plugins/mono/mono_plugin.py
+++ b/src/plugins/mono/mono_plugin.py
@@ -11,7 +11,7 @@ _ERROR_REGEX = ("(?<filename>[a-zA-Z0-9\\-\\.\\/_]+.cs)" +
                 "(?<code>CS[0-9]+): " +
                 "(?<message>.*)")
 
-class MonoPipelineAddin(Ide.Object, Ide.BuildPipelineAddin):
+class MonoPipelineAddin(Ide.Object, Ide.PipelineAddin):
 
     def do_load(self, pipeline):
         self.error_format = pipeline.add_error_format(_ERROR_REGEX, GLib.RegexCompileFlags.OPTIMIZE)
diff --git a/src/plugins/notification/ide-notification-addin.c 
b/src/plugins/notification/ide-notification-addin.c
index 0d0718607..2b801c942 100644
--- a/src/plugins/notification/ide-notification-addin.c
+++ b/src/plugins/notification/ide-notification-addin.c
@@ -33,17 +33,17 @@ struct _IdeNotificationAddin
   IdeObject        parent_instance;
   IdeNotification *notif;
   gchar           *last_msg_body;
-  IdeBuildPhase    requested_phase;
+  IdePipelinePhase    requested_phase;
   gint64           last_time;
   guint            supress : 1;
 };
 
-static void addin_iface_init (IdeBuildPipelineAddinInterface *iface);
+static void addin_iface_init (IdePipelineAddinInterface *iface);
 
 G_DEFINE_TYPE_WITH_CODE (IdeNotificationAddin,
                          ide_notification_addin,
                          IDE_TYPE_OBJECT,
-                         G_IMPLEMENT_INTERFACE (IDE_TYPE_BUILD_PIPELINE_ADDIN, addin_iface_init))
+                         G_IMPLEMENT_INTERFACE (IDE_TYPE_PIPELINE_ADDIN, addin_iface_init))
 
 static gboolean
 should_supress_message (IdeNotificationAddin *self,
@@ -120,13 +120,13 @@ ide_notification_addin_notify (IdeNotificationAddin *self,
 
 static void
 ide_notification_addin_build_started (IdeNotificationAddin *self,
-                                      IdeBuildPipeline     *pipeline,
+                                      IdePipeline     *pipeline,
                                       IdeBuildManager      *build_manager)
 {
-  IdeBuildPhase phase;
+  IdePipelinePhase phase;
 
   g_assert (IDE_IS_NOTIFICATION_ADDIN (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (IDE_IS_BUILD_MANAGER (build_manager));
 
   if (self->notif != NULL)
@@ -140,11 +140,11 @@ ide_notification_addin_build_started (IdeNotificationAddin *self,
    * extracting build flags.
    */
 
-  phase = ide_build_pipeline_get_requested_phase (pipeline);
-  g_assert ((phase & IDE_BUILD_PHASE_MASK) == phase);
+  phase = ide_pipeline_get_requested_phase (pipeline);
+  g_assert ((phase & IDE_PIPELINE_PHASE_MASK) == phase);
 
   self->requested_phase = phase;
-  self->supress = phase < IDE_BUILD_PHASE_BUILD;
+  self->supress = phase < IDE_PIPELINE_PHASE_BUILD;
 
   if (self->requested_phase)
     {
@@ -156,11 +156,11 @@ ide_notification_addin_build_started (IdeNotificationAddin *self,
 
 static void
 ide_notification_addin_build_failed (IdeNotificationAddin *self,
-                                     IdeBuildPipeline     *build_pipeline,
+                                     IdePipeline     *pipeline,
                                      IdeBuildManager      *build_manager)
 {
   g_assert (IDE_IS_NOTIFICATION_ADDIN (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (build_pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (IDE_IS_BUILD_MANAGER (build_manager));
 
   if (self->notif)
@@ -171,22 +171,22 @@ ide_notification_addin_build_failed (IdeNotificationAddin *self,
 
 static void
 ide_notification_addin_build_finished (IdeNotificationAddin *self,
-                                       IdeBuildPipeline     *pipeline,
+                                       IdePipeline     *pipeline,
                                        IdeBuildManager      *build_manager)
 {
   g_assert (IDE_IS_NOTIFICATION_ADDIN (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
   g_assert (IDE_IS_BUILD_MANAGER (build_manager));
 
   if (self->notif)
     {
       g_autoptr(GIcon) icon = g_themed_icon_new ("emblem-ok-symbolic");
 
-      if (self->requested_phase & IDE_BUILD_PHASE_BUILD)
+      if (self->requested_phase & IDE_PIPELINE_PHASE_BUILD)
         ide_notification_set_title (self->notif, _("Build succeeded"));
-      else if (self->requested_phase & IDE_BUILD_PHASE_CONFIGURE)
+      else if (self->requested_phase & IDE_PIPELINE_PHASE_CONFIGURE)
         ide_notification_set_title (self->notif, _("Build configured"));
-      else if (self->requested_phase & IDE_BUILD_PHASE_AUTOGEN)
+      else if (self->requested_phase & IDE_PIPELINE_PHASE_AUTOGEN)
         ide_notification_set_title (self->notif, _("Build bootstrapped"));
 
       ide_notification_set_icon (self->notif, icon);
@@ -196,15 +196,15 @@ ide_notification_addin_build_finished (IdeNotificationAddin *self,
 }
 
 static void
-ide_notification_addin_load (IdeBuildPipelineAddin *addin,
-                             IdeBuildPipeline      *pipeline)
+ide_notification_addin_load (IdePipelineAddin *addin,
+                             IdePipeline      *pipeline)
 {
   IdeNotificationAddin *self = (IdeNotificationAddin *)addin;
   IdeBuildManager *build_manager;
   IdeContext *context;
 
   g_assert (IDE_IS_NOTIFICATION_ADDIN (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
   context = ide_object_get_context (IDE_OBJECT (addin));
   g_assert (IDE_IS_CONTEXT (context));
@@ -232,13 +232,13 @@ ide_notification_addin_load (IdeBuildPipelineAddin *addin,
 }
 
 static void
-ide_notification_addin_unload (IdeBuildPipelineAddin *addin,
-                               IdeBuildPipeline      *pipeline)
+ide_notification_addin_unload (IdePipelineAddin *addin,
+                               IdePipeline      *pipeline)
 {
   IdeNotificationAddin *self = (IdeNotificationAddin *)addin;
 
   g_assert (IDE_IS_NOTIFICATION_ADDIN (self));
-  g_assert (IDE_IS_BUILD_PIPELINE (pipeline));
+  g_assert (IDE_IS_PIPELINE (pipeline));
 
   if (self->notif != NULL)
     {
@@ -260,7 +260,7 @@ ide_notification_addin_init (IdeNotificationAddin *self)
 }
 
 static void
-addin_iface_init (IdeBuildPipelineAddinInterface *iface)
+addin_iface_init (IdePipelineAddinInterface *iface)
 {
   iface->load = ide_notification_addin_load;
   iface->unload = ide_notification_addin_unload;
diff --git a/src/plugins/notification/notification-plugin.c b/src/plugins/notification/notification-plugin.c
index 4a53c0afa..5522dcf11 100644
--- a/src/plugins/notification/notification-plugin.c
+++ b/src/plugins/notification/notification-plugin.c
@@ -29,6 +29,6 @@ _IDE_EXTERN void
 _ide_notification_register_types (PeasObjectModule *module)
 {
   peas_object_module_register_extension_type (module,
-                                              IDE_TYPE_BUILD_PIPELINE_ADDIN,
+                                              IDE_TYPE_PIPELINE_ADDIN,
                                               IDE_TYPE_NOTIFICATION_ADDIN);
 }
diff --git a/src/plugins/npm/npm_plugin.py b/src/plugins/npm/npm_plugin.py
index be3b08059..f797cb363 100644
--- a/src/plugins/npm/npm_plugin.py
+++ b/src/plugins/npm/npm_plugin.py
@@ -54,7 +54,7 @@ class NPMBuildSystem(Ide.Object, Ide.BuildSystem):
         return 100
 
 
-class NPMPipelineAddin(Ide.Object, Ide.BuildPipelineAddin):
+class NPMPipelineAddin(Ide.Object, Ide.PipelineAddin):
     """
     The NPMPipelineAddin is responsible for creating the necessary build
     stages and attaching them to phases of the build pipeline.
@@ -87,9 +87,9 @@ class NPMPipelineAddin(Ide.Object, Ide.BuildPipelineAddin):
             fetch_launcher.push_argv('--arch')
             fetch_launcher.push_argv(pipeline.get_host_triplet().get_arch())
         fetch_launcher.push_argv('install')
-        stage = Ide.BuildStageLauncher.new(context, fetch_launcher)
+        stage = Ide.PipelineStageLauncher.new(context, fetch_launcher)
         stage.set_name(_("Downloading npm dependencies"))
-        self.track(pipeline.attach(Ide.BuildPhase.DOWNLOADS, 0, stage))
+        self.track(pipeline.attach(Ide.PipelinePhase.DOWNLOADS, 0, stage))
 
 
 # The scripts used by the npm build system during build
diff --git a/src/plugins/phpize/phpize_plugin.py b/src/plugins/phpize/phpize_plugin.py
index 41999815f..4b33c1c95 100644
--- a/src/plugins/phpize/phpize_plugin.py
+++ b/src/plugins/phpize/phpize_plugin.py
@@ -77,7 +77,7 @@ class PHPizeBuildSystem(Ide.Object, Ide.BuildSystem):
         # print variables, and then extract the values based on the file type.
         # But before, we must advance the pipeline through CONFIGURE.
         build_manager = Ide.BuildManager.from_context(context)
-        build_manager.execute_async(Ide.BuildPhase.CONFIGURE, None, self._get_build_flags_build_cb, task)
+        build_manager.build_async(Ide.PipelinePhase.CONFIGURE, None, self._get_build_flags_build_cb, task)
 
     def do_get_build_flags_finish(self, result):
         return result.build_flags
@@ -88,7 +88,7 @@ class PHPizeBuildSystem(Ide.Object, Ide.BuildSystem):
         and then runs a make subprocess to extract build flags from Makefile.
         """
         try:
-            build_manager.execute_finish(result)
+            build_manager.build_finish(result)
 
             pipeline = build_manager.get_pipeline()
 
@@ -162,7 +162,7 @@ class PHPizeBuildSystemDiscovery(GObject.Object, Ide.BuildSystemDiscovery):
 
         return (None, 0)
 
-class PHPizeBuildPipelineAddin(Ide.Object, Ide.BuildPipelineAddin):
+class PHPizePipelineAddin(Ide.Object, Ide.PipelineAddin):
     """
     This class is responsible for attaching the various build operations
     to the pipeline at the appropriate phase.
@@ -187,10 +187,10 @@ class PHPizeBuildPipelineAddin(Ide.Object, Ide.BuildPipelineAddin):
         bootstrap_launcher = pipeline.create_launcher()
         bootstrap_launcher.push_argv('phpize')
         bootstrap_launcher.set_cwd(srcdir)
-        bootstrap_stage = Ide.BuildStageLauncher.new(context, bootstrap_launcher)
+        bootstrap_stage = Ide.PipelineStageLauncher.new(context, bootstrap_launcher)
         bootstrap_stage.set_name(_("Bootstrapping project"))
         bootstrap_stage.set_completed(os.path.exists(os.path.join(srcdir, 'configure')))
-        self.track(pipeline.attach(Ide.BuildPhase.AUTOGEN, 0, bootstrap_stage))
+        self.track(pipeline.attach(Ide.PipelinePhase.AUTOGEN, 0, bootstrap_stage))
 
         # Configure the project using autoconf. We run from builddir.
         config_launcher = pipeline.create_launcher()
@@ -203,9 +203,9 @@ class PHPizeBuildPipelineAddin(Ide.Object, Ide.BuildPipelineAddin):
         if config_opts:
             _, config_opts = GLib.shell_parse_argv(config_opts)
             config_launcher.push_args(config_opts)
-        config_stage = Ide.BuildStageLauncher.new(context, config_launcher)
+        config_stage = Ide.PipelineStageLauncher.new(context, config_launcher)
         config_stage.set_name(_("Configuring project"))
-        self.track(pipeline.attach(Ide.BuildPhase.CONFIGURE, 0, config_stage))
+        self.track(pipeline.attach(Ide.PipelinePhase.CONFIGURE, 0, config_stage))
 
         # Build the project using make.
         build_launcher = pipeline.create_launcher()
@@ -215,19 +215,19 @@ class PHPizeBuildPipelineAddin(Ide.Object, Ide.BuildPipelineAddin):
         clean_launcher = pipeline.create_launcher()
         clean_launcher.push_argv('make')
         clean_launcher.push_argv('clean')
-        build_stage = Ide.BuildStageLauncher.new(context, build_launcher)
+        build_stage = Ide.PipelineStageLauncher.new(context, build_launcher)
         build_stage.set_name(_("Building project"))
         build_stage.set_clean_launcher(clean_launcher)
         build_stage.connect('query', self._query)
-        self.track(pipeline.attach(Ide.BuildPhase.BUILD, 0, build_stage))
+        self.track(pipeline.attach(Ide.PipelinePhase.BUILD, 0, build_stage))
 
         # Use "make install" to install the project.
         install_launcher = pipeline.create_launcher()
         install_launcher.push_argv('make')
         install_launcher.push_argv('install')
-        install_stage = Ide.BuildStageLauncher.new(context, install_launcher)
+        install_stage = Ide.PipelineStageLauncher.new(context, install_launcher)
         install_stage.set_name(_("Installing project"))
-        self.track(pipeline.attach(Ide.BuildPhase.INSTALL, 0, install_stage))
+        self.track(pipeline.attach(Ide.PipelinePhase.INSTALL, 0, install_stage))
 
     def _query(self, stage, pipeline, targets, cancellable):
         # Always defer to make for completion status
diff --git a/src/plugins/terminal/gbp-terminal-workspace-addin.c 
b/src/plugins/terminal/gbp-terminal-workspace-addin.c
index c2276199a..aa5620161 100644
--- a/src/plugins/terminal/gbp-terminal-workspace-addin.c
+++ b/src/plugins/terminal/gbp-terminal-workspace-addin.c
@@ -64,13 +64,13 @@ find_builddir (IdeWorkspace *workspace)
 {
   IdeContext *context;
   IdeBuildManager *build_manager;
-  IdeBuildPipeline *pipeline;
+  IdePipeline *pipeline;
   const gchar *builddir = NULL;
 
   if ((context = ide_workspace_get_context (workspace)) &&
       (build_manager = ide_build_manager_from_context (context)) &&
       (pipeline = ide_build_manager_get_pipeline (build_manager)) &&
-      (builddir = ide_build_pipeline_get_builddir (pipeline)) &&
+      (builddir = ide_pipeline_get_builddir (pipeline)) &&
       g_file_test (builddir, G_FILE_TEST_IS_DIR))
     return g_strdup (builddir);
 
diff --git a/src/plugins/vala-pack/ide-vala-pipeline-addin.vala 
b/src/plugins/vala-pack/ide-vala-pipeline-addin.vala
index 566a686fb..95279f675 100644
--- a/src/plugins/vala-pack/ide-vala-pipeline-addin.vala
+++ b/src/plugins/vala-pack/ide-vala-pipeline-addin.vala
@@ -23,7 +23,7 @@ using Vala;
 
 namespace Ide
 {
-       public class ValaPipelineAddin: Ide.Object, Ide.BuildPipelineAddin
+       public class ValaPipelineAddin: Ide.Object, Ide.PipelineAddin
        {
                // main.vala:24.30-24.30: error: initializer list used for `Gtk.WindowType', which is neither 
array nor struct
                const string ERROR_FORMAT_REGEX =
@@ -34,13 +34,13 @@ namespace Ide
 
                uint error_format = 0;
 
-               public void load (Ide.BuildPipeline pipeline)
+               public void load (Ide.Pipeline pipeline)
                {
                        this.error_format = pipeline.add_error_format (ERROR_FORMAT_REGEX,
                                                                       GLib.RegexCompileFlags.OPTIMIZE | 
GLib.RegexCompileFlags.CASELESS);
                }
 
-               public void unload (Ide.BuildPipeline pipeline)
+               public void unload (Ide.Pipeline pipeline)
                {
                        pipeline.remove_error_format (this.error_format);
                }
diff --git a/src/plugins/vala-pack/vala-pack-plugin.vala b/src/plugins/vala-pack/vala-pack-plugin.vala
index 5a1b78e21..79c161af0 100644
--- a/src/plugins/vala-pack/vala-pack-plugin.vala
+++ b/src/plugins/vala-pack/vala-pack-plugin.vala
@@ -25,7 +25,7 @@ public void peas_register_types (GLib.TypeModule module)
 {
        Peas.ObjectModule peas = (Peas.ObjectModule)module;
 
-       peas.register_extension_type (typeof (Ide.BuildPipelineAddin), typeof (Ide.ValaPipelineAddin));
+       peas.register_extension_type (typeof (Ide.PipelineAddin), typeof (Ide.ValaPipelineAddin));
        peas.register_extension_type (typeof (Ide.CodeIndexer), typeof (Ide.ValaCodeIndexer));
        peas.register_extension_type (typeof (Ide.CompletionProvider), typeof (Ide.ValaCompletionProvider));
        peas.register_extension_type (typeof (Ide.DiagnosticProvider), typeof (Ide.ValaDiagnosticProvider));


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]