# name: detection-testing # on: # push: # pull_request: # types: [opened, reopened] # schedule: # - cron: "44 4 * * *" # jobs: # validate-tag-if-present: # runs-on: ubuntu-latest # steps: # - name: TAGGED, Validate that the tag is in the correct format # run: | # echo "The GITHUB_REF: $GITHUB_REF" # #First check to see if the release is a tag # if [[ $GITHUB_REF =~ refs/tags/* ]]; then # #Yes, this is a tag, so we need to test to make sure that the tag # #is in the correct format (like v1.10.20) # if [[ $GITHUB_REF =~ refs/tags/v[0-9]+.[0-9]+.[0-9]+ ]]; then # echo "PASS: Tagged release with good format" # exit 0 # else # echo "FAIL: Tagged release with bad format" # exit 1 # fi # else # echo "PASS: Not a tagged release" # exit 0 # fi # quit-for-dependabot: # runs-on: ubuntu-latest # if: github.actor != 'dependabot[bot]' && github.actor != 'dependabot-preview[bot]' # steps: # - name: "Placeholder" # run: | # echo "yes it ran" # docker-detection-testing-setup: # runs-on: ubuntu-latest # if: "!contains(github.ref, 'refs/tags/')" #don't run on tags - future steps won't run either since they depend on this job # needs: [validate-tag-if-present, quit-for-dependabot] # steps: # - name: Get branch and PR required for detection testing main.py # id: vars # run: | # echo "::set-output name=branch::${GITHUB_REF#refs/heads/}" # - name: Checkout Repo # uses: actions/checkout@v2 # #with: # # ref: develop # - uses: actions/setup-python@v2 # with: # python-version: '3.9' #Available versions here - https://github.com/actions/python-versions/releases easy to change/make a matrix/use pypy # architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified # cache: 'pip' # - name: Install Python Dependencies # run: | # python -m venv .venv # source .venv/bin/activate # python -m pip install wheel # python -m pip install -r requirements.txt # - name: Run the CI # run: | # source .venv/bin/activate # cd bin/docker_detection_tester # echo "github.event.issue.pull_request : [${{ github.event.issue.pull_request }}]" # echo "github.event.pull_request.number : [${{ github.event.pull_request.number }}]" # echo "steps.vars.outputs.branch : [${{ steps.vars.outputs.branch }}]" # echo "github.event.pull_request.head.ref : [${{ github.event.pull_request.head.ref }}]" # echo "github.event_name : [${{ github.event_name }}]" # if [[ ${{ github.event_name }} == schedule ]]; then # # Note that scheduled actions ONLY run on the default branch, so it won't run on all other branches! # echo "Running a nightly test on all detections OR a commit was made directly to develop" # python detection_testing_execution.py run --branch develop --mode all --mock --config_file test_config_github_actions.json # elif [[ ! -z "${{ github.event.pull_request.head.ref }}" && ! -z "${{ github.event.pull_request.number }}" ]]; then # echo "Pull request from source branch [${{ github.event.pull_request.head.ref }}] for PR number [${{ github.event.issue.number }}]" # python detection_testing_execution.py run --branch ${{ github.event.pull_request.head.ref }} --pr_number ${{ github.event.pull_request.number }} --mode changes --mock --config_file test_config_github_actions.json # else # echo "Push from branch [${{ steps.vars.outputs.branch }}]" # python detection_testing_execution.py run --branch ${{ steps.vars.outputs.branch }} --mode changes --mock --config_file test_config_github_actions.json # fi # mv *-test-run.json replicate_test.json # - name: Upload Test Results Files # uses: actions/upload-artifact@v2 # with: # name: testing-results-config # path: | # bin/docker_detection_tester/prior_config/apps/DA-ESS-ContentUpdate-latest.tar.gz # bin/docker_detection_tester/prior_config/config_tests_0.json # bin/docker_detection_tester/prior_config/config_tests_1.json # bin/docker_detection_tester/prior_config/config_tests_2.json # bin/docker_detection_tester/prior_config/config_tests_3.json # bin/docker_detection_tester/prior_config/config_tests_4.json # bin/docker_detection_tester/prior_config/config_tests_5.json # bin/docker_detection_tester/prior_config/config_tests_6.json # bin/docker_detection_tester/prior_config/config_tests_7.json # bin/docker_detection_tester/prior_config/config_tests_8.json # bin/docker_detection_tester/prior_config/config_tests_9.json # - name: Upload File to Enable Replication of the Test at a Different Time or Place # uses: actions/upload-artifact@v2 # with: # name: replicate_test # path: | # bin/docker_detection_tester/replicate_test.json # docker-detection-testing-execution: # runs-on: ubuntu-latest # if: "!contains(github.ref, 'refs/tags/')" #don't run on tags - future steps won't run either since they depend on this job # needs: [docker-detection-testing-setup] # strategy: # matrix: # manifest_filename: ["config_tests_0.json", # "config_tests_1.json", # "config_tests_2.json", # "config_tests_3.json", # "config_tests_4.json", # "config_tests_5.json", # "config_tests_6.json", # "config_tests_7.json", # "config_tests_8.json", # "config_tests_9.json"] # steps: # - name: Get branch and PR required for detection testing main.py # id: vars # run: | # echo "::set-output name=branch::${GITHUB_REF#refs/heads/}" # - name: Checkout Repo # uses: actions/checkout@v2 # #with: # # ref: develop # - name: Download artifacts # uses: actions/download-artifact@v2 # with: # name: testing-results-config # path: bin/docker_detection_tester/prior_config # - uses: actions/setup-python@v2 # with: # python-version: '3.9' #Available versions here - https://github.com/actions/python-versions/releases easy to change/make a matrix/use pypy # architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified # cache: 'pip' # - name: Install Python Dependencies # run: | # python -m venv .venv # source .venv/bin/activate # python -m pip install wheel # python -m pip install -r requirements.txt # - name: Run the CI # run: | # source .venv/bin/activate # cd bin/docker_detection_tester # python detection_testing_execution.py run -c prior_config/${{ matrix.manifest_filename}} # - name: Upload Test Results Files # uses: actions/upload-artifact@v2 # with: # name: ${{ matrix.manifest_filename}}.results # path: | # bin/docker_detection_tester/test_results/success.csv # bin/docker_detection_tester/test_results/error.csv # bin/docker_detection_tester/test_results/failure.csv # bin/docker_detection_tester/test_results/combined.csv # bin/docker_detection_tester/test_results/success.json # bin/docker_detection_tester/test_results/error.json # bin/docker_detection_tester/test_results/failure.json # bin/docker_detection_tester/test_results/combined.json # bin/docker_detection_tester/test_results/summary.json # docker-detection-testing-execution-merge-results: # runs-on: ubuntu-latest # if: "!contains(github.ref, 'refs/tags/')" #don't run on tags - future steps won't run either since they depend on this job # needs: [docker-detection-testing-setup, docker-detection-testing-execution] # steps: # - name: Get branch and PR required for detection testing main.py # id: vars # run: | # echo "::set-output name=branch::${GITHUB_REF#refs/heads/}" # - name: Checkout Repo # uses: actions/checkout@v2 # #with: # # ref: develop # - name: Download artifacts # uses: actions/download-artifact@v2 # with: # name: config_tests_0.json.results # path: bin/docker_detection_tester/results_0 # - name: Download artifacts # uses: actions/download-artifact@v2 # with: # name: config_tests_1.json.results # path: bin/docker_detection_tester/results_1 # - name: Download artifacts # uses: actions/download-artifact@v2 # with: # name: config_tests_2.json.results # path: bin/docker_detection_tester/results_2 # - name: Download artifacts # uses: actions/download-artifact@v2 # with: # name: config_tests_3.json.results # path: bin/docker_detection_tester/results_3 # - name: Download artifacts # uses: actions/download-artifact@v2 # with: # name: config_tests_4.json.results # path: bin/docker_detection_tester/results_4 # - name: Download artifacts # uses: actions/download-artifact@v2 # with: # name: config_tests_5.json.results # path: bin/docker_detection_tester/results_5 # - name: Download artifacts # uses: actions/download-artifact@v2 # with: # name: config_tests_6.json.results # path: bin/docker_detection_tester/results_6 # - name: Download artifacts # uses: actions/download-artifact@v2 # with: # name: config_tests_7.json.results # path: bin/docker_detection_tester/results_7 # - name: Download artifacts # uses: actions/download-artifact@v2 # with: # name: config_tests_8.json.results # path: bin/docker_detection_tester/results_8 # - name: Download artifacts # uses: actions/download-artifact@v2 # with: # name: config_tests_9.json.results # path: bin/docker_detection_tester/results_9 # - uses: actions/setup-python@v2 # with: # python-version: '3.9' #Available versions here - https://github.com/actions/python-versions/releases easy to change/make a matrix/use pypy # architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified # cache: 'pip' # - name: Install Python Dependencies # run: | # python -m venv .venv # source .venv/bin/activate # python -m pip install wheel # python -m pip install -r requirements.txt # - name: Merge Detections into single File # run: | # source .venv/bin/activate # cd bin/docker_detection_tester # python summarize_json.py --files results_*/summary.json --output_filename summary_test_results.json # - name: Upload Summary Test Results JSON # uses: actions/upload-artifact@v2 # if: always() # with: # name: SummaryTestResults # path: | # bin/docker_detection_tester/summary_test_results.json # - name: Upload Failures Manifest on Failure # uses: actions/upload-artifact@v2 # if: failure() # with: # name: DetectionFailureManifest # path: | # bin/docker_detection_tester/detection_failure_manifest.json # #Always clean these up, they make the output messy # - name: Clean up intermediate Files # uses: geekyeggo/delete-artifact@v1 # if: always() # with: # name: | # config_tests_0.json.results # config_tests_1.json.results # config_tests_2.json.results # config_tests_3.json.results # config_tests_4.json.results # config_tests_5.json.results # config_tests_6.json.results # config_tests_7.json.results # config_tests_8.json.results # config_tests_9.json.results # - name: Log in to S3 for Artifact Uploads # if: ${{ github.event_name == 'schedule' }} # uses: aws-actions/configure-aws-credentials@v1 # with: # aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} # aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} # aws-region: us-west-2 # - name: Upload S3 Badge and Summary Artifacts for Nightly Scheduled Run # if: ${{ github.event_name == 'schedule' }} # run: | # cd bin/docker_detection_tester # python generate_detection_coverage_badge.py --input_summary_file summary_test_results.json --output_badge_file detection_coverage.svg --badge_string "Pass Rate" # #Upload artifact (summary test results) # aws s3 cp summary_test_results.json s3://security-content/reporting/summary_test_results.json # #Since these reside in a public bucket, no need to explicitly mark as public # # make the file public since it is not by default # #aws s3api put-object-acl --bucket security-content --key reporting/summary_test_results.json --acl public-read # #Upload artifact (test results coverage badge) # aws s3 cp detection_coverage.svg s3://security-content/reporting/detection_coverage.svg # #Since these reside in a public bucket, no need to explicitly mark as public # # make the file public since it is not by default # #aws s3api put-object-acl --bucket security-content --key reporting/detection_coverage.svg --acl public-read