name: TZDB check

on:
  push:
    tags:
      - 'tzdb*'
  schedule:
    - cron: '50 1 * * *'
  workflow_dispatch:

permissions:
  contents: read

jobs:
  tzdbcheck:
    permissions:
      contents: write  # for peter-evans/create-pull-request to create branch
      pull-requests: write  # for peter-evans/create-pull-request to create a PR
    runs-on: ubuntu-latest
    steps:
    - name: Checkout
      uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  #v4.2.2
      with:
        token: ${{ secrets.PERSONAL_GITHUB_TOKEN }}
        fetch-tags: true

    - name: Setup git
      run: |
        git config --global user.name "Stephen Colebourne (CI)"
        git config --global user.email "scolebourne@joda.org"

    - name: Set up JDK
      uses: actions/setup-java@3a4f6e1af504cf6a31855fa899c6aa5355ba6c12  #v4.7.0
      with:
        java-version: 8
        distribution: 'temurin'
        cache: 'maven'

    - name: Maven version
      run: |
        mkdir -p ./.mvn
        echo "-e" >> ./.mvn/maven.config
        echo "-B" >> ./.mvn/maven.config
        echo "-ntp" >> ./.mvn/maven.config
        echo "-DtrimStackTrace=false" >> ./.mvn/maven.config
        echo "--settings" >> ./.mvn/maven.config
        echo "$( pwd )/.github/maven-settings.xml" >> ./.mvn/maven.config
        mvn --version
        mkdir -p target

    #------------------------------------------------------------------------
    - name: Get current version
      run: |
        CURRENT_TZDB=$(mvn help:evaluate -Dexpression=tz.database.version -q -DforceStdout)
        echo "current: $CURRENT_TZDB"
        echo "CURRENT_TZDB=$CURRENT_TZDB" >> $GITHUB_ENV

    - name: Get latest version
      working-directory: target
      run: |
        git clone https://github.com/JodaOrg/global-tz.git tz
        cd tz
        git checkout global-tz
        LATEST_TZDB=$(git describe --abbrev=0 --tags)
        echo "latest: $LATEST_TZDB"
        echo "LATEST_TZDB=$LATEST_TZDB" >> $GITHUB_ENV

    - name: Compare versions
      run: |
        echo "current: $CURRENT_TZDB"
        echo "latest:  $LATEST_TZDB"
        if [ "$CURRENT_TZDB" == "$LATEST_TZDB" ]; then echo "NOOP=true" >> $GITHUB_ENV; fi

    - name: Checkout tzdb release
      if: env.NOOP != 'true'
      working-directory: target/tz
      run: |
        git checkout global-tz
        git reset --hard ${LATEST_TZDB} --
        git status

    - name: Copy files
      if: env.NOOP != 'true'
      run: |
        ls -l target/tz
        \cp target/tz/africa src/main/java/org/joda/time/tz/src
        \cp target/tz/antarctica src/main/java/org/joda/time/tz/src
        \cp target/tz/asia src/main/java/org/joda/time/tz/src
        \cp target/tz/australasia src/main/java/org/joda/time/tz/src
        \cp target/tz/backward src/main/java/org/joda/time/tz/src
        \cp target/tz/etcetera src/main/java/org/joda/time/tz/src
        \cp target/tz/europe src/main/java/org/joda/time/tz/src
        \cp target/tz/northamerica src/main/java/org/joda/time/tz/src
        \cp target/tz/southamerica src/main/java/org/joda/time/tz/src
        ls -l src/main/java/org/joda/time/tz/src

    - name: Update build with new tzdb
      if: env.NOOP != 'true'
      run: |
        mvn versions:set-property -DnewVersion=${LATEST_TZDB} -Dproperty=tz.database.version -DgenerateBackupPoms=false
        mvn install

    - name: Create Pull Request
      if: env.NOOP != 'true'
      id: createpr
      uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e  #v7.0.8
      with:
        token: ${{ secrets.PERSONAL_GITHUB_TOKEN }}
        base: main
        commit-message: 'Update time zone data to ${{ env.LATEST_TZDB }}'
        committer: Stephen Colebourne (CI) <scolebourne@joda.org>
        author: Stephen Colebourne (CI) <scolebourne@joda.org>
        title: 'Update time zone data to ${{ env.LATEST_TZDB }}'
        body: 'Update time zone data to ${{ env.LATEST_TZDB }}'
        assignees: jodastephen
        labels: TZDB
        branch: bot/update-tzdb

    - name: Auto-merge the Pull Request
      if: steps.createpr.outputs.pull-request-number
      run: gh pr merge --squash --auto "${{ steps.createpr.outputs.pull-request-number }}"
      env:
        GH_TOKEN: ${{ secrets.PERSONAL_GITHUB_TOKEN }}

    - name: Delete tzdb tag
      if: env.NOOP != 'true' && startsWith(github.ref, 'refs/tags/tzdb')
      run: |
        git tag --delete "${GITHUB_REF_NAME}" || true
        git push --delete origin "${GITHUB_REF_NAME}" || true
