131 lines
4.3 KiB
YAML
131 lines
4.3 KiB
YAML
name: 'Build Frontend'
|
||
on:
|
||
workflow_dispatch:
|
||
inputs:
|
||
repo_path:
|
||
description: 'Репозиторий'
|
||
required: true
|
||
type: choice
|
||
options:
|
||
- devspc/devspace-selfkit-ui
|
||
default: devspc/devspace-selfkit-ui
|
||
branch:
|
||
description: 'Ветка'
|
||
required: true
|
||
type: string
|
||
default: 'feature/DEVX-182-ApiRegistry-overhaul-p2-ApiCardEdit'
|
||
version:
|
||
default: latest
|
||
description: 'Версия образа'
|
||
required: true
|
||
type: string
|
||
jobs:
|
||
deploy-dev:
|
||
name: 'Deploy to dev'
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- name: Cloning2
|
||
uses: https://git.binom.pw/otp/devops/clone@main
|
||
with:
|
||
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
|
||
repository: ${{ github.event.inputs.repo_path }}
|
||
branch: ${{ github.event.inputs.branch }}
|
||
- name: Set up Node.js ${{ matrix.node-version }}
|
||
uses: actions/setup-node@v4 # Use the setup-node action
|
||
with:
|
||
node-version: 24
|
||
cache: 'npm'
|
||
- name: Building
|
||
run: |
|
||
npm install
|
||
npm run build
|
||
cat > entrypoint.sh << EOF
|
||
#!/bin/sh
|
||
set -e
|
||
# Применяем переменные окружения к шаблону конфига
|
||
envsubst '${PREFIX}' < /etc/nginx/templates/default.conf.template > /etc/nginx/conf.d/default.conf
|
||
# Запускаем nginx с переданными аргументами
|
||
exec "$@"
|
||
EOF
|
||
cat > default.conf.template << EOF
|
||
server {
|
||
listen 80;
|
||
server_name localhost;
|
||
|
||
# Префикс из переменной окружения (по умолчанию devspace-ui)
|
||
set $prefix ${PREFIX:-devspace-ui};
|
||
|
||
# Редирект с /$prefix на /$prefix/
|
||
location = /$prefix {
|
||
return 301 /$prefix/;
|
||
}
|
||
|
||
# Отдача статики по префиксу
|
||
location /$prefix/ {
|
||
alias /usr/share/nginx/html/;
|
||
autoindex off;
|
||
try_files $uri =404;
|
||
}
|
||
|
||
# Health check (всегда 200)
|
||
location /health {
|
||
access_log off;
|
||
return 200 "OK\n";
|
||
add_header Content-Type text/plain;
|
||
}
|
||
|
||
# Все остальные пути — 404
|
||
location / {
|
||
return 404;
|
||
}
|
||
}
|
||
EOF
|
||
cat > Dockerfile << EOF
|
||
FROM nginx:stable-alpine
|
||
|
||
# Установка gettext для envsubst (уже есть в alpine, но для ясности)
|
||
RUN apk add --no-cache gettext
|
||
|
||
# Удаляем дефолтный конфиг
|
||
RUN rm /etc/nginx/conf.d/default.conf
|
||
|
||
# Создаём папку для шаблонов
|
||
WORKDIR /etc/nginx/templates
|
||
|
||
# Копируем шаблон конфигурации
|
||
COPY default.conf.template /etc/nginx/templates/default.conf.template
|
||
|
||
# Копируем entrypoint-скрипт
|
||
COPY entrypoint.sh /entrypoint.sh
|
||
RUN chmod +x /entrypoint.sh
|
||
|
||
# Копируем статические файлы
|
||
COPY ./dist /usr/share/nginx/html
|
||
|
||
EXPOSE 80
|
||
|
||
ENTRYPOINT ["/entrypoint.sh"]
|
||
CMD ["nginx", "-g", "daemon off;"]
|
||
EOF
|
||
- name: Build Docker Image
|
||
uses: https://git.binom.pw/subochev/devops/build-docker@main
|
||
with:
|
||
image_name: "otp/${{ github.event.inputs.repo_path }}"
|
||
tags: latest ${{ github.event.inputs.version }}
|
||
- name: Kuebrnetus config
|
||
run: |
|
||
echo '${{ secrets.KUBE_CONFIG }}' > ./ku.yaml
|
||
- name: "Install Helm"
|
||
uses: azure/setup-helm@v4.3.0
|
||
- name: 'Clone Helms'
|
||
uses: https://github.com/actions/checkout@v4
|
||
with:
|
||
repository: otp/devex
|
||
path: 'helms'
|
||
- name: 'Cleanup'
|
||
if: always()
|
||
shell: bash
|
||
run: |
|
||
echo 'Cleaning...'
|
||
rm -rf ~/.ssh/config
|
||
rm -rf ~/.ssh/my_key |