Add version-based build workflow: publish only when VERSION changes
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 14s
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 14s
This commit is contained in:
@@ -7,33 +7,50 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-and-push:
|
build-and-push:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest # Убедитесь, что у вашего раннера есть этот тег
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 2
|
||||||
|
|
||||||
|
- name: Get versions and check change
|
||||||
|
id: version_check
|
||||||
|
run: |
|
||||||
|
# Извлекаем текущую версию
|
||||||
|
CUR=$(cat VERSION | tr -d '[:space:]')
|
||||||
|
echo "current=$CUR" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
# Безопасно извлекаем старую версию
|
||||||
|
PREV=$(git show HEAD~1:VERSION 2>/dev/null | tr -d '[:space:]' || echo "none")
|
||||||
|
|
||||||
|
if [ "$CUR" != "$PREV" ]; then
|
||||||
|
echo "changed=true" >> $GITHUB_OUTPUT
|
||||||
|
else
|
||||||
|
echo "changed=false" >> $GITHUB_OUTPUT
|
||||||
|
fi
|
||||||
|
|
||||||
- name: Patch DNS for Local Network
|
- name: Patch DNS for Local Network
|
||||||
|
if: steps.version_check.outputs.changed == 'true'
|
||||||
run: |
|
run: |
|
||||||
# Мы говорим системе раннера: "Если ищешь домен, иди на локальный IP Synology"
|
# Записываем IP Synology прямо в контейнер сборки
|
||||||
# Это позволит пройти проверку SSL (имя совпадает), но пакеты пойдут по локалке.
|
echo "192.168.50.55 dungeonsiege.synology.me" | sudo tee -a /etc/hosts
|
||||||
sudo echo "192.168.50.55 dungeonsiege.synology.me" | sudo tee -a /etc/hosts
|
|
||||||
|
|
||||||
- name: Log in to Gitea Registry
|
- name: Log in to Gitea Registry
|
||||||
|
if: steps.version_check.outputs.changed == 'true'
|
||||||
run: |
|
run: |
|
||||||
# Логинимся стандартной командой. Она увидит запись в hosts и пойдет на 192.168.50.55
|
|
||||||
echo "${{ secrets.GIT_TOKEN }}" | docker login dungeonsiege.synology.me -u ${{ secrets.GIT_USERNAME }} --password-stdin
|
echo "${{ secrets.GIT_TOKEN }}" | docker login dungeonsiege.synology.me -u ${{ secrets.GIT_USERNAME }} --password-stdin
|
||||||
|
|
||||||
- name: Build Image
|
- name: Build and Push
|
||||||
|
if: steps.version_check.outputs.changed == 'true'
|
||||||
run: |
|
run: |
|
||||||
# Собираем обычным способом. Здесь интернет БУДЕТ работать.
|
REGISTRY="dungeonsiege.synology.me/poignatov/play-life"
|
||||||
docker build -t dungeonsiege.synology.me/poignatov/play-life:latest .
|
VER="${{ steps.version_check.outputs.current }}"
|
||||||
|
|
||||||
- name: Push Image
|
|
||||||
run: |
|
|
||||||
# Отправляем образ. Благодаря шагу Patch DNS, он улетит на локальный IP.
|
|
||||||
docker push dungeonsiege.synology.me/poignatov/play-life:latest
|
|
||||||
|
|
||||||
# Тэгируем версию коммита
|
# Собираем один раз
|
||||||
docker tag dungeonsiege.synology.me/poignatov/play-life:latest dungeonsiege.synology.me/poignatov/play-life:${{ github.sha }}
|
docker build -t $REGISTRY:latest -t $REGISTRY:$VER .
|
||||||
docker push dungeonsiege.synology.me/poignatov/play-life:${{ github.sha }}
|
|
||||||
|
# Пушим оба тега
|
||||||
|
docker push $REGISTRY:latest
|
||||||
|
docker push $REGISTRY:$VER
|
||||||
Reference in New Issue
Block a user