name: build-and-release on: push: branches: - main - high-performance concurrency: group: ai-assistant-build-${{ github.ref }} cancel-in-progress: true jobs: build: runs-on: self-hosted steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up Docker Buildx run: | set -euo pipefail docker version docker buildx create --use --name nxtgauge-builder || docker buildx use nxtgauge-builder docker buildx inspect --bootstrap - name: Login to registry env: REGISTRY_HOSTPORT: ${{ secrets.REGISTRY_HOSTPORT }} REGISTRY_USERNAME: ${{ secrets.REGISTRY_USERNAME }} REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }} run: | set -euo pipefail test -n "$REGISTRY_HOSTPORT" printf '%s' "$REGISTRY_PASSWORD" | docker login "$REGISTRY_HOSTPORT" -u "$REGISTRY_USERNAME" --password-stdin - name: Build and push image env: REGISTRY_HOSTPORT: ${{ secrets.REGISTRY_HOSTPORT }} SHA: ${{ github.sha }} run: | set -euo pipefail metadata_file="/tmp/ai-assistant-metadata.json" image_ref="$REGISTRY_HOSTPORT/nxtgauge-ai-assistant:$SHA" docker buildx build --push \ --metadata-file "$metadata_file" \ -f Dockerfile \ -t "$image_ref" \ . digest="$(grep -o '"containerimage.digest":"sha256:[^"]*"' "$metadata_file" | cut -d'"' -f4)" test -n "$digest" printf '%s@%s\n' "$REGISTRY_HOSTPORT/nxtgauge-ai-assistant" "$digest" > /tmp/ai-assistant-image-ref.txt - name: Prune old SHA tags if: success() continue-on-error: true env: REGISTRY_HOST: ${{ secrets.REGISTRY_HOSTPORT }} REGISTRY_USERNAME: ${{ secrets.REGISTRY_USERNAME }} REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }} run: | set -euo pipefail python3 .forgejo/scripts/registry_prune.py \ --registry "$REGISTRY_HOST" \ --repo "nxtgauge-ai-assistant" \ --username "$REGISTRY_USERNAME" \ --password "$REGISTRY_PASSWORD" \ --keep 2 - name: Update GitOps release env: GITEOPS_REPO: ${{ secrets.GITEOPS_REPO }} GITEOPS_SSH_KEY: ${{ secrets.GITEOPS_SSH_KEY }} SHA: ${{ github.sha }} run: | set -euo pipefail test -n "$GITEOPS_REPO" test -n "$GITEOPS_SSH_KEY" mkdir -p ~/.ssh printf '%s\n' "$GITEOPS_SSH_KEY" > ~/.ssh/id_ed25519 chmod 600 ~/.ssh/id_ed25519 ssh-keyscan github.com >> ~/.ssh/known_hosts 2>/dev/null GITEOPS_DIR=$(mktemp -d) git clone "$GITEOPS_REPO" "$GITEOPS_DIR" cd "$GITEOPS_DIR" image_ref="$(cat /tmp/ai-assistant-image-ref.txt)" ./scripts/set-app-release.sh ai-assistant "$image_ref" if git diff --quiet; then echo "GitOps repo already up to date." exit 0 fi git config user.name "forgejo-actions[bot]" git config user.email "forgejo-actions@ci.nxtgauge.com" git add apps scripts/set-app-release.sh git commit -m "chore(gitops): deploy ai-assistant@${SHA}" git push