# 2.5.13. Build Steps

`BuildStep`s are usually specified in the buildmaster’s configuration file, in a list that given to a `BuildFactory`. The `BuildStep` instances in this list are used as templates to construct new independent copies for each build (so that state can be kept on the `BuildStep` in one build without affecting a later build). Each `BuildFactory` can be created with a list of steps, or the factory can be created empty and then steps added to it using the `addStep` method:

    from buildbot.plugins import util, steps

    f = util.BuildFactory()
    f.addSteps([
        steps.SVN(repourl="http://svn.example.org/Trunk/"),
        steps.ShellCommand(command=["make", "all"]),
        steps.ShellCommand(command=["make", "test"])
    ])

The basic behavior for a `BuildStep` is to:

- run for a while, then stop

- possibly invoke some RemoteCommands on the attached worker

- possibly produce a set of log files

- finish with a status described by one of four values defined in `buildbot.process.results`: `SUCCESS`, `WARNINGS`, `FAILURE`, `SKIPPED`

- provide a list of short strings to describe the step

The rest of this section describes all the standard `BuildStep` objects available for use in a `Build`, and the parameters that can be used to control each. A full list of build steps is available in the Build Step Index.

## 2.5.13.58. Build steps

The following build steps are available:

- Parameters Common to all Steps

- Source checkout steps - used to checkout the source code

  > - Common Parameters of source checkout operations

  > - Bzr

  > - CVS

  > - Darcs

  > - Git

  > - Gerrit

  > - GitHub

  > - GitLab

  > - Mercurial

  > - Monotone

  > - P4

  > - Repo

  > - SVN

- Other source-related steps - used to perform non-checkout source operations

  > - GitCommit

  > - GitTag

  > - GitPush

  > - GitDiffInfo

- ShellCommand steps - used to perform various shell-based operations

  > - ShellCommand

  > - Shell Sequence

  > - Compile

  > - Configure

  > - CMake

  > - Visual C++ (`VC<...>`, `VS<...>`, `VCExpress9`, `MsBuild<...`)

  > - Cppcheck

  > - Robocopy

  > - Test

  > - TreeSize

  > - PerlModuleTest

  > - SubunitShellCommand

  > - HLint

  > - MaxQ

- Trigger - triggering other builds

- Python build steps - used to perform Python-related build operations

  > - BuildEPYDoc

  > - PyFlakes

  > - Sphinx

  > - PyLint

  > - Trial

- Debian build steps - used to build `deb` packages

  > - DebPbuilder, DebCowBuilder

  > - DebLintian

- RPM build steps - used to build `rpm` packages

  > - RpmBuild

  > - RpmLint

  > - MockBuildSRPM Step

  > - MockRebuild

- Transferring Files - used to perform file transfer operations

  > - FileUpload

  > - FileDownload

  > - DirectoryUpload

  > - MultipleFileUpload

  > - StringDownload

  > - JSONStringDownload

  > - JSONPropertiesDownload

- HTTP Requests - used to perform HTTP requests

  > - HTTPStep

  > - POST

  > - GET

  > - PUT

  > - DELETE

  > - HEAD

  > - OPTIONS

- Worker Filesystem Steps - used to perform filesystem operations on the worker

  > - FileExists

  > - CopyDirectory

  > - RemoveDirectory

  > - MakeDirectory

- Master steps - used to perform operations on the build master

  > - MasterShellCommand

  > - SetProperty

  > - SetProperties

  > - SetPropertyFromCommand

  > - SetPropertiesFromEnv

  > - LogRenderable - used to log a renderable property for debugging

  > - Assert - used to terminate build depending on condition