ci: pin the database image and install locked shared test dependencies (#275)

* ci: pin fixtures and install locked shared test dependencies

Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>

* docs(changelog): list CI hardening as a dev entry

Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>

* ci: check out the Cacti branch head instead of a pinned commit

Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>

---------

Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>
This commit is contained in:
Thomas Vincent authored and GitHub committed 2026-10-19 09:49:34 -04:00
1 parent 4aee3f5c80
commit e3fc44473d
3 files changed
+34 -24

No files matched your search

+2
View File
@@ -48,6 +48,8 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Initialize CodeQL
uses: github/codeql-action/init@24c54180a607b1449ed407dd24f251e4e9147c8d # v4.38.3
with:
+31 -24
View File
@@ -31,11 +31,19 @@ on:
- main
- develop
permissions:
contents: read
env:
CACTI: 1.2.x
concurrency:
group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
jobs:
integration-test:
timeout-minutes: 45
runs-on: ${{ matrix.os }}
strategy:
@@ -46,7 +54,7 @@ jobs:
services:
mariadb:
image: mariadb:11.8
image: mariadb:11.8@sha256:6422478cb8e159f080fb1d8ccf65101e26fe51385787fde7d16c3b165a331f15
env:
MYSQL_ROOT_PASSWORD: cactiroot
MYSQL_DATABASE: cacti
@@ -66,6 +74,7 @@ jobs:
- name: Checkout Cacti
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
repository: Cacti/cacti
ref: ${{ env.CACTI }}
path: cacti
@@ -73,6 +82,7 @@ jobs:
- name: Checkout Monitor Plugin
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
path: cacti/plugins/monitor
# patch-coverage.php diffs against the base branch below.
fetch-depth: 0
@@ -82,6 +92,7 @@ jobs:
- name: Checkout Thold Plugin
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
repository: Cacti/plugin_thold
ref: develop
path: cacti/plugins/thold
@@ -90,6 +101,7 @@ jobs:
uses: shivammathur/setup-php@eb7c497e18156a6bbabfef1d3a82760b9eda3962 # 2.40.0
with:
php-version: ${{ matrix.php }}
tools: composer:2.10.3
extensions: intl, mysql, gd, ldap, gmp, xml, curl, json, mbstring, snmp
coverage: xdebug
ini-values: "post_max_size=256M, max_execution_time=60, date.timezone=America/New_York"
@@ -139,29 +151,24 @@ jobs:
mysql "$MYSQL_AUTH_USR" cacti < ${{ github.workspace }}/cacti/cacti.sql
mysql "$MYSQL_AUTH_USR" -e "INSERT INTO settings (name, value) VALUES ('path_php_binary', '/usr/bin/php')" cacti
- name: Validate composer files
run: |
cd ${{ github.workspace }}/cacti
if [ -f composer.json ]; then
composer validate --strict || true
fi
# Core's release archives exclude .github and tests. Fetch these paths
# through Git at the immutable helper revision instead of an Action archive.
- name: Checkout shared CI tooling
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
repository: Cacti/cacti
ref: f3ff777992875740e4665fedfe2eff8335f5b894
persist-credentials: false
path: ci-tools
sparse-checkout: |
.github/actions/setup-plugin-dependencies
tests/tools/plugin-harness
- name: Install Composer Dependencies
run: |
cd ${{ github.workspace }}/cacti
if [ -f composer.json ]; then
sudo composer config --no-plugins allow-plugins.pestphp/pest-plugin true
sudo composer require --no-progress --no-interaction "pestphp/pest: ^3" "pestphp/pest-plugin-drift: ^3.0"
sudo rm -f composer.lock
sudo composer install --dev --no-progress
fi
- name: Restore vendor ownership for Pest
run: |
cd ${{ github.workspace }}/cacti
if [ -d include/vendor ]; then
sudo chown -R runner:runner include/vendor composer.lock
fi
- name: Install locked Cacti and plugin test dependencies
uses: ./ci-tools/.github/actions/setup-plugin-dependencies
with:
cacti-directory: cacti
install-core-dev: 'false'
- name: Create Cacti config.php
run: |
@@ -207,7 +214,7 @@ jobs:
- name: Run Pest Unit Tests
run: |
cd ${{ github.workspace }}/cacti
include/vendor/bin/pest --configuration=plugins/monitor/phpunit.xml \
"$CACTI_PEST_BIN" --configuration=plugins/monitor/phpunit.xml \
--coverage-clover=plugins/monitor/coverage/clover.xml
# Whole-file coverage is meaningless here: most of the plugin only runs
+1
View File
@@ -36,6 +36,7 @@
* dev: Extract the status legend into a testable monitor_legend() helper in includes/functions.php and add unit coverage asserting the longest-label chip minimum
* dev: Rename includes/db_functions.php to includes/functions.php and move bundled libraries under includes/
* dev: Set the Cacti compatibility floor to 1.2.29
* dev: Pin the CI database image and shared test dependencies, disable persisted checkout credentials, and limit workflow permissions and runtime
--- 2.9 ---