Skip to content
Snippets Groups Projects
Commit 85b8b75b authored by Helen Koike's avatar Helen Koike
Browse files

kci-gitlab: Introducing GitLab-CI Pipeline for Kernel Testing


This patch introduces a `.gitlab-ci` file along with a `ci/` folder,
defininga basic test pipeline triggered by code pushes to a GitLab-CI
instance. This initial version includes static checks (checkpatch and
smatch for now) and build tests across various architectures and
configurations. It leverages an integrated cache for efficient build
times and introduces a flexible 'scenarios' mechanism for
subsystem-specific extensions.

[ci: add prerequisites to run check-patch on MRs]
Co-developed-by: default avatarTales Aparecida <tales.aparecida@redhat.com>
Signed-off-by: default avatarTales Aparecida <tales.aparecida@redhat.com>
Signed-off-by: default avatarHelen Koike <helen.koike@collabora.com>

---
KCI_PATCH_SERIES_SIZE=1
parent ea489a3d
No related branches found
No related tags found
No related merge requests found
Pipeline #86840 canceled
Showing
with 860 additions and 0 deletions
include:
- ci/gitlab-ci/yml/gitlab-ci.yml
.. SPDX-License-Identifier: GPL-2.0+
=========================================
Automated Testing with GitLab CI/CD
=========================================
This documentation outlines the GitLab CI/CD workflow for the Linux Kernel. The
workflow is designed to simplify testing for developers, allowing tests to be
run on any branch at any time, without the need for specific infrastructure.
Tests are automatically triggered on each `git push`, with results displayed in
the GitLab UI.
.. image:: images/the-pipeline.png
:alt: GitLab-CI pipeline for kernel testing
:align: center
Customizations and extensions of the pipeline are possible through the
scenarios. Scenarios can override existing jobs, change configurations, or
define new jobs and stages. See :ref:`extending-the-ci` section.
.. note:: If you are unfamiliar with GitLab CI/CD basic concepts, please check
the `official documentation <https://docs.gitlab.com/ee/ci/>`_.
.. only:: subproject and html
Indices
=======
* :ref:`genindex`
Setup
-----
The GitLab CI pipeline is configured for **"out-of-the-box"** use. Pushing code to a
GitLab repository automatically triggers the pipeline.
.. code-block:: bash
# Download the Linux kernel source code
git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
# Create a repository on GitLab and add it as a remote
git remote add gitlab https://gitlab.yourinstance.com/your-username/your-repo.git
# Push the code to GitLab
git push gitlab
.. image:: images/pipelines-on-push.png
:alt: Pipeline triggered on push
:align: center
Troubleshooting
---------------
If the pipeline doesn't trigger automatically, check the following:
1. **Enable CI/CD in Project Settings:**
- Go to `Settings > General > Visibility, project features, permissions`.
- Under `Repository`, ensure the `CI/CD` toggle is enabled.
2. **Enable Container Registry:**
- Still in `Settings`, find the `Container Registry` section.
- Enable the `Container Registry` toggle.
3. **CI Minutes and Resources:**
- If you've exhausted CI minutes or other resources on the Free Tier,
consider setting up a local GitLab runner (see below).
Setting Up a Local GitLab Runner
--------------------------------
You can use your own machine as a runner, instead of the shared runners provided
by your GitLab instance.
1. **Generate a GitLab Runner Token:**
- Navigate to `Settings > CI/CD > Runners`.
- Expand the `Runners` section and click on "New project runner".
- Choose "Run untagged jobs" and click "Create runner".
- Copy the provided token.
.. image:: images/new-project-runner.png
:alt: New project runner button
:align: center
2. **Launch the Runner:**
- Ensure Docker is installed and your user is added to the Docker group:
.. code-block:: bash
sudo usermod -aG docker <your-user>
- Log in again to apply the changes.
- Set up the runner:
.. code-block:: bash
export GITLAB_RUNNER_TOKEN=<your_token>
export GITLAB_URL=https://gitlab.yourinstance.com # Use this for instances other than gitlab.com
cd ci/gitlab-ci
./bootstrap-gitlab-runner.sh
Current Pipeline Jobs
---------------------
stage: container
^^^^^^^^^^^^^^^^
**job: debian/x86_64_build**
This job prepares the container used by subsequent jobs. It starts from a base
Debian image, installing necessary tools for building the kernel and running
tests. The resulting image is pushed to the project registry and cached. If the
image already exists in the registry, it won't be rebuilt.
To force a rebuild, update the `FDO_DISTRIBUTION_TAG` variable in the
`container.yml` file.
stage: static-checks
^^^^^^^^^^^^^^^^^^^^
**job: checkpatch**
Runs the `checkpatch.pl` script on the last `$ICI_PATCH_SERIES_SIZE` commits.
This variable is determined by:
- `ICI_PATCH_SERIES_SIZE=` The number of differing patches between target and
source branches for merge requests; Or
- `ICI_PATCH_SERIES_SIZE=$KCI_PATCH_SERIES_SIZE` if `KCI_PATCH_SERIES_SIZE` is
set (see :ref:`how-to-set-variables` below).
Defaults to 1 and raises a GitLab warning if unable to identify the number of
commits.
**job: smatch**
Checks `.c` files in the last `$ICI_PATCH_SERIES_SIZE` commits. Spawns a
"sub-job" for each architecture and configuration in `kernel-combinations.yml`.
If a smatch database exists (see `job: smatch-db-generate` below), it reuses it.
stage: build
^^^^^^^^^^^^
**job: build-kernel**
Compiles the kernel. Spawns a "sub-job" for each architecture and configuration
in `kernel-combinations.yml`. Uses `ccache` to speed up builds, with its
database shared inside the runner or across runners if configured with S3.
Raises a GitLab warning if "warning" is found in the build log.
.. image:: images/job-matrix.png
:alt: Matrix of jobs under build-kernel
:align: center
**job: build-docs**
Builds documentation. Spawns a "sub-job" for each documentation type. Not run
automatically; requires manual triggering.
stage: cache
^^^^^^^^^^^^
**job: smatch-db-generate**
Generates a smatch database for use by the `smatch` job. Not run automatically;
requires manual triggering.
.. _extending-the-ci:
Extending the CI - Test Scenarios (KCI_SCENARIO)
------------------------------------------------
The pipeline offers flexibility and adaptability through the use of scenarios,
enhancing the CI/CD process with broad customization options. Key capabilities
include:
- **Overriding Existing Jobs:** Tailor existing jobs to meet specific needs or
conditions.
- **Changing Configurations:** Dynamically adapt job settings to suit various
environments or subsystem requirements.
- **Defining New Jobs and Stages:** Introduce new jobs and stages for additional
tests, build processes, or deployment strategies.
These features are particularly useful when a subsystem has distinct
requirements. For instance, to enable testing different configurations for a
specific architecture, running static checks with varied arguments, or
installing specialized tools to conduct targeted tests.
Writing a test scenario
^^^^^^^^^^^^^^^^^^^^^^^
The GitLab CI pipeline configuration allows for the inclusion of additional
`.yml` files based on the `KCI_SCENARIO` variable. For example, setting
`KCI_SCENARIO` to `media` includes `media.yml` from the `scenarios/` folder.
To illustrate, building a specific architecture with a custom config can be
achieved by overriding the `.kernel-combinations` hidden job in the
`scenarios/my-scenario.yml` file:
.. code-block:: yaml
.kernel-combinations:
parallel:
matrix:
- KCI_KERNEL_ARCH: "arm64"
KCI_DEFCONFIG: "my/custom/config1"
KCI_KCONFIGS_ENABLE: "CONFIG1 CONFIG2 CONFIG3"
- KCI_KERNEL_ARCH: "arm64"
KCI_DEFCONFIG: "my/custom/config2"
KCI_KCONFIGS_ENABLE: "CONFIG4 CONFIG5"
This modifies builds and static checks for `arm64` with different
configurations.
To select this scenario, trigger the pipeline with KCI_SCENARIO=my-scenario. See
:ref:`how-to-set-variables` below.
Variables
---------
GitLab CI/CD supports various variables to modify pipeline behavior or for use
in jobs.
- **CI_ Prefix:** Standard GitLab CI/CD variables (see GitLab documentation).
- **KCI_ Prefix:** Custom variables defined for kernel CI.
- **ICI_ Prefix:** Internal variables used between scripts (not for external
use).
.. _how-to-set-variables:
How to Set Variables
--------------------
Variables can be set in several ways:
- **Project Settings:** Under `CI/CD > Variables`.
- **Pipeline UI:** When triggering a pipeline manually.
- **Command Line:** When triggering a pipeline manually (see
:ref:`triggering-pipelines-from-command-line` below).
- **YML Files:** Using the `variables` keyword.
- **Commit Message:** For runtime variables only (see
:ref:`setting-variables-in-the-commit-message` below).
.. image:: images/variables.png
:alt: Manual creation of pipeline
:align: center
Variables Precedence
--------------------
- **Commit Message Variables:** Highest precedence if evaluated at runtime.
- **Pipeline Variables:** Next in precedence.
- **Project Variables:** Follow pipeline variables.
- **YML File Variables:** Considered after the above levels.
.. _setting-variables-in-the-commit-message:
Setting Variables in the Commit Message
---------------------------------------
Runtime variables can be set in the commit message. Patterns like
`KCI_VARIABLE=value` are extracted and exported to the job. To avoid including
variables in the git history, add them after three dashes (`---`) in the commit
message, as `git am` ignores text after this line.
Example:
.. code-block::
Title of my awesome commit
This is the commit message description of my awesome patch
---
KCI_PATCH_SERIES_SIZE=4
Description of Each Variable
----------------------------
**KCI_KERNEL_ARCH**
Defines the architecture to be used in the build-kernel and static checks
jobs. Usually set in the `.kernel-combinations` hidden job.
**KCI_DEFCONFIG**
Defines the config file to be used in the build-kernel and static checks
jobs. Usually set in the `.kernel-combinations` hidden job.
**KCI_KCONFIGS_{ENABLE,DISABLE,MODULE}**
Defines the extra configs to be enabled, disabled or set as a module, used
in the build-kernel and static checks jobs. Usually set in the
`.kernel-combinations` hidden job.
**KCI_SCENARIO**
Used to select which extra scenario file to include in the pipeline. See
:ref:`extending-the-ci` section above. Usually set by the user at project or
pipeline level.
**KCI_CHECKPATCH_TYPES**
Used in `checkpatch.pl --types "$KCI_CHECKPATCH_TYPES"` (see checkpatch
documentation). Its default value is defined in static-checks.yml file, and
can be overwritten, even in the commit message, since it is evaluated in run
time.
**KCI_PATCH_SERIES_SIZE**
Used to define the size of the patch series, see `job: checkpatch` section
above. It is evaluated in run time, and can be set in the commit message.
.. _triggering-pipelines-from-command-line:
Triggering Pipelines from Command Line
--------------------------------------
Pipelines can be triggered from the command line with custom variables using the
`GitLab CLI tool <https://docs.gitlab.com/ee/editor_extensions/gitlab_cli>`_.
Example:
.. code-block:: bash
glab auth login
glab ci run -b gitlab-draft -R https://gitlab.collabora.com/koike/linux/ --variables-env KCI_PATCH_SERIES_SIZE:4
Debugging and Replicating Jobs Locally
--------------------------------------
When a job fails in GitLab CI/CD, it's handy to replicate the issue in the
same environment used by the GitLab CI/CD runner. This allows for interactive
execution of each step and the use of debugging tools to pinpoint the failure's
root cause.
Rather than repeatedly modifying scripts and running the entire pipeline for
debugging, you can download the specific Docker image used by the job and run it
locally.
To do this, first inspect the failed job in GitLab CI/CD. Look for a message
indicating the Docker image used, typically in this format:
Pulling docker image registry.gitlab.collabora.com/koike/linux/debian/bookworm-slim:2024-02-6-ci-test-1
You can then use this image to run the job locally. For example:
.. code-block:: bash
IMAGE=registry.gitlab.collabora.com/koike/linux/debian/bookworm-slim:2024-02-6-ci-test-1
docker pull $IMAGE
docker run --rm -v `pwd`:/linux -w /linux $IMAGE bash
Suggestions
-----------
Send Pipeline Links with Your Patch
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
When submitting patches or merge requests, it's highly beneficial to include
links to the related GitLab CI pipelines. This practice enhances the review
process in several ways:
1. **Immediate Visibility:** Reviewers can immediately see the results of
automated tests, making it easier to assess the patch's impact.
2. **Increased Confidence:** Successful pipeline runs increase confidence in the
changes, demonstrating that they pass existing tests.
3. **Efficient Troubleshooting:** If there are issues, pipeline links allow both
authors and reviewers to quickly access logs and test results, facilitating
faster troubleshooting and iteration.
4. **Transparency:** Providing pipeline links promotes transparency in the
development process, making it clear how changes have been verified.
To include a pipeline link in your patch or merge request, simply copy the URL
of the pipeline from your GitLab project's CI/CD pipeline page and paste it into
your commit description after three dashes (`---`) or as a reply to your email
patch.
Always Green Pipeline
^^^^^^^^^^^^^^^^^^^^^
Maintaining an "always green" pipeline refers to the practice of ensuring that
the main branch's pipeline is always in a passing state. This approach has
several advantages:
1. **Reliable Main Branch:** A green pipeline indicates a stable and reliable
main branch, which is crucial for continuous integration practices.
2. **Immediate Feedback:** Developers receive immediate feedback on their
changes. If a merge causes the pipeline to fail, it's a clear signal that the
change introduced an issue.
3. **Faster Iteration:** An always green pipeline facilitates faster development
and iteration, as developers can confidently build on top of the latest main
branch without worrying about hidden failures.
4. **Culture of Responsibility:** It fosters a culture of responsibility, where
developers are encouraged to fix broken builds promptly and avoid merging
changes that could disrupt the pipeline.
\ No newline at end of file
Documentation/ci/gitlab-ci/images/job-matrix.png

156 KiB

Documentation/ci/gitlab-ci/images/new-project-runner.png

593 KiB

Documentation/ci/gitlab-ci/images/pipelines-on-push.png

520 KiB

Documentation/ci/gitlab-ci/images/the-pipeline.png

89.5 KiB

Documentation/ci/gitlab-ci/images/variables.png

271 KiB

......@@ -4965,6 +4965,14 @@ T: git git://linuxtv.org/media_tree.git
F: Documentation/devicetree/bindings/media/i2c/chrontel,ch7322.yaml
F: drivers/media/cec/i2c/ch7322.c
 
CI AUTOMATED TESTING
M: Helen Koike <helen.koike@collabora.com>
L: linux-kernel@vger.kernel.org
S: Maintained
T: git https://gitlab.collabora.com/koike/linux.git
F: .gitlab-ci.yml
F: ci/
CIRRUS LOGIC AUDIO CODEC DRIVERS
M: James Schulman <james.schulman@cirrus.com>
M: David Rhodes <david.rhodes@cirrus.com>
......
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0-or-later
#
# Copyright (C) 2024 Collabora, Helen Koike <helen.koike@collabora.com>
set -eo pipefail
# Define variables
CONFIG_VOLUME="/srv/gitlab-runner/config" # Path to your GitLab Runner config
# Check if RUNNER_REGISTRATION_TOKEN is set
if [ -z "${RUNNER_REGISTRATION_TOKEN}" ]; then
echo "Error: RUNNER_REGISTRATION_TOKEN is not set."
echo "Please set the RUNNER_REGISTRATION_TOKEN environment variable and try again."
exit 1
fi
# Check if GITLAB_URL is set
if [ -z "${GITLAB_URL}" ]; then
GITLAB_URL="https://gitlab.com/"
echo "Info: GITLAB_URL is not set. Using the default $GITLAB_URL"
echo "Please set the RUNNER_REGISTRATION_TOKEN environment variable and try again."
fi
# Check if docker-compose is installed
if ! command -v docker-compose &> /dev/null
then
echo "docker-compose could not be found. Please install it first."
exit 1
fi
# Start the GitLab Runner using Docker Compose
echo "Starting GitLab Runner..."
docker-compose up -d
# Wait for a few seconds to ensure the service is up
sleep 5
# Register the GitLab Runner
echo "Registering GitLab Runner..."
docker run --rm -v ${CONFIG_VOLUME}:/etc/gitlab-runner gitlab/gitlab-runner register \
--non-interactive \
--url ${GITLAB_URL} \
--token ${RUNNER_REGISTRATION_TOKEN} \
--executor docker \
--docker-image "alpine:latest" \
--description "Docker Runner" \
--docker-privileged
echo ""
echo "INFO: To configure the number of concurrent jobs, edit the value of concurrent in ${CONFIG_VOLUME}/config.toml"
echo "INFO: than restart the GitLab Runner using docker-compose restart"
echo ""
echo "GitLab Runner setup complete."
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0-or-later
#
# Copyright (C) 2024 Collabora, Helen Koike <helen.koike@collabora.com>
set -exo pipefail
source ci/gitlab-ci/ci-scripts/ici-functions.sh
ici_get_patch_series_size
# Get the list of modified files in the last $ICI_PATCH_SERIES_SIZE commits
MODIFIED_DOC_FILES=$(git diff HEAD~$ICI_PATCH_SERIES_SIZE --name-only -- Documentation/)
make -j$(nproc) "$ICI_DOC_TYPE" 2>&1 | tee output.txt
mkdir -p "${CI_PROJECT_DIR}/artifacts"
mv Documentation/output "${CI_PROJECT_DIR}/artifacts/Documentation-output"
# Check if any of the MODIFIED_DOC_FILES generated a warning
# NOTE: the alternative solution was to touch the modified files and run make
# again, but too much warnings still appears
for file in $MODIFIED_DOC_FILES; do
if grep -qi "warning" output.txt && grep -q "$file" output.txt; then
echo "Warning found in $file"
exit 101
fi
done
if [ -n "$ICI_UNABLE_TO_DETECT_PATCH_SERIES_SIZE" ]; then
# If the patch series size was not detected, exit with a warning
echo "The patch series size was not detected, we probably didn't check the whole series. Exiting with a warning."
exit 101
fi
\ No newline at end of file
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0-or-later
#
# Copyright (C) 2024 Collabora, Helen Koike <helen.koike@collabora.com>
set -exo pipefail
source ci/gitlab-ci/ci-scripts/ici-functions.sh
ici_prepare_build
pushd build
# compile the entire kernel
make CF=-D__CHECK_ENDIAN__ -C "$ICI_KERNEL_DIR" O=$(pwd) -j$(nproc) 2>&1 | tee output.txt
export INSTALL_PATH="${CI_PROJECT_DIR}/artifacts/kernel-install-${KCI_KERNEL_ARCH}-${KCI_DEFCONFIG}_config"
mkdir -p "$INSTALL_PATH"
# install the kernel image to artifacts/kernel-install
make -C "$ICI_KERNEL_DIR" O=$(pwd) install INSTALL_PATH="$INSTALL_PATH"
# install kernel modules to artifacts/kernel-install
make -C "$ICI_KERNEL_DIR" O=$(pwd) modules_install INSTALL_MOD_PATH="$INSTALL_PATH"
# export config as artifact
cp .config "${CI_PROJECT_DIR}/artifacts/${KCI_KERNEL_ARCH}-${KCI_DEFCONFIG}_config"
# if the compilation has warnings, exit with the warning code
if grep -iq "warning" output.txt; then
exit 101
fi
popd
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0-or-later
#
# Copyright (C) 2024 Collabora, Helen Koike <helen.koike@collabora.com>
set -exo pipefail
# internal CI bash functions
# convention:
# KCI_<VARIABLE_NAME> for variables defined by the user (outside of this script)
# ICI_<VARIABLE_NAME> for variables defined internally for usage between scripts
# CI_<VARIABLE_NAME> for variables defined by GitLab CI
ici_prepare_build() {
BUILD_DIR="${1:-build}"
echo ""
echo "Architecture: $KCI_KERNEL_ARCH"
echo "Defconfig: $KCI_DEFCONFIG"
echo ""
# Get the current directory if KCI_KERNEL_DIR is not set
ICI_KERNEL_DIR="${KCI_KERNEL_DIR:-$(pwd)}"
cd "$ICI_KERNEL_DIR" || { echo "Kernel directory not found"; exit 1; }
# Clean up stale rebases that GitLab might not have removed when reusing a checkout dir
rm -rf .git/rebase-apply
if [[ "$KCI_KERNEL_ARCH" = "arm64" ]]; then
GCC_ARCH="aarch64-linux-gnu"
elif [[ "$KCI_KERNEL_ARCH" = "arm" ]]; then
GCC_ARCH="arm-linux-gnueabihf"
else
GCC_ARCH="x86_64-linux-gnu"
fi
# do not set ARCH and CROSS_COMPILE if KCI_KERNEL_ARCH is not set, useful for local run
if [ -n "$KCI_KERNEL_ARCH" ]; then
export ARCH=${KCI_KERNEL_ARCH}
export CROSS_COMPILE="${GCC_ARCH}-"
fi
mkdir -p "$BUILD_DIR"
pushd "$BUILD_DIR" || { echo "Failed to create $BUILD_DIR directory"; exit 1; }
# generate defconfig
make -C "$ICI_KERNEL_DIR" O=$(pwd) $(basename ${KCI_DEFCONFIG-"defconfig"})
# add extra configs from variable KCI_KCONFIGS_{ENABLE,DISABLE,MODULE}
for opt in $KCI_KCONFIGS_ENABLE; do
../scripts/config --file .config --enable CONFIG_$opt
done
for opt in $KCI_KCONFIGS_DISABLE; do
../scripts/config --file .config --disable CONFIG_$opt
done
for opt in $KCI_KCONFIGS_MODULE; do
../scripts/config --file .config --module CONFIG_$opt
done
if [ -n "$KCI_KCONFIGS_DISABLE" ] || [ -n "$KCI_KCONFIGS_ENABLE" ] ||
[ -n "$KCI_KCONFIGS_MODULE" ]; then
# execude olddefconfig only if we changed the default config, otherwise,
# let it raise warnings if any
make -C "$ICI_KERNEL_DIR" O=$(pwd) olddefconfig
fi
popd
}
ici_get_patch_series_size()
{
local CLONE_DEPTH
CLONE_DEPTH=$(git rev-list --count HEAD)
echo "The depth of the clone is $CLONE_DEPTH"
# If this is in the context of a merge request, calculate the patch series size comparing to the target branch
if [ -n "$CI_MERGE_REQUEST_IID" ]; then
git fetch origin "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" --depth $CLONE_DEPTH
ICI_PATCH_SERIES_SIZE=$(git rev-list --count origin/"$CI_MERGE_REQUEST_TARGET_BRANCH_NAME".."$CI_COMMIT_SHA")
# if KCI_PATCH_SERIES_SIZE is set, use it
elif [ -n "$KCI_PATCH_SERIES_SIZE" ]; then
ICI_PATCH_SERIES_SIZE="$KCI_PATCH_SERIES_SIZE"
else
ICI_PATCH_SERIES_SIZE=1
echo "WARNING: unable to detect the patch series size, using the default value of 1."
# shellcheck disable=SC2034
ICI_UNABLE_TO_DETECT_PATCH_SERIES_SIZE=true
fi
# Check if the clone depth is smaller than or equal to KCI_PATCH_SERIES_SIZE, otherwise the checkpatch.pl hangs
if [ "$ICI_PATCH_SERIES_SIZE" -ge "$CLONE_DEPTH" ]; then
echo "ERROR: the depth of the clone is $CLONE_DEPTH, smaller than or equal to the patch series size."
echo "Update your GitLab configuration to increase the size of the clone."
return 1
fi
}
\ No newline at end of file
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0-or-later
#
# Copyright (C) 2024 Collabora, Helen Koike <helen.koike@collabora.com>
set -exo pipefail
pushd /
git clone --depth 1 https://repo.or.cz/smatch.git
pushd smatch
make
popd
popd
\ No newline at end of file
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0-or-later
#
# Copyright (C) 2024 Collabora, Helen Koike <helen.koike@collabora.com>
set -exo pipefail
# Get the last commit message
commit_message=$(git log -1 --pretty=%B)
# Define a regex pattern to match KCI_VARIABLE=value
pattern="(KCI_[A-Za-z_]+)=([A-Za-z0-9_-]+)"
# Check if the commit message contains the pattern
if [[ $commit_message =~ $pattern ]]; then
variable_name="${BASH_REMATCH[1]}"
variable_value="${BASH_REMATCH[2]}"
# Export the variable
export "$variable_name=$variable_value"
echo "Exported $variable_name=$variable_value"
else
echo "No matching pattern found in the commit message."
fi
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0-or-later
#
# Copyright (C) 2024 Collabora, Helen Koike <helen.koike@collabora.com>
set -exo pipefail
source ci/gitlab-ci/ci-scripts/ici-functions.sh
ici_get_patch_series_size
# Run scripts/checkpatch.pl with specified options
scripts/checkpatch.pl --terse --types "$KCI_CHECKPATCH_TYPES" --git HEAD-"$ICI_PATCH_SERIES_SIZE"
if [ -n "$ICI_UNABLE_TO_DETECT_PATCH_SERIES_SIZE" ]; then
# If the patch series size was not detected, exit with a warning
echo "The patch series size was not detected, we probably didn't check the whole series. Exiting with a warning."
exit 101
fi
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0-or-later
#
# Copyright (C) 2024 Collabora, Helen Koike <helen.koike@collabora.com>
set -exo pipefail
source ci/gitlab-ci/ci-scripts/ici-functions.sh
ls -l
pwd
# generate config file
ici_prepare_build
ici_get_patch_series_size
cp build/.config .
# Get a list of modified .c files in the last ICI_PATCH_SERIES_SIZE commits
MODIFIED_C_FILES=$(git diff --name-only HEAD~$ICI_PATCH_SERIES_SIZE HEAD | grep '\.c$' || true)
# Check if any .c files were modified
if [ -z "$MODIFIED_C_FILES" ]; then
echo "No .c files were modified in the last $ICI_PATCH_SERIES_SIZE commits."
else
echo "Running kchecker on modified .c files..."
mkdir -p "$CI_PROJECT_DIR"/artifacts
fi
# Run kchecker on each modified .c file
for file in $MODIFIED_C_FILES; do
if [ -f "$file" ]; then
/smatch/smatch_scripts/kchecker "$file" | tee "$CI_PROJECT_DIR"/artifacts/smatch_warns.txt
else
echo "File not found: $file"
fi
done
if [ -n "$ICI_UNABLE_TO_DETECT_PATCH_SERIES_SIZE" ]; then
# If the patch series size was not detected, exit with a warning
echo "The patch series size was not detected, we probably didn't check the whole series. Exiting with a warning."
exit 101
fi
\ No newline at end of file
# SPDX-License-Identifier: GPL-2.0-or-later
#
# Copyright (C) 2024 Collabora, Helen Koike <helen.koike@collabora.com>
version: '3.8'
services:
gitlab-runner:
image: gitlab/gitlab-runner:latest
container_name: gitlab-runner
restart: always
privileged: true
volumes:
- /srv/gitlab-runner/config:/etc/gitlab-runner
- /var/run/docker.sock:/var/run/docker.sock
# To register the GitLab Runner, run the following command:
# docker run --rm -it -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register --url https://gitlab.com --token YOUR_REGISTRATION_TOKEN
# SPDX-License-Identifier: GPL-2.0-or-later
#
# Copyright (C) 2024 Collabora, Helen Koike <helen.koike@collabora.com>
.build:
extends: .use-debian/x86_64_build
stage: build
build-kernel:
extends:
- .build
- .kernel-combinations
variables:
# ccache in gitlab-runner to speed up builds
CCACHE_BASEDIR: $CI_PROJECT_DIR
CCACHE_DIR: $CI_PROJECT_DIR/ccache
CCACHE_COMPILERCHECK: content
cache:
- key: ccache-$CI_JOB_NAME
paths:
- $CCACHE_DIR
before_script:
- export PATH="/usr/lib/ccache:$PATH"
- ccache --zero-stats || true
- ccache --show-stats || true
after_script:
- ccache --show-stats
script:
- ./ci/gitlab-ci/ci-scripts/build-kernel.sh
build-docs:
extends:
- .build
parallel:
matrix:
- ICI_DOC_TYPE: "htmldocs"
# TODO: re-add pdfdocs once build errors are fixed
# - ICI_DOC_TYPE: "pdfdocs"
- ICI_DOC_TYPE: "latexdocs"
- ICI_DOC_TYPE: "epubdocs"
script:
- ./ci/gitlab-ci/ci-scripts/build-docs.sh
when: manual
\ No newline at end of file
# SPDX-License-Identifier: GPL-2.0-or-later
#
# Copyright (C) 2024 Collabora, Helen Koike <helen.koike@collabora.com>
# Smatch db is saved to a cached folder, so it can be used by other jobs and pipelines.
# It is set to manual so it can be run when needed
.use-cache-smatch-db:
cache:
# TODO: check if this cache shouldn't be per architecture
- key: smatch-db
paths:
- /smatch/smatch_data
smatch-db-generate:
stage: cache
extends:
- .kernel-combinations
- .use-debian/x86_64_build
- .use-cache-smatch-db
script:
- source ci/gitlab-ci/ci-scripts/ici-functions.sh
- ici_prepare_build
- cp build/.config .
- /smatch/smatch_scripts/build_kernel_data.sh
when: manual
\ No newline at end of file
# SPDX-License-Identifier: GPL-2.0-or-later
#
# Copyright (C) 2024 Collabora, Helen Koike <helen.koike@collabora.com>
.prep-debian/x86_64_build:
variables:
FDO_DISTRIBUTION_VERSION: bookworm-slim
FDO_DISTRIBUTION_TAG: "2024-02-20-ci-test-1"
debian/x86_64_build:
extends:
- ".fdo.container-build@debian"
- ".prep-debian/x86_64_build"
variables:
FDO_DISTRIBUTION_PACKAGES: >
make bc flex bison pahole mount build-essential
libcairo-dev libdw-dev libjson-c-dev libkmod2
libkmod-dev libpciaccess-dev libproc2-dev libudev-dev
libunwind-dev python3-docutils bc python3-ply
libssl-dev ccache
gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu
gcc-arm-linux-gnueabihf binutils-arm-linux-gnueabihf
perl git kmod
sqlite3 libsqlite3-dev libdbd-sqlite3-perl libssl-dev libtry-tiny-perl
python3-sphinx imagemagick graphviz dvipng python3-venv fonts-noto-cjk
latexmk librsvg2-bin texlive-lang-chinese texlive-xetex
FDO_DISTRIBUTION_EXEC: ./ci/gitlab-ci/ci-scripts/install-smatch.sh
stage: container
.use-debian/x86_64_build:
extends:
- ".fdo.distribution-image@debian"
- ".prep-debian/x86_64_build"
needs: [debian/x86_64_build]
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment