This commit is contained in:
Krishna Manchikalapudi 2025-09-26 15:43:21 -07:00
parent 7b58d50ad8
commit f4a678b099
19 changed files with 250 additions and 17 deletions

View file

@ -0,0 +1,174 @@
name: "Frogbot: Scan and Fix"
# refer https://docs.jfrog-applications.jfrog.io/jfrog-applications/frogbot/setup-frogbot/setup-frogbot-using-github-actions
on: push
permissions:
pull-requests: write
contents: write
security-events: write
# [Mandatory If using OIDC authentication protocol instead of JF_ACCESS_TOKEN]
id-token: write
jobs:
jfrog-bot-scan:
runs-on: ubuntu-latest
strategy:
matrix:
# The repository scanning will be triggered periodically on the following branches.
branch: [ "main" ]
# A pull request needs to be approved before Frogbot scans it. Any GitHub user who is associated with the
# "frogbot" GitHub environment can approve the pull request to be scanned.
environment: frogbot
steps:
- name: "Summary"
run: |
echo "# :frog: Prestep Summary :pushpin:" >> $GITHUB_STEP_SUMMARY
echo " " >> $GITHUB_STEP_SUMMARY
echo " " >> $GITHUB_STEP_SUMMARY
echo " - NodeJs Info: " >> $GITHUB_STEP_SUMMARY
echo " - node: ${{ env.NODE_VER }} " >> $GITHUB_STEP_SUMMARY
echo " - npm: ${{ env.NPM_VER }} " >> $GITHUB_STEP_SUMMARY
echo " " >> $GITHUB_STEP_SUMMARY
- uses: actions/checkout@v4
# - name: NodeJS upgrade
# uses: actions/setup-node@v4 # ref: https://github.com/actions/setup-node
# with:
# node-version: 20
# ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION
# - name: After NodeJS upgrade
# run: |
# # NodeJS
# njs_u_v=`node -v`
# echo "NODE_VER=${njs_u_v}" >> $GITHUB_ENV
# npm_u_v=`npm -v`
# echo "NPM_VER=${npm_u_v}" >> $GITHUB_ENV
- uses: jfrog/frogbot@v2 # ref: https://github.com/jfrog/frogbot
env:
JF_URL: https://${{ vars.JF_NAME }}.jfrog.io
JFROG_CLI_LOG_LEVEL: "DEBUG"
# [Mandatory]
# The GitHub token is automatically generated for the job
JF_GIT_TOKEN: ${{ secrets.GITHUB_TOKEN }}
#JF_GIT_BASE_BRANCH: ${{ matrix.branch }}
ACTIONS_ALLOW_UNSECURE_NODE_VERSION: true # Allow secure Node fallback
# [Optional, default: https://api.github.com]
# API endpoint to GitHub
# JF_GIT_API_ENDPOINT: https://github.example.com
# [Optional]
# By default, the Frogbot workflows download the Frogbot executable as well as other tools
# needed from https://releases.jfrog.io
# If the machine that runs Frogbot has no access to the internet, follow these steps to allow the
# executable to be downloaded from an Artifactory instance, which the machine has access to:
#
# 1. Login to the Artifactory UI, with a user who has admin credentials.
# 2. Create a Remote Repository with the following properties set.
# Under the 'Basic' tab:
# Package Type: Generic
# URL: https://releases.jfrog.io
# Under the 'Advanced' tab:
# Uncheck the 'Store Artifacts Locally' option
# 3. Set the value of the 'JF_RELEASES_REPO' variable with the Repository Key you created.
# JF_RELEASES_REPO: ""
# [Optional]
# Configure the SMTP server to enable Frogbot to send emails with detected secrets in pull request scans.
# SMTP server URL including should the relevant port: (Example: smtp.server.com:8080)
# JF_SMTP_SERVER: ""
# [Mandatory if JF_SMTP_SERVER is set]
# The username required for authenticating with the SMTP server.
# JF_SMTP_USER: ""
# [Mandatory if JF_SMTP_SERVER is set]
# The password associated with the username required for authentication with the SMTP server.
# JF_SMTP_PASSWORD: ""
##########################################################################
## If your project uses a 'frogbot-config.yml' file, you can define ##
## the following variables inside the file, instead of here. ##
##########################################################################
# [Mandatory if the two conditions below are met]
# 1. The project uses yarn 2, NuGet or .NET Core to download its dependencies
# 2. The `installCommand` variable isn't set in your frogbot-config.yml file.
#
# The command that installs the project dependencies (e.g "nuget restore")
# JF_INSTALL_DEPS_CMD: ""
# [Optional, default: "."]
# Relative path to the root of the project in the Git repository. If left empty (without providing "." yourself as default), a recursive scan is triggered from the root directory of the project.
JF_WORKING_DIR: src/main/java
# [Default: "*git*;*node_modules*;*target*;*venv*;*test*"]
# List of exclusion patterns (utilizing wildcards) for excluding paths in the source code of the Git repository during SCA scans.
JF_PATH_EXCLUSIONS: "*git*;*node_modules*;*target*;*venv*;*test*"
# [Optional]
# Xray Watches. Learn more about them here: https://www.jfrog.com/confluence/display/JFROG/Configuring+Xray+Watches
# JF_WATCHES: <watch-1>,<watch-2>...<watch-n>
# [Optional]
# JFrog project. Learn more about it here: https://www.jfrog.com/confluence/display/JFROG/Projects
# JF_PROJECT: <project-key>
# [Optional, default: "FALSE"]
# Displays all existing vulnerabilities, including the ones that were added by the pull request.
JF_INCLUDE_ALL_VULNERABILITIES: "TRUE"
# [Optional, default: "FALSE"]
# When adding new comments on pull requests, keep old comments that were added by previous scans.
JF_AVOID_PREVIOUS_PR_COMMENTS_DELETION: "TRUE"
# [Optional, default: "TRUE"]
# Fails the Frogbot task if any security issue is found.
JF_FAIL: "FALSE"
# [Optional]
# Frogbot will download the project dependencies if they're not cached locally. To download the
# dependencies from a virtual repository in Artifactory, set the name of the repository. There's no
# need to set this value, if it is set in the frogbot-config.yml file.
# JF_DEPS_REPO: ""
# [Optional, Default: "FALSE"]
# If TRUE, Frogbot creates a single pull request with all the fixes.
# If false, Frogbot creates a separate pull request for each fix.
# JF_GIT_AGGREGATE_FIXES: "FALSE"
JF_GIT_AGGREGATE_FIXES: "TRUE"
# [Optional, Default: "FALSE"]
# Handle vulnerabilities with fix versions only
# JF_FIXABLE_ONLY: "TRUE"
# [Optional]
# Set the minimum severity for vulnerabilities that should be fixed and commented on in pull requests
# The following values are accepted: Low, Medium, High or Critical
JF_MIN_SEVERITY: "Low"
# [Optional]
# List of comma-separated(,) email addresses to receive email notifications about secrets
# detected during pull request scanning. The notification is also sent to the email set
# in the committer git profile regardless of whether this variable is set or not.
# JF_EMAIL_RECEIVERS: ${{ vars.JOB_EMAILS }}
# [Optional]
# Set the list of allowed licenses
# The full list of licenses can be found in:
# https://github.com/jfrog/frogbot/blob/master/docs/licenses.md
# JF_ALLOWED_LICENSES: "MIT, Apache-2.0"
# [Optional]
# Avoid adding extra info to pull request comments. that isn't related to the scan findings.
# JF_AVOID_EXTRA_MESSAGES: "TRUE"
# [Optional]
# Add a title to pull request comments generated by Frogbot.
# JF_PR_COMMENT_TITLE: ""
# [Mandatory if using OIDC authentication protocol instead of JF_ACCESS_TOKEN]
# Insert to oidc-provider-name the 'Provider Name' defined in the OIDC integration configured in the JPD
with:
oidc-provider-name: ${{ vars.JF_OIDC_PROVIDER_NAME }}

View file

@ -1,6 +1,5 @@
name: "JF-CLI: JAVA"
on: push
permissions:
actions: read # for detecting the Github Actions environment.
id-token: write # for creating OIDC tokens for signing.
@ -143,14 +142,14 @@ jobs:
# Package
- name: "Curation: audit" # https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/cli-for-jfrog-security/cli-for-jfrog-curation
timeout-minutes: 15 # ref https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#jobsjob_idstepstimeout-minutes
continue-on-error: true # ref: https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#jobsjob_idstepscontinue-on-error
# continue-on-error: true # ref: https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#jobsjob_idstepscontinue-on-error
run: |
jf ca --format=table --threads=100
- name: "Xray & JAS: Audit" # https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/cli-for-jfrog-security
# scan for Xray: Source code dependencies and JAS: Secrets Detection, IaC, Vulnerabilities Contextual Analysis 'SAST'
timeout-minutes: 15 # ref: https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#jobsjob_idstepstimeout-minutes
continue-on-error: true # ref: https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#jobsjob_idstepscontinue-on-error
# continue-on-error: true # ref: https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#jobsjob_idstepscontinue-on-error
run: |
jf audit --mvn --sast=true --sca=true --secrets=true --licenses=true --validate-secrets=true --vuln=true --format=table --extended-table=true --threads=100 --fail=false
@ -182,9 +181,8 @@ jobs:
# Evidence - Package references
# Docs# https://jfrog.com/help/r/jfrog-artifactory-documentation/evidence-management
# CLI# https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/binaries-management-with-jfrog-artifactory/evidence-service
# jf evd create --predicate ./evd-package.json --predicate-type https://jfrog.com/evidence/build-signature/v1 --package-name spring-petclinic --package-version evd.2025-01-31-14-53 --package-repo-name "krishnam-docker-virtual" --key ~/.ssh/jfrog_evd_public.pem --key-alias "KRISHNAM_JFROG_EVD_PUBLICKEY"
- name: "Evidence: Package"
continue-on-error: true
# continue-on-error: true
run: |
echo '{ "actor": "${{github.actor}}", "pipeline": "github actions","build_name": "${{env.BUILD_NAME}}", "build_id": "${{env.BUILD_ID}}", "evd":"Evidence-Package", "package":"${{env.RT_REPO_DOCKER_URL}}" }' > ./${{env.EVIDENCE_SPEC_JSON}}
cat ./${{env.EVIDENCE_SPEC_JSON}}
@ -235,7 +233,7 @@ jobs:
# Docs# https://jfrog.com/help/r/jfrog-artifactory-documentation/evidence-management
# CLI# https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/binaries-management-with-jfrog-artifactory/evidence-service
- name: "Evidence: Build Publish"
continue-on-error: true
# continue-on-error: true
run: |
echo '{ "actor": "${{github.actor}}", "pipeline": "github actions","build_name": "${{env.BUILD_NAME}}", "build_id": "${{env.BUILD_ID}}", "evd": "Evidence-BuildPublish"}' > ./${{env.EVIDENCE_SPEC_JSON}}
cat ./${{env.EVIDENCE_SPEC_JSON}}
@ -299,11 +297,15 @@ jobs:
cat ${{env.RBv2_SPEC_JSON}}
jf rbc ${{env.BUILD_NAME}} ${{env.BUILD_ID}} --sync=true --signing-key=${{secrets.RBV2_SIGNING_KEY}} --spec=${{env.RBv2_SPEC_JSON}}
- name: "RLM: Xray Indexing"
run: |
jf xr curl "/api/v1/binMgr/release_bundle_v2" -H 'Content-Type: application/json' -d "{\"names\": [\"${{env.BUILD_NAME}}\"] }"
# Evidence - RBv2 new references
# Docs# https://jfrog.com/help/r/jfrog-artifactory-documentation/evidence-management
# CLI# https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/binaries-management-with-jfrog-artifactory/evidence-service
- name: "Evidence: RBv2 state NEW"
continue-on-error: true
# continue-on-error: true
env:
# https://psazuse.jfrog.io/ui/artifactory/lifecycle/?bundleName=spring-petclinic&bundleToFlash=spring-petclinic&repositoryKey=release-bundles-v2&activeKanbanTab=promotion
NAME_LINK: "${{env.JF_RT_URL}}/ui/artifactory/lifecycle/?bundleName=${{env.BUILD_NAME}}&bundleToFlash=${{env.BUILD_NAME}}&repositoryKey=release-bundles-v2&activeKanbanTab=promotion"
@ -322,6 +324,7 @@ jobs:
RBv2_ENV_VAL: "DEV"
BUILD_ID: "psj-dkr-${{github.run_number}}"
RT_REPO_DEV_LOCAL: "springpetclinic-docker-dev-local"
TYPE_PROMOTE: "COPY"
defaults:
run:
working-directory: "${{env.DEFAULT_WORKSPACE}}"
@ -417,7 +420,7 @@ jobs:
jf evd create --release-bundle ${{env.BUILD_NAME}} --release-bundle-version ${{env.BUILD_ID}} --predicate ./${{env.EVIDENCE_SPEC_JSON}} --predicate-type https://jfrog.com/evidence/signature/v1 --key "${{secrets.KRISHNAM_JFROG_EVD_PRIVATEKEY}}" --key-alias ${{secrets.EVIDENCE_KEY_ALIAS}}
- name: "Optional: rbv2-summary"
continue-on-error: true
# continue-on-error: true
env:
NAME_LINK: "${{env.JF_RT_URL}}/ui/artifactory/lifecycle/?bundleName=${{env.BUILD_NAME}}&bundleToFlash=${{env.BUILD_NAME}}&repositoryKey=release-bundles-v2&activeKanbanTab=promotion"
VER_LINK: "${{env.JF_RT_URL}}/ui/artifactory/lifecycle/?bundleName='${{env.BUILD_NAME}}'&bundleToFlash='${{env.BUILD_NAME}}'&releaseBundleVersion='${{env.BUILD_ID}}'&repositoryKey=release-bundles-v2&activeVersionTab=Version%20Timeline&activeKanbanTab=promotion"
@ -740,13 +743,13 @@ jobs:
- name: "Curation: audit"
timeout-minutes: 15
continue-on-error: true
# continue-on-error: true
run: |
jf ca --format=table --threads=100
- name: "Xray & JAS: Audit"
timeout-minutes: 15
continue-on-error: true
# continue-on-error: true
run: |
jf audit --mvn --sast=true --sca=true --secrets=true --licenses=true --validate-secrets=true --vuln=true --format=table --extended-table=true --threads=100 --fail=false
@ -764,19 +767,31 @@ jobs:
- name: "BuildInfo: Collect env"
run: jf rt bce ${{env.BUILD_NAME}} ${{env.BUILD_ID}}
- name: "BuildInfo: Add VCS info"
run: jf rt bag ${{env.BUILD_NAME}} ${{env.BUILD_ID}}
- name: "BuildInfo: Build Publish"
run: jf rt bp ${{env.BUILD_NAME}} ${{env.BUILD_ID}} --detailed-summary=true
- name: "Evidence: Build Info"
continue-on-error: true
# continue-on-error: true
env:
EVD_JSON: "./target/build-info.json"
EVD_JSON: "target/build-info.json"
run: |
cat ./${{env.EVD_JSON}}
jf evd create --build-name ${{env.BUILD_NAME}} --build-number ${{env.BUILD_ID}} --predicate ./${{env.EVD_JSON}} --predicate-type https://jfrog.com/evidence/signature/v1 --key "${{secrets.KRISHNAM_JFROG_EVD_PRIVATEKEY}}" --key-alias ${{secrets.EVIDENCE_KEY_ALIAS}}
- name: "Evidence: cdx"
# continue-on-error: true
env:
EVD_JSON: "target/classes/META-INF/sbom/application.cdx.json"
run: |
cat ./${{env.EVD_JSON}}
jf evd create --build-name ${{env.BUILD_NAME}} --build-number ${{env.BUILD_ID}} --predicate ./${{env.EVD_JSON}} --predicate-type https://jfrog.com/evidence/signature/v1 --key "${{secrets.KRISHNAM_JFROG_EVD_PRIVATEKEY}}" --key-alias ${{secrets.EVIDENCE_KEY_ALIAS}}
- name: "Evidence: Build Publish"
continue-on-error: true
# continue-on-error: true
run: |
echo '{ "actor": "${{github.actor}}", "pipeline": "github actions","build_name": "${{env.BUILD_NAME}}", "build_id": "${{env.BUILD_ID}}", "evd": "Evidence-BuildPublish"}' > ./${{env.EVIDENCE_SPEC_JSON}}
cat ./${{env.EVIDENCE_SPEC_JSON}}
@ -816,7 +831,7 @@ jobs:
run: |
jf bs ${{env.BUILD_NAME}} ${{env.BUILD_ID}} --fail=false --format=table --extended-table=true --rescan=false --vuln=true
- name: "Optional: Build Scan V2"
- name: "Optional: Build Scan V2" # https://jfrog.com/help/r/xray-rest-apis/scan-build-v2
run: |
jf xr curl /api/v2/ci/build -H 'Content-Type: application/json' -d '{"build_name": "${{env.BUILD_NAME}}", "build_number": "${{env.BUILD_ID}}","rescan":false }'
@ -831,6 +846,10 @@ jobs:
jf rbc ${{env.BUILD_NAME}} ${{env.BUILD_ID}} --sync=true --signing-key=${{secrets.RBV2_SIGNING_KEY}} --spec=${{env.RBv2_SPEC_JSON}}
- name: "RLM: Xray Indexing"
run: |
jf xr curl "/api/v1/binMgr/release_bundle_v2" -H 'Content-Type: application/json' -d "{\"names\": [\"${{env.BUILD_NAME}}\"] }"
- name: "Evidence: RBv2 state NEW"
continue-on-error: true
env:
@ -1274,7 +1293,6 @@ jobs:
tree build/
- name: "Evidence: Artifact"
continue-on-error: true
env:
REPO_JAR: "${{env.RT_REPO_GRADLE_DEFAULT_LOCAL}}/org/springframework/samples/${{env.BUILD_NAME}}/3.4.0/${{env.BUILD_NAME}}-3.4.0-plain.jar" # /krishnam-gdl-dev-fed/org/springframework/samples/spring-petclinic/3.4.0/
# REPO_JAR: "${{env.RT_REPO_GRADLE_VIRTUAL}}/org/springframework/samples/${{env.BUILD_NAME}}/3.4.0/${{env.BUILD_NAME}}-3.4.0-plain.jar" # krishnam-gradle-virtual/org/springframework/samples/spring-petclinic/3.4.0/spring-petclinic-3.4.0-plain.jar
@ -1283,8 +1301,22 @@ jobs:
cat ./${{env.EVIDENCE_SPEC_JSON}}
jf evd create --subject-repo-path ${{env.REPO_JAR}} --key "${{secrets.KRISHNAM_JFROG_EVD_PRIVATEKEY}}" --key-alias ${{secrets.EVIDENCE_KEY_ALIAS}} --predicate ./${{env.EVIDENCE_SPEC_JSON}} --predicate-type https://jfrog.com/evidence/signature/v1
echo " - TODO: Evidence for ARTIFACT attached " >> $GITHUB_STEP_SUMMARY
- name: "Evidence: Build Info"
# continue-on-error: true
env:
EVD_JSON: "build/build-info.json"
run: |
cat ./${{env.EVD_JSON}}
jf evd create --build-name ${{env.BUILD_NAME}} --build-number ${{env.BUILD_ID}} --predicate ./${{env.EVD_JSON}} --predicate-type https://jfrog.com/evidence/signature/v1 --key "${{secrets.KRISHNAM_JFROG_EVD_PRIVATEKEY}}" --key-alias ${{secrets.EVIDENCE_KEY_ALIAS}}
- name: "Evidence: cdx"
# continue-on-error: true
env:
EVD_JSON: "build/reports/application.cdx.json"
run: |
cat ./${{env.EVD_JSON}}
jf evd create --build-name ${{env.BUILD_NAME}} --build-number ${{env.BUILD_ID}} --predicate ./${{env.EVD_JSON}} --predicate-type https://jfrog.com/evidence/signature/v1 --key "${{secrets.KRISHNAM_JFROG_EVD_PRIVATEKEY}}" --key-alias ${{secrets.EVIDENCE_KEY_ALIAS}}
# Build Info
# US

View file

@ -1,2 +1,29 @@
# Spring-PetClinic screenshots in JFrog & GitHub
![GitHub Actions workflow](./images/githubactions.png)
## Build
![JFrog Build](./images/builds.png)
## Docker
![JFrog dkr](./images/psj-dkr-4-publishmodules.png)
![JFrog dkr](./images/psj-dkr-4-xraydata.png)
![JFrog dkr](./images/psj-dkr-4-vcs.png)
![JFrog dkr](./images/psj-dkr-4-evidence.png)
![JFrog dkr](./images/psj-dkr-4-rbv2.png)
![JFrog dkr](./images/psj-dkr-4-rbv2-evd.png)
## MVN
![JFrog mvn](./images/psj-mvn-4-publishmodules.png)
![JFrog mvn](./images/psj-mvn-4-xraydata.png)
![JFrog mvn](./images/psj-mvn-4-evidence.png)
![JFrog mvn](./images/psj-mvn-4-rbv2.png)
![JFrog mvn](./images/psj-mvn-4-distribute.png)
## Gradle
![JFrog gradle](./images/psj-gdl-4-publishmodules.png)
![JFrog gradle](./images/psj-gdl-4-vcs.png)
![JFrog gradle](./images/psj-gdl-4-xraydata.png)

BIN
jfrog/images/builds.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB