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

feat: добавлен скрипт для сборки и тестирования образа gitrules

This commit is contained in:
Iosif Pravets
2025-09-25 19:41:15 +00:00
committed by GitHub
parent 6f745a5acb
commit f15f971a15
5 changed files with 128 additions and 0 deletions

26
.github/workflows/build-gitrules.yml vendored Normal file
View 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

56
src/build-gitrules.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
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
View 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
View File

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

31
tests/test-gitrules.sh Executable file
View File

@@ -0,0 +1,31 @@
#!/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_gitrules_is_running() {
log_header "Test :: gitrules is running"
local expected actual
expected="ИНФОРМАЦИЯ - [СписокРелизов1С]: Инициализирован обработчик"
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"
fi
}
# test calls
test_gitrules_is_running