PyAr / pyafipws

Interfases, tools and apps for Argentina's gov't. webservices (soap, com/dll simil-ocx, pdf, dbf, xml, json, etc.) #python
https://github.com/PyAr/pyafipws/wiki/PyAr-PSF-GSoC-2019-Final-Summary
GNU Lesser General Public License v3.0
2 stars 15 forks source link

Baivab updated python-package.yml #145

Open baivab85 opened 9 months ago

baivab85 commented 9 months ago

Summary

##The issue was :

We need a new GitHub Action workflow to automatically publish this package to PyPI (Python Package Index)

This will be useful for other project, to ease their installation.

The GitHub Action pypa/gh-action-pypi-publish could be easily added to .github//workflows/python-package.yml:

- name: Publish distribution šŸ“¦ to Test PyPI
  uses: pypa/gh-action-pypi-publish@release/v1
  with:
    password: ${{ secrets.TEST_PYPI_API_TOKEN }}
    repository_url: https://test.pypi.org/legacy/

This action should only run if secrets.TEST_PYPI_API_TOKEN is configured

Checklist

Ans:

My Logic and implementation details are the following:

The YAML file is a GitHub Actions workflow for a Python package. The workflow is triggered on push and pull request events to the main branch. It includes several jobs that are run on the latest version of Ubuntu.

The jobs in the workflow include:

Setting up Python: The versions used are 3.9 and 3.11.

Installing pip: The latest version of pip is installed.

Installing dependencies: This includes upgrading setuptools, wheel, and twine. If there are any requirements specified in requirements.txt or requirements-dev.txt, those are installed as well.

Building the package: The Python package is built using setup.py.

Publishing the distribution to PyPI: The built package is published to PyPI using a token for authentication.

Publishing the distribution to Test PyPI: If a token for Test PyPI is available, the package is also published there.

Testing with pytest: Tests are run using pytest, and a HTML report is generated.

Uploading the test report: The test report is uploaded as an artifact.

Generating a coverage report: A coverage report is generated using pytest and a configuration file.

Uploading the coverage report: The coverage report is uploaded as an artifact.

This workflow ensures that the Python package is properly built and tested and that the distribution is published to PyPI and Test PyPI. It also provides test and coverage reports for further analysis.

The Issue was assigned to me by Nico Sir.

Process to test the code:

The code provided in the context is a GitHub Actions workflow for a Python project. It includes steps for setting up Python, installing dependencies, building the package, publishing the package to PyPI and Test PyPI, and running tests with pytest.

Here are the steps to test the code:

Write our tests: The tests should be written in a separate file (or files) using a testing framework like pytest. The context suggests that the tests are located in a directory named tests/.

Run the tests: In the workflow, the tests are run with the command pytest --html=report.html --self-contained-html. This command runs the tests and generates a HTML report.

Check the test report: After the tests are run, the report is uploaded as an artifact with the name report.html. We can download this report from the GitHub Actions tab in your repository to check the results of the tests.

Check the coverage report: The workflow also includes a step to generate a coverage report with the command pytest --cov-config=.coveragerc --cov-report=html --cov=pyafipws tests/. This command generates a coverage report that shows how much of my code is covered by the tests. The coverage report is also uploaded as an artifact with the name Coverage_Report.

The Code is:

runs-on: ubuntu-latest
strategy:
  fail-fast: false
  matrix:
    python-version: [3.9, 3.11]

steps:
- uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
  uses: actions/setup-python@v2
  with:
    python-version: ${{ matrix.python-version }}
- name: Install pip
  run: python -m pip install --upgrade pip
- name: Install dependencies
  run: |
    python -m pip install --upgrade setuptools wheel twine
    if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
    if [ -f requirements-dev.txt ]; then pip install -r requirements-dev.txt; fi
- name: Build package
  run: python setup.py sdist bdist_wheel
- name: Publish distribution šŸ“¦ to PyPI
  uses: pypa/gh-action-pypi-publish@master
  with:
    user: __token__
    password: ${{ secrets.PYPI_API_TOKEN }}
- name: Publish distribution šŸ“¦ to Test PyPI
  if: secrets.TEST_PYPI_API_TOKEN != ''
  uses: pypa/gh-action-pypi-publish@release/v1
  with:
    user: __token__
    password: ${{ secrets.TEST_PYPI_API_TOKEN }}
    repository_url: https://test.pypi.org/legacy/
- name: Test with pytest
  run: |
    pytest --html=report.html --self-contained-html
- name: Upload test report
  uses: actions/upload-artifact@v2
  if: ${{ always() }}
  with:
    name: report.html
    path: report.html
- name: Coverage Report
  run: |
    pytest --cov-config=.coveragerc --cov-report=html --cov=pyafipws tests/
- name: Upload coverage report
  uses: actions/upload-artifact@v2
  if: ${{ always() }}
  with:
    name: Coverage_Report
    path: htmlcov