This document outlines the CI/CD automation scripts used within the Cilium project. It serves as a comprehensive guide for developers who are looking to understand how continuous integration and continuous deployment are automated in this project.

Overview of CI/CD Setup

Currently, the CI/CD processes are implemented through a combination of JavaScript, shell scripts, and CSS for integration with testing and deployment processes. The specific scripts that support the CI/CD workflow include pre-commit checks and integration tests.

Existing CI/CD Scripts

  1. Husky Hooks: The Cilium project leverages Husky to manage Git hooks.

    • Pre-commit Hook (.husky/pre-commit): This script runs before each commit is made. It can be used to enforce linting rules, check for uncommitted changes, or run tests.

      #!/bin/sh
      . "$(dirname "$0")/_/husky.sh"
      
      # Run lint checks
      npm run lint
      
      # Run tests
      npm test
      
    • Commit Message Hook (.husky/commit-msg): This checks the format of commit messages to ensure they adhere to conventions.

      #!/bin/sh
      . "$(dirname "$0")/_/husky.sh"
      
      commit_msg_file="$1"
      commit_msg=$(cat "$commit_msg_file")
      
      # Simple regex check on commit message format
      if ! echo "$commit_msg" | grep -qE '^\[JIRA-[0-9]+\] '; then
        echo "Commit message must start with [JIRA-XXXX] format."
        exit 1
      fi
      

Scripts for Testing and Validation

The following script patterns provide insight into automated testing practices.

  1. Integration Testing: Integration tests can be set up with commands defined in your package.json file.

    In package.json:

    {
      "scripts": {
        "test": "jest",
        "lint": "eslint ."
      }
    }
    
  2. Shell Script for Environment Setup: You might also find shell scripts that set the environment for the CI/CD process.

    Example: setup-environment.sh

    #!/bin/bash
    
    echo "Setting up environment..."
    npm install
    # Additional setup commands
    

Workflow Steps

Here’s a typical workflow showcasing how CI/CD automation operates.

  1. Developer Commit: A developer gets started with coding and commits the changes.

  2. Pre-commit Hooks:

    • The pre-commit hook runs checking for code quality and tests.
    • If the checks fail, the commit is rejected with appropriate error messages.
  3. Integration Tests:

    • After a merge to the main branch, CI services run integration scripts via CI/CD tools such as GitHub Actions or Travis CI.
    • These tools execute defined scripts that may look like, for example:
    name: CI
    
    on:
      push:
        branches:
          - main
    
    jobs:
      build:
        runs-on: ubuntu-latest
    
        steps:
        - name: Checkout code
          uses: actions/checkout@v2
        
        - name: Setup Node.js
          uses: actions/setup-node@v2
          with:
            node-version: '14'
        
        - name: Install dependencies
          run: npm install
        
        - name: Run tests
          run: npm test
    

Next Steps

If CI/CD automation is not set up in the project, there are several recommended next steps:

  1. Define CI/CD Requirements: Establish the criteria for continuous integration and deployment that align with the project’s needs.

  2. Choose CI/CD Tool: Decide on a CI/CD tool, such as GitHub Actions, Travis CI, or CircleCI, based on team familiarity and project requirements.

  3. Set Up Initial Scripts: Create the basic scripts to handle pre-commit checks, builds, and testing.

  4. Create Documentation: Document the CI/CD pipeline for future contributors and to ensure adherence to established practices.

  5. Iterate and Improve: Regularly review CI/CD processes for improvements and to incorporate new best practices.

In conclusion, the CI/CD process is vital to maintain code quality and streamline deployments. By employing scripts effectively, the Cilium project can enhance its development efficiency.

Source: Cilium Directory Listing