name: ci-update-workflow

on:
  schedule:
  # Run every day at 10AM.
  - cron: '0 10 * * *'
  workflow_dispatch:
    branches:
    - master

permissions:
  repository-projects: write
  pull-requests: write

jobs:
  update-go-versions:
    runs-on: ubuntu-latest
    permissions:
      id-token: write # Enable OIDC
    steps:
    - id: 'auth'
      uses: 'google-github-actions/auth@v1'
      with:
        credentials_json: '${{ secrets.GCP_CREDENTIALS }}'

    - name: 'Set up Cloud SDK'
      uses: 'google-github-actions/setup-gcloud@v1'

    - name: Get available Go versions
      run: |
        # Get all supported Go versions and pass the space-separated versions
        # string to the next step
        versions=$(gcloud functions runtimes list --format="value(NAME)" --project=gae-runtimes-private --region=us-west1 | grep ^go | tr '\n' ' ' | xargs)
        echo "versions=$versions" >> $GITHUB_OUTPUT
      id: get_versions

    - name: Checkout appengine repo
      uses: actions/checkout@v2

    # Sign the commit.
    # https://www.chainguard.dev/unchained/keyless-git-commit-signing-with-gitsign-and-github-actions
    - uses: chainguard-dev/actions/setup-gitsign@main

    - name: Update Go versions
      run: |
        readarray -d ' ' -t versions <<< "${{ steps.get_versions.outputs.versions }}"
        
        versions_str=""
        for version in "${versions[@]}"; do
          major=${version:2:1}
          minor=${version:3:2}
          versions_str+="'$major.$minor.x', "
        done
        # Remove the last comma and space
        versions_str=${versions_str%, *}

        # Only replace the first occurance
        sed -i "0,/^        go-version: \[.*/s//        go-version: \[$versions_str\]/" .github/workflows/ci-v2.yaml
  
    - name: Create Pull Request
      uses: peter-evans/create-pull-request@v4
      with:
        token: ${{ secrets.GITHUB_TOKEN }}
        commit-message: Update go-version matrix
        title: Update go-version matrix
        body: |
          - go-version matrix updates

          Update the go-version matrix in the CI workflows to include the new supported runtimes.
 
          Auto-generated by [create-pull-request][1]

          [1]: https://github.com/peter-evans/create-pull-request
        branch: update-go-version-matrix
        reviewers: jinglundong
