name: Deploy Preview on: pull_request: types: [opened, synchronize, reopened] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v4 - uses: actions/setup-node@v4 with: node-version: 20 cache: pnpm - run: pnpm install --frozen-lockfile - name: Determine changed apps id: changes run: | APPS=$(pnpm turbo build --filter='...[origin/main]' --dry-run=json | jq -r '[.packages[] | select(startswith("@homelab/")) | sub("@homelab/";"") ] | join(",")') echo "apps=$APPS" >> "$GITHUB_OUTPUT" - name: Build and push images if: steps.changes.outputs.apps != '' run: | echo "${{ secrets.GITEA_TOKEN }}" | docker login gitea.coreworlds.io -u ${{ gitea.actor }} --password-stdin IFS=',' read -ra APPS <<< "${{ steps.changes.outputs.apps }}" for app in "${APPS[@]}"; do docker build \ -t gitea.coreworlds.io/lazorgurl/homelab-${app}:${{ gitea.sha }} \ apps/${app} docker push gitea.coreworlds.io/lazorgurl/homelab-${app}:${{ gitea.sha }} done - name: Update image tags in preview overlay if: steps.changes.outputs.apps != '' run: | IFS=',' read -ra APPS <<< "${{ steps.changes.outputs.apps }}" for app in "${APPS[@]}"; do cd apps/${app}/k8s/overlays/preview kustomize edit set image gitea.coreworlds.io/lazorgurl/homelab-${app}=gitea.coreworlds.io/lazorgurl/homelab-${app}:${{ gitea.sha }} cd - done - name: Comment preview URL uses: actions/github-script@v7 with: script: | const { owner, repo } = context.repo; const issue_number = context.issue.number; const body = `## Preview Deploy\nNamespace: \`preview-${issue_number}\`\nArgoCD will sync automatically from branch \`${context.payload.pull_request.head.ref}\`.`; await fetch(`${process.env.GITHUB_API_URL}/repos/${owner}/${repo}/issues/${issue_number}/comments`, { method: 'POST', headers: { 'Authorization': `token ${process.env.GITHUB_TOKEN}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ body }) });