chore: deploy and lint workflows
This commit is contained in:
@@ -0,0 +1,28 @@
|
|||||||
|
name: CI – validate docker composes
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [dev]
|
||||||
|
pull_request:
|
||||||
|
branches: [main]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
validate:
|
||||||
|
runs-on: ci
|
||||||
|
steps:
|
||||||
|
- name: Install Node and tools
|
||||||
|
run: |
|
||||||
|
apk add --no-cache nodejs yamllint docker-cli-compose git
|
||||||
|
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Lint all compose files
|
||||||
|
run: |
|
||||||
|
find . \( -name "compose.yaml" -o -name "docker-compose.yaml" \) -print0 | xargs -0 yamllint -d "{extends: relaxed, rules: {line-length: disable}}"
|
||||||
|
|
||||||
|
- name: Validate docker compose syntax
|
||||||
|
run: |
|
||||||
|
for f in $(find . -name "compose.yaml" -o -name "docker-compose.yaml"); do
|
||||||
|
echo "Checking: $f"
|
||||||
|
docker compose -f "$f" config -q
|
||||||
|
done
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
name: CD – staged deploy
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
detect-changes:
|
||||||
|
runs-on: deploy
|
||||||
|
outputs:
|
||||||
|
services: ${{ steps.set-matrix.outputs.services }}
|
||||||
|
steps:
|
||||||
|
- name: Fix git ownership and Fetch
|
||||||
|
run: |
|
||||||
|
git config --global --add safe.directory /srv/homelab
|
||||||
|
cd /srv/homelab
|
||||||
|
git fetch origin main
|
||||||
|
git reset --hard origin/main
|
||||||
|
|
||||||
|
- id: set-matrix
|
||||||
|
name: Generate service list
|
||||||
|
run: |
|
||||||
|
cd /srv/homelab
|
||||||
|
# Собираем список папок в JSON-массив для матрицы
|
||||||
|
DIRS=$(git diff --name-only HEAD~1 HEAD | cut -d/ -f1 | sort -u | xargs -I{} sh -c 'if [ -f {}/compose.yaml ] || [ -f {}/docker-compose.yaml ]; then echo \"{}\"; fi' | paste -sd,)
|
||||||
|
echo "services=[$DIRS]" >> $GITEA_OUTPUT
|
||||||
|
|
||||||
|
apply-deploy:
|
||||||
|
needs: detect-changes
|
||||||
|
if: needs.detect-changes.outputs.services != '[]'
|
||||||
|
runs-on: deploy
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
service: ${{ fromJson(needs.detect-changes.outputs.services) }}
|
||||||
|
fail-fast: false
|
||||||
|
|
||||||
|
name: Deploy ${{ matrix.service }}
|
||||||
|
steps:
|
||||||
|
- name: Deploy Service
|
||||||
|
run: |
|
||||||
|
cd /srv/homelab/${{ matrix.service }}
|
||||||
|
echo "Syncing and starting ${{ matrix.service }}..."
|
||||||
|
docker compose pull
|
||||||
|
docker compose up -d --remove-orphans
|
||||||
Reference in New Issue
Block a user