name: Build & Deploy on: push: branches: [main] env: REGISTRY: 192.168.1.212:1180/library jobs: build: runs-on: self-hosted steps: - name: Install build tools run: | apk add --no-cache curl git nodejs npm docker-cli 2>/dev/null || true - name: Generate demo content + Dockerfile run: | WORK=/root/.cache/demo-frontend mkdir -p $WORK cd $WORK [ -d .git ] || git clone http://joe:${GITEA_TOKEN}@192.168.1.212:3000/joe/demo-frontend.git . git pull SHORT_SHA=${GITHUB_SHA::8} cat > package.json <

Demo Frontend

Build: ${SHORT_SHA}

Commit: ${GITHUB_SHA}

Time: $(date)

' > dist/index.html && echo 'OK' > dist/healthz"} } EOF cat > Dockerfile </dev/null || true - name: Patch ArgoCD run: | SHORT=${GITHUB_SHA::8} for i in {1..10}; do if kubectl -n cicd get application demo-frontend &>/dev/null; then break fi echo "Waiting for ArgoCD application..." sleep 3 done PATCH=$(jq -n --arg tag "$SHORT" --arg reg "$REGISTRY" \ '{"spec":{"source":{"helm":{"parameters":[{"name":"image.registry","value":$reg},{"name":"image.tag","value":$tag}]}}}}') kubectl -n cicd patch application demo-frontend --type=merge -p "$PATCH" echo "✓ ArgoCD updated with tag ${SHORT}" env: GITHUB_SHA: ${{ github.sha }} REGISTRY: ${{ env.REGISTRY }}