name: Check Update

on:
  workflow_dispatch:
  schedule:
    - cron: '30 * * * *'

permissions:
  contents: write

jobs:
  dev-check-update:
    if: ${{ github.repository_owner == 'HMCL-dev' }}
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Fetch tags
        run: git fetch --all --tags
      - name: Install tools
        run: sudo apt-get install -y jq
      - name: Fetch last version
        run: |
          wget -O ci.json https://ci.huangyuhui.net/job/HMCL/lastSuccessfulBuild/api/json
          
          export HMCL_EXE_FILE_NAME=`cat ci.json | jq -M -r '.artifacts[] | select(.fileName | endswith(".exe")) | .fileName'`
          if [ -z `echo $HMCL_EXE_FILE_NAME | grep -E "^HMCL-[0-9]+\.[0-9]+\.[0-9]+(\.[0-9]+)?\.exe\$"` ]; then exit 1; fi
          
          export HMCL_VERSION=`echo "${HMCL_EXE_FILE_NAME%.exe}" | tail -c +6`
          export HMCL_COMMIT_SHA=`cat ci.json | jq -M -r '.actions[] | select(._class == "hudson.plugins.git.util.BuildData") | .lastBuiltRevision.SHA1'`

          if [ "${#HMCL_COMMIT_SHA}" != 40 ]; then exit 1; fi

          echo "HMCL_VERSION=$HMCL_VERSION" >> $GITHUB_ENV
          echo "HMCL_COMMIT_SHA=$HMCL_COMMIT_SHA" >> $GITHUB_ENV
          echo "HMCL_TAG_NAME=v$HMCL_VERSION" >> $GITHUB_ENV
      - name: Check for existing tags
        run: if [ -z "$(git tag -l "$HMCL_TAG_NAME")" ]; then echo "continue=true" >> $GITHUB_ENV; fi
      - name: Download artifacts
        if: ${{ env.continue == 'true' }}
        run: |
          wget "$DOWNLOAD_BASE_URL/HMCL-$HMCL_VERSION.exe"
          wget "$DOWNLOAD_BASE_URL/HMCL-$HMCL_VERSION.exe.sha256"
          wget "$DOWNLOAD_BASE_URL/HMCL-$HMCL_VERSION.jar"
          wget "$DOWNLOAD_BASE_URL/HMCL-$HMCL_VERSION.jar.sha256"
          wget "$DOWNLOAD_BASE_URL/HMCL-$HMCL_VERSION.sh"
          wget "$DOWNLOAD_BASE_URL/HMCL-$HMCL_VERSION.sh.sha256"
        env:
          DOWNLOAD_BASE_URL: https://ci.huangyuhui.net/job/HMCL/lastSuccessfulBuild/artifact/HMCL/build/libs
      - name: Generate release note
        if: ${{ env.continue == 'true' }}
        run: |
          echo "The full changelogs can be found on the website: https://docs.hmcl.net/changelog/dev.html" >> RELEASE_NOTE
          echo "" >> RELEASE_NOTE
          echo "*Notice: changelogs are written in Chinese.*" >> RELEASE_NOTE
          echo "" >> RELEASE_NOTE
          echo "| File Name | SHA-256 Checksum |"  >> RELEASE_NOTE
          echo "| ---  | --- |" >> RELEASE_NOTE
          echo "| [HMCL-$HMCL_VERSION.exe]($GH_DOWNLOAD_BASE_URL/v$HMCL_VERSION/HMCL-$HMCL_VERSION.exe) | \`$(cat HMCL-$HMCL_VERSION.exe.sha256)\` |" >> RELEASE_NOTE
          echo "| [HMCL-$HMCL_VERSION.jar]($GH_DOWNLOAD_BASE_URL/v$HMCL_VERSION/HMCL-$HMCL_VERSION.jar) | \`$(cat HMCL-$HMCL_VERSION.jar.sha256)\` |" >> RELEASE_NOTE
          echo "| [HMCL-$HMCL_VERSION.sh]($GH_DOWNLOAD_BASE_URL/v$HMCL_VERSION/HMCL-$HMCL_VERSION.sh)   | \`$(cat HMCL-$HMCL_VERSION.sh.sha256)\` |"  >> RELEASE_NOTE
        env:
          GH_DOWNLOAD_BASE_URL: https://github.com/HMCL-dev/HMCL/releases/download
      - name: Create release
        if: ${{ env.continue == 'true' }}
        uses: softprops/action-gh-release@v2
        with:
          body_path: RELEASE_NOTE
          files: |
            HMCL-${{ env.HMCL_VERSION }}.exe
            HMCL-${{ env.HMCL_VERSION }}.jar
            HMCL-${{ env.HMCL_VERSION }}.sh
          target_commitish: ${{ env.HMCL_COMMIT_SHA }}
          name: ${{ env.HMCL_TAG_NAME }}
          tag_name: ${{ env.HMCL_TAG_NAME }}
          prerelease: true
  stable-check-update:
    if: ${{ github.repository_owner == 'HMCL-dev' }}
    needs: dev-check-update
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Fetch tags
        run: git fetch --all --tags
      - name: Install tools
        run: sudo apt-get install -y jq
      - name: Fetch last version
        run: |
          wget -O ci.json https://ci.huangyuhui.net/job/HMCL-stable/lastSuccessfulBuild/api/json
          
          export HMCL_EXE_FILE_NAME=`cat ci.json | jq -M -r '.artifacts[] | select(.fileName | endswith(".exe")) | .fileName'`
          if [ -z `echo $HMCL_EXE_FILE_NAME | grep -E "^HMCL-[0-9]+\.[0-9]+\.[0-9]+(\.[0-9]+)?\.exe\$"` ]; then exit 1; fi
          
          export HMCL_VERSION=`echo "${HMCL_EXE_FILE_NAME%.exe}" | tail -c +6`
          export HMCL_COMMIT_SHA=`cat ci.json | jq -M -r '.actions[] | select(._class == "hudson.plugins.git.util.BuildData") | .lastBuiltRevision.SHA1'`

          if [ "${#HMCL_COMMIT_SHA}" != 40 ]; then exit 1; fi

          echo "HMCL_VERSION=$HMCL_VERSION" >> $GITHUB_ENV
          echo "HMCL_COMMIT_SHA=$HMCL_COMMIT_SHA" >> $GITHUB_ENV
          echo "HMCL_TAG_NAME=release-$HMCL_VERSION" >> $GITHUB_ENV
      - name: Check for existing tags
        run: if ! git tag -l | grep -q "$HMCL_TAG_NAME"; then echo "continue=true" >> $GITHUB_ENV; fi 
      - name: Download artifacts
        if: ${{ env.continue == 'true' }}
        run: |
          wget "$DOWNLOAD_BASE_URL/HMCL-$HMCL_VERSION.exe"
          wget "$DOWNLOAD_BASE_URL/HMCL-$HMCL_VERSION.exe.sha256"
          wget "$DOWNLOAD_BASE_URL/HMCL-$HMCL_VERSION.jar"
          wget "$DOWNLOAD_BASE_URL/HMCL-$HMCL_VERSION.jar.sha256"
          wget "$DOWNLOAD_BASE_URL/HMCL-$HMCL_VERSION.sh"
          wget "$DOWNLOAD_BASE_URL/HMCL-$HMCL_VERSION.sh.sha256"
        env:
          DOWNLOAD_BASE_URL: https://ci.huangyuhui.net/job/HMCL-stable/lastSuccessfulBuild/artifact/HMCL/build/libs
      - name: Generate release note
        if: ${{ env.continue == 'true' }}
        run: |
          echo "**This version is a stable version.**" >> RELEASE_NOTE
          echo "" >> RELEASE_NOTE
          echo "The full changelogs can be found on the website: https://docs.hmcl.net/changelog/stable.html" >> RELEASE_NOTE
          echo "" >> RELEASE_NOTE
          echo "*Notice: changelogs are written in Chinese.*" >> RELEASE_NOTE
          echo "" >> RELEASE_NOTE
          echo "| File Name | SHA-256 Checksum |"  >> RELEASE_NOTE
          echo "| ---  | --- |" >> RELEASE_NOTE
          echo "| [HMCL-$HMCL_VERSION.exe]($GH_DOWNLOAD_BASE_URL/release-$HMCL_VERSION/HMCL-$HMCL_VERSION.exe) | \`$(cat HMCL-$HMCL_VERSION.exe.sha256)\` |" >> RELEASE_NOTE
          echo "| [HMCL-$HMCL_VERSION.jar]($GH_DOWNLOAD_BASE_URL/release-$HMCL_VERSION/HMCL-$HMCL_VERSION.jar) | \`$(cat HMCL-$HMCL_VERSION.jar.sha256)\` |" >> RELEASE_NOTE
          echo "| [HMCL-$HMCL_VERSION.sh]($GH_DOWNLOAD_BASE_URL/release-$HMCL_VERSION/HMCL-$HMCL_VERSION.sh)   | \`$(cat HMCL-$HMCL_VERSION.sh.sha256)\` |"  >> RELEASE_NOTE
        env:
          GH_DOWNLOAD_BASE_URL: https://github.com/HMCL-dev/HMCL/releases/download
      - name: Create release
        if: ${{ env.continue == 'true' }}
        uses: softprops/action-gh-release@v2
        with:
          body_path: RELEASE_NOTE
          files: |
            HMCL-${{ env.HMCL_VERSION }}.exe
            HMCL-${{ env.HMCL_VERSION }}.jar
            HMCL-${{ env.HMCL_VERSION }}.sh
          target_commitish: ${{ env.HMCL_COMMIT_SHA }}
          name: ${{ env.HMCL_TAG_NAME }}
          tag_name: ${{ env.HMCL_TAG_NAME }}
