You've already forked oscript-images
mirror of
https://github.com/pravets/oscript-images.git
synced 2025-11-23 22:24:41 +02:00
Merge pull request #14 from pravets/feature/gitrules
Реализован образ gitrules
This commit is contained in:
26
.github/workflows/build-gitrules.yml
vendored
Normal file
26
.github/workflows/build-gitrules.yml
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
name: Build gitrules Docker Image
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'gitrules' # реагировать на тег gitrules
|
||||
|
||||
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 "Собираем gitrules"
|
||||
./src/build-gitrules.sh
|
||||
47
README.md
47
README.md
@@ -19,6 +19,7 @@
|
||||
- [yard](#yard)
|
||||
- [onec-installer-downloader](#onec-installer-downloader)
|
||||
- [winow](#winow)
|
||||
- [gitrules](#gitrules)
|
||||
|
||||
## Подготовительные шаги
|
||||
|
||||
@@ -267,3 +268,49 @@ sleemp/onec-installer-downloader:20250723 thin-client32 8.3.25.1445
|
||||
1. Явных ограничений вроде бы нет.
|
||||
|
||||
[↑ В начало](#oscript-images)
|
||||
|
||||
## gitrules
|
||||
|
||||
[](https://hub.docker.com/r/sleemp/gitrules)
|
||||
[](https://hub.docker.com/r/sleemp/gitrules)
|
||||
|
||||
Готовые собранные образы можно взять в [sleemp/gitrules](https://hub.docker.com/r/sleemp/gitrules)
|
||||
|
||||
### Назначение
|
||||
|
||||
Образ предназначен для сборки/разборки правил конвертации в формате Конвертации данных 2.0 с помощью утилиты [gitrules](https://github.com/oscript-library/gitrules).
|
||||
|
||||
### Сборка
|
||||
|
||||
1. [**Выполните подготовительные шаги**](#подготовительные-шаги), если не сделали это ранее
|
||||
|
||||
1. **Добавьте тег `gitrules`**
|
||||
- Перейдите во вкладку "Tags" или используйте команду:
|
||||
```bash
|
||||
git tag -f gitrules
|
||||
git push origin gitrules -f
|
||||
```
|
||||
|
||||
- либо клонируйте репозиторий к себе на Linux-хост (или используйте GitHub Codespaces) и запустите скрипт `./src/tag-gitrules-latest.sh` — он принудительно «перевесит» тег на последний коммит и запушит теги
|
||||
- Это необходимо для запуска сборки gitrules через GitHub Actions.
|
||||
|
||||
1. **Запустите сборку**
|
||||
- После пуша тега workflow автоматически соберёт и опубликует образ `gitrules` в ваш Docker Registry.
|
||||
- будет опубликован образ с тегом `latest`, а также с номерной версией собранного `gitrules`
|
||||
|
||||
1. **Проверьте результат**
|
||||
- Убедитесь, что образ появился в вашем Docker Registry с именем `gitrules` и соответствующей версией.
|
||||
|
||||
### Зависимости
|
||||
|
||||
Образ собирается на основе [oscript:dev](#oscript), он должен быть предварительно собран и запушен.
|
||||
|
||||
### Использование
|
||||
|
||||
1. Необходимо пробросить в контейнер каталог, в котором находятся ваши правила и где будет происходить сборка. Путь к каталогу внутри не регламентируеся, вы можете, например, использовать `-v ./:/tmp/rules`.
|
||||
|
||||
1. Подробнее с использованием утилиты можно в репозитории [gitrules](https://github.com/oscript-library/gitrules)
|
||||
|
||||
1. Также, например, образ используется в CI/CD [компоненте для сборки правил конвертации для Gitlab CI](https://gitlab.com/explore/catalog/onec-components/onec-gitrules). Репозиторий данной компоненты есть и [на GitHub](https://github.com/onec-components/onec-gitrules)
|
||||
|
||||
[↑ В начало](#oscript-images)
|
||||
|
||||
56
src/build-gitrules.sh
Executable file
56
src/build-gitrules.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
|
||||
|
||||
gitrules_version="latest"
|
||||
|
||||
docker build \
|
||||
--pull \
|
||||
--build-arg GITRULES_VERSION="${gitrules_version}" \
|
||||
--build-arg DOCKER_REGISTRY_URL="${DOCKER_REGISTRY_URL}" \
|
||||
--build-arg DOCKER_LOGIN="${DOCKER_LOGIN}" \
|
||||
-t "${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/gitrules:${gitrules_version}" \
|
||||
-f "${SCRIPT_DIR}/gitrules/Dockerfile" \
|
||||
${last_arg}
|
||||
|
||||
if ./tests/test-gitrules.sh; then
|
||||
container_version=$(docker run --rm "${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/gitrules:${gitrules_version}" --version | tail -n1)
|
||||
|
||||
if [[ -n "${container_version}" ]]; then
|
||||
docker push "${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/gitrules:${gitrules_version}"
|
||||
|
||||
docker tag "${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/gitrules:${gitrules_version}" "${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/gitrules:${container_version}"
|
||||
docker push "${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/gitrules:${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
|
||||
11
src/gitrules/Dockerfile
Normal file
11
src/gitrules/Dockerfile
Normal file
@@ -0,0 +1,11 @@
|
||||
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 gitrules;
|
||||
|
||||
ENTRYPOINT ["gitrules"]
|
||||
4
src/tag-gitrules-latest.sh
Executable file
4
src/tag-gitrules-latest.sh
Executable file
@@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
git tag -f gitrules && git push origin gitrules -f
|
||||
41
tests/test-gitrules.sh
Executable file
41
tests/test-gitrules.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_gitrules_is_running() {
|
||||
log_header "Test :: gitrules is running"
|
||||
|
||||
local expected actual
|
||||
|
||||
expected="Приложение: gitrules"
|
||||
actual=$(docker run --rm ${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/gitrules:latest 2>/dev/null | head -n1)
|
||||
|
||||
if assert_eq "$expected" "$actual"; then
|
||||
log_success "gitrules is running test passed"
|
||||
else
|
||||
log_failure "gitrules is running test failed"
|
||||
TEST_FAILED=1
|
||||
fi
|
||||
}
|
||||
|
||||
# test calls
|
||||
test_gitrules_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