Skip to content

chore: update workflows to be idiomatic, DRY, and efficient - #78

Merged
somethingwithproof merged 4 commits into
mainfrom
chore/update-workflows-idiomatic-dry-efficient
Jul 20, 2026
Merged

chore: update workflows to be idiomatic, DRY, and efficient#78
somethingwithproof merged 4 commits into
mainfrom
chore/update-workflows-idiomatic-dry-efficient

Conversation

@somethingwithproof

@somethingwithproof somethingwithproof commented Jun 4, 2026

Copy link
Copy Markdown
Owner

This PR updates the GitHub workflows in this repo to follow the org's standards for idiomatic, DRY, and efficient CI:

  • Full 40-character commit SHA pins for all actions (with version comments) instead of tags.
  • Top-level permissions: contents: read (least privilege) + job-level overrides.
  • concurrency groups with cancel-in-progress.
  • Explicit timeout-minutes on jobs.
  • Consistent pins across the org (matching recent updates in other repos like picasso, mantl, etc.).
  • DRY: Consolidated duplicated Molecule test jobs into a matrix-based single job.

Changes made to:

  • ci.yml (major DRY improvement with matrix)
  • dependabot-auto-merge.yml
  • release.yml
  • security-tests.yml

These changes were previously applied directly; this PR proposes them for review and merge via the proper process.

Summary by CodeRabbit

  • Chores
    • Reworked CI to use a single Molecule test job with a scenario matrix across multiple Linux distributions.
    • Updated CI and release workflows to pin third-party GitHub Actions to fixed revisions for improved security and stability (including security and artifact steps).
    • Tightened permissions for automated dependency merging.
    • Standardized release workflow behavior with pinned action revisions.

…A pins, use matrix for Molecule tests to eliminate duplication (DRY), consistent org pins, timeouts, etc.
…A pins, timeouts, consistent with org standards
@coderabbitai

coderabbitai Bot commented Jun 4, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The workflows consolidate Molecule scenarios into a matrix job, pin GitHub Actions to commit SHAs, rewire integration testing, and scope Dependabot permissions to the merge job.

Changes

CI Workflows

Layer / File(s) Summary
Molecule test matrix and integration wiring
.github/workflows/ci.yml
Adds a matrix-driven molecule-test job for the default, Debian, and RHEL scenarios, updates scenario selection, and makes integration-test depend on it.
Pinned workflow actions
.github/workflows/ci.yml, .github/workflows/release.yml, .github/workflows/security-tests.yml
Pins checkout, Python setup, caching, Docker, artifact, scripting, and release actions to commit SHAs. The release checkout also uses fetch-depth: 0.
Scoped Dependabot permissions
.github/workflows/dependabot-auto-merge.yml
Changes global contents permission to read and grants the merge job explicit contents, pull-request, and checks permissions.

Estimated code review effort: 2 (Simple) | ~10 minutes

Poem

A bunny sees workflows neatly aligned,
With pinned little actions securely designed.
Molecules hop through scenarios bright,
While permissions stay scoped just right. 🐰

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title matches the workflow-focused changes, including action pinning, permissions tightening, and Molecule job consolidation.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/update-workflows-idiomatic-dry-efficient

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/ci.yml:
- Around line 55-65: The CI matrix currently lists duplicate scenario: default
and uses misleading name labels, and the checkout steps miss
persist-credentials: false; update the matrix include entries to match the
actual Molecule scenario keys (use scenario values that correspond to
molecule/default/molecule.yml which defines ubuntu-22, ubuntu-24, rocky-9 and
molecule/ubuntu/molecule.yml which defines ubuntu-22.04 and ubuntu-24.04) so
each matrix row maps to a unique scenario and adjust the matrix "name" strings
to accurately reflect the OS/scenario being run; also add persist-credentials:
false to every actions/checkout step invocation to avoid leaking GITHUB_TOKEN.

In @.github/workflows/dependabot-auto-merge.yml:
- Around line 15-16: Replace the fragile actor-based gate by checking the PR
author and same-repo origin: update the workflow's if condition (currently using
github.actor) to require github.event.pull_request.user.login ==
'dependabot[bot]' and that the PR head repo is the same repository (e.g.,
github.event.pull_request.head.repo.full_name == github.repository) so
auto-merge only runs for Dependabot-created PRs originating from the same repo.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 0173a465-3de9-495a-965a-451f069ace5a

📥 Commits

Reviewing files that changed from the base of the PR and between bf3f927 and 4a4f32a.

📒 Files selected for processing (2)
  • .github/workflows/ci.yml
  • .github/workflows/dependabot-auto-merge.yml

Comment thread .github/workflows/ci.yml
Comment on lines 15 to 16
timeout-minutes: 5
if: ${{ github.actor == 'dependabot[bot]' }}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🌐 Web query:

What do GitHub Actions docs and GitHub Security Lab recommend for securely identifying Dependabot PRs in workflow if conditions (actor vs pull_request.user.login, and same-repo checks)?

💡 Result:

To securely identify Dependabot-created pull requests in GitHub Actions workflow if conditions, authoritative sources and security best practices recommend avoiding github.actor and instead relying on the immutable author of the pull request, github.event.pull_request.user.login [1][2]. Using github.actor is considered insecure and susceptible to "confused deputy" attacks [1][2]. An attacker can trigger Dependabot-related commands (such as @dependabot recreate) on their own malicious pull request, which can cause the github.actor context to appear as dependabot[bot] even though the pull request was not authored by the bot [3]. For robust security, implement the following checks: 1. Use github.event.pull_request.user.login == 'dependabot[bot]' to verify that the pull request was genuinely created by Dependabot [1][2]. This value is immutable and cannot be spoofed by attackers [1]. 2. Add a repository check to ensure the workflow is only running on the expected repository, such as github.repository == 'owner/my_repo', to prevent unauthorized usage in forks or other contexts [4]. 3. If necessary, combine these with checks on the repository's origin (e.g., !github.event.pull_request.head.repo.fork) to ensure you are not acting on potentially compromised fork-based code [2]. For complex automation tasks, such as auto-merging, official guidance suggests using specialized tools like dependabot/fetch-metadata to securely retrieve and verify pull request metadata before taking action [2][4]. Finally, be aware that when Dependabot triggers a workflow, GitHub inherently applies security restrictions—such as providing a read-only GITHUB_TOKEN and withholding access to standard repository secrets—to prevent privilege escalation [5][6][7]. These restrictions apply even if a different user subsequently re-runs the workflow [6][8].

Citations:


Harden the Dependabot auto-merge gate beyond github.actor

github.actor is not a reliable indicator of Dependabot identity; gate on the PR creator instead and keep a same-repo origin check.

Suggested patch
-    if: ${{ github.actor == 'dependabot[bot]' }}
+    if: ${{ github.event_name == 'pull_request'
+      && github.event.pull_request.user.login == 'dependabot[bot]'
+      && github.event.pull_request.head.repo.full_name == github.repository }}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
timeout-minutes: 5
if: ${{ github.actor == 'dependabot[bot]' }}
timeout-minutes: 5
if: ${{ github.event_name == 'pull_request'
&& github.event.pull_request.user.login == 'dependabot[bot]'
&& github.event.pull_request.head.repo.full_name == github.repository }}
🧰 Tools
🪛 zizmor (1.25.2)

[error] 16-16: spoofable bot actor check (bot-conditions): actor context may be spoofable

(bot-conditions)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/dependabot-auto-merge.yml around lines 15 - 16, Replace
the fragile actor-based gate by checking the PR author and same-repo origin:
update the workflow's if condition (currently using github.actor) to require
github.event.pull_request.user.login == 'dependabot[bot]' and that the PR head
repo is the same repository (e.g., github.event.pull_request.head.repo.full_name
== github.repository) so auto-merge only runs for Dependabot-created PRs
originating from the same repo.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR aims to bring the repository’s GitHub Actions workflows in line with org CI standards by improving security (SHA-pinning, least-privilege permissions), efficiency (concurrency/timeouts), and reducing duplication (matrix-based Molecule runs).

Changes:

  • Refactors CI Molecule testing jobs into a single matrix job and updates downstream dependencies.
  • Switches several actions in ci.yml from tag-based references to full commit SHA pins.
  • Adds a job timeout to the Dependabot auto-merge workflow.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 4 comments.

File Description
.github/workflows/ci.yml Adds least-privilege permissions + SHA pins; consolidates Molecule jobs into a matrix; adjusts integration/release steps accordingly.
.github/workflows/dependabot-auto-merge.yml Adds a short job timeout and keeps Dependabot metadata/merge flow.
.github/workflows/release.yml Mentioned in PR description as part of the org-standard workflow updates, but currently still appears to use tag pins.
.github/workflows/security-tests.yml Mentioned in PR description as part of the org-standard workflow updates, but currently still appears to use tag pins.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread .github/workflows/ci.yml
Comment thread .github/workflows/ci.yml
Comment thread .github/workflows/ci.yml
Comment thread .github/workflows/dependabot-auto-merge.yml Outdated

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 6 comments.

Comments suppressed due to low confidence (2)

.github/workflows/ci.yml:99

  • This workflow pins docker/setup-buildx-action to a commit annotated as # v3, while .github/workflows/security-tests.yml pins the same action as # v4. Given the PR goal of consistent pins/versions across workflows, these should be aligned to the same major/version to avoid divergent behavior.
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@0d103c3126aa41d772a8362f6aa67afac040f80c # v3

.github/workflows/ci.yml:156

  • softprops/action-gh-release is pinned here as # v2, but .github/workflows/release.yml uses the same action pinned as # v3. Mixing major versions within the same repo increases maintenance risk (different inputs/behavior). Consider aligning to the same pinned version used in release.yml.
      - name: Create Release
        if: steps.check_tag.outputs.exists == 'false'
        uses: softprops/action-gh-release@de2c0eb89ae2a093354c5cb36e48c5e2b1c5d3e0 # v2

Comment on lines +48 to +60
states=$(gh pr checks "$pr" \
--repo "$GITHUB_REPOSITORY" \
--json state \
--jq '.[].state' 2>/dev/null || true)

# Fail closed when a repository has no CI checks.
[ -n "$states" ] || continue

blocked='^(PENDING|QUEUED|IN_PROGRESS|FAILURE|ERROR|CANCELLED|'
blocked+='STALE|ACTION_REQUIRED)$'
if grep -Eq "$blocked" <<<"$states"; then
continue
fi
Comment on lines +24 to +28
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
checks: read
Comment on lines +15 to +17
concurrency:
group: dependabot-auto-merge
cancel-in-progress: false
Comment on lines 24 to +28
- name: Checkout code
uses: actions/checkout@v6
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Set up Python
uses: actions/setup-python@v6
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
Comment on lines 22 to +28

steps:
- name: Checkout code
uses: actions/checkout@v6
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Set up Python
uses: actions/setup-python@v6
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
Comment on lines 28 to 33
- name: Checkout repository
uses: actions/checkout@v6
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v6
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
@somethingwithproof
somethingwithproof enabled auto-merge (squash) July 20, 2026 21:15
@somethingwithproof

Copy link
Copy Markdown
Owner Author

@copilot resolve the merge conflicts on this branch.

@somethingwithproof

Copy link
Copy Markdown
Owner Author

@copilot resolve the merge conflicts on this branch.

Copilot AI commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

@copilot resolve the merge conflicts on this branch.

Resolved. I merged origin/main into this branch and fixed all merge conflicts in the workflow files in commit a8ced75.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
.github/workflows/dependabot-auto-merge.yml (1)

21-23: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Harden the Dependabot auto-merge gate beyond github.actor.

github.actor is not a reliable indicator of Dependabot identity and can be spoofed in some contexts (e.g., via a confused deputy attack using @dependabot commands). Gate on the immutable PR creator instead, and keep a same-repo origin check when dealing with pull_request_target.

🛡️ Proposed fix
     if: >-
       github.event_name != 'pull_request_target' ||
-      github.actor == 'dependabot[bot]'
+      (github.event.pull_request.user.login == 'dependabot[bot]' && github.event.pull_request.head.repo.full_name == github.repository)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/dependabot-auto-merge.yml around lines 21 - 23, Update the
workflow’s auto-merge condition to identify Dependabot using the immutable pull
request creator rather than github.actor, and require the pull request head
repository to match the base repository for pull_request_target events. Preserve
the existing behavior for non-pull_request_target events and reference the
workflow’s existing pull request event context.

Source: Linters/SAST tools

🧹 Nitpick comments (2)
.github/workflows/security-tests.yml (1)

13-16: 🔒 Security & Privacy | 🔵 Trivial | ⚡ Quick win

Scope elevated permissions to the job level.

Defining pull-requests: write at the workflow level grants this permission to all jobs in the workflow. It is a security best practice to enforce the principle of least privilege by setting only contents: read at the workflow level and explicitly granting elevated permissions only to the specific jobs that require them (in this case, the job that comments on the PR).

♻️ Proposed refactor
 permissions:
   contents: read
-  pull-requests: write

Then, add the required permissions to the security-hardening-tests job:

   security-hardening-tests:
     name: Security Hardening Tests
     runs-on: [self-hosted, linux, x64]
     timeout-minutes: 45
+    permissions:
+      contents: read
+      pull-requests: write
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/security-tests.yml around lines 13 - 16, Update the
workflow-level permissions to retain only contents: read, then add
pull-requests: write under the security-hardening-tests job that comments on
pull requests. Keep elevated permissions scoped exclusively to that job.

Source: Linters/SAST tools

.github/workflows/release.yml (1)

77-87: 🔒 Security & Privacy | 🔵 Trivial | 💤 Low value

Consider using the built-in gh CLI instead of a third-party action.

As highlighted by static analysis, the GitHub runner already includes the gh CLI which can create releases natively. Using gh release create eliminates the need for an external third-party action (softprops/action-gh-release), reducing the supply chain surface area.

♻️ Proposed refactor
-      - name: Create Release
-        uses: softprops/action-gh-release@c12583777ecdfd3be55c69cf75464299dc01057e # v3
-        with:
-          tag_name: v${{ steps.version.outputs.version }}
-          name: Release v${{ steps.version.outputs.version }}
-          body: |
-            ## Release v${{ steps.version.outputs.version }}
-
-            ### Changes
-            ${{ steps.changelog.outputs.changelog }}
+      - name: Create Release
+        env:
+          GH_TOKEN: ${{ github.token }}
+        run: |
+          gh release create "v${{ steps.version.outputs.version }}" \
+            --title "Release v${{ steps.version.outputs.version }}" \
+            --notes "## Release v${{ steps.version.outputs.version }}
+          
+          ### Changes
+          ${{ steps.changelog.outputs.changelog }}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/release.yml around lines 77 - 87, Replace the
softprops/action-gh-release step with a shell step using the runner-provided gh
CLI to create the release. Preserve the existing version-derived tag and release
name, pass the changelog output as the release body, and ensure the workflow
token is available for gh authentication.

Source: Linters/SAST tools

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/security-tests.yml:
- Around line 31-33: Disable checkout credential persistence by adding
persist-credentials: false under the checkout steps for
security-hardening-tests, security-compliance-check, and
security-regression-test in .github/workflows/security-tests.yml at lines 31-33,
174-176, and 234-236 respectively.

---

Outside diff comments:
In @.github/workflows/dependabot-auto-merge.yml:
- Around line 21-23: Update the workflow’s auto-merge condition to identify
Dependabot using the immutable pull request creator rather than github.actor,
and require the pull request head repository to match the base repository for
pull_request_target events. Preserve the existing behavior for
non-pull_request_target events and reference the workflow’s existing pull
request event context.

---

Nitpick comments:
In @.github/workflows/release.yml:
- Around line 77-87: Replace the softprops/action-gh-release step with a shell
step using the runner-provided gh CLI to create the release. Preserve the
existing version-derived tag and release name, pass the changelog output as the
release body, and ensure the workflow token is available for gh authentication.

In @.github/workflows/security-tests.yml:
- Around line 13-16: Update the workflow-level permissions to retain only
contents: read, then add pull-requests: write under the security-hardening-tests
job that comments on pull requests. Keep elevated permissions scoped exclusively
to that job.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: ed6f6a36-fd41-4cf9-92eb-b156e86b5f0c

📥 Commits

Reviewing files that changed from the base of the PR and between 4a4f32a and a8ced75.

📒 Files selected for processing (4)
  • .github/workflows/ci.yml
  • .github/workflows/dependabot-auto-merge.yml
  • .github/workflows/release.yml
  • .github/workflows/security-tests.yml
🚧 Files skipped from review as they are similar to previous changes (1)
  • .github/workflows/ci.yml

Comment on lines 31 to 33
- name: Checkout repository
uses: actions/checkout@v7
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟡 Minor | ⚡ Quick win

Disable credential persistence in checkout across jobs.

By default, actions/checkout persists the GitHub token in the local .git/config. If malicious code runs during the tests, or if the workspace is packaged into an artifact, this token could be exposed. Explicitly set persist-credentials: false to prevent this across these jobs.

  • .github/workflows/security-tests.yml#L31-L33: Add with: \n persist-credentials: false to the checkout step in security-hardening-tests.
  • .github/workflows/security-tests.yml#L174-L176: Add with: \n persist-credentials: false to the checkout step in security-compliance-check.
  • .github/workflows/security-tests.yml#L234-L236: Add with: \n persist-credentials: false to the checkout step in security-regression-test.
🧰 Tools
🪛 zizmor (1.26.1)

[warning] 31-32: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false

(artipacked)

📍 Affects 1 file
  • .github/workflows/security-tests.yml#L31-L33 (this comment)
  • .github/workflows/security-tests.yml#L174-L176
  • .github/workflows/security-tests.yml#L234-L236
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/security-tests.yml around lines 31 - 33, Disable checkout
credential persistence by adding persist-credentials: false under the checkout
steps for security-hardening-tests, security-compliance-check, and
security-regression-test in .github/workflows/security-tests.yml at lines 31-33,
174-176, and 234-236 respectively.

Source: Linters/SAST tools

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

Comments suppressed due to low confidence (3)

.github/workflows/ci.yml:103

  • The PR description mentions consistent action pins across workflows, but docker/setup-buildx-action is pinned to v3 here while security-tests.yml pins v4. Standardizing the pin helps reduce drift and simplifies maintenance.
        uses: docker/setup-buildx-action@0d103c3126aa41d772a8362f6aa67afac040f80c # v3

.github/workflows/ci.yml:161

  • The PR description mentions consistent action pins across workflows, but softprops/action-gh-release is pinned to v2 here while release.yml uses v3. Consider aligning these to the same pinned revision unless there is a concrete compatibility reason to stay on v2.
        uses: softprops/action-gh-release@de2c0eb89ae2a093354c5cb36e48c5e2b1c5d3e0 # v2

.github/workflows/release.yml:26

  • The PR description calls out a repo-wide pattern of top-level permissions: contents: read with job-level write overrides, but this workflow still sets permissions: contents: write at the workflow level. That grants write permission to all jobs (including test) when only the release-creation job needs it.
      - name: Checkout code
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2


- name: Set up Python
uses: actions/setup-python@v7
- name: Set up Python ${{ matrix.python-version }}
Comment on lines 31 to +32
- name: Checkout repository
uses: actions/checkout@v7
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
@somethingwithproof
somethingwithproof merged commit c973a72 into main Jul 20, 2026
7 of 12 checks passed
@somethingwithproof
somethingwithproof deleted the chore/update-workflows-idiomatic-dry-efficient branch July 20, 2026 21:40
@github-actions

Copy link
Copy Markdown

Security Test Coverage Report 🔒

Targets: Ubuntu and Rocky Linux
Python: 3.12

Metric Coverage
Features 76.5%
Scenarios 100.0%
Full Coverage Report
WordPress Enterprise Security Test Coverage Report
================================================

Report ID: coverage_20260720_215104
Generated: Mon Jul 20 21:51:04 UTC 2026

OVERALL COVERAGE SUMMARY
========================
Feature Coverage:  76.5% (36/47)
Scenario Coverage: 100.0% (6/6)

DETAILED BREAKDOWN
==================

Security Features (36/47 covered):
  Apparmor Apache Profile                  ✅ COVERED
  Apparmor Installation                    ✅ COVERED
  Apparmor Modes                           ✅ COVERED
  Apparmor Nginx Profile                   ✅ COVERED
  Apparmor Php Profile                     ✅ COVERED
  Apparmor Profiles                        ✅ COVERED
  Apparmor Validation                      ❌ NOT COVERED
  Apparmor Wpcli Profile                   ✅ COVERED
  Audit Logging                            ✅ COVERED
  Automatic Updates                        ✅ COVERED
  Chkrootkit Installation                  ❌ NOT COVERED
  Concurrent Operations                    ❌ NOT COVERED
  Corrupted Configurations                 ✅ COVERED
  Cron Configuration                       ✅ COVERED
  Directory Security                       ✅ COVERED
  Error Recovery                           ✅ COVERED
  Fail2ban Configuration                   ✅ COVERED
  Fail2ban Installation                    ✅ COVERED
  Fail2ban Wordpress Filters               ❌ NOT COVERED
  File Permissions                         ✅ COVERED
  Firewall Rules                           ✅ COVERED
  Firewalld Configuration                  ✅ COVERED
  Kernel Parameters                        ✅ COVERED
  Logwatch Installation                    ❌ NOT COVERED
  Missing Directories                      ✅ COVERED
  Network Security                         ✅ COVERED
  Password Policy                          ✅ COVERED
  Permission Conflicts                     ✅ COVERED
  Platform Detection                       ✅ COVERED
  Privilege Limitations                    ❌ NOT COVERED
  Resource Constraints                     ❌ NOT COVERED
  Rkhunter Installation                    ❌ NOT COVERED
  Security Maintenance                     ✅ COVERED
  Security Scripts                         ✅ COVERED
  Security Status Reporting                ❌ NOT COVERED
  Security Tools Installation              ✅ COVERED
  Selinux Audit Logging                    ✅ COVERED
  Selinux Booleans                         ✅ COVERED
  Selinux Configuration                    ✅ COVERED
  Selinux Custom Policies                  ✅ COVERED
  Selinux File Contexts                    ✅ COVERED
  Selinux Installation                     ✅ COVERED
  Selinux Troubleshooting                  ❌ NOT COVERED
  Service Hardening                        ✅ COVERED
  Ufw Configuration                        ✅ COVERED
  Upload Protection                        ❌ NOT COVERED
  Wp Config Security                       ✅ COVERED

Test Scenarios (6/6 implemented):
  01 Basic Installation                    ✅ IMPLEMENTED
  02 Apache Installation                   ✅ IMPLEMENTED
  03 Validation Security                   ✅ IMPLEMENTED
  04 Security Hardening                    ✅ IMPLEMENTED
  05 Security Edge Cases                   ✅ IMPLEMENTED
  Unit Tests                               ✅ IMPLEMENTED

RECOMMENDATIONS
===============

• Improve feature coverage by implementing tests for uncovered features
• Add tests for concurrent security operations

FILES ANALYZED
==============
• Task files in tasks/ directory
• Test scenarios in tests/scenarios/ directory  
• Unit test scripts in tests/scripts/ directory
• Security configuration templates

Report generated by WordPress Enterprise Test Coverage Analyzer

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants