diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml new file mode 100644 index 0000000..32c87bd --- /dev/null +++ b/.gitea/workflows/ci.yaml @@ -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 diff --git a/.gitea/workflows/deploy.yaml b/.gitea/workflows/deploy.yaml new file mode 100644 index 0000000..0d25ea5 --- /dev/null +++ b/.gitea/workflows/deploy.yaml @@ -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