Learn about strategies for perfecting local and remote CI pipelines in Elixir projects. Know the importance of automating checks to reduce developer time spent on repetitive tasks, ultimately leading to more efficient and productive development.

Table of contents

    About Szymon Soppa

    Szymon Soppa is an experienced developer and the CEO at Curiosum. With a background in leading multiple outsourcing projects and founding an event discovery startup, Szymon brings a wealth of knowledge in optimizing development processes.

    Why Continuous Integration is Essential

    The Role of CI

    Szymon began by explaining the critical role of Continuous Integration (CI) in maintaining quality standards. CI is the last barrier to ensure that code quality guidelines are met before deployment, ensuring that the project builds correctly, tests pass, and code reviews are more efficient.

    Key Points:

    • Quality Assurance: Automated checks for quality guidelines.
    • Build Verification: Ensuring the project compiles.
    • Automated Testing: Verifying that tests pass before deployment.

    Key Steps in an Elixir CI Pipeline

    Fetching Dependencies

    The first essential step in a CI pipeline is fetching dependencies. This step ensures that all necessary libraries are available for the build process.

    Formatting Code

    Using tools like mix format helps in maintaining a unified code style, reducing arguments during code reviews about code formatting.

    Benefits:

    • Unified Code Style: Consistent formatting across the codebase.
    • Reduced Code Review Time: Automated formatting checks prevent formatting issues from reaching code reviews.

    Compilation and Testing

    Compiling the Code

    Szymon stressed the importance of compiling the code to catch any errors early in the process. He also recommended treating warnings as errors to ensure high code quality.

    Running Tests

    Automated tests are crucial to verify that the code works as expected. Tools like mix test help in running the test suite and checking test coverage.

    Advanced CI Steps

    Database Migrations

    Verifying the ability to roll back database migrations ensures that changes can be reversed if necessary, preventing potential issues in production.

    Static Code Analysis

    Tools like Credo and Sobelow are used for static code analysis. Credo checks for code quality, while Sobelow focuses on security issues.

    Tools:

    • Credo: Code readability and consistency checks.
    • Sobelow: Security-focused static analysis.

    Local CI Setup

    Using Git Hooks

    Szymon introduced the concept of local CI using Git hooks. By configuring pre-commit hooks, developers can ensure that code quality checks are performed before code is committed.

    Steps:

    • Configure Hooks: Set up hooks to run checks like formatting and static analysis.
    • Automate Checks: Ensure that the checks pass before allowing a commit.

    Practical Tips for Remote CI

    Setting Up Dependencies

    In remote CI environments, it is essential to set up all necessary dependencies, such as databases and external services, before running the build.

    Using Caching

    Caching dependencies and build artifacts can significantly speed up the CI process, reducing the time spent on repetitive tasks.

    Tips:

    • Cache Dependencies: Store dependencies to avoid fetching them every time.
    • Parallelism: Run independent steps in parallel to speed up the CI process.

    Conclusion

    Szymon Soppa's presentation at Elixir Meetup #7 provided valuable insights into optimizing local and remote CI pipelines for Elixir projects. By automating checks and leveraging tools for static analysis and testing, developers can enhance their workflow and maintain high code quality.

    Join the Community

    Ready to optimize your Elixir CI pipelines? Register for the next Elixir Meetup at Curiosum Meetups: Registration Join our community of Elixir enthusiasts at Elixir LinkedIn Group Prefer watching the presentation? Here’s the video

    Mikołaj Musioł Recruitment Specialist
    Mikołaj Musioł IT Recruitment & HR Specialist

    Read more
    on #curiosum blog

    Bringing SOLID to Elixir

    Bringing SOLID to Elixir

    The SOLID principles, originally designed for object-oriented programming, can also be adapted effectively to functional programming languages like Elixir. Read how to apply it to create more maintainable, scalable, and adaptable software systems.