Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 51 additions & 0 deletions .backlog/tasks/task-11 - Fix-snyk-workflow.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
---
id: TASK-11
title: Fix snyk workflow
status: Done
assignee:
- claude
- piotrzajac
created_date: '2026-04-12'
updated_date: '2026-04-12'
labels: [ci-cd, sec]
dependencies: []
priority: medium
---

## Description

<!-- SECTION:DESCRIPTION:BEGIN -->
Two issues need fixing in `.github/workflows/snyk.yml`:

### Issue 1 — Deprecated action

All three scan/monitor steps use `snyk/actions/dotnet@master`, which is officially
deprecated and no longer supported by Snyk (no .NET-specific replacement exists).

The recommended migration is `snyk/actions/setup@master` (installs the Snyk CLI only)
combined with explicit `run: snyk ...` commands. Since the workflow already runs on
`ubuntu-latest`, the Docker-based `setup` action works without any runner change.

### Issue 2 — Multiple SARIF runs under the same category

The single `upload-sarif` step points to the `snyk/` directory, which contains two
SARIF files (`opensource.sarif` and `code.sarif`). GitHub Code Scanning no longer
allows multiple SARIF runs uploaded under the same category (announced 2025-07-21),
causing the workflow to fail with:

> The CodeQL Action does not support uploading multiple SARIF runs with the same
> category. Please update your workflow to upload a single run per category.

**Fix:** replace the single directory upload with two steps, each pointing to a
specific file with a distinct `category`. The `category` parameter creates an
independent slot in the GitHub Advanced Security dashboard — uploads coexist and
neither overwrites the other.
<!-- SECTION:DESCRIPTION:END -->

## Acceptance Criteria

- [x] #1 All three `snyk/actions/dotnet@master` steps are replaced with `snyk/actions/setup@master` + `run:` commands
- [x] #2 The single `upload-sarif` directory step is replaced by two file-specific steps
- [x] #3 Each upload step specifies a distinct `category` (`snyk-opensource` and `snyk-code`)
- [x] #4 Both upload steps retain `if: ${{ always() }}` so results upload even when scans report findings
- [x] #5 The workflow runs without error
25 changes: 13 additions & 12 deletions .github/workflows/snyk.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,30 +45,31 @@ jobs:
if ($LastExitCode -ne 0) {
throw "dotnet restore failed with exit code $LastExitCode"
}
- name: 🏗️ setup snyk
uses: snyk/actions/setup@master
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated
- name: 🔬 snyk opensource scan
uses: snyk/actions/dotnet@master
run: snyk test --sarif-file-output=snyk/opensource.sarif --all-projects --exclude=Objectivity.AutoFixture.XUnit2.AutoFakeItEasy.Tests,Objectivity.AutoFixture.XUnit2.AutoMoq.Tests,Objectivity.AutoFixture.XUnit2.AutoNSubstitute.Tests,Objectivity.AutoFixture.XUnit2.Core.Tests
continue-on-error: true
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
args: --sarif-file-output=snyk/opensource.sarif --all-projects --exclude=Objectivity.AutoFixture.XUnit2.AutoFakeItEasy.Tests,Objectivity.AutoFixture.XUnit2.AutoMoq.Tests,Objectivity.AutoFixture.XUnit2.AutoNSubstitute.Tests,Objectivity.AutoFixture.XUnit2.Core.Tests
- name: 🔬 snyk code scan
uses: snyk/actions/dotnet@master
run: snyk code test --sarif-file-output=snyk/code.sarif
continue-on-error: true
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
args: --sarif-file-output=snyk/code.sarif
command: code test
- name: 📈 snyk monitor
uses: snyk/actions/dotnet@master
run: snyk monitor --all-projects --exclude=Objectivity.AutoFixture.XUnit2.AutoFakeItEasy.Tests,Objectivity.AutoFixture.XUnit2.AutoMoq.Tests,Objectivity.AutoFixture.XUnit2.AutoNSubstitute.Tests,Objectivity.AutoFixture.XUnit2.Core.Tests
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
- name: 📊 upload opensource sarif for GitHub Advanced Security Dashboard
uses: github/codeql-action/upload-sarif@v4
with:
args: --all-projects --exclude=Objectivity.AutoFixture.XUnit2.AutoFakeItEasy.Tests,Objectivity.AutoFixture.XUnit2.AutoMoq.Tests,Objectivity.AutoFixture.XUnit2.AutoNSubstitute.Tests,Objectivity.AutoFixture.XUnit2.Core.Tests
command: monitor
- name: 📊 upload sarif file for GitHub Advanced Security Dashboard
sarif_file: snyk/opensource.sarif
category: snyk-opensource
if: ${{ always() }}
- name: 📊 upload code sarif for GitHub Advanced Security Dashboard
uses: github/codeql-action/upload-sarif@v4
with:
sarif_file: snyk
sarif_file: snyk/code.sarif
category: snyk-code
if: ${{ always() }}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated
Loading