-
Notifications
You must be signed in to change notification settings - Fork 53
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
922f81e
commit 9764e74
Showing
2 changed files
with
181 additions
and
0 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
name: Run pydoctor_primer | ||
|
||
on: | ||
# Only run on PR, since we diff against master | ||
pull_request: | ||
paths-ignore: | ||
- 'pydoctor/test/**' | ||
- 'docs/**' | ||
- '*.rst' | ||
- '*.txt' | ||
- '*.in' | ||
- '*.md' | ||
- '.*' | ||
- 'setup.py' | ||
|
||
permissions: | ||
contents: read | ||
|
||
concurrency: | ||
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | ||
cancel-in-progress: true | ||
|
||
jobs: | ||
pydoctor_primer: | ||
name: Run pydoctor_primer | ||
runs-on: ubuntu-latest | ||
permissions: | ||
contents: read | ||
strategy: | ||
matrix: | ||
shard-index: [0, 1, 2, 3, 4] | ||
fail-fast: false | ||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
path: pydoctor_to_test | ||
fetch-depth: 0 | ||
- uses: actions/setup-python@v4 | ||
with: | ||
python-version: "3.11" | ||
- name: Install dependencies | ||
run: | | ||
python -m pip install -U pip | ||
pip install git+https://github.com/tristanlatr/pydoctor_primer.git | ||
- name: Run pydoctor_primer | ||
shell: bash | ||
run: | | ||
cd pydoctor_to_test | ||
echo "new commit" | ||
git rev-list --format=%s --max-count=1 $GITHUB_SHA | ||
MERGE_BASE=$(git merge-base $GITHUB_SHA origin/$GITHUB_BASE_REF) | ||
git checkout -b base_commit $MERGE_BASE | ||
echo "base commit" | ||
git rev-list --format=%s --max-count=1 base_commit | ||
echo '' | ||
cd .. | ||
# fail action if exit code isn't zero or one | ||
( | ||
pydoctor_primer \ | ||
--repo pydoctor_to_test \ | ||
--new $GITHUB_SHA --old base_commit \ | ||
--num-shards 5 --shard-index ${{ matrix.shard-index }} \ | ||
--debug \ | ||
--output concise \ | ||
| tee diff_${{ matrix.shard-index }}.txt | ||
) || [ $? -eq 1 ] | ||
- name: Upload pydoctor_primer diff | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
name: pydoctor_primer_diffs | ||
path: diff_${{ matrix.shard-index }}.txt | ||
- if: ${{ matrix.shard-index }} == 0 | ||
name: Save PR number | ||
run: | | ||
echo ${{ github.event.pull_request.number }} | tee pr_number.txt | ||
- if: ${{ matrix.shard-index }} == 0 | ||
name: Upload PR number | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
name: pydoctor_primer_diffs | ||
path: pr_number.txt |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
name: Comment with pydoctor_primer diff | ||
|
||
on: | ||
workflow_run: | ||
workflows: | ||
- Run pydoctor_primer | ||
types: | ||
- completed | ||
|
||
permissions: | ||
contents: read | ||
pull-requests: write | ||
|
||
jobs: | ||
comment: | ||
name: Comment PR from pydoctor_primer | ||
runs-on: ubuntu-latest | ||
if: ${{ github.event.workflow_run.conclusion == 'success' }} | ||
steps: | ||
- name: Download diffs | ||
uses: actions/github-script@v6 | ||
with: | ||
script: | | ||
const fs = require('fs'); | ||
const artifacts = await github.rest.actions.listWorkflowRunArtifacts({ | ||
owner: context.repo.owner, | ||
repo: context.repo.repo, | ||
run_id: ${{ github.event.workflow_run.id }}, | ||
}); | ||
const [matchArtifact] = artifacts.data.artifacts.filter((artifact) => | ||
artifact.name == "pydoctor_primer_diffs"); | ||
const download = await github.rest.actions.downloadArtifact({ | ||
owner: context.repo.owner, | ||
repo: context.repo.repo, | ||
artifact_id: matchArtifact.id, | ||
archive_format: "zip", | ||
}); | ||
fs.writeFileSync("diff.zip", Buffer.from(download.data)); | ||
- run: unzip diff.zip | ||
- run: | | ||
cat diff_*.txt | tee fulldiff.txt | ||
- name: Post comment | ||
id: post-comment | ||
uses: actions/github-script@v6 | ||
with: | ||
github-token: ${{ secrets.GITHUB_TOKEN }} | ||
script: | | ||
const MAX_CHARACTERS = 30000 | ||
const MAX_CHARACTERS_PER_PROJECT = MAX_CHARACTERS / 3 | ||
const fs = require('fs') | ||
let data = fs.readFileSync('fulldiff.txt', { encoding: 'utf8' }) | ||
function truncateIfNeeded(original, maxLength) { | ||
if (original.length <= maxLength) { | ||
return original | ||
} | ||
let truncated = original.substring(0, maxLength) | ||
// further, remove last line that might be truncated | ||
truncated = truncated.substring(0, truncated.lastIndexOf('\n')) | ||
let lines_truncated = original.split('\n').length - truncated.split('\n').length | ||
return `${truncated}\n\n... (truncated ${lines_truncated} lines) ...` | ||
} | ||
const projects = data.split('\n\n') | ||
// don't let one project dominate | ||
data = projects.map(project => truncateIfNeeded(project, MAX_CHARACTERS_PER_PROJECT)).join('\n\n') | ||
// posting comment fails if too long, so truncate | ||
data = truncateIfNeeded(data, MAX_CHARACTERS) | ||
console.log("Diff from pydoctor_primer:") | ||
console.log(data) | ||
let body | ||
if (data.trim()) { | ||
body = 'Diff from [pydoctor_primer](https://github.com/tristanlatr/pydoctor_primer), showing the effect of this PR on open source code:\n```diff\n' + data + '```' | ||
} else { | ||
body = "According to [pydoctor_primer](https://github.com/tristanlatr/pydoctor_primer), this change doesn't affect type check results on a corpus of open source code. ✅" | ||
} | ||
const prNumber = parseInt(fs.readFileSync("pr_number.txt", { encoding: "utf8" })) | ||
await github.rest.issues.createComment({ | ||
issue_number: prNumber, | ||
owner: context.repo.owner, | ||
repo: context.repo.repo, | ||
body | ||
}) | ||
return prNumber | ||
- name: Hide old comments | ||
# v0.4.0 | ||
uses: kanga333/comment-hider@c12bb20b48aeb8fc098e35967de8d4f8018fffdf | ||
with: | ||
github_token: ${{ secrets.GITHUB_TOKEN }} | ||
leave_visible: 1 | ||
issue_number: ${{ steps.post-comment.outputs.result }} |