name: Cloud Foundry

on:
  workflow_call:
    inputs:
      environment:
        default: Staging
        type: string
  workflow_dispatch:
  push:
    branches:
      - main

permissions:
  contents: read
  deployments: write

concurrency:
  group: {{#literal}}cf-${{ github.workflow }}-${{ github.head_ref || github.run_id }}{{/literal}}
  cancel-in-progress: true

env:
  APP_NAME: {{ appName }}
jobs:
  deploy:
    runs-on: {{#sap}}[self-hosted, solinas]{{/sap}}{{^sap}}ubuntu-latest{{/sap}}
    steps:
      - uses: actions/checkout@v5
      - uses: actions/setup-node@v5
        with:
          node-version: 22
      {{#isJava}}
      - uses: actions/setup-java@v5
        with:
          distribution: sapmachine
          java-version: 21
          cache: maven
      {{#sap}}
      - name: Install Maven
        run: |
          MAVEN_VERSION=3.9.6
          curl -fsSL "https://archive.apache.org/dist/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz" -o maven.tgz
          tar -xzf maven.tgz
          echo "${PWD}/apache-maven-${MAVEN_VERSION}/bin" >> "$GITHUB_PATH"
      {{/sap}}
      {{/isJava}}
      - uses: cap-js/cf-setup@v1
        with:
          cf-api: {{#literal}}${{ vars.CF_API }}{{/literal}}
          cf-org: {{#literal}}${{ vars.CF_ORG }}{{/literal}}
          cf-space: {{#literal}}${{ vars.CF_SPACE }}{{/literal}}
          cf-username: {{#literal}}${{ vars.CF_USERNAME }}{{/literal}}
          cf-password: {{#literal}}${{ secrets.CF_PASSWORD }}{{/literal}}
      - run: npm install
      - run: npx cds up

      {{#hasApprouter}}
      - run: cf logs {{#literal}}"${{ env.APP_NAME }}"{{/literal}} --recent
        if: always()
      {{/hasApprouter}}
      - run: cf logs {{#literal}}"${{ env.APP_NAME }}-srv"{{/literal}} --recent
        if: always()
      {{^hasMultitenancy}}
      - run: cf logs {{#literal}}"${{ env.APP_NAME }}-db-deployer"{{/literal}} --recent
        if: always()
      {{/hasMultitenancy}}
      {{#hasMultitenancy}}
      - run: cf logs {{#literal}}"${{ env.APP_NAME }}-mtx"{{/literal}} --recent
        if: always()
      {{/hasMultitenancy}}

      - name: Get application URL
        id: route
        shell: bash
        run: |
          {{#literal}}host=$(cf app "${APP_NAME}" | awk '/routes:/ {print $2}' | sed -E 's#^https?://##; s/,.*$//')
          echo "url=https://$host" >> "$GITHUB_OUTPUT"{{/literal}}
    environment:
      name: {{#literal}}${{ inputs.environment || 'Staging' }}{{/literal}}
      url:  {{#literal}}${{ steps.route.outputs.url }}{{/literal}}
