Skip to content

Bump actions/checkout from 3.0.2 to 4.2.1 #22

Bump actions/checkout from 3.0.2 to 4.2.1

Bump actions/checkout from 3.0.2 to 4.2.1 #22

Workflow file for this run

# Most of this is inspired by the mypy primer
# See: https://github.com/hauntsaninja/mypy_primer
# This is the primer job that runs on every PR
name: Primer / Run
on:
pull_request:
paths:
- "pylint/**"
- "tests/primer/**"
- "requirements*"
- ".github/workflows/**"
# We ignore these specific files because they need to be changed
# on 'main' and will always fail the PR run.
- "!.github/workflows/primer_run_main.yaml"
- "!.github/workflows/primer_comment.yaml"
- "!tests/primer/packages_to_prime.json"
branches-ignore:
- "maintenance/**"
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
env:
CACHE_VERSION: 20
jobs:
run-primer:
name: Run / ${{ matrix.python-version }}
runs-on: ubuntu-latest
timeout-minutes: 120
strategy:
matrix:
python-version: ["3.7", "3.10"]
steps:
- name: Check out code from GitHub
uses: actions/[email protected]
with:
fetch-depth: 0
- name: Set up Python ${{ matrix.python-version }}
id: python
uses: actions/[email protected]
with:
python-version: ${{ matrix.python-version }}
- uses: actions/setup-node@v3
with:
node-version: 16
- run: npm install @octokit/rest
- name: Get latest astroid commit
id: get-astroid-sha
run: |
curl https://api.github.com/repos/PyCQA/astroid/commits |
python -c "import json, sys; print(json.load(sys.stdin)[0]['sha'])" > astroid_sha.txt
# Restore cached Python environment
- name: Generate partial Python venv restore key
id: generate-python-key
run: >-
echo "::set-output name=key::venv-${{ env.CACHE_VERSION }}-${{
hashFiles('setup.cfg', 'requirements_test.txt', 'requirements_test_min.txt',
'astroid_sha.txt') }}"
- name: Restore Python virtual environment
id: cache-venv
uses: actions/[email protected]
with:
path: venv
key: >-
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
steps.generate-python-key.outputs.key }}
restore-keys: |
${{ runner.os }}-${{ steps.python.outputs.python-version }}-venv-${{ env.CACHE_VERSION }}-
- name: Create Python virtual environment
if: steps.cache-venv.outputs.cache-hit != 'true'
run: |
python -m venv venv
. venv/bin/activate
python -m pip install -U pip setuptools wheel
pip install -U -r requirements_test.txt
# Use bleeding-edge astroid
pip install git+https://github.com/PyCQA/astroid.git
# Cache primer packages
- name: Download last 'main' run info
id: download-main-run
uses: actions/github-script@v6
with:
script: |
// Download 'main' pylint output
const fs = require('fs');
const { Octokit } = require("@octokit/rest");
const octokit = new Octokit({});
const runs = await octokit.rest.actions.listWorkflowRuns({
owner: context.repo.owner,
repo: context.repo.repo,
workflow_id: ".github/workflows/primer_run_main.yaml",
status: "success"
});
const lastRunMain = runs.data.workflow_runs.reduce(function(prev, current) {
return (prev.run_number > current.run_number) ? prev : current
})
console.log("Last run on main:")
console.log(lastRunMain.html_url)
const artifacts_main = await github.rest.actions.listWorkflowRunArtifacts({
owner: context.repo.owner,
repo: context.repo.repo,
run_id: lastRunMain.id,
});
// Get commitstring
const [matchArtifactMain] = artifacts_main.data.artifacts.filter((artifact) =>
artifact.name == "primer_commitstring");
const downloadWorkflow = await github.rest.actions.downloadArtifact({
owner: context.repo.owner,
repo: context.repo.repo,
artifact_id: matchArtifactMain.id,
archive_format: "zip",
});
fs.writeFileSync("primer_commitstring.zip", Buffer.from(downloadWorkflow.data));
// Get output
const [matchArtifactMainOutput] = artifacts_main.data.artifacts.filter((artifact) =>
artifact.name == "primer_output");
const downloadWorkflowTwo = await github.rest.actions.downloadArtifact({
owner: context.repo.owner,
repo: context.repo.repo,
artifact_id: matchArtifactMainOutput.id,
archive_format: "zip",
});
fs.writeFileSync("primer_output_main.zip", Buffer.from(downloadWorkflowTwo.data));
return lastRunMain.head_sha;
- name: Copy and unzip the commit string
run: |
unzip primer_commitstring.zip
cp commit_string.txt tests/.pylint_primer_tests/commit_string.txt
- name: Unzip the output of 'main'
run: unzip primer_output_main.zip
- name: Get commit string
id: commitstring
run: |
. venv/bin/activate
output=$(python tests/primer/__main__.py prepare --read-commit-string)
echo "::set-output name=commitstring::$output"
- name: Restore projects cache
id: cache-projects
uses: actions/[email protected]
with:
path: tests/.pylint_primer_tests/
key: >-
${{ runner.os }}-${{ matrix.python-version }}-${{
steps.commitstring.outputs.commitstring }}-primer
- name: Check cache
run: |
. venv/bin/activate
python tests/primer/__main__.py prepare --check
# Merge the 'main' commit of last successful run
- name: Pull 'main'
shell: bash
run: |
git config --global user.email "[email protected]"
git config --global user.name "Pylint Primer"
git pull origin ${{ steps.download-main-run.outputs.result }} --no-edit --no-commit --no-rebase
# Run primer
- name: Run pylint primer
run: |
. venv/bin/activate
pip install -e .
python tests/primer/__main__.py run --type=pr 2>warnings.txt
WARNINGS=$(head -c 65000 < warnings.txt)
if [[ $WARNINGS ]]
then echo "::warning ::$WARNINGS"
fi
- name: Upload output of PR
uses: actions/upload-artifact@v3
with:
name: primer_output_pr
path:
tests/.pylint_primer_tests/output_${{ steps.python.outputs.python-version
}}_pr.txt
- name: Upload output of 'main'
uses: actions/upload-artifact@v3
with:
name: primer_output_main
path: output_${{ steps.python.outputs.python-version }}_main.txt
# Save PR number so we know which PR to comment on
- name: Save PR number
run: |
echo ${{ github.event.pull_request.number }} | tee pr_number.txt
- name: Upload PR number
uses: actions/upload-artifact@v3
with:
name: pr_number
path: pr_number.txt