Skip to content

JSON stats safe loading #46

JSON stats safe loading

JSON stats safe loading #46

name: pr-check-with-pylint
on:
pull_request:
types: [opened, synchronize, reopened]
workflow_dispatch:
jobs:
pylint:
runs-on: ubuntu-latest
env:
ISSUES_URL: "https://api.github.com/repos/supervisely/issues/issues"
PROJECT_NUMBER: "2"
TODO_NAME: "🚀 Todo (now!)"
STATUS_FIELD_ID: ""
STATUS_ID: ""
ISSUE_NODE_ID: ""
ITEM_TO_MOVE: ""
ORG_PROJECT_ID: ""
ORG_LOGIN: "supervisely"
ERRORS_DETECTED: false
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
repository: ${{ github.repository }}
token: ${{ secrets.PYLINT_TOKEN }}
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: 3.8
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install python-all-dev libboost-python-dev libexiv2-dev
sudo ln -s /usr/lib/x86_64-linux-gnu/libboost_python310.so /usr/lib/x86_64-linux-gnu/libboost_python38.so
pip install --upgrade pip
pip install pylint
pip install -r requirements.txt
- name: Run check with pylint
run: |
export PYTHONPATH=$PYTHONPATH:$PWD/agent/
pylint_output=$(pylint --ignore-patterns=".*\.json$|.*\.gitignore$" "agent") || true
if [[ $pylint_output == *"E"* ]] || [[ $pylint_output == *"F"* ]]; then
# Save pylint output to a file
echo "$pylint_output" > pylint_errors.txt
echo "ERRORS_DETECTED=true" >> $GITHUB_ENV
else
echo "ERRORS_DETECTED=false" >> $GITHUB_ENV
fi
id: pylint
- name: Fail if pylint errors detected
if: ${{ env.ERRORS_DETECTED == 'true' }}
run: |
issue_body=$(cat pylint_errors.txt)
echo "Pylint Errors: $issue_body"
echo "RESULT=failure" >> $GITHUB_ENV
exit 1
# - name: Create GitHub issue
# run: |
# if [[ "${{ env.ERRORS_DETECTED }}" == "true" ]]; then
# issue_body=$(cat pylint_errors.txt)
# echo "Issue body: $issue_body"
# json=$(jq -n \
# --arg title "Pylint Errors for ${{ github.event_name }} #${{ github.event.release.tag_name }} at $(date -u +'%Y-%m-%d %H:%M') UTC+0" \
# --arg body "$issue_body" \
# --argjson assignees '["${{ github.actor }}"]' \
# --argjson labels '["bug", "pylint", "agent"]' \
# '{title: $title, body: $body, assignees: $assignees, labels: $labels}')
# issue_response=$(curl -X POST -H "Accept: application/vnd.github+json" \
# -H "Authorization: Bearer ${{ secrets.PYLINT_TOKEN }}" \
# -H "X-GitHub-Api-Version: 2022-11-28" \
# ${{ env.ISSUES_URL }} \
# -d "$json"
# )
# echo "GitHub response: $issue_response"
# issue_url=$(echo "$issue_response" | jq -r '.html_url')
# echo "issue_url=$issue_url" >> $GITHUB_ENV
# issue_node_id=$(echo "$issue_response" | jq -r '.node_id')
# echo "ISSUE_NODE_ID=$issue_node_id" >> $GITHUB_ENV
# else
# echo "No pylint errors detected."
# fi
# - name: Get Project ID
# if: ${{ env.ERRORS_DETECTED == 'true' }}
# run: |
# org_login=${{ env.ORG_LOGIN }}
# project_number=${{ env.PROJECT_NUMBER }}
# response=$(curl -X POST \
# -H "Authorization: Bearer ${{ secrets.PYLINT_TOKEN }}" \
# -H "Content-Type: application/json" \
# -d '{
# "query": "query getProjectID($org_login: String!, $project_number: Int!) { organization(login: $org_login) { projectV2(number: $project_number) { id } } }",
# "variables": {
# "org_login": "${{ env.ORG_LOGIN }}",
# "project_number": ${{ env.PROJECT_NUMBER }}
# }
# }' \
# https://api.github.com/graphql)
# echo "Response from GitHub API: $response"
# project_id=$(echo "$response" | jq -r '.data.organization.projectV2.id')
# echo "Organization Project ID: $project_id"
# echo "ORG_PROJECT_ID=$project_id" >> $GITHUB_ENV
# - name: Get Status Field ID and Status ID
# if: ${{ env.ERRORS_DETECTED == 'true' }}
# run: |
# response=$(curl -X POST \
# -H "Authorization: Bearer ${{ secrets.PYLINT_TOKEN }}" \
# -H "Content-Type: application/json" \
# --data-raw '{
# "query": "query getProjectFields($projectId: ID!) { node(id: $projectId) { ... on ProjectV2 { fields(first: 100) { nodes { ... on ProjectV2Field { id dataType name } ... on ProjectV2IterationField { id name dataType configuration { iterations { startDate id } } } ... on ProjectV2SingleSelectField { id name dataType options { id name } } } } } } }",
# "variables": {
# "projectId": "${{ env.ORG_PROJECT_ID}}"
# }
# }' \
# https://api.github.com/graphql)
# echo "Response from GitHub API: $response"
# status_field_id=$(echo "$response" | jq -r '.data.node.fields.nodes[] | select(.name == "Status") | .id')
# status_id=$(echo "$response" | jq -r '.data.node.fields.nodes[] | select(.name == "Status") | .options[] | select(.name == "${{ env.TODO_NAME }}") | .id')
# echo "STATUS_FIELD_ID=$status_field_id" >> $GITHUB_ENV
# echo "STATUS_ID=$status_id" >> $GITHUB_ENV
# echo "Status Field ID: $status_id"
# echo "Todo ID: $todo_id"
# - name: Add Issue to project
# if: ${{ env.ERRORS_DETECTED == 'true' }}
# run: |
# issue_id=${{ env.ISSUE_NODE_ID }}
# project_id=${{ env.ORG_PROJECT_ID }}
# item_id=$(curl -X POST -H "Authorization: Bearer ${{ secrets.PYLINT_TOKEN }}" \
# -H "Accept: application/vnd.github.v3+json" \
# https://api.github.com/graphql \
# -d @- <<EOF | jq -r '.data.addProjectV2ItemById.item.id'
# {
# "query": "mutation {
# addProjectV2ItemById(input: {
# contentId: \"$issue_id\",
# projectId: \"$project_id\"
# }) {
# item {
# id
# project {
# title
# }
# }
# }
# }"
# }
# EOF
# )
# echo "Item ID: $item_id"
# echo "ITEM_TO_MOVE=$item_id" >> $GITHUB_ENV
# - name: Move issue to Todo column
# if: ${{ env.ERRORS_DETECTED == 'true' }}
# run: |
# curl -X POST -H "Authorization: Bearer ${{ secrets.PYLINT_TOKEN }}" -H "Content-Type: application/json" -d '{
# "query": "mutation { set_status: updateProjectV2ItemFieldValue(input: { projectId: \"${{ env.ORG_PROJECT_ID }}\", itemId: \"${{env.ITEM_TO_MOVE}}\", fieldId: \"${{ env.STATUS_FIELD_ID}}\", value: { singleSelectOptionId: \"${{ env.STATUS_ID }}\" } }) { projectV2Item { id } } }"
# }' https://api.github.com/graphql