Introduction
Automated security scanning transforms security from an afterthought into a seamless part of your development workflow. Instead of remembering to run scans manually (and inevitably forgetting), your CI/CD pipeline automatically checks every commit and pull request for vulnerabilities. This guide shows you two approaches:- Manual setup: Step-by-step instructions for hands-on configuration
- AI-assisted setup: Copy-paste workflows with AI prompts for rapid deployment
Why Automated Security Scanning Matters
The Manual Scanning Problem
Manual security scanning has three critical flaws:- Human Error: Developers forget to run scans, especially under pressure
- Inconsistent Coverage: Different team members use different tools or settings
- Late Detection: Vulnerabilities are found after code reaches production
The Automated Solution
Automated scanning eliminates these problems by:- Running on every push: No forgotten scans
- Consistent configuration: Same rules applied every time
- Early detection: Vulnerabilities caught before deployment
- Build failure: Critical issues block deployment automatically
Understanding API Keys in CI/CD
What Are API Keys?
API keys are authentication tokens that allow automated tools to access services on your behalf. Think of them as digital keys that unlock specific capabilities—in this case, security scanning services like Rafter.Why API Keys Are Secure
API keys are designed for programmatic access and include several security features:- Scoped permissions: Keys can only access specific services
- Usage tracking: All API calls are logged and monitored
- Easy rotation: Keys can be regenerated instantly if compromised
- Environment isolation: Keys are stored separately from your code
How GitHub Secrets Protect Your Keys
GitHub Secrets provide enterprise-grade security for sensitive data:- Encryption at rest: Keys are encrypted when stored
- Encryption in transit: Keys are encrypted when accessed
- Access control: Only authorized workflows can use secrets
- Audit logging: All secret access is logged
Manual Setup: Step-by-Step Configuration
Step 1: Get Your Rafter API Key
If you have an existing key saved to a safe place, copy it. Otherwise, generate a new key… Rafter protects your API keys by not storing them. You get access once, when you generate/refresh the key. Then, refreshing the key invalidates the previous key to keep it safe. It’s a way to help you rotate keys, which is best practice. Navigate to Account Settings- Go to your Rafter account settings
- Look for the “API Keys” section
- Click “Generate New API Key” or “Refresh API Key”
- The key is automatically copied to your clipboard (it won’t be shown/copiable again)
API keys are sensitive credentials. Never commit them to your repository or share them in plain text.
Step 2: Add API Key to GitHub Secrets
Go to Repository Settings- Navigate to your GitHub repository (go to github.com and click on your repository)
- Click “Settings” → “Secrets and variables” → “Actions”
- Click “New repository secret” (big green button)
- Name:
RAFTER_API_KEY - Value: Paste your API key (the key you copied in Step 1)
- Click “Add secret” (big green button)
Step 3: Create GitHub Workflow
Create Workflow Directory This just creates the directory if it doesn’t exist. The correct filepath is critical. Because it starts with a dot, it’s a hidden directory, so you won’t see it in Finder or your file explorer.security-scan.yml in the .github/workflows directory (final path: .github/workflows/security-scan.yml). This is the file that will contain the security scan workflow.
Step 4: Test Your Setup
Make a Test Commit- Go to your repository’s “Actions” tab
- Look for the “Security Scan with Rafter” workflow
- Verify it runs successfully
AI-Assisted Setup: Copy-Paste Deployment
The AI Assistant Approach
Modern development teams increasingly use AI assistants for rapid setup. Here’s how to leverage Rafter for security scanning configuration:Step 1: Use This AI Prompt
Copy this prompt to help AI assistants understand the setup process. Any AI assistant will do: vibe coding platforms like Bolt, Lovable, Replit, Emergent, etc all work. Or use your favorite IDE’s built-in AI assistant like Cursor, Claude, ChatGPT, etc.Step 3: Follow AI Instructions
- Paste the prompt into your AI assistant
- Follow the generated instructions step by step
- Verify the setup by checking GitHub Actions
Understanding the Workflow Components
Trigger Configuration
- On every push to the main branch
- Automatically, without manual intervention
API-Based Scanning
The workflow uses Rafter’s API directly instead of installing CLI tools:- Eliminates CLI installation: No need to install tools on the runner
- Uses secure API authentication: API key passed via headers
Polling and Status Management
- Checks every 10 seconds: Balances responsiveness with API load
- Handles both success and failure: Exits on completed or failed status
- Prevents infinite loops: Maximum 60 polls (10 minutes total)
- Provides progress feedback: Shows current status and poll count
Error Handling and Status Management
- Distinguishes failure types: Separate messages for scan failures vs timeouts
- Fails builds appropriately: Exits with code 1 to fail the GitHub Action
- Provides clear feedback: Specific error messages for different scenarios
Result Retrieval
- JSON format: For programmatic processing and vulnerability counting
- Markdown format: For human-readable reports and documentation
- File output: Saves results to files for artifact upload
Vulnerability Checking
- Parses scan results using jq
- Counts error-level vulnerabilities
- Fails the build if critical issues are found
- Provides clear feedback to developers
Advanced Configuration Options
While we’ve outlined some powerful use cases below, see our documentation for more advanced configuration options: Rafter CI/CD Documentation.Customizing Scan Triggers
You can customize when scans run:Adjusting Failure Thresholds
Modify the vulnerability checking logic:Customizing Polling Behavior
Adjust the polling mechanism for different scan durations:Adding Notifications
Integrate with Slack, Discord, or email:Troubleshooting Common Issues
API Key Not Found
Error:Error: RAFTER_API_KEY environment variable not set
Solution:
- Verify the secret exists in GitHub repository settings
- Check the secret name matches exactly:
RAFTER_API_KEY - Ensure the workflow uses
${{ secrets.RAFTER_API_KEY }}
Scan Request Fails
Error:curl: (22) The requested URL returned error: 401 or curl: (22) The requested URL returned error: 400
Solution:
- 401 Unauthorized: Check your API key is valid and not expired
- 400 Bad Request: Verify repository name format (should be owner/repo)
- Network issues: The
-fsSflags will cause curl to fail silently on HTTP errors - Branch name issues: Ensure
${{ github.ref_name }}returns the correct branch name
Scan Status Issues
Error: Scan stuck in “processing” or “pending” status Solution:- Timeout handling: The workflow automatically fails after 10 minutes
- Status checking: Verify the API returns valid status values (completed, failed, processing, pending)
- Polling frequency: Adjust
sleep 10if scans typically take longer - API rate limits: Check if you’re hitting API rate limits
Scan Results Not Found
Error:scan-results.json: No such file or directory
Solution:
- Check scan completion: Ensure the scan reached “completed” status
- Verify file output: The workflow saves results to
scan-results.jsonandscan-results.md - API response format: Confirm the API returns results in the expected JSON format
- Error handling: The
set -euo pipefailensures the script fails if curl commands fail
Security Best Practices
API Key Management
- Rotate keys regularly: Generate new keys every 90 days
- Monitor usage: Check API key usage logs for anomalies
- Use least privilege: Only grant necessary permissions
- Never log keys: Ensure keys don’t appear in logs or outputs
Workflow Security
- Pin action versions: Use specific commit SHAs instead of tags
- Review permissions: Limit workflow permissions to minimum required
- Audit regularly: Review workflow changes and access patterns
- Use trusted sources: Only use official GitHub Actions
Repository Security
- Enable branch protection: Require status checks before merging
- Use required reviewers: Require security team review for workflow changes
- Monitor secrets: Regularly audit repository secrets
- Enable security alerts: Use GitHub’s security features
Measuring Success
Key Metrics to Track
- Scan Coverage: Percentage of commits scanned
- Detection Rate: Vulnerabilities found per scan
- Fix Time: Average time from detection to resolution
- False Positive Rate: Incorrect vulnerability reports
Success Indicators
- Zero critical vulnerabilities in production deployments
- Consistent scan execution across all branches
- Rapid vulnerability resolution (under 24 hours)
- Developer adoption of security-first practices

