DEV Community

Vinh Nhan
Vinh Nhan

Posted on

Setting Up a GitHub Actions CI Workflow

Hello!! 👋

When it comes to managing code quality and testing in a collaborative project, setting up Continuous Integration (CI) can be a game changer. GitHub Actions is one of the most popular choices for CI, offering simplicity, flexibility, and direct integration with GitHub repos. Here, I’ll walk you through my experience setting up a CI workflow with GitHub Actions, compare it with my partner’s setup, and share some insights on the challenges and benefits I encountered along the way.

Step-by-Step: My CI Workflow on GitHub Actions

Setting up the CI workflow directly on GitHub was straightforward, thanks to the well-documented interface and ease of YAML configuration. In my setup, I configured the CI to run on every Pull Request or Push to all branches. This means that any code change, whether it's a quick patch or a feature branch, is automatically tested as part of the CI workflow.

My workflow consists of two main jobs:

  1. ESLint - Linting helps catch syntax and formatting errors early, so the code is clean and consistent.
  2. Unit Tests - This job runs all unit tests to make sure that any new changes or additions do not break existing functionality.

Here’s an example of what the YAML configuration for my CI workflow looks like.

In this configuration, GitHub Actions triggers both ESLint and unit test jobs every time there’s a push or a pull request. The eslint job makes sure that code follows our style guidelines, while tests ensures that all tests pass successfully before the code is merged.

How My Partner's CI Workflow Differs

While my setup triggers the CI on all branches, my partner brokoli777's CI, has a different approach. His CI workflow only triggers on the main branch and runs only unit tests. This setup is a bit more selective, ensuring that CI runs only when pushing final code to production. This approach could make sense for certain workflows, as it minimizes the frequency of CI runs, which could save resources and time. However, it also means that potential issues might go undetected on feature branches until they’re merged into the main branch.

Writing Tests for a Partner’s Project

Writing tests for a project I didn’t create had its challenges and rewards. Not being familiar with the full context of my partner’s code required me to spend more time understanding the existing structure and functionality. However, this experience also gave me a new perspective. Testing another person’s code helped me think critically about edge cases and develop a broader sense of good test coverage. It’s a valuable exercise in improving both collaboration skills and the quality of my own code as I apply similar scrutiny to my work.

Reflections on CI with GitHub Actions

Setting up CI has been a highly educational process. Seeing my workflow in action, especially with the ESLint addition (one of the optional challenges), highlighted just how useful CI can be for improving code quality and maintaining consistency across contributions. When I first implemented ESLint, many of my pushes and PRs failed because of minor errors like unused variables. While this was frustrating initially, it underscored the value of having a tool that catches these issues early. By enforcing linting through CI, all contributors are encouraged to follow a unified coding style, making the codebase more cohesive and easier to maintain.

Conclusion: The Value of CI

Implementing a CI workflow with GitHub Actions has been a transformative step in my development process. Not only does it help ensure that all code adheres to quality standards before merging, but it also reduces the potential for human error. From handling new feature branches to enforcing code consistency with ESLint, CI has become an essential part of my workflow, and I look forward to leveraging it even more in future projects.

Top comments (0)