Skip to content

feat/ add dev team membership for contributor action #53

feat/ add dev team membership for contributor action

feat/ add dev team membership for contributor action #53

Workflow file for this run

name: Python Package - Contributor
on:
pull_request:
branches:
- main
jobs:
check-author:
runs-on: ubuntu-20.04
outputs:
proceed: ${{ steps.check-author.outputs.proceed }}
steps:
- name: Check if PR author or actor is in Developers team
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ORG: "pyupio"
TEAM: "developers"
PR_AUTHOR: ${{ github.event.pull_request.user.login }}
ACTOR: ${{ github.actor }}
run: |
check_membership() {
local user=$1
# Fetch membership details from GitHub API
RESPONSE=$(curl -s -H "Authorization: Bearer $GITHUB_TOKEN" \
"https://api.github.com/orgs/$ORG/teams/$TEAM/memberships/$user")
# Validate API response and check membership status
if [ -z "$RESPONSE" ]; then
echo "Error: No response received from GitHub API. Please check your token or API settings." >&2
return 2
fi
# Use jq to parse and validate the response
if echo "$RESPONSE" | jq -e '.state == "active"' > /dev/null 2>&1; then
echo "proceed=true" >> $GITHUB_ENV
return 0
elif echo "$RESPONSE" | jq -e '.message == "Not Found"' > /dev/null 2>&1; then
echo "Error: Team or organization not found. Please verify ORG and TEAM names." >&2
return 2
else
echo "$user is NOT a member of the $TEAM team."
return 1
fi
}
# Main logic for checking PR author membership
echo "Checking PR author: $PR_AUTHOR"
if check_membership "$PR_AUTHOR"; then
echo "PR author $PR_AUTHOR is confirmed as a member of the $TEAM team."
else
echo "proceed=false" >> $GITHUB_ENV
fi
test:
needs: check-author
if: needs.check-author.outputs.proceed == 'true'
runs-on: ubuntu-20.04
strategy:
matrix:
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"]
steps:
- name: Debug event payload
run: |
echo "Fork: ${{ github.event.pull_request.head.repo.fork }}"
echo "Author Association: ${{ github.event.pull_request.author_association }}"
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r test_requirements.txt
- name: Run tests with pytest
run: |
pytest --cov=./ --cov-report=xml
build-binaries:
needs: test
if: needs.check-author.outputs.proceed == 'true'
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: ['windows-latest', 'ubuntu-20.04', 'macos-latest']
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.13'
- name: Install Dependencies
run: |
python -m pip install --upgrade pip
python binaries.py install
- name: Test Binaries
run: python binaries.py test
- name: Build Binaries
run: python binaries.py dist
- uses: actions/upload-artifact@v4
with:
name: ${{ matrix.os }}-binary
path: dist/
if-no-files-found: error