Skip to content

Commit 8a89f0d

Browse files
committed
try to fix ci 100500
1 parent 869cec0 commit 8a89f0d

File tree

1 file changed

+63
-24
lines changed

1 file changed

+63
-24
lines changed

.github/workflows/reusable-ci.yml

Lines changed: 63 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ on:
77
type: boolean
88
default: true
99

10+
# даём боту право писать в репо; без этого пуш/PR не взлетит
11+
permissions:
12+
contents: write
13+
pull-requests: write
14+
1015
jobs:
1116
ci:
1217
runs-on: ubuntu-latest
@@ -18,7 +23,7 @@ jobs:
1823
- uses: actions/checkout@v4
1924
with:
2025
fetch-depth: 0
21-
persist-credentials: true
26+
persist-credentials: true # оставляем токен в origin, чтобы git push работал
2227

2328
- name: Read MSRV from Cargo.toml
2429
id: msrv
@@ -46,7 +51,7 @@ jobs:
4651
- name: Install nightly rustfmt
4752
uses: dtolnay/rust-toolchain@v1
4853
with:
49-
toolchain: nightly-2025-08-01
54+
toolchain: nightly
5055
components: rustfmt
5156

5257
- name: Cache cargo
@@ -101,8 +106,9 @@ jobs:
101106
echo "README is up to date (PR)."
102107
fi
103108
104-
- name: README autocommit on main
109+
- name: README autocommit on main (push or PR)
105110
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
111+
id: readme_update
106112
shell: bash
107113
env:
108114
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -116,37 +122,60 @@ jobs:
116122
fi
117123
if [ "$need_update" -eq 0 ]; then
118124
echo "README is up to date (main)."
125+
echo "updated=false" >> "$GITHUB_OUTPUT"
119126
exit 0
120127
fi
121-
echo "Updating README on main and pushing..."
128+
129+
echo "Updating README working tree..."
130+
cp -f "$README_CANDIDATE" README.md
131+
git add README.md
132+
122133
git config user.name "github-actions[bot]"
123134
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
124135
git config --global --add safe.directory "$GITHUB_WORKSPACE"
125-
cp -f "$README_CANDIDATE" README.md
126-
git add README.md
127-
git commit -m "chore(readme): auto-refresh [skip ci]"
128-
git pull --rebase --autostash origin main || true
129-
git push origin HEAD:main || {
130-
git pull --rebase --autostash origin main
131-
git push origin HEAD:main
132-
}
133-
git fetch origin main
134-
git reset --hard origin/main
135-
git clean -fdx
136136
137-
- name: Ensure tree is clean before package
138-
shell: bash
139-
run: |
140-
set -euo pipefail
141-
if ! git diff --quiet; then
142-
echo "Working tree is dirty:"
143-
git status --porcelain
144-
exit 1
137+
git commit -m "chore(readme): auto-refresh [skip ci]" || true
138+
139+
set +e
140+
git pull --rebase --autostash origin main
141+
git push origin HEAD:main
142+
rc=$?
143+
set -e
144+
145+
if [ $rc -eq 0 ]; then
146+
echo "Push to main succeeded."
147+
echo "updated=true" >> "$GITHUB_OUTPUT"
148+
# вычистим дерево, чтобы дальше всё было чисто
149+
git fetch origin main
150+
git reset --hard origin/main
151+
git clean -fdx
152+
exit 0
145153
fi
154+
155+
echo "Push to main denied (likely branch protection). Preparing PR..."
156+
echo "updated=true" >> "$GITHUB_OUTPUT"
157+
# создаём ветку для PR
158+
BR="ci/readme-auto-refresh"
159+
git switch -c "$BR" || git checkout -b "$BR"
160+
# коммит уже есть, просто запушим ветку
161+
git push -u origin "$BR"
162+
163+
- name: Create pull request for README (fallback)
164+
if: steps.readme_update.outputs.updated == 'true' && github.event_name == 'push' && github.ref == 'refs/heads/main'
165+
uses: peter-evans/create-pull-request@v6
166+
with:
167+
token: ${{ secrets.GITHUB_TOKEN }}
168+
branch: ci/readme-auto-refresh
169+
title: "chore(readme): auto-refresh"
170+
body: |
171+
Автоматически сгенерированный апдейт README. Прямой пуш в `main` запрещён политикой, поэтому открыт PR.
172+
commit-message: "chore(readme): auto-refresh [skip ci]"
173+
labels: ci, chore
174+
delete-branch: true
146175
# ---------- end README handling ----------
147176

148177
- name: Check formatting (nightly rustfmt)
149-
run: cargo +nightly-2025-08-01 fmt --all -- --check
178+
run: cargo +nightly fmt --all -- --check
150179

151180
- name: Clippy (MSRV)
152181
shell: bash
@@ -168,6 +197,16 @@ jobs:
168197
cargo +${{ steps.msrv.outputs.msrv }} test --workspace --no-fail-fast
169198
fi
170199
200+
- name: Ensure tree is clean before package
201+
shell: bash
202+
run: |
203+
set -euo pipefail
204+
if ! git diff --quiet; then
205+
echo "Working tree is dirty:"
206+
git status --porcelain
207+
exit 1
208+
fi
209+
171210
- name: Package (dry-run)
172211
run: cargo +${{ steps.msrv.outputs.msrv }} package --locked
173212

0 commit comments

Comments
 (0)