From 57a79a2f656c34969fbf510f86d5571817c3208a Mon Sep 17 00:00:00 2001 From: Iosif Pravets Date: Thu, 24 Jul 2025 07:50:15 +0000 Subject: [PATCH 1/9] =?UTF-8?q?chore:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20dockerignore?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .dockerignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..2eea525 --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +.env \ No newline at end of file From 0832c1dcc6bf2cdb985ff1f5f0929ed2b9bf4981 Mon Sep 17 00:00:00 2001 From: Iosif Pravets Date: Thu, 24 Jul 2025 08:06:53 +0000 Subject: [PATCH 2/9] =?UTF-8?q?feat:=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B0=20=D1=81=D0=B1=D0=BE=D1=80?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B7=D0=B0=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D1=87=D0=B8=D0=BA=D0=B0=20=D1=83?= =?UTF-8?q?=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D1=89=D0=B8=D0=BA=D0=BE?= =?UTF-8?q?=D0=B2=20=D0=BF=D0=BB=D0=B0=D1=82=D1=84=D0=BE=D1=80=D0=BC=D1=8B?= =?UTF-8?q?=20=D0=B8=20edt=20=D1=81=20=D1=81=D0=B0=D0=B9=D1=82=D0=B0=20?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D0=B8=D0=B7=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/build-onec-installer-downloader.sh | 49 ++++ src/onec-installer-downloader/Dockerfile | 16 ++ src/onec-installer-downloader/downloader.sh | 246 ++++++++++++++++++++ tests/test-onec-installer-downloader.sh | 48 ++++ 4 files changed, 359 insertions(+) create mode 100755 src/build-onec-installer-downloader.sh create mode 100644 src/onec-installer-downloader/Dockerfile create mode 100755 src/onec-installer-downloader/downloader.sh create mode 100755 tests/test-onec-installer-downloader.sh diff --git a/src/build-onec-installer-downloader.sh b/src/build-onec-installer-downloader.sh new file mode 100755 index 0000000..04a823b --- /dev/null +++ b/src/build-onec-installer-downloader.sh @@ -0,0 +1,49 @@ +#!/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 + +onec_installer_downloader_version="${ONEC_INSTALLER_DOWNLOADER_VERSION}" +image_name=onec-installer-downloader + +docker build \ + --pull \ + --build-arg ONEC_INSTALLER_DOWNLOADER_VERSION="${onec_installer_downloader_version}" \ + --build-arg DOCKER_REGISTRY_URL="${DOCKER_REGISTRY_URL}" \ + --build-arg DOCKER_LOGIN="${DOCKER_LOGIN}" \ + -t "${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/${image_name}:${onec_installer_downloader_version}" \ + -f "${SCRIPT_DIR}/onec-installer-downloader/Dockerfile" \ + ${last_arg} --debug + +if ./tests/test-onec-installer-downloader.sh; then + docker push "${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/${image_name}:${onec_installer_downloader_version}" + + docker tag "${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/${image_name}:${onec_installer_downloader_version}" "${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/${image_name}:latest" + docker push "${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/${image_name}:latest" + + source "${SCRIPT_DIR}/../scripts/cleanup.sh" +else + log_failure "ERROR: Тесты провалены. Образ не был запушен." + source "${SCRIPT_DIR}/../scripts/cleanup.sh" + exit 1 +fi +exit 0 \ No newline at end of file diff --git a/src/onec-installer-downloader/Dockerfile b/src/onec-installer-downloader/Dockerfile new file mode 100644 index 0000000..e25f077 --- /dev/null +++ b/src/onec-installer-downloader/Dockerfile @@ -0,0 +1,16 @@ +ARG DOCKER_REGISTRY_URL=docker.io +ARG DOCKER_LOGIN=yourlogin +ARG BASE_IMAGE=yard +ARG BASE_TAG=latest + +FROM ${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/${BASE_IMAGE}:${BASE_TAG} +LABEL maintainer="Iosif Pravets " + +WORKDIR /app +COPY ./src/onec-installer-downloader/downloader.sh /app/downloader.sh +ENV PATH="/app:${PATH}" + +VOLUME [ "/tmp/downloads" ] +VOLUME [ "/distr" ] + +ENTRYPOINT ["downloader.sh"] \ No newline at end of file diff --git a/src/onec-installer-downloader/downloader.sh b/src/onec-installer-downloader/downloader.sh new file mode 100755 index 0000000..cd27d3f --- /dev/null +++ b/src/onec-installer-downloader/downloader.sh @@ -0,0 +1,246 @@ +#!/bin/bash + +if [ "$#" -ne 2 ]; then + echo "Usage: $0 " + exit 1 +fi + +if [ -z "${YARD_RELEASES_USER:-}" ] || [ -z "${YARD_RELEASES_PWD:-}" ]; then + echo "Ошибка: Необходимо установить переменные среды YARD_RELEASES_USER и YARD_RELEASES_PWD" + exit 1 +fi + +# Аргументы скрипта +installer_type=$1 +ONEC_VERSION=$2 + +if [ "$installer_type" = "edt" ]; then + FOLDER_NAME="DevelopmentTools10" +else + FOLDER_NAME="Platform83" +fi + +DOWNLOADS_PATH=/tmp/downloads/${FOLDER_NAME}/${ONEC_VERSION} + +# Преобразование версии для различных целей +ONEC_VERSION_DOTS=$ONEC_VERSION +ONEC_VERSION_UNDERSCORES=$(echo $ONEC_VERSION_DOTS | sed 's/\./\_/g') +ESCAPED_VERSION=$(echo $ONEC_VERSION_DOTS | sed 's/\./\\./g') + +# Поищем дистрибутив в папке distr и если он есть скопируем его куда надо и распакуем +copy_distr_to_downloads_path() { + found=1 + found_run_file=1 + echo "Проверяем наличие локальных дистрибутивов в папке /distr" + case "$installer_type" in + edt) + local edt_pattern="1c_edt_distr_offline_${ONEC_VERSION}_*_linux_x86_64.tar.gz" + # Ищем файлы, соответствующие шаблону + local matching_files=($(ls /distr/$edt_pattern 2> /dev/null)) + if [ ${#matching_files[@]} -gt 0 ]; then + local edt_filename=${matching_files[0]} + echo "Найден локальный дистрибутив: $edt_filename" + cp $edt_filename $DOWNLOADS_PATH/ + found=0 + else + echo "Локального дистрибутива edt не найдено в папке distr" + fi + ;; + server) + echo "Проверяем наличие локальных дистрибутивов для сервера 1С" + local file_name_srv="deb64_$ONEC_VERSION_UNDERSCORES.tar.gz" + local file_name_platform="server64_$ONEC_VERSION_UNDERSCORES.tar.gz" + local file_name_run="setup-full-$ONEC_VERSION_DOTS-x86_64.run" + + if [ -f "/distr/$file_name_srv" ]; then + echo "Найден локальный дистрибутив: $file_name_srv" + cp /distr/$file_name_srv $DOWNLOADS_PATH/ + found=0 + elif [ -f "/distr/$file_name_platform" ]; then + echo "Найден локальный дистрибутив: $file_name_platform" + cp /distr/$file_name_platform $DOWNLOADS_PATH/ + found=0 + elif [ -f "/distr/$file_name_run" ]; then + echo "Найден локальный дистрибутив: $file_name_run" + cp /distr/$file_name_run $DOWNLOADS_PATH/ + found=0 + found_run_file=0 + else + echo "Локального дистрибутива сервера не найдено в папке distr" + fi + ;; + server32) + local file_name_srv="deb_$ONEC_VERSION_UNDERSCORES.tar.gz" + local file_name_platform="server32_$ONEC_VERSION_UNDERSCORES.tar.gz" + + if [ -f "/distr/$file_name_srv" ]; then + echo "Найден локальный дистрибутив: $file_name_srv" + cp /distr/$file_name_srv $DOWNLOADS_PATH/ + found=0 + elif [ -f "/distr/$file_name_platform" ]; then + echo "Найден локальный дистрибутив: $file_name_platform" + cp /distr/$file_name_platform $DOWNLOADS_PATH/ + found=0 + fi + ;; + client) + local file_name_deb="client_$ONEC_VERSION_UNDERSCORES.deb64.tar.gz" + local file_name_platform="server64_$ONEC_VERSION_UNDERSCORES.tar.gz" + local file_name_run="setup-full-$ONEC_VERSION_DOTS-x86_64.run" + + if [ -f "/distr/$file_name_deb" ]; then + echo "Найден локальный дистрибутив: $file_name_deb" + cp /distr/$file_name_deb $DOWNLOADS_PATH/ + found=0 + elif [ -f "/distr/$file_name_platform" ]; then + echo "Найден локальный дистрибутив: $file_name_platform" + cp /distr/$file_name_platform $DOWNLOADS_PATH/ + found=0 + elif [ -f "/distr/$file_name_run" ]; then + echo "Найден локальный дистрибутив: $file_name_run" + cp /distr/$file_name_run $DOWNLOADS_PATH/ + found=0 + found_run_file=0 + fi + ;; + esac + + if [ $found -eq 0 ] && [ $found_run_file -eq 1 ] ; then + # Распаковка скачанных файлов (если такие есть) + for file in $DOWNLOADS_PATH/*.tar.gz; do + tar -xzf "$file" -C $DOWNLOADS_PATH + rm -f "$file" + done + fi + echo "Завершили проверку локальных дистрибутивов в папке /distr" + return $found +} + +check_local_distr() { + copy_distr_to_downloads_path + found=$? + + if [ $found -ne 0 ]; then + return $found + fi + check_file + local_distr_found=$? + return $local_distr_found +} + +# Функция для скачивания дистрибутива +download_distr() { + local distr_filter=$1 + + echo "Попытка скачать дистрибутив с фильтром: $distr_filter" + yard releases get \ + --app-filter "$APP_FILTER" \ + --version-filter $ESCAPED_VERSION \ + --path /tmp/downloads \ + --distr-filter "$distr_filter" \ + --download-limit 1 +} + +# Функция проверки наличия нужных файлов после распаковки +check_file() { + found=1 + echo "Проверяем наличие файлов в каталоге $DOWNLOADS_PATH" + # Проверяем, появились ли файлы в каталоге + if [ "$installer_type" = "edt" ]; then + # Для edt проверяем наличие специфичного файла + if ls $DOWNLOADS_PATH/1ce-installer-cli 1> /dev/null 2>&1; then + echo "Дистрибутив найден и скачан: $filter" + found=0 + else + echo "Не найден файл 1ce-installer-cli" + echo "Содержимое каталога $DOWNLOADS_PATH:" + ls -l $DOWNLOADS_PATH + fi + elif ls $DOWNLOADS_PATH/*.deb 1> /dev/null 2>&1 || ls $DOWNLOADS_PATH/*.run 1> /dev/null 2>&1; then + echo "Дистрибутив найден и скачан: $filter" + found=0 + else + echo "Не найден дистрибутив по шаблону: $filter" + fi + echo "Завершили проверку наличия файлов в каталоге $DOWNLOADS_PATH" + return $found +} + +# Попытка скачивания дистрибутива для каждого фильтра +try_download() { + + # Определим фильтры для скачивания. Если шаблонов >1 они должны разделяться "|" Скачивается дистрибутив по первому найденному шаблону. + APP_FILTER="Технологическая платформа *8\.3" + case "$installer_type" in + edt) + echo "Скачиваем дистрибутив EDT" + APP_FILTER="1C:Enterprise Development Tools" + DISTR_FILTERS="Дистрибутив для оффлайн установки 1C:EDT для ОС Linux 64 бит|Дистрибутив 1C:EDT для ОС Linux для установки без интернета" + ;; + server) + echo "Скачиваем дистрибутив для установки 64-битного сервера" + DISTR_FILTERS="Технологическая платформа 1С:Предприятия \(64\-bit\) для Linux$|Сервер 1С:Предприятия \(64\-bit\) для DEB-based Linux-систем$" + ;; + server32) + echo "Скачиваем дистрибутив для установки 32-битного сервера" + DISTR_FILTERS="Технологическая платформа 1С:Предприятия для Linux$|Сервер 1С:Предприятия для DEB-based Linux-систем$" + ;; + client) + echo "Скачиваем дистрибутив для установки 64-битного клиента 1с" + DISTR_FILTERS="Технологическая платформа 1С:Предприятия \(64\-bit\) для Linux$|Клиент 1С:Предприятия \(64\-bit\) для DEB-based Linux-систем$" + ;; + client32) + echo "Скачиваем дистрибутив для установки 32-битного клиента 1с" + DISTR_FILTERS="Технологическая платформа 1С:Предприятия для Linux$|Клиент 1С:Предприятия для DEB-based Linux-систем$" + ;; + thin-client) + echo "Скачиваем дистрибутив для установки 32-битного тонкого клиента 1с" + DISTR_FILTERS="Тонкий клиент 1С:Предприятия \(64\-bit\) для DEB-based Linux-систем$|Тонкий клиент 1С:Предприятия \(64\-bit\) для Linux$" + ;; + thin-client32) + echo "Скачиваем дистрибутив для установки 32-битного тонкого клиента 1с" + DISTR_FILTERS="Тонкий клиент 1С:Предприятия для DEB-based Linux-систем$|Тонкий клиент 1С:Предприятия для Linux$" + ;; + esac + + echo $DISTR_FILTERS + local download_success=1 + IFS='|' + read -ra FILTERS <<< "$DISTR_FILTERS" + for filter in "${FILTERS[@]}"; do + download_distr "$filter" + check_file + download_success=$? + if [ $download_success -eq 0 ]; then + break + fi + done + return $download_success +} + +# Удаление ненужных файлов +echo "Удаляем временные файлы и каталоги" +mkdir -p $DOWNLOADS_PATH +rm -f $DOWNLOADS_PATH/.gitkeep +chmod 777 -R /tmp + +# Проверяем, есть ли дистрибутивы локально +echo "Проверяем наличие локальных дистрибутивов" +check_local_distr +local_distr_found=$? + +if [ $local_distr_found -ne 0 ]; then + echo "Скачаных дистрибутивов не найдено. Попытаемся скачать через yard." + if [ "$ONEC_VERSION" = "8.3.24.1342" ] || [ "$ONEC_VERSION" = "8.3.24.1368" ]; then + echo "Ошибка: Скачивание версии 8.3.24.1342 и 8.3.24.1368 не поддерживается. Скачайте и распакуйте релиз самостоятельно, и поместите его в папку distr" + exit 1 + else + echo "Версия 1с: $ONEC_VERSION" + fi + try_download + download_attempted=$? + if [ $download_attempted -ne 0 ]; then + echo "Ошибка: не удалось найти дистрибутив ни локально, ни удаленно." + exit 1 + fi +fi \ No newline at end of file diff --git a/tests/test-onec-installer-downloader.sh b/tests/test-onec-installer-downloader.sh new file mode 100755 index 0000000..b822bd1 --- /dev/null +++ b/tests/test-onec-installer-downloader.sh @@ -0,0 +1,48 @@ +#!/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" + +test_onec_installer_downloader_is_running() { + log_header "Test :: ones-installer-downloader is running" + + + local expected actual + + expected="Usage: /app/downloader.sh " + actual=$(docker run --rm ${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/onec-installer-downloader:${ONEC_INSTALLER_DOWNLOADER_VERSION} 2>/dev/null | head -n1) + + if assert_eq "$expected" "$actual"; then + log_success "ones-installer-downloader is running test passed" + else + log_failure "ones-installer-downloader is running test failed" + fi +} + +test_onec_installer_downloader_requires_credentials() { + log_header "Test :: ones-installer-downloader requires credentials" + + local expected actual + + expected="Ошибка: Необходимо установить переменные среды YARD_RELEASES_USER и YARD_RELEASES_PWD" + actual=$(docker run --rm ${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/onec-installer-downloader:${ONEC_INSTALLER_DOWNLOADER_VERSION} thin-client32 8.3.25.1445 2>/dev/null | head -n1) + + if assert_eq "$expected" "$actual"; then + log_success "ones-installer-downloader requires credentials test passed" + else + log_failure "ones-installer-downloader requires credentials test failed" + fi +} + +# test calls +test_onec_installer_downloader_is_running +test_onec_installer_downloader_requires_credentials \ No newline at end of file From 9f1ff083a868fb43af97d8dd4e8f7b658821dfb6 Mon Sep 17 00:00:00 2001 From: Iosif Pravets Date: Thu, 24 Jul 2025 08:27:11 +0000 Subject: [PATCH 3/9] =?UTF-8?q?feat:=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B0=20=D1=81=D0=B1=D0=BE=D1=80?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B7=D0=B0=20onec=20in?= =?UTF-8?q?staller=20downloader=20=D0=B2=20GitHub=20Actions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../build-onec-installer-downloader.yml | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 .github/workflows/build-onec-installer-downloader.yml diff --git a/.github/workflows/build-onec-installer-downloader.yml b/.github/workflows/build-onec-installer-downloader.yml new file mode 100644 index 0000000..9bbdbfe --- /dev/null +++ b/.github/workflows/build-onec-installer-downloader.yml @@ -0,0 +1,27 @@ +name: Build onec installer downloader Docker Image + +on: + push: + tags: + - 'onec-installer-downloader_*' # реагировать на теги, начинающиеся с executor_ + +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: | + export ONEC_INSTALLER_DOWNLOADER_VERSION="${GITHUB_REF#refs/tags/onec-installer-downloader_}" + echo "Собираем onec installer downloader версии ${ONEC_INSTALLER_DOWNLOADER_VERSION}" + ./src/build-onec-installer-downloader.sh From d4829f55373144adc55ab11b82192c65aa199416 Mon Sep 17 00:00:00 2001 From: Iosif Pravets Date: Thu, 24 Jul 2025 09:14:37 +0000 Subject: [PATCH 4/9] =?UTF-8?q?docs:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BF=D0=BE=20=D0=BE?= =?UTF-8?q?=D0=B1=D1=80=D0=B0=D0=B7=D1=83=20onec-installer-downloader?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 61 +++++++++++++++++++++++++++- src/tag-onec-installer-downloader.sh | 8 ++++ 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100755 src/tag-onec-installer-downloader.sh diff --git a/README.md b/README.md index 67dc341..ab91328 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ # oscript-images + Всё для сборки Docker-образов движка [OneScript](https://oscript.io/) и некоторых утилит на OneScript Сборка происходит в GitHub Actions, чтобы максимально снизить порог входа и упростить вашу жизнь. @@ -10,6 +11,7 @@ - [oscript-images](#oscript-images) - [Подготовительные шаги](#подготовительные-шаги) - [yard](#yard) +- [onec-installer-downloader](#onec-installer-downloader) ## Подготовительные шаги @@ -47,4 +49,61 @@ 1. **Проверьте результат** - Убедитесь, что образ появился в вашем Docker Registry с именем `yard` и соответствующей версией. - [↑ В начало](#oscript-images) \ No newline at end of file + [↑ В начало](#oscript-images) + +## onec-installer-downloader + +[![Docker Pulls](https://img.shields.io/docker/pulls/sleemp/onec-installer-downloader)](https://hub.docker.com/r/sleemp/onec-installer-downloader) + +### Назначение + +Образ предназначен для загрузки Linux-версий дистрибутивов платформы `1С:Предприятие` и `EDT`. Основная задача - скачивание дистрибутивов для целей сборки Docker-образов с платформой и EDT. + +Образ основан на образе с [yard](#yard) и скрипте загрузки из [onec-docker](https://github.com/firstBitMarksistskaya/onec-docker) + +### Сборка + +1. [**Выполните подготовительные шаги**](#подготовительные-шаги), если не сделали это ранее + +1. **Добавьте тег `yard`** + - Перейдите во вкладку "Tags" или используйте команду: + ```bash + git tag onec-installer-downloder_НомерВерсии + git push origin onec-installer-downloder_НомерВерсии + ``` + - `НомерВерсии` предлагается использовать вида `ГодМесяцДень` + - либо клонируйте репозиторий к себе на Linux-хост (или используйте GitHub Codespaces) и запустите скрипт `./src/tag-yard-latest.sh` — он принудительно создаст тег с текущей датой на последний коммит и запушит его + - Это необходимо для запуска сборки через GitHub Actions. + +1. **Запустите сборку** + - После пуша тега workflow автоматически соберёт и опубликует образ `onec-installer-downloder` в ваш Docker Registry. + - будет опубликован образ с тегом `НомерВерсии`, а также с тегом `latest` + +1. **Проверьте результат** + - Убедитесь, что образ появился в вашем Docker Registry с именем `onec-installer-downloder` и соответствующей версией. + +### Использование + +Для запуска образа необходимо учесть следующие моменты: + +1. Необходимо пробросить в контейнер переменные среды `YARD_RELEASES_USER` и `YARD_RELEASES_PWD`, необходимые `yard` для авторизации на сайте релизов 1С + +1. Также необходимо передать какой дистрибутив и версию нужно скачать, например `server 8.3.25.1445`. Список доступных дистрибутивов: + - edt + - server + - server32 + - client + - client32 + - thin-client + - thin-client32 + +1. И, конечно, необходимо пробросить в контейнер каталог, в который будет загружен дистрибутив: `-v ./downloads:/tmp/downloads`. + +1. Дополнительно можно пробросить каталог `/distr` с загруженными архивами дистрибутивов + +1. Итоговая команда запуска может выглядеть примерно так: +```shell +docker run --rm -e YARD_RELEASES_USER=user -e YARD_RELEASES_PWD=password sleemp/onec-installer-downloader:20250723 thin-client32 8.3.25.1445 +``` + + [↑ В начало](#oscript-images) \ No newline at end of file diff --git a/src/tag-onec-installer-downloader.sh b/src/tag-onec-installer-downloader.sh new file mode 100755 index 0000000..bb6065b --- /dev/null +++ b/src/tag-onec-installer-downloader.sh @@ -0,0 +1,8 @@ +#!/bin/bash +set -euo pipefail + +VERSION=$(date +%Y%m%d) +TAG="onec-installer-downloader_${VERSION}" + +git tag -f $TAG +git push origin $TAG -f \ No newline at end of file From 0a874f63c0b8f85b3f127fbc341c7c2855b47e60 Mon Sep 17 00:00:00 2001 From: Iosif Pravets Date: Thu, 24 Jul 2025 09:50:16 +0000 Subject: [PATCH 5/9] =?UTF-8?q?refactor:=20=D1=80=D0=B5=D1=84=D0=B0=D0=BA?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=B8=D0=BD=D0=B3=20=D0=BF=D0=BE=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8=D1=8F=20coderabbit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/build-onec-installer-downloader.sh | 4 ++-- src/onec-installer-downloader/Dockerfile | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/build-onec-installer-downloader.sh b/src/build-onec-installer-downloader.sh index 04a823b..68cdfc0 100755 --- a/src/build-onec-installer-downloader.sh +++ b/src/build-onec-installer-downloader.sh @@ -32,9 +32,9 @@ docker build \ --build-arg DOCKER_LOGIN="${DOCKER_LOGIN}" \ -t "${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/${image_name}:${onec_installer_downloader_version}" \ -f "${SCRIPT_DIR}/onec-installer-downloader/Dockerfile" \ - ${last_arg} --debug + ${last_arg} -if ./tests/test-onec-installer-downloader.sh; then +if ${SCRIPT_DIR}/../tests/test-onec-installer-downloader.sh; then docker push "${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/${image_name}:${onec_installer_downloader_version}" docker tag "${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/${image_name}:${onec_installer_downloader_version}" "${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/${image_name}:latest" diff --git a/src/onec-installer-downloader/Dockerfile b/src/onec-installer-downloader/Dockerfile index e25f077..0cf3a55 100644 --- a/src/onec-installer-downloader/Dockerfile +++ b/src/onec-installer-downloader/Dockerfile @@ -8,6 +8,7 @@ LABEL maintainer="Iosif Pravets " WORKDIR /app COPY ./src/onec-installer-downloader/downloader.sh /app/downloader.sh +RUN chmod +x /app/downloader.sh ENV PATH="/app:${PATH}" VOLUME [ "/tmp/downloads" ] From e1ad19d35423ed9ddb12f67902d4746d843e46b9 Mon Sep 17 00:00:00 2001 From: Iosif Pravets Date: Thu, 24 Jul 2025 09:50:30 +0000 Subject: [PATCH 6/9] =?UTF-8?q?fix:=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BE=D0=BF=D0=B5=D1=87=D0=B0=D1=82=D0=BA=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ab91328..de3c28e 100644 --- a/README.md +++ b/README.md @@ -68,19 +68,19 @@ 1. **Добавьте тег `yard`** - Перейдите во вкладку "Tags" или используйте команду: ```bash - git tag onec-installer-downloder_НомерВерсии - git push origin onec-installer-downloder_НомерВерсии + git tag onec-installer-downloader_НомерВерсии + git push origin onec-installer-downloader_НомерВерсии ``` - `НомерВерсии` предлагается использовать вида `ГодМесяцДень` - либо клонируйте репозиторий к себе на Linux-хост (или используйте GitHub Codespaces) и запустите скрипт `./src/tag-yard-latest.sh` — он принудительно создаст тег с текущей датой на последний коммит и запушит его - Это необходимо для запуска сборки через GitHub Actions. 1. **Запустите сборку** - - После пуша тега workflow автоматически соберёт и опубликует образ `onec-installer-downloder` в ваш Docker Registry. + - После пуша тега workflow автоматически соберёт и опубликует образ `onec-installer-downloader` в ваш Docker Registry. - будет опубликован образ с тегом `НомерВерсии`, а также с тегом `latest` 1. **Проверьте результат** - - Убедитесь, что образ появился в вашем Docker Registry с именем `onec-installer-downloder` и соответствующей версией. + - Убедитесь, что образ появился в вашем Docker Registry с именем `onec-installer-downloader` и соответствующей версией. ### Использование From 8abf12429a6e2a49be0f028c1d988f24597bdcd8 Mon Sep 17 00:00:00 2001 From: Iosif Pravets Date: Thu, 24 Jul 2025 09:57:40 +0000 Subject: [PATCH 7/9] =?UTF-8?q?fix:=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BE=D0=BF=D0=B5=D1=87=D0=B0=D1=82=D0=BA=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index de3c28e..8085070 100644 --- a/README.md +++ b/README.md @@ -72,7 +72,7 @@ git push origin onec-installer-downloader_НомерВерсии ``` - `НомерВерсии` предлагается использовать вида `ГодМесяцДень` - - либо клонируйте репозиторий к себе на Linux-хост (или используйте GitHub Codespaces) и запустите скрипт `./src/tag-yard-latest.sh` — он принудительно создаст тег с текущей датой на последний коммит и запушит его + - либо клонируйте репозиторий к себе на Linux-хост (или используйте GitHub Codespaces) и запустите скрипт `./src/tag-onec-installer-downloader-latest.sh` — он принудительно создаст тег с текущей датой на последний коммит и запушит его - Это необходимо для запуска сборки через GitHub Actions. 1. **Запустите сборку** From 934fe1a04118e018c113f00e962c4c87881892af Mon Sep 17 00:00:00 2001 From: Iosif Pravets Date: Thu, 24 Jul 2025 10:06:16 +0000 Subject: [PATCH 8/9] =?UTF-8?q?refactor:=20=D1=80=D0=B5=D1=84=D0=B0=D0=BA?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=B8=D0=BD=D0=B3=20=D0=BF=D0=BE=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8=D1=8F=20coderabbit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../build-onec-installer-downloader.yml | 4 ++-- tests/test-onec-installer-downloader.sh | 20 +++++++++++-------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build-onec-installer-downloader.yml b/.github/workflows/build-onec-installer-downloader.yml index 9bbdbfe..d2747ee 100644 --- a/.github/workflows/build-onec-installer-downloader.yml +++ b/.github/workflows/build-onec-installer-downloader.yml @@ -23,5 +23,5 @@ jobs: - name: Build and Push Docker image run: | export ONEC_INSTALLER_DOWNLOADER_VERSION="${GITHUB_REF#refs/tags/onec-installer-downloader_}" - echo "Собираем onec installer downloader версии ${ONEC_INSTALLER_DOWNLOADER_VERSION}" - ./src/build-onec-installer-downloader.sh + echo "Собираем onec installer downloader версии ${ONEC_INSTALLER_DOWNLOADER_VERSION}" + ./src/build-onec-installer-downloader.sh diff --git a/tests/test-onec-installer-downloader.sh b/tests/test-onec-installer-downloader.sh index b822bd1..1d07d10 100755 --- a/tests/test-onec-installer-downloader.sh +++ b/tests/test-onec-installer-downloader.sh @@ -5,7 +5,12 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" if [ -z "${CI-}" ]; then echo "The script is not running in CI" - source "${SCRIPT_DIR}/../.env" + if [ -f "${SCRIPT_DIR}/../.env" ]; then + source "${SCRIPT_DIR}/../.env" + else + echo "Файл .env не найден по пути ${SCRIPT_DIR}/../.env" + exit 1 + fi else echo "The script is running in CI" fi @@ -13,8 +18,7 @@ fi source "${SCRIPT_DIR}/../tools/assert.sh" test_onec_installer_downloader_is_running() { - log_header "Test :: ones-installer-downloader is running" - + log_header "Test :: onec-installer-downloader is running" local expected actual @@ -22,14 +26,14 @@ test_onec_installer_downloader_is_running() { actual=$(docker run --rm ${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/onec-installer-downloader:${ONEC_INSTALLER_DOWNLOADER_VERSION} 2>/dev/null | head -n1) if assert_eq "$expected" "$actual"; then - log_success "ones-installer-downloader is running test passed" + log_success "onec-installer-downloader is running test passed" else - log_failure "ones-installer-downloader is running test failed" + log_failure "onec-installer-downloader is running test failed" fi } test_onec_installer_downloader_requires_credentials() { - log_header "Test :: ones-installer-downloader requires credentials" + log_header "Test :: onec-installer-downloader requires credentials" local expected actual @@ -37,9 +41,9 @@ test_onec_installer_downloader_requires_credentials() { actual=$(docker run --rm ${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/onec-installer-downloader:${ONEC_INSTALLER_DOWNLOADER_VERSION} thin-client32 8.3.25.1445 2>/dev/null | head -n1) if assert_eq "$expected" "$actual"; then - log_success "ones-installer-downloader requires credentials test passed" + log_success "onec-installer-downloader requires credentials test passed" else - log_failure "ones-installer-downloader requires credentials test failed" + log_failure "onec-installer-downloader requires credentials test failed" fi } From f428ac43bd1435689e0c1bbde3bb978a84a828a3 Mon Sep 17 00:00:00 2001 From: Iosif Pravets Date: Thu, 24 Jul 2025 10:12:26 +0000 Subject: [PATCH 9/9] =?UTF-8?q?refactor:=20=D1=80=D0=B5=D1=84=D0=B0=D0=BA?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=B8=D0=BD=D0=B3=20=D0=BF=D0=BE=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8=D1=8F=20coderabbit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8085070..bee08ed 100644 --- a/README.md +++ b/README.md @@ -103,7 +103,11 @@ 1. Итоговая команда запуска может выглядеть примерно так: ```shell -docker run --rm -e YARD_RELEASES_USER=user -e YARD_RELEASES_PWD=password sleemp/onec-installer-downloader:20250723 thin-client32 8.3.25.1445 +docker run --rm \ +-e YARD_RELEASES_USER=user +-e YARD_RELEASES_PWD=password \ +-v ./downloads:/tmp/downloads \ +sleemp/onec-installer-downloader:20250723 thin-client32 8.3.25.1445 ``` [↑ В начало](#oscript-images) \ No newline at end of file