name: "General: Security Scan" on: workflow_dispatch: push: branches: - master paths: - ".github/workflows/general.security-scan.yaml" schedule: - cron: "0 0 * * 0" jobs: directories: # Job that list subdirectories runs-on: ubuntu-latest outputs: dir: ${{ steps.set-dirs.outputs.dir }} # generate output name dir by using inner step output steps: - uses: actions/checkout@v2 with: token: ${{ secrets.BOT_TOKEN }} - id: set-dirs # Give it an id to handle to get step outputs in the outputs key above run: echo "::set-output name=dir::$({ ls -d .containers/apps/*/ & ls -d .containers/base/*/; } | tr '\n' '\0' | xargs -0 -n 1 basename | jq -R -s -c 'split("\n")[:-1]')" # Define step output named dir base on ls command transformed to JSON thanks to jq scan_files: name: Scan Files runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 - name: Run Trivy vulnerability scanner in repo mode uses: aquasecurity/trivy-action@master with: scan-type: 'fs' ignore-unfixed: true format: 'template' template: '@/contrib/sarif.tpl' output: 'trivy-repo-results.sarif' severity: 'CRITICAL' - name: Upload Trivy scan results to GitHub Security tab uses: github/codeql-action/upload-sarif@v1 with: sarif_file: 'trivy-repo-results.sarif' scan_containers: name: Scan Containers runs-on: ubuntu-20.04 needs: [directories] # Depends on previous job strategy: matrix: dir: ${{fromJson(needs.directories.outputs.dir)}} # List matrix strategy from directories dynamically fail-fast: false steps: - name: Container Security scan uses: Azure/container-scan@v0 with: image-name: ghcr.io/${{ github.repository_owner }}/${{matrix.dir}}:latest severity-threshold: HIGH