mirror of
https://github.com/replicatedhq/troubleshoot.git
synced 2026-02-14 18:29:53 +00:00
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
98 lines
3.5 KiB
YAML
98 lines
3.5 KiB
YAML
name: Automated PRs Manager
|
|
|
|
on:
|
|
schedule:
|
|
- cron: "0 */6 * * *" # every 6 hours
|
|
workflow_dispatch: {}
|
|
|
|
jobs:
|
|
list-prs:
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
prs: ${{ steps.list-prs.outputs.prs }}
|
|
env:
|
|
GH_TOKEN: ${{ secrets.REPLICATED_GH_PAT }}
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v5
|
|
|
|
- name: List PRs
|
|
id: list-prs
|
|
run: |
|
|
set -euo pipefail
|
|
|
|
# list prs that are less than 24h old and exclude prs from forks
|
|
|
|
dependabot_prs=$(
|
|
gh pr list \
|
|
--author 'dependabot[bot]' \
|
|
--json url,createdAt,headRefName,headRepository,headRepositoryOwner \
|
|
-q '.[] | select((.createdAt | fromdateiso8601 > now - 24*60*60) and .headRepositoryOwner.login == "replicatedhq" and .headRepository.name == "troubleshoot")'
|
|
)
|
|
|
|
prs=$(echo "$dependabot_prs" | jq -sc '. | unique')
|
|
echo "prs=$prs" >> "$GITHUB_OUTPUT"
|
|
|
|
process-prs:
|
|
needs: list-prs
|
|
runs-on: ubuntu-latest
|
|
if: needs.list-prs.outputs.prs != '[]'
|
|
strategy:
|
|
matrix:
|
|
pr: ${{ fromJson(needs.list-prs.outputs.prs) }}
|
|
fail-fast: false
|
|
max-parallel: 1
|
|
env:
|
|
GH_TOKEN: ${{ secrets.REPLICATED_GH_PAT }}
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v5
|
|
with:
|
|
ref: ${{ matrix.pr.headRefName }}
|
|
|
|
- name: Process PR
|
|
run: |
|
|
set -euo pipefail
|
|
|
|
echo "Ensuring required labels..."
|
|
gh pr edit "${{ matrix.pr.url }}" --add-label "type::security"
|
|
|
|
echo "Checking status of tests..."
|
|
run_id=$(gh run list --branch "${{ matrix.pr.headRefName }}" --workflow build-test-deploy --limit 1 --json databaseId -q '.[0].databaseId')
|
|
|
|
# If there are still pending jobs, skip.
|
|
|
|
num_of_pending_jobs=$(gh run view "$run_id" --json jobs -q '.jobs[] | select(.conclusion == "") | .name' | wc -l)
|
|
if [ "$num_of_pending_jobs" -gt 0 ]; then
|
|
echo "There are still pending jobs. Skipping."
|
|
exit 0
|
|
fi
|
|
|
|
# If all checks passed, approve and merge.
|
|
if gh run view "$run_id" --json jobs -q '.jobs[] | select(.name == "validate-success") | .conclusion' | grep -q "success"; then
|
|
if gh pr checks "${{ matrix.pr.url }}"; then
|
|
echo "All tests passed. Approving and merging."
|
|
echo -e "LGTM :thumbsup: \n\nThis PR was automatically approved and merged by the [automated-prs-manager](https://github.com/replicatedhq/troubleshoot/blob/main/.github/workflows/automated-prs-manager.yaml) GitHub action" > body.txt
|
|
gh pr review --approve "${{ matrix.pr.url }}" --body-file body.txt
|
|
sleep 10
|
|
gh pr merge --auto --squash "${{ matrix.pr.url }}"
|
|
exit 0
|
|
else
|
|
echo "Some checks did not pass. Skipping."
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
# If more than half of the jobs are successful, re-run the failed jobs.
|
|
|
|
num_of_jobs=$(gh run view "$run_id" --json jobs -q '.jobs[].name ' | wc -l)
|
|
num_of_successful_jobs=$(gh run view "$run_id" --json jobs -q '.jobs[] | select(.conclusion == "success") | .name' | wc -l)
|
|
|
|
if [ "$num_of_successful_jobs" -gt $((num_of_jobs / 2)) ]; then
|
|
echo "More than half of the jobs are successful. Re-running failed jobs."
|
|
gh run rerun "$run_id" --failed
|
|
exit 0
|
|
fi
|
|
|
|
echo "Less than half of the jobs are successful. Skipping."
|