mirror of
https://github.com/dartdavros/chatballs.git
synced 2026-10-05 09:14:58 +03:00
🚚 chore(repo)!: корень репозитория перенесён в code/chatballs
История переписана git filter-repo: пути code/hub.edevs.tech, code/custocrm и code/chatballs подняты в корень. Приложение больше не лежит во вложенном каталоге, поэтому инфраструктура переезжает следом: - .gitlab-ci.yml, .gitlab/ci/*, .github/workflows/release.yml — APP_DIR теперь ".", все пути внутри джоб через него и остаются рабочими; - .gitattributes — без него core.autocrlf=true отдавал бы .sh и CLI chatballs с CRLF, что ломает exec в Linux-контейнерах; - .gitignore — вернулись правила data/, .env.bak-*, **/staticfiles/, жившие в прежнем корневом .gitignore. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
c01bf8aef6
commit
53129701a2
7 files changed
+515
No files matched your search
@@ -0,0 +1,123 @@
|
||||
# Публикация образов Chatballs в GitHub Container Registry.
|
||||
#
|
||||
# Смысл: человек не должен собирать продукт, чтобы его запустить. По тегу vX.Y.Z
|
||||
# workflow собирает backend и frontend, публикует их в ghcr.io и прикладывает к
|
||||
# релизу release.env — файл со ссылками на образы по digest. С ним запуск
|
||||
# сводится к «docker compose up» без единой сборки.
|
||||
#
|
||||
# Ничего настраивать не нужно: путь образов выводится из github.repository,
|
||||
# публикация идёт встроенным GITHUB_TOKEN.
|
||||
|
||||
name: release
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- "v*"
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
version:
|
||||
description: "Версия релиза (например 1.0.0)"
|
||||
required: true
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
packages: write
|
||||
|
||||
env:
|
||||
APP_DIR: .
|
||||
REGISTRY: ghcr.io
|
||||
# Сторонние образы пинуются тем же способом, что и свои: по digest.
|
||||
POSTGRES_IMAGE: pgvector/pgvector:pg16
|
||||
REDIS_IMAGE: redis:7-alpine
|
||||
GATEWAY_IMAGE: caddy:2.8.4
|
||||
COTURN_IMAGE: coturn/coturn:4.6
|
||||
|
||||
jobs:
|
||||
images:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Версия релиза
|
||||
id: version
|
||||
run: |
|
||||
version="${{ inputs.version }}"
|
||||
[ -n "$version" ] || version="${GITHUB_REF_NAME#v}"
|
||||
case "$version" in
|
||||
*[!A-Za-z0-9._-]*|"") echo "Недопустимая версия: $version" >&2; exit 1 ;;
|
||||
esac
|
||||
echo "value=$version" >> "$GITHUB_OUTPUT"
|
||||
echo "repo=$(echo '${{ github.repository }}' | tr '[:upper:]' '[:lower:]')" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- uses: docker/setup-buildx-action@v3
|
||||
|
||||
- uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ${{ env.REGISTRY }}
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Backend
|
||||
id: backend
|
||||
uses: docker/build-push-action@v6
|
||||
with:
|
||||
context: ${{ env.APP_DIR }}
|
||||
file: ${{ env.APP_DIR }}/apps/backend/Dockerfile.production
|
||||
push: true
|
||||
tags: |
|
||||
${{ env.REGISTRY }}/${{ steps.version.outputs.repo }}/backend:${{ steps.version.outputs.value }}
|
||||
${{ env.REGISTRY }}/${{ steps.version.outputs.repo }}/backend:latest
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
||||
|
||||
- name: Frontend
|
||||
id: frontend
|
||||
uses: docker/build-push-action@v6
|
||||
with:
|
||||
context: ${{ env.APP_DIR }}
|
||||
file: ${{ env.APP_DIR }}/deploy/docker/frontend.Dockerfile
|
||||
push: true
|
||||
tags: |
|
||||
${{ env.REGISTRY }}/${{ steps.version.outputs.repo }}/frontend:${{ steps.version.outputs.value }}
|
||||
${{ env.REGISTRY }}/${{ steps.version.outputs.repo }}/frontend:latest
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
||||
|
||||
- name: release.env со ссылками по digest
|
||||
run: |
|
||||
set -eu
|
||||
version="${{ steps.version.outputs.value }}"
|
||||
repo="${{ steps.version.outputs.repo }}"
|
||||
prefix="${{ env.REGISTRY }}/$repo"
|
||||
|
||||
# Digest своих образов отдаёт сам build-push-action; сторонние
|
||||
# спрашиваем у реестра — :latest в релизе недопустим.
|
||||
third_party_digest() {
|
||||
docker buildx imagetools inspect "$1" --format '{{ "{{json .Manifest.Digest}}" }}' | tr -d '"'
|
||||
}
|
||||
|
||||
{
|
||||
echo "# release.env — сгенерирован ${{ github.workflow }} для $version."
|
||||
echo "# Все образы закреплены по digest: :latest источником релиза не является."
|
||||
echo "CHATBALLS_VERSION=$version"
|
||||
echo "CHATBALLS_BACKEND_IMAGE=$prefix/backend:$version@${{ steps.backend.outputs.digest }}"
|
||||
echo "CHATBALLS_FRONTEND_IMAGE=$prefix/frontend:$version@${{ steps.frontend.outputs.digest }}"
|
||||
echo "CHATBALLS_POSTGRES_IMAGE=${POSTGRES_IMAGE}@$(third_party_digest "$POSTGRES_IMAGE")"
|
||||
echo "CHATBALLS_REDIS_IMAGE=${REDIS_IMAGE}@$(third_party_digest "$REDIS_IMAGE")"
|
||||
echo "CHATBALLS_GATEWAY_IMAGE=${GATEWAY_IMAGE}@$(third_party_digest "$GATEWAY_IMAGE")"
|
||||
echo "CHATBALLS_COTURN_IMAGE=${COTURN_IMAGE}@$(third_party_digest "$COTURN_IMAGE")"
|
||||
} > release.env
|
||||
|
||||
cat release.env
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: release.env
|
||||
path: release.env
|
||||
|
||||
- name: Приложить release.env к релизу
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
files: release.env
|
||||
Reference in new issue
Block a user