mirror of
https://github.com/mudler/LocalAI.git
synced 2026-07-30 18:09:05 -04:00
build-test.yaml, yaml-check.yml and secscan.yaml had no concurrency block at all, so every push to a PR stacked another full batch instead of superseding the previous one. build-test carries a macos-latest job, the scarcest runner class we use, and secscan fires on every push to every branch because its `push:` trigger is unfiltered. build-test and yaml-check use the same group idiom as lint.yml and the other eleven workflows that already have one: key on the PR number so pushes to a PR share a group, and cancel only on pull_request. On a master push the key falls back to github.sha and cancel-in-progress is false, so master runs never cancel each other -- that is deliberate, since backend.yml builds only the backends a given commit touched and superseding would drop those builds. secscan needs a different key: it has no pull_request trigger, so the shared idiom would fall back to the unique-per-commit sha and dedup nothing. It groups on github.ref instead, and excludes master from cancellation for the same per-commit reason. Cancelling a superseded feature-branch scan is safe because the only output is a SARIF upload and code scanning keeps the latest result per ref. No behaviour change on master for any of the three. Assisted-by: Claude:claude-opus-4-8 [Claude Code] Signed-off-by: Ettore Di Giacinto <mudler@localai.io> Co-authored-by: Ettore Di Giacinto <mudler@localai.io>
47 lines
2.0 KiB
YAML
47 lines
2.0 KiB
YAML
name: "Security Scan"
|
|
|
|
# Run workflow each time code is pushed to your repository and on a schedule.
|
|
# The scheduled workflow runs every at 00:00 on Sunday UTC time.
|
|
on:
|
|
push:
|
|
schedule:
|
|
- cron: '0 0 * * 0'
|
|
|
|
# `push:` is deliberately unfiltered, so this fires on every push to every
|
|
# branch and there is no pull_request event to key on -- the usual
|
|
# `github.event.pull_request.number || github.sha` idiom used elsewhere would
|
|
# key on the unique-per-commit sha and dedup nothing. Group on the ref instead
|
|
# so successive pushes to the same feature branch supersede one another.
|
|
#
|
|
# Cancelling is safe here: the only output is a SARIF upload, and code scanning
|
|
# tracks the latest result per ref, so a superseded scan has nothing to lose.
|
|
# master is excluded anyway -- every commit on master gets its own scan.
|
|
concurrency:
|
|
group: ci-secscan-${{ github.ref }}-${{ github.repository }}
|
|
cancel-in-progress: ${{ github.ref != 'refs/heads/master' }}
|
|
|
|
jobs:
|
|
tests:
|
|
runs-on: ubuntu-latest
|
|
env:
|
|
GO111MODULE: on
|
|
steps:
|
|
- name: Checkout Source
|
|
uses: actions/checkout@v7
|
|
if: ${{ github.actor != 'dependabot[bot]' }}
|
|
- name: Run Gosec Security Scanner
|
|
if: ${{ github.actor != 'dependabot[bot]' }}
|
|
uses: securego/gosec@v2.27.1
|
|
with:
|
|
# we let the report trigger content trigger a failure using the GitHub Security features.
|
|
# backend/go/supertonic is excluded: it vendors upstream supertone-inc/supertonic
|
|
# (helper.go), whose findings (G304 model-file loads, G404 math/rand for flow-matching
|
|
# noise, G104 unhandled errors) are inherent to that upstream code, not ours to rewrite.
|
|
args: '-no-fail -exclude-dir=backend/go/supertonic -fmt sarif -out results.sarif ./...'
|
|
- name: Upload SARIF file
|
|
if: ${{ github.actor != 'dependabot[bot]' }}
|
|
uses: github/codeql-action/upload-sarif@v4
|
|
with:
|
|
# Path to SARIF file relative to the root of the repository
|
|
sarif_file: results.sarif
|