diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 0000000..a8bfab6 --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,36 @@ +# Optional custom Dockerfile for additional development tools +# This is used if you need more customization beyond the base image + +FROM mcr.microsoft.com/devcontainers/base:ubuntu + +# Install additional development tools +RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ + && apt-get -y install --no-install-recommends \ + build-essential \ + curl \ + wget \ + vim \ + nano \ + htop \ + tmux \ + jq \ + ripgrep \ + fd-find \ + bat \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +# Install Claude Code globally +RUN npm install -g @anthropic-ai/claude-code@latest + +# Create workspace directory +RUN mkdir -p /workspace +WORKDIR /workspace + +# Set up shell aliases for common Claude operations +RUN echo 'alias cc="npx @anthropic-ai/claude-code"' >> /home/vscode/.bashrc \ + && echo 'alias cc="npx @anthropic-ai/claude-code"' >> /home/vscode/.zshrc + +# Configure git +RUN git config --global init.defaultBranch main \ + && git config --global pull.rebase false diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..072c02e --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,67 @@ +{ + "name": "Development Container", + "image": "mcr.microsoft.com/devcontainers/base:ubuntu", + + "features": { + "ghcr.io/devcontainers/features/node:1": { + "version": "20" + }, + "ghcr.io/devcontainers/features/git:1": { + "version": "latest" + }, + "ghcr.io/devcontainers/features/github-cli:1": { + "version": "latest" + }, + "ghcr.io/devcontainers/features/common-utils:2": { + "installZsh": true, + "installOhMyZsh": true, + "upgradePackages": true, + "username": "vscode", + "userUid": "1000", + "userGid": "1000" + } + }, + + "customizations": { + "vscode": { + "extensions": [ + "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode", + "GitHub.copilot", + "GitHub.copilot-chat", + "eamodio.gitlens", + "ms-vscode.vscode-typescript-next", + "streetsidesoftware.code-spell-checker", + "yzhang.markdown-all-in-one", + "DavidAnson.vscode-markdownlint", + "redhat.vscode-yaml", + "ms-azuretools.vscode-docker" + ], + "settings": { + "editor.formatOnSave": true, + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.codeActionsOnSave": { + "source.fixAll.eslint": "explicit" + }, + "files.autoSave": "onFocusChange", + "git.autofetch": true, + "git.confirmSync": false, + "terminal.integrated.defaultProfile.linux": "zsh" + } + } + }, + + "forwardPorts": [3000, 8080, 5000], + + "postCreateCommand": "npm install -g @anthropic-ai/claude-code@latest && echo 'Development environment ready!'", + + "remoteUser": "vscode", + + "mounts": [ + "source=${localEnv:HOME}/.ssh,target=/home/vscode/.ssh,readonly,type=bind,consistency=cached" + ], + + "containerEnv": { + "TERM": "xterm-256color" + } +} diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..6159f93 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,35 @@ +# EditorConfig helps maintain consistent coding styles +# https://editorconfig.org + +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +indent_style = space +indent_size = 2 + +[*.md] +trim_trailing_whitespace = false +max_line_length = off + +[*.{yml,yaml}] +indent_size = 2 + +[*.{json,jsonc}] +indent_size = 2 + +[*.py] +indent_size = 4 + +[*.{sh,bash}] +indent_size = 2 + +[Makefile] +indent_style = tab + +[*.go] +indent_style = tab +indent_size = 4 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e5b76fb --- /dev/null +++ b/.gitignore @@ -0,0 +1,111 @@ +# Dependencies +node_modules/ +bower_components/ +jspm_packages/ + +# Build outputs +dist/ +build/ +out/ +*.tsbuildinfo +.next/ +.nuxt/ +.cache/ + +# Environment files +.env +.env.local +.env.development.local +.env.test.local +.env.production.local +*.env + +# Logs +logs/ +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +# Testing +coverage/ +.nyc_output/ +*.lcov + +# IDE and Editor files +.idea/ +.vscode/ +*.swp +*.swo +*~ +.DS_Store +*.sublime-project +*.sublime-workspace + +# OS files +Thumbs.db +Desktop.ini + +# Temporary files +tmp/ +temp/ +*.tmp + +# Package manager lock files (optional - uncomment if needed) +# package-lock.json +# yarn.lock +# pnpm-lock.yaml + +# Runtime data +pids/ +*.pid +*.seed +*.pid.lock + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* diff --git a/.markdownlint.json b/.markdownlint.json new file mode 100644 index 0000000..d77a4ed --- /dev/null +++ b/.markdownlint.json @@ -0,0 +1,15 @@ +{ + "default": true, + "MD013": { + "line_length": 120, + "code_blocks": false, + "tables": false + }, + "MD033": { + "allowed_elements": ["details", "summary", "img", "br", "sub", "sup"] + }, + "MD024": { + "siblings_only": true + }, + "MD041": false +} diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..0c667c7 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,13 @@ +{ + "semi": true, + "trailingComma": "es5", + "singleQuote": true, + "printWidth": 100, + "tabWidth": 2, + "useTabs": false, + "arrowParens": "always", + "endOfLine": "lf", + "bracketSpacing": true, + "jsxSingleQuote": false, + "proseWrap": "preserve" +} diff --git a/CLAUDE.MD b/CLAUDE.MD new file mode 100644 index 0000000..975af54 --- /dev/null +++ b/CLAUDE.MD @@ -0,0 +1,120 @@ +# Claude AI Development Guide + +This document provides context and guidelines for AI-assisted development in this repository. + +## Repository Overview + +This is a `.github` repository containing GitHub-specific configurations and documentation. The repository includes: + +- Security policies and vulnerability reporting procedures +- GitHub Actions workflows (if applicable) +- Issue and PR templates +- Community health files + +## Development Guidelines + +### File Naming Conventions + +- Use UPPERCASE for special GitHub files (e.g., `SECURITY.md`, `CLAUDE.MD`) +- Use lowercase with hyphens for workflow files (e.g., `ci-workflow.yml`) +- Be consistent with existing naming patterns in the repository + +### Code Style + +- Use clear, descriptive file names +- Follow Markdown best practices for documentation +- Keep documentation concise but comprehensive +- Use proper heading hierarchy + +### Git Workflow + +- Create feature branches for all changes +- Use descriptive commit messages +- Follow conventional commit format when possible +- Always test changes before committing + +### Security Considerations + +- Never commit sensitive information (tokens, credentials, API keys) +- Review security implications of workflow changes +- Follow the vulnerability reporting process outlined in SECURITY.md +- Validate all external inputs in GitHub Actions + +## Common Tasks + +### Adding GitHub Actions Workflows + +1. Create workflow files in `.github/workflows/` +2. Use descriptive names (e.g., `ci.yml`, `deploy.yml`) +3. Test workflows thoroughly before merging +4. Document required secrets in README or workflow comments + +### Updating Documentation + +1. Keep SECURITY.md current with reporting procedures +2. Update this CLAUDE.MD as the project evolves +3. Ensure all links are valid and up-to-date + +### Creating Issue Templates + +1. Place templates in `.github/ISSUE_TEMPLATE/` +2. Use YAML frontmatter for configuration +3. Provide clear guidance for users + +## Testing + +- Test GitHub Actions workflows using `act` or branch deployments +- Validate Markdown syntax using linters +- Review rendered documentation on GitHub + +## AI-Specific Instructions + +### When Making Changes + +- Always read existing files before modifying them +- Maintain consistency with existing patterns +- Ask for clarification on ambiguous requirements +- Consider security implications of all changes + +### GitHub Actions Context + +- Be aware of GitHub Actions syntax and limitations +- Use officially supported actions when possible +- Document required repository secrets +- Consider workflow security best practices + +### Documentation Standards + +- Use clear, professional language +- Include examples where helpful +- Keep formatting consistent +- Update table of contents when needed + +## Project Structure + +``` +.github/ +├── SECURITY.md # Security vulnerability reporting +├── CLAUDE.MD # This file - AI development guide +├── workflows/ # GitHub Actions workflows (if any) +├── ISSUE_TEMPLATE/ # Issue templates (if any) +└── PULL_REQUEST_TEMPLATE/ # PR templates (if any) +``` + +## Additional Resources + +- [GitHub Actions Documentation](https://docs.github.com/en/actions) +- [GitHub Community Health Files](https://docs.github.com/en/communities) +- [Markdown Guide](https://www.markdownguide.org/) + +## Notes for AI Assistants + +- This repository contains GitHub configuration files +- Security is paramount - be cautious with workflow permissions +- Test all changes thoroughly +- Maintain backward compatibility when possible +- Follow GitHub's recommended practices for community health files + +--- + +Last Updated: 2025-12-28 diff --git a/ISSUE_TEMPLATE/bug_report.yml b/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..c908f5e --- /dev/null +++ b/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,95 @@ +name: Bug Report +description: Report a bug or unexpected behavior +title: "[Bug]: " +labels: ["bug", "needs-triage"] +assignees: [] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this bug report! This template is optimized for Claude AI analysis. + + - type: textarea + id: description + attributes: + label: Bug Description + description: A clear and concise description of what the bug is + placeholder: Tell us what happened + validations: + required: true + + - type: textarea + id: reproduction + attributes: + label: Steps to Reproduce + description: Steps to reproduce the behavior + placeholder: | + 1. Go to '...' + 2. Click on '...' + 3. Scroll down to '...' + 4. See error + validations: + required: true + + - type: textarea + id: expected + attributes: + label: Expected Behavior + description: What you expected to happen + placeholder: Describe the expected behavior + validations: + required: true + + - type: textarea + id: actual + attributes: + label: Actual Behavior + description: What actually happened + placeholder: Describe what actually happened + validations: + required: true + + - type: textarea + id: environment + attributes: + label: Environment + description: Please provide environment details + placeholder: | + - OS: [e.g., Windows 11, macOS 14, Ubuntu 22.04] + - Browser/Runtime: [e.g., Chrome 120, Node.js 20.10] + - Version: [e.g., 1.0.0] + render: markdown + validations: + required: false + + - type: textarea + id: logs + attributes: + label: Error Logs or Screenshots + description: If applicable, add error logs or screenshots + placeholder: Paste error logs or drag and drop screenshots + render: shell + validations: + required: false + + - type: textarea + id: context + attributes: + label: Additional Context + description: Any other context about the problem + placeholder: Add any other context about the problem here + validations: + required: false + + - type: checkboxes + id: checklist + attributes: + label: Pre-submission Checklist + description: Please verify the following + options: + - label: I have searched existing issues to avoid duplicates + required: true + - label: I have provided all relevant information above + required: true + - label: This issue is reproducible + required: false diff --git a/ISSUE_TEMPLATE/config.yml b/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..9355080 --- /dev/null +++ b/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,8 @@ +blank_issues_enabled: true +contact_links: + - name: Ask a Question + url: https://github.com/bretthowell714-source/.github/discussions + about: Ask questions and discuss with the community + - name: Security Vulnerability + url: https://github.com/bretthowell714-source/.github/security/advisories/new + about: Report security vulnerabilities privately diff --git a/ISSUE_TEMPLATE/feature_request.yml b/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000..8e53cca --- /dev/null +++ b/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,93 @@ +name: Feature Request +description: Suggest a new feature or enhancement +title: "[Feature]: " +labels: ["enhancement", "needs-triage"] +assignees: [] +body: + - type: markdown + attributes: + value: | + Thanks for suggesting a feature! This template is optimized for Claude AI analysis. + + - type: textarea + id: problem + attributes: + label: Problem Statement + description: Describe the problem this feature would solve + placeholder: I'm frustrated when... / It would be helpful if... + validations: + required: true + + - type: textarea + id: solution + attributes: + label: Proposed Solution + description: Describe your proposed solution + placeholder: I would like to see... + validations: + required: true + + - type: textarea + id: alternatives + attributes: + label: Alternatives Considered + description: Describe alternative solutions or features you've considered + placeholder: Alternative approaches... + validations: + required: false + + - type: textarea + id: use-cases + attributes: + label: Use Cases + description: Describe specific use cases for this feature + placeholder: | + 1. As a [user type], I want to [action] so that [benefit] + 2. When [scenario], this feature would help by [outcome] + validations: + required: false + + - type: textarea + id: implementation + attributes: + label: Implementation Ideas + description: If you have ideas about how to implement this, share them + placeholder: Technical approach or implementation suggestions + render: markdown + validations: + required: false + + - type: dropdown + id: priority + attributes: + label: Priority + description: How important is this feature to you? + options: + - Nice to have + - Would be helpful + - Important + - Critical + validations: + required: true + + - type: textarea + id: context + attributes: + label: Additional Context + description: Any other context, mockups, or examples + placeholder: Add any other context, screenshots, or examples here + validations: + required: false + + - type: checkboxes + id: checklist + attributes: + label: Pre-submission Checklist + description: Please verify the following + options: + - label: I have searched existing issues and PRs for similar proposals + required: true + - label: This feature aligns with the project's goals + required: false + - label: I am willing to contribute to implementing this feature + required: false diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..77af874 --- /dev/null +++ b/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,103 @@ +## Description + + + +## Type of Change + + + +- [ ] Bug fix (non-breaking change that fixes an issue) +- [ ] New feature (non-breaking change that adds functionality) +- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) +- [ ] Documentation update +- [ ] Code refactoring +- [ ] Performance improvement +- [ ] Test addition/modification +- [ ] Configuration change + +## Related Issues + + + +Fixes # +Relates to # + +## Changes Made + + + +- +- +- + +## Testing + + + +### Test Environment +- OS: +- Runtime/Browser: +- Version: + +### Test Cases +- [ ] Tested locally +- [ ] Added/updated unit tests +- [ ] Added/updated integration tests +- [ ] Manual testing performed +- [ ] Edge cases considered + +### Test Steps +1. +2. +3. + +## Screenshots/Recordings + + + +## Checklist + + + +- [ ] My code follows the project's style guidelines +- [ ] I have performed a self-review of my code +- [ ] I have commented my code, particularly in hard-to-understand areas +- [ ] I have made corresponding changes to the documentation +- [ ] My changes generate no new warnings or errors +- [ ] I have added tests that prove my fix is effective or that my feature works +- [ ] New and existing unit tests pass locally with my changes +- [ ] Any dependent changes have been merged and published + +## Additional Context + + + +## AI-Assisted Development + + + +- [ ] This PR was developed with AI assistance +- AI tools used: +- AI contribution: + +## Breaking Changes + + + +## Deployment Notes + + + +--- + +### For Reviewers + + + +**Areas for focus:** +- +- + +**Questions:** +- +- diff --git a/README.md b/README.md new file mode 100644 index 0000000..48fac5b --- /dev/null +++ b/README.md @@ -0,0 +1,128 @@ +# .github Repository + +This repository contains default GitHub community health files and development configurations for all repositories under this account. + +## 📋 What's Included + +### Community Health Files +- **SECURITY.md** - Security policy and vulnerability reporting +- **CLAUDE.MD** - AI-assisted development guide for Claude Code + +### Issue Templates +- **Bug Report** - Structured bug reporting template +- **Feature Request** - Feature proposal template +- **Config** - Issue template configuration + +### Pull Request Template +Comprehensive PR template with: +- Change description and type +- Testing checklist +- AI-assisted development tracking +- Review guidelines + +### GitHub Actions Workflows +- **code-quality.yml** - Automated code quality checks +- **claude-pr-review.yml** - AI-powered PR review assistance + +### Development Container +Complete development environment with: +- Node.js 20 +- Git and GitHub CLI +- Claude Code pre-installed +- VSCode extensions +- Common development tools + +### VSCode Configuration +- **settings.json** - Editor settings and formatting rules +- **extensions.json** - Recommended extensions +- **tasks.json** - Common development tasks +- **launch.json** - Debug configurations + +### Code Quality Configs +- **.editorconfig** - Consistent coding styles across editors +- **.prettierrc** - Code formatting rules +- **.markdownlint.json** - Markdown linting rules +- **.gitignore** - Common files to ignore + +## 🚀 Quick Start + +### For New Repositories + +These configurations automatically apply to all repositories in your account. When you create a new repository: + +1. The issue and PR templates will be available automatically +2. Clone the repository and open in VSCode +3. Install recommended extensions when prompted +4. Start developing with Claude Code integrated + +### Using the Development Container + +1. Install Docker and VSCode Remote-Containers extension +2. Open repository in VSCode +3. Click "Reopen in Container" when prompted +4. Start coding in a fully configured environment + +### Starting Claude Code + +From any repository terminal: +```bash +npx @anthropic-ai/claude-code@latest +``` + +Or use the VSCode task: `Ctrl+Shift+P` → "Run Task" → "Start Claude Code" + +## 🤖 AI-Assisted Development + +This repository is optimized for AI-assisted development with Claude Code: + +- **CLAUDE.MD** provides context for AI assistants +- Issue templates structure information for better AI analysis +- PR templates include AI contribution tracking +- Workflows generate PR context for AI review + +## 📝 Customization + +To customize these defaults: + +1. Clone this repository +2. Modify the templates and configurations +3. Commit and push changes +4. All your repositories will use the updated defaults + +## 🔒 Security + +Security vulnerabilities should be reported via our [security policy](SECURITY.md). + +## 📚 Resources + +- [GitHub Community Health Files](https://docs.github.com/en/communities/setting-up-your-project-for-healthy-contributions/creating-a-default-community-health-file) +- [Claude Code Documentation](https://github.com/anthropics/claude-code) +- [Dev Containers](https://containers.dev/) +- [VSCode Workspace](https://code.visualstudio.com/docs/editor/workspaces) + +## 🛠️ Development + +### Making Changes + +1. Create a feature branch: `git checkout -b feature/my-change` +2. Make your changes +3. Test configurations in a sample repository +4. Commit: `git commit -m "Description of changes"` +5. Push: `git push origin feature/my-change` +6. Create a pull request + +### Testing Templates + +To test issue/PR templates: +1. Create a test repository +2. Go to Issues → New Issue +3. Verify templates appear correctly +4. Test the PR template by creating a test PR + +## 📄 License + +These configurations are provided as-is for use across your repositories. + +--- + +**Maintained with ❤️ and AI assistance by Claude Code** diff --git a/workflows/claude-pr-review.yml b/workflows/claude-pr-review.yml new file mode 100644 index 0000000..014f878 --- /dev/null +++ b/workflows/claude-pr-review.yml @@ -0,0 +1,101 @@ +name: Claude PR Review Helper + +on: + pull_request: + types: [opened, synchronize, reopened] + +jobs: + pr-context: + name: Generate PR Context for Claude + runs-on: ubuntu-latest + permissions: + pull-requests: write + contents: read + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Get PR diff + id: pr-diff + run: | + git fetch origin ${{ github.base_ref }} + echo "Files changed:" + git diff --name-only origin/${{ github.base_ref }}...HEAD + echo "" + echo "Line changes:" + git diff --stat origin/${{ github.base_ref }}...HEAD + + - name: Generate PR summary + id: summary + uses: actions/github-script@v7 + with: + script: | + const { data: pr } = await github.rest.pulls.get({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: context.issue.number + }); + + const { data: files } = await github.rest.pulls.listFiles({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: context.issue.number + }); + + let summary = '## 🤖 Claude PR Review Context\n\n'; + summary += `**PR Title:** ${pr.title}\n`; + summary += `**Author:** @${pr.user.login}\n`; + summary += `**Base:** \`${pr.base.ref}\` ← **Head:** \`${pr.head.ref}\`\n\n`; + summary += `### Files Changed (${files.length})\n`; + + files.forEach(file => { + summary += `- \`${file.filename}\` (+${file.additions} -${file.deletions})\n`; + }); + + summary += '\n### 📋 Review Checklist\n'; + summary += '- [ ] Code follows project conventions\n'; + summary += '- [ ] Tests added/updated\n'; + summary += '- [ ] Documentation updated\n'; + summary += '- [ ] No security issues\n'; + summary += '- [ ] Performance considered\n'; + summary += '- [ ] Breaking changes documented\n'; + + return summary; + + - name: Comment PR with context + uses: actions/github-script@v7 + with: + script: | + const summary = `${{ steps.summary.outputs.result }}`; + + // Find existing bot comments + const { data: comments } = await github.rest.issues.listComments({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number + }); + + const botComment = comments.find(comment => + comment.user.type === 'Bot' && + comment.body.includes('Claude PR Review Context') + ); + + if (botComment) { + // Update existing comment + await github.rest.issues.updateComment({ + owner: context.repo.owner, + repo: context.repo.repo, + comment_id: botComment.id, + body: summary + }); + } else { + // Create new comment + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + body: summary + }); + } diff --git a/workflows/code-quality.yml b/workflows/code-quality.yml new file mode 100644 index 0000000..6fc9fc6 --- /dev/null +++ b/workflows/code-quality.yml @@ -0,0 +1,81 @@ +name: Code Quality Checks + +on: + pull_request: + branches: [main, master, develop] + push: + branches: [main, master, develop] + +jobs: + lint: + name: Lint Code + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + cache: 'npm' + if: hashFiles('**/package.json') != '' + + - name: Install dependencies + run: npm ci + if: hashFiles('**/package.json') != '' + + - name: Run linter + run: npm run lint + if: hashFiles('**/package.json') != '' + continue-on-error: true + + markdown-lint: + name: Markdown Lint + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Run Markdown Lint + uses: articulate/actions-markdownlint@v1 + with: + config: .markdownlint.json + files: '**/*.md' + ignore: node_modules + continue-on-error: true + + security-scan: + name: Security Scan + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Run Trivy vulnerability scanner + uses: aquasecurity/trivy-action@master + with: + scan-type: 'fs' + scan-ref: '.' + format: 'sarif' + output: 'trivy-results.sarif' + continue-on-error: true + + - name: Upload Trivy results to GitHub Security + uses: github/codeql-action/upload-sarif@v3 + with: + sarif_file: 'trivy-results.sarif' + if: always() + continue-on-error: true + + dependency-review: + name: Dependency Review + runs-on: ubuntu-latest + if: github.event_name == 'pull_request' + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Dependency Review + uses: actions/dependency-review-action@v4 + continue-on-error: true