Merge pull request #50 from valet-customers/circleci/add-dry-run-lab

CircleCI: Add `dry-run` command lab
This commit is contained in:
j-dunham
2022-09-13 12:59:47 -04:00
committed by GitHub
2 changed files with 194 additions and 1 deletions
+1 -1
View File
@@ -190,4 +190,4 @@ Each pipeline will have a variety of files written that include:
### Next lab
[Perform a dry-run of a GitLab pipeline](3-dry-run.md)
[Perform a dry-run of a CircleCI pipeline](3-dry-run.md)
+193
View File
@@ -0,0 +1,193 @@
# Perform a dry-run of a CircleCI pipeline
In this lab you will use the `dry-run` command to convert a CircleCI pipeline to its equivalent GitHub Actions workflow.
## Prerequisites
1. Followed the steps [here](./readme.md#configure-your-codespace) to set up your Codespace environment.
2. Completed the [configure lab](./1-configure.md#configuring-credentials).
3. Completed the [audit lab](./2-audit.md).
## Perform a dry run
You will be performing a dry-run against a CircleCI project. Answer the following questions before running this command:
1. What project do you want to convert?
- __circleci-demo-ruby-rails__. This is one of the sample projects avaiable in the CircleCI labs-data organization.
2. Where do you want to store the result?
- __./tmp/dry-run-lab__. This can be any path within the working directory that Valet commands are executed from.
### Steps
1. Navigate to your codespace terminal
2. Run the following command from the root directory:
```bash
gh valet dry-run circle-ci --output-dir ./tmp/dry-run-lab --circle-ci-project circleci-demo-ruby-rails
```
3. The command will list all the files written to disk when the command succeeds.
![command-result](https://user-images.githubusercontent.com/18723510/189911131-bf6bfd6f-2b5e-4e49-8d14-95ef9c312117.png)
4. View the converted workflow:
- Find `./tmp/dry-run-lab/labs-data/circleci-demo-ruby-rails` in the file explorer pane in your codespace.
- Click `build_and_test.yml` to open.
## Inspect the output files
The files generated from the `dry-run` command represent the equivalent Actions workflow for the CircleCI project. The CircleCI configuration and converted workflow can be seen below:
<details>
<summary><em>CircleCI configuration 👇</em></summary>
```yaml
version: 2.1
orbs:
ruby: circleci/ruby@1.1.0
node: circleci/node@2
jobs:
build:
docker:
- image: cimg/ruby:2.7.5-node
steps:
- checkout
- ruby/install-deps
# Store bundle cache
- node/install-packages:
pkg-manager: yarn
cache-key: "yarn.lock"
test:
parallelism: 3
docker:
- image: cimg/ruby:2.7.5-node
- image: circleci/postgres:9.5-alpine
environment:
POSTGRES_USER: circleci-demo-ruby
POSTGRES_DB: rails_blog_test
POSTGRES_PASSWORD: ""
environment:
BUNDLE_JOBS: "3"
BUNDLE_RETRY: "3"
PGHOST: 127.0.0.1
PGUSER: circleci-demo-ruby
PGPASSWORD: ""
RAILS_ENV: test
steps:
- checkout
- ruby/install-deps
- node/install-packages:
pkg-manager: yarn
cache-key: "yarn.lock"
- run:
name: Wait for DB
command: dockerize -wait tcp://localhost:5432 -timeout 1m
- run:
name: Database setup
command: bundle exec rails db:schema:load --trace
# Run rspec in parallel
- ruby/rspec-test
- ruby/rubocop-check
workflows:
version: 2
build_and_test:
jobs:
- build
- test:
requires:
- build
```
</details>
<details>
<summary><em>Converted workflow 👇</em></summary>
```yaml
name: labs-data/circleci-demo-ruby-rails/build_and_test
on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
container:
image: cimg/ruby:2.7.5-node
steps:
- name: Set up bundler cache
uses: ruby/setup-ruby@v1
with:
ruby-version: 3.0.2
bundler-cache: true
- uses: actions/checkout@v2
- run: bundle check || bundle install
env:
BUNDLE_DEPLOYMENT: true
- id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn config get cacheFolder)"
- uses: actions/cache@v2
with:
path: "${{ steps.yarn-cache-dir-path.outputs.dir }}"
key: "${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}"
restore-keys: "${{ runner.os }}-yarn-"
- run: yarn install --frozen-lockfile
test:
runs-on: ubuntu-latest
container:
image: cimg/ruby:2.7.5-node
services:
postgres:
image: postgres:9.5-alpine
env:
POSTGRES_USER: circleci-demo-ruby
POSTGRES_DB: rails_blog_test
POSTGRES_PASSWORD: ''
needs:
- build
env:
BUNDLE_JOBS: '3'
BUNDLE_RETRY: '3'
PGHOST: 127.0.0.1
PGUSER: circleci-demo-ruby
PGPASSWORD: ''
RAILS_ENV: test
steps:
- name: Set up bundler cache
uses: ruby/setup-ruby@v1
with:
ruby-version: 3.0.2
bundler-cache: true
- uses: actions/checkout@v2
- run: bundle check || bundle install
env:
BUNDLE_DEPLOYMENT: true
- id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn config get cacheFolder)"
- uses: actions/cache@v2
with:
path: "${{ steps.yarn-cache-dir-path.outputs.dir }}"
key: "${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}"
restore-keys: "${{ runner.os }}-yarn-"
- run: yarn install --frozen-lockfile
- name: Wait for DB
run: dockerize -wait tcp://localhost:5432 -timeout 1m
- name: Database setup
run: bundle exec rails db:schema:load --trace
- run: bundle exec rspec spec --profile 10 --format RspecJunitFormatter --out /tmp/test-results/rspec/results.xml --format progress
- run: bundle exec rubocop --format progress
```
</details>
Despite these two pipelines using different syntax they will function equivalently.
## Next lab
[Use custom transformers to customize Valet's behavior](./4-custom-transformers.md)