1
0
mirror of https://github.com/pravets/oscript-images.git synced 2025-10-08 23:01:52 +02:00

Merge pull request #18 from pravets/copilot/fix-9bd06143-738e-43c5-843a-ad598571f1fe

Реализован образ утилиты edt-ripper
This commit is contained in:
Iosif Pravets
2025-10-03 00:30:39 +03:00
committed by GitHub
6 changed files with 196 additions and 0 deletions

26
.github/workflows/build-edt-ripper.yml vendored Normal file
View File

@@ -0,0 +1,26 @@
name: Build edt-ripper Docker Image
on:
push:
tags:
- 'edt-ripper' # реагировать на тег edt-ripper
jobs:
build:
runs-on: ubuntu-latest
env:
DOCKER_REGISTRY_URL: ${{ secrets.DOCKER_REGISTRY_URL }}
DOCKER_LOGIN: ${{ secrets.DOCKER_LOGIN }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build and Push Docker image
run: |
echo "Собираем edt-ripper"
./src/build-edt-ripper.sh

View File

@@ -21,6 +21,7 @@
- [winow](#winow)
- [gitrules](#gitrules)
- [stebi](#stebi)
- [edt-ripper](#edt-ripper)
## Подготовительные шаги
@@ -371,3 +372,59 @@ sleemp/onec-installer-downloader:20250723 thin-client32 8.3.25.1445
Явных ограничений нет.
[↑ В начало](#oscript-images)
## edt-ripper
[![Docker Pulls](https://img.shields.io/docker/pulls/sleemp/edt-ripper)](https://hub.docker.com/r/sleemp/edt-ripper)
[![Docker Version](https://img.shields.io/docker/v/sleemp/edt-ripper/latest)](https://hub.docker.com/r/sleemp/edt-ripper)
Готовые собранные образы можно взять в [sleemp/edt-ripper](https://hub.docker.com/r/sleemp/edt-ripper)
### Назначение
Образ предназначен для работы с замечаниями EDT и файлами правил для SonarQube с помощью утилиты [edt-ripper](https://github.com/bia-technologies/edt_ripper). Утилита выполняет разбор EDT отчета анализа проекта, формирует результат в формате bsl-ls и мапит обнаруженные замечания с правилами (внутренний файл правил, внешний файл правил).
### Сборка
1. [**Выполните подготовительные шаги**](#подготовительные-шаги), если не сделали это ранее
1. **Добавьте тег `edt-ripper`**
- Перейдите во вкладку "Tags" или используйте команду:
```bash
git tag -f edt-ripper
git push origin edt-ripper -f
```
- либо клонируйте репозиторий к себе на Linux-хост (или используйте GitHub Codespaces) и запустите скрипт `./src/tag-edt-ripper-latest.sh` — он принудительно «перевесит» тег на последний коммит и запушит теги
- Это необходимо для запуска сборки edt-ripper через GitHub Actions.
1. **Запустите сборку**
- После пуша тега workflow автоматически соберёт и опубликует образ `edt-ripper` в ваш Docker Registry.
- будет опубликован образ с тегом `latest`, а также с номерной версией собранного `edt-ripper`
1. **Проверьте результат**
- Убедитесь, что образ появился в вашем Docker Registry с именем `edt-ripper` и соответствующей версией.
### Зависимости
Образ собирается на основе [oscript:dev](#oscript), он должен быть предварительно собран и запушен.
### Использование
1. Образ можно использовать для разбора EDT отчета и формирования результата в формате bsl-ls:
```bash
docker run --rm -v ./:/workspace sleemp/edt-ripper:latest parse ./edt-report.txt ./bsl-ls-output.json
```
1. Для просмотра всех доступных команд запустите образ без параметров или с ключом `--help`:
```bash
docker run --rm sleemp/edt-ripper:latest
```
1. Подробнее с использованием утилиты можно ознакомиться в репозитории [edt-ripper](https://github.com/bia-technologies/edt_ripper)
### Ограничения
Явных ограничений нет.
[↑ В начало](#oscript-images)

56
src/build-edt-ripper.sh Executable file
View File

@@ -0,0 +1,56 @@
#!/bin/bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
if [ -z "${CI:-}" ]; then
echo "The script is not running in CI"
source "${SCRIPT_DIR}/../scripts/load_env.sh"
else
echo "The script is running in CI";
fi
source "${SCRIPT_DIR}/../scripts/docker_login.sh"
source "${SCRIPT_DIR}/../tools/assert.sh"
if [[ "${DOCKER_SYSTEM_PRUNE:-}" = "true" ]] ;
then
docker system prune -af
fi
last_arg="."
if [[ ${NO_CACHE:-} = "true" ]] ; then
last_arg="--no-cache ."
fi
edt_ripper_version="latest"
docker build \
--pull \
--build-arg EDT_RIPPER_VERSION="${edt_ripper_version}" \
--build-arg DOCKER_REGISTRY_URL="${DOCKER_REGISTRY_URL}" \
--build-arg DOCKER_LOGIN="${DOCKER_LOGIN}" \
-t "${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/edt-ripper:${edt_ripper_version}" \
-f "${SCRIPT_DIR}/edt-ripper/Dockerfile" \
${last_arg}
if ./tests/test-edt-ripper.sh; then
container_version=$(docker run --rm "${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/edt-ripper:${edt_ripper_version}" --version | tail -n1)
if [[ -n "${container_version}" ]]; then
docker push "${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/edt-ripper:${edt_ripper_version}"
docker tag "${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/edt-ripper:${edt_ripper_version}" "${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/edt-ripper:${container_version}"
docker push "${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/edt-ripper:${container_version}"
else
log_failure "Не удалось получить версию из контейнера"
exit 1
fi
source "${SCRIPT_DIR}/../scripts/cleanup.sh"
else
log_failure "ERROR: Тесты провалены. Образ не был запушен."
source "${SCRIPT_DIR}/../scripts/cleanup.sh"
exit 1
fi
exit 0

12
src/edt-ripper/Dockerfile Normal file
View File

@@ -0,0 +1,12 @@
ARG DOCKER_REGISTRY_URL=docker.io
ARG DOCKER_LOGIN=sleemp
ARG BASE_IMAGE=oscript
ARG BASE_TAG=dev
FROM ${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/${BASE_IMAGE}:${BASE_TAG}
LABEL maintainer="Iosif Pravets <i@pravets.ru>"
RUN opm i edt-ripper;
ENTRYPOINT ["edt-ripper"]
CMD ["--help"]

4
src/tag-edt-ripper-latest.sh Executable file
View File

@@ -0,0 +1,4 @@
#!/bin/bash
set -euo pipefail
git tag -f edt-ripper && git push origin edt-ripper -f

41
tests/test-edt-ripper.sh Executable file
View File

@@ -0,0 +1,41 @@
#!/bin/bash
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
if [ -z "${CI-}" ]; then
echo "The script is not running in CI"
source "${SCRIPT_DIR}/../.env"
else
echo "The script is running in CI"
fi
source "${SCRIPT_DIR}/../tools/assert.sh"
# Global flag to mark if any test failed. At the end script will exit with non-zero
# status if any test set this flag. This ensures CI/build scripts stop on test failures.
TEST_FAILED=0
test_edt_ripper_is_running() {
log_header "Test :: edt-ripper is running"
local expected actual
expected="Приложение: edt-ripper"
actual=$(docker run --rm ${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/edt-ripper:latest 2>/dev/null | head -n1)
if assert_eq "$expected" "$actual"; then
log_success "edt-ripper is running test passed"
else
log_failure "edt-ripper is running test failed"
TEST_FAILED=1
fi
}
# test calls
test_edt_ripper_is_running
# Exit with non-zero if any test failed so callers (like build scripts) can stop further steps
if [[ "$TEST_FAILED" -ne 0 ]]; then
exit 1
fi