{"id":19454129,"url":"https://github.com/ultralytics/actions","last_synced_at":"2025-12-25T04:16:28.369Z","repository":{"id":214897590,"uuid":"737617504","full_name":"ultralytics/actions","owner":"ultralytics","description":"Ultralytics GitHub Actions","archived":false,"fork":false,"pushed_at":"2025-04-05T18:10:35.000Z","size":563,"stargazers_count":34,"open_issues_count":5,"forks_count":7,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-05T19:20:38.153Z","etag":null,"topics":["auto-formatter","code-cleanup","code-linting","github-actions","gpt-4","lychee","markdown","openai","pull-requests","python","ruff","spellcheck","ultralytics","yolo"],"latest_commit_sha":null,"homepage":"https://ultralytics.com/actions","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ultralytics.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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},"funding":{"github":"glenn-jocher","patreon":"ultralytics","open_collective":"ultralytics"}},"created_at":"2023-12-31T19:09:02.000Z","updated_at":"2025-04-05T18:08:55.000Z","dependencies_parsed_at":"2024-04-13T16:34:33.988Z","dependency_job_id":"8a7d75fb-85f5-4261-9562-e4efee6c63b5","html_url":"https://github.com/ultralytics/actions","commit_stats":null,"previous_names":["ultralytics/action","ultralytics/actions"],"tags_count":63,"template":false,"template_full_name":"ultralytics/template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ultralytics%2Factions","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ultralytics%2Factions/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ultralytics%2Factions/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ultralytics%2Factions/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ultralytics","download_url":"https://codeload.github.com/ultralytics/actions/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247675596,"owners_count":20977376,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["auto-formatter","code-cleanup","code-linting","github-actions","gpt-4","lychee","markdown","openai","pull-requests","python","ruff","spellcheck","ultralytics","yolo"],"created_at":"2024-11-10T17:08:05.958Z","updated_at":"2025-12-25T04:16:28.361Z","avatar_url":"https://github.com/ultralytics.png","language":"Python","readme":"\u003ca href=\"https://www.ultralytics.com/\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/ultralytics/assets/main/logo/Ultralytics_Logotype_Original.svg\" width=\"320\" alt=\"Ultralytics logo\"\u003e\u003c/a\u003e\n\n# 🚀 Ultralytics Actions\n\nWelcome to [Ultralytics Actions](https://github.com/ultralytics/actions) - a collection of GitHub Actions and Python tools for automating code quality, PR management, and CI/CD workflows across Ultralytics projects.\n\n[![GitHub Actions Marketplace](https://img.shields.io/badge/Marketplace-Ultralytics_Actions-blue?style=flat\u0026logo=github)](https://github.com/marketplace/actions/ultralytics-actions)\n\n[![Actions CI](https://github.com/ultralytics/actions/actions/workflows/ci.yml/badge.svg)](https://github.com/ultralytics/actions/actions/workflows/ci.yml)\n[![Ultralytics Actions](https://github.com/ultralytics/actions/actions/workflows/format.yml/badge.svg)](https://github.com/ultralytics/actions/actions/workflows/format.yml)\n[![Scan PRs](https://github.com/ultralytics/actions/actions/workflows/scan-prs.yml/badge.svg)](https://github.com/ultralytics/actions/actions/workflows/scan-prs.yml)\n[![codecov](https://codecov.io/github/ultralytics/actions/graph/badge.svg?token=DoizJ1WS6j)](https://codecov.io/github/ultralytics/actions)\n\n[![Ultralytics Discord](https://img.shields.io/discord/1089800235347353640?logo=discord\u0026logoColor=white\u0026label=Discord\u0026color=blue)](https://discord.com/invite/ultralytics)\n[![Ultralytics Forums](https://img.shields.io/discourse/users?server=https%3A%2F%2Fcommunity.ultralytics.com\u0026logo=discourse\u0026label=Forums\u0026color=blue)](https://community.ultralytics.com/)\n[![Ultralytics Reddit](https://img.shields.io/reddit/subreddit-subscribers/ultralytics?style=flat\u0026logo=reddit\u0026logoColor=white\u0026label=Reddit\u0026color=blue)](https://reddit.com/r/ultralytics)\n\n## 📦 Repository Contents\n\nThis repository provides three main components:\n\n1. **[Ultralytics Actions](#ultralytics-actions-main-action)** - Main GitHub Action for AI-powered code formatting, PR summaries, and auto-labeling\n2. **[Standalone Actions](#standalone-actions)** - Reusable composite actions for common CI/CD tasks\n3. **[Python Package](#python-package)** - `ultralytics-actions` package for programmatic use\n\n## Ultralytics Actions (Main Action)\n\nAI-powered formatting, labeling, and PR summaries for Python, Swift, and Markdown files.\n\n### 📄 Features\n\n- **Python Code:** Formatted using [Ruff](https://github.com/astral-sh/ruff), an extremely fast Python linter and formatter\n- **Python Docstrings:** Google-style formatting enforced with Ultralytics Python docstring formatter (optional)\n- **JavaScript/TypeScript:** Formatted with [Biome](https://biomejs.dev/), an extremely fast formatter for JS, TS, JSX, TSX, and JSON (optional, auto-detected via `biome.json`)\n- **Markdown Files:** Styled with [Prettier](https://github.com/prettier/prettier) to ensure consistent documentation appearance\n- **Swift Code:** Formatted with [`swift-format`](https://github.com/swiftlang/swift-format) _(requires `macos-latest` runner)_\n- **Spell Check:** Common misspellings caught using [codespell](https://github.com/codespell-project/codespell)\n- **Broken Links Check:** Broken links identified using [Lychee](https://github.com/lycheeverse/lychee)\n- **PR Summary:** Concise Pull Request summaries generated using [OpenAI](https://openai.com/) GPT-5\n- **PR Review:** AI-powered code reviews identify critical bugs, security issues, and quality concerns with suggested fixes\n- **Auto-labeling:** Applies relevant labels to issues and PRs via [OpenAI](https://openai.com/) GPT-5\n\n### 🛠️ How It Works\n\nTriggers on GitHub events to streamline workflows:\n\n- **Push Events:** Automatically formats code when changes are pushed to `main`\n- **Pull Requests:** Ensures formatting standards, generates summaries, provides AI reviews, and applies labels\n- **Issues:** Automatically applies relevant labels using GPT-5\n\n### 🔧 Setup\n\nCreate `.github/workflows/ultralytics-actions.yml`:\n\n```yaml\n# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license\n\n# Ultralytics Actions https://github.com/ultralytics/actions\n# This workflow formats code and documentation in PRs to Ultralytics standards\n\nname: Ultralytics Actions\n\non:\n  issues:\n    types: [opened]\n  pull_request:\n    branches: [main]\n    types: [opened, closed, synchronize, review_requested]\n\npermissions:\n  contents: write # Modify code in PRs\n  pull-requests: write # Add comments and labels to PRs\n  issues: write # Add comments and labels to issues\n\njobs:\n  actions:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Run Ultralytics Actions\n        uses: ultralytics/actions@main\n        with:\n          token: ${{ secrets.GITHUB_TOKEN }} # Auto-generated token\n          labels: true # Auto-label issues/PRs using AI\n          python: true # Format Python with Ruff\n          python_docstrings: false # Format Python docstrings (default: false)\n          biome: true # Format JS/TS with Biome (auto-detected via biome.json)\n          prettier: true # Format YAML, JSON, Markdown, CSS\n          swift: false # Format Swift (requires macos-latest)\n          dart: false # Format Dart/Flutter\n          spelling: true # Check spelling with codespell\n          links: true # Check broken links with Lychee\n          summary: true # Generate AI-powered PR summaries\n          openai_api_key: ${{ secrets.OPENAI_API_KEY }} # Powers PR summaries, labels and reviews\n          brave_api_key: ${{ secrets.BRAVE_API_KEY }} # Used for broken link resolution\n```\n\n## Standalone Actions\n\nReusable composite actions for common CI/CD tasks. Each can be used independently in your workflows.\n\n### 1. Retry Action\n\nRetry failed commands with exponential backoff.\n\n```yaml\n- uses: ultralytics/actions/retry@main\n  with:\n    command: npm install\n    max_attempts: 3\n    timeout_minutes: 5\n```\n\n[**📖 Full Documentation →**](retry/README.md)\n\n### 2. Cleanup Disk Action\n\nFree up disk space on GitHub runners by removing unnecessary packages and files.\n\n```yaml\n- uses: ultralytics/actions/cleanup-disk@main\n```\n\n[**📖 Full Documentation →**](cleanup-disk/README.md)\n\n### 3. Scan PRs Action\n\nList open PRs across an organization and auto-merge eligible Dependabot PRs.\n\n```yaml\n- uses: ultralytics/actions/scan-prs@main\n  with:\n    token: ${{ secrets.GITHUB_TOKEN }}\n    org: ultralytics # Optional: defaults to ultralytics\n    visibility: private,internal # Optional: public, private, internal, all, or comma-separated\n```\n\n[**📖 Full Documentation →**](scan-prs/README.md)\n\n## Python Package\n\nInstall `ultralytics-actions` for programmatic access to action utilities.\n\n[![PyPI - Version](https://img.shields.io/pypi/v/ultralytics-actions?logo=pypi\u0026logoColor=white)](https://pypi.org/project/ultralytics-actions/)\n[![Ultralytics Downloads](https://static.pepy.tech/badge/ultralytics-actions)](https://clickpy.clickhouse.com/dashboard/ultralytics-actions)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/ultralytics-actions?logo=python\u0026logoColor=gold)](https://pypi.org/project/ultralytics-actions/)\n\n```bash\npip install ultralytics-actions\n```\n\n**Available Modules:**\n\n- `actions.review_pr` - AI-powered PR review\n- `actions.summarize_pr` - Generate PR summaries\n- `actions.scan_prs` - Scan and manage organization PRs\n- `actions.first_interaction` - Welcome message for new contributors\n- And more in `actions/` directory\n\n## 💡 Contribute\n\nUltralytics thrives on community collaboration, and we deeply value your contributions! Please see our [Contributing Guide](https://docs.ultralytics.com/help/contributing/) for details on how you can get involved. We also encourage you to share your feedback through our [Survey](https://www.ultralytics.com/survey?utm_source=github\u0026utm_medium=social\u0026utm_campaign=Survey). A huge thank you 🙏 to all our contributors!\n\n[![Ultralytics open-source contributors](https://raw.githubusercontent.com/ultralytics/assets/main/im/image-contributors.png)](https://github.com/ultralytics/ultralytics/graphs/contributors)\n\n## 📄 License\n\nUltralytics offers two licensing options:\n\n- **AGPL-3.0 License**: An [OSI-approved](https://opensource.org/license/agpl-v3) open-source license ideal for students, researchers, and enthusiasts who value open collaboration. See the [LICENSE](https://github.com/ultralytics/ultralytics/blob/main/LICENSE) file for details.\n- **Enterprise License**: Designed for commercial use, this license allows integrating Ultralytics software and AI models into commercial products without AGPL-3.0's open-source requirements. For enterprise solutions, contact [Ultralytics Licensing](https://www.ultralytics.com/license).\n\n## 📫 Contact\n\nFor bug reports or feature suggestions related to Ultralytics Actions, please submit an issue via [GitHub Issues](https://github.com/ultralytics/actions/issues). Join our [Discord](https://discord.com/invite/ultralytics) community for discussions and support!\n\n\u003cbr\u003e\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://github.com/ultralytics\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/ultralytics/assets/main/social/logo-social-github.png\" width=\"3%\" alt=\"Ultralytics GitHub\"\u003e\u003c/a\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/ultralytics/assets/main/social/logo-transparent.png\" width=\"3%\" alt=\"space\"\u003e\n  \u003ca href=\"https://www.linkedin.com/company/ultralytics/\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/ultralytics/assets/main/social/logo-social-linkedin.png\" width=\"3%\" alt=\"Ultralytics LinkedIn\"\u003e\u003c/a\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/ultralytics/assets/main/social/logo-transparent.png\" width=\"3%\" alt=\"space\"\u003e\n  \u003ca href=\"https://twitter.com/ultralytics\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/ultralytics/assets/main/social/logo-social-twitter.png\" width=\"3%\" alt=\"Ultralytics Twitter\"\u003e\u003c/a\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/ultralytics/assets/main/social/logo-transparent.png\" width=\"3%\" alt=\"space\"\u003e\n  \u003ca href=\"https://youtube.com/ultralytics\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/ultralytics/assets/main/social/logo-social-youtube.png\" width=\"3%\" alt=\"Ultralytics YouTube\"\u003e\u003c/a\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/ultralytics/assets/main/social/logo-transparent.png\" width=\"3%\" alt=\"space\"\u003e\n  \u003ca href=\"https://www.tiktok.com/@ultralytics\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/ultralytics/assets/main/social/logo-social-tiktok.png\" width=\"3%\" alt=\"Ultralytics TikTok\"\u003e\u003c/a\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/ultralytics/assets/main/social/logo-transparent.png\" width=\"3%\" alt=\"space\"\u003e\n  \u003ca href=\"https://ultralytics.com/bilibili\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/ultralytics/assets/main/social/logo-social-bilibili.png\" width=\"3%\" alt=\"Ultralytics BiliBili\"\u003e\u003c/a\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/ultralytics/assets/main/social/logo-transparent.png\" width=\"3%\" alt=\"space\"\u003e\n  \u003ca href=\"https://discord.com/invite/ultralytics\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/ultralytics/assets/main/social/logo-social-discord.png\" width=\"3%\" alt=\"Ultralytics Discord\"\u003e\u003c/a\u003e\n\u003c/div\u003e\n","funding_links":["https://github.com/sponsors/glenn-jocher","https://patreon.com/ultralytics","https://opencollective.com/ultralytics"],"categories":["Categories"],"sub_categories":["Continuous Triage"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fultralytics%2Factions","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fultralytics%2Factions","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fultralytics%2Factions/lists"}