Skip to content
Open
Show file tree
Hide file tree
Changes from 7 commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
43162b1
Add TruffleHog secret scanning workflow and docs
GAdityaVarma Jan 7, 2026
200cee2
Update README.md
GAdityaVarma Jan 7, 2026
bf7b85b
Update trufflehog-scan.yml
GAdityaVarma Jan 7, 2026
527f3f2
Update trufflehog-scan.yml
GAdityaVarma Jan 7, 2026
599658f
Update trufflehog-scan.yml
GAdityaVarma Jan 7, 2026
f42179b
Enhance TruffleHog workflow with PR comments and commit status
GAdityaVarma Jan 7, 2026
e496bac
Update trufflehog_readme.md
GAdityaVarma Jan 7, 2026
d279b66
Update trufflehog-scan.yml
GAdityaVarma Jan 8, 2026
1aae01b
Update trufflehog-scan.yml
GAdityaVarma Jan 8, 2026
77909eb
Update trufflehog-scan.yml
GAdityaVarma Jan 8, 2026
c120b09
Update trufflehog-scan.yml
GAdityaVarma Jan 8, 2026
174b7d0
Update TruffleHog workflow to handle resolved secrets
GAdityaVarma Jan 8, 2026
7ded023
Update trufflehog-scan.yml
GAdityaVarma Jan 8, 2026
40260d7
Update trufflehog-scan.yml
GAdityaVarma Jan 8, 2026
5907188
Update trufflehog-scan.yml
GAdityaVarma Jan 9, 2026
c38506c
Update trufflehog-scan.yml
GAdityaVarma Jan 9, 2026
6f0f819
Remove workflow_dispatch trigger for ruleset compatibility
GAdityaVarma Jan 9, 2026
2a55bbb
Update trufflehog-scan.yml
GAdityaVarma Jan 9, 2026
e1358eb
Update trufflehog-scan.yml
GAdityaVarma Jan 9, 2026
f30fed0
Update trufflehog-scan.yml
GAdityaVarma Jan 9, 2026
3f65074
Improve TruffleHog scan workflow and update docs
GAdityaVarma Jan 9, 2026
467594b
Update trufflehog-scan.yml
GAdityaVarma Jan 9, 2026
693b2e7
Update trufflehog-scan.yml
GAdityaVarma Jan 9, 2026
8770dab
Update trufflehog-scan.yml
GAdityaVarma Jan 9, 2026
1a61036
Update trufflehog-scan.yml
GAdityaVarma Jan 9, 2026
aa00512
Update trufflehog-scan.yml
GAdityaVarma Jan 9, 2026
d57e46b
Update trufflehog-scan.yml
GAdityaVarma Jan 9, 2026
0bff560
Update trufflehog-scan.yml
GAdityaVarma Jan 9, 2026
cbfc2c8
Update trufflehog_readme.md
GAdityaVarma Jan 9, 2026
f610f23
Update trufflehog_readme.md
GAdityaVarma Jan 9, 2026
47a4ca6
PDP-684: updated the workflow for updating the pullrequest comment
brijeshp56 Jan 12, 2026
7ad1df9
PDP-684: Updated to update the comment
brijeshp56 Jan 12, 2026
0666566
PDP-684: Update the existing pull request comment if secrets are reso…
brijeshp56 Jan 13, 2026
06a1ac7
PDP-684: Updated workflow to make sure to scan renamed files
brijeshp56 Jan 14, 2026
518c5d2
Merge branch 'agottumu_dev' into brijesh-dev
brijeshp56 Jan 14, 2026
41f9c2d
Merge pull request #19 from marklogic/brijesh-dev
brijeshp56 Jan 14, 2026
e7e2b95
PDP-684 : Update trufflehog-scan.yml
brijeshp56 Jan 14, 2026
38832a6
Merge pull request #20 from marklogic/brijesh-dev
brijeshp56 Jan 14, 2026
09da209
PDP-684 : Update trufflehog-scan.yml
brijeshp56 Jan 14, 2026
df754f4
Merge pull request #21 from marklogic/brijesh-dev
brijeshp56 Jan 14, 2026
08e940a
PDP-684 : Update trufflehog-scan.yml
brijeshp56 Jan 14, 2026
7ba41eb
Merge pull request #22 from marklogic/brijesh-dev
brijeshp56 Jan 14, 2026
d385450
PDP-684 : Update trufflehog-scan.yml
brijeshp56 Jan 14, 2026
b9540ef
Merge pull request #23 from marklogic/brijesh-dev
brijeshp56 Jan 14, 2026
34848a0
PDP-684 : Update trufflehog-scan.yml for detecting the renamed files
brijeshp56 Jan 16, 2026
d64d46d
Merge branch 'agottumu_dev' into brijesh-dev-backup
brijeshp56 Jan 16, 2026
6cb4ee6
Merge pull request #25 from marklogic/brijesh-dev-backup
brijeshp56 Jan 16, 2026
a0015e2
PDP-684 : Update trufflehog-scan.yml
brijeshp56 Jan 16, 2026
20049b3
Merge pull request #26 from marklogic/brijesh-dev-backup
brijeshp56 Jan 16, 2026
f4e15b5
PDP-684 : Update trufflehog-scan.yml
brijeshp56 Jan 16, 2026
709c401
Merge pull request #27 from marklogic/brijesh-dev-backup
brijeshp56 Jan 16, 2026
9494c79
PDP-684 : Update trufflehog-scan.yml
brijeshp56 Jan 16, 2026
7cc1131
Merge pull request #28 from marklogic/brijesh-dev-backup
brijeshp56 Jan 16, 2026
0a33191
PDP-684: updated workflow to checkout only head commit
brijeshp56 Jan 19, 2026
e6fa7a0
Merge branch 'agottumu_dev' into brijesh-dev
brijeshp56 Jan 19, 2026
74e685b
Merge pull request #29 from marklogic/brijesh-dev
brijeshp56 Jan 19, 2026
d653ce8
PDP-684: updated workflow to checkout only head commit1
brijeshp56 Jan 19, 2026
2029065
Merge branch 'brijesh-dev' of https://github.com/marklogic/pr-workflo…
brijeshp56 Jan 19, 2026
46305c1
Merge pull request #30 from marklogic/brijesh-dev
brijeshp56 Jan 19, 2026
a7b8ecd
PDP-684 : Reverting my changes for trufflehog
brijeshp56 Jan 19, 2026
4f60581
Merge pull request #31 from marklogic/brijesh-dev
brijeshp56 Jan 19, 2026
f21206b
Update trufflehog-scan.yml
GAdityaVarma Jan 22, 2026
1be8f21
Improve secret scan comment update logic
GAdityaVarma Jan 29, 2026
99b8e96
Update trufflehog-scan.yml
GAdityaVarma Jan 29, 2026
c395591
Update trufflehog-scan.yml
GAdityaVarma Jan 30, 2026
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
175 changes: 175 additions & 0 deletions .github/workflows/trufflehog-scan.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
name: TruffleHog Secret Scan

on:
pull_request:
types: [opened, synchronize, reopened]
pull_request_target:
types: [opened, synchronize, reopened]
workflow_dispatch:

permissions:
contents: read
pull-requests: write
statuses: write

# Default exclusion patterns (regex format)
# Supports: exact filenames, wildcards, regex patterns
# Examples:
# Exact file: ^config/settings\.json$
# Directory: ^node_modules/
# Extension: \.lock$
# Wildcard: .*\.min\.js$
# Regex: ^src/test/.*_test\.py$

env:
DEFAULT_EXCLUDES: |
^node_modules/
^vendor/
^\.git/
\.lock$
^package-lock\.json$
^yarn\.lock$
^pnpm-lock\.yaml$
\.min\.js$
\.min\.css$

jobs:
trufflehog-scan:
name: Scan PR for Secrets
runs-on: ubuntu-latest
# Run pull_request_target only for fork PRs, pull_request only for same-repo PRs
# This prevents duplicate runs
if: |
(github.event_name == 'pull_request_target' && github.event.pull_request.head.repo.full_name != github.repository) ||
(github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository) ||
github.event_name == 'workflow_dispatch'

steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Fetch PR head commits
if: github.event_name != 'workflow_dispatch'
run: |
# Fetch PR commits using GitHub's merge ref (works for all PRs including forks)
git fetch origin +refs/pull/${{ github.event.pull_request.number }}/head:refs/remotes/origin/pr-head
echo "Fetched PR #${{ github.event.pull_request.number }} head commit: ${{ github.event.pull_request.head.sha }}"

- name: Setup exclude config
id: config
run: |
if [ -n "${{ vars.TRUFFLEHOG_EXCLUDES }}" ]; then
echo "Using repo/org-level TRUFFLEHOG_EXCLUDES variable"
# Support both comma-separated and newline-separated patterns
echo "${{ vars.TRUFFLEHOG_EXCLUDES }}" | tr ',' '\n' | sed '/^$/d' > .trufflehog-ignore
else
echo "Using default exclusions from central workflow"
cat << 'EOF' > .trufflehog-ignore
${{ env.DEFAULT_EXCLUDES }}
EOF
fi

echo "Exclusion patterns:"
cat .trufflehog-ignore
echo "exclude_args=--exclude-paths=.trufflehog-ignore" >> $GITHUB_OUTPUT

- name: TruffleHog Scan
id: trufflehog
uses: trufflesecurity/trufflehog@main
continue-on-error: true
with:
base: ${{ github.event.pull_request.base.sha }}
head: ${{ github.event.pull_request.head.sha }}
extra_args: --json ${{ steps.config.outputs.exclude_args }}

- name: Process scan results
id: process
if: github.event_name != 'workflow_dispatch'
run: |
# Check if TruffleHog found any secrets
if [ "${{ steps.trufflehog.outcome }}" == "failure" ]; then
echo "has_secrets=true" >> $GITHUB_OUTPUT
echo "status=failure" >> $GITHUB_OUTPUT
echo "description=Secret scanning found exposed credentials" >> $GITHUB_OUTPUT
else
echo "has_secrets=false" >> $GITHUB_OUTPUT
echo "status=success" >> $GITHUB_OUTPUT
echo "description=No secrets detected in PR changes" >> $GITHUB_OUTPUT
fi

- name: Post PR comment on findings
if: steps.process.outputs.has_secrets == 'true' && github.event_name != 'workflow_dispatch'
uses: actions/github-script@v7
with:
script: |
const commentMarker = '<!-- TRUFFLEHOG-SCAN-COMMENT -->';
const body = `${commentMarker}
## :rotating_light: Secret Scanning Alert

**TruffleHog detected potential secrets in this pull request.**

### What to do:
1. **Review the workflow logs** for detailed findings (file, line number, secret type)
2. **Remove the exposed secret** from your code
3. **Rotate the credential immediately** - assume it's compromised
4. **Push the fix** to this branch

### Finding Details
Check the [workflow run logs](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) for:
- File paths containing secrets
- Line numbers
- Secret types (API key, password, token, etc.)
- Verification status (verified = confirmed active)

---
*This scan only checks files modified in this PR. Secrets are classified as **verified** (confirmed active) or **unverified** (potential match).*
`;

// Find existing comment
const { data: comments } = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.pull_request.number,
per_page: 100
});

const existing = comments.find(c => c.body && c.body.includes(commentMarker));

if (existing) {
await github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: existing.id,
body: body
});
} else {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.pull_request.number,
body: body
});
}

- name: Set commit status
if: github.event_name != 'workflow_dispatch'
uses: actions/github-script@v7
with:
script: |
await github.rest.repos.createCommitStatus({
owner: context.repo.owner,
repo: context.repo.repo,
sha: '${{ github.event.pull_request.head.sha }}',
state: '${{ steps.process.outputs.status }}',
target_url: '${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}',
description: '${{ steps.process.outputs.description }}',
context: 'TruffleHog Secret Scan'
});

- name: Fail workflow if secrets found
if: steps.process.outputs.has_secrets == 'true'
run: |
echo "::error::Secrets detected in PR. Review the logs and PR comment for details."
exit 1
Loading