Skip to main content

Basic GitHub Actions Workflow

Create .github/workflows/privacy-scan.yml:
name: Privacy Scan

on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main ]

jobs:
  privacy-scan:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18'

      - name: Install KafkaCode
        run: npm install -g kafkacode

      - name: Run Privacy Scan
        run: kafkacode scan ./src --verbose

Advanced Workflow with Reporting

name: Advanced Privacy Scan

on:
  push:
  pull_request:

jobs:
  privacy-scan:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18'

      - name: Install KafkaCode
        run: npm install -g kafkacode

      - name: Run scan and save results
        run: |
          kafkacode scan ./src --verbose | tee scan-results.txt
        continue-on-error: true

      - name: Upload scan results
        uses: actions/upload-artifact@v3
        with:
          name: privacy-scan-results
          path: scan-results.txt

      - name: Check for critical issues
        run: |
          if grep -q "CRITICAL" scan-results.txt; then
            echo "::error::Critical privacy issues detected!"
            exit 1
          fi

      - name: Comment on PR
        if: github.event_name == 'pull_request'
        uses: actions/github-script@v6
        with:
          script: |
            const fs = require('fs');
            const results = fs.readFileSync('scan-results.txt', 'utf8');

            github.rest.issues.createComment({
              issue_number: context.issue.number,
              owner: context.repo.owner,
              repo: context.repo.repo,
              body: `## 🔐 Privacy Scan Results\n\n\`\`\`\n${results}\n\`\`\``
            });

Scan Only Changed Files

name: Scan PR Changes

on:
  pull_request:

jobs:
  scan-changes:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18'

      - name: Install KafkaCode
        run: npm install -g kafkacode

      - name: Get changed files
        id: changed-files
        run: |
          git diff --name-only origin/${{ github.base_ref }}...HEAD > changed-files.txt
          cat changed-files.txt

      - name: Scan changed directories
        run: |
          DIRS=$(cat changed-files.txt | xargs -n1 dirname | sort -u)
          for dir in $DIRS; do
            if [ -d "$dir" ]; then
              echo "Scanning $dir..."
              kafkacode scan "$dir"
            fi
          done

Workflow with Slack Notifications

name: Privacy Scan with Notifications

on:
  push:
    branches: [ main ]
  schedule:
    - cron: '0 9 * * 1'  # Weekly on Monday at 9 AM

jobs:
  privacy-scan:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18'

      - name: Install KafkaCode
        run: npm install -g kafkacode

      - name: Run scan
        id: scan
        run: |
          kafkacode scan ./src --verbose | tee scan-results.txt
        continue-on-error: true

      - name: Notify Slack on failure
        if: failure()
        uses: slackapi/slack-github-action@v1
        with:
          payload: |
            {
              "text": "Privacy Scan Failed",
              "blocks": [
                {
                  "type": "section",
                  "text": {
                    "type": "mrkdwn",
                    "text": "🚨 *Privacy scan detected issues*\n\nRepository: ${{ github.repository }}\nBranch: ${{ github.ref }}\n\n<${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|View Details>"
                  }
                }
              ]
            }
        env:
          SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}

Multiple Environment Scans

name: Multi-Environment Privacy Scan

on:
  push:

jobs:
  scan:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        directory:
          - frontend
          - backend
          - shared
        node-version: [18, 20]

    steps:
      - uses: actions/checkout@v3

      - name: Setup Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}

      - name: Install KafkaCode
        run: npm install -g kafkacode

      - name: Scan ${{ matrix.directory }}
        run: kafkacode scan ./${{ matrix.directory }} --verbose

Next Steps