Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file added -Headers
Empty file.
Empty file added -Uri
Empty file.
3 changes: 2 additions & 1 deletion .dockerignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
__pycache__/
node_modules/
.env
.git
.git
venv/
Empty file added Accept
Empty file.
Empty file added Authorization
Empty file.
72 changes: 72 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@

```markdown
# Система обнаружения плагиата с помошью compare50/ Plagiarism Detection System

## Быстрый старт / Quick Start

### 1. Установка / Installation
```bash
pip install -r requirements.txt
pip install compare50
```

### 2. Настройка / Configuration
```bash
echo "GITHUB_TOKEN=ваш_токен" > .env
cp credentials.example.json credentials.json
```

Конфигурация `courses/{course_id}.yaml`:
```yaml
labs:
"1":
plagiarism:
enabled: true # Включить проверку
threshold: 7.5 # Порог сходства (0-100)
reference_files: [data/distribution/lab1.cpp] # Эталонные файлы
```

### 3. Запуск проверки / Running Checks
```bash
# Запуск API сервера
uvicorn main:app --reload

# Или прямое выполнение
python -m services.plagiarism.checker --course ваш_идентификатор_курса
```

## Основные возможности / Key Features
- **Автоматическое обнаружение плагиата** с использованием Compare50
*Automated code similarity detection using Compare50*
- **Интеграция с GitHub CI** (проверяет только успешные сборки)
*GitHub CI integration (only checks passing builds)*
- **Экспорт результатов** в Google Таблицы
*Results exported to Google Sheets*
- **Генерация HTML отчетов**
*HTML reports generation*
- **REST API + кнопка в интерфейсе**
*REST API + frontend button*

## Базовое использование / Basic Usage
1. Настройте YAML-файл курса
*Configure your course YAML file*
2. Запустите проверку через:
*Run the check via:*
- API: `POST /api/plagiarism/run/{course_id}`
- CLI: `python -m services.plagiarism.checker --course ваш_идентификатор_курса`
- Интерфейс: Кнопка "Запустить проверку на плагиат"
*Frontend: Click "Run Plagiarism Check" button*
3. Просмотр результатов:
*View results:*
- HTML: `reports/comparisons/{курс}/{лаба}/index.html`
*HTML: reports/comparisons/{course}/{lab}/index.html*
- Google Таблицы: Настроенная колонка статуса
*Google Sheets: Configured status column*

## Требования / Requirements
- Python 3.10+
- Compare50
- Токен GitHub (права repo/workflow)
*GitHub token (repo/workflow permissions)*
- Аккаунт Google Service Account
*Google Service Account*
10 changes: 9 additions & 1 deletion backend.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,14 @@ FROM python:3.12-slim

WORKDIR /app

# Install system dependencies for compare50 (Git + Rust)
RUN apt-get update && apt-get install -y \
git \
curl \
&& curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y \
&& export PATH="$HOME/.cargo/bin:$PATH" \
&& rm -rf /var/lib/apt/lists/*

COPY requirements.txt .

RUN pip install --no-cache-dir --upgrade pip \
Expand All @@ -11,4 +19,4 @@ COPY . .

EXPOSE 8000

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
247 changes: 126 additions & 121 deletions courses/os-2023.yaml
Original file line number Diff line number Diff line change
@@ -1,124 +1,129 @@
course:
name: ld
logo: "/assets/machine-learning.png"
alt-names:
- ML
- МД
- Мо
semester: Spring 2025
email: k43guap@ya.ru
timezone: UTC+3
github:
organization: suai-diplom-2025
teachers:
- "Mark Polyak"
- markpolyak
google:
spreadsheet: 10iVAKvJVUyrjf7kEqm1TGOYk0lufyDJDbBItI5tnqAc
info-sheet: График
task-id-column: 0
student-name-column: 2
lab-column-offset: 1
staff:
- name: Поляк Марк Дмитриевич
title: ст. преп.
status: лектор
- name: Поляк Марк Дмитриевич
title: ст. преп.
status: лабораторные работы
labs:
"1":
github-prefix: ml-task1
short-name: ЛР1
taskid-max: 25
penalty-max: 6
ci:
- workflows
files:
- lab1.sh
moss:
language: c
max-matches: 1000
local-path: lab1
additional:
- suai-os-2020
- suai-os-2021
- suai-os-2022
- suai-os-2023
basefiles:
-
repo: k43guap/os-course-task1
filename: lab1.sh
report:
- Цель работы
- Индивидуальное задание
- Описание входных данных
- Результат выполнения работы
- Исходный код программы с комментариями
- Выводы
"2":
github-prefix: ml-task2
short-name: ЛР2
taskid-max: 20
taskid-shift: 4
penalty-max: 9
ci:
- workflows
files:
- lab2.cpp
moss:
language: cc
max-matches: 1000
local-path: lab2
additional:
- suai-os-2020
- suai-os-2021
- suai-os-2022
- suai-os-2023
basefiles:
-
repo: k43guap/os-course-task2
filename: lab2.cpp
-
repo: k43guap/os-course-task2
filename: examples/ex3.cpp
report:
- Цель работы
- Задание на лабораторную работу
- Граф запуска потоков
- Результат выполнения работы
- Исходный код программы с комментариями
- Выводы
"3":
github-prefix: ml-task3
short-name: ЛР3
taskid-max: 20
penalty-max: 7
ci:
- workflows
files:
- lab3.cpp
moss:
language: cc
max-matches: 1000
local-path: lab3
additional:
- suai-os-2020
- suai-os-2021
- suai-os-2022
- suai-os-2023
basefiles:
-
repo: k43guap/os-course-task3
filename: lab3.cpp
report:
- Цель работы
- Задание на лабораторную работу
- Граф запуска потоков
- Результат выполнения работы
- Исходный код программы с комментариями
- Выводы
misc:
name: ld
logo: "/assets/machine-learning.png"
alt-names:
- ML
- МД
- Мо
semester: Spring 2024
email: k43guap@ya.ru
timezone: UTC+3
github:
organization: suai-os-2024f
prefix: ml-task # Global fallback prefix for all labs
teachers:
- "Mark Polyak"
- markpolyak
google:
spreadsheet: 1cnHY7P9Rqnf7vc0FBzRiyvLCpV2KA6uTOO2SQp7s8SE
info-sheet: График
github-column: "AH"
status-column: "AI"
task-id-column: 0
student-name-column: 2
lab-column-offset: 1
start-row: 3
misc:
requests-timeout: 5
staff:
- name: Поляк Марк Дмитриевич
title: ст. преп.
status: лектор
- name: Поляк Марк Дмитриевич
title: ст. преп.
status: лабораторные работы
labs:
"1":
github-prefix: ml-task1
short-name: ЛР1
taskid-max: 25
penalty-max: 6
ci: true
files:
- lab1.sh
plagiarism:
enabled: false # Plagiarism enabled for all labs
threshold: 7.5 # Example threshold
language: sh
max-matches: 1000
additional:
- suai-os-2020
- suai-os-2021
- suai-os-2022
- suai-os-2023
basefiles:
- repo: k43guap/os-course-task1
filename: lab1.sh
report:
- Цель работы
- Индивидуальное задание
- Описание входных данных
- Результат выполнения работы
- Исходный код программы с комментариями
- Выводы
"2":
github-prefix: os-task2
short-name: ЛР2
taskid-max: 20
taskid-shift: 4
penalty-max: 9
ci: true
files:
- lab2.cpp
plagiarism:
enabled: true # Plagiarism enabled for all labs
threshold: 7.5
language: cc
reference_files:
- data/distribution/2/lab2.cpp
max-matches: 1000
additional:
- suai-os-2020
- suai-os-2021
- suai-os-2022
- suai-os-2023
basefiles:
- repo: k43guap/os-course-task2
filename: lab2.cpp
- repo: k43guap/os-course-task2
filename: examples/ex3.cpp
report:
- Цель работы
- Задание на лабораторную работу
- Граф запуска потоков
- Результат выполнения работы
- Исходный код программы с комментариями
- Выводы
"3":
github-prefix: os-task3
short-name: ЛР3
taskid-max: 20
penalty-max: 7
ci: true
files:
- lab3.cpp
plagiarism:
enabled: false # Plagiarism enabled for all labs
threshold: 7.5
language: cc
reference_files:
- data/distribution/ld/3/lab3.cpp
max-matches: 1000
additional:
- suai-os-2020
- suai-os-2021
- suai-os-2022
- suai-os-2023
basefiles:
- repo: k43guap/os-course-task3
filename: lab3.cpp
report:
- Цель работы
- Задание на лабораторную работу
- Граф запуска потоков
- Результат выполнения работы
- Исходный код программы с комментариями
- Выводы


misc:
requests-timeout: 5
3 changes: 3 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,6 @@ services:
- .:/app
env_file:
- .env

volumes:
cargo-cache:
Loading