Allows manual trigger to build all apps (or specific ones). Empty input builds web, api, harness. Useful for initial registry population after migration.
72 lines
2.5 KiB
YAML
72 lines
2.5 KiB
YAML
name: Deploy Production
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
workflow_dispatch:
|
|
inputs:
|
|
apps:
|
|
description: "Comma-separated app names to build (leave empty for all)"
|
|
required: false
|
|
default: ""
|
|
|
|
jobs:
|
|
deploy:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 2
|
|
|
|
- run: corepack enable && corepack prepare pnpm@latest --activate
|
|
|
|
- run: pnpm install --frozen-lockfile
|
|
|
|
- name: Determine changed apps
|
|
id: changes
|
|
run: |
|
|
if [ "${{ gitea.event_name }}" = "workflow_dispatch" ]; then
|
|
INPUT="${{ gitea.event.inputs.apps }}"
|
|
if [ -z "$INPUT" ]; then
|
|
APPS="web,api,harness"
|
|
else
|
|
APPS="$INPUT"
|
|
fi
|
|
else
|
|
APPS=$(pnpm turbo build --filter='...[HEAD~1]' --dry-run=json | jq -r '[.packages[] | select(startswith("@homelab/")) | sub("@homelab/";"") ] | join(",")')
|
|
fi
|
|
echo "apps=$APPS" >> "$GITHUB_OUTPUT"
|
|
|
|
- name: Build and push images
|
|
if: steps.changes.outputs.apps != ''
|
|
run: |
|
|
echo "${{ 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 }} \
|
|
-t gitea.coreworlds.io/lazorgurl/homelab-${app}:latest \
|
|
apps/${app}
|
|
docker push gitea.coreworlds.io/lazorgurl/homelab-${app}:${{ gitea.sha }}
|
|
docker push gitea.coreworlds.io/lazorgurl/homelab-${app}:latest
|
|
done
|
|
|
|
- name: Update image tags in production 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/production
|
|
kustomize edit set image gitea.coreworlds.io/lazorgurl/homelab-${app}=gitea.coreworlds.io/lazorgurl/homelab-${app}:${{ gitea.sha }}
|
|
cd -
|
|
done
|
|
|
|
- name: Commit image tag updates
|
|
if: steps.changes.outputs.apps != ''
|
|
run: |
|
|
git config user.name "gitea-actions[bot]"
|
|
git config user.email "gitea-actions[bot]@coreworlds.io"
|
|
git add apps/*/k8s/overlays/production/
|
|
git diff --staged --quiet || git commit -m "deploy: update production images to ${{ gitea.sha }}"
|
|
git push
|