# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

name: Is it time to update Go?

on:
  # run manually
  workflow_dispatch:
  schedule:
    # 14:00 UTC every day
    - cron: '0 14 * * *'

jobs:
  pr-to-update-go:
    runs-on: ubuntu-latest
    env:
      GIT_AUTHOR_NAME: asf-ci
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      PR_GITHUB_TOKEN: ${{ secrets.ASFCI_TOKEN }}
      GO_VERSION_FILE: GO_VERSION
      ENV_FILE: .env
    steps:
      - name: Checkout repo
        uses: actions/checkout@master
        if: ${{ (github.repository_owner == 'apache' && github.ref == 'refs/heads/master' ) || github.event_name != 'schedule' }}
        id: checkout
      - name: Install Python 3.10
        uses: actions/setup-python@v2
        if: ${{ steps.checkout.outcome == 'success' }}
        with: { python-version: '3.10' }
      - name: Install dependencies
        if: ${{ steps.checkout.outcome == 'success' }}
        run: pip install .github/actions/pr-to-update-go
      - name: Update Go version
        if: ${{ steps.checkout.outcome == 'success' }}
        run: python3 -m pr_to_update_go --update-version-only
      - name: Check Go version
        run: echo "::set-output name=value::$(cat GO_VERSION)"
        id: go-version
      - name: Install Go
        uses: actions/setup-go@v2
        with:
          go-version: ${{ steps.go-version.outputs.value }}
      - name: PR to Update Go
        if: ${{ steps.checkout.outcome == 'success' }}
        run: python3 -m pr_to_update_go
