CI/CD Automation Scripts

This project does not yet have a fully established CI/CD pipeline, but there are several scripts and configurations available that facilitate the automation process. The existing scripts can be leveraged to develop a CI/CD pipeline. Below are detailed steps and examples on how to automate the continuous integration and delivery process with the existing components.

Docker Configuration

The project includes a Dockerfile that is essential for creating a stable environment for building and testing the application.

Dockerfile:

FROM node:22

WORKDIR /app
RUN mkdir -p /output
RUN chmod -R 777 /output

RUN apt-get update --fix-missing \
    && apt-get install -y \
        ca-certificates \
        fonts-liberation \
        gconf-service \
        libappindicator1 \
        libasound2 \
        libatk1.0-0 \
        libc6 \
        libcairo2 \
        libcups2 \
        libdbus-1-3 \
        libexpat1 \
        libfontconfig1 \
        libgcc1 \
        libgconf-2-4 \
        libgdk-pixbuf2.0-0 \
        libglib2.0-0 \
        libgtk-3-0 \
        libnspr4 \
        libnss3 \
        libpango-1.0-0 \
        libpangocairo-1.0-0 \
        libstdc++6 \
        libx11-6 \
        libx11-xcb1 \
        libxcb1 \
        libxcomposite1 \
        libxcursor1 \
        libxdamage1 \
        libxext6 \
        libxfixes3 \
        libxi6 \
        libxrandr2 \
        libxrender1 \
        libxss1 \
        libxtst6 \
        lsb-release \
        wget \
        zip \
        xdg-utils \
    && rm -rf /var/lib/apt/lists/*

ADD package.json /app/package.json
ADD package-lock.json /app/package-lock.json
RUN npm install --quiet

ADD . /app

This Dockerfile installs all necessary dependencies for running the application in a consistent environment.

Testing Automation

Automated testing can be executed using the run_tests.sh script located in the bin directory. This script builds the Docker container and runs the tests defined in the project.

Script to run tests:

#!/usr/bin/env bash

set -euo pipefail

docker compose build
docker run \
    --rm -ti \
    -v $(pwd):/app:delegated \
    -v /app/node_modules \
    sce_webpack:latest \
    /bin/bash -c "npx webpack --config webpack.dev.js && npm test"

To execute the script, run:

$ ./bin/run_tests.sh

This command will build the application and execute the unit tests defined in the repository.

Continuous Integration Configuration

The project includes workflow configuration files located in .github/workflows/, which can be utilized for setting up CI/CD.

Example CI Workflow: .github/workflows/build.yaml

name: Build

on:
  push:
    branches:
      - master

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Set up Node.js
        uses: actions/setup-node@v2
        with:
          node-version: '22'

      - name: Install dependencies
        run: npm install

      - name: Run tests
        run: npm test

This configuration specifies that on every push to the master branch, the workflow will execute to build the application and run the tests.

Next Steps for CI/CD Implementation

To formally implement a CI/CD pipeline, consider the following next steps:

  1. Enhance Workflow Configurations: Define additional workflows for deployment and tagging releases in the CI/CD configuration (e.g., deploy upon successful tests, auto-update version).

  2. Integrate Release Process: Automate the create release process. For example, after successful CI execution, automatically create a Git tag and release a zip for deployment.

  3. Monitor and Adjust: Continuously test and revise the CI/CD process for efficiency and reliability. Ensure that the integration responds to changes in the build/test processes.

  4. Documentation: Provide detailed instructions on how to execute and manage the CI/CD process, including handling failures and rolling back releases if necessary.

By leveraging the existing scripts, configurations, and Docker environment setup, a robust CI/CD automation process can be crafted efficiently. Each step should be revisited and adjusted according to the evolving needs of the project.

Source: Project Directory Listing and Configuration Files