| # Copyright 2024 The Flutter Authors. All rights reserved. | |
| # Use of this source code is governed by a BSD-style license that can be | |
| # found in the LICENSE file. | |
| name: Remove outdated CICD Label | |
| on: | |
| pull_request_target: | |
| types: [synchronize] | |
| permissions: | |
| pull-requests: write | |
| issues: write | |
| jobs: | |
| remove_cicd_label: | |
| name: remove_cicd_label | |
| if: contains(github.event.pull_request.labels.*.name, 'CICD') | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Check if label was added before push | |
| id: check_timing | |
| env: | |
| PUSH_TIME: ${{ github.event.pull_request.updated_at }} | |
| REPO_OWNER: ${{ github.repository_owner }} | |
| REPO_NAME: ${{ github.event.repository.name }} | |
| PR_NUMBER: ${{ github.event.pull_request.number }} | |
| GITHUB_TOKEN: ${{ github.token }} | |
| run: | | |
| echo "Push time: $PUSH_TIME" | |
| # Get latest CICD labeling event time from the last 100 events | |
| LABEL_TIME=$(gh api graphql -f query=' | |
| query($owner: String!, $repo: String!, $pr: Int!) { | |
| repository(owner: $owner, name: $repo) { | |
| pullRequest(number: $pr) { | |
| timelineItems(last: 100, itemTypes: [LABELED_EVENT]) { | |
| nodes { | |
| ... on LabeledEvent { | |
| label { name } | |
| createdAt | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }' -f owner="$REPO_OWNER" -f repo="$REPO_NAME" -F pr="$PR_NUMBER" \ | |
| --jq '.data.repository.pullRequest.timelineItems.nodes | map(select(.label.name == "CICD")) | last | .createdAt') | |
| echo "Label time: $LABEL_TIME" | |
| if [[ -z "$LABEL_TIME" ]]; then | |
| # Label exists on PR (checked by job 'if') but not in last 100 events -> must be very old | |
| echo "should_remove=true" >> "$GITHUB_OUTPUT" | |
| echo "Result: Label found on PR but not in recent timeline events. Assuming it is old." | |
| elif [[ "$LABEL_TIME" < "$PUSH_TIME" ]]; then | |
| echo "should_remove=true" >> "$GITHUB_OUTPUT" | |
| echo "Result: Label added at $LABEL_TIME is older than push at $PUSH_TIME. Removing." | |
| else | |
| echo "should_remove=false" >> "$GITHUB_OUTPUT" | |
| echo "Result: Label added at $LABEL_TIME is newer than or same as push at $PUSH_TIME. Skipping removal." | |
| fi | |
| - name: Remove outdated CICD label | |
| if: steps.check_timing.outputs.should_remove == 'true' | |
| run: | | |
| gh pr edit ${{ github.event.pull_request.number }} -R ${{ github.repository }} --remove-label "CICD" | |
| env: | |
| GITHUB_TOKEN: ${{ github.token }} |