name: Build & Deploy on: push env: REGISTRY: git.aggtaa.com IMAGE_PREFIX: ${{ gitea.repository }} jobs: # ── BUILD SERVER ────────────────────────────────────────────────────────────── build-server: runs-on: docker1 defaults: run: shell: sh working-directory: /workspace steps: - name: Check paths run: | mount | grep overlay || echo "no overlay" ls /bin/ ls /usr/bin/ | grep -E "bash|sh" - name: Check docker run: | find /usr -name "docker-buildx" 2>/dev/null || echo "not found in /usr" find /root -name "docker-buildx" 2>/dev/null || echo "not found in /root" ls /usr/libexec/ 2>/dev/null || echo "no /usr/libexec" - name: Checkout working-directory: / run: | mkdir -p /workspace if [ -d /workspace/.git ]; then cd /workspace && git fetch origin && git reset --hard origin/${{ gitea.ref_name }} else git clone ${{ gitea.server_url }}/${{ gitea.repository }}.git /workspace fi - name: Build & push server run: | echo "${{ secrets.REGISTRY_PASSWORD }}" | \ docker login ${{ env.REGISTRY }} -u ${{ secrets.REGISTRY_USER }} --password-stdin docker buildx build \ --cache-from type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/server:cache \ --cache-to type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/server:cache,mode=max \ --tag ${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/server:latest \ --tag ${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/server:${{ gitea.sha }} \ --file server.Dockerfile \ --push \ . # ── BUILD WEBCLIENT ─────────────────────────────────────────────────────────── build-webclient: runs-on: docker1 defaults: run: working-directory: /workspace steps: - name: Checkout working-directory: / run: | mkdir -p /workspace if [ -d /workspace/.git ]; then cd /workspace && git fetch origin && git reset --hard origin/${{ gitea.ref_name }} else git clone ${{ gitea.server_url }}/${{ gitea.repository }}.git /workspace fi - name: Build & push webclient run: | echo "${{ secrets.REGISTRY_PASSWORD }}" | \ docker login ${{ env.REGISTRY }} -u ${{ secrets.REGISTRY_USER }} --password-stdin docker buildx build \ --cache-from type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/webclient:cache \ --cache-to type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/webclient:cache,mode=max \ --tag ${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/webclient:latest \ --tag ${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/webclient:${{ gitea.sha }} \ --file webclient.Dockerfile \ --push \ . # ── DEPLOY ──────────────────────────────────────────────────────────────────── deploy: runs-on: docker1 needs: [build-server, build-webclient] if: always() && !failure() && !cancelled() steps: - name: Deploy run: | mkdir -p "/app-cache/${{ gitea.repository }}" cd "/app-cache/${{ gitea.repository }}" if [ ! -d .git ]; then git clone ${{ gitea.server_url }}/${{ gitea.repository }}.git . else git pull origin main fi docker compose pull docker compose up -d --remove-orphans docker image prune -f