Skip to content

ci: add OSV-Scanner, license compliance, and semantic PR title guards - #437

Merged
carlitotate12160-tech merged 2 commits into
mainfrom
feat/repo-security-guards
Aug 17, 2026
Merged

carlitotate12160-tech merged 2 commits into
mainfrom
feat/repo-security-guards

Conversation

@carlitotate12160-tech

@carlitotate12160-tech carlitotate12160-tech commented Aug 17, 2026 •

Copy link
Copy Markdown
Owner

Summary

  • Guard 1 (Supply Chain / SCA): Added .github/workflows/osv-scanner.yml\ (Google OSV-Scanner) for automated vulnerability detection across Python dependencies and lockfiles.
  • Guard 2 (Local Pre-Commit Hook): Verified .pre-commit-config.yaml\ with Gitleaks secret scanner, Ruff, mypy, and private key detection.
  • Guard 3 (License Compliance & SBOM): Added .github/workflows/license-compliance.yml\ to audit open-source dependency licenses via \pip-licenses.
  • Guard 4 (Semantic PR Linter): Added .github/workflows/semantic-pr.yml\ (\�mannn/action-semantic-pull-request@v5) to enforce Conventional Commits formatting on all PR titles.

Summary by Sourcery

Add CI safeguards for supply chain security, license compliance, and semantic PR title validation.

CI:

  • Introduce OSV-Scanner workflow to automatically detect vulnerabilities in Python dependencies and lockfiles on pushes, PRs, and a weekly schedule.
  • Add license-compliance workflow to audit dependency licenses against an allowed list on pushes and pull requests.
  • Add semantic PR workflow to enforce Conventional Commit–style PR titles via automated checks.

@sourcery-ai

sourcery-ai Bot commented Aug 17, 2026 •

Copy link
Copy Markdown

Reviewer's Guide

Adds three CI workflows to enforce supply chain security scanning, license compliance auditing, and semantic PR title conventions, all running on GitHub Actions for pushes and PRs to main (plus a scheduled OSV scan).

File-Level Changes

Change Details Files
Introduce a license-compliance CI workflow that audits dependency licenses using pip-licenses and a curated allow list.
  • Create a GitHub Actions workflow triggered on push, pull_request, and manual dispatch for main branch.
  • Harden the runner using step-security/harden-runner with egress audit policy.
  • Check out the repository with actions/checkout and disable credential persistence.
  • Set up Python 3.12 via actions/setup-python.
  • Install project in editable mode and add pip-licenses as a dependency.
  • Run pip-licenses with a markdown output format and a specific set of allowed OSS licenses enforced via --allow-only.
.github/workflows/license-compliance.yml
Add a semantic PR title linter workflow that enforces Conventional Commit-style PR titles via amannn/action-semantic-pull-request.
  • Create a pull_request_target workflow reacting to PR lifecycle events (opened, edited, synchronize, reopened).
  • Configure permissions to allow reading PRs and writing commit statuses.
  • Run amannn/action-semantic-pull-request@v5 with a GitHub token from secrets.
  • Define the allowed conventional commit types (feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert).
  • Disable scope requirement and single-commit validation via action inputs.
.github/workflows/semantic-pr.yml
Add an OSV-based supply chain security workflow to scan Python dependencies and lockfiles on pushes, PRs, and a weekly schedule.
  • Create a GitHub Actions workflow triggered on push and pull_request to main, plus a weekly cron schedule and manual dispatch.
  • Harden the runner using step-security/harden-runner with egress audit policy.
  • Check out the repository with actions/checkout and disabled credential persistence.
  • Run google/osv-scanner-action@v1.9.2 with scan-args configured for pyproject.toml as a lockfile, recursive scanning, and the repository root.
.github/workflows/osv-scanner.yml

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@greptile-apps greptile-apps 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.

carlitotate12160-tech has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@coderabbitai

coderabbitai Bot commented Aug 17, 2026 •

Copy link
Copy Markdown

Important

Review available on request

  • 🔍 Trigger review

Reviews should be triggered manually for repositories with fewer than 10 stars. Select Trigger review above or comment @coderabbitai review to review the latest changes. For a full review, comment @coderabbitai full review.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 0688895a-f12f-4cf5-b61e-18745bd23452


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.

@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

CI: add OSV-Scanner, license compliance, and semantic PR title checks

⚙️ Configuration changes ✨ Enhancement 🕐 10-20 Minutes

Grey Divider

AI Description

• Add OSV-Scanner workflow to detect vulnerable Python dependencies on PRs, pushes, and schedule.
• Add license audit workflow to enforce an allowlist of OSS licenses via pip-licenses.
• Enforce Conventional Commit-style PR titles via a semantic PR linter workflow.
Diagram

graph TD
  A["GitHub Events"] --> B["OSV-Scanner workflow"] --> E["Vuln findings"]
  A --> C["License compliance workflow"] --> F["License report"]
  A --> D["Semantic PR workflow"] --> G["PR status check"]
  subgraph Legend
    direction LR
    _evt(["Trigger"]) ~~~ _wf["Workflow"] ~~~ _out[("Output")]
  end
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Use GitHub-native supply chain features (Dependabot + code scanning)
  • ➕ First-party integration and reporting in GitHub Security tab
  • ➕ Typically less workflow maintenance than bespoke actions
  • ➖ May not cover the same scan surface as OSV across all artifacts
  • ➖ Some features depend on repository settings or licensing
2. Centralize security checks via a reusable workflow
  • ➕ Keeps policy and allowlists consistent across multiple repos
  • ➕ Easier updates (pinning, schedules, allowlist changes) in one place
  • ➖ Adds indirection for this repo; reviewers must follow references
  • ➖ Requires extra repo plumbing if not already established
3. Pin actions by commit SHA for all third-party actions
  • ➕ Stronger supply-chain hardening than version tags alone
  • ➕ More predictable builds over time
  • ➖ More maintenance overhead to bump SHAs intentionally
  • ➖ Less readable than semantic version tags

Recommendation: The PR’s approach is sound for adding lightweight, visible guardrails quickly. If this repo is one of many with similar policies, consider migrating these workflows into a reusable workflow to reduce drift. For maximum CI supply-chain hardening, consider pinning all third-party actions by commit SHA (the harden-runner step already does this) and periodically updating those pins.

Files changed (3) +115 / -0

Other (3) +115 / -0
license-compliance.ymlAdd license allowlist audit via pip-licenses +41/-0

Add license allowlist audit via pip-licenses

• Introduces a workflow that installs the project and runs pip-licenses to enforce an allow-only license policy on pushes and PRs targeting main. Uses step-security/harden-runner and disables credential persistence during checkout.

.github/workflows/license-compliance.yml

osv-scanner.ymlAdd scheduled OSV dependency vulnerability scanning +36/-0

Add scheduled OSV dependency vulnerability scanning

• Adds an OSV-Scanner workflow triggered on pushes, PRs, and a weekly cron schedule. Scans recursively and includes lockfile scanning configuration, with runner hardening enabled.

.github/workflows/osv-scanner.yml

semantic-pr.ymlEnforce Conventional Commit-style PR titles +38/-0

Enforce Conventional Commit-style PR titles

• Adds a pull_request_target workflow that validates PR titles against an allowed set of Conventional Commit types. Reports results via GitHub status checks using the repository-provided token.

.github/workflows/semantic-pr.yml

@sourcery-ai sourcery-ai 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.

Hey - I've found 1 issue, and left some high level feedback:

  • In semantic-pr.yml, consider whether pull_request_target is strictly necessary, as it runs with elevated permissions on code from forks; pull_request may be safer if you don’t rely on access to the base repo’s workflow context.
  • The OSV scanner is configured with --lockfile=pyproject.toml, which isn’t a conventional lockfile; if you use poetry.lock, requirements.txt, or another lockfile, explicitly point OSV at that to avoid incomplete dependency coverage.
  • The allowlist in license-compliance.yml is currently hard-coded; consider centralizing or templating the allowed-license configuration so it’s easier to maintain and keeps the workflow focused on execution rather than policy.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- In `semantic-pr.yml`, consider whether `pull_request_target` is strictly necessary, as it runs with elevated permissions on code from forks; `pull_request` may be safer if you don’t rely on access to the base repo’s workflow context.
- The OSV scanner is configured with `--lockfile=pyproject.toml`, which isn’t a conventional lockfile; if you use `poetry.lock`, `requirements.txt`, or another lockfile, explicitly point OSV at that to avoid incomplete dependency coverage.
- The allowlist in `license-compliance.yml` is currently hard-coded; consider centralizing or templating the allowed-license configuration so it’s easier to maintain and keeps the workflow focused on execution rather than policy.

## Individual Comments

### Comment 1
<location path=".github/workflows/osv-scanner.yml" line_range="30-31" />
<code_context>
+        with:
+          persist-credentials: false
+
+      - name: Run OSV-Scanner
+        uses: google/osv-scanner-action/osv-scanner-action@v1.9.2
+        with:
+          scan-args: |-
</code_context>
<issue_to_address>
**issue (bug_risk):** OSV scanner action reference looks incorrect and may not resolve to the intended action.

GitHub Actions should be referenced as `owner/repo@version`. For OSV Scanner, the correct identifier is `google/osv-scanner-action@v1.9.2`. The extra `/osv-scanner-action` segment will prevent the workflow from running because GitHub will look for a nested repository that doesn’t exist. Please update the `uses` value accordingly.
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Comment on lines +30 to +31
- name: Run OSV-Scanner
uses: google/osv-scanner-action/osv-scanner-action@v1.9.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.

issue (bug_risk): OSV scanner action reference looks incorrect and may not resolve to the intended action.

GitHub Actions should be referenced as owner/repo@version. For OSV Scanner, the correct identifier is google/osv-scanner-action@v1.9.2. The extra /osv-scanner-action segment will prevent the workflow from running because GitHub will look for a nested repository that doesn’t exist. Please update the uses value accordingly.

persist-credentials: false

- name: Run OSV-Scanner
uses: google/osv-scanner-action/osv-scanner-action@v1.9.2

@aikido-pr-checks aikido-pr-checks Bot Aug 17, 2026 •

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

3rd party Github Actions should be pinned - high severity
A third-party GitHub Action was imported, and is not pinned via a hash. This leaves your CI/CD at risk for potential supply chain attacks, if the affected GitHub Action is compromised.

Suggested change
uses: google/osv-scanner-action/osv-scanner-action@v1.9.2
uses: google/osv-scanner-action/osv-scanner-action@764c91816374ff2d8fc2095dab36eecd42d61638 # v1.9.2

Reply @AikidoSec ignore: [REASON] to ignore this issue.
More info

runs-on: ubuntu-latest
steps:
- name: Validate PR Title Format
uses: amannn/action-semantic-pull-request@v5

@aikido-pr-checks aikido-pr-checks Bot Aug 17, 2026 •

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

3rd party Github Actions should be pinned - high severity
A third-party GitHub Action was imported, and is not pinned via a hash. This leaves your CI/CD at risk for potential supply chain attacks, if the affected GitHub Action is compromised.

Suggested change
uses: amannn/action-semantic-pull-request@v5
uses: amannn/action-semantic-pull-request@e32d7e603df1aa1ba07e981f2a23455dee596825 # v5

Reply @AikidoSec ignore: [REASON] to ignore this issue.
More info

@qodo-code-review

qodo-code-review Bot commented Aug 17, 2026 •

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (3) 📘 Rule violations (1) 📜 Skill insights (0)

Grey Divider


Action required

1. Wrong OSV lockfile 🐞 Bug ≡ Correctness
Description
The OSV workflow passes "--lockfile=pyproject.toml", but this repo does not contain a resolved
lockfile and pyproject.toml mostly declares unpinned dependencies, so the scan may be ineffective
(no concrete versions) or fail depending on OSV-Scanner’s supported lockfile formats.
Code

.github/workflows/osv-scanner.yml[R33-36]

+          scan-args: |-
+            --lockfile=pyproject.toml
+            --recursive
+            .
Relevance

●●● Strong

Likely misconfiguration/ineffective scan; straightforward fix to use a real lockfile or remove
--lockfile.

PR-#23

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The workflow explicitly sets --lockfile=pyproject.toml, but the repo only has dependency
declarations in pyproject.toml (mostly unpinned) and a small requirements.txt, with no resolved
lockfile present to supply exact versions for scanning.

.github/workflows/osv-scanner.yml[30-36]
pyproject.toml[5-37]
requirements.txt[1-4]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The OSV workflow uses `--lockfile=pyproject.toml`, but `pyproject.toml` is not a resolved lockfile in this repo. This can lead to OSV-Scanner not having concrete versions to assess (or rejecting the input) and therefore not delivering the intended vulnerability coverage.

## Issue Context
- The repo contains `pyproject.toml` (dependency declarations) and `requirements.txt`, but no actual lockfile (e.g., `poetry.lock`, `uv.lock`, `requirements.lock`).

## Fix (recommended)
Choose one of:
1) **Remove the explicit lockfile flag** and rely on recursive scanning of supported manifests/requirements, OR
2) **Point `--lockfile` at an actual resolved input** (e.g., add/commit a lockfile generated from `pyproject.toml` and scan that), OR
3) If `requirements.txt` is intended to be the source of truth, scan it explicitly.

## Fix Focus Areas
- .github/workflows/osv-scanner.yml[30-36]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

2. Unpinned third-party actions 🐞 Bug ⛨ Security
Description
The new workflows reference third-party GitHub Actions via mutable tags (e.g.,
amannn/action-semantic-pull-request@v5, google/osv-scanner-action@v1.9.2), which can change
without review and increases CI supply-chain risk.
Code

.github/workflows/semantic-pr.yml[R20-23]

+      - name: Validate PR Title Format
+        uses: amannn/action-semantic-pull-request@v5
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Relevance

●●● Strong

Supply-chain hardening is low-effort and aligns with existing CI security posture; likely to accept
SHA pinning.

PR-#23

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The semantic PR workflow uses a third-party action by the mutable @v5 tag; the OSV workflow
similarly uses a tagged third-party action. In contrast, harden-runner is pinned to a full commit
SHA, showing the repo already uses SHA pinning for security-sensitive actions.

.github/workflows/semantic-pr.yml[20-23]
.github/workflows/osv-scanner.yml[20-32]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Workflows should reference actions by immutable commit SHA to prevent tag retargeting (supply-chain hardening). This PR introduces new third-party action references via tags.

## Issue Context
`step-security/harden-runner` is already pinned to a commit SHA in the same workflows, indicating an existing hardening pattern.

## Fix
- Replace tagged action refs with commit-SHA-pinned refs, leaving the human-readable version as a comment, e.g.:
 - `uses: amannn/action-semantic-pull-request@<sha> # v5.x.x`
 - `uses: google/osv-scanner-action/osv-scanner-action@<sha> # v1.9.2`

## Fix Focus Areas
- .github/workflows/semantic-pr.yml[20-23]
- .github/workflows/osv-scanner.yml[20-32]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. License audit will drift 🐞 Bug ☼ Reliability
Description
license-compliance installs dependencies on an ephemeral runner via pip install -e ., but most
dependencies in pyproject.toml are unpinned, so license results can change over time without code
changes and can unexpectedly start failing when upstream releases/metadata change.
Code

.github/workflows/license-compliance.yml[R34-37]

+        run: |
+          python -m pip install --upgrade pip
+          pip install -e .
+          pip install pip-licenses
Relevance

●● Moderate

Mitigation likely requires pinning/lockfile (process change); team may avoid CI brittleness from
strict baselines.

PR-#64

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The workflow installs the project in editable mode (resolving dependencies at run time), and the
project’s dependency list is largely floating (no pinned versions), which makes the set of installed
packages/licenses time-dependent.

.github/workflows/license-compliance.yml[33-38]
pyproject.toml[5-37]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The license audit workflow resolves dependencies at runtime on a fresh runner (`pip install -e .`). Because the project dependencies are mostly unpinned, the installed dependency graph can change between runs, making compliance results non-reproducible and prone to unexpected failures.

## Issue Context
`pyproject.toml` declares many dependencies without fixed versions, so `pip` will select whatever is current at install time.

## Fix (recommended)
- Introduce and commit a reproducible lock/constraints file for CI compliance checks (e.g., `requirements.lock` generated from `pyproject.toml`), then install from that in the workflow before running `pip-licenses`.
- Alternatively, if `requirements.txt` is intended to be authoritative, expand it to fully capture the dependency set and install from it in the workflow.

## Fix Focus Areas
- .github/workflows/license-compliance.yml[33-41]
- pyproject.toml[5-37]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


4. Non-security semantic PR workflow 📘 Rule violation § Compliance
Description
The new Semantic PR Linter workflow enforces Conventional Commit title formatting, which is not a
cybersecurity-focused capability. This violates the requirement that Agent-Alpha changes stay scoped
to cybersecurity-related functionality.
Code

.github/workflows/semantic-pr.yml[R1-4]

+name: Semantic PR Linter
+
+on:
+  pull_request_target:
Relevance

●● Moderate

Out-of-scope compliance is subjective; repo has accepted and rejected workflow strictness depending
on perceived value.

PR-#411

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
PR Compliance ID 2742015 requires all new/modified capabilities to be primarily
cybersecurity-focused. The added workflow is explicitly for PR title formatting (`Semantic PR
Linter`), which is not a cybersecurity feature.

Rule 2742015: Restrict Agent-Alpha changes to cybersecurity-related functionality
.github/workflows/semantic-pr.yml[1-21]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
A new CI workflow (`.github/workflows/semantic-pr.yml`) was added to enforce PR title semantics (Conventional Commits). This is developer governance/formatting rather than cybersecurity functionality, which violates the repo’s scope restriction.

## Issue Context
The PR is intended to add security guards (OSV scanning, license compliance). The semantic PR title linter is orthogonal to those security controls.

## Fix Focus Areas
- .github/workflows/semantic-pr.yml[1-38]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Context
✅ Compliance rules (platform): 37 rules
Review mode: ⚖️ Balanced: This adds three behavior-affecting CI workflows, including supply-chain scanning and PR validation, with several independent configuration paths where correctness and security details warrant a careful single-pass review.

Grey Divider

Tip of the day
💡 Did you know, you can route each action level your way: inline, summary, both, or drop

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment thread .github/workflows/semantic-pr.yml Outdated
Comment on lines +1 to +4
name: Semantic PR Linter

on:
pull_request_target:

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Remediation recommended

1. Non-security semantic pr workflow 📘 Rule violation § Compliance

The new Semantic PR Linter workflow enforces Conventional Commit title formatting, which is not a
cybersecurity-focused capability. This violates the requirement that Agent-Alpha changes stay scoped
to cybersecurity-related functionality.
Agent Prompt
## Issue description
A new CI workflow (`.github/workflows/semantic-pr.yml`) was added to enforce PR title semantics (Conventional Commits). This is developer governance/formatting rather than cybersecurity functionality, which violates the repo’s scope restriction.

## Issue Context
The PR is intended to add security guards (OSV scanning, license compliance). The semantic PR title linter is orthogonal to those security controls.

## Fix Focus Areas
- .github/workflows/semantic-pr.yml[1-38]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment on lines +33 to +36
scan-args: |-
--lockfile=pyproject.toml
--recursive
.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Action required

2. Wrong osv lockfile 🐞 Bug ≡ Correctness

The OSV workflow passes "--lockfile=pyproject.toml", but this repo does not contain a resolved
lockfile and pyproject.toml mostly declares unpinned dependencies, so the scan may be ineffective
(no concrete versions) or fail depending on OSV-Scanner’s supported lockfile formats.
Agent Prompt
## Issue description
The OSV workflow uses `--lockfile=pyproject.toml`, but `pyproject.toml` is not a resolved lockfile in this repo. This can lead to OSV-Scanner not having concrete versions to assess (or rejecting the input) and therefore not delivering the intended vulnerability coverage.

## Issue Context
- The repo contains `pyproject.toml` (dependency declarations) and `requirements.txt`, but no actual lockfile (e.g., `poetry.lock`, `uv.lock`, `requirements.lock`).

## Fix (recommended)
Choose one of:
1) **Remove the explicit lockfile flag** and rely on recursive scanning of supported manifests/requirements, OR
2) **Point `--lockfile` at an actual resolved input** (e.g., add/commit a lockfile generated from `pyproject.toml` and scan that), OR
3) If `requirements.txt` is intended to be the source of truth, scan it explicitly.

## Fix Focus Areas
- .github/workflows/osv-scanner.yml[30-36]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment on lines +34 to +37
run: |
python -m pip install --upgrade pip
pip install -e .
pip install pip-licenses

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Remediation recommended

3. License audit will drift 🐞 Bug ☼ Reliability

license-compliance installs dependencies on an ephemeral runner via pip install -e ., but most
dependencies in pyproject.toml are unpinned, so license results can change over time without code
changes and can unexpectedly start failing when upstream releases/metadata change.
Agent Prompt
## Issue description
The license audit workflow resolves dependencies at runtime on a fresh runner (`pip install -e .`). Because the project dependencies are mostly unpinned, the installed dependency graph can change between runs, making compliance results non-reproducible and prone to unexpected failures.

## Issue Context
`pyproject.toml` declares many dependencies without fixed versions, so `pip` will select whatever is current at install time.

## Fix (recommended)
- Introduce and commit a reproducible lock/constraints file for CI compliance checks (e.g., `requirements.lock` generated from `pyproject.toml`), then install from that in the workflow before running `pip-licenses`.
- Alternatively, if `requirements.txt` is intended to be authoritative, expand it to fully capture the dependency set and install from it in the workflow.

## Fix Focus Areas
- .github/workflows/license-compliance.yml[33-41]
- pyproject.toml[5-37]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment on lines +20 to +23
- name: Validate PR Title Format
uses: amannn/action-semantic-pull-request@v5
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Remediation recommended

4. Unpinned third-party actions 🐞 Bug ⛨ Security

The new workflows reference third-party GitHub Actions via mutable tags (e.g.,
amannn/action-semantic-pull-request@v5, google/osv-scanner-action@v1.9.2), which can change
without review and increases CI supply-chain risk.
Agent Prompt
## Issue description
Workflows should reference actions by immutable commit SHA to prevent tag retargeting (supply-chain hardening). This PR introduces new third-party action references via tags.

## Issue Context
`step-security/harden-runner` is already pinned to a commit SHA in the same workflows, indicating an existing hardening pattern.

## Fix
- Replace tagged action refs with commit-SHA-pinned refs, leaving the human-readable version as a comment, e.g.:
  - `uses: amannn/action-semantic-pull-request@<sha> # v5.x.x`
  - `uses: google/osv-scanner-action/osv-scanner-action@<sha> # v1.9.2`

## Fix Focus Areas
- .github/workflows/semantic-pr.yml[20-23]
- .github/workflows/osv-scanner.yml[20-32]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

@greptile-apps greptile-apps 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.

carlitotate12160-tech has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@carlitotate12160-tech
carlitotate12160-tech merged commit 32f0781 into main Aug 17, 2026
10 checks passed
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.

1 participant