Skip to content

feat(ci): sign Docker images with Sigstore cosign keyless OIDC - #435

Merged
ginccc merged 5 commits into
mainfrom
feat/signed-releases
Apr 22, 2026
Merged

feat(ci): sign Docker images with Sigstore cosign keyless OIDC#435
ginccc merged 5 commits into
mainfrom
feat/signed-releases

Conversation

@ginccc

@ginccc ginccc commented Apr 22, 2026

Copy link
Copy Markdown
Member

This pull request introduces cryptographic signing of Docker images using Sigstore cosign with keyless OIDC signing, enhancing the integrity and auditability of EDDI releases. The CI/CD pipeline is updated to sign all Docker images after pushing and to verify signatures as part of the smoke test. Comprehensive documentation is added to guide users on verifying image signatures and understanding the signing process.

CI/CD Pipeline Enhancements:

  • Added steps in .github/workflows/ci.yml to install cosign, sign Docker images after pushing to Docker Hub, and output the image digest for audit purposes. The workflow now grants the necessary OIDC permissions for keyless signing. [1] [2] [3]
  • Updated the smoke test job to install cosign and verify the Docker image signature using the workflow's OIDC identity, ensuring that only officially signed images are used in downstream jobs.

Documentation Updates:

  • Added a new docs/release-signing.md file detailing the release signing process, security properties, and verification instructions for users and auditors.
  • Updated SECURITY.md with a new section on Release Integrity, including a verification snippet and reference to the new documentation.
  • Linked the new release signing documentation in docs/SUMMARY.md and referenced it from docs/release-versioning.md. [1] [2]

Summary by CodeRabbit

  • New Features

    • Docker images are now cryptographically signed using Sigstore cosign with keyless OIDC authentication (v6.0.0+).
    • Added automated signature verification in the CI/CD pipeline before running tests.
  • Documentation

    • Added comprehensive guides for verifying Docker image authenticity and release integrity using cosign.

@coderabbitai

coderabbitai Bot commented Apr 22, 2026

Copy link
Copy Markdown
Contributor

Warning

Rate limit exceeded

@ginccc has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 4 minutes and 51 seconds before requesting another review.

Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 4 minutes and 51 seconds.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: cea85c9b-d442-4355-a504-df39301500f2

📥 Commits

Reviewing files that changed from the base of the PR and between 0cc0dec and 2d4d64b.

⛔ Files ignored due to path filters (1)
  • src/main/resources/initial-agents/Agent+Father-6.0.2.zip is excluded by !**/*.zip
📒 Files selected for processing (40)
  • .github/workflows/ci.yml
  • AGENTS.md
  • README.md
  • SECURITY.md
  • docs/SUMMARY.md
  • docs/release-signing.md
  • docs/release-versioning.md
  • helm/eddi/Chart.yaml
  • k8s/base/eddi-deployment.yaml
  • k8s/quickstart.yaml
  • pom.xml
  • src/main/docker/Dockerfile.jvm
  • src/main/resources/META-INF/resources/assets/cssMode-bleQOjdi.js
  • src/main/resources/META-INF/resources/assets/freemarker2-BEWi87mr.js
  • src/main/resources/META-INF/resources/assets/handlebars-XyXQfL3x.js
  • src/main/resources/META-INF/resources/assets/html-B4BIlPN9.js
  • src/main/resources/META-INF/resources/assets/htmlMode-BBJ5cMDq.js
  • src/main/resources/META-INF/resources/assets/index-ChKgok0X.css
  • src/main/resources/META-INF/resources/assets/index-D18WDpqV.css
  • src/main/resources/META-INF/resources/assets/index-eFjULmej.js
  • src/main/resources/META-INF/resources/assets/javascript-DNVgvdr-.js
  • src/main/resources/META-INF/resources/assets/jsonMode-CIfAFeGG.js
  • src/main/resources/META-INF/resources/assets/liquid-CPQhgXmb.js
  • src/main/resources/META-INF/resources/assets/lspLanguageFeatures-feX9tGVn.js
  • src/main/resources/META-INF/resources/assets/mdx-CBpsxgVs.js
  • src/main/resources/META-INF/resources/assets/python-CCVX-dXh.js
  • src/main/resources/META-INF/resources/assets/razor-kk0qqIH0.js
  • src/main/resources/META-INF/resources/assets/tsMode-B_0MzGLH.js
  • src/main/resources/META-INF/resources/assets/typescript-gCP2lgX7.js
  • src/main/resources/META-INF/resources/assets/xml-BJiGN7aS.js
  • src/main/resources/META-INF/resources/assets/yaml-BlPaPCQA.js
  • src/main/resources/META-INF/resources/chat.html
  • src/main/resources/META-INF/resources/manage.html
  • src/main/resources/META-INF/resources/scripts/css/chat-ui.BZ_-cEHt.css
  • src/main/resources/META-INF/resources/scripts/js/chat-ui.C1ZI9geG.js
  • src/main/resources/META-INF/resources/scripts/js/chat-ui.CfhhYzkF.js
  • src/main/resources/META-INF/resources/scripts/js/chat-ui.DkbQxm6F.js
  • src/main/resources/META-INF/resources/scripts/js/chat-ui.I-HflYGT.js
  • src/main/resources/application.properties
  • src/main/resources/initial-agents/available_agents.txt
📝 Walkthrough

Walkthrough

This pull request adds cryptographic signing and verification for Docker images using Sigstore cosign with keyless OIDC authentication. The CI/CD workflow is updated to sign released images and verify signatures during smoke tests, while documentation is expanded to guide users and maintainers through the signing and verification processes.

Changes

Cohort / File(s) Summary
CI/CD Workflow Configuration
.github/workflows/ci.yml
Added job-level OIDC permissions, extended Docker push step with digest capture via docker inspect, introduced cosign installation and image signing step (covering primary tag, semver aliases, and :latest), and added signature verification step in smoke tests using OIDC certificate identity validation.
Security & Release Documentation
SECURITY.md, docs/release-signing.md, docs/release-versioning.md
Added "Release Integrity" section in security policy describing cosign keyless signing; created comprehensive release signing guide covering installation, verification by tag/digest, Rekor inspection, and Git tag signing with GPG/SSH; updated release versioning doc with signing section and Git tag instructions.
Documentation Index
docs/SUMMARY.md
Added single table-of-contents entry linking to new release-signing.md documentation under "Deployment & Infrastructure" section.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

🐰 A rabbit signs with cosign's might,
Keyless OIDC—no keys in sight!
Sigstore whispers, Rekor records all,
Docker images verified, standing tall.
From workflow to docs, integrity's call! 🔐

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat(ci): sign Docker images with Sigstore cosign keyless OIDC' directly and clearly summarizes the main change: adding cryptographic signing of Docker images using Sigstore cosign with keyless OIDC in the CI/CD pipeline.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/signed-releases

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 and usage tips.

@github-actions

github-actions Bot commented Apr 22, 2026

Copy link
Copy Markdown

⚠️ Deprecation Warning: The deny-licenses option is deprecated for possible removal in the next major release. For more information, see issue 997.

Dependency Review

The following issues were found:
  • ✅ 0 vulnerable package(s)
  • ✅ 0 package(s) with incompatible licenses
  • ✅ 0 package(s) with invalid SPDX license definitions
  • ⚠️ 2 package(s) with unknown licenses.
See the Details below.

License Issues

pom.xml

PackageVersionLicenseIssue Type
io.quarkus.platform:quarkus-bom3.34.5NullUnknown License
io.quarkus.platform:quarkus-maven-plugin3.34.5NullUnknown License
Denied Licenses: GPL-3.0, AGPL-3.0

OpenSSF Scorecard

PackageVersionScoreDetails
actions/sigstore/cosign-installer cad07c2e89fa2edd6e2d7bab4c1aa38e53f76003 🟢 7.8
Details
CheckScoreReason
Code-Review🟢 10all changesets reviewed
Binary-Artifacts🟢 10no binaries found in the repo
Maintained🟢 88 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 8
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Packaging⚠️ -1packaging workflow not detected
Token-Permissions🟢 10GitHub workflow tokens follow principle of least privilege
Pinned-Dependencies🟢 10all dependencies are pinned
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
Security-Policy🟢 10security policy file detected
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
maven/io.quarkus.platform:quarkus-bom 3.34.5 🟢 6.4
Details
CheckScoreReason
Maintained🟢 1030 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Code-Review🟢 4Found 4/10 approved changesets -- score normalized to 4
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Token-Permissions🟢 9detected GitHub workflow tokens with excessive permissions
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Binary-Artifacts🟢 10no binaries found in the repo
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Pinned-Dependencies🟢 5dependency not pinned by hash detected -- score normalized to 5
Security-Policy⚠️ 0security policy file not detected
Packaging🟢 10packaging workflow detected
Branch-Protection🟢 6branch protection is not maximal on development and all release branches
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
maven/io.quarkus.platform:quarkus-maven-plugin 3.34.5 🟢 6.4
Details
CheckScoreReason
Maintained🟢 1030 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Code-Review🟢 4Found 4/10 approved changesets -- score normalized to 4
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Token-Permissions🟢 9detected GitHub workflow tokens with excessive permissions
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Binary-Artifacts🟢 10no binaries found in the repo
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Pinned-Dependencies🟢 5dependency not pinned by hash detected -- score normalized to 5
Security-Policy⚠️ 0security policy file not detected
Packaging🟢 10packaging workflow detected
Branch-Protection🟢 6branch protection is not maximal on development and all release branches
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
maven/org.wiremock:wiremock-standalone 3.13.2 🟢 5.5
Details
CheckScoreReason
Code-Review🟢 5Found 2/4 approved changesets -- score normalized to 5
Maintained🟢 1030 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Binary-Artifacts🟢 6binaries present in source code
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
Security-Policy🟢 10security policy file detected
Packaging🟢 10packaging workflow detected
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0

Scanned Files

  • .github/workflows/ci.yml
  • pom.xml

Copilot AI 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.

Pull request overview

This PR adds Sigstore cosign keyless (OIDC) signing for Docker images produced by the GitHub Actions CI pipeline, and documents how users can verify image signatures to improve release integrity.

Changes:

  • Update CI workflow to install cosign, sign pushed Docker images using GitHub OIDC, and verify signatures during smoke tests.
  • Add new documentation explaining the signing model and verification commands.
  • Link signing documentation from existing release/versioning and security docs.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
.github/workflows/ci.yml Adds cosign install/sign steps after Docker push and signature verification in smoke-test; exports image digest output.
docs/release-signing.md New guide describing signing flow and verification commands.
SECURITY.md Adds “Release Integrity” section with cosign verification snippet.
docs/SUMMARY.md Adds the new signing doc to the docs table of contents.
docs/release-versioning.md References signing as part of the release process and recommends signed git tags.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread .github/workflows/ci.yml Outdated
Comment thread .github/workflows/ci.yml Outdated
Comment thread .github/workflows/ci.yml Outdated
Comment thread SECURITY.md Outdated
Comment thread docs/release-signing.md
Comment thread docs/release-signing.md Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🧹 Nitpick comments (1)
.github/workflows/ci.yml (1)

487-537: Consider signing by digest instead of by tag to avoid race conditions and align with cosign best practices.

cosign sign ${DOCKER_IMAGE}:${PRIMARY_TAG} resolves the tag to a manifest digest at sign time. Between docker push (line 494) and cosign sign (line 522), the tag could in principle be overwritten—or on re-run, point to a different manifest—causing you to sign the wrong artifact. Signing latest, major, and minor aliases by tag has the same caveat. Additionally, cosign v3.x emits a warning when signing by tag; the documented recommendation is to sign by digest.

Since you already capture DIGEST at line 504, the cleanest solution is to sign that digest once: cosign sign --yes ${DOCKER_IMAGE}@${DIGEST}. The signature is cryptographically bound to the manifest digest, so verification succeeds for any tag pointing to that digest (primary, minor/major aliases, and latest all resolve to the same digest). This also eliminates the conditional signing logic and removes the cosign warning.

♻️ Proposed refactor: sign the digest once
       - name: Push to Docker Hub
         id: push
         run: |
           PRIMARY_TAG="${{ steps.meta.outputs.primary-tag }}"
           IS_RELEASE="${{ steps.meta.outputs.is-release }}"
           IS_STABLE="${{ steps.meta.outputs.is-stable }}"

           docker push ${DOCKER_IMAGE}:${PRIMARY_TAG}
           if [[ "$IS_STABLE" == "true" ]]; then
             docker push ${DOCKER_IMAGE}:${{ steps.meta.outputs.minor-tag }}
             docker push ${DOCKER_IMAGE}:${{ steps.meta.outputs.major-tag }}
           fi
           if [[ "$IS_RELEASE" == "true" ]]; then
             docker push ${DOCKER_IMAGE}:latest
           fi

-          # Capture the image digest for audit logging (non-blocking)
-          DIGEST=$(docker inspect --format='{{index .RepoDigests 0}}' ${DOCKER_IMAGE}:${PRIMARY_TAG} 2>/dev/null | cut -d@ -f2 || true)
+          # Capture the image digest (required for sign-by-digest below)
+          DIGEST=$(docker inspect --format='{{index .RepoDigests 0}}' ${DOCKER_IMAGE}:${PRIMARY_TAG} | cut -d@ -f2)
+          if [ -z "$DIGEST" ]; then
+            echo "::error::Failed to resolve digest for ${DOCKER_IMAGE}:${PRIMARY_TAG}"
+            exit 1
+          fi
           echo "digest=${DIGEST}" >> $GITHUB_OUTPUT

           echo "### ✅ Pushed to Docker Hub" >> $GITHUB_STEP_SUMMARY
-          if [ -n "$DIGEST" ]; then
-            echo "- Digest: \`${DIGEST}\`" >> $GITHUB_STEP_SUMMARY
-          fi
+          echo "- Digest: \`${DIGEST}\`" >> $GITHUB_STEP_SUMMARY

       - name: Install cosign
         uses: sigstore/cosign-installer@cad07c2e89fa2edd6e2d7bab4c1aa38e53f76003 # v4.1.1

       - name: Sign Docker images (keyless)
         run: |
-          PRIMARY_TAG="${{ steps.meta.outputs.primary-tag }}"
-          IS_RELEASE="${{ steps.meta.outputs.is-release }}"
-          IS_STABLE="${{ steps.meta.outputs.is-stable }}"
-
-          echo "=== Signing ${DOCKER_IMAGE}:${PRIMARY_TAG} ==="
-          cosign sign --yes ${DOCKER_IMAGE}:${PRIMARY_TAG}
-
-          if [[ "$IS_STABLE" == "true" ]]; then
-            echo "=== Signing semver aliases ==="
-            cosign sign --yes ${DOCKER_IMAGE}:${{ steps.meta.outputs.minor-tag }}
-            cosign sign --yes ${DOCKER_IMAGE}:${{ steps.meta.outputs.major-tag }}
-          fi
-
-          if [[ "$IS_RELEASE" == "true" ]]; then
-            echo "=== Signing latest ==="
-            cosign sign --yes ${DOCKER_IMAGE}:latest
-          fi
+          DIGEST="${{ steps.push.outputs.digest }}"
+          echo "=== Signing ${DOCKER_IMAGE}@${DIGEST} ==="
+          cosign sign --yes ${DOCKER_IMAGE}@${DIGEST}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/ci.yml around lines 487 - 537, The workflow signs images
by tag (cosign sign ${DOCKER_IMAGE}:${PRIMARY_TAG}) which can race if tags move;
instead use the captured DIGEST and sign the immutable manifest: after computing
DIGEST (variable DIGEST from the "Push to Docker Hub" step) call cosign sign
against ${DOCKER_IMAGE}@${DIGEST} (use that single sign invocation and remove
per-tag signing of ${PRIMARY_TAG}, minor/major aliases, and latest), and update
the verification/help text to reference the image@digest form so signatures are
cryptographically bound to the pushed manifest.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.github/workflows/ci.yml:
- Around line 549-556: The cosign verify invocation using
--certificate-identity-regexp currently passes an unescaped, unanchored Go
regex; change the regexp passed to --certificate-identity-regexp in the cosign
verify step so all literal dots are escaped, the pattern is anchored (start and
end) and it optionally allows the GitHub Actions subject suffix (an `@ref` tail),
then update the same pattern in the related docs/snippets (SECURITY.md,
docs/release-signing.md and the sign step summary) so they match the hardened,
anchored regexp; the change should be made at the cosign verify command that
contains --certificate-oidc-issuer and --certificate-identity-regexp in the
workflow.

In `@docs/release-signing.md`:
- Around line 68-76: Replace the misleading Linux section that currently
recommends "go install github.com/sigstore/cosign/v2/cmd/cosign@latest" under
the "# Linux" heading with instructions that point users to download the
official release binary or use a distro package if available; specifically,
remove the Go-based install suggestion and instead mention the GitHub releases
page for prebuilt Linux binaries and note package manager options (e.g.,
apt/yum/homebrew on Linux) as alternatives, plus a short note that "go install"
requires a Go toolchain and is not Linux-specific.
- Around line 115-121: The Rekor search example is incorrect for GitHub Actions
keyless signatures because the certificate SAN uses a URI, not an email; update
the "Inspect the Transparency Log" section to remove or replace the email-based
URL (https://search.sigstore.dev/?email=github.com/labsai/EDDI) and either (a)
provide a URI-based Rekor Search query if supported (matching the Fulcio SAN
format like https://github.com/labsai/EDDI/.github/workflows/ci.yml@refs/tags/…)
or (b) drop the web-search example and instead show the direct retrieval
commands using cosign (e.g., reference the cosign verify --output-file and
cosign tree commands) so readers can reliably locate the Rekor entry for GitHub
Actions keyless signatures.

---

Nitpick comments:
In @.github/workflows/ci.yml:
- Around line 487-537: The workflow signs images by tag (cosign sign
${DOCKER_IMAGE}:${PRIMARY_TAG}) which can race if tags move; instead use the
captured DIGEST and sign the immutable manifest: after computing DIGEST
(variable DIGEST from the "Push to Docker Hub" step) call cosign sign against
${DOCKER_IMAGE}@${DIGEST} (use that single sign invocation and remove per-tag
signing of ${PRIMARY_TAG}, minor/major aliases, and latest), and update the
verification/help text to reference the image@digest form so signatures are
cryptographically bound to the pushed manifest.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: ea1477ea-607c-4f77-855c-383a317a67b2

📥 Commits

Reviewing files that changed from the base of the PR and between d551bbd and 0cc0dec.

📒 Files selected for processing (5)
  • .github/workflows/ci.yml
  • SECURITY.md
  • docs/SUMMARY.md
  • docs/release-signing.md
  • docs/release-versioning.md

Comment thread .github/workflows/ci.yml
Comment thread docs/release-signing.md
Comment thread docs/release-signing.md Outdated
@ginccc
ginccc force-pushed the feat/signed-releases branch from 0cc0dec to 33a9d1f Compare April 22, 2026 19:30
- Add cosign sign step to docker job (keyless via GitHub OIDC)
- Add cosign verify step to smoke-test as regression gate
- Scope id-token:write to docker job only (least privilege)
- Pin cosign-installer to v4.1.1 by SHA
- Strict anchored regexp for certificate identity verification
- Add docs/release-signing.md with user verification guide
- Update SECURITY.md, release-versioning.md, SUMMARY.md
- Satisfies OpenSSF Silver signed_releases + version_tags_signed
@ginccc
ginccc force-pushed the feat/signed-releases branch from 33a9d1f to 764bf47 Compare April 22, 2026 19:32
@ginccc ginccc self-assigned this Apr 22, 2026
ginccc added 4 commits April 22, 2026 21:47
…WireMock 3.13.2

- Dockerfile.jvm: update ubi9/openjdk-25-runtime digest to fix HIGH
  CVE-2026-4424 (libarchive heap OOB read in RAR processing)
- pom.xml: Quarkus 3.34.3 -> 3.34.5, WireMock 3.13.0 -> 3.13.2
- AGENTS.md: add Docker & Container Security section with Trivy CVE
  remediation procedure, add Dockerfile.jvm to Key Files table
- README.md: update test badge to 5,100+
- pom.xml, application.properties, Dockerfile.jvm
- README.md, Helm Chart, K8s manifests
- Agent Father ZIP renamed to 6.0.2
@ginccc
ginccc merged commit 7f38e3a into main Apr 22, 2026
22 checks passed
@ginccc
ginccc deleted the feat/signed-releases branch April 22, 2026 21:50
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.

2 participants