{"id":44002830,"url":"https://github.com/greg-hellings/devdashboard","last_synced_at":"2026-02-07T13:04:22.298Z","repository":{"id":319412299,"uuid":"1078620104","full_name":"greg-hellings/devdashboard","owner":"greg-hellings","description":null,"archived":false,"fork":false,"pushed_at":"2025-12-15T09:47:46.000Z","size":444,"stargazers_count":0,"open_issues_count":5,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-18T09:30:28.522Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/greg-hellings.png","metadata":{"files":{"readme":".github/README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-18T04:08:05.000Z","updated_at":"2025-11-13T15:12:12.000Z","dependencies_parsed_at":"2025-12-15T14:01:10.756Z","dependency_job_id":null,"html_url":"https://github.com/greg-hellings/devdashboard","commit_stats":null,"previous_names":["greg-hellings/devdashboard"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/greg-hellings/devdashboard","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greg-hellings%2Fdevdashboard","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greg-hellings%2Fdevdashboard/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greg-hellings%2Fdevdashboard/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greg-hellings%2Fdevdashboard/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/greg-hellings","download_url":"https://codeload.github.com/greg-hellings/devdashboard/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greg-hellings%2Fdevdashboard/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29194494,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-07T12:38:28.597Z","status":"ssl_error","status_checked_at":"2026-02-07T12:38:23.888Z","response_time":63,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-02-07T13:04:20.572Z","updated_at":"2026-02-07T13:04:22.288Z","avatar_url":"https://github.com/greg-hellings.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GitHub Actions Workflows\n\nThis directory contains all GitHub Actions workflows and configuration for the DevDashboard project.\n\n## Overview\n\nThe CI/CD pipeline is designed to ensure code quality, security, and reliability through automated checks and builds.\n\n## Workflows\n\n### 🔄 CI (`ci.yml`)\n\n**Trigger:** Push to main/master/develop, Pull Requests\n\n**Jobs:**\n- **pre-commit**: Runs pre-commit hooks on all files\n- **go-tests**: Tests on Go 1.24 and 1.25\n- **go-build**: Cross-platform builds (Linux, macOS, Windows)\n- **nix-build**: Builds with Nix flake\n- **nix-checks**: Runs all Nix flake checks\n- **code-quality**: Runs golangci-lint and checks module tidiness\n- **security**: Runs Gosec security scanner\n- **all-checks**: Final gate requiring all checks to pass\n\n**Secrets Required:**\n- `CODECOV_TOKEN` (optional): For code coverage reporting\n- `CACHIX_AUTH_TOKEN` (optional): For Nix binary caching\n\n**Matrix Strategy:**\n- Go versions: 1.24, 1.25\n- Platforms: Ubuntu, macOS, Windows\n\n### 📊 Coverage (`coverage.yml`)\n\n**Trigger:** Push to main branches, Pull Requests\n\n**Jobs:**\n- **coverage**: Generates coverage report with 70% threshold\n- **coverage-diff**: Compares coverage between base and PR (PRs only, non-blocking)\n\n**Features:**\n- Uploads to Codecov and Coveralls\n- Posts coverage comparison as PR comment\n- Enforces minimum 70% coverage threshold\n- Generates HTML coverage report\n\n**Secrets Required:**\n- `CODECOV_TOKEN` (optional): For Codecov integration\n- `GITHUB_TOKEN` (automatic): For PR comments\n\n### 🏷️ Labeler (`labeler.yml`)\n\n**Trigger:** Pull Request open/sync/reopen\n\n**Jobs:**\n- **labeler**: Auto-labels based on changed files\n- **size-labeler**: Adds size labels (xs/s/m/l/xl)\n- **auto-label**: Labels based on PR title conventions\n\n**Label Conventions:**\n- `feat:` → enhancement\n- `fix:` → bug\n- `docs:` → documentation\n- `chore:` → chore\n- `test:` → tests\n- `ci:` → ci\n- `perf:` → performance\n- `!:` or `breaking` → breaking-change\n- `WIP` or `draft:` → work-in-progress\n\n**File-based Labels:**\n- Changes to `**/*.go` → go\n- Changes to `flake.nix` → nix\n- Changes to `docs/**/*` → documentation\n- Changes to `.github/**/*` → ci\n- Changes to `**/*_test.go` → tests\n\n### 🌙 Nightly (`nightly.yml`)\n\n**Trigger:** Daily at 2 AM UTC, Manual dispatch\n\n**Jobs:**\n- **nightly-tests**: Tests with race detector and benchmarks on Go 1.24, 1.25, and tip\n- **nightly-build**: Integration tests on all platforms\n- **nix-nightly**: Comprehensive Nix checks\n- **dependency-audit**: Runs govulncheck for vulnerabilities\n- **notification**: Creates issue if build fails\n\n**Features:**\n- Tests against Go tip (development version)\n- Runs tests 3 times with race detector\n- Executes benchmarks\n- Checks for outdated dependencies\n- Creates GitHub issue on failure\n\n### 🚀 Release (`release.yml`)\n\n**Trigger:** Push tags matching `v*.*.*`, Manual dispatch\n\n**Jobs:**\n- **create-release**: Creates GitHub release with changelog\n- **build-binaries**: Builds for multiple platforms\n- **build-nix**: Builds with Nix\n- **docker**: Builds and pushes Docker images\n\n**Artifacts:**\n- Linux (amd64, arm64)\n- macOS (amd64, arm64)\n- Windows (amd64)\n- Nix build\n- Docker images on ghcr.io\n\n**Secrets Required:**\n- `GITHUB_TOKEN` (automatic): For creating releases\n- `CACHIX_AUTH_TOKEN` (optional): For Nix caching\n\n**Tags:**\n- Semantic versioning: `v1.2.3`\n- Pre-release detection: `alpha`, `beta`, `rc`\n\n## Configuration Files\n\n### `dependabot.yml`\n\nAutomated dependency updates for:\n- **Go modules**: Weekly on Mondays at 9 AM\n- **GitHub Actions**: Weekly on Mondays at 9 AM\n- **Docker**: Weekly on Mondays at 9 AM\n\n**Settings:**\n- Groups minor and patch updates together for Go\n- Maximum 10 open PRs for Go dependencies\n- Maximum 5 open PRs for Actions and Docker\n- Auto-assigns to @greg-hellings\n- Adds appropriate labels\n\n### `labeler.yml`\n\nDefines file patterns for automatic labeling:\n- **dependencies**: `go.mod`, `go.sum`, `flake.nix`, `flake.lock`\n- **go**: `**/*.go`, `go.mod`, `go.sum`\n- **nix**: `flake.nix`, `.nix-helpers/**/*`\n- **documentation**: `docs/**/*`, `**/*.md`\n- **ci**: `.github/**/*`, `Makefile`\n- **tests**: `**/*_test.go`\n- **config**: `pkg/config/**/*`\n- **dependencies** (module): `pkg/dependencies/**/*`\n- **repository** (module): `pkg/repository/**/*`\n- **report** (module): `pkg/report/**/*`\n- **examples**: `examples/**/*`\n- **cli**: `cmd/**/*`\n\n### `CODEOWNERS`\n\nDefines code ownership for automatic review requests:\n- Default owner: @greg-hellings\n- All modules and directories assigned to maintainer\n- Triggers review requests on PRs\n\n## Issue Templates\n\n### Bug Report (`bug_report.yml`)\n\nStructured form for reporting bugs with fields:\n- Description and expected/actual behavior\n- Reproduction steps\n- Logs and version information\n- Installation method and OS\n- Repository provider and analyzer\n- Configuration file (sanitized)\n- Comprehensive checklist\n\n### Feature Request (`feature_request.yml`)\n\nStructured form for feature requests with fields:\n- Problem statement and proposed solution\n- Alternatives considered\n- Feature category and priority\n- Use case and examples\n- Contribution willingness\n- Validation checklist\n\n## Pull Request Template\n\nComprehensive PR template including:\n- Description and type of change\n- Related issues\n- Testing performed (unit, integration, manual, Nix)\n- Documentation updates\n- Code quality checklist\n- Go-specific checks\n- Nix-specific checks\n- Security considerations\n- Breaking changes and migration guide\n- Performance impact\n- Reviewer notes\n\n## Required Secrets\n\n### Optional Secrets\n- `CODECOV_TOKEN`: For uploading coverage to Codecov\n- `CACHIX_AUTH_TOKEN`: For Nix binary caching\n\n### Automatic Secrets\n- `GITHUB_TOKEN`: Automatically provided by GitHub Actions\n\n## Setting Up Secrets\n\n### Codecov Token\n1. Visit https://codecov.io\n2. Link your GitHub repository\n3. Copy the upload token\n4. Add as `CODECOV_TOKEN` in repository secrets\n\n### Cachix Token\n1. Create account at https://cachix.org\n2. Create a cache named `devdashboard`\n3. Generate an auth token\n4. Add as `CACHIX_AUTH_TOKEN` in repository secrets\n\n## Branch Protection\n\nRecommended branch protection rules for `main`:\n\n- ✅ Require status checks to pass before merging\n  - `All checks passed`\n  - `go-tests (1.24)`\n  - `nix-build`\n  - `nix-checks`\n  - `pre-commit`\n  - `code-quality`\n  - `security`\n- ✅ Require branches to be up to date before merging\n- ✅ Require conversation resolution before merging\n- ✅ Require signed commits (recommended)\n- ✅ Require linear history (recommended)\n- ✅ Require pull request reviews (1 approval)\n- ✅ Dismiss stale reviews when new commits are pushed\n- ✅ Require review from Code Owners\n\n## Workflow Badges\n\nAdd these to your README.md:\n\n```markdown\n[![CI](https://github.com/greg-hellings/devdashboard/workflows/CI/badge.svg)](https://github.com/greg-hellings/devdashboard/actions/workflows/ci.yml)\n[![Code Coverage](https://github.com/greg-hellings/devdashboard/workflows/Code%20Coverage/badge.svg)](https://github.com/greg-hellings/devdashboard/actions/workflows/coverage.yml)\n[![codecov](https://codecov.io/gh/greg-hellings/devdashboard/branch/main/graph/badge.svg)](https://codecov.io/gh/greg-hellings/devdashboard)\n[![Nightly Build](https://github.com/greg-hellings/devdashboard/workflows/Nightly%20Build/badge.svg)](https://github.com/greg-hellings/devdashboard/actions/workflows/nightly.yml)\n```\n\n## Troubleshooting\n\n### CI Failures\n\n**Pre-commit fails:**\n```bash\n# Run locally (requires Nix)\nnix develop --command pre-commit run --all-files\n```\n\n**Go tests fail:**\n```bash\n# Run with verbose output\ngo test -v ./...\n```\n\n**Nix build fails:**\n```bash\n# Build locally\nnix build -L\n\n# Check flake\nnix flake check -L\n```\n\n**Coverage below threshold:**\n```bash\n# Generate coverage report\ngo test -coverprofile=coverage.out ./...\ngo tool cover -html=coverage.out -o coverage.html\n# Open coverage.html in browser\n```\n\n### Dependabot Issues\n\n**Too many PRs:**\n- Adjust `open-pull-requests-limit` in `dependabot.yml`\n- Review and merge dependency updates more frequently\n\n**Failed dependency updates:**\n- Check if `go.mod` has replace directives\n- Verify vendorHash is updated for Nix builds\n- Review breaking changes in dependency changelogs\n\n### Release Issues\n\n**Release build fails:**\n- Ensure all tests pass on main branch\n- Verify version tag matches semantic versioning\n- Check CHANGELOG.md has entry for version\n\n**Docker build fails:**\n- Test Dockerfile locally: `docker build -t devdashboard .`\n- Verify all source files are committed to git\n- Check .dockerignore doesn't exclude necessary files\n\n## Performance Optimization\n\n### Caching\n\nThe workflows use multiple caching strategies:\n- Go module cache (actions/setup-go)\n- Pre-commit hooks cache\n- Docker layer cache\n- Nix binary cache (Cachix)\n\n### Concurrency\n\nWorkflows use concurrency groups to cancel outdated runs:\n```yaml\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}\n  cancel-in-progress: true\n```\n\n### Matrix Builds\n\nJobs run in parallel using matrix strategies:\n- Multiple Go versions\n- Multiple operating systems\n- Fail-fast disabled for comprehensive testing\n\n## Best Practices\n\n1. **Always run checks locally before pushing**\n   ```bash\n   make check\n   nix flake check\n   ```\n\n2. **Keep dependencies up to date**\n   - Review Dependabot PRs weekly\n   - Update GitHub Actions monthly\n\n3. **Monitor workflow runs**\n   - Check Actions tab regularly\n   - Address failures promptly\n\n4. **Use conventional commits**\n   - Enables automatic labeling\n   - Improves changelog generation\n\n5. **Write tests for new features**\n   - Maintain or improve coverage\n   - Add integration tests when appropriate\n\n6. **Document breaking changes**\n   - Update CHANGELOG.md\n   - Provide migration guide\n   - Mark PRs appropriately\n\n## Contributing\n\nWhen adding new workflows:\n1. Test locally with [act](https://github.com/nektos/act)\n2. Use reusable workflows when possible\n3. Add appropriate secrets documentation\n4. Update this README with new workflow details\n5. Test on fork before merging to main\n\n## Resources\n\n- [GitHub Actions Documentation](https://docs.github.com/en/actions)\n- [Go Actions Setup](https://github.com/actions/setup-go)\n- [Nix Install Action](https://github.com/cachix/install-nix-action)\n- [Codecov Action](https://github.com/codecov/codecov-action)\n- [golangci-lint Action](https://github.com/golangci/golangci-lint-action)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgreg-hellings%2Fdevdashboard","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgreg-hellings%2Fdevdashboard","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgreg-hellings%2Fdevdashboard/lists"}