Observed since 20 Oct, 18:33 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
GitHub Actions security scanner using OpenSSF Scorecard
GitHub Actions Security Scanner - Scan your GitHub Actions workflows for security vulnerabilities using OpenSSF Scorecard.
ActionsGuard leverages OpenSSF Scorecard to check for:
Important: ActionsGuard requires OpenSSF Scorecard to be installed first.
Recommended: Using Homebrew (macOS & Linux)
brew install scorecard
Alternative: Download Binary Manually
# macOS (Apple Silicon)
curl -L -o scorecard https://github.com/ossf/scorecard/releases/latest/download/scorecard_darwin_arm64
chmod +x scorecard
sudo mv scorecard /usr/local/bin/scorecard
# macOS (Intel)
curl -L -o scorecard https://github.com/ossf/scorecard/releases/latest/download/scorecard_darwin_amd64
chmod +x scorecard
sudo mv scorecard /usr/local/bin/scorecard
# Linux
curl -L -o scorecard https://github.com/ossf/scorecard/releases/latest/download/scorecard_linux_amd64
chmod +x scorecard
sudo mv scorecard /usr/local/bin/scorecard
Verify Installation:
scorecard version
Since ActionsGuard is not yet published to PyPI, install from source:
# Clone the repository
git clone https://github.com/cybrking/actions-guard.git
cd actions-guard
# Create virtual environment (recommended)
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Install ActionsGuard in development mode
pip install -e .
# Verify installation
actionsguard --version
pip install actionsguard
Option A: Fine-grained Token (Recommended)
Create at: https://github.com/settings/personal-access-tokens/new
Permissions needed:
export GITHUB_TOKEN="github_pat_your_token_here"
Option B: Classic Token
Create at: https://github.com/settings/tokens/new
Scopes needed:
repo (for private repos) or public_repo (for public repos only)read:org (for organization scanning)export GITHUB_TOKEN="ghp_your_token_here"
⚠️ Important for Private Repositories:
If you're scanning your own private repos, you MUST use repo scope (not just public_repo). If you see "0 repositories found", your token likely doesn't have the right permissions.
Quick test:
# Check if your token can see your repos
actionsguard debug --user your-username
The debug command will:
actionsguard scan --repo owner/repository
# Scan an entire organization
actionsguard scan --org your-organization
# Scan a user account (e.g., your personal repos)
actionsguard scan --user cybrking
# Scan a single repository
actionsguard scan --repo kubernetes/kubernetes
# Scan entire organization
actionsguard scan --org my-org
# Scan a user account (personal repos)
actionsguard scan --user your-user
# Scan with custom token
actionsguard scan --repo owner/repo --token ghp_xxxxxxxxxxxx
# Exclude specific repositories
actionsguard scan --org my-org --exclude repo1,repo2
actionsguard scan --user your-user --exclude forked-repo
# Only scan specific repositories
actionsguard scan --org my-org --only important-repo,critical-repo
actionsguard scan --user your-user --only my-critical-project
# Run specific security checks
actionsguard scan --org my-org --checks Dangerous-Workflow,Token-Permissions
# Run all Scorecard checks
actionsguard scan --org my-org --all-checks
# Change output directory
actionsguard scan --org my-org --output ./security-reports
# Generate specific report formats
actionsguard scan --org my-org --format json,html
# Fail on critical issues (useful for CI/CD)
actionsguard scan --org my-org --fail-on-critical
# Adjust parallel scan workers (default: 5)
actionsguard scan --org my-org --parallel 10
Add ActionsGuard to your workflow:
name: Security Scan
on:
schedule:
- cron: '0 0 * * 0' # Weekly on Sunday
workflow_dispatch:
jobs:
security-scan:
runs-on: ubuntu-latest
steps:
- name: Run ActionsGuard
uses: your-username/actionsguard@v1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
org-name: my-organization
fail-on-critical: true
- name: Upload Reports
uses: actions/upload-artifact@v3
with:
name: security-reports
path: reports/
| Input | Description | Required | Default |
|---|---|---|---|
github-token | GitHub token for API access | Yes | - |
org-name | Organization to scan | No | Current repo org |
repo-name | Single repository to scan | No | - |
exclude-repos | Comma-separated repos to exclude | No | - |
only-repos | Only scan these repos | No | - |
checks | Specific checks to run | No | Dangerous-Workflow,Token-Permissions,Pinned-Dependencies |
all-checks | Run all checks | No | false |
output-format | Report formats | No | html,json,csv,markdown |
fail-on-critical | Fail if critical issues found | No | false |
| Output | Description |
|---|---|
reports-path | Path to generated reports |
critical-count | Number of critical issues |
overall-score | Average security score |
summary | JSON scan summary |
Beautiful, interactive HTML report with:
Machine-readable JSON with complete scan data:
{
"total_repos": 50,
"successful_scans": 48,
"failed_scans": 2,
"average_score": 7.2,
"critical_count": 3,
"results": [...]
}
Spreadsheet-compatible format for analysis in Excel or Google Sheets:
Repository,URL,Score,Risk Level,Critical Issues,High Issues,...
owner/repo1,https://...,6.5,MEDIUM,0,2,...
GitHub-flavored markdown with emojis and collapsible sections, perfect for:
GITHUB_TOKEN: GitHub personal access tokenACTIONSGUARD_OUTPUT_DIR: Default output directoryACTIONSGUARD_CHECKS: Default checks to run0: Success, no critical issues1: Critical issues found (with --fail-on-critical)2: Error during execution# Clone repository
git clone https://github.com/cybrking/actions-guard.git
cd actions-guard
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install development dependencies
pip install -e ".[dev]"
pytest tests/ -v --cov=actionsguard
# Format code
black actionsguard/ tests/
# Lint
flake8 actionsguard/ tests/
# Type checking
mypy actionsguard/
- name: Security Scan
run: |
pip install actionsguard
actionsguard scan --org ${{ github.repository_owner }} --fail-on-critical
security_scan:
script:
- pip install actionsguard
- actionsguard scan --org my-org --fail-on-critical
artifacts:
paths:
- reports/
stage('Security Scan') {
steps {
sh 'pip install actionsguard'
sh 'actionsguard scan --org my-org --fail-on-critical'
publishHTML([
reportDir: 'reports',
reportFiles: 'report.html',
reportName: 'Security Report'
])
}
}
For detailed troubleshooting guides, see:
1. Scorecard Command Not Found
Error: OpenSSF Scorecard not found
Solution: Install scorecard using Homebrew:
brew install scorecard
# Verify installation
scorecard version
If you don't have Homebrew, install it from https://brew.sh or see the manual installation instructions in the Prerequisites section above.
2. ActionsGuard Not Found on PyPI
ERROR: Could not find a version that satisfies the requirement actionsguard
Solution: ActionsGuard is not yet published to PyPI. Install from source:
git clone https://github.com/cybrking/actions-guard.git
cd actions-guard
pip install -e .
3. GitHub API Rate Limit
Error: GitHub API rate limit exceeded
Solution:
curl -H "Authorization: token YOUR_TOKEN" https://api.github.com/rate_limit)4. Organization Access Denied
Error: No permission to access organization
Solution:
read:org scope5. Python Project Not Found
ERROR: file:///path does not appear to be a Python project
Solution: Make sure you're in the correct directory (should contain setup.py and pyproject.toml):
cd actions-guard # Navigate to the cloned repository
pip install -e .
Contributions are welcome! Please see CONTRIBUTING.md for details.
git checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)This project is licensed under the MIT License - see the LICENSE file for details.
Made with ❤️ by Travis Felder
If you find ActionsGuard useful, please consider giving it a ⭐ on GitHub!
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 1.0.0 | 29 Oct 2025 | 13 |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 18:33 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:13a40cd44d95286dd15a7bcfb8da8931dbd492901bc6c0e98a01bcfa9179a06a