rbw #2264
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: pkgcheck | |
on: | |
workflow_dispatch: | |
pull_request_target: | |
branches: | |
- master | |
paths-ignore: | |
- '.github/**' | |
- 'metadata/**' | |
types: [opened, reopened, synchronize] | |
permissions: | |
contents: read | |
pull-requests: write | |
jobs: | |
check-changed-ebuilds: | |
name: check changed ebuilds | |
runs-on: ubuntu-latest | |
permissions: | |
contents: read | |
pull-requests: write | |
container: | |
image: ghcr.io/liangyongxiang/gentoo-testing:master | |
steps: | |
- name: Checkout the head ref of the pull request | |
uses: actions/checkout@v2 | |
with: | |
fetch-depth: 0 | |
repository: ${{ github.event.pull_request.head.repo.full_name }} | |
ref: ${{ github.event.pull_request.head.sha }} | |
path: gentoo-zh | |
- name: Get the base commit | |
id: basecommit | |
shell: bash | |
env: | |
COMMITS_URL: ${{ github.event.pull_request.commits_url }} | |
COMMITS_JSON: /tmp/commits.json | |
run: | | |
set -xe | |
curl -H "Accept: application/vnd.github.v3+json" \ | |
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ | |
-o ${COMMITS_JSON} ${COMMITS_URL} | |
[[ $(file --mime-type ${COMMITS_JSON}) =~ application/json$ ]] | |
<${COMMITS_JSON} jq '.message' && false || true | |
commits=( $(<${COMMITS_JSON} jq '.[].sha' | cut -d'"' -f2) ) | |
pcommits=( $(<${COMMITS_JSON} jq '.[].parents[].sha' | cut -d'"' -f2) ) | |
sha=${pcommits[0]} | |
for pcommit in ${pcommits[@]}; do | |
pcommit_not_matched=0 | |
for commit in ${commits[@]}; do | |
if [[ ${pcommit} == ${commit} ]]; then | |
pcommit_not_matched=1 | |
fi | |
done | |
if [[ ${pcommit_not_matched} == 0 ]]; then | |
sha=${pcommit} | |
break | |
fi | |
done | |
echo "sha=$sha" >> $GITHUB_OUTPUT | |
- name: Check | |
id: check | |
shell: bash | |
env: | |
THEBASEREF: ${{ steps.basecommit.outputs.sha }} | |
run: | | |
set -e | |
mv ${GITHUB_WORKSPACE}/gentoo-zh /var/db/repos/ | |
mkdir -p /etc/portage/repos.conf | |
echo "[gentoo] | |
location = /var/db/repos/gentoo | |
" >/etc/portage/repos.conf/gentoo.conf | |
echo "[gentoo-zh] | |
location = /var/db/repos/gentoo-zh | |
" >/etc/portage/repos.conf/gentoo-zh.conf | |
cd /var/db/repos/gentoo-zh | |
echo "git diff --raw ${THEBASEREF}" | |
git diff --raw ${THEBASEREF} | |
diff_files=$(git diff --raw --name-only ${THEBASEREF}) | |
cates=$(cat /var/db/repos/gentoo{,-zh}/profiles/categories | sort -du) | |
declare -a check_pkgs | |
for file in ${diff_files}; do | |
c=${file%%/*} | |
for cate in ${cates}; do | |
if [[ ${c} == ${cate} ]]; then | |
n=${file#*/} | |
n=${n%%/*} | |
check_pkgs+=( ${c}/${n} ) | |
fi | |
done | |
done | |
check_pkgs=( $(echo "${check_pkgs[@]}" | tr ' ' '\n' | sort -du | tr '\n' ' ') ) | |
ret=0 | |
echo "pkgs: ${check_pkgs[@]}" | |
set -- pkgcheck scan --exit error "${check_pkgs[@]}" | |
echo ">>> " "${@}" | |
"${@}" >/var/tmp/report.txt || ret=$? | |
cat /var/tmp/report.txt || true | |
set -- | |
echo "ret=$ret" >> $GITHUB_OUTPUT | |
[[ ${ret} == 0 ]] | |
- name: Format report | |
if: ${{ always() }} | |
id: report | |
shell: bash | |
env: | |
ret: ${{ steps.check.outputs.ret }} | |
run: | | |
set -e | |
v_pkgcheck=$(pkgcheck --version) || true | |
commit_gentoo=$(cd /var/db/repos/gentoo && git rev-list -n1 HEAD) || true | |
r_len=$(wc -c /var/tmp/report.txt | awk -F'[[:space:]]' '{printf $1}') | |
r_header='`pkgcheck` checks' | |
if [[ ${r_len} == 0 ]]; then | |
r_title=":heavy_check_mark: ${r_header} passed" | |
else | |
r_explain="[:mag: QA Keywords Explanation](https://pkgcore.github.io/pkgcheck/man/pkgcheck.html#keywords)" | |
if [[ ${ret} == 0 ]]; then | |
r_title=":white_circle: ${r_header} passed but with something can be improved!" | |
else | |
r_title=":x: ${r_header} failed" | |
fi | |
fi | |
cat <<EOF >/var/tmp/report.md | |
## ${r_title} | |
* ${v_pkgcheck} | |
* the corresponding _**::gentoo**_ commit: https://github.com/gentoo-mirror/gentoo/commit/${commit_gentoo} | |
EOF | |
if [[ -n ${r_explain} ]]; then | |
echo "<details open><summary><b>QA Results:</b></summary> | |
" >>/var/tmp/report.md | |
if [[ ${r_len} -le 65000 ]]; then | |
echo '```' >>/var/tmp/report.md | |
cat /var/tmp/report.txt >>/var/tmp/report.md | |
echo '```' >>/var/tmp/report.md | |
else | |
cd /var/db/repos/gentoo-zh || true | |
commit_id=$(git rev-list -n1 HEAD | cut -b1-7) | |
cat <<EOF >>/var/tmp/report.md | |
* _the report is too long, can be downloaded from **Artifacts** list of the current run: | |
https://github.com/${{github.repository}}/actions/runs/${{github.run_id}} | |
filename: **pkgcheck-report-${commit_id}**_ | |
EOF | |
echo "commit=$commit_id" >> $GITHUB_OUTPUT | |
fi | |
cat <<EOF >>/var/tmp/report.md | |
</details> | |
${r_explain} | |
EOF | |
fi | |
echo "has=true" >> $GITHUB_OUTPUT | |
- name: Hide previous results | |
if: ${{ always() }} | |
shell: bash | |
env: | |
COMMENTS_URL: ${{ github.event.pull_request.comments_url }} | |
COMMENTS_JSON: /tmp/comments.json | |
run: | | |
curl -H "Accept: application/vnd.github.v3+json" \ | |
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ | |
-o ${COMMENTS_JSON} ${COMMENTS_URL} | |
node_ids=( $(<${COMMENTS_JSON} jq '.[] | select(.body|test("^##\\s*[a-zA-Z_:]+\\s*`pkgcheck`\\s*checks")) | select(.user.id == 41898282) | .node_id' | cut -d'"' -f2) ) | |
echo "${node_ids[@]}" | |
json="{ \"query\": \"mutation { | |
minimizeComment(input: { | |
subjectId: \\\"NODEID\\\", | |
classifier: OUTDATED | |
}) { | |
clientMutationId, | |
minimizedComment { | |
isMinimized, | |
minimizedReason, | |
viewerCanMinimize | |
} | |
} | |
}\" | |
}" | |
json=$(tr -d '\n' <<<${json}) | |
for node_id in ${node_ids[@]}; do | |
curl -X POST \ | |
-H "Content-Type: application/json" \ | |
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ | |
-d "${json/NODEID/${node_id}}" \ | |
https://api.github.com/graphql | |
done | |
- name: Post result | |
if: ${{ always() && steps.report.outputs.has }} | |
uses: actions/github-script@v4 | |
with: | |
script: | | |
const fs = require("fs").promises; | |
var cbody = await fs.readFile("/var/tmp/report.md", "utf8"); | |
github.issues.createComment({ | |
issue_number: context.issue.number, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
body: cbody | |
}) | |
- name: Upload big result | |
if: ${{ always() && steps.report.outputs.commit }} | |
uses: actions/upload-artifact@v2 | |
with: | |
name: pkgcheck-report-${{ steps.report.outputs.commit }} | |
path: /var/tmp/report.txt |