添加状态分类和液面分割
This commit is contained in:
97
ultralytics_yolov8-main/.github/ISSUE_TEMPLATE/bug-report.yml
vendored
Normal file
97
ultralytics_yolov8-main/.github/ISSUE_TEMPLATE/bug-report.yml
vendored
Normal file
@ -0,0 +1,97 @@
|
||||
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
||||
|
||||
name: 🐛 Bug Report
|
||||
# title: " "
|
||||
description: Problems with Ultralytics YOLO
|
||||
labels: [bug, triage]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thank you for submitting an Ultralytics YOLO 🐛 Bug Report!
|
||||
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: Search before asking
|
||||
description: >
|
||||
Please search the Ultralytics [Docs](https://docs.ultralytics.com) and [issues](https://github.com/ultralytics/ultralytics/issues) to see if a similar bug report already exists.
|
||||
options:
|
||||
- label: >
|
||||
I have searched the Ultralytics YOLO [issues](https://github.com/ultralytics/ultralytics/issues) and found no similar bug report.
|
||||
required: true
|
||||
|
||||
- type: dropdown
|
||||
attributes:
|
||||
label: Ultralytics YOLO Component
|
||||
description: |
|
||||
Please select the Ultralytics YOLO component where you found the bug.
|
||||
multiple: true
|
||||
options:
|
||||
- "Install"
|
||||
- "Train"
|
||||
- "Val"
|
||||
- "Predict"
|
||||
- "Export"
|
||||
- "Multi-GPU"
|
||||
- "Augmentation"
|
||||
- "Hyperparameter Tuning"
|
||||
- "Integrations"
|
||||
- "Other"
|
||||
validations:
|
||||
required: false
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Bug
|
||||
description: Please provide as much information as possible. Copy and paste console output and error messages. Use [Markdown](https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax) to format text, code and logs. If necessary, include screenshots for visual elements only. Providing detailed information will help us resolve the issue more efficiently.
|
||||
placeholder: |
|
||||
💡 ProTip! Include as much information as possible (logs, tracebacks, screenshots, etc.) to receive the most helpful response.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Environment
|
||||
description: Many issues are often related to dependency versions and hardware. Please provide the output of `yolo checks` or `ultralytics.checks()` command to help us diagnose the problem.
|
||||
placeholder: |
|
||||
Paste output of `yolo checks` or `ultralytics.checks()` command, i.e.:
|
||||
```
|
||||
Ultralytics YOLOv8.0.181 🚀 Python-3.11.2 torch-2.0.1 CPU (Apple M2)
|
||||
Setup complete ✅ (8 CPUs, 16.0 GB RAM, 266.5/460.4 GB disk)
|
||||
|
||||
OS macOS-13.5.2
|
||||
Environment Jupyter
|
||||
Python 3.11.2
|
||||
Install git
|
||||
RAM 16.00 GB
|
||||
CPU Apple M2
|
||||
CUDA None
|
||||
```
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Minimal Reproducible Example
|
||||
description: >
|
||||
When asking a question, people will be better able to provide help if you provide code that they can easily understand and use to **reproduce** the problem. This is referred to by community members as creating a [minimal reproducible example](https://docs.ultralytics.com/help/minimum_reproducible_example/).
|
||||
placeholder: |
|
||||
```
|
||||
# Code to reproduce your issue here
|
||||
```
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Additional
|
||||
description: Anything else you would like to share?
|
||||
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: Are you willing to submit a PR?
|
||||
description: >
|
||||
(Optional) We encourage you to submit a [Pull Request](https://github.com/ultralytics/ultralytics/pulls) (PR) to help improve Ultralytics YOLO for everyone, especially if you have a good understanding of how to implement a fix or feature.
|
||||
See the Ultralytics YOLO [Contributing Guide](https://docs.ultralytics.com/help/contributing) to get started.
|
||||
options:
|
||||
- label: Yes I'd like to help by submitting a PR!
|
||||
13
ultralytics_yolov8-main/.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
13
ultralytics_yolov8-main/.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
||||
|
||||
blank_issues_enabled: true
|
||||
contact_links:
|
||||
- name: 📄 Docs
|
||||
url: https://docs.ultralytics.com/
|
||||
about: Full Ultralytics YOLOv8 Documentation
|
||||
- name: 💬 Forum
|
||||
url: https://community.ultralytics.com/
|
||||
about: Ask on Ultralytics Community Forum
|
||||
- name: 🎧 Discord
|
||||
url: https://ultralytics.com/discord
|
||||
about: Ask on Ultralytics Discord
|
||||
52
ultralytics_yolov8-main/.github/ISSUE_TEMPLATE/feature-request.yml
vendored
Normal file
52
ultralytics_yolov8-main/.github/ISSUE_TEMPLATE/feature-request.yml
vendored
Normal file
@ -0,0 +1,52 @@
|
||||
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
||||
|
||||
name: 🚀 Feature Request
|
||||
description: Suggest a YOLOv8 idea
|
||||
# title: " "
|
||||
labels: [enhancement]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thank you for submitting a YOLOv8 🚀 Feature Request!
|
||||
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: Search before asking
|
||||
description: >
|
||||
Please search the Ultralytics [Docs](https://docs.ultralytics.com) and [issues](https://github.com/ultralytics/ultralytics/issues) to see if a similar feature request already exists.
|
||||
options:
|
||||
- label: >
|
||||
I have searched the YOLOv8 [issues](https://github.com/ultralytics/ultralytics/issues) and found no similar feature requests.
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Description
|
||||
description: A short description of your feature.
|
||||
placeholder: |
|
||||
What new feature would you like to see in YOLOv8?
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Use case
|
||||
description: |
|
||||
Describe the use case of your feature request. It will help us understand and prioritize the feature request.
|
||||
placeholder: |
|
||||
How would this feature be used, and who would use it?
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Additional
|
||||
description: Anything else you would like to share?
|
||||
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: Are you willing to submit a PR?
|
||||
description: >
|
||||
(Optional) We encourage you to submit a [Pull Request](https://github.com/ultralytics/ultralytics/pulls) (PR) to help improve YOLOv8 for everyone, especially if you have a good understanding of how to implement a fix or feature.
|
||||
See the YOLOv8 [Contributing Guide](https://docs.ultralytics.com/help/contributing) to get started.
|
||||
options:
|
||||
- label: Yes I'd like to help by submitting a PR!
|
||||
35
ultralytics_yolov8-main/.github/ISSUE_TEMPLATE/question.yml
vendored
Normal file
35
ultralytics_yolov8-main/.github/ISSUE_TEMPLATE/question.yml
vendored
Normal file
@ -0,0 +1,35 @@
|
||||
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
||||
|
||||
name: ❓ Question
|
||||
description: Ask an Ultralytics YOLO question
|
||||
# title: " "
|
||||
labels: [question]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thank you for asking an Ultralytics YOLO ❓ Question!
|
||||
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: Search before asking
|
||||
description: >
|
||||
Please search the Ultralytics [Docs](https://docs.ultralytics.com), [issues](https://github.com/ultralytics/ultralytics/issues) and [discussions](https://github.com/ultralytics/ultralytics/discussions) to see if a similar question already exists.
|
||||
options:
|
||||
- label: >
|
||||
I have searched the Ultralytics YOLO [issues](https://github.com/ultralytics/ultralytics/issues) and [discussions](https://github.com/ultralytics/ultralytics/discussions) and found no similar questions.
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Question
|
||||
description: What is your question? Please provide as much information as possible. Include detailed code examples to reproduce the problem and describe the context in which the issue occurs. Format your text and code using [Markdown](https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax) for clarity and readability. Following these guidelines will help us assist you more effectively.
|
||||
placeholder: |
|
||||
💡 ProTip! Include as much information as possible (logs, tracebacks, screenshots etc.) to receive the most helpful response.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Additional
|
||||
description: Anything else you would like to share?
|
||||
27
ultralytics_yolov8-main/.github/dependabot.yml
vendored
Normal file
27
ultralytics_yolov8-main/.github/dependabot.yml
vendored
Normal file
@ -0,0 +1,27 @@
|
||||
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
||||
# Dependabot for package version updates
|
||||
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
||||
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: pip
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: weekly
|
||||
time: "04:00"
|
||||
open-pull-requests-limit: 10
|
||||
reviewers:
|
||||
- glenn-jocher
|
||||
labels:
|
||||
- dependencies
|
||||
|
||||
- package-ecosystem: github-actions
|
||||
directory: "/.github/workflows"
|
||||
schedule:
|
||||
interval: weekly
|
||||
time: "04:00"
|
||||
open-pull-requests-limit: 5
|
||||
reviewers:
|
||||
- glenn-jocher
|
||||
labels:
|
||||
- dependencies
|
||||
348
ultralytics_yolov8-main/.github/workflows/ci.yaml
vendored
Normal file
348
ultralytics_yolov8-main/.github/workflows/ci.yaml
vendored
Normal file
@ -0,0 +1,348 @@
|
||||
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
||||
# YOLO Continuous Integration (CI) GitHub Actions tests
|
||||
|
||||
name: Ultralytics CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
pull_request:
|
||||
branches: [main]
|
||||
schedule:
|
||||
- cron: "0 0 * * *" # runs at 00:00 UTC every day
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
hub:
|
||||
description: "Run HUB"
|
||||
default: false
|
||||
type: boolean
|
||||
benchmarks:
|
||||
description: "Run Benchmarks"
|
||||
default: false
|
||||
type: boolean
|
||||
tests:
|
||||
description: "Run Tests"
|
||||
default: false
|
||||
type: boolean
|
||||
gpu:
|
||||
description: "Run GPU"
|
||||
default: false
|
||||
type: boolean
|
||||
raspberrypi:
|
||||
description: "Run Raspberry Pi"
|
||||
default: false
|
||||
type: boolean
|
||||
conda:
|
||||
description: "Run Conda"
|
||||
default: false
|
||||
type: boolean
|
||||
|
||||
jobs:
|
||||
HUB:
|
||||
if: github.repository == 'ultralytics/ultralytics' && (github.event_name == 'schedule' || github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && github.event.inputs.hub == 'true'))
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [ubuntu-latest]
|
||||
python-version: ["3.11"]
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
cache: "pip" # caching pip dependencies
|
||||
- name: Install requirements
|
||||
shell: bash # for Windows compatibility
|
||||
run: |
|
||||
python -m pip install --upgrade pip wheel
|
||||
pip install -e . --extra-index-url https://download.pytorch.org/whl/cpu
|
||||
- name: Check environment
|
||||
run: |
|
||||
yolo checks
|
||||
pip list
|
||||
- name: Test HUB training
|
||||
shell: python
|
||||
env:
|
||||
API_KEY: ${{ secrets.ULTRALYTICS_HUB_API_KEY }}
|
||||
MODEL_ID: ${{ secrets.ULTRALYTICS_HUB_MODEL_ID }}
|
||||
run: |
|
||||
import os
|
||||
from ultralytics import YOLO, hub
|
||||
api_key, model_id = os.environ['API_KEY'], os.environ['MODEL_ID']
|
||||
hub.login(api_key)
|
||||
hub.reset_model(model_id)
|
||||
model = YOLO('https://hub.ultralytics.com/models/' + model_id)
|
||||
model.train()
|
||||
- name: Test HUB inference API
|
||||
shell: python
|
||||
env:
|
||||
API_KEY: ${{ secrets.ULTRALYTICS_HUB_API_KEY }}
|
||||
MODEL_ID: ${{ secrets.ULTRALYTICS_HUB_MODEL_ID }}
|
||||
run: |
|
||||
import os
|
||||
import requests
|
||||
import json
|
||||
api_key, model_id = os.environ['API_KEY'], os.environ['MODEL_ID']
|
||||
url = f"https://api.ultralytics.com/v1/predict/{model_id}"
|
||||
headers = {"x-api-key": api_key}
|
||||
data = {"size": 320, "confidence": 0.25, "iou": 0.45}
|
||||
with open("ultralytics/assets/zidane.jpg", "rb") as f:
|
||||
response = requests.post(url, headers=headers, data=data, files={"image": f})
|
||||
assert response.status_code == 200, f'Status code {response.status_code}, Reason {response.reason}'
|
||||
print(json.dumps(response.json(), indent=2))
|
||||
|
||||
Benchmarks:
|
||||
if: github.event_name != 'workflow_dispatch' || github.event.inputs.benchmarks == 'true'
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [ubuntu-latest, macos-14]
|
||||
python-version: ["3.11"]
|
||||
model: [yolov8n]
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
cache: "pip" # caching pip dependencies
|
||||
- name: Install requirements
|
||||
shell: bash # for Windows compatibility
|
||||
run: |
|
||||
python -m pip install --upgrade pip wheel
|
||||
pip install -e ".[export]" "coverage[toml]" --extra-index-url https://download.pytorch.org/whl/cpu
|
||||
- name: Check environment
|
||||
run: |
|
||||
yolo checks
|
||||
pip list
|
||||
- name: Benchmark ClassificationModel
|
||||
shell: bash
|
||||
run: coverage run -a --source=ultralytics -m ultralytics.cfg.__init__ benchmark model='path with spaces/${{ matrix.model }}-cls.pt' imgsz=160 verbose=0.166
|
||||
- name: Benchmark YOLOWorld DetectionModel
|
||||
shell: bash
|
||||
run: coverage run -a --source=ultralytics -m ultralytics.cfg.__init__ benchmark model='path with spaces/yolov8s-worldv2.pt' imgsz=160 verbose=0.318
|
||||
- name: Benchmark SegmentationModel
|
||||
shell: bash
|
||||
run: coverage run -a --source=ultralytics -m ultralytics.cfg.__init__ benchmark model='path with spaces/${{ matrix.model }}-seg.pt' imgsz=160 verbose=0.279
|
||||
- name: Benchmark PoseModel
|
||||
shell: bash
|
||||
run: coverage run -a --source=ultralytics -m ultralytics.cfg.__init__ benchmark model='path with spaces/${{ matrix.model }}-pose.pt' imgsz=160 verbose=0.183
|
||||
- name: Benchmark OBBModel
|
||||
shell: bash
|
||||
run: coverage run -a --source=ultralytics -m ultralytics.cfg.__init__ benchmark model='path with spaces/${{ matrix.model }}-obb.pt' imgsz=160 verbose=0.472
|
||||
- name: Benchmark YOLOv10Model
|
||||
shell: bash
|
||||
run: coverage run -a --source=ultralytics -m ultralytics.cfg.__init__ benchmark model='path with spaces/yolov10n.pt' imgsz=160 verbose=0.178
|
||||
- name: Merge Coverage Reports
|
||||
run: |
|
||||
coverage xml -o coverage-benchmarks.xml
|
||||
- name: Upload Coverage Reports to CodeCov
|
||||
if: github.repository == 'ultralytics/ultralytics'
|
||||
uses: codecov/codecov-action@v4
|
||||
with:
|
||||
flags: Benchmarks
|
||||
env:
|
||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
||||
- name: Benchmark Summary
|
||||
run: |
|
||||
cat benchmarks.log
|
||||
echo "$(cat benchmarks.log)" >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
Tests:
|
||||
if: github.event_name != 'workflow_dispatch' || github.event.inputs.tests == 'true'
|
||||
timeout-minutes: 360
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [ubuntu-latest, macos-14]
|
||||
python-version: ["3.11"]
|
||||
torch: [latest]
|
||||
include:
|
||||
- os: ubuntu-latest
|
||||
python-version: "3.8" # torch 1.8.0 requires python >=3.6, <=3.8
|
||||
torch: "1.8.0" # min torch version CI https://pypi.org/project/torchvision/
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
cache: "pip" # caching pip dependencies
|
||||
- name: Install requirements
|
||||
shell: bash # for Windows compatibility
|
||||
run: |
|
||||
# CoreML must be installed before export due to protobuf error from AutoInstall
|
||||
python -m pip install --upgrade pip wheel
|
||||
slow=""
|
||||
torch=""
|
||||
if [ "${{ matrix.torch }}" == "1.8.0" ]; then
|
||||
torch="torch==1.8.0 torchvision==0.9.0"
|
||||
fi
|
||||
if [[ "${{ github.event_name }}" =~ ^(schedule|workflow_dispatch)$ ]]; then
|
||||
slow="pycocotools mlflow ray[tune]"
|
||||
fi
|
||||
pip install -e ".[export]" $torch $slow pytest-cov --extra-index-url https://download.pytorch.org/whl/cpu
|
||||
- name: Check environment
|
||||
run: |
|
||||
yolo checks
|
||||
pip list
|
||||
- name: Pytest tests
|
||||
shell: bash # for Windows compatibility
|
||||
run: |
|
||||
slow=""
|
||||
if [[ "${{ github.event_name }}" =~ ^(schedule|workflow_dispatch)$ ]]; then
|
||||
slow="--slow"
|
||||
fi
|
||||
pytest $slow --cov=ultralytics/ --cov-report xml tests/
|
||||
- name: Upload Coverage Reports to CodeCov
|
||||
if: github.repository == 'ultralytics/ultralytics' # && matrix.os == 'ubuntu-latest' && matrix.python-version == '3.11'
|
||||
uses: codecov/codecov-action@v4
|
||||
with:
|
||||
flags: Tests
|
||||
env:
|
||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
||||
|
||||
GPU:
|
||||
if: github.repository == 'ultralytics/ultralytics' && (github.event_name != 'workflow_dispatch' || github.event.inputs.gpu == 'true')
|
||||
timeout-minutes: 360
|
||||
runs-on: gpu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Install requirements
|
||||
run: pip install -e . pytest-cov
|
||||
- name: Check environment
|
||||
run: |
|
||||
yolo checks
|
||||
pip list
|
||||
- name: Pytest tests
|
||||
run: |
|
||||
slow=""
|
||||
if [[ "${{ github.event_name }}" =~ ^(schedule|workflow_dispatch)$ ]]; then
|
||||
slow="--slow"
|
||||
fi
|
||||
pytest $slow --cov=ultralytics/ --cov-report xml tests/test_cuda.py
|
||||
- name: Upload Coverage Reports to CodeCov
|
||||
uses: codecov/codecov-action@v4
|
||||
with:
|
||||
flags: GPU
|
||||
env:
|
||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
||||
|
||||
RaspberryPi:
|
||||
if: github.repository == 'ultralytics/ultralytics' && (github.event_name == 'schedule' || github.event.inputs.raspberrypi == 'true')
|
||||
timeout-minutes: 120
|
||||
runs-on: raspberry-pi
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Activate Virtual Environment
|
||||
run: |
|
||||
python3.11 -m venv env
|
||||
source env/bin/activate
|
||||
echo PATH=$PATH >> $GITHUB_ENV
|
||||
- name: Install requirements
|
||||
run: |
|
||||
python -m pip install --upgrade pip wheel
|
||||
pip install -e ".[export]" pytest mlflow pycocotools "ray[tune]"
|
||||
- name: Check environment
|
||||
run: |
|
||||
yolo checks
|
||||
pip list
|
||||
- name: Pytest tests
|
||||
run: pytest --slow tests/
|
||||
- name: Benchmark ClassificationModel
|
||||
run: python -m ultralytics.cfg.__init__ benchmark model='yolov8n-cls.pt' imgsz=160 verbose=0.166
|
||||
- name: Benchmark YOLOWorld DetectionModel
|
||||
run: python -m ultralytics.cfg.__init__ benchmark model='yolov8s-worldv2.pt' imgsz=160 verbose=0.318
|
||||
- name: Benchmark SegmentationModel
|
||||
run: python -m ultralytics.cfg.__init__ benchmark model='yolov8n-seg.pt' imgsz=160 verbose=0.267
|
||||
- name: Benchmark PoseModel
|
||||
run: python -m ultralytics.cfg.__init__ benchmark model='yolov8n-pose.pt' imgsz=160 verbose=0.179
|
||||
- name: Benchmark OBBModel
|
||||
run: python -m ultralytics.cfg.__init__ benchmark model='yolov8n-obb.pt' imgsz=160 verbose=0.472
|
||||
- name: Benchmark Summary
|
||||
run: |
|
||||
cat benchmarks.log
|
||||
echo "$(cat benchmarks.log)" >> $GITHUB_STEP_SUMMARY
|
||||
- name: Reboot # run a reboot command in the background to free resources for next run and not crash main thread
|
||||
run: sudo bash -c "sleep 10; reboot" &
|
||||
|
||||
Conda:
|
||||
if: github.repository == 'ultralytics/ultralytics' && (github.event_name == 'schedule' || github.event.inputs.conda == 'true')
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [ubuntu-latest]
|
||||
python-version: ["3.11"]
|
||||
defaults:
|
||||
run:
|
||||
shell: bash -el {0}
|
||||
steps:
|
||||
- uses: conda-incubator/setup-miniconda@v3
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
mamba-version: "*"
|
||||
channels: conda-forge,defaults
|
||||
channel-priority: true
|
||||
activate-environment: anaconda-client-env
|
||||
- name: Cleanup toolcache
|
||||
run: |
|
||||
echo "Free space before deletion:"
|
||||
df -h /
|
||||
rm -rf /opt/hostedtoolcache
|
||||
echo "Free space after deletion:"
|
||||
df -h /
|
||||
- name: Install Linux packages
|
||||
run: |
|
||||
# Fix cv2 ImportError: 'libEGL.so.1: cannot open shared object file: No such file or directory'
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y libegl1 libopengl0
|
||||
- name: Install Libmamba
|
||||
run: |
|
||||
conda config --set solver libmamba
|
||||
- name: Install Ultralytics package from conda-forge
|
||||
run: |
|
||||
conda install -c pytorch -c conda-forge pytorch torchvision ultralytics openvino
|
||||
- name: Install pip packages
|
||||
run: |
|
||||
# CoreML must be installed before export due to protobuf error from AutoInstall
|
||||
pip install pytest "coremltools>=7.0; platform_system != 'Windows' and python_version <= '3.11'"
|
||||
- name: Check environment
|
||||
run: |
|
||||
conda list
|
||||
- name: Test CLI
|
||||
run: |
|
||||
yolo predict model=yolov8n.pt imgsz=320
|
||||
yolo train model=yolov8n.pt data=coco8.yaml epochs=1 imgsz=32
|
||||
yolo val model=yolov8n.pt data=coco8.yaml imgsz=32
|
||||
yolo export model=yolov8n.pt format=torchscript imgsz=160
|
||||
- name: Test Python
|
||||
# Note this step must use the updated default bash environment, not a python environment
|
||||
run: |
|
||||
python -c "
|
||||
from ultralytics import YOLO
|
||||
model = YOLO('yolov8n.pt')
|
||||
results = model.train(data='coco8.yaml', epochs=3, imgsz=160)
|
||||
results = model.val(imgsz=160)
|
||||
results = model.predict(imgsz=160)
|
||||
results = model.export(format='onnx', imgsz=160)
|
||||
"
|
||||
- name: PyTest
|
||||
run: |
|
||||
git clone https://github.com/ultralytics/ultralytics
|
||||
pytest ultralytics/tests
|
||||
|
||||
Summary:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [HUB, Benchmarks, Tests, GPU, RaspberryPi, Conda] # Add job names that you want to check for failure
|
||||
if: always() # This ensures the job runs even if previous jobs fail
|
||||
steps:
|
||||
- name: Check for failure and notify
|
||||
if: (needs.HUB.result == 'failure' || needs.Benchmarks.result == 'failure' || needs.Tests.result == 'failure' || needs.GPU.result == 'failure' || needs.RaspberryPi.result == 'failure' || needs.Conda.result == 'failure' ) && github.repository == 'ultralytics/ultralytics' && (github.event_name == 'schedule' || github.event_name == 'push')
|
||||
uses: slackapi/slack-github-action@v1.26.0
|
||||
with:
|
||||
payload: |
|
||||
{"text": "<!channel> GitHub Actions error for ${{ github.workflow }} ❌\n\n\n*Repository:* https://github.com/${{ github.repository }}\n*Action:* https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}\n*Author:* ${{ github.actor }}\n*Event:* ${{ github.event_name }}\n"}
|
||||
env:
|
||||
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL_YOLO }}
|
||||
44
ultralytics_yolov8-main/.github/workflows/cla.yml
vendored
Normal file
44
ultralytics_yolov8-main/.github/workflows/cla.yml
vendored
Normal file
@ -0,0 +1,44 @@
|
||||
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
||||
# Ultralytics Contributor License Agreement (CLA) action https://docs.ultralytics.com/help/CLA
|
||||
# This workflow automatically requests Pull Requests (PR) authors to sign the Ultralytics CLA before PRs can be merged
|
||||
|
||||
name: CLA Assistant
|
||||
on:
|
||||
issue_comment:
|
||||
types:
|
||||
- created
|
||||
pull_request_target:
|
||||
types:
|
||||
- reopened
|
||||
- opened
|
||||
- synchronize
|
||||
|
||||
permissions:
|
||||
actions: write
|
||||
contents: write
|
||||
pull-requests: write
|
||||
statuses: write
|
||||
|
||||
jobs:
|
||||
CLA:
|
||||
if: github.repository == 'ultralytics/ultralytics'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: CLA Assistant
|
||||
if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document and I sign the CLA') || github.event_name == 'pull_request_target'
|
||||
uses: contributor-assistant/github-action@v2.5.1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
# Must be repository secret PAT
|
||||
PERSONAL_ACCESS_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
|
||||
with:
|
||||
path-to-signatures: "signatures/version1/cla.json"
|
||||
path-to-document: "https://docs.ultralytics.com/help/CLA" # CLA document
|
||||
# Branch must not be protected
|
||||
branch: cla-signatures
|
||||
allowlist: dependabot[bot],github-actions,[pre-commit*,pre-commit*,bot*
|
||||
|
||||
remote-organization-name: ultralytics
|
||||
remote-repository-name: cla
|
||||
custom-pr-sign-comment: "I have read the CLA Document and I sign the CLA"
|
||||
custom-allsigned-prcomment: All Contributors have signed the CLA. ✅
|
||||
42
ultralytics_yolov8-main/.github/workflows/codeql.yaml
vendored
Normal file
42
ultralytics_yolov8-main/.github/workflows/codeql.yaml
vendored
Normal file
@ -0,0 +1,42 @@
|
||||
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
||||
|
||||
name: "CodeQL"
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 0 1 * *"
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
runs-on: ${{ 'ubuntu-latest' }}
|
||||
permissions:
|
||||
actions: read
|
||||
contents: read
|
||||
security-events: write
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
language: ["python"]
|
||||
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v3
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
# By default, queries listed here will override any specified in a config file.
|
||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||
# queries: security-extended,security-and-quality
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v3
|
||||
with:
|
||||
category: "/language:${{matrix.language}}"
|
||||
186
ultralytics_yolov8-main/.github/workflows/docker.yaml
vendored
Normal file
186
ultralytics_yolov8-main/.github/workflows/docker.yaml
vendored
Normal file
@ -0,0 +1,186 @@
|
||||
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
||||
# Builds ultralytics/ultralytics:latest images on DockerHub https://hub.docker.com/r/ultralytics
|
||||
|
||||
name: Publish Docker Images
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
paths-ignore:
|
||||
- "docs/**"
|
||||
- "mkdocs.yml"
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
Dockerfile:
|
||||
type: boolean
|
||||
description: Use Dockerfile
|
||||
default: true
|
||||
Dockerfile-cpu:
|
||||
type: boolean
|
||||
description: Use Dockerfile-cpu
|
||||
default: true
|
||||
Dockerfile-arm64:
|
||||
type: boolean
|
||||
description: Use Dockerfile-arm64
|
||||
default: true
|
||||
Dockerfile-jetson-jetpack6:
|
||||
type: boolean
|
||||
description: Use Dockerfile-jetson-jetpack6
|
||||
default: true
|
||||
Dockerfile-jetson-jetpack5:
|
||||
type: boolean
|
||||
description: Use Dockerfile-jetson-jetpack5
|
||||
default: true
|
||||
Dockerfile-jetson-jetpack4:
|
||||
type: boolean
|
||||
description: Use Dockerfile-jetson-jetpack4
|
||||
default: true
|
||||
Dockerfile-python:
|
||||
type: boolean
|
||||
description: Use Dockerfile-python
|
||||
default: true
|
||||
Dockerfile-conda:
|
||||
type: boolean
|
||||
description: Use Dockerfile-conda
|
||||
default: true
|
||||
push:
|
||||
type: boolean
|
||||
description: Publish all Images to Docker Hub
|
||||
|
||||
jobs:
|
||||
docker:
|
||||
if: github.repository == 'ultralytics/ultralytics'
|
||||
name: Push
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
max-parallel: 10
|
||||
matrix:
|
||||
include:
|
||||
- dockerfile: "Dockerfile"
|
||||
tags: "latest"
|
||||
platforms: "linux/amd64"
|
||||
- dockerfile: "Dockerfile-cpu"
|
||||
tags: "latest-cpu"
|
||||
platforms: "linux/amd64"
|
||||
- dockerfile: "Dockerfile-arm64"
|
||||
tags: "latest-arm64"
|
||||
platforms: "linux/arm64"
|
||||
- dockerfile: "Dockerfile-jetson-jetpack6"
|
||||
tags: "latest-jetson-jetpack6"
|
||||
platforms: "linux/arm64"
|
||||
- dockerfile: "Dockerfile-jetson-jetpack5"
|
||||
tags: "latest-jetson-jetpack5"
|
||||
platforms: "linux/arm64"
|
||||
- dockerfile: "Dockerfile-jetson-jetpack4"
|
||||
tags: "latest-jetson-jetpack4"
|
||||
platforms: "linux/arm64"
|
||||
- dockerfile: "Dockerfile-python"
|
||||
tags: "latest-python"
|
||||
platforms: "linux/amd64"
|
||||
# - dockerfile: "Dockerfile-conda"
|
||||
# tags: "latest-conda"
|
||||
# platforms: "linux/amd64"
|
||||
steps:
|
||||
- name: Cleanup toolcache
|
||||
# Free up to 10GB of disk space per https://github.com/ultralytics/ultralytics/pull/14894
|
||||
run: |
|
||||
echo "Free space before deletion:"
|
||||
df -h /
|
||||
rm -rf /opt/hostedtoolcache
|
||||
echo "Free space after deletion:"
|
||||
df -h /
|
||||
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0 # copy full .git directory to access full git history in Docker images
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Login to Docker Hub
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
- name: Retrieve Ultralytics version
|
||||
id: get_version
|
||||
run: |
|
||||
VERSION=$(grep "^__version__ =" ultralytics/__init__.py | awk -F'"' '{print $2}')
|
||||
echo "Retrieved Ultralytics version: $VERSION"
|
||||
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
||||
|
||||
VERSION_TAG=$(echo "${{ matrix.tags }}" | sed "s/latest/${VERSION}/")
|
||||
echo "Intended version tag: $VERSION_TAG"
|
||||
echo "version_tag=$VERSION_TAG" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Check if version tag exists on DockerHub
|
||||
id: check_tag
|
||||
run: |
|
||||
RESPONSE=$(curl -s https://hub.docker.com/v2/repositories/ultralytics/ultralytics/tags/$VERSION_TAG)
|
||||
MESSAGE=$(echo $RESPONSE | jq -r '.message')
|
||||
if [[ "$MESSAGE" == "null" ]]; then
|
||||
echo "Tag $VERSION_TAG already exists on DockerHub."
|
||||
echo "exists=true" >> $GITHUB_OUTPUT
|
||||
elif [[ "$MESSAGE" == *"404"* ]]; then
|
||||
echo "Tag $VERSION_TAG does not exist on DockerHub."
|
||||
echo "exists=false" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "Unexpected response from DockerHub. Please check manually."
|
||||
echo "exists=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
env:
|
||||
VERSION_TAG: ${{ steps.get_version.outputs.version_tag }}
|
||||
|
||||
- name: Build Image
|
||||
if: github.event_name == 'push' || github.event.inputs[matrix.dockerfile] == 'true'
|
||||
uses: nick-invision/retry@v3
|
||||
with:
|
||||
timeout_minutes: 120
|
||||
retry_wait_seconds: 60
|
||||
max_attempts: 2 # retry once
|
||||
command: |
|
||||
docker build \
|
||||
--platform ${{ matrix.platforms }} \
|
||||
-f docker/${{ matrix.dockerfile }} \
|
||||
-t ultralytics/ultralytics:${{ matrix.tags }} \
|
||||
-t ultralytics/ultralytics:${{ steps.get_version.outputs.version_tag }} \
|
||||
.
|
||||
|
||||
- name: Run Tests
|
||||
if: (github.event_name == 'push' || github.event.inputs[matrix.dockerfile] == 'true') && matrix.platforms == 'linux/amd64' && matrix.dockerfile != 'Dockerfile-conda' # arm64 images not supported on GitHub CI runners
|
||||
run: docker run ultralytics/ultralytics:${{ matrix.tags }} /bin/bash -c "pip install pytest && pytest tests"
|
||||
|
||||
- name: Run Benchmarks
|
||||
# WARNING: Dockerfile (GPU) error on TF.js export 'module 'numpy' has no attribute 'object'.
|
||||
if: (github.event_name == 'push' || github.event.inputs[matrix.dockerfile] == 'true') && matrix.platforms == 'linux/amd64' && matrix.dockerfile != 'Dockerfile' && matrix.dockerfile != 'Dockerfile-conda' # arm64 images not supported on GitHub CI runners
|
||||
run: docker run ultralytics/ultralytics:${{ matrix.tags }} yolo benchmark model=yolov8n.pt imgsz=160 verbose=0.318
|
||||
|
||||
- name: Push Docker Image with Ultralytics version tag
|
||||
if: (github.event_name == 'push' || (github.event.inputs[matrix.dockerfile] == 'true' && github.event.inputs.push == 'true')) && steps.check_tag.outputs.exists == 'false' && matrix.dockerfile != 'Dockerfile-conda'
|
||||
run: |
|
||||
docker push ultralytics/ultralytics:${{ steps.get_version.outputs.version_tag }}
|
||||
|
||||
- name: Push Docker Image with latest tag
|
||||
if: github.event_name == 'push' || (github.event.inputs[matrix.dockerfile] == 'true' && github.event.inputs.push == 'true')
|
||||
run: |
|
||||
docker push ultralytics/ultralytics:${{ matrix.tags }}
|
||||
if [[ "${{ matrix.tags }}" == "latest" ]]; then
|
||||
t=ultralytics/ultralytics:latest-runner
|
||||
docker build -f docker/Dockerfile-runner -t $t .
|
||||
docker push $t
|
||||
fi
|
||||
|
||||
- name: Notify on failure
|
||||
if: github.event_name == 'push' && failure() # do not notify on cancelled() as cancelling is performed by hand
|
||||
uses: slackapi/slack-github-action@v1.26.0
|
||||
with:
|
||||
payload: |
|
||||
{"text": "<!channel> GitHub Actions error for ${{ github.workflow }} ❌\n\n\n*Repository:* https://github.com/${{ github.repository }}\n*Action:* https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}\n*Author:* ${{ github.actor }}\n*Event:* ${{ github.event_name }}\n"}
|
||||
env:
|
||||
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL_YOLO }}
|
||||
101
ultralytics_yolov8-main/.github/workflows/docs.yml
vendored
Normal file
101
ultralytics_yolov8-main/.github/workflows/docs.yml
vendored
Normal file
@ -0,0 +1,101 @@
|
||||
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
||||
# Test and publish docs to https://docs.ultralytics.com
|
||||
# Ignores the following Docs rules to match Google-style docstrings:
|
||||
# D100: Missing docstring in public module
|
||||
# D104: Missing docstring in public package
|
||||
# D203: 1 blank line required before class docstring
|
||||
# D205: 1 blank line required between summary line and description
|
||||
# D212: Multi-line docstring summary should start at the first line
|
||||
# D213: Multi-line docstring summary should start at the second line
|
||||
# D401: First line of docstring should be in imperative mood
|
||||
# D406: Section name should end with a newline
|
||||
# D407: Missing dashed underline after section
|
||||
# D413: Missing blank line after last section
|
||||
|
||||
name: Publish Docs
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
pull_request_target:
|
||||
branches: [main]
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
Docs:
|
||||
if: github.repository == 'ultralytics/ultralytics'
|
||||
runs-on: macos-14
|
||||
steps:
|
||||
- name: Git config
|
||||
run: |
|
||||
git config --global user.name "UltralyticsAssistant"
|
||||
git config --global user.email "web@ultralytics.com"
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: ${{ github.event.pull_request.head.repo.full_name || github.repository }}
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
ref: ${{ github.head_ref || github.ref }}
|
||||
fetch-depth: 0
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: "3.x"
|
||||
cache: "pip" # caching pip dependencies
|
||||
- name: Install Dependencies
|
||||
run: pip install ruff black tqdm mkdocs-material "mkdocstrings[python]" mkdocs-jupyter mkdocs-redirects mkdocs-ultralytics-plugin mkdocs-macros-plugin
|
||||
- name: Ruff fixes
|
||||
continue-on-error: true
|
||||
run: ruff check --fix --fix-unsafe --select D --ignore=D100,D104,D203,D205,D212,D213,D401,D406,D407,D413 .
|
||||
- name: Update Docs Reference Section and Push Changes
|
||||
if: github.event_name == 'pull_request_target'
|
||||
run: |
|
||||
python docs/build_reference.py
|
||||
git pull origin ${{ github.head_ref || github.ref }}
|
||||
git add .
|
||||
git reset HEAD -- .github/workflows/ # workflow changes are not permitted with default token
|
||||
if ! git diff --staged --quiet; then
|
||||
git commit -m "Auto-update Ultralytics Docs Reference by https://ultralytics.com/actions"
|
||||
git push
|
||||
else
|
||||
echo "No changes to commit"
|
||||
fi
|
||||
- name: Ruff checks
|
||||
run: ruff check --select D --ignore=D100,D104,D203,D205,D212,D213,D401,D406,D407,D413 .
|
||||
- name: Build Docs and Check for Warnings
|
||||
run: |
|
||||
export JUPYTER_PLATFORM_DIRS=1
|
||||
python docs/build_docs.py
|
||||
- name: Commit and Push Docs changes
|
||||
continue-on-error: true
|
||||
if: always() && github.event_name == 'pull_request_target'
|
||||
run: |
|
||||
git pull origin ${{ github.head_ref || github.ref }}
|
||||
git add --update # only add updated files
|
||||
git reset HEAD -- .github/workflows/ # workflow changes are not permitted with default token
|
||||
if ! git diff --staged --quiet; then
|
||||
git commit -m "Auto-update Ultralytics Docs by https://ultralytics.com/actions"
|
||||
git push
|
||||
else
|
||||
echo "No changes to commit"
|
||||
fi
|
||||
- name: Publish Docs to https://docs.ultralytics.com
|
||||
if: github.event_name == 'push'
|
||||
env:
|
||||
PERSONAL_ACCESS_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
|
||||
INDEXNOW_KEY: ${{ secrets.INDEXNOW_KEY_DOCS }}
|
||||
run: |
|
||||
git clone https://github.com/ultralytics/docs.git docs-repo
|
||||
cd docs-repo
|
||||
git checkout gh-pages || git checkout -b gh-pages
|
||||
rm -rf *
|
||||
cp -R ../site/* .
|
||||
echo "$INDEXNOW_KEY" > "$INDEXNOW_KEY.txt"
|
||||
git add .
|
||||
if git diff --staged --quiet; then
|
||||
echo "No changes to commit"
|
||||
else
|
||||
LATEST_HASH=$(git rev-parse --short=7 HEAD)
|
||||
git commit -m "Update Docs for 'ultralytics ${{ steps.check_pypi.outputs.version }} - $LATEST_HASH'"
|
||||
git push https://$PERSONAL_ACCESS_TOKEN@github.com/ultralytics/docs.git gh-pages
|
||||
fi
|
||||
29
ultralytics_yolov8-main/.github/workflows/format.yml
vendored
Normal file
29
ultralytics_yolov8-main/.github/workflows/format.yml
vendored
Normal file
@ -0,0 +1,29 @@
|
||||
# Ultralytics 🚀 - AGPL-3.0 License https://ultralytics.com/license
|
||||
# Ultralytics Actions https://github.com/ultralytics/actions
|
||||
# This workflow automatically formats code and documentation in PRs to official Ultralytics standards
|
||||
|
||||
name: Ultralytics Actions
|
||||
|
||||
on:
|
||||
issues:
|
||||
types: [opened, edited]
|
||||
pull_request_target:
|
||||
branches: [main]
|
||||
types: [opened, closed, synchronize, review_requested]
|
||||
|
||||
jobs:
|
||||
format:
|
||||
runs-on: macos-14
|
||||
steps:
|
||||
- name: Run Ultralytics Formatting
|
||||
uses: ultralytics/actions@main
|
||||
with:
|
||||
token: ${{ secrets.PERSONAL_ACCESS_TOKEN || secrets.GITHUB_TOKEN }} # note GITHUB_TOKEN automatically generated
|
||||
labels: true # autolabel issues and PRs
|
||||
python: true # format Python code and docstrings
|
||||
prettier: true # format YAML, JSON, Markdown and CSS
|
||||
spelling: true # check spelling
|
||||
links: false # check broken links
|
||||
summary: true # print PR summary with GPT4o (requires 'openai_api_key')
|
||||
openai_azure_api_key: ${{ secrets.OPENAI_AZURE_API_KEY }}
|
||||
openai_azure_endpoint: ${{ secrets.OPENAI_AZURE_ENDPOINT }}
|
||||
58
ultralytics_yolov8-main/.github/workflows/greetings.yml
vendored
Normal file
58
ultralytics_yolov8-main/.github/workflows/greetings.yml
vendored
Normal file
@ -0,0 +1,58 @@
|
||||
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
||||
|
||||
name: Greetings
|
||||
|
||||
on:
|
||||
pull_request_target:
|
||||
types: [opened]
|
||||
issues:
|
||||
types: [opened]
|
||||
|
||||
jobs:
|
||||
greeting:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/first-interaction@v1
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
pr-message: |
|
||||
👋 Hello @${{ github.actor }}, thank you for submitting an Ultralytics YOLOv8 🚀 PR! To allow your work to be integrated as seamlessly as possible, we advise you to:
|
||||
|
||||
- ✅ Verify your PR is **up-to-date** with `ultralytics/ultralytics` `main` branch. If your PR is behind you can update your code by clicking the 'Update branch' button or by running `git pull` and `git merge main` locally.
|
||||
- ✅ Verify all YOLOv8 Continuous Integration (CI) **checks are passing**.
|
||||
- ✅ Update YOLOv8 [Docs](https://docs.ultralytics.com) for any new or updated features.
|
||||
- ✅ Reduce changes to the absolute **minimum** required for your bug fix or feature addition. _"It is not daily increase but daily decrease, hack away the unessential. The closer to the source, the less wastage there is."_ — Bruce Lee
|
||||
|
||||
See our [Contributing Guide](https://docs.ultralytics.com/help/contributing) for details and let us know if you have any questions!
|
||||
|
||||
issue-message: |
|
||||
👋 Hello @${{ github.actor }}, thank you for your interest in Ultralytics YOLOv8 🚀! We recommend a visit to the [Docs](https://docs.ultralytics.com) for new users where you can find many [Python](https://docs.ultralytics.com/usage/python/) and [CLI](https://docs.ultralytics.com/usage/cli/) usage examples and where many of the most common questions may already be answered.
|
||||
|
||||
If this is a 🐛 Bug Report, please provide a [minimum reproducible example](https://docs.ultralytics.com/help/minimum_reproducible_example/) to help us debug it.
|
||||
|
||||
If this is a custom training ❓ Question, please provide as much information as possible, including dataset image examples and training logs, and verify you are following our [Tips for Best Training Results](https://docs.ultralytics.com/guides/model-training-tips//).
|
||||
|
||||
Join the vibrant [Ultralytics Discord](https://ultralytics.com/discord) 🎧 community for real-time conversations and collaborations. This platform offers a perfect space to inquire, showcase your work, and connect with fellow Ultralytics users.
|
||||
|
||||
## Install
|
||||
|
||||
Pip install the `ultralytics` package including all [requirements](https://github.com/ultralytics/ultralytics/blob/main/pyproject.toml) in a [**Python>=3.8**](https://www.python.org/) environment with [**PyTorch>=1.8**](https://pytorch.org/get-started/locally/).
|
||||
|
||||
```bash
|
||||
pip install ultralytics
|
||||
```
|
||||
|
||||
## Environments
|
||||
|
||||
YOLOv8 may be run in any of the following up-to-date verified environments (with all dependencies including [CUDA](https://developer.nvidia.com/cuda)/[CUDNN](https://developer.nvidia.com/cudnn), [Python](https://www.python.org/) and [PyTorch](https://pytorch.org/) preinstalled):
|
||||
|
||||
- **Notebooks** with free GPU: <a href="https://console.paperspace.com/github/ultralytics/ultralytics"><img src="https://assets.paperspace.io/img/gradient-badge.svg" alt="Run on Gradient"/></a> <a href="https://colab.research.google.com/github/ultralytics/ultralytics/blob/main/examples/tutorial.ipynb"><img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"></a> <a href="https://www.kaggle.com/ultralytics/yolov8"><img src="https://kaggle.com/static/images/open-in-kaggle.svg" alt="Open In Kaggle"></a>
|
||||
- **Google Cloud** Deep Learning VM. See [GCP Quickstart Guide](https://docs.ultralytics.com/yolov5/environments/google_cloud_quickstart_tutorial/)
|
||||
- **Amazon** Deep Learning AMI. See [AWS Quickstart Guide](https://docs.ultralytics.com/yolov5/environments/aws_quickstart_tutorial/)
|
||||
- **Docker Image**. See [Docker Quickstart Guide](https://docs.ultralytics.com/yolov5/environments/docker_image_quickstart_tutorial/) <a href="https://hub.docker.com/r/ultralytics/ultralytics"><img src="https://img.shields.io/docker/pulls/ultralytics/ultralytics?logo=docker" alt="Docker Pulls"></a>
|
||||
|
||||
## Status
|
||||
|
||||
<a href="https://github.com/ultralytics/ultralytics/actions/workflows/ci.yaml?query=event%3Aschedule"><img src="https://github.com/ultralytics/ultralytics/actions/workflows/ci.yaml/badge.svg" alt="Ultralytics CI"></a>
|
||||
|
||||
If this badge is green, all [Ultralytics CI](https://github.com/ultralytics/ultralytics/actions/workflows/ci.yaml?query=event%3Aschedule) tests are currently passing. CI tests verify correct operation of all YOLOv8 [Modes](https://docs.ultralytics.com/modes/) and [Tasks](https://docs.ultralytics.com/tasks/) on macOS, Windows, and Ubuntu every 24 hours and on every commit.
|
||||
93
ultralytics_yolov8-main/.github/workflows/links.yml
vendored
Normal file
93
ultralytics_yolov8-main/.github/workflows/links.yml
vendored
Normal file
@ -0,0 +1,93 @@
|
||||
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
||||
# Continuous Integration (CI) GitHub Actions tests broken link checker using https://github.com/lycheeverse/lychee
|
||||
# Ignores the following status codes to reduce false positives:
|
||||
# - 401(Vimeo, 'unauthorized')
|
||||
# - 403(OpenVINO, 'forbidden')
|
||||
# - 429(Instagram, 'too many requests')
|
||||
# - 500(Zenodo, 'cached')
|
||||
# - 502(Zenodo, 'bad gateway')
|
||||
# - 999(LinkedIn, 'unknown status code')
|
||||
|
||||
name: Check Broken links
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: "0 0 * * *" # runs at 00:00 UTC every day
|
||||
|
||||
jobs:
|
||||
Links:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Download and install lychee
|
||||
run: |
|
||||
LYCHEE_URL=$(curl -s https://api.github.com/repos/lycheeverse/lychee/releases/latest | grep "browser_download_url" | grep "x86_64-unknown-linux-gnu.tar.gz" | cut -d '"' -f 4)
|
||||
curl -L $LYCHEE_URL -o lychee.tar.gz
|
||||
tar xzf lychee.tar.gz
|
||||
sudo mv lychee /usr/local/bin
|
||||
|
||||
- name: Test Markdown and HTML links with retry
|
||||
uses: nick-invision/retry@v3
|
||||
with:
|
||||
timeout_minutes: 5
|
||||
retry_wait_seconds: 60
|
||||
max_attempts: 3
|
||||
command: |
|
||||
lychee \
|
||||
--scheme https \
|
||||
--timeout 60 \
|
||||
--insecure \
|
||||
--accept 401,403,429,500,502,999 \
|
||||
--exclude-all-private \
|
||||
--exclude 'https?://(www\.)?(linkedin\.com|twitter\.com|instagram\.com|kaggle\.com|fonts\.gstatic\.com|url\.com)' \
|
||||
--exclude-path docs/zh \
|
||||
--exclude-path docs/es \
|
||||
--exclude-path docs/ru \
|
||||
--exclude-path docs/pt \
|
||||
--exclude-path docs/fr \
|
||||
--exclude-path docs/de \
|
||||
--exclude-path docs/ja \
|
||||
--exclude-path docs/ko \
|
||||
--exclude-path docs/hi \
|
||||
--exclude-path docs/ar \
|
||||
--github-token ${{ secrets.GITHUB_TOKEN }} \
|
||||
--header "User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6478.183 Safari/537.36" \
|
||||
'./**/*.md' \
|
||||
'./**/*.html'
|
||||
|
||||
- name: Test Markdown, HTML, YAML, Python and Notebook links with retry
|
||||
if: github.event_name == 'workflow_dispatch'
|
||||
uses: nick-invision/retry@v3
|
||||
with:
|
||||
timeout_minutes: 5
|
||||
retry_wait_seconds: 60
|
||||
max_attempts: 3
|
||||
command: |
|
||||
lychee \
|
||||
--scheme https \
|
||||
--timeout 60 \
|
||||
--insecure \
|
||||
--accept 401,403,429,500,502,999 \
|
||||
--exclude-all-private \
|
||||
--exclude 'https?://(www\.)?(linkedin\.com|twitter\.com|instagram\.com|kaggle\.com|fonts\.gstatic\.com|url\.com)' \
|
||||
--exclude-path '**/ci.yaml' \
|
||||
--exclude-path docs/zh \
|
||||
--exclude-path docs/es \
|
||||
--exclude-path docs/ru \
|
||||
--exclude-path docs/pt \
|
||||
--exclude-path docs/fr \
|
||||
--exclude-path docs/de \
|
||||
--exclude-path docs/ja \
|
||||
--exclude-path docs/ko \
|
||||
--exclude-path docs/hi \
|
||||
--exclude-path docs/ar \
|
||||
--github-token ${{ secrets.GITHUB_TOKEN }} \
|
||||
--header "User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6478.183 Safari/537.36" \
|
||||
'./**/*.md' \
|
||||
'./**/*.html' \
|
||||
'./**/*.yml' \
|
||||
'./**/*.yaml' \
|
||||
'./**/*.py' \
|
||||
'./**/*.ipynb'
|
||||
91
ultralytics_yolov8-main/.github/workflows/merge-main-into-prs.yml
vendored
Normal file
91
ultralytics_yolov8-main/.github/workflows/merge-main-into-prs.yml
vendored
Normal file
@ -0,0 +1,91 @@
|
||||
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
||||
# Automatically merges repository 'main' branch into all open PRs to keep them up-to-date
|
||||
# Action runs on updates to main branch so when one PR merges to main all others update
|
||||
|
||||
name: Merge main into PRs
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
# push:
|
||||
# branches:
|
||||
# - ${{ github.event.repository.default_branch }}
|
||||
|
||||
jobs:
|
||||
Merge:
|
||||
if: github.repository == 'ultralytics/ultralytics'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: "3.x"
|
||||
cache: "pip"
|
||||
- name: Install requirements
|
||||
run: |
|
||||
pip install pygithub
|
||||
- name: Merge default branch into PRs
|
||||
shell: python
|
||||
run: |
|
||||
from github import Github
|
||||
import os
|
||||
import time
|
||||
|
||||
g = Github(os.getenv('GITHUB_TOKEN'))
|
||||
repo = g.get_repo(os.getenv('GITHUB_REPOSITORY'))
|
||||
|
||||
# Fetch the default branch name
|
||||
default_branch_name = repo.default_branch
|
||||
default_branch = repo.get_branch(default_branch_name)
|
||||
|
||||
# Initialize counters
|
||||
updated_branches = 0
|
||||
up_to_date_branches = 0
|
||||
errors = 0
|
||||
|
||||
for pr in repo.get_pulls(state='open', sort='created'):
|
||||
try:
|
||||
# Label PRs as popular for positive reactions
|
||||
reactions = pr.as_issue().get_reactions()
|
||||
if sum([(1 if r.content not in {"-1", "confused"} else 0) for r in reactions]) > 5:
|
||||
pr.set_labels(*("popular",) + tuple(l.name for l in pr.get_labels()))
|
||||
|
||||
# Get full names for repositories and branches
|
||||
base_repo_name = repo.full_name
|
||||
head_repo_name = pr.head.repo.full_name
|
||||
base_branch_name = pr.base.ref
|
||||
head_branch_name = pr.head.ref
|
||||
|
||||
# Check if PR is behind the default branch
|
||||
comparison = repo.compare(default_branch.commit.sha, pr.head.sha)
|
||||
if comparison.behind_by > 0:
|
||||
print(f"⚠️ PR #{pr.number} ({head_repo_name}:{head_branch_name} -> {base_repo_name}:{base_branch_name}) is behind {default_branch_name} by {comparison.behind_by} commit(s).")
|
||||
|
||||
# Attempt to update the branch
|
||||
try:
|
||||
success = pr.update_branch()
|
||||
assert success, "Branch update failed"
|
||||
print(f"✅ Successfully merged '{default_branch_name}' into PR #{pr.number} ({head_repo_name}:{head_branch_name} -> {base_repo_name}:{base_branch_name}).")
|
||||
updated_branches += 1
|
||||
time.sleep(10) # rate limit merges
|
||||
except Exception as update_error:
|
||||
print(f"❌ Could not update PR #{pr.number} ({head_repo_name}:{head_branch_name} -> {base_repo_name}:{base_branch_name}): {update_error}")
|
||||
errors += 1
|
||||
else:
|
||||
print(f"✅ PR #{pr.number} ({head_repo_name}:{head_branch_name} -> {base_repo_name}:{base_branch_name}) is already up to date with {default_branch_name}, no merge required.")
|
||||
up_to_date_branches += 1
|
||||
except Exception as e:
|
||||
print(f"❌ Could not process PR #{pr.number}: {e}")
|
||||
errors += 1
|
||||
|
||||
# Print summary
|
||||
print("\n\nSummary:")
|
||||
print(f"Branches updated: {updated_branches}")
|
||||
print(f"Branches already up-to-date: {up_to_date_branches}")
|
||||
print(f"Total errors: {errors}")
|
||||
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN || secrets.GITHUB_TOKEN }}
|
||||
GITHUB_REPOSITORY: ${{ github.repository }}
|
||||
206
ultralytics_yolov8-main/.github/workflows/publish.yml
vendored
Normal file
206
ultralytics_yolov8-main/.github/workflows/publish.yml
vendored
Normal file
@ -0,0 +1,206 @@
|
||||
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
||||
# Publish pip package to PyPI https://pypi.org/project/ultralytics/
|
||||
|
||||
name: Publish to PyPI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
pypi:
|
||||
type: boolean
|
||||
description: Publish to PyPI
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
if: github.repository == 'ultralytics/ultralytics' && github.actor == 'glenn-jocher'
|
||||
name: Publish
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
token: ${{ secrets.PERSONAL_ACCESS_TOKEN || secrets.GITHUB_TOKEN }} # use your PAT here
|
||||
- name: Git config
|
||||
run: |
|
||||
git config --global user.name "UltralyticsAssistant"
|
||||
git config --global user.email "web@ultralytics.com"
|
||||
- name: Set up Python environment
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: "3.x"
|
||||
cache: "pip" # caching pip dependencies
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip wheel
|
||||
pip install openai requests build twine toml
|
||||
- name: Check PyPI version
|
||||
shell: python
|
||||
run: |
|
||||
import os
|
||||
import requests
|
||||
import toml
|
||||
|
||||
# Load version and package name from pyproject.toml
|
||||
pyproject = toml.load('pyproject.toml')
|
||||
package_name = pyproject['project']['name']
|
||||
local_version = pyproject['project'].get('version', 'dynamic')
|
||||
|
||||
# If version is dynamic, extract it from the specified file
|
||||
if local_version == 'dynamic':
|
||||
version_attr = pyproject['tool']['setuptools']['dynamic']['version']['attr']
|
||||
module_path, attr_name = version_attr.rsplit('.', 1)
|
||||
with open(f"{module_path.replace('.', '/')}/__init__.py") as f:
|
||||
local_version = next(line.split('=')[1].strip().strip("'\"") for line in f if line.startswith(attr_name))
|
||||
|
||||
print(f"Local Version: {local_version}")
|
||||
|
||||
# Get online version from PyPI
|
||||
response = requests.get(f"https://pypi.org/pypi/{package_name}/json")
|
||||
online_version = response.json()['info']['version'] if response.status_code == 200 else None
|
||||
print(f"Online Version: {online_version or 'Not Found'}")
|
||||
|
||||
# Determine if a new version should be published
|
||||
publish = False
|
||||
if online_version:
|
||||
local_ver = tuple(map(int, local_version.split('.')))
|
||||
online_ver = tuple(map(int, online_version.split('.')))
|
||||
major_diff = local_ver[0] - online_ver[0]
|
||||
minor_diff = local_ver[1] - online_ver[1]
|
||||
patch_diff = local_ver[2] - online_ver[2]
|
||||
|
||||
publish = (
|
||||
(major_diff == 0 and minor_diff == 0 and 0 < patch_diff <= 2) or
|
||||
(major_diff == 0 and minor_diff == 1 and local_ver[2] == 0) or
|
||||
(major_diff == 1 and local_ver[1] == 0 and local_ver[2] == 0)
|
||||
)
|
||||
else:
|
||||
publish = True # First release
|
||||
|
||||
os.system(f'echo "increment={publish}" >> $GITHUB_OUTPUT')
|
||||
os.system(f'echo "version={local_version}" >> $GITHUB_OUTPUT')
|
||||
os.system(f'echo "previous_version={online_version or "N/A"}" >> $GITHUB_OUTPUT')
|
||||
|
||||
if publish:
|
||||
print('Ready to publish new version to PyPI ✅.')
|
||||
id: check_pypi
|
||||
- name: Publish new tag
|
||||
if: (github.event_name == 'push' || github.event.inputs.pypi == 'true') && steps.check_pypi.outputs.increment == 'True'
|
||||
run: |
|
||||
git tag -a "v${{ steps.check_pypi.outputs.version }}" -m "$(git log -1 --pretty=%B)" # i.e. "v0.1.2 commit message"
|
||||
git push origin "v${{ steps.check_pypi.outputs.version }}"
|
||||
- name: Publish new release
|
||||
if: (github.event_name == 'push' || github.event.inputs.pypi == 'true') && steps.check_pypi.outputs.increment == 'True'
|
||||
env:
|
||||
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
|
||||
GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN || secrets.GITHUB_TOKEN }}
|
||||
CURRENT_TAG: ${{ steps.check_pypi.outputs.version }}
|
||||
PREVIOUS_TAG: ${{ steps.check_pypi.outputs.previous_version }}
|
||||
shell: python
|
||||
run: |
|
||||
import openai
|
||||
import os
|
||||
import requests
|
||||
import json
|
||||
import subprocess
|
||||
|
||||
# Retrieve environment variables
|
||||
OPENAI_API_KEY = os.getenv('OPENAI_API_KEY')
|
||||
GITHUB_TOKEN = os.getenv('GITHUB_TOKEN')
|
||||
CURRENT_TAG = os.getenv('CURRENT_TAG')
|
||||
PREVIOUS_TAG = os.getenv('PREVIOUS_TAG')
|
||||
|
||||
# Check for required environment variables
|
||||
if not all([OPENAI_API_KEY, GITHUB_TOKEN, CURRENT_TAG, PREVIOUS_TAG]):
|
||||
raise ValueError("One or more required environment variables are missing.")
|
||||
|
||||
latest_tag = f"v{CURRENT_TAG}"
|
||||
previous_tag = f"v{PREVIOUS_TAG}"
|
||||
repo = os.getenv('GITHUB_REPOSITORY')
|
||||
headers = {"Authorization": f"token {GITHUB_TOKEN}", "Accept": "application/vnd.github.v3.diff"}
|
||||
|
||||
# Get the diff between the tags
|
||||
url = f"https://api.github.com/repos/{repo}/compare/{previous_tag}...{latest_tag}"
|
||||
response = requests.get(url, headers=headers)
|
||||
diff = response.text if response.status_code == 200 else f"Failed to get diff: {response.content}"
|
||||
|
||||
# Get summary
|
||||
messages = [
|
||||
{
|
||||
"role": "system",
|
||||
"content": "You are an Ultralytics AI assistant skilled in software development and technical communication. Your task is to summarize GitHub releases in a way that is detailed, accurate, and understandable to both expert developers and non-expert users. Focus on highlighting the key changes and their impact in simple and intuitive terms."
|
||||
},
|
||||
{
|
||||
"role": "user",
|
||||
"content": f"Summarize the updates made in the '{latest_tag}' tag, focusing on major changes, their purpose, and potential impact. Keep the summary clear and suitable for a broad audience. Add emojis to enliven the summary. Reply directly with a summary along these example guidelines, though feel free to adjust as appropriate:\n\n"
|
||||
f"## 🌟 Summary (single-line synopsis)\n"
|
||||
f"## 📊 Key Changes (bullet points highlighting any major changes)\n"
|
||||
f"## 🎯 Purpose & Impact (bullet points explaining any benefits and potential impact to users)\n"
|
||||
f"\n\nHere's the release diff:\n\n{diff[:300000]}",
|
||||
}
|
||||
]
|
||||
client = openai.OpenAI(api_key=OPENAI_API_KEY)
|
||||
completion = client.chat.completions.create(model="gpt-4o-2024-08-06", messages=messages)
|
||||
summary = completion.choices[0].message.content.strip()
|
||||
|
||||
# Get the latest commit message
|
||||
commit_message = subprocess.run(['git', 'log', '-1', '--pretty=%B'], check=True, text=True, capture_output=True).stdout.split("\n")[0].strip()
|
||||
|
||||
# Prepare release data
|
||||
release = {
|
||||
'tag_name': latest_tag,
|
||||
'name': f"{latest_tag} - {commit_message}",
|
||||
'body': summary,
|
||||
'draft': False,
|
||||
'prerelease': False
|
||||
}
|
||||
|
||||
# Create the release on GitHub
|
||||
release_url = f"https://api.github.com/repos/{repo}/releases"
|
||||
release_response = requests.post(release_url, headers=headers, data=json.dumps(release))
|
||||
if release_response.status_code == 201:
|
||||
print(f'Successfully created release {latest_tag}')
|
||||
else:
|
||||
print(f'Failed to create release {latest_tag}: {release_response.content}')
|
||||
- name: Publish to PyPI
|
||||
continue-on-error: true
|
||||
if: (github.event_name == 'push' || github.event.inputs.pypi == 'true') && steps.check_pypi.outputs.increment == 'True'
|
||||
env:
|
||||
PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}
|
||||
run: |
|
||||
python -m build
|
||||
python -m twine upload dist/* -u __token__ -p $PYPI_TOKEN
|
||||
- name: Extract PR Details
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN || secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
# Check if the event is a pull request or pull_request_target
|
||||
if [ "${{ github.event_name }}" = "pull_request" ] || [ "${{ github.event_name }}" = "pull_request_target" ]; then
|
||||
PR_NUMBER=${{ github.event.pull_request.number }}
|
||||
PR_TITLE=$(gh pr view $PR_NUMBER --json title --jq '.title')
|
||||
else
|
||||
# Use gh to find the PR associated with the commit
|
||||
COMMIT_SHA=${{ github.event.after }}
|
||||
PR_JSON=$(gh pr list --search "${COMMIT_SHA}" --state merged --json number,title --jq '.[0]')
|
||||
PR_NUMBER=$(echo $PR_JSON | jq -r '.number')
|
||||
PR_TITLE=$(echo $PR_JSON | jq -r '.title')
|
||||
fi
|
||||
echo "PR_NUMBER=$PR_NUMBER" >> $GITHUB_ENV
|
||||
echo "PR_TITLE=$PR_TITLE" >> $GITHUB_ENV
|
||||
- name: Notify on Slack (Success)
|
||||
if: success() && github.event_name == 'push' && steps.check_pypi.outputs.increment == 'True'
|
||||
uses: slackapi/slack-github-action@v1.26.0
|
||||
with:
|
||||
payload: |
|
||||
{"text": "<!channel> GitHub Actions success for ${{ github.workflow }} ✅\n\n\n*Repository:* https://github.com/${{ github.repository }}\n*Action:* https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}\n*Author:* ${{ github.actor }}\n*Event:* NEW '${{ github.repository }} v${{ steps.check_pypi.outputs.version }}' pip package published 😃\n*Job Status:* ${{ job.status }}\n*Pull Request:* <https://github.com/${{ github.repository }}/pull/${{ env.PR_NUMBER }}> ${{ env.PR_TITLE }}\n"}
|
||||
env:
|
||||
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL_YOLO }}
|
||||
- name: Notify on Slack (Failure)
|
||||
if: failure()
|
||||
uses: slackapi/slack-github-action@v1.26.0
|
||||
with:
|
||||
payload: |
|
||||
{"text": "<!channel> GitHub Actions error for ${{ github.workflow }} ❌\n\n\n*Repository:* https://github.com/${{ github.repository }}\n*Action:* https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}\n*Author:* ${{ github.actor }}\n*Event:* ${{ github.event_name }}\n*Job Status:* ${{ job.status }}\n*Pull Request:* <https://github.com/${{ github.repository }}/pull/${{ env.PR_NUMBER }}> ${{ env.PR_TITLE }}\n"}
|
||||
env:
|
||||
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL_YOLO }}
|
||||
47
ultralytics_yolov8-main/.github/workflows/stale.yml
vendored
Normal file
47
ultralytics_yolov8-main/.github/workflows/stale.yml
vendored
Normal file
@ -0,0 +1,47 @@
|
||||
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
||||
|
||||
name: Close stale issues
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 0 * * *" # Runs at 00:00 UTC every day
|
||||
|
||||
jobs:
|
||||
stale:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/stale@v9
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
stale-issue-message: |
|
||||
👋 Hello there! We wanted to give you a friendly reminder that this issue has not had any recent activity and may be closed soon, but don't worry - you can always reopen it if needed. If you still have any questions or concerns, please feel free to let us know how we can help.
|
||||
|
||||
For additional resources and information, please see the links below:
|
||||
|
||||
- **Docs**: https://docs.ultralytics.com
|
||||
- **HUB**: https://hub.ultralytics.com
|
||||
- **Community**: https://community.ultralytics.com
|
||||
|
||||
Feel free to inform us of any other **issues** you discover or **feature requests** that come to mind in the future. Pull Requests (PRs) are also always welcomed!
|
||||
|
||||
Thank you for your contributions to YOLO 🚀 and Vision AI ⭐
|
||||
|
||||
stale-pr-message: |
|
||||
👋 Hello there! We wanted to let you know that we've decided to close this pull request due to inactivity. We appreciate the effort you put into contributing to our project, but unfortunately, not all contributions are suitable or aligned with our product roadmap.
|
||||
|
||||
We hope you understand our decision, and please don't let it discourage you from contributing to open source projects in the future. We value all of our community members and their contributions, and we encourage you to keep exploring new projects and ways to get involved.
|
||||
|
||||
For additional resources and information, please see the links below:
|
||||
|
||||
- **Docs**: https://docs.ultralytics.com
|
||||
- **HUB**: https://hub.ultralytics.com
|
||||
- **Community**: https://community.ultralytics.com
|
||||
|
||||
Thank you for your contributions to YOLO 🚀 and Vision AI ⭐
|
||||
|
||||
days-before-issue-stale: 30
|
||||
days-before-issue-close: 10
|
||||
days-before-pr-stale: 90
|
||||
days-before-pr-close: 30
|
||||
exempt-issue-labels: "documentation,tutorial,TODO"
|
||||
operations-per-run: 300 # The maximum number of operations per run, used to control rate limiting.
|
||||
Reference in New Issue
Block a user