name: cd
run-name: "cd: ${{ github.event.head_commit.message }}"

on:
  push:
    branches: main
    paths:
        - projects/**/*
        - .github/workflows/cd.yml

jobs:
  ingest:
    runs-on: ubuntu-latest
    outputs:
      projects: ${{ steps.diff.outputs.diff }}
    steps:
      - uses: actions/checkout@v4
      - uses: technote-space/get-diff-action@v6
        id: get-diff
        with:
          PATTERNS: projects/**/package.yml
      - id: diff
        run: |
          for x in ${{ steps.get-diff.outputs.diff }}; do
            y=$(echo $x | sed 's#projects/\(.*\)/[^/]*#\1#')
            RESULT="$RESULT ${y//$'\n'/}"
          done
          echo "diff=$RESULT" >> $GITHUB_OUTPUT

  pkg:
    strategy:
      fail-fast: false
    needs: ingest
    permissions:
      issues: write
    uses: ./.github/workflows/new-version.yml
    with:
      projects: ${{ needs.ingest.outputs.projects }}
    secrets: inherit

  notify:
    needs: [pkg, ingest]
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
      with:
        fetch-depth: 1

    - name: check if new pkgs
      id: check-new-files
      run: |
        NEW_FILES=$(git diff --name-status HEAD $(git merge-base HEAD origin/main) | grep '^A\s*projects/.+?/package\.yml$' | wc -l)

        if [ "$NEW_FILES" -gt 0 ]; then
          echo "New files were added in this push."
          echo "::set-output name=new_files::true"
        fi

    - name: make payload
      run: |
        RV=""
        for x in ${{ needs.ingest.outputs.projects }}; do
          RV="${RV:+$RV,} {\"title\": \"$x\", \"url\": \"https://pkgx.dev/pkgs/$x/\"}"
        done
        echo "{\"embeds\": [$RV], \"content\": \"new pkgs\"}" >> payload.json

    - uses: tsickert/discord-webhook@v5.4.0
      if: steps.check-new-files.outputs.new_files == 'true'
      with:
        webhook-url: ${{ secrets.DISCORD_WEBHOOK }}
        raw-data: ./payload.json
