CircleCI

    In this section we are going to present some configuration examples to see how CircleCI implements some continuous integration concepts.

    Before showing some examples, it’s worth mentioning . As defined in the official docs:

    In our case, we are going to use Crystal’s Orb

    ```yaml title=”.circleci/config.yml” workflows: version: 2 build: jobs:

    orbs: crystal: manastech/crystal@1.0 version: 2.1

    1. Yeah! That was simple! With Orbs an abstraction layer is built so that the configuration file is more readable and intuitive.
    2. In case we are wondering what the job [crystal/test](https://circleci.com/orbs/registry/orb/manastech/crystal#jobs-test) does, we always may see the source code.
    3. ### Using `nightly`
    4. Using nightly Crystal release is as easy as:
    5. ```yaml title=".circleci/config.yml"
    6. workflows:
    7. version: 2
    8. build:
    9. jobs:
    10. name: test-on-nightly
    11. executor:
    12. name: crystal/default
    13. tag: nightly
    14. orbs:
    15. crystal: manastech/crystal@1.0
    16. version: 2.1

    Using a specific Crystal release

    ```yaml title=”.circleci/config.yml” workflows: version: 2 build: jobs:

    orbs: crystal: manastech/crystal@1.0 version: 2.1

    1. ## Installing shards packages
    2. You need not worry about it since the `crystal/test` job runs the `crystal/shard-install` orb command.
    3. ## Installing binary dependencies
    4. Our application or maybe some shards may require libraries and packages. This binary dependencies may be installed using the [Apt](https://help.ubuntu.com/lts/serverguide/apt.html) command.
    5. Here is an example installing the `libsqlite3` development package:
    6. ```yaml title=".circleci/config.yml"
    7. version: 2
    8. build:
    9. jobs:
    10. - crystal/test:
    11. - run: apt-get update && apt-get install -y libsqlite3-dev
    12. orbs:
    13. crystal: manastech/crystal@1.0
    14. version: 2.1

    ```yaml title=”.circleci/config.yml” executors: crystal_mysql: docker:

    workflows: version: 2 build: jobs:

    1. - crystal/test:
    2. executor: crystal_mysql
    3. pre-steps:
    4. - run:
    5. name: Waiting for service to start (check dockerize)
    6. command: sleep 1m
    7. - checkout
    8. - run:
    9. name: Install MySQL CLI; Import dummy data
    10. command: |
    11. mysql -h 127.0.0.1 -u root --password="" db < test-data/setup.sql

    orbs: crystal: manastech/crystal@1.0 version: 2.1 ```

    note The explicit checkout in the pre-steps is to have the test-data/setup.sql file available.