Skip to content

Commit d8ef2e5

Browse files
authored
chore(release): 3.4.0 (#120)
* chore(release): 3.4.0 Stamps [Unreleased] as [3.4.0], bumps the version files and uv.lock, and synchronizes the current-release references across README.md and docs/**. Minor rather than patch: #119 changes the snippet, detailed report, dataflow trace and description that every consumer of a finding reads, and adds the `redact` rule-metadata key. Also records the socketdev 3.5.0 -> 3.6.0 lockfile bump from #117, which merged without a changelog entry. * fix(redaction): treat plain-text-password as logic, not a credential The rule that fragment names matches password *handling* -- assigning request input to a password field, or comparing against one -- so its match is an expression rather than a literal. Running the literal pass on it reduced `user.password = request.form.get('password')` to a row of asterisks, which is the rule's main pattern and leaves nothing to act on. It belongs with `hardcoded-ip` and the password-policy rules, which the same comment already excludes for the same reason. A comparison against a hardcoded value is the one shape it covers that carries a credential, and that is what the `hardcoded-*` rules are for. Also folds a duplicated TestRedactMessage class into one. The second definition shadowed the first, so two message tests never ran. * fix(redaction): serve both shapes of the password-logic rule Dropping plain-text-password from the credential fragments fixed the over-masking but opened a hole: one of that rule's patterns is a comparison against a hardcoded string, and no hardcoded-* rule matches that shape, so `if user.password == "hunter2"` went into the facts file verbatim. Confirmed by scanning a file with exactly that line. The fragment goes back, and the over-masking is fixed where it belongs. An assigned value that calls something is an expression, not a bare credential, so it skips the unquoted fallback and the literal pass masks just the quoted parts. `user.password = request.form.get('password')` keeps its expression, the comparison value is masked, and a bare value with a trailing comment is still masked whole so a short credential cannot be partly revealed. * fix(redaction): bind the right operator and mask trailing comments Three defects in the unquoted-assignment fallback, found by working through the shapes the credential rules actually produce. A call matched anywhere in the value skipped masking entirely, so `password: hunter2 # see get_secret()` kept the credential. The check is now anchored: only a value that opens with a call is treated as an expression. The first operator on the line bound, so a type annotation won over the assignment after it and `password: str = "..."` was starred out whole rather than reaching the literal pass -- ordinary Python and TypeScript. The last operator now binds, and operators covered by a string literal are skipped so the `:` in `url = "https://..."` cannot bind either. That needs the literal spans, which one regex cannot express, so _split_assignment walks the matches. Masking the value left a comment beside it holding the plaintext, as in `password = get_secret() # real value is hunter2`. Text after an unquoted comment marker is now masked too. Also stops measuring an unquoted value together with whatever follows it. `password: hunter2 # plain comment` is long enough for a partial reveal even though `hunter2` is not, and it was rendering as `password: hunt...ment`. * fix(redaction): take the comment off first and mask per statement Two ways a credential stayed in the part of the line the value search never looked at. A comment can hold an operator later in the line than the real one. Because the comment was masked after the operator was chosen, that one bound and the value in front of it was left in the head: `password = hunter2 # see x = y` kept hunter2. The comment now comes off before anything else reads the line. A line can also carry more than one statement, and only one operator binds per statement, so `a = hunter2; password = x` masked the second value and left the first. Masking now runs per statement, split on separators outside string literals. * fix(redaction): measure literal spans over the snippet, not per line A literal can open on one line and close on another. Spans were computed per line, so a marker on a literal's second line read as a comment and the rest of that line was starred -- dropping the closing quote, after which the literal pass no longer matched and the opening line's value survived. Spans are now measured once over the whole snippet and consulted by absolute position. Two things fall out of that. A snippet is a slice of a file, so a literal can also never close. The quoted value branch deferred to the literal pass, which never matches an unterminated literal, so `password = "hunter2` was left untouched. It now defers only when the quote opens a span the pass can find, and masks the value whole otherwise. A multi-line literal body was measured as one value, so the head-and-tail reveal exposed the start of its first line. Each line of such a body is now masked whole, with the line breaks kept so the snippet still shows where the literal begins and ends. * fix(redaction): recognize string prefixes and interpolated bodies A prefixed opener such as r""" or f""" was not read as opening a literal, so the opening line was starred and its quotes were removed. Later lines were still measured against the original spans, which said they were inside a literal, so nothing masked them and the final literal pass no longer matched. The prefix is now part of the opener check. That alone left a partial reveal: literal text around an interpolation inflates the body past the reveal threshold, so f"{b}_SuperSecret123!" showed 123!. An interpolated body is masked whole, on the same reasoning as a multi-line one -- it is a block of content, not a single opaque value. * fix(redaction): do not defer on a spurious empty-literal match An unterminated triple-quoted value still produces a literal match: the engine backtracks past the triple alternative and reads the first two quotes as an empty string. That match was enough to send the value to the masking pass, which then covered only those two quotes, so the credential stayed in the snippet. Affects bare and prefixed openers alike. Deferring now requires a span that starts at the quote and holds both delimiters, which an empty match cannot satisfy. _STRING_LITERAL also gained triple-quoted alternatives so a terminated block matches once with its real body rather than as an empty string followed by a second literal. * fix(redaction): fail safe when string state is lost, and fuzz the invariant A generated-snippet sweep found three gaps the hand-written cases did not, all of them the same thing: masking depends on knowing where string literals start and end, and a truncated snippet can make that unknowable. An unterminated literal is not reached by the assignment fallback when the value sits in a comparison or a call argument, so it went to the masking pass, which cannot match it. A quote outside every matched span now marks the rest of the line as literal content. An unclosed triple-quoted block does not simply fail to match -- its first two quotes match as an empty string and the third pairs with any stray quote later, producing one long span that hides a real assignment on a later line. An odd count of triple delimiters now masks from the opener to the end. A " or ' literal cannot hold a raw newline in any language these rules cover, so a match that does is the same pairing artifact rather than a literal. Those spans are discarded; backticks and triple quotes keep theirs. tests/test_secret_redaction_fuzz.py generates the combinations rather than listing them, and asserts no credential survives, none is partly revealed, and non-credential snippets come through unchanged. 2,000,000 generated cases pass; 20,000 run in CI in about a second. * fix(redaction): mask to the end of a snippet once string state is lost Bugbot found that a credential on a continuation line survived, and extending the fuzzer to put the secret after the line break -- it had only ever put it before -- found a second case immediately. Both are the same thing: masking that stops at the opening line. Where a literal opens and its end is unknowable, everything after is inside it as far as any reader can tell, so masking now runs to the end of the snippet rather than the end of the line. The two ways state is lost -- a quote no surviving span covers, and an odd number of triple delimiters -- are handled together instead of separately. The second case was the opposite failure. Masking an unquoted value whole destroyed the opening quote of a literal that continued past the line, so the snippet-wide pass afterwards no longer matched and the rest of the literal was left alone. Such a value is now masked only up to the opener, and the pass takes the literal itself. Both generators put the secret on either side of a line break, so the shape is covered from here on. 1,000,000 generated cases pass. * fix(redaction): fail closed on ambiguous credential syntax
1 parent fe0b636 commit d8ef2e5

15 files changed

Lines changed: 784 additions & 133 deletions

‎CHANGELOG.md‎

Lines changed: 48 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,41 +8,78 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
88

99
## [Unreleased]
1010

11+
## [3.4.0] - 2026-09-18
12+
13+
Findings for the hardcoded-credential rules now report where a credential is
14+
without reproducing what it is. Minor rather than patch: the snippet a finding
15+
carries changes for every consumer that reads it, and the release adds a new
16+
rule-metadata key.
17+
18+
### Upgrade notes
19+
20+
No configuration change is required, but findings differ on the first run after
21+
upgrading.
22+
23+
- **`codeSnippet` content changes for the credential rules.** The field keeps
24+
the assignment target and surrounding syntax where that is unambiguous, as
25+
well as the file and line, and masks the literal. A baseline keyed on exact
26+
snippet text will not match; key on rule ID plus location instead. Rules whose
27+
match is not a credential are unaffected. (#119)
28+
- **The same applies to `detailedReport.content` and `dataflowTrace`.** Both
29+
quote source lines and both are masked on the same terms. (#119)
30+
- **A finding's `description` can also change.** OpenGrep expands metavariables
31+
into a rule's message before returning a result, so a message quoting the
32+
matched value carried it too. Expanded metavariables are masked for the
33+
credential rules. (#119)
34+
- **Masking is deliberately conservative in several visible places.**
35+
`define('SECRET', '...')` masks the constant name along with the value, and
36+
`password: "admin"` hides which default was used. Ambiguous unquoted values
37+
can also mask the rest of a statement or line rather than risk treating part
38+
of the credential as source syntax. Rule ID, file and line still identify the
39+
finding in each case. (#119)
40+
1141
### Fixed
1242
- **A finding's snippet no longer reproduces the value it reports.** A SAST
1343
finding's `codeSnippet` is the source line the rule matched. For nearly every
1444
rule that line is the code the finding is about; for the hardcoded-credential
1545
rules it contains the credential, so the finding carried the value into
1646
`.socket.facts.json`, the uploaded facts and the configured notifiers.
17-
Snippets for those rules now keep the assignment target, the syntax, the file
18-
and the line, and mask the literal's contents. This covers 20 rules across all
19-
fifteen bundled language rule sets, not only the Python and JavaScript ones:
47+
Snippets for those rules now keep the assignment target and syntax when safe,
48+
keep the file and line, and mask the literal's contents. This covers 20 rules
49+
across all fifteen bundled language rule sets, not only the Python and
50+
JavaScript ones:
2051
`*-hardcoded-secret(s)`, `*-hardcoded-credentials`,
2152
`*-hardcoded-password-default`, `*-default-credentials`,
2253
`*-plain-text-password`, `*-weak-jwt-secret` and `*-empty-password`. Rules
23-
whose match is not a credential keep their snippets verbatim.
24-
- Every snippet, dataflow-trace step and detailed report, whatever rule produced
25-
it, is now masked of values matching a well-known credential format: AWS key
54+
whose match is logic keep their snippets verbatim, and a complete assigned
55+
call with a literal argument is treated as code, so
56+
`user.password = request.form.get('password')` keeps its expression while the
57+
quoted argument is masked. (#119)
58+
- Every snippet, dataflow-trace step, rule message and detailed report, whatever
59+
rule produced it, is now masked of values matching a well-known credential
60+
format: AWS key
2661
IDs, GitHub tokens, Stripe keys, Slack tokens, Google API keys, npm and PyPI
2762
tokens, JWTs, PEM private key bodies, and credentials in a URL authority. A
28-
rule unrelated to secrets can still match a line that carries one.
63+
rule unrelated to secrets can still match a line that carries one. (#119)
2964
- TruffleHog's `redactedValue` kept the first and last four characters of any
3065
value longer than eight, which left most of a short password readable. Values
31-
under sixteen characters are now masked in full.
66+
under sixteen characters are now masked in full. (#119)
3267
- TruffleHog no longer scans the facts file the run writes. That file lands
3368
inside the scan target, so a previous run's output was on disk during the walk
3469
and its contents were reported as findings of their own, pointing at the
35-
output file rather than the source line.
70+
output file rather than the source line. (#119)
3671

3772
### Changed
73+
- socketdev 3.5.0 -> 3.6.0 in the lockfile. The `>=3.5.0` floor in
74+
`pyproject.toml` is unchanged. (#117)
3875
- `load_explicit_env_config` builds its "API key sources detected" debug line by
3976
iterating a tuple of variable names rather than a dict of presence booleans.
4077
The line is unchanged, including the exclusion of an exported-but-empty
41-
variable.
78+
variable. (#119)
4279

4380
### Added
4481
- A `redact` rule-metadata key. Set it on a custom SAST rule to mark the match
45-
as a credential, or to opt a rule out; without it, the rule name decides.
82+
as a credential, or to opt a rule out; without it, the rule name decides. (#119)
4683

4784
## [3.3.0] - 2026-09-15
4885

‎README.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ jobs:
3535
- name: Run Socket Basics
3636
# Pin to a commit SHA for supply-chain safety.
3737
# Dependabot will keep this up to date automatically — see docs/github-action.md.
38-
uses: SocketDev/socket-basics@<sha> # v3.3.0
38+
uses: SocketDev/socket-basics@<sha> # v3.4.0
3939
env:
4040
GITHUB_PR_NUMBER: ${{ github.event.pull_request.number || github.event.issue.number }}
4141
with:
@@ -179,10 +179,10 @@ For GitHub Actions, see the [Quick Start](#-quick-start---github-actions) above
179179

180180
```bash
181181
# Pull the pre-built image (recommended — no build step required)
182-
docker pull ghcr.io/socketdev/socket-basics:3.3.0
182+
docker pull ghcr.io/socketdev/socket-basics:3.4.0
183183
184184
# Run scan
185-
docker run --rm -v "$PWD:/workspace" ghcr.io/socketdev/socket-basics:3.3.0 \
185+
docker run --rm -v "$PWD:/workspace" ghcr.io/socketdev/socket-basics:3.4.0 \
186186
--workspace /workspace \
187187
--python \
188188
--secrets \

‎action.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ author: "Socket"
44

55
runs:
66
using: "docker"
7-
image: "docker://ghcr.io/socketdev/socket-basics:3.3.0"
7+
image: "docker://ghcr.io/socketdev/socket-basics:3.4.0"
88
env:
99
# Core GitHub variables (these are automatically available, but we explicitly pass GITHUB_TOKEN)
1010
GITHUB_TOKEN: ${{ inputs.github_token }}

‎docs/github-action.md‎

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ jobs:
4343
steps:
4444
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
4545
- name: Run Socket Basics
46-
uses: SocketDev/socket-basics@v3.3.0
46+
uses: SocketDev/socket-basics@v3.4.0
4747
env:
4848
GITHUB_PR_NUMBER: ${{ github.event.pull_request.number || github.event.issue.number }}
4949
with:
@@ -57,7 +57,7 @@ With just your `SOCKET_SECURITY_API_KEY`, all scanning configurations are manage
5757

5858
### How the action is currently built
5959

60-
When you reference `uses: SocketDev/socket-basics@v3.3.0`, GitHub Actions pulls the
60+
When you reference `uses: SocketDev/socket-basics@v3.4.0`, GitHub Actions pulls the
6161
pre-built image referenced by [`action.yml`](../action.yml). The historical multi-stage
6262
Docker build still matters for maintainers because it determines what lands in the
6363
published image:
@@ -75,7 +75,7 @@ Socket Basics from source in every workflow run.
7575
### Pre-built image
7676

7777
Starting with v2, the action pulls a pre-built image from GHCR rather than
78-
building from source on every run. Pinning to a specific version tag (e.g. `@v3.3.0`)
78+
building from source on every run. Pinning to a specific version tag (e.g. `@v3.4.0`)
7979
means the action starts in seconds — the image is built, integration-tested, and
8080
published before the release tag is ever created.
8181

@@ -85,7 +85,7 @@ If you run socket-basics in other CI systems (Jenkins, GitLab, CircleCI, etc.) o
8585
as a standalone `docker run`, pull the pre-built image directly:
8686

8787
```bash
88-
docker pull ghcr.io/socketdev/socket-basics:3.3.0
88+
docker pull ghcr.io/socketdev/socket-basics:3.4.0
8989
```
9090

9191
See [Local Docker Installation](local-install-docker.md) for usage examples.
@@ -101,7 +101,7 @@ is immediately affected. We've seen this happen across the ecosystem:
101101
publish `:latest`/`:latest-heavy` Docker aliases as an onboarding
102102
convenience, but treat them as exactly that — production pipelines should
103103
pin an exact version or digest.)
104-
- **Version tags** (`@v3.3.0`) are better, but tags are mutable by default.
104+
- **Version tags** (`@v3.4.0`) are better, but tags are mutable by default.
105105
A tag can be deleted and recreated pointing at a different commit. There are
106106
documented cases of this happening — maliciously and accidentally.
107107
- **Commit SHAs** are the only truly immutable reference. A SHA cannot be
@@ -126,14 +126,14 @@ The only truly immutable reference. Dependabot keeps it current automatically.
126126
```yaml
127127
- name: Run Socket Basics
128128
# Dependabot keeps this SHA up to date — see .github/dependabot.yml setup below.
129-
uses: SocketDev/socket-basics@<sha> # v3.3.0
129+
uses: SocketDev/socket-basics@<sha> # v3.4.0
130130
with:
131131
socket_security_api_key: ${{ secrets.SOCKET_SECURITY_API_KEY }}
132132
```
133133

134134
Get the SHA for any release:
135135
```bash
136-
git ls-remote https://github.com/SocketDev/socket-basics refs/tags/v3.3.0
136+
git ls-remote https://github.com/SocketDev/socket-basics refs/tags/v3.4.0
137137
```
138138

139139
---
@@ -145,7 +145,7 @@ enforces tag protection rules). SHA pinning is still preferable for defence
145145
in depth.
146146

147147
```yaml
148-
- uses: SocketDev/socket-basics@v3.3.0
148+
- uses: SocketDev/socket-basics@v3.4.0
149149
with:
150150
socket_security_api_key: ${{ secrets.SOCKET_SECURITY_API_KEY }}
151151
```
@@ -166,7 +166,7 @@ updates:
166166
```
167167

168168
Dependabot opens a PR for each new release, updating the SHA or version tag
169-
and keeping the `# v3.3.0` comment in sync. You review, approve, and merge
169+
and keeping the `# v3.4.0` comment in sync. You review, approve, and merge
170170
on your own schedule — automated upgrades with a human gate.
171171

172172
---
@@ -176,7 +176,7 @@ on your own schedule — automated upgrades with a human gate.
176176
| Strategy | Immutable? | Auto-updates | Review gate |
177177
|---|---|---|---|
178178
| `@v2` floating tag | ❌ (not published) | — | — |
179-
| `@v3.3.0` + Dependabot | ✅ (tag protection enforced) | Yes (weekly PR) | Yes |
179+
| `@v3.4.0` + Dependabot | ✅ (tag protection enforced) | Yes (weekly PR) | Yes |
180180
| `@<sha>` + Dependabot | ✅ always | Yes (weekly PR) | Yes |
181181

182182
## Basic Configuration
@@ -217,7 +217,7 @@ Include these in your workflow's `jobs.<job_id>.permissions` section.
217217

218218
**SAST (Static Analysis):**
219219
```yaml
220-
- uses: SocketDev/socket-basics@v3.3.0
220+
- uses: SocketDev/socket-basics@v3.4.0
221221
with:
222222
github_token: ${{ secrets.GITHUB_TOKEN }}
223223
# Enable SAST for specific languages
@@ -231,7 +231,7 @@ Include these in your workflow's `jobs.<job_id>.permissions` section.
231231

232232
**Secret Scanning:**
233233
```yaml
234-
- uses: SocketDev/socket-basics@v3.3.0
234+
- uses: SocketDev/socket-basics@v3.4.0
235235
with:
236236
github_token: ${{ secrets.GITHUB_TOKEN }}
237237
secret_scanning_enabled: 'true'
@@ -251,7 +251,7 @@ Include these in your workflow's `jobs.<job_id>.permissions` section.
251251

252252
**Container Scanning:**
253253
```yaml
254-
- uses: SocketDev/socket-basics@v3.3.0
254+
- uses: SocketDev/socket-basics@v3.4.0
255255
with:
256256
github_token: ${{ secrets.GITHUB_TOKEN }}
257257
# Listing images or Dockerfiles auto-enables the matching Trivy scan.
@@ -271,7 +271,7 @@ Include these in your workflow's `jobs.<job_id>.permissions` section.
271271
272272
**Socket Tier 1 Reachability:**
273273
```yaml
274-
- uses: SocketDev/socket-basics@v3.3.0
274+
- uses: SocketDev/socket-basics@v3.4.0
275275
with:
276276
github_token: ${{ secrets.GITHUB_TOKEN }}
277277
socket_tier_1_enabled: 'true'
@@ -280,7 +280,7 @@ Include these in your workflow's `jobs.<job_id>.permissions` section.
280280
### Output Configuration
281281
282282
```yaml
283-
- uses: SocketDev/socket-basics@v3.3.0
283+
- uses: SocketDev/socket-basics@v3.4.0
284284
with:
285285
github_token: ${{ secrets.GITHUB_TOKEN }}
286286
python_sast_enabled: 'true'
@@ -318,7 +318,7 @@ jobs:
318318
fetch-depth: 0
319319
320320
- name: Run Socket Basics (changed files only)
321-
uses: SocketDev/socket-basics@v3.3.0
321+
uses: SocketDev/socket-basics@v3.4.0
322322
env:
323323
GITHUB_PR_NUMBER: ${{ github.event.pull_request.number }}
324324
with:
@@ -447,7 +447,7 @@ Configure Socket Basics centrally from the [Socket Dashboard](https://socket.dev
447447

448448
**Enable in workflow:**
449449
```yaml
450-
- uses: SocketDev/socket-basics@v3.3.0
450+
- uses: SocketDev/socket-basics@v3.4.0
451451
env:
452452
GITHUB_PR_NUMBER: ${{ github.event.pull_request.number || github.event.issue.number }}
453453
with:
@@ -460,7 +460,7 @@ Configure Socket Basics centrally from the [Socket Dashboard](https://socket.dev
460460
> [!NOTE]
461461
> You can also pass credentials using environment variables instead of the `with:` section:
462462
> ```yaml
463-
> - uses: SocketDev/socket-basics@v3.3.0
463+
> - uses: SocketDev/socket-basics@v3.4.0
464464
> env:
465465
> SOCKET_SECURITY_API_KEY: ${{ secrets.SOCKET_SECURITY_API_KEY }}
466466
> with:
@@ -478,7 +478,7 @@ All notification integrations require Socket Enterprise.
478478

479479
**Slack Notifications:**
480480
```yaml
481-
- uses: SocketDev/socket-basics@v3.3.0
481+
- uses: SocketDev/socket-basics@v3.4.0
482482
with:
483483
github_token: ${{ secrets.GITHUB_TOKEN }}
484484
socket_org: ${{ secrets.SOCKET_ORG }}
@@ -490,7 +490,7 @@ All notification integrations require Socket Enterprise.
490490

491491
**Jira Issue Creation:**
492492
```yaml
493-
- uses: SocketDev/socket-basics@v3.3.0
493+
- uses: SocketDev/socket-basics@v3.4.0
494494
with:
495495
github_token: ${{ secrets.GITHUB_TOKEN }}
496496
socket_org: ${{ secrets.SOCKET_ORG }}
@@ -505,7 +505,7 @@ All notification integrations require Socket Enterprise.
505505

506506
**Microsoft Teams:**
507507
```yaml
508-
- uses: SocketDev/socket-basics@v3.3.0
508+
- uses: SocketDev/socket-basics@v3.4.0
509509
with:
510510
github_token: ${{ secrets.GITHUB_TOKEN }}
511511
socket_org: ${{ secrets.SOCKET_ORG }}
@@ -517,7 +517,7 @@ All notification integrations require Socket Enterprise.
517517

518518
**Generic Webhook:**
519519
```yaml
520-
- uses: SocketDev/socket-basics@v3.3.0
520+
- uses: SocketDev/socket-basics@v3.4.0
521521
with:
522522
github_token: ${{ secrets.GITHUB_TOKEN }}
523523
socket_org: ${{ secrets.SOCKET_ORG }}
@@ -529,7 +529,7 @@ All notification integrations require Socket Enterprise.
529529

530530
**SIEM Integration:**
531531
```yaml
532-
- uses: SocketDev/socket-basics@v3.3.0
532+
- uses: SocketDev/socket-basics@v3.4.0
533533
with:
534534
github_token: ${{ secrets.GITHUB_TOKEN }}
535535
socket_org: ${{ secrets.SOCKET_ORG }}
@@ -565,7 +565,7 @@ jobs:
565565
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
566566
567567
- name: Run Socket Basics
568-
uses: SocketDev/socket-basics@v3.3.0
568+
uses: SocketDev/socket-basics@v3.4.0
569569
env:
570570
GITHUB_PR_NUMBER: ${{ github.event.pull_request.number || github.event.issue.number }}
571571
with:
@@ -607,7 +607,7 @@ jobs:
607607
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
608608
609609
- name: Run Full Security Scan
610-
uses: SocketDev/socket-basics@v3.3.0
610+
uses: SocketDev/socket-basics@v3.4.0
611611
env:
612612
GITHUB_PR_NUMBER: ${{ github.event.pull_request.number || github.event.issue.number }}
613613
with:
@@ -666,7 +666,7 @@ jobs:
666666
run: docker build -t myapp:${{ github.sha }} .
667667
668668
- name: Run Socket Basics (image + Dockerfile scan)
669-
uses: SocketDev/socket-basics@v3.3.0
669+
uses: SocketDev/socket-basics@v3.4.0
670670
env:
671671
GITHUB_PR_NUMBER: ${{ github.event.pull_request.number }}
672672
with:
@@ -727,7 +727,7 @@ jobs:
727727
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
728728
729729
- name: Run Socket Basics
730-
uses: SocketDev/socket-basics@v3.3.0
730+
uses: SocketDev/socket-basics@v3.4.0
731731
env:
732732
GITHUB_PR_NUMBER: ${{ github.event.pull_request.number || github.event.issue.number }}
733733
with:
@@ -785,7 +785,7 @@ jobs:
785785
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
786786
787787
- name: Run Socket Basics
788-
uses: SocketDev/socket-basics@v3.3.0
788+
uses: SocketDev/socket-basics@v3.4.0
789789
env:
790790
GITHUB_PR_NUMBER: ${{ github.event.pull_request.number || github.event.issue.number }}
791791
with:
@@ -946,7 +946,7 @@ in the [name mapping](parameters.md#name-mapping).
946946
```yaml
947947
steps:
948948
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - Must be first
949-
- uses: SocketDev/socket-basics@v3.3.0
949+
- uses: SocketDev/socket-basics@v3.4.0
950950
```
951951

952952
### PR Comments Not Appearing

‎docs/github-pr-comment-guide.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ PR. This is for teams who want to review finding quality in the Socket dashboard
315315
first, without every PR growing a comment that developers have to scroll past.
316316
317317
```yaml
318-
- uses: SocketDev/socket-basics@v3.3.0
318+
- uses: SocketDev/socket-basics@v3.4.0
319319
with:
320320
socket_security_api_key: ${{ secrets.SOCKET_SECURITY_API_KEY }}
321321
github_token: ${{ secrets.GITHUB_TOKEN }}

0 commit comments

Comments
 (0)