name: Deploy Stacks on: push: branches: - main - dev - staging paths: - "apps/edr-freight-api/**" - "apps/edr-freight-web/**" - "apps/edr-passenger-api/**" - "apps/edr-passenger-web/**" - "packages/**" - "infrastructure/docker/Dockerfile.web" - "infrastructure/nginx/**" - "docker-compose.yaml" - "pnpm-lock.yaml" - "scripts/deploy/**" - ".github/workflows/deploy.yml" workflow_dispatch: concurrency: group: deploy-${{ github.ref_name }} cancel-in-progress: true jobs: deploy: name: Deploy ${{ matrix.service }} runs-on: self-hosted strategy: fail-fast: false matrix: include: - project: edr-freight build_env_file: freight-web.build.env service: freight-api # - project: edr-freight # build_env_file: freight-web.build.env # service: freight-portal # - project: edr-freight # build_env_file: freight-web.build.env # service: freight-backoffice - project: edr-passenger build_env_file: passenger-web.build.env service: passenger-api - project: edr-passenger build_env_file: passenger-web.build.env service: passenger-portal - project: edr-passenger build_env_file: passenger-web.build.env service: passenger-backoffice env: PROJECT: ${{ matrix.project }} BRANCH: ${{ github.ref_name }} DEPLOY_USER: tria BUILD_ENV_FILE: ${{ matrix.build_env_file }} DOCKER_BUILDKIT: "1" COMPOSE_DOCKER_CLI_BUILD: "1" steps: - name: Checkout uses: actions/checkout@v4 - name: Sync environment from server run: | chmod +x scripts/deploy/*.sh ./scripts/deploy/sync-env-from-server.sh "${{ matrix.service }}" - name: Set compose project name run: | set -euo pipefail branch_slug=$(echo "${BRANCH}" | tr "[:upper:]" "[:lower:]" | sed -E "s/[^a-z0-9]+/-/g; s/^-+//; s/-+$//") echo "COMPOSE_PROJECT_NAME=${PROJECT}-${branch_slug}" >> "${GITHUB_ENV}" - name: Configure npm auth for Docker builds env: NPM_TOKEN: ${{ secrets.NPM_TOKEN }} run: ./scripts/deploy/create-npmrc.sh - name: Build ${{ matrix.service }} run: | set -euo pipefail docker compose --project-name "${COMPOSE_PROJECT_NAME}" build "${{ matrix.service }}" - name: Deploy ${{ matrix.service }} run: | set -euo pipefail docker compose --project-name "${COMPOSE_PROJECT_NAME}" up -d "${{ matrix.service }}" - name: Remove npm credentials from workspace if: always() run: rm -f .npmrc .npmrc_temp