> For the complete documentation index, see [llms.txt](https://circleci.com/docs/llms.txt)

# Migrate from GitHub Actions

This document provides an overview of how to migrate from GitHub Actions to CircleCI.

The [CircleCI configuration translator](https://circleci.com/developer/tools/configTranslator) provides a way to convert your GitHub Actions or GitLab config into a CircleCI `config.yml` file. The configuration translator is currently in open preview.

## Concepts

### Jobs and workflows

Both GitHub Actions and CircleCI share similar concepts around "jobs" and "workflows". A workflow is an end-to-end flow of connected jobs. Jobs consist of commands to achieve an atomic task (for example, "run unit tests" or "build a Docker image").

CircleCI differs primarily in configuration syntax, setting up workflow and job dependencies in a separate section as opposed to inline in the job.

<table><thead><tr><th>GitHub</th><th>CircleCI</th></tr></thead><tbody><tr><td><div><div><div><pre><code data-lang="yaml" class="shiki  " style="--shiki-line-number-start: 1; --shiki-line-number-color: #787ea2;"><span class="line"><span style="color: #8BE9FD">name</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">My GitHub Actions Workflow</span></span>
<span class="line"></span>
<span class="line"><span style="color: #BD93F9">on</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> [</span><span style="color: #F1FA8C">push</span><span style="color: #F8F8F2">]</span></span>
<span class="line"></span>
<span class="line"><span style="color: #8BE9FD">jobs</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #8BE9FD">job_1</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">runs-on</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">ubuntu-latest</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">steps</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #6272A4"># job steps</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #8BE9FD">job_2</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">needs</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">job_1</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">runs-on</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">ubuntu-latest</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">steps</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #6272A4"># job steps</span></span></code></pre></div></div></div></td><td><div><div><div><pre><code data-lang="yaml" class="shiki  " style="--shiki-line-number-start: 1; --shiki-line-number-color: #787ea2;"><span class="line"><span style="color: #8BE9FD">jobs</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #8BE9FD">job_1</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">executor</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">my-ubuntu-exec</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">steps</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #6272A4"># job steps</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #8BE9FD">job_2</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">executor</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">my-ubuntu-exec</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">steps</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #6272A4"># job steps</span></span>
<span class="line"></span>
<span class="line"><span style="color: #8BE9FD">workflows</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #8BE9FD">my_workflow</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">jobs</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">job_1</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD">job_2</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">          </span><span style="color: #8BE9FD">requires</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">            </span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">job_1</span></span></code></pre></div></div></div></td></tr></tbody></table>

### Actions vs. orbs

"Actions" in GitHub are reusable commands or tasks to run inside a job. However, they are written for execution inside a Docker container or coded as individual steps using JavaScript. This adds additional work and limits the scope in which they can be applied.

CircleCI offers similar functionality in our [Orbs](https://circleci.com/docs/orbs/use/orb-intro/). The primary difference is that CircleCI orbs are packaged, reusable YAML. You can create orbs with reusable jobs, executors, or commands, and use them in any of your jobs or workflows.

GitHub offers browsing of Actions in their Marketplace; CircleCI has an [Orb Registry](https://circleci.com/developer/orbs) as well as an [Integrations Page](https://circleci.com/integrations/) containing numerous Certified, Partner, and community orbs / integrations.

### Runners vs. executors

In GitHub, you can specify your builds to run in Linux, macOS, and Windows environments via a `runs-on` key in the YAML. If you want to run anything in a container, specify an additional `container` key.

In CircleCI, you have the same choice of environments (called Executors), with additional options and features for Docker.

For each of the [executor types](https://circleci.com/docs/executor-intro/), you have a choice of different versions which will subsequently have various versions of base software installed.

See the table in the next section to compare configuration.

## Configuration comparison

**Using Docker?** Authenticating Docker pulls from image registries is recommended when using the Docker execution environment. Authenticated pulls allow access to private Docker images, and may also grant higher rate limits, depending on your registry provider. For further information, see [Using Docker Authenticated Pulls](https://circleci.com/docs/guides/execution-managed/private-images/).

<table><thead><tr><th>GitHub Config</th><th>CircleCI Config</th></tr></thead><tbody><tr><td colspan="2">Specifying execution environment. While container execution is specified separately in GitHub,<br><code>docker</code> is its <a href="https://circleci.com/docs/configuration-reference/#docker-machine-macos-windows-executor">own class of executor</a> in CircleCI.</td></tr><tr><td><div><div><div><pre><code data-lang="yaml" class="shiki  " style="--shiki-line-number-start: 1; --shiki-line-number-color: #787ea2;"><span class="line"><span style="color: #6272A4"># Choosing an Operating System</span></span>
<span class="line"><span style="color: #8BE9FD">runs-on</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">ubuntu-latest</span><span style="color: #F8F8F2"> </span><span style="color: #6272A4"># or windows, etc.</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6272A4"># If running steps on a container</span></span>
<span class="line"><span style="color: #8BE9FD">container</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #8BE9FD">image</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">openjdk:17.0-jdk</span></span></code></pre></div></div></div></td><td><div><div><div><pre><code data-lang="yaml" class="shiki  " style="--shiki-line-number-start: 1; --shiki-line-number-color: #787ea2;"><span class="line"><span style="color: #6272A4"># Docker (container) Executor</span></span>
<span class="line"><span style="color: #8BE9FD">docker</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD">image</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">cimg/openjdk:17.0</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6272A4"># Linux Ubuntu Executor</span></span>
<span class="line"><span style="color: #8BE9FD">machine</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #8BE9FD">image</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">ubuntu-2004:202010-01</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6272A4"># macOS Executor</span></span>
<span class="line"><span style="color: #8BE9FD">macos</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #8BE9FD">xcode</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">14.2.0</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6272A4"># Windows Executor</span></span>
<span class="line"><span style="color: #8BE9FD">machine</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #8BE9FD">image</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">'</span><span style="color: #F1FA8C">windows-server-2022-gui:current</span><span style="color: #E9F284">'</span></span>
<span class="line"><span style="color: #8BE9FD">resource_class</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">windows.medium</span><span style="color: #F8F8F2"> </span><span style="color: #6272A4"># can be medium, large, xlarge, 2xlarge</span></span></code></pre></div></div></div></td></tr><tr><td colspan="2">Specifying dependencies/services. All images specified after the first in CircleCI are treated <a href="https://circleci.com/docs/configuration-reference/#docker">as dependencies</a>.</td></tr><tr><td><div><div><div><pre><code data-lang="yaml" class="shiki  " style="--shiki-line-number-start: 1; --shiki-line-number-color: #787ea2;"><span class="line"><span style="color: #8BE9FD">jobs</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #8BE9FD">build</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">runs-on</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">ubuntu-latest</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #6272A4"># Main container</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">container</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #8BE9FD">image</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">openjdk:17.0-jdk</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #6272A4"># Dependency Service(s)</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">services</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #8BE9FD">postgres</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #8BE9FD">image</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">postgres:10.8</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #8BE9FD">env</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">          </span><span style="color: #8BE9FD">POSTGRES_USER</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">postgres</span></span>
<span class="line"><span style="color: #F8F8F2">          </span><span style="color: #8BE9FD">POSTGRES_PASSWORD</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">postgres</span></span>
<span class="line"><span style="color: #F8F8F2">          </span><span style="color: #8BE9FD">POSTGRES_DB</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">postgres</span></span></code></pre></div></div></div></td><td><div><div><div><pre><code data-lang="yaml" class="shiki  " style="--shiki-line-number-start: 1; --shiki-line-number-color: #787ea2;"><span class="line"><span style="color: #8BE9FD">jobs</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #8BE9FD">build</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">docker</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #6272A4"># Primary Executor</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD">image</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">cimg/openjdk:17.0</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #6272A4"># Dependency Service(s)</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD">image</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">postgres:10.8</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #8BE9FD">environment</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">          </span><span style="color: #8BE9FD">POSTGRES_USER</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">postgres</span></span>
<span class="line"><span style="color: #F8F8F2">          </span><span style="color: #8BE9FD">POSTGRES_PASSWORD</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">postgres</span></span>
<span class="line"><span style="color: #F8F8F2">          </span><span style="color: #8BE9FD">POSTGRES_DB</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">postgres</span></span></code></pre></div></div></div></td></tr><tr><td colspan="2">Specifying steps to <a href="https://circleci.com/docs/configuration-reference/#run">run</a> in a job. Similar functionality, different syntax.</td></tr><tr><td><div><div><div><pre><code data-lang="yaml" class="shiki  " style="--shiki-line-number-start: 1; --shiki-line-number-color: #787ea2;"><span class="line"><span style="color: #8BE9FD">jobs</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #8BE9FD">build</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #6272A4"># runner config here</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">steps</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD">name</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">Build with Gradle</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #8BE9FD">run</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">./gradlew build</span></span></code></pre></div></div></div></td><td><div><div><div><pre><code data-lang="yaml" class="shiki  " style="--shiki-line-number-start: 1; --shiki-line-number-color: #787ea2;"><span class="line"><span style="color: #8BE9FD">jobs</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #8BE9FD">build</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #6272A4"># executor config here</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">steps</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD">run</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">          </span><span style="color: #8BE9FD">name</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">Build with Gradle</span></span>
<span class="line"><span style="color: #F8F8F2">          </span><span style="color: #8BE9FD">command</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">./gradlew build</span></span></code></pre></div></div></div></td></tr><tr><td colspan="2">Using shared tasks (Actions for GitHub, orbs for CircleCI). In CircleCI, you declare orbs at the top level<br>and then <a href="https://circleci.com/docs/configuration-reference/#orbs">refer to them by name in config</a>, similar in concept to Python or JavaScript imports.</td></tr><tr><td><div><div><div><pre><code data-lang="yaml" class="shiki  " style="--shiki-line-number-start: 1; --shiki-line-number-color: #787ea2;"><span class="line"><span style="color: #8BE9FD">jobs</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #8BE9FD">build</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #6272A4"># runner config here</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">steps</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD">name</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">Slack Notify</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #8BE9FD">uses</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">rtCamp/action-slack-notify@v1.0.0</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #8BE9FD">env</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">          </span><span style="color: #8BE9FD">SLACK_COLOR</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">'</span><span style="color: #F1FA8C">#32788D</span><span style="color: #E9F284">'</span></span>
<span class="line"><span style="color: #F8F8F2">          </span><span style="color: #8BE9FD">SLACK_MESSAGE</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">'</span><span style="color: #F1FA8C">Tests passed</span><span style="color: #E9F284">'</span></span>
<span class="line"><span style="color: #F8F8F2">          </span><span style="color: #8BE9FD">SLACK_TITLE</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">Slack Notify GA</span></span>
<span class="line"><span style="color: #F8F8F2">          </span><span style="color: #8BE9FD">SLACK_USERNAME</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">Bobby</span></span>
<span class="line"><span style="color: #F8F8F2">          </span><span style="color: #8BE9FD">SLACK_WEBHOOK</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #6272A4"># WEBHOOK</span></span></code></pre></div></div></div></td><td><div><div><div><pre><code data-lang="yaml" class="shiki  " style="--shiki-line-number-start: 1; --shiki-line-number-color: #787ea2;"><span class="line"><span style="color: #8BE9FD">orbs</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #8BE9FD">slack-orb</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">circleci/slack@3.4.0</span></span>
<span class="line"></span>
<span class="line"><span style="color: #8BE9FD">jobs</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #8BE9FD">build</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #6272A4"># executor config here</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">steps</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD">slack-orb/notify</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">          </span><span style="color: #8BE9FD">color</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">'</span><span style="color: #F1FA8C">#32788D</span><span style="color: #E9F284">'</span></span>
<span class="line"><span style="color: #F8F8F2">          </span><span style="color: #8BE9FD">message</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">Tests passed</span></span>
<span class="line"><span style="color: #F8F8F2">          </span><span style="color: #8BE9FD">title</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">Testing Slack Orb</span></span>
<span class="line"><span style="color: #F8F8F2">          </span><span style="color: #8BE9FD">author_name</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">Bobby</span></span>
<span class="line"><span style="color: #F8F8F2">          </span><span style="color: #8BE9FD">webhook</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #6272A4"># WEBHOOK</span></span></code></pre></div></div></div></td></tr><tr><td colspan="2"><div><div><p>Using conditional steps in the workflow. CircleCI offers the following:</p></div><div><ul><li><p><a href="https://circleci.com/docs/reference/configuration-reference/#the-when-attribute">The When Attribute</a> (for example, <code>on_success</code> [default],<br><code>always</code>, <code>on_failure</code>).</p></li><li><p><a href="https://circleci.com/docs/configuration-reference/#the-when-step">Conditional steps</a> based on parameters.</p></li><li><p><a href="https://circleci.com/docs/reusing-config/#using-the-parameters-declaration">Conditional jobs</a>.</p></li><li><p>Conditional, parameterized <a href="https://circleci.com/docs/guides/orchestrate/workflows/#use-conditional-logic-in-workflows">Workflows</a>.</p></li></ul></div></div></td></tr><tr><td><div><div><div><pre><code data-lang="yaml" class="shiki  " style="--shiki-line-number-start: 1; --shiki-line-number-color: #787ea2;"><span class="line"><span style="color: #8BE9FD">jobs</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #8BE9FD">build</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #6272A4"># environment config here</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">steps</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD">name</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">My Failure Step</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #8BE9FD">run</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">echo "Failed step"</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #8BE9FD">if</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">failure()</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD">name</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">My Always Step</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #8BE9FD">run</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">echo "Always step"</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #8BE9FD">if</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">always()</span></span></code></pre></div></div></div></td><td><div><div><div><pre><code data-lang="yaml" class="shiki  " style="--shiki-line-number-start: 1; --shiki-line-number-color: #787ea2;"><span class="line"><span style="color: #8BE9FD">jobs</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #8BE9FD">build</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #6272A4"># executor config here</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">steps</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD">run</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">          </span><span style="color: #8BE9FD">name</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">My Failure Step</span></span>
<span class="line"><span style="color: #F8F8F2">          </span><span style="color: #8BE9FD">command</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">echo "Failed step"</span></span>
<span class="line"><span style="color: #F8F8F2">          </span><span style="color: #8BE9FD">when</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">on_fail</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD">run</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">          </span><span style="color: #8BE9FD">name</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">My Always Step</span></span>
<span class="line"><span style="color: #F8F8F2">          </span><span style="color: #8BE9FD">command</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">echo "Always step"</span></span>
<span class="line"><span style="color: #F8F8F2">          </span><span style="color: #8BE9FD">when</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">always</span></span></code></pre></div></div></div></td></tr></tbody></table>

For more configuration examples on CircleCI, visit our [Examples and Guides Overview](https://circleci.com/docs/guides/toolkit/examples-and-guides-overview/) and [Example Projects](https://circleci.com/docs/guides/toolkit/sample-config/) pages.

Since the configuration between GitHub Actions and CircleCI is similar, migrating your jobs and workflows is straightforward. For best chances of success, we recommend migrating over items in the following order:

1.  [Jobs, Steps, and Workflows](https://circleci.com/docs/guides/about-circleci/concepts/)
    
2.  [More Advanced Workflow and Job Dependency Configuration](https://circleci.com/docs/guides/orchestrate/workflows/)
    
3.  [Actions to Orbs](https://circleci.com/docs/orbs/use/orb-intro/). Our registry can be found [here](https://circleci.com/developer/orbs?filterBy=all).
    
4.  [Optimizations Like Caching, Workspaces, and Parallelism](https://circleci.com/docs/guides/optimize/optimizations/)