name: Native S3 XGBoost

on:
  workflow_dispatch:
    inputs:
      xgb_version:
        description: 'xgboost version'
        required: false

permissions:
  id-token: write
  contents: read

jobs:
  create-aarch64-runner:
    if: github.repository == 'deepjavalibrary/djl'
    runs-on: [ self-hosted, scheduler ]
    steps:
      - name: Create new Graviton instance
        id: create_aarch64
        run: |
          cd /home/ubuntu/djl_benchmark_script/scripts
          token=$( curl -X POST -H "Authorization: token ${{ secrets.ACTION_RUNNER_PERSONAL_TOKEN }}" \
          https://api.github.com/repos/deepjavalibrary/djl/actions/runners/registration-token \
          --fail \
          | jq '.token' | tr -d '"' )
          ./start_instance.sh action_graviton $token djl
    outputs:
      aarch64_instance_id: ${{ steps.create_aarch64.outputs.action_graviton_instance_id }}

  build-xgboost-jni-aarch64:
    runs-on: [ self-hosted, aarch64 ]
    container: centos:7
    timeout-minutes: 30
    needs: create-aarch64-runner
    steps:
      - uses: actions/checkout@v3
      - name: Install Environment
        run: |
          yum -y update
          yum -y install centos-release-scl-rh epel-release
          yum -y install devtoolset-8 git patch libstdc++-static curl python3-devel
          curl -L -o cmake.tar.gz https://github.com/Kitware/CMake/releases/download/v3.27.0-rc2/cmake-3.27.0-rc2-linux-aarch64.tar.gz
          tar xvfz cmake.tar.gz
          ln -sf $PWD/cmake-3.*/bin/cmake /usr/bin/cmake
          cmake --version
          pip3 install awscli --upgrade
      - name: Set up JDK 17
        uses: actions/setup-java@v3
        with:
          distribution: 'corretto'
          java-version: 17
      - name: Release JNI prep
        run: |
          XGBOOST_VERSION=${{ github.event.inputs.xgb_version }}
          XGBOOST_VERSION=${XGBOOST_VERSION:-$(awk -F '=' '/xgboost/ {gsub(/ ?"/, "", $2); print $2}' gradle/libs.versions.toml)}
          git clone https://github.com/dmlc/xgboost --recursive -b v"$XGBOOST_VERSION"
          export PATH=$PATH:/opt/rh/devtoolset-8/root/usr/bin
          cd xgboost/jvm-packages
          python3 create_jni.py
          cd ../..
      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: arn:aws:iam::425969335547:role/djl-ci-publish-role
          aws-region: us-east-2
      - name: Copy files to S3 with the AWS CLI
        run: |
          XGBOOST_VERSION=${{ github.event.inputs.xgb_version }}
          XGBOOST_VERSION=${XGBOOST_VERSION:-$(awk -F '=' '/xgboost/ {gsub(/ ?"/, "", $2); print $2}' gradle/libs.versions.toml)')}
          aws s3 cp xgboost/lib/libxgboost4j.so s3://djl-ai/publish/xgboost/${XGBOOST_VERSION}/jnilib/linux/aarch64/
          aws cloudfront create-invalidation --distribution-id E371VB8JQ6NRVY --paths "/xgboost/${XGBOOST_VERSION}/jnilib*"

  stop-runners:
    if: ${{ github.repository == 'deepjavalibrary/djl' && always() }}
    runs-on: [ self-hosted, scheduler ]
    needs: [ create-aarch64-runner, build-xgboost-jni-aarch64 ]
    steps:
      - name: Stop all instances
        run: |
          cd /home/ubuntu/djl_benchmark_script/scripts
          instance_id=${{ needs.create-aarch64-runner.outputs.aarch64_instance_id }}
          ./stop_instance.sh $instance_id
