From 3fef8106665b6b62e82942e777e43bf39e002b4a Mon Sep 17 00:00:00 2001 From: Yonas Tewabe Date: Tue, 16 Jun 2026 10:27:24 +0300 Subject: [PATCH] Update deploy.yml --- .github/workflows/deploy.yml | 102 +++++++++++++++++------------------ 1 file changed, 50 insertions(+), 52 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index c05e88f58..13c1f18fb 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -27,68 +27,66 @@ jobs: fetch-depth: 2 - name: Determine changed services - id: filter - run: | - set -euo pipefail - ALL_SERVICES=( - "freight-api" - "passenger-api" - "passenger-portal" - "passenger-backoffice" - "payment-api" - ) + id: filter + run: | + set -euo pipefail - if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then - JSON=$(printf '%s\n' "${ALL_SERVICES[@]}" | jq -R . | jq -sc .) - echo "matrix=${JSON}" >> "$GITHUB_OUTPUT" - exit 0 - fi + ALL_SERVICES=( + "freight-api" + "passenger-api" + "passenger-portal" + "passenger-backoffice" + "payment-api" + ) - CHANGED=$(git diff --name-only HEAD~1 HEAD) - echo "=== Changed files ===" - echo "$CHANGED" - echo "=====================" + if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then + JSON=$(printf '%s\n' "${ALL_SERVICES[@]}" | jq -R . | jq -sc .) + echo "matrix=${JSON}" >> "$GITHUB_OUTPUT" + exit 0 + fi - SERVICES=() + CHANGED=$(git diff --name-only HEAD~1 HEAD) + echo "=== Changed files ===" + echo "$CHANGED" + echo "=====================" - NON_DEPLOYABLE_PATTERN="^docs/|^README[.]md$|^DEPLOYMENT[.]md$|^CLAUDE[.]md$|^checkpoint[.]md$|^orgstructure[.]md$|^ITMLS_DB_Design[.]md$|.*[.]md$|^[.]eslintrc|^[.]prettierrc|^[.]editorconfig|^[.]gitignore|^[.]gitattributes|^commitlint[.]config[.]js$" + SERVICES=() - GLOBAL_PATTERN="^[.]github/|^docker-compose[.]yaml$|^turbo[.]json$|^tsconfig[.]json$|^tsconfig[.]base[.]json$|^pnpm-workspace[.]yaml$|^pnpm-lock[.]yaml$|^package[.]json$|^[.]env([.][a-z]+)?$|^packages/|^infrastructure/|^scripts/deploy/|^wagon.*[.]ts$|^cargo.*[.]ts$|^container.*[.]ts$|^use-.*[.]ts$|^.*[.]service[.]ts$|^.*[.]entity[.]ts$|^.*-types[.]ts$" + NON_DEPLOYABLE_PATTERN="^docs/|^README[.]md$|^DEPLOYMENT[.]md$|^CLAUDE[.]md$|^checkpoint[.]md$|^orgstructure[.]md$|^ITMLS_DB_Design[.]md$|.*[.]md$|^[.]eslintrc|^[.]prettierrc|^[.]editorconfig|^[.]gitignore|^[.]gitattributes|^commitlint[.]config[.]js$" - # Tier 1: skip if only non-deployable files changed - DEPLOYABLE=$(echo "$CHANGED" | grep -vE "$NON_DEPLOYABLE_PATTERN" || true) - if [ -z "$DEPLOYABLE" ]; then - echo "Only non-deployable files changed. Skipping deploy." - echo "matrix=[]" >> "$GITHUB_OUTPUT" - exit 0 - fi + GLOBAL_PATTERN="^[.]github/|^docker-compose[.]yaml$|^turbo[.]json$|^tsconfig[.]json$|^tsconfig[.]base[.]json$|^pnpm-workspace[.]yaml$|^pnpm-lock[.]yaml$|^package[.]json$|^[.]env([.][a-z]+)?$|^packages/|^infrastructure/|^scripts/deploy/|^wagon.*[.]ts$|^cargo.*[.]ts$|^container.*[.]ts$|^use-.*[.]ts$|^.*[.]service[.]ts$|^.*[.]entity[.]ts$|^.*-types[.]ts$" - # Tier 2: deploy all if any global file changed - if echo "$CHANGED" | grep -qE "$GLOBAL_PATTERN"; then - echo "Global file(s) changed — deploying all services." - JSON=$(printf '%s\n' "${ALL_SERVICES[@]}" | jq -R . | jq -sc .) - echo "matrix=${JSON}" >> "$GITHUB_OUTPUT" - exit 0 - fi + DEPLOYABLE=$(echo "$CHANGED" | grep -vE "$NON_DEPLOYABLE_PATTERN" || true) + if [ -z "$DEPLOYABLE" ]; then + echo "Only non-deployable files changed. Skipping deploy." + echo "matrix=[]" >> "$GITHUB_OUTPUT" + exit 0 + fi - # Tier 3: per-service paths - echo "$CHANGED" | grep -q "^apps/edr-freight-api/" && SERVICES+=("freight-api") - echo "$CHANGED" | grep -q "^apps/edr-passenger-api/" && SERVICES+=("passenger-api") - echo "$CHANGED" | grep -q "^apps/edr-passenger-web/portal/" && SERVICES+=("passenger-portal") - echo "$CHANGED" | grep -q "^apps/edr-passenger-web/backoffice/" && SERVICES+=("passenger-backoffice") - echo "$CHANGED" | grep -q "^apps/edr-payment-api/" && SERVICES+=("payment-api") + if echo "$CHANGED" | grep -qE "$GLOBAL_PATTERN"; then + echo "Global file(s) changed — deploying all services." + JSON=$(printf '%s\n' "${ALL_SERVICES[@]}" | jq -R . | jq -sc .) + echo "matrix=${JSON}" >> "$GITHUB_OUTPUT" + exit 0 + fi - SERVICES=($(printf '%s\n' "${SERVICES[@]}" | sort -u)) + echo "$CHANGED" | grep -q "^apps/edr-freight-api/" && SERVICES+=("freight-api") + echo "$CHANGED" | grep -q "^apps/edr-passenger-api/" && SERVICES+=("passenger-api") + echo "$CHANGED" | grep -q "^apps/edr-passenger-web/portal/" && SERVICES+=("passenger-portal") + echo "$CHANGED" | grep -q "^apps/edr-passenger-web/backoffice/" && SERVICES+=("passenger-backoffice") + echo "$CHANGED" | grep -q "^apps/edr-payment-api/" && SERVICES+=("payment-api") + + SERVICES=($(printf '%s\n' "${SERVICES[@]}" | sort -u)) + + if [ ${#SERVICES[@]} -eq 0 ]; then + echo "No deployable service changes detected." + echo "matrix=[]" >> "$GITHUB_OUTPUT" + else + echo "Services to deploy: ${SERVICES[*]}" + JSON=$(printf '%s\n' "${SERVICES[@]}" | jq -R . | jq -sc .) + echo "matrix=${JSON}" >> "$GITHUB_OUTPUT" + fi - if [ ${#SERVICES[@]} -eq 0 ]; then - echo "No deployable service changes detected." - echo "matrix=[]" >> "$GITHUB_OUTPUT" - else - echo "Services to deploy: ${SERVICES[*]}" - JSON=$(printf '%s\n' "${SERVICES[@]}" | jq -R . | jq -sc .) - echo "matrix=${JSON}" >> "$GITHUB_OUTPUT" - fi - deploy: name: Deploy ${{ matrix.service }} needs: detect-changes