name: hdf4 dev tarball

# Triggers the workflow on a call from another workflow
on:
  workflow_call:
    inputs:
      use_ignore:
        description: 'Ignore has_changes check'
        type: string
        required: false
        default: check
      use_tag:
        description: 'Release version tag'
        type: string
        required: false
        default: snapshot
      use_environ:
        description: 'Environment to locate files'
        type: string
        required: true
        default: snapshots
    outputs:
      has_changes:
        description: "Whether there were changes the previous day"
        value: ${{ jobs.check_commits.outputs.has_changes }}
      source_base:
        description: "The common base name of the source tarballs"
        value: ${{ jobs.create_tarball.outputs.source_base }}
      file_base:
        description: "The common base name of the source tarballs"
        value: ${{ jobs.create_tarball.outputs.file_base }}
      file_branch:
        description: "The branch used for the source tarballs"
        value: ${{ jobs.check_commits.outputs.branch_ref }}
      file_sha:
        description: "The sha used for the source tarballs"
        value: ${{ jobs.check_commits.outputs.branch_sha }}

permissions:
  contents: read

jobs:
  check_commits:
    name: Check for recent commits
    runs-on: ubuntu-latest
    outputs:
      has_changes: ${{ steps.check-new-commits.outputs.has-new-commits }}
      branch_ref: ${{ steps.get-branch-name.outputs.BRANCH_REF }}
      branch_sha: ${{ steps.get-branch-sha.outputs.BRANCH_SHA }}
    steps:
    - uses: actions/checkout@v4

    - name: Get branch name
      id: get-branch-name
      env:
        GITHUB_REF: ${{ github.ref }}
        GITHUB_REF_NAME: ${{ github.ref_name }}
        GITHUB_HEAD_REF: ${{ github.head_ref }}
      #run: echo "${{ env.GITHUB_REF_NAME }} | grep -P '[0-9]+/merge' &> /dev/null && BRANCH_REF=${{ env.GITHUB_HEAD_REF }} || BRANCH_REF=${{ env.GITHUB_REF_NAME }}" >> $GITHUB_OUTPUT
      run: echo "BRANCH_REF=${{ env.GITHUB_HEAD_REF || env.GITHUB_REF_NAME }}" >> $GITHUB_OUTPUT

    - name: Get branch sha
      id: get-branch-sha
      env:
        GITHUB_SHA: ${{ github.sha }}
        GITHUB_WF_SHA: ${{ github.workflow_sha }}
      run: |
        SHORT_SHA=$(echo "${{ env.GITHUB_WF_SHA }}" | cut -c1-7)
        echo "BRANCH_SHA=$SHORT_SHA" >> $GITHUB_OUTPUT

    - name: Check for changed source
      id: check-new-commits
      uses: adriangl/check-new-commits-action@v1
      with:
        seconds: 86400 # One day in seconds
        branch: '${{ steps.get-branch-name.outputs.branch_ref }}'
      if: ${{ (inputs.use_environ == 'snapshots' && inputs.use_ignore == 'check') }}

    - run: echo "You have ${{ steps.check-new-commits.outputs.new-commits-number }} new commit(s) in ${{ steps.get-branch-name.outputs.BRANCH_REF }} ✅!"
      if: ${{ steps.check-new-commits.outputs.has-new-commits == 'true' }}

    - run: echo "Short commit sha is ${{ steps.get-branch-sha.outputs.BRANCH_SHA }}!"

  create_tarball:
    name: Create a source tarball
    runs-on: ubuntu-latest
    needs: check_commits
    if: ${{ ((inputs.use_environ == 'snapshots') && ((needs.check_commits.outputs.has_changes == 'true') || (inputs.use_ignore == 'ignore'))) || (inputs.use_environ  == 'release') }}
    outputs:
      file_base: ${{ steps.set-file-base.outputs.FILE_BASE }}
      source_base: ${{ steps.version.outputs.SOURCE_TAG }}
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - name: Get Sources
        uses: actions/checkout@v4.1.7
        with:
          path: hdfsrc
          ref: '${{needs.check_commits.outputs.branch_ref }}'

      - name: Install Autotools Dependencies (Linux, serial)
        run: |
             sudo apt update
             sudo apt install automake autoconf libtool libtool-bin gzip dos2unix

      - name: Retrieve version
        id: version
        run: |
          cd "$GITHUB_WORKSPACE/hdfsrc"
          echo "SOURCE_TAG=$(bin/h4vers)" >> $GITHUB_OUTPUT

      - name: Set file base name
        id: set-file-base
        run: |
          if [[ '${{ inputs.use_environ }}' == 'snapshots' ]]
          then
            FILE_NAME_BASE=$(echo "hdf4-${{ needs.check_commits.outputs.branch_ref }}-${{ needs.check_commits.outputs.branch_sha }}")
          else
            if [[ '${{ inputs.use_tag }}' == 'snapshot' ]]
            then
              FILE_NAME_BASE=$(echo "snapshot")
            else
              FILE_NAME_BASE=$(echo "hdf${{ steps.version.outputs.SOURCE_TAG }}")
            fi
          fi
          echo "FILE_BASE=$FILE_NAME_BASE" >> $GITHUB_OUTPUT
        shell: bash

      - name: Create snapshot file base name
        id: create-file-base
        if: ${{ (inputs.use_environ == 'snapshots') }}
        run: |
          cd "$GITHUB_WORKSPACE/hdfsrc"
          bin/release -d $GITHUB_WORKSPACE --branch ${{ needs.check_commits.outputs.branch_ref }} --revision gzip zip
        shell: bash

      - name: Create release file base name
        id: create-rel-base
        if: ${{ (inputs.use_environ == 'release') }}
        run: |
          cd "$GITHUB_WORKSPACE/hdfsrc"
          bin/release -d $GITHUB_WORKSPACE gzip zip 
        shell: bash

      - name: Rename release file base name
        id: ren-basename
        if: ${{ (inputs.use_environ == 'release') }}
        run: |
          mv hdf-${{ steps.version.outputs.SOURCE_TAG }}.tar.gz ${{ inputs.use_tag }}.tar.gz
          mv hdf-${{ steps.version.outputs.SOURCE_TAG }}.zip ${{ inputs.use_tag }}.zip
        shell: bash

      - name: Copy the release file source to a non-versioned file name
        id: cp-to-non-versioned
        if: ${{ (inputs.use_environ == 'release') }}
        run: |
          cp ${{ inputs.use_tag }}.tar.gz hdf.tar.gz
          cp ${{ inputs.use_tag }}.zip hdf.zip
        shell: bash

      - name: List files in the repository
        run: |
              ls -l ${{ github.workspace }}
              ls $GITHUB_WORKSPACE

      # Save files created by release script
      - name: Save tgz-tarball
        uses: actions/upload-artifact@v4
        with:
              name: tgz-tarball
              path: ${{ inputs.use_tag }}.tar.gz
              if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn`

      - name: Save zip-tarball
        uses: actions/upload-artifact@v4
        with:
              name: zip-tarball
              path: ${{ inputs.use_tag }}.zip
              if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn`

      - name: Save tgz-tarball-nover
        if: ${{ (inputs.use_environ == 'release') }}
        uses: actions/upload-artifact@v4
        with:
              name: tgz-tarball-nover
              path: hdf.tar.gz
              if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn`

      - name: Save zip-tarball-nover
        if: ${{ (inputs.use_environ == 'release') }}
        uses: actions/upload-artifact@v4
        with:
              name: zip-tarball-nover
              path: hdf.zip
              if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn`
