You've already forked oscript-images
mirror of
https://github.com/pravets/oscript-images.git
synced 2025-11-23 22:24:41 +02:00
feat: Реализована сборка образа yard (#3)
This commit is contained in:
26
.github/workflows/build-yard.yml
vendored
Normal file
26
.github/workflows/build-yard.yml
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
name: Build yard Docker Image
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'yard'
|
||||
|
||||
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 "Собираем yard"
|
||||
./src/build-yard.sh
|
||||
50
README.md
50
README.md
@@ -1,2 +1,50 @@
|
||||
# oscript-images
|
||||
Всё для сборки docker-образов движка OneScript и некоторых утилит на OneScript
|
||||
Всё для сборки Docker-образов движка [OneScript](https://oscript.io/) и некоторых утилит на OneScript
|
||||
|
||||
Сборка происходит в GitHub Actions, чтобы максимально снизить порог входа и упростить вашу жизнь.
|
||||
|
||||
Необходимо выполнить [подготовительные шаги](#подготовительные-шаги) и шаги сборки требуемых вам утилит.
|
||||
|
||||
## Оглавление
|
||||
|
||||
- [oscript-images](#oscript-images)
|
||||
- [Подготовительные шаги](#подготовительные-шаги)
|
||||
- [yard](#yard)
|
||||
|
||||
## Подготовительные шаги
|
||||
|
||||
1. **Форкните** [этот репозиторий](https://github.com/pravets/oscript-images/).
|
||||
|
||||
1. **Включите GitHub Actions**
|
||||
- Перейдите во вкладку "Actions" в вашем форке и разрешите запуск workflow.
|
||||
|
||||
1. **Добавьте секреты для Docker Hub**
|
||||
- В настройках репозитория (Settings → Secrets and variables → Actions) добавьте переменные:
|
||||
- `DOCKER_REGISTRY_URL` — адрес реестра (например, `docker.io`)
|
||||
- `DOCKER_LOGIN` — ваш логин Docker Hub или в вашем приватном registry
|
||||
- `DOCKER_PASSWORD` — ваш пароль от вашего приватного registry или [токен Docker Hub](https://app.docker.com/settings/personal-access-tokens). Для Docker Hub нужны права Read и Write и рекомендуется использовать токен, вместо пароля.
|
||||
|
||||
[↑ В начало](#oscript-images)
|
||||
|
||||
## yard
|
||||
|
||||
1. [**Выполните подготовительные шаги**](#подготовительные-шаги), если не сделали это ранее
|
||||
|
||||
1. **Добавьте тег `yard`**
|
||||
- Перейдите во вкладку "Tags" или используйте команду:
|
||||
```bash
|
||||
git tag yard
|
||||
git push origin yard
|
||||
```
|
||||
|
||||
- либо клонируйте репозиторий к себе на Linux-хост (или используйте GitHub Codespaces) и запустите скрипт `./src/tag-yard-latest.sh` — он принудительно «перевесит» тег на последний коммит и запушит теги
|
||||
- Это необходимо для запуска сборки yard через GitHub Actions.
|
||||
|
||||
1. **Запустите сборку**
|
||||
- После пуша тега workflow автоматически соберёт и опубликует образ `yard` в ваш Docker Registry.
|
||||
- будет опубликован образ с тегом `latest`, а также с номерной версией собранного `yard`
|
||||
|
||||
1. **Проверьте результат**
|
||||
- Убедитесь, что образ появился в вашем Docker Registry с именем `yard` и соответствующей версией.
|
||||
|
||||
[↑ В начало](#oscript-images)
|
||||
@@ -6,6 +6,7 @@ if [[ -z "$DOCKER_REGISTRY_URL" || -z "$DOCKER_LOGIN" || -z "$DOCKER_PASSWORD" ]
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Авторизуемся в $DOCKER_REGISTRY_URL"
|
||||
echo "$DOCKER_PASSWORD" | docker login "$DOCKER_REGISTRY_URL" -u "$DOCKER_LOGIN" --password-stdin
|
||||
|
||||
if [[ $? -eq 0 ]]; then
|
||||
|
||||
56
src/build-yard.sh
Executable file
56
src/build-yard.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
|
||||
|
||||
yard_version="latest"
|
||||
|
||||
docker build \
|
||||
--pull \
|
||||
--build-arg YARD_VERSION="${yard_version}" \
|
||||
--build-arg DOCKER_REGISTRY_URL="${DOCKER_REGISTRY_URL}" \
|
||||
--build-arg DOCKER_LOGIN="${DOCKER_LOGIN}" \
|
||||
-t "${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/yard:${yard_version}" \
|
||||
-f "${SCRIPT_DIR}/yard/Dockerfile" \
|
||||
${last_arg}
|
||||
|
||||
if ./tests/test-yard.sh; then
|
||||
container_version=$(docker run --rm "${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/yard:${yard_version}" --version | tail -n1)
|
||||
|
||||
if [[ -n "${container_version}" ]]; then
|
||||
docker push "${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/yard:${yard_version}"
|
||||
|
||||
docker tag "${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/yard:${yard_version}" "${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/yard:${container_version}"
|
||||
docker push "${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/yard:${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
|
||||
4
src/tag-yard-latest.sh
Executable file
4
src/tag-yard-latest.sh
Executable file
@@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
git tag -f yard && git push --tags -f
|
||||
18
src/yard/Dockerfile
Normal file
18
src/yard/Dockerfile
Normal file
@@ -0,0 +1,18 @@
|
||||
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 set -e; \
|
||||
apt-get update -qq; \
|
||||
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
|
||||
p7zip-rar \
|
||||
p7zip-full; \
|
||||
opm i yard; \
|
||||
apt-get clean; \
|
||||
rm -rf /var/lib/apt/lists/* /var/cache/debconf
|
||||
|
||||
ENTRYPOINT ["yard"]
|
||||
31
tests/test-yard.sh
Executable file
31
tests/test-yard.sh
Executable 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_yard_is_running() {
|
||||
log_header "Test :: yard is running"
|
||||
|
||||
local expected actual
|
||||
|
||||
expected="ИНФОРМАЦИЯ - [СписокРелизов1С]: Инициализирован обработчик"
|
||||
actual=$(docker run --rm ${DOCKER_REGISTRY_URL}/${DOCKER_LOGIN}/yard:latest 2>/dev/null | head -n1)
|
||||
|
||||
if assert_eq "$expected" "$actual"; then
|
||||
log_success "yard is running test passed"
|
||||
else
|
||||
log_failure "yard is running test failed"
|
||||
fi
|
||||
}
|
||||
|
||||
# test calls
|
||||
test_yard_is_running
|
||||
Reference in New Issue
Block a user