{"id":21091532,"url":"https://github.com/eiskrenkov/threat","last_synced_at":"2026-01-17T07:28:11.789Z","repository":{"id":243552174,"uuid":"812726376","full_name":"eiskrenkov/threat","owner":"eiskrenkov","description":"Collection of useful Danger plugins to demonstrate its abilities","archived":false,"fork":false,"pushed_at":"2024-06-12T13:29:22.000Z","size":15,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-12-17T08:17:40.703Z","etag":null,"topics":["danger","danger-plugin","ruby"],"latest_commit_sha":null,"homepage":"https://rubygems.org/gems/threat","language":"Ruby","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/eiskrenkov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-09T17:51:01.000Z","updated_at":"2024-11-11T09:43:45.000Z","dependencies_parsed_at":"2024-11-20T00:31:57.511Z","dependency_job_id":null,"html_url":"https://github.com/eiskrenkov/threat","commit_stats":null,"previous_names":["eiskrenkov/threat"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/eiskrenkov/threat","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eiskrenkov%2Fthreat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eiskrenkov%2Fthreat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eiskrenkov%2Fthreat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eiskrenkov%2Fthreat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eiskrenkov","download_url":"https://codeload.github.com/eiskrenkov/threat/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eiskrenkov%2Fthreat/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28504223,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T06:57:29.758Z","status":"ssl_error","status_checked_at":"2026-01-17T06:56:03.931Z","response_time":85,"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":["danger","danger-plugin","ruby"],"created_at":"2024-11-19T21:46:48.957Z","updated_at":"2026-01-17T07:28:11.769Z","avatar_url":"https://github.com/eiskrenkov.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Threat\n\nCollection of useful Danger plugins which intends to help you get up and running with Danger faster\n\nDanger itself - https://danger.systems\n\n## Usage\n\nAll you need to do to start using Threat is:\n\n1. Add it to your Gemfile\n\n```ruby\ngroup :development, :test do\n  gem 'threat', require: false\nend\n```\n\n2. Bundle\n\n```sh\nbundle install\n```\n\n3. Import it into your Dangerfile\n\n```ruby\ndanger.import_dangerfile(gem: 'threat')\n```\n\n4. Create a GitHub workflow which will run your Dangerfile when the PR is opened/updated\n\n```yaml\n# .github/workflows/ci.yml\n\nname: CI\n\non:\n  pull_request:\n    branches:\n      - master\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}\n  cancel-in-progress: true\n\n# https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token\npermissions:\n  actions: write\n  checks: write\n  contents: read\n  statuses: write\n  pull-requests: write\n\njobs:\n  danger:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n        with:\n          fetch-depth: 0\n\n      - name: Set up Ruby\n        uses: ruby/setup-ruby@v1\n        with:\n          ruby-version: 3.3.1\n          bundler-cache: true\n\n      - name: Run Danger\n        env:\n          DANGER_GITHUB_API_TOKEN: ${{ github.token }}\n        run: bundle exec danger\n\n```\n\n## Available plugins\n\n1. PR Title\n\nValidates that the Pull Request title is in correct format, containing JIRA ticket number and a meaningful short description. This works best when combined with \"use pr title\" + squash and merge strategy in GitHub\n\n```ruby\n# Dangerfile\n\ndanger.import_dangerfile(gem: 'threat')\n\npr_title.run!\n```\n\n2. TODO\n\nChecks if there are TODOs in PR diff. Can be improved by adding logic that will check if TODO was introduced in the PR itself, in this case warning message could be rephrased\n\n```ruby\n# Dangerfile\n\ndanger.import_dangerfile(gem: 'threat')\n\ntodo.run!\n```\n\n3. Confetti 🎉\n\nJust add the following line at the bottom of your Dangerfile to celebrate a good run!\n\n```ruby\n# Dangerfile\n\ndanger.import_dangerfile(gem: 'threat')\n\n# The rest of your Dangerfile goes here...\n\nconfetti.run! unless failed?\n```\n\nP.S [Raycast](https://www.raycast.com/) and macOS is required (not a paid promotion) (sorry @dhh)\n\n## Contributing\n\nYes, please 🥺\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feiskrenkov%2Fthreat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feiskrenkov%2Fthreat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feiskrenkov%2Fthreat/lists"}