You've already forked oscript-images
mirror of
https://github.com/pravets/oscript-images.git
synced 2025-10-08 23:01:52 +02:00
Add edt-ripper Docker image implementation
Co-authored-by: pravets <24823089+pravets@users.noreply.github.com>
This commit is contained in:
26
.github/workflows/build-edt-ripper.yml
vendored
Normal file
26
.github/workflows/build-edt-ripper.yml
vendored
Normal 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
|
57
README.md
57
README.md
@@ -21,6 +21,7 @@
|
|||||||
- [winow](#winow)
|
- [winow](#winow)
|
||||||
- [gitrules](#gitrules)
|
- [gitrules](#gitrules)
|
||||||
- [stebi](#stebi)
|
- [stebi](#stebi)
|
||||||
|
- [edt-ripper](#edt-ripper)
|
||||||
|
|
||||||
## Подготовительные шаги
|
## Подготовительные шаги
|
||||||
|
|
||||||
@@ -371,3 +372,59 @@ sleemp/onec-installer-downloader:20250723 thin-client32 8.3.25.1445
|
|||||||
Явных ограничений нет.
|
Явных ограничений нет.
|
||||||
|
|
||||||
[↑ В начало](#oscript-images)
|
[↑ В начало](#oscript-images)
|
||||||
|
|
||||||
|
## edt-ripper
|
||||||
|
|
||||||
|
[](https://hub.docker.com/r/sleemp/edt-ripper)
|
||||||
|
[](https://hub.docker.com/r/sleemp/edt-ripper)
|
||||||
|
|
||||||
|
Готовые собранные образы можно взять в [sleemp/edt-ripper](https://hub.docker.com/r/sleemp/edt-ripper)
|
||||||
|
|
||||||
|
### Назначение
|
||||||
|
|
||||||
|
Образ предназначен для разборки/сборки EDT-проектов с помощью утилиты [edt-ripper](https://github.com/bia-technologies/edt_ripper). Утилита позволяет разобрать проект EDT в исходники и собрать обратно, что полезно для версионного контроля и автоматизации.
|
||||||
|
|
||||||
|
### Сборка
|
||||||
|
|
||||||
|
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-проекта в исходники:
|
||||||
|
```bash
|
||||||
|
docker run --rm -v ./:/workspace sleemp/edt-ripper:latest unpack ./project.edt ./src
|
||||||
|
```
|
||||||
|
|
||||||
|
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
56
src/build-edt-ripper.sh
Executable 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
12
src/edt-ripper/Dockerfile
Normal 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
4
src/tag-edt-ripper-latest.sh
Executable 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
41
tests/test-edt-ripper.sh
Executable 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
|
Reference in New Issue
Block a user