name: Quarterly Scheduled Tasks
on:
  schedule:
    # Triggers quarterly at 09:40 UTC on the 2nd of Feb, May, Aug, Nov
    # Use https://crontab.guru to test and adjust schedules
    # Actions can be delayed or dropped during heavy load periods,
    # e.g. top of the hour, first of the month. Offset accordingly.
    - cron: 40 09 2 2,5,8,11 *
  workflow_dispatch:

jobs:
  create_issues:
    name: Create quarterly task issues
    runs-on: ubuntu-latest
    if: ${{ github.repository == 'flutter/flutter' }}
    permissions:
      issues: write
    steps:
      - name: Create localization update issue
        run: |
          gh issue create \
            --title "$TITLE" \
            --assignee "$ASSIGNEES" \
            --label "$LABELS" \
            --body "$BODY"
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          GH_REPO: ${{ github.repository }}
          TITLE: '[Automated Task] Quarterly Localizations Update (flutter_localizations)'
          ASSIGNEES: QuncCccccc
          LABELS: 'automated task,a: internationalization,team-framework'
          BODY: |
            ### Quarterly Localization Update

            **Context**: Ahead of the upcoming stable release cut, localized strings need to be synchronized from the internal console into the framework.

            ### Checklist
            - [ ] Check for any new strings that need to be sent upstream for translation.
            - [ ] Pull latest translations from internal translation console.
            - [ ] Update localizations in `flutter_localizations`, Material (`material_ui`), and Cupertino (`cupertino_ui`).
              - [ ] **Follow-up check**: Note that updates to Material or Cupertino localizations might need to wait for the stable roll. If so, file a new follow-up issue to complete after the stable roll.
            - [ ] Run test suite for localizations.
            - [ ] Open PR to close this issue.

            *This issue was automatically generated by GitHub Actions workflow.*

      - name: Create goldctl update issue
        run: |
          gh issue create \
            --title "$TITLE" \
            --assignee "$ASSIGNEES" \
            --label "$LABELS" \
            --body "$BODY"
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          GH_REPO: ${{ github.repository }}
          TITLE: '[Automated Task] Bump goldctl version in .ci.yaml'
          ASSIGNEES: Piinks
          LABELS: 'automated task,team-ecosystem,infra: flutter gold'
          BODY: |
            ### Quarterly goldctl Version Update

            **Context**: Ahead of the upcoming stable release cut, the `goldctl` binary version used for golden file testing needs to be updated to the latest revision in both `flutter/flutter` and `flutter/packages`.

            ### Checklist
            - [ ] Check for the latest `goldctl` git revision (e.g. from [CIPD](https://chrome-infra-packages.appspot.com/p/skia/tools/goldctl) or the [Skia Gold repository](https://skia.googlesource.com/buildbot/+/refs/heads/main/gold-client)).
            - [ ] Update `goldctl` in `flutter/flutter`:
              - [ ] Update `git_revision` for `goldctl` instances in `.ci.yaml`.
              - [ ] Validate `.ci.yaml` changes and ensure tests pass.
              - [ ] Open PR in `flutter/flutter` to close this issue.
            - [ ] Update `goldctl` in `flutter/packages`:
              - [ ] Update `goldctl` version in `.ci.yaml`.
              - [ ] Run golden file tests and verify CI checks pass.
              - [ ] Open PR in `flutter/packages`.

            *This issue was automatically generated by GitHub Actions workflow.*

      - name: Create Dart SDK constraint bump issue
        run: |
          gh issue create \
            --title "$TITLE" \
            --assignee "$ASSIGNEES" \
            --label "$LABELS" \
            --body "$BODY"
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          GH_REPO: ${{ github.repository }}
          TITLE: '[Automated Task] Quarterly Dart SDK constraint bump'
          ASSIGNEES: justinmc
          LABELS: 'automated task,team-framework'
          BODY: |
            ### Quarterly Dart SDK Constraint Bump

            **Context**: Ahead of the upcoming stable release, the minimum Dart SDK version constraint across `flutter/flutter` should be bumped to align with the current stable release. If and when bumping Dart in the repo requires a large scale change (LSC)—for example, to re-format the repo—the release team should be included in the process. The LSC will need to follow branch alignment so as to not disrupt the release process.

            See [Bumping the Dart SDK version constraint](https://github.com/flutter/flutter/blob/main/docs/infra/Bumping-the-Dart-SDK-version.md) for full instructions and policies.

            ### Checklist
            - [ ] Verify the target Dart SDK has rolled into the repository (check Engine stamp / cache).
            - [ ] Run the bump script across `flutter/flutter`:
              ```bash
              dart dev/tools/bin/bump_version_constraints.dart <OLD_SDK_CONSTRAINT> <NEW_SDK_CONSTRAINT>
              ```
              *(Alternatively, use the `bump-dart` agent skill).*
            - [ ] Update checksums and lockfiles:
              ```bash
              flutter update-packages --force-upgrade --update-hashes
              ```
            - [ ] Run static analysis and tests:
              ```bash
              dart --enable-asserts dev/bots/analyze.dart
              ```
            - [ ] **Check for Large Scale Changes (LSC)**: If the bump requires a large scale change (e.g., to re-format the repo), include the release team in the process and ensure the LSC follows branch alignment so as to not disrupt the release process.
            - [ ] Open PR in `flutter/flutter` to close this issue.

            *This issue was automatically generated by GitHub Actions workflow.*
